更新记录

1.0.0(2021-06-10)

初始化项目


平台兼容性

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

f-uni-app

一套兼容多端(APP、小程序、H5)的uniapp开发架构,里面集成了基础架构内容,集成 uview框架uni-simple-router路由管理scss基础样式库vuex模块化layout组件全局js工具函数scss变量和主题 config全局配置等一系列基础内容,直接上手业务开发,不需要或尽量少的考虑架构的设计。


运行项目

先安装依赖,再启动
npm install


uview组件库

f-uni-app采用uview作为基础组件库,尽管uview仍有一些问题需要解决,但不可否认uview的优秀和全面,架构里已经做好了全局使用uview组件的工作, 开发的时候只需要在页面中直接使用uview组件即可

uview文档


uni-simple-router路由管理

uniapp中的路由管理并不友好,f-uni-app采用uni-simple-router插件作为路由管理工具,该工具保持了vue-router的使用风格,对从事vue开发的程序员相当友好, 我在项目里,除了对uni-simple-router进行基础的导入外,还额外做了一些功能上的调整:

1、app无后退页面时双击退出,可以在router.js对这段逻辑进行修改,参考APP退出

2、router对象可以配置desc、meta字段,可以在pages.json中查看配置,这在路由鉴权时可能会用到

3、在main.js中引入 组件,文档参考 组件式导航

其他用法请参考:uni-simple-router文档


基础样式库

f-uni-app内置了css的基础样式库,对常用的css进行抽离,由于文档过长,样式库文档单独放到项目根目录的STYLE.md文件中


vuex模块化

f-uniapp已经启用了vuex,你可以在store编写自己的vuex代码,其中modules/ui.js为架构中的vuex模块,请不要修改这里的代码,否则会导致 f-layout组件和全局工具类部分功能的报错。

复杂项目推荐使用vuex的命名空间模块化,具体用法可以参考vuex官方文档 vuex模块化


自定义全局组件

f-layout 页面基础组件

props

属性名 含义 属性类型 默认值 可选值 补充
error 页面是否发生重要错误 Boolean 错误提示会覆盖内容,可点击重新加载
error-text 页面重大错误提示文字 String 获取失败,点击重试 error为true时可用
show-header 是否显示头部导航 Boolean true 设置为false后,navbar和header插槽都不可用,但顶部会保留沉浸式高度
title 导航栏标题 String showHeader = true 时可用
show-back 是否显示导航返回按钮 Boolean true showHeader = true 时可用
is-back 点击导航左侧是否返回上一页 Boolean true showHeader = true 时可用
header-type 导航栏类型 String theme: 主题色导航背景 showHeader = true 时可用,不设置时,背景透明,文字颜色使用默认;指定为theme时,背景颜色为$themeColor变量,字体颜色为$reverseColor变量
right-text 导航右侧文字 String showHeader = true && $slots['header-right'] 时可用,小程序不支持
title-width 导航标题的宽度 Number 300 rpx单位
greyBg 页面是否为灰色背景 Boolean true 为false时,页面为白色
border 是否显示导航底部边框 Boolean

event

事件名 触发时机 形参 说明
clickRight 点击右侧导航按钮时 rightText存在时才会触发,小程序端不支持
back 点击导航左侧按钮时触发 如果isBack属性为true,则不会触发
clickError 页面错误时,点击重新加载按钮 当error属性为true时才可能被触发

slot

名字 含义
- 页面内容
header 头部导航部分,如果slot内容为 u-navbar ,需要设置showHeader为false
header-right 头部导航右侧内容,小程序端不支持
header-left 头部导航左侧内容
header-title 头部导航标题

其他说明

f-layout是页面的基础组件,该组件处理了手机状态栏的高度,内置了自定义navbar、toast、modal、loading等组件

所有页面必须在该组件下编写代码


scss变量与主题

f-uni-app保留了uni.scss文件,另外在文件中新增了几个scss变量,你可以自由更改,但是不要删除,因为架构中已经有地方用到该变量了

$theme-color: '#007aff'; /* 程序主题色 */
$reverse-color: '#007aff'; /* 程序主题反色 */

对于uview组件的主题修改,可以参考uview官方说明: uview自定义主题


项目配置(全局静态变量)

通过 this.$config 读取项目配置的变量,非页面上获取配置,可以通过import 导入config

文件夹对应 config/index.js

比如你的app标题,可能在页面中很多地方需要显示,如果在写代码时全部写死在页面,那当有改动的时候,可能需要改动很多文件,因此,将这些公用的静态的变量抽成配置会是比较好的方法。

同时,主题颜色的配置也存在与config中,如果修改主题颜色,不仅 uni.scss文件中的scss变量要改,config中的js变量也要修改(这是因为使用组件时,也可能需要获取主题颜色变量)


全局js工具类

工具类在 plugins/tools.js 中,使用vue插件的方式进行全局挂载,其中一部分工具类取之uview,另外一部分则是和组件相关,请注意阅读文档

$toast

显示页面toast,页面使用 f-layout 组件时可用,toast使用的是uview的toast组件,函数的参数对应组件属性的说明

uview Toast组件

// toast支持两种参数传递方式

// 1、多参数
$toast = function(title = "",type="default",duration,position,url,icon) {

}

// 2、单参数
$toast = function(config) {
    // config = {
    //  title = "",type="default",duration,position,url,icon
    //}
}

$loading

是否显示页面loading,页面使用 f-layout 组件时可用,loading使用的是f-loading组件,可以修改f-loading已达到项目设计要求

$loading = function(isShow = true) {

}

this.$loading(); // 显示loading
this.$loading(false); // 关闭loading

$modal

显示页面弹窗,显示页面toast,页面使用 f-layout 组件时可用,modal使用的是uview的modal组件, 调用$modal函数主要是简单统一的弹窗,如果有其他需求,建议在页面中使用u-model实现或另外封装

参数含义对应u-model组件的props,其中type是我自己新增的, type只决定确认按钮的文字颜色,可选参数为:primary、error、success、info、warning,对应uview中的主题色

你可以设置 confirmText = false 来取消确认按钮

uview modal组件

// modal支持两种参数传递方式

// 1、多参数
$modal = function(content, title, type, cancelText, confirmText) {

}

// 2、单参数
$modal = function(config) {
    // config = {
    //  content, title, type, cancelText, confirmText
    //}
}

继承uview的工具函数

Vue.prototype.$throttle = Vue.prototype.$u.throttle; /* 防抖*/
Vue.prototype.$debounce = Vue.prototype.$u.debounce; /* 节流*/
Vue.prototype.$deepClone = Vue.prototype.$u.deepClone; /* 深度拷贝*/
Vue.prototype.$deepMerge = Vue.prototype.$u.deepMerge; /* 深度合并*/
Vue.prototype.$timeFormat = Vue.prototype.$u.timeFormat; /* 时间格式化*/
Vue.prototype.$queryParams = Vue.prototype.$u.queryParams; /* 对象转URL参数 */
Vue.prototype.$test = Vue.prototype.$u.test; /* 规则校验 */
Vue.prototype.$md5 = md5Libs.md5; /* md5加密 */
Vue.prototype.$random = md5Libs.random; /* 随机数值 */
Vue.prototype.$getRect = md5Libs.getRect; /* 节点布局信息 */

$u中比较常用的函数进行全局挂载,比较方便调用: 其他没有处理的函数,仍可以使用 this.$u.xxx 进行调用

this.$test() // 不需要再 this.$u.test()

请求接口

uview提供了一套请求拦截的方式,可以参考使用: uview 请求

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。

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