Skip to content
目录

utils 模块函数

adaptive

作用:页面的适配。

如:字段转换、校验;获取页面元素的高度等。

ts
// template
adaptive.getNotNull(item.params)
// output: params or --

interaction

作用:页面上的交互需求。

如:统一处理loadingmodaltoast等样式和默认值;另外含有节流和防抖控制、同步初始化函数

项目初始化函数 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()
  })
}

项目中调用

使用在 onLoadonShow 都可,调用后使用 then 即可

注意

由于 uniappsetup 中不支持使用 async await ,多层嵌套使用 promise 容易导致回调地狱。

ts
onShow(() => {
  interaction.getLaunchSync(store).then(() => {
    setDept().catch(err => console.error('获取科室失败'))
  })
})

作用: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

作用

  1. 封装 uni.request 方法,返回 promise 对象,方便处理成功与失败的回调;
  2. 统一处理的模块包括:超过 300 毫秒的请求提示、日志输出美化(方便小程序调试)、登录授权的控制

valid

作用

好大夫互联网科技(广州)有限公司.