# @kasite/uni-app-base ## 项目简介 `@kasite/uni-app-base` 是智医科技(Kasite)公司开发的 uni-app 基础包,为医院信息化系统提供统一的基础功能模块。该包封装了小程序登录、网络请求、配置管理、工具函数等核心功能,支持微信小程序和公众号两种平台。 ## 主要特性 - 🔐 **统一登录管理** - 支持微信小程序和公众号登录,自动处理 token 过期和重新登录 - 🌐 **网络请求封装** - 统一的 HTTP 请求处理,支持加密传输和自动重试机制 - ⚙️ **配置管理系统** - 灵活的前端配置管理,支持多院区、多业务场景配置 - 🛠️ **工具函数库** - 丰富的通用工具函数,包括加密解密、数据验证等 - 📱 **多平台支持** - 同时支持微信小程序和公众号平台 - 🔒 **安全加密** - 内置 DES 加密算法,保障数据传输安全 ## 安装 ```bash npm install @kasite/uni-app-base ``` ## 快速开始 ### 导入基础包 ```javascript import { request, useSmallProgramLogin, useAppStatus, useSetFrontEndConfig, useGetUpdateManager, usePreserMember, frontEndConfig, common } from '@kasite/uni-app-base'; ``` ### Hook 使用示例 ```javascript // 应用启动时的初始化流程 export default { async onLaunch() { // 1. 设置前端配置 await useSetFrontEndConfig(); // 2. 检查应用状态 await useAppStatus(); // 3. 检查版本更新 await useGetUpdateManager(); // 4. 获取就诊人信息 await usePreserMember(); // 5. 小程序登录 await useSmallProgramLogin(getApp()); } } // 获取域名信息 const domain = useDomain(); // 设置菜单 const menuList = await useSetMenuList(defaultMenu); // 设置表单配置 await useSetFrontEndForm(); // 获取系统页面列表 await useGetSysAppPageList(); ``` ## 📚 API 文档 ### 🌐 网络请求模块 #### `request.doPost(url, data, options?, complete?)` 发起 HTTP POST 请求,支持自动重试和加密传输 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `url` | `string` | ✅ | 请求地址 | | `data` | `object` | ✅ | 请求数据 | | `options` | `object` | ❌ | 请求选项 | | `complete` | `function` | ❌ | 完成回调函数 | **Options 选项:** ```typescript interface RequestOptions { showLoading?: boolean; // 是否显示加载提示,默认 true timeout?: number; // 超时时间(毫秒) responseType?: string; // 响应类型 onChunkReceived?: function; // 分块传输监听 } ``` **使用示例:** ```javascript // 基础 POST 请求 const response = await request.doPost('/api/login', { username: 'user', password: 'pass' }); // 带选项的请求 const response = await request.doPost('/api/data', data, { showLoading: false, timeout: 30000 }); ``` --- #### `request.doGet(url, data, options?)` 发起 HTTP GET 请求 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `url` | `string` | ✅ | 请求地址 | | `data` | `object` | ✅ | 请求参数 | | `options` | `object` | ❌ | 请求选项 | **使用示例:** ```javascript // 基础 GET 请求 const response = await request.doGet('/api/user', { userId: '123' }); ``` ## 🎣 Hook 使用指南 Hook 是本基础包的核心功能模块,提供了丰富的业务逻辑封装。 ### 🔐 登录管理 #### `useSmallProgramLogin(app)` 小程序登录,支持微信小程序和公众号平台 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `app` | `App.AppInstance` | ✅ | 应用实例对象 | **返回值:** - `Promise` - 登录结果 **功能特性:** - ✅ 自动处理 token 过期 - ✅ 支持重新登录机制 - ✅ 防并发登录调用 - ✅ 自动缓存登录信息 **使用示例:** ```javascript // 小程序登录 const loginResult = await useSmallProgramLogin(getApp()); if (loginResult) { console.log('登录成功'); } ``` ### 🔧 应用状态管理 #### `useAppStatus()` 检查应用状态并进行相应跳转 **功能特性:** - 🔍 检查应用维护状态 - 🚫 检查应用下线状态 - 🔄 自动跳转到错误页面 **状态类型:** - `maintain` - 维护状态,跳转到维护页面 - `offline` - 下线状态,跳转到下线页面 **使用示例:** ```javascript // 应用启动时检查状态 await useAppStatus(); ``` ### 🌍 域名管理 #### `useDomain()` 获取当前域名信息,支持KasiteWeb路径处理 **返回值:** - `string` - 当前域名地址 **使用示例:** ```javascript const domain = useDomain(); console.log('当前域名:', domain); ``` ### ⚙️ 配置管理 #### `useSetFrontEndConfig()` 设置前端配置信息,初始化全局配置数据 **功能特性:** - 📥 获取前端配置信息 - 🔧 设置全局配置数据 - 🏥 处理院区配置 - ✅ 检查配置完整性 **使用示例:** ```javascript // 应用启动时设置配置 await useSetFrontEndConfig(); ``` #### `useFrontEndConfigVersion()` 获取前端配置版本信息,控制缓存更新策略 **功能特性:** - 🔄 检查配置版本更新 - 💾 控制缓存更新策略 - 🌐 网络异常处理 **使用示例:** ```javascript // 检查配置版本 await useFrontEndConfigVersion(); ``` ### 📄 系统页面管理 #### `useGetSysAppPageList()` 获取系统应用页面列表,转换为页面消息映射 **功能特性:** - 📋 获取系统页面配置 - 🔄 转换为页面消息映射 - 💾 存储到全局数据 **使用示例:** ```javascript // 获取系统页面列表 await useGetSysAppPageList(); ``` ### 🔄 更新管理 #### `useGetUpdateManager()` 检查小程序版本更新,自动处理更新流程 **功能特性:** - 🔍 检查新版本 - ⬇️ 自动下载更新 - 💬 提示用户重启应用 - ❌ 处理更新失败情况 **更新流程:** 1. 检查版本更新 2. 自动下载新版本 3. 提示用户重启 4. 处理下载失败 **使用示例:** ```javascript // 检查版本更新 const hasUpdate = await useGetUpdateManager(); ``` ### 👥 就诊人管理 #### `usePreserMember()` 查询并保存就诊人数据,管理用户就诊信息 **功能特性:** - 🔍 查询所有就诊人信息 - 💾 保存到全局存储 - 👤 更新当前用户信息 - 🔐 支持加密查询 **使用示例:** ```javascript // 获取就诊人信息 const memberList = await usePreserMember(); ``` ### 📝 表单配置管理 #### `useSetFrontEndForm()` 设置前端表单配置,管理动态表单 **功能特性:** - 📋 获取表单配置信息 - ✅ 验证配置完整性 - 💾 存储表单配置 - 🏥 支持多院区配置 **使用示例:** ```javascript // 设置表单配置 await useSetFrontEndForm(); ``` ### 🍔 菜单管理 #### `useSetMenuList(menu)` 设置应用菜单列表,支持线上线下菜单合并 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `menu` | `array` | ✅ | 本地菜单数组 | **功能特性:** - 🌐 获取线上菜单配置 - 🔄 合并本地和线上菜单 - 💾 存储菜单配置 - 📱 支持多平台菜单 **使用示例:** ```javascript // 设置菜单 const defaultMenu = [ { name: '首页', path: '/pages/home' }, { name: '预约', path: '/pages/appointment' } ]; const menuList = await useSetMenuList(defaultMenu); ``` ## 🛠️ 工具函数库 工具函数库提供了丰富的通用功能,包括UI交互、数据验证、加密解密等。 ### UI 交互 #### `common.showLoading(title?)` 显示加载提示,支持防重复显示 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `title` | `string` | ❌ | 加载提示文字 | #### `common.hideLoading()` 隐藏加载提示,智能处理多接口并发 #### `common.showToast(msg, fn?, duration?)` 显示提示消息 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `msg` | `string` | ✅ | 提示消息内容 | | `fn` | `function` | ❌ | 回调函数 | | `duration` | `number` | ❌ | 显示时长(毫秒),默认1500 | #### `common.showModal(content, callBack?, data?)` 显示模态框 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `content` | `string` | ✅ | 模态框内容 | | `callBack` | `function` | ❌ | 确认回调函数 | | `data` | `object` | ❌ | 模态框配置 | ### 数据验证 #### `common.isEmpty(obj)` 判断对象是否为空 **支持类型:** - `undefined` / `null` / `''` - `Array` - 检查长度 - `Object` - 检查键数量 #### `common.isNotEmpty(obj)` 判断对象是否不为空(isEmpty的反向) ### 加密解密 #### `common.desEncrypt(message, key)` DES 加密 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `message` | `string` | ✅ | 待加密内容 | | `key` | `string` | ✅ | 加密密钥 | #### `common.desDecrypt(str, key, exportType?)` DES 解密 | 参数 | 类型 | 必需 | 描述 | |------|------|------|------| | `str` | `string` | ✅ | 加密字符串 | | `key` | `string` | ✅ | 解密密钥 | | `exportType` | `string` | ❌ | 输出方式 | ### 使用示例 ```javascript // UI 交互 common.showLoading('加载中...'); common.showToast('操作成功', () => { console.log('提示完成'); }); common.showModal('确定要删除吗?', () => { console.log('用户确认删除'); }); // 数据验证 if (common.isNotEmpty(userData)) { console.log('用户数据有效'); } // 加密解密 const encrypted = common.desEncrypt('敏感数据', 'secretKey'); const decrypted = common.desDecrypt(encrypted, 'secretKey'); ``` ## 配置说明 ### 基础配置 (config.ts) ```typescript export const BASE_URL = 'https://cs001.kasitesoft.com/'; // 接口请求地址 export const IS_ENCRYPT = false; // 是否加密 export const TIMEOUT = 60000; // 超时时间 ``` ### 前端配置 (frontEndConfig.ts) 包含以下主要配置: - **固定配置** (`fixedAppjsGlobalData`): 医院ID、配置密钥等固定信息 - **应用配置** (`appjsGlobalData`): 医院信息、功能开关等可配置项 - **页面配置** (`webUiDiy`): 各业务页面的个性化配置 ## 目录结构 ``` ├── config/ # 配置文件 │ ├── config.ts # 基础配置 │ ├── frontEndConfig.ts # 前端配置 │ └── index.ts # 配置导出 ├── hook/ # 自定义 Hook │ ├── use-app-status/ # 应用状态管理 │ ├── use-domain/ # 域名管理 │ ├── use-front-end-config/ # 前端配置管理 │ ├── use-front-end-config-version/ # 前端配置版本管理 │ ├── use-get-sys-app-page-list/ # 系统页面列表管理 │ ├── use-get-update-manager/ # 更新管理 │ ├── use-preser-member/ # 就诊人管理 │ ├── use-set-front-end-form/ # 表单配置管理 │ ├── use-set-menu-list/ # 菜单管理 │ └── use-small-program-login/ # 小程序登录 ├── service/ # 服务层 │ ├── base/ # 基础服务 │ ├── request.ts # 网络请求封装 │ └── handle.js # 请求处理 ├── utils/ # 工具函数 │ ├── common.ts # 通用工具 │ ├── crypto-js.min.js # 加密库 │ └── sseParse.ts # SSE 解析 └── index.ts # 主入口文件 ``` ## 开发指南 ### 添加新的 Hook 1. 在 `hook/` 目录下创建新的 Hook 文件夹 2. 实现 Hook 逻辑 3. 在 `hook/index.ts` 中导出 ### 添加新的工具函数 1. 在 `utils/common.ts` 中添加函数 2. 确保函数已导出 3. 在 `utils/index.ts` 中导出 ### 配置管理 所有配置都集中在 `config/` 目录下,支持: - 环境变量配置 - 业务功能开关 - 页面个性化配置 ## 版本信息 - **当前版本**: 0.0.1 - **包名**: @kasite/uni-app-base - **发布地址**: http://maven.kasitesoft.com/repository/intelmt-npm-hosted/ ## 注意事项 1. **平台兼容性**: 确保在目标平台(微信小程序/公众号)上测试所有功能 2. **配置安全**: 生产环境中请妥善保管 API 密钥和配置信息 3. **网络请求**: 所有网络请求都会自动处理 token 过期和重新登录 4. **加密传输**: 根据配置决定是否启用请求加密 ## 技术支持 如有问题或建议,请联系智医科技开发团队。 ## 许可证 本项目为私有包,仅供智医科技内部使用。