更新记录
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 容器、区块、字段、字段选择器、数据字典、加密上传等组件
安装方式
- 将
uni_modules/licence-plugin拷贝/拉取到宿主uni_modules/目录,或从插件市场导入。 - 在宿主根目录执行:
npm install uview-ui js-base64 jsrsasign --save(
js-base64、jsrsasign也随插件package.json声明,宿主若已全局安装可复用;uview-ui属于前置 UI 依赖,需宿主自己安装并注册) - 确保 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 |
getFenceInfo、checkFence 实现电子围栏。 |
|
signService |
openSignDialog、submitSign 自定义签字逻辑。 |
|
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 |
未注入时对应功能需做降级处理。 |
限制 & 注意事项
utils/utils/upload.js暂依赖宿主的Vue.prototype.baseUrl以及uni.getStorageSync('ty_yxxh_token'),在发布前请根据宿主实现抽象或在 README 中告知替换方式。- 加密模块引用
@/utils/encrypts.js,默认读宿主 alias,如需完全独立可改为插件内路径或通过 context 注入。 - 目前仅提供 App/H5 适配,如需小程序版本请在宿主自行验证。
- 组件使用 uView UI,宿主需保持 uView 与
uView主题变量配置一致,否则存在样式差异。 - 插件默认语义化接口路径写死在
config/apiMap.js,生产接入时务必覆盖为真实地址。
如需更多方案背景,可参考仓库根目录 docs/licence-plugin-plan.md。

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 3
赞赏 0
下载 11637011
赞赏 1888
赞赏
京公网安备:11010802035340号