更新记录

1.0.1(2023-11-24)

首版发布


平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.5.5 app-vue ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × ×

简介

uniapp快速开发项目模版,支持APP、小程序、H5三端使用。实用工具封装、原型方法扩展、组件、必备页面集成、项目模块化管理,环境切换,助你开发事半功倍。


特性

  • 基于vue2
  • request封装、token校验拦截跳转登录页
  • api统一管理
  • 集成store,模块化管理
  • Object原型新增deepclone方法(深拷贝)
  • Date原型新增format、last、next等常用日期处理方法
  • Vue原型新增路由跳转、路由参数获取、参数支持传递对象形式
  • 集成小程序端授权登录页,支持微信授权和手机号授权登录
  • 集成其他端登录页,支持账号登录和手机验证码登录
  • 集成手机号、邮箱、身份证等常见校验工具
  • 自定义指令限制input输入框输入内容类型限制(小数、整数、字母等)
  • 集成小程序隐私协议检测弹窗组件
  • 集成APP在线升级功能
  • 3端各集成了开发环境、测试环境、生产环境,可根据实际情况进行切换运行或打包
  • 集成高频率css样式,可全局引用或混入使用
  • 集成uview UI库

项目目录

├── api                     // 接口管理
│   └── user.js              // 用户相关接口,例如登录等
├── components             //组件
│   └── privacy-dialog         // 小程序隐私协议弹窗组件
├── config                // 配置文件
│   ├── env.js                  //环境配置
│   └── request.js              // 接口请求配置
├── directive             //自定义指令
│   └── input                // 输入限制指令
├──pages                     //页面
│   ├── common                // 公共页面
│   │   ├── upgrade                // 升级中心
│   │   ├── login.vue                // 小程序登录页
│   │   └── login2.vue                // 其他端登录页
│   └── index                // 首页
├── store                      //vuex
│   ├── modules                //模块化
│   │   └── user.js                 // 用户相关
│   ├── getters.js             //getters
│   └── index.js               //初始化
├── styles               //样式目录
│   └── common.scss       //公共样式
├── uni_modules                // 插件目录
│   └── uview-ui
├── utils               //工具类
│   ├── prototype                //原型工具
│   │   ├── day.js                 // 日期处理
│   │   ├── deepClone.js                 // 深拷贝
│   │   ├── index.js                // 初始化全局引入文件
│   │   └──router.js              // 路由处理
│   ├──checkVersion.js             //检查app版本更新
│   ├── request.js               //http请求
│   └──validate.js               //格式校验

使用说明

1.Object.deepclone()(深拷贝)

说明:

支持对象、数组(只要原型是Object都能调用)等调用,除了null和undefined其他类型都可调用,无须引入

示例:

              let value = {
                    a: 1,
                    b: [{
                        c: 2,
                        d: 3
                    }],
                    e: () => {},
                    f: undefined,
                    n: null
                }
                console.log(value.deepclone(), '深拷贝')

更多说明点击查看

2.Date日期处理

说明:

快速格式化日期、日期计算等功能,无须引入

示例:

               //日期格式化
                console.log(new Date().format('yyyy-MM'), '今天的年月') //2023-11
                console.log(new Date().format('yyyy-MM-dd'), '今天的日期') //2023-11-24
                //过去日期计算
                console.log(new Date().last(), '昨天日期')
                console.log(new Date().last('day', 10), '10天前日期')
                //将来日期计算
                console.log(new Date().next(), '明天日期')
                console.log(new Date().next('month', 2), '2个月后日期')')
                //计算月份总共多少天
                console.log(new Date().getMonthDays(), '当月天数')
                console.log(new Date('2023-02-01').getMonthDays(), '2023年2月份天数')
                //获取星期几/周几
                console.log(new Date().getWeek(), '今天周几')
                console.log(new Date('2023-11-11').getWeek(), '2023-11-11周几')

更多说明点击查看

3.路由跳转

说明:路由跳转封装在Vue原型上可通过this直接访问,参数支持传递对象

路由跳转:this.$navigateTo() 、this.$redirectTo()
获取参数this.$getRouteParams()

跳转入参:

参数名 类型 说明
url String 页面路由
params Object 路由参数
success Function 成功回调
fail Function 失败回调
complete Function 完成回调
获取参数: 函数名 入参类型 入参说明 作用说明
$getRouteParams Object 生命周期函数onLoad的入参options 把对象字符串路由参数序列号化成对象

示例:

//跳转页:
          this.$navigateTo({
                    url: 'pages/demo/index',
                    params: {
                        name: '小李',
                        age: 10,
                        isStudent: true,
                        score: [{
                            label: '数学',
                            value: 60
                        }, {
                            label: '英语',
                            value: 90
                        }, {
                            label: '语文',
                            value: 80
                        }]
                    }
                })
//接收页
       onLoad(e) {
            //获取参数
            let params=this.$getRouteParams(e)
            console.log(params.name)//小李
            console.log(params.score)// [{
                                     //    label: '数学',
                                    //     value: 60
                                   //    }, {
                                   //      label: '英语',
                                   //      value: 90
                                   //   }, {
                                 //        label: '语文',
                                 //        value: 80
                                 //     }]
        }

4.v-input(输入框输入内容限制)

说明:通过input标签上设置v-input:[type]自定义指定限制输入类型,比如只能输入正整数、浮点型最多2位小数、只能输入字母等,该功能只支持H5端

指令说明

指令 说明
v-input:num 只能输入数字(开头可以多个零)
v-input:num_point 只能输入数字+小数点(可以多个小数点,开头可以多个零)
v-input:int 只能输入整数(0+正整数)(开头不能多个0)
v-input:intp 只能输入正整数
v-input:float 只能输入浮点型 n:限制输入小数点后n位,默认不限制
v-input:alp 只能输入字母
v-input:num_alp 只能输入数字+字母
v-input:arith 四则运算符+数字

示例:

        <input class="input" v-model="value1" v-input:num placeholder="只能数字" />
        <input class="input" v-model="value2" v-input:num_point placeholder="数字+小数点" />
        <input class="input" v-model="value3" v-input:int placeholder="只能整数" />
        <input class="input" v-model="value4" v-input:intp placeholder="只能正整数" />
        <input class="input" v-model="value5" v-input:float placeholder="浮点型" />
        <input class="input" v-model="value6" v-input:float="2" placeholder="浮点型最多2位小数" />
        <input class="input" v-model="value7" v-input:alp placeholder="只能字母" />
        <input class="input" v-model="value8" v-input:num_alp placeholder="数字+字母" />
        <input class="input" v-model="value9" v-input:arith placeholder="四则运算+-*/()数字" />

动态指令:

<input class="input" v-model="value" v-input:[type] placeholder="只能整数" />
<script >
    export default{
    data(){
       return {
           type:'int'
        }
      }
    }
</script>

5.小程序隐私协议弹窗组件

说明:微信小程序更新后调用某些涉及用户隐私api比如获取用户位置(wx.getLocation)、选择地址(wx.chooseAddress)前需要弹出隐私政策告知用户取得同意后方可正常使用功能,该组件能自动检测是否需要同意并弹出让用户操作。

示例:

<privacy-dialog ref="privacyDialog" />
              this.$refs.privacyDialog.check({
                    //已同意
                    agree: () => {
                        //底下写隐私接口调用逻辑,例如获取位置
                        uni.getLocation({
                            success(e) {
                                console.log(e)
                            }
                        })
                    },
                    //不同意
                    disAgree: () => {
                        console.log('不同意')
                    }
                })

更多说明点击查看

6.APP在线升级

说明:页面级弹窗组件,通过比对线上最新版本号,动态弹出提示用户下载更新,支持强制升级、可选升级、下载进度显示、下载自动安装等功能

示例

import checkVersion from '@/utils/checkVersion.js'
export default{
  onLoad(){
     this.handleUpgrade()
  },
   methods:{
       //app在线升级
            handleUpgrade() {
                //模拟接口请求
                setTimeout(() => {
                    let name = 'V1.2.0'; //新版本名称
                    let code = 10000; //新版本号(数字)
                    let content = `1.新增在线升级功能<br>2.修复若干bug`; //更新内容
                    let url = 'https:xxxxxxxxx'; //app下载链接,(演示请换成真正在下载链接)
                    let forceUpdate = false; //是否强制更新
                    //检查是否需要更新,如需更新自动弹窗
                    checkVersion({
                        name, //最新版本名称
                        code, //最新版本号
                        content, //更新内容
                        url, //下载链接
                        forceUpdate //是否强制升级           
                    })
                }, 200)
            }
    }
}

更多说明点击查看

7.全局样式

说明:一些高频率使用样式集成,支持直接在html 标签class引入或scss include混入使用

名称 说明
flex-row flex横向布局
flex-row-center flex横向居中布局
flex-col flex纵向布局
flex-col-center flex纵向居中布局
position-center 绝对布局居中显示
single-line-ellipsis 文字单行超出省略显示
two-line-ellipsis 文字2行超出省略显示
multiple-line-ellipsis($lineLimit) 文字多行显示,$lineLimit:行数,只支持@include使用
two-line-ellipsis 文字2行超出省略显示
fix-phone-padding-bottom iphone刘海屏安全区域与底部边界的距离设置
fix-phone-padding-top iphone刘海屏安全区域与顶部边界的距离设置
container 页面最外层容器样式

示例:

<!-- flex横向布局-->
<div class="flex-row"></div>
<!-- 文字单行显示-->
<div class="single-line-ellipsis|"></div>
<style lang="scss" scoped>
.box{
  @include flex-col;//flex纵向布局
}
.title{
 @include single-line-ellipsis;//文字单行显示
}
.content{
 @include multiple-line-ellipsis(3);//文字最多3行显示
}
</style>

8.环境变量运行与打包

说明:项目开发规范流程一般需要运行到不同环境进行开发测试后上线,一般涉及到开发环境、测试环境、生产环境三种。 本项目已经内置了APP端、H5端、微信小程序端三种环境设置入口,并通过简单配置或者编辑器菜单命令选择实现不同环境运行和打包。

  • 各环境设置入口文件:@/config/env.js
// h5开发环境
const h5Dev = {
    baseUrl: 'https://devh5.....'
}

// h5测试环境
const h5Test= {
    baseUrl: 'https://testh5.....'

}

// h5生产环境
const h5Prod= {
    baseUrl: 'https://prodh5.....'

}

// 微信小程序开发环境
const mpWeixinDev = {
    baseUrl: 'https://devwx.....'
}
   .
   .
   .
   .

ps:如果env.js对应环境未定义baseUrl值将读取@/config/request.js defaultBaseUrl值作为请求的默认baseUrl

  • 新增6种自定义编译条件(自定义环境变量)(除APP端不支持自定义)

    自定义编译条件:

名称 说明
H5-DEV h5开发环境
H5-TEST h5测试环境
H5-PROD h5生产环境
MP-WEIXIN-DEV 微信小程序开发环境
MP-WEIXIN-TEST 微信小程序测试环境
MP-WEIXIN-PROD 微信小程序生产环境

自定义环境变量:

说明
h5-dev h5开发环境
h5-test h5测试环境
h5-prod h5生产环境
mp-weixin-dev 微信小程序开发环境
mp-weixin-test 微信小程序测试环境
mp-weixin-prod 微信小程序生产环境

全局可通过process.env.ENV_TYPE获取当前运行的自定义环境变量值

  • 运行不同环境:

1.H5端和小程序端通过编辑器菜单-运行-xxxx环境 ps:需要注意的是h5端运行不同环境原理是动态修改manifest.json-h5-devServer-proxy下各个代理target值,需提前写好代理前缀,target值随意写入不可放空值并且manifest.json不能有任何注释不然会编译失败

2.APP端通过配置@/config/request.js appEnv字段值来设置运行或打包的环境

说明
app-dev APP开发环境
app-test APP测试环境
app-prod APP生产环境
  • 打包不同环境:

    1.小程序端通过编辑器菜单-发行--xxxx环境 2.APP端和运行一样通过配置@/config/request.js appEnv字段值来设置打包的环境 3.H5端不管打包选择什么环境默认读取window.location.origin作为接口请求baseUrl。打包文件部署在对应环境服务器即可。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问