Appearance
utils 模块函数
adaptive
作用:页面的适配。
如:字段转换、校验;获取页面元素的高度等。
ts
// template
adaptive.getNotNull(item.params)
// output: params or --
interaction
作用:页面上的交互需求。
如:统一处理loading
、modal
、toast
等样式和默认值;另外含有节流和防抖控制、同步初始化函数
项目初始化函数 getLaunchSync
设计:使用promise.all
处理获取医院信息、规则以及阿波罗自定义配置,三者均成功才算是初始化成功;
成功默认回调getUnionIdByWeixin
统一处理支付宝、微信的登录(由于先适配微信,后改为支持支付宝,故没有更改名字)
ts
/**
* @name 同步处理项目初始化请求
* @description 返回请求后,进行登录操作
* @param {object} store 依赖 vuex
*/
getLaunchSync(store: Store<any>): Promise<void> {
return new Promise((resolve, reject) => {
if (!store.state.onLaunchSync || !store.state.HospitalRules || !store.state.hospitalId) {
store.commit('setOnLaunchSync', { launch: true })
return Promise.all([store.dispatch('getHospitalInfo'), store.dispatch('getHospitalRules'), store.dispatch('getApolloConfig')])
.then(() => {
store
.dispatch('getUnionIdByWeixin')
.then(() => resolve())
.catch(err => reject(err))
})
.catch(err => {
this.showModal({ title: `项目启动异常,需开发人员排查原因:${JSON.stringify(err)}`, showCancel: false })
console.error('致命错误,无法获取医院配置、规则、阿波罗配置', err)
reject(err)
})
}
resolve()
})
}
项目中调用
使用在 onLoad
或 onShow
都可,调用后使用 then
即可
注意
由于 uniapp
在 setup
中不支持使用 async await
,多层嵌套使用 promise
容易导致回调地狱。
ts
onShow(() => {
interaction.getLaunchSync(store).then(() => {
setDept().catch(err => console.error('获取科室失败'))
})
})
navigator
作用:url 跳转控制。
- 由于页面可能会多个页面跳转,使用统一函数控制页面跳转,可过滤和检验参数。
- 被跳转页面多于一个的情况下,建议使用统一跳转管理。
设计理念
参数说明
第一个参数为 url 、第二个为传入参数(类型为对象);详情看 jsdoc 说明
ts
/**
* @name 控制器
* @param {string} url 跳转路径
* @param {object} paramsObject 参数对象
* @param {string} ignores[] 忽略校验的字段
* @param {boolean} showToast 报错弹窗,默认开启
*/
$controller(url: string, paramsObject: { [key: string]: unknown }, ignores: string[] = [], showToast: boolean = true) {
interaction.throttle(
() =>
this.$valid(paramsObject, ignores, url)
.then(newUrl => this.$jump({ url: newUrl[0] }))
.catch(err => this.$showToast(showToast, err)),
500
)()
}
函数内部写法
ts
chooseDate(data: { deptCode: string; deptName: string }) {
const { deptCode, deptName } = data
this.$controller(
`/pages/services/registration/chooseDate`,
{
deptCode,
deptName
},
['deptName']
)
}
页面中调用
ts
// pages.vue
navigation.chooseDate({ deptCode: deptCode.value, deptName: urlParamsDeptName.value })
quest
作用
- 封装
uni.request
方法,返回promise
对象,方便处理成功与失败的回调; - 统一处理的模块包括:超过 300 毫秒的请求提示、日志输出美化(方便小程序调试)、登录授权的控制
valid
作用