# techhero-guangxi-uniapp-ui **Repository Path**: defaultjs2105/techhero-guangxi-uniapp-ui ## Basic Information - **Project Name**: techhero-guangxi-uniapp-ui - **Description**: 广西前端初始化 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-30 - **Last Updated**: 2026-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # techhero-guangxi-uniapp-ui 广西招生考试院公众服务平台 — 优化前端项目,基于 uni-app (Vue 3) 构建,支持多端运行。 --- ## 项目简介 本项目是对 `techhero-uni/` 前端工程的全面优化重构,保留所有功能逻辑和组件版本,优化程序结构,支持 iOS、Android、HarmonyOS、微信小程序、支付宝小程序、H5 多平台共存。 **原始工程:** `techhero-uni/`(源,只读) **后端工程:** `techhero-guangxi-server/`(源,只读) **优化工程:** `techhero-guangxi-uniapp-ui/`(本项目) --- ## 技术栈 | 层级 | 技术 | |------|------| | 框架 | uni-app (Vue 3) | | 状态管理 | Pinia 2.x | | HTTP客户端 | 自定义封装 (HMAC-SHA256签名) | | 样式 | SCSS + 自定义图标字体 | | 加密 | CryptoJS (AES-ECB, HMAC-SHA256) | | 构建工具 | Vite 7(Rollup)+ Babel | | 组件库 | @dcloudio/uni-ui 1.5.7 | --- ## 平台支持 | 平台 | 状态 | 说明 | |------|------|------| | 微信小程序 | ✅ 已配置 | AppID: wx5c99a8ca5915fdbb | | 支付宝小程序 | ✅ 已配置 | 需填入 AppID | | HarmonyOS 小程序 | ✅ 已配置 | 需填入 AppID | | iOS App | ✅ 已配置 | 需完善证书配置 | | Android App | ✅ 已配置 | 权限已配置 | | H5 | ✅ 已配置 | DevServer代理配置就绪 | --- ## 快速开始 ### 环境要求 - Node.js 18+ - HBuilderX 4.x(用于小程序/App编译) - 微信开发者工具(微信小程序调试) - 支付宝小程序开发者工具(支付宝小程序调试) ### 安装 ```bash cd techhero-guangxi-uniapp-ui npm install ``` ### 开发 ```bash # H5 开发服务器(带热更新) npm run dev:h5 # 微信小程序(需HBuilderX) # 运行 → 运行到小程序模拟器 → 微信开发者工具 # 支付宝小程序(需HBuilderX) # 运行 → 运行到小程序模拟器 → 支付宝开发者工具 ``` ### 构建 ```bash npm run build:h5 # H5 npm run build:mp-weixin # 微信小程序 npm run build:mp-alipay # 支付宝小程序 ``` ### 验证 ```bash npm run verify # 运行代码质量验证(50项检查) ``` --- ## 故障排除 | 问题 | 解决方案 | |------|---------| | npm install 失败 | 检查 Node.js 版本 ≥18,清除 `node_modules` 和 `package-lock.json` 重试 | | HBuilderX 编译报错 | 检查 `manifest.json` 和 `pages.json` 语法(含条件编译注释) | | 微信小程序白屏 | 确认合法域名已配置,或在开发者工具中关闭域名校验 | | 路由跳转失败 | 确认使用完整子包路径(如 `/pages/login/examinee-login`,不是 `/pages/examinee-login/examinee-login`) | | 支付宝小程序编译错误 | 确认 `mp-alipay` 配置已填入有效 AppID | --- ## Git 状态记录 | 仓库 | 分支 | 最新提交 | 说明 | |------|------|---------|------| | `techhero-uni/` | master | `2dae3aa` — feat: 首页时间文案修改 | 源前端代码(只读) | | `techhero-guangxi-server/` | — | `a945e1ad` — 向下取整改为四舍五入 | 源后端代码(只读) | | `techhero-guangxi-uniapp-ui/` | master | 初始提交 | 优化后的前端代码 | --- ## 目录结构 ``` techhero-guangxi-uniapp-ui/ ├── .gitignore ├── README.md # 本文档 [↗](#top) ├── DESIGN.md # 交互设计文档 ├── package.json # 依赖配置(pinia替代vuex) ├── vite.config.js # Vite构建配置 ├── babel.config.js # Babel配置 ├── pages.json # 路由配置(含subPackages分包) ├── manifest.json # 应用配置(6端支持) ├── main.js # 入口(Pinia + sharePlugin) ├── App.vue # 应用根组件(adStore集中管理) │ ├── api/ # API模块(17个,完整保留) ├── stores/ # [新增] Pinia状态管理(5个store) ├── composables/ # [新增] Vue3组合式函数(4个) ├── plugins/ # [新增] sharePlugin全局分享 ├── utils/ # 工具层 │ ├── request/ # HTTP请求层(拆分为4个逻辑模块) │ ├── storage.js # 本地存储封装(TTL过期) │ ├── format.js # 格式化/签名/HMAC工具 │ ├── crypto.js # AES-ECB加密 │ ├── network.js # 网络状态检测 │ └── ... ├── components/ # 组件(全部kebab-case命名) │ ├── custom-tabbar/ # 自定义底部标签栏 │ ├── collect-dialog.vue # 收藏专业弹窗 │ ├── search-bar.vue # 搜索输入栏 │ ├── search-key-word.vue # 关键词联想搜索 │ └── search-select-box.vue # 综合筛选弹窗 ├── pages/ # 页面(按功能分包) │ ├── main/ # 主包(main + mainIndex) │ ├── mine/ # 我的 分包(9页) │ ├── login/ # 登录 分包(3页) │ ├── enrollment/ # 招生录取 分包(7页) │ ├── score/ # 分数查询 分包(2页) │ ├── info/ # 信息查询 分包(5页) │ ├── admission/ # 直播投档 分包(4页) │ └── common/ # 公共页面 分包(10页) ├── static/ # 静态资源(完整保留) ├── uni_modules/ # uni_modules(49个包,完整保留) └── scripts/ ├── verify.mjs # 验证脚本 └── fix-*.mjs # 代码修复工具脚本 ``` --- ## Before/After 对比 ### 1. 状态管理 **Before:** 仅使用 `getApp().globalData` + 裸 `uni.setStorageSync/getStorageSync`。 ```js uni.setStorageSync('token', token) uni.removeStorageSync('token') ``` **After:** Pinia 统一管理,手动同步 storage 保证向后兼容。 ```js import { useUserStore } from '@/stores/useUserStore' const userStore = useUserStore() userStore.login({ token, loginStatus, userRole }) ``` ### 2. 分享功能 **Before:** 32 个页面分别导入 `shareMixin`。 **After:** 全局插件 `sharePlugin` 一次性注入,页面无需导入。 ### 3. 导航栏计算 **Before:** ~30 个页面重复 statusBarHeight/navigationBarHeight 计算(每页约25行)。 **After:** `useNavigationBar()` composable,一行导入。 ### 4. 招生计划/往年录取页面 **Before:** `enrollment-plan.vue`(1383行)和 `score-destination.vue`(1895行)各自独立,大量重复代码。 **After:** 已通过共享 composables(useDict、usePagination、useAd)和共享组件(search-bar、search-select-box)消除冗余,页面逻辑模块化。 ### 5. 广告状态 **Before:** App.vue onLaunch 中 20 个独立 `uni.removeStorageSync('closedAds*')`。 **After:** `useAdStore.resetAds()` 一行集中管理。 ### 6. HTTP 请求模块 **Before:** `utils/request/index.js` 单体文件 627 行。 **After:** 拆分为 4 个逻辑模块:`index.js`(整合)、`interceptors.js`(拦截器)、`errorHandler.js`(错误+重试)、`fileExport.js`(文件导出)。 ### 7. 字典数据 **Before:** `mixins/dictMixin.js` 不必要的 Promise 包裹层。 **After:** `useDict()` composable 直接返回 API Promise。 ### 8. 页面分包 **Before:** 40 个页面全部在主包。 **After:** 主包仅 2 页面,其余 38 页面分布在 7 个子包中。 ### 9. 多平台支持 **Before:** 仅 `mp-weixin`、`h5`、`app-plus`。 **After:** 新增 `mp-alipay`、`mp-harmony`,实现六端支持。 ### 10. 平台兼容性 **Before:** `wx.getMenuButtonBoundingClientRect()` 等多处微信专属 API 无保护。 **After:** 全部包裹 `#ifdef MP-WEIXIN` 条件编译保护,非微信平台使用 uni.* 通用 API。 ### 11. Vue 3 兼容 **Before:** 30+ 处 `this.$set()` 调用(Vue 2 专属,Vue 3 已移除)。 **After:** 全部替换为直接赋值(Vue 3 Proxy 响应式系统自动处理)。 ### 12. 代码规范 **Before:** 组件命名混用 camelCase/kebab-case,CSS 单位混用 px/rpx,pages.json 含非法 `scripts` 字段。 **After:** 组件统一 kebab-case,CSS 统一 rpx,pages.json 符合 uni-app 规范。 --- ## 架构说明 ### 数据流 ``` 用户操作 → 页面组件 → Pinia Store(手动同步 uni.storage) ↓ Composables → API模块 → HTTP客户端 ↓ HMAC-SHA256签名 → 后端服务 ``` ### 分包策略 | 分包 | 页面数 | 预加载 | 说明 | |------|--------|--------|------| | 主包 (pages/main) | 2 | — | main + mainIndex | | pages/mine | 9 | ✅ 从首页预加载 | 个人中心相关 | | pages/enrollment | 7 | ✅ 从首页预加载 | 招生计划、往年录取 | | pages/login | 3 | — | 登录认证 | | pages/score | 2 | — | 分数线查询 | | pages/info | 5 | — | 排名、问答、公告 | | pages/admission | 4 | — | 直播、投档查询 | | pages/common | 10 | — | 通用页面 | --- ## 验证 ```bash npm run verify # 自动化验证(文件完整性、导入路径、分包覆盖、平台配置等50项检查) ``` 编译验证: - H5: `npm run build:h5` - 微信小程序: HBuilderX → 运行到微信开发者工具 - 支付宝小程序: HBuilderX → 运行到支付宝开发者工具 --- ## 已知限制 - **预留组件**:`custom-header.vue`、`no-data.vue`、`ad-banner.vue` 已提取模板但尚未集成到所有页面中,各页面仍使用内联导航栏和空状态模板 - **BaseList 通用列表组件**:enrollment-plan 和 score-destination 页面已通过共享 composables 减少冗余,但提取为单一 BaseList 组件的工作仍在规划中 - **自动化测试**:当前仅有代码结构验证脚本(`npm run verify`),缺少单元测试和 E2E 测试覆盖 - **微信/支付宝 AppID**:开发环境与生产环境的 AppID 需分别配置(`manifest.json` vs `project.config.json`) --- ## 注意事项 - 原始代码 `techhero-uni/` 和 `techhero-guangxi-server/` 为只读 - 所有 uni_modules 和组件版本与原始代码保持一致,未升级 - Pinia stores 通过各 action 方法手动同步到 `uni.setStorageSync`,保证外部代码读取兼容 - 条件编译保留所有原有 `#ifdef/#ifndef` 块,仅追加新平台支持和保护 - 页面路由使用完整子包路径(如 `/pages/login/examinee-login`),不是旧扁平路径