更新记录

0.1.1(2026-03-26) 下载此版本

0.11

0.1.0(2026-03-26) 下载此版本

0.1.0


平台兼容性

uni-app(3.8.10)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

licence-plugin 作业票业务插件

基于 uni-app 打造的作业票业务插件,沉淀列表、预览、表单与 service 能力,通过 initLicencePlugin 与宿主解耦网络、鉴权、电子围栏、签字等外部能力,可复用到多个项目。

目录结构

uni_modules/licence-plugin/
├── package.json           # 插件元数据、依赖声明
├── README.md              # 使用说明(当前文件)
├── components/            # vForm、业务组件、按钮、弹窗
├── config/                # 默认 apiMap 等配置
├── pages/                 # licence-list / basic-info / preview 等页面
├── runtime/               # context、初始化及注入入口
├── services/              # licence、person、certificate 等 service 封装
└── utils/                 # 加密、上传、工具函数

功能范围

  • 作业票列表(筛选、分页、按钮操作、更多弹窗)
  • 作业票预览、基础信息等页面插槽
  • initLicencePlugin 运行时上下文及 getLicencePluginContext 调用链
  • service 抽象(生成编号、保存、提交、签批、气体检测、关联作业票等)
  • vForm 容器、区块、字段、字段选择器、数据字典、加密上传等组件

安装方式

  1. uni_modules/licence-plugin 拷贝/拉取到宿主 uni_modules/ 目录,或从插件市场导入。
  2. 在宿主根目录执行:
    npm install uview-ui js-base64 jsrsasign --save

    js-base64jsrsasign 也随插件 package.json 声明,宿主若已全局安装可复用;uview-ui 属于前置 UI 依赖,需宿主自己安装并注册)

  3. 确保 HBuilderX / CLI 版本 ≥ 3.7.0,并已开启 easycom 自动解析与 transpileDependencies: ['uview-ui']

前置依赖

依赖 说明
uview-ui@^2.0 UI 组件库,按钮、弹窗、输入控件均依赖。需宿主 Vue.use 并引入其 theme.scss/index.scss
js-base64, jsrsasign utils/utils/encrypts.js 与上传流程使用,用于签名和 Base64 处理,可按需由宿主或插件提供。
request 封装 通过 initLicencePlugin 注入,插件不会直接引用宿主请求模块。
登录态 (getToken/getUserInfo) 由宿主注入,以便 service 同步登录数据。
业务 service 电子围栏、签字、人员、证书、路由等需在 initLicencePlugin 里注入。

宿主接入步骤

1. 注册 uView

// main.js
import uView from 'uview-ui'
Vue.use(uView)
uni.$u && (uni.$u.config.unit = 'rpx')

uni.scss 引入 @import 'uview-ui/theme.scss';,在 App.vue 引入 @import 'uview-ui/index.scss';,保持与宿主其他页面一致。

2. 配置 easycom & 编译

pages.json 增加:

"easycom": {
  "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
}

并在 vue.config.js 中加入 transpileDependencies: ['uview-ui'],确保 uView 组件在 H5/小程序端被正确构建。

3. 初始化 licence-plugin 上下文

// main.js
import { initLicencePlugin } from '@/uni_modules/licence-plugin/runtime/context'
import request from '@/common/request'

initLicencePlugin({
  request,
  getToken: () => uni.getStorageSync('token'),
  getUserInfo: () => store.state.user,
  apiMap: {
    generateLicenceNo: '/api/operaSafe/licence/generateNo',
    saveLicence: '/api/operaSafe/licence/save'
  },
  fenceService: {
    getFenceInfo: (no) => request({ url: `/api/operaSafe/licence/getFenceInfo/${no}` }),
    checkFence: (payload) => request({ url: '/api/operaSafe/licence/checkFence', method: 'POST', data: payload })
  },
  signService: {
    openSignDialog: () => Promise.resolve(true),
    submitSign: (payload) => request({ url: '/api/sign/submit', method: 'POST', data: payload })
  },
  personService: {
    list: (params) => request({ url: '/api/person/list', method: 'GET', params })
  },
  certificateService: {
    list: (params) => request({ url: '/api/certificate/list', method: 'GET', params })
  },
  showToast: uni.showToast,
  showModal: (opts) => new Promise(resolve => uni.showModal({ ...opts, success: res => resolve(res.confirm) })),
  navigator: { navigateTo: uni.navigateTo, redirectTo: uni.redirectTo }
})
initLicencePlugin 可注入以下能力: 参数 说明
request (必填) 类 axios 实例,需支持 { url, method, data/params }
getToken/getUserInfo 可返回同步/异步值,用于 service 自动附带登录信息。
apiMap 覆盖默认接口地址,参考 config/apiMap.js
fenceService getFenceInfocheckFence 实现电子围栏。
signService openSignDialogsubmitSign 自定义签字逻辑。
personService/certificateService 作业人员、持证信息列表。
formAdapter/hasPermission 自定义表单渲染/权限控制(参见 runtime/context 中类型定义)。
showToast/showModal/navigator 全局 UI 与路由包装。

4. 注册页面

在宿主 pages.json 添加:

{
  "path": "uni_modules/licence-plugin/pages/licence-list/index",
  "style": { "navigationBarTitleText": "作业票列表" }
},
{
  "path": "uni_modules/licence-plugin/pages/licence-preview/index",
  "style": { "navigationBarTitleText": "作业票预览" }
},
{
  "path": "uni_modules/licence-plugin/pages/basic-info/index",
  "style": { "navigationBarTitleText": "作业票基础信息" }
}

其他子页面(如作业票详情、人员调整等)可按需注册或由宿主路由跳转。

5. 业务入口

在菜单或任意页面调起:

uni.navigateTo({ url: '/uni_modules/licence-plugin/pages/licence-list/index' })

业务侧可直接复用 services/ 暴露的方法,例如:

import { fetchLicenceList } from '@/uni_modules/licence-plugin/services/licenceService'
const list = await fetchLicenceList({ pageNum: 1, pageSize: 10 })

前置依赖/注入清单

能力 提供方式 说明
request initLicencePlugin({ request }) 统一网络层,插件内部禁用直接 uni.request(上传除外)。
Token getToken / 宿主自定义 由宿主持久化,插件不会读取具体 key。
Vue.prototype.baseUrl 宿主自行设置 上传/二维码等工具默认读取 Vue.prototype.baseUrl
uview-ui 宿主 npm i & Vue.use 组件渲染所需。
js-base64, jsrsasign npm 依赖 用于签名;若宿主已有,可保持版本一致。
电子围栏/签字/人员/证书 initLicencePlugin 注入 service 未注入时对应功能需做降级处理。

限制 & 注意事项

  1. utils/utils/upload.js 暂依赖宿主的 Vue.prototype.baseUrl 以及 uni.getStorageSync('ty_yxxh_token'),在发布前请根据宿主实现抽象或在 README 中告知替换方式。
  2. 加密模块引用 @/utils/encrypts.js,默认读宿主 alias,如需完全独立可改为插件内路径或通过 context 注入。
  3. 目前仅提供 App/H5 适配,如需小程序版本请在宿主自行验证。
  4. 组件使用 uView UI,宿主需保持 uView 与 uView 主题变量配置一致,否则存在样式差异。
  5. 插件默认语义化接口路径写死在 config/apiMap.js,生产接入时务必覆盖为真实地址。

如需更多方案背景,可参考仓库根目录 docs/licence-plugin-plan.md

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。