docs: 更新 README 为开发者完整指南,新增剥离历史文档

- README.md 全面重写:项目背景、技术栈、功能模块、项目结构、架构说明(路由/状态/请求层/启动流程/CDN externals)、快速开始、部署配置、开发指南、后端对应关系
- 新增 docs/剥离历史与说明.md:剥离执行记录、删除/保留/修改清单、11个框架文件修改详情、业务引用清理表、构建验证结果
- 剥离方案文档保留在 docs/ 作为计划文档参考
This commit is contained in:
gitea-publish
2026-08-09 12:43:29 +08:00
parent 8ebd1ca157
commit 69d954abf0
2 changed files with 715 additions and 69 deletions
+371 -69
View File
@@ -1,104 +1,406 @@
# apes-Authon-Web
# apes-Authon-Web — 账权管理前端
> 纯净账权管理前端 — 从 saas-web 单体应用中剥离的账权模块前端,与后端 [apes-Authon](https://gitea.apescale.com/figmar/apes-Authon) 配合使用
> 从 saas-web 单体应用中剥离的纯净账权管理前端,与后端 [apes-Authon](https://gitea.apescale.com/figmar/apes-Authon) 配合使用
> **已通过构建验证**,可独立部署
## 项目背景
本项目源自 `saas-web`(账权平台前端单体应用),经过模块耦合度分析确认账权前端页面与业务页面(溯源、过磅、灌溉等)之间仅通过路由配置和 Vuex Store 间接关联,具备独立剥离条件。本仓库是提取后的纯净账权前端代码,不包含任何业务页面逻辑。
### 剥离依据
- 账权页面(login/user/permission/customer/app)与业务页面(fei/trace/weight/tracing)之间零组件互相引用
- 业务 APIweightApi/huobanTableApi/traceApi 等)仅被业务页面引用,账权页面不依赖
- 动态路由通过后端菜单接口 + `require.context` 运行时注册,页面删除不影响路由框架
- 共享层(request.js / store / layout / utils)可通过移除业务引用实现纯净化
## 技术栈
- Vue 2.7 + Element UI 2.15
- Vuex 3 + Vue Router 3
- Axios + SCSS
- Monaco Editor (AI 工具编辑器)
| 组件 | 版本 | 用途 |
|------|------|------|
| Vue | 2.7.14 | 前端框架 |
| Element UI | 2.15.14 | UI 组件库 |
| Vue Router | 3.5.4 | 路由管理 |
| Vuex | 3.1.3 | 状态管理 |
| Axios | 0.18.1 | HTTP 请求 |
| Monaco Editor | 0.30.1 | AI 工具代码编辑器 |
| marked | 4.3.0 | Markdown 渲染(AI 对话) |
| highlight.js | 11.11.1 | 代码高亮(AI 对话) |
| Sass | 1.26.8 | 样式预处理 |
> Vue / VueRouter / Vuex / ElementUI / Axios 通过 CDN externals 引入(见 `public/index.html`),不打包进 bundle,显著减小构建体积。
## 功能模块
| 模块 | 页面 | 说明 |
|------|------|------|
| 登录注册 | login, register | 短信登录 + 密码登录 + SSO |
| 用户管理 | user/ | 账号列表、编辑、信息、改密、SSO 配置 |
| 客户管理 | customer/ | 客户列表、详情、编辑、员工、套餐、配额 |
| 权限管理 | permission/ | 菜单管理、权限项、角色管理 |
| 应用管理 | app/ | 应用列表、详情 |
| 系统配置 | system/ | 组织架构、操作日志、配额、套餐方案 |
| AI/LLM | system/llmModel/, system/llmAgent/, system/aiHelper/, ai/ | 模型配置、Agent 管理、工具管理、对话、日志 |
| AccessToken | customer/accessToken | API 令牌管理 |
| 模块 | 页面 | 说明 |
|------|--------|------|
| 登录注册 | 2 | 短信验证码登录、密码登录、SSO 单点登录、用户注册 |
| 用户管理 | 5 | 账号列表、个人信息、编辑资料、修改密、SSO 配置 |
| 客户管理 | 12 | 客户列表、详情、编辑、员工管理、套餐、配额变更、AccessToken |
| 权限管理 | 3 | 菜单管理、权限项管理、角色管理 |
| 应用管理 | 2 | 应用列表、应用详情 |
| 系统配置 | 4 | 组织架构、操作日志、配额模板、套餐方案 |
| AI/LLM 配置 | 4 | LLM 模型配置、Agent 管理、Agent 编辑/详情、AI 助手测试 |
| AI 工具管理 | 7 | 工具列表、工具编辑、技能管理、调用日志、工具日志、对话历史、AI 对话 |
| 首页 | 1 | 数据看板 |
| **合计** | **40** | |
## 项目结构
```
apes-Authon-Web/
├── docs/ # 方案文档
├── public/ # 静态资源
├── docs/ # 文档
│ ├── apes-Authon-Web-剥离方案.md # 剥离方案(计划文档)
│ ├── apes-Authon-Web-剥离方案.html # 剥离方案(HTML 版)
│ └── 剥离历史与说明.md # 剥离执行记录与变更说明
├── public/ # 静态资源
│ ├── index.html # HTML 模板(含 CDN externals
│ └── static/ # 静态文件
├── src/
│ ├── api/ # API 接口(19 个)
│ ├── assets/ # 图片资源
│ ├── components/ # 公共组件(含 AI 助手)
│ ├── layout/ # 布局组件(侧栏、顶栏、标签页
│ ├── router/ # 路由配置
│ ├── store/ # Vuex 状态管理
│ ├── styles/ # 全局样式
│ ├── utils/ # 工具函数
└── views/ # 页面
├── login/ # 登录
├── register/ # 注册
├── user/ # 用户管理
├── permission/ # 权限管理
├── customer/ # 客户管理
├── app/ # 应用管理
├── system/ # 系统配置 + AI/LLM 配置
├── ai/ # AI 工具管理
├── home/ # 首页看板
── 404.vue # 404 页面
│ ├── api/ # API 接口19 个文件
│ ├── user.js # 登录/注册/用户管理
│ ├── permissionApi.js # 菜单/权限/角色 CRUD
│ ├── menuApi.js # 动态路由构建(require.context
│ ├── customerApi.js # 客户管理
│ ├── customerPackageApi.js # 客户套餐
│ ├── accessTokenApi.js # API 令牌管理
│ ├── appApi.js # 应用管理
│ ├── organizationApi.js # 组织架构
├── quotaApi.js # 配额管理
├── packagePlanApi.js # 套餐方案
├── baseApi.js # 基础接口(文件上传等)
├── llmModelApi.js # LLM 模型配置
├── llmAgentApi.js # LLM Agent 管理
├── llmAgentSkillApi.js # Agent 技能管理
├── llmAgentToolApi.js # Agent 工具管理
├── llmToolApi.js # LLM 工具管理
├── llmToolLogApi.js # 工具调用日志
── llmConversationApi.js # 对话历史
│ │ └── aiSkill.js # AI 技能管理
│ ├── assets/ # 图片资源
│ ├── components/ # 公共组件
│ │ ├── breadcrumb.vue # 面包屑导航
│ │ ├── tagView.vue # 标签页缓存
│ │ ├── pageBox.vue # 页面容器
│ │ ├── iframeView.vue # 通用 iframemenuType 2/3/4
│ │ ├── MarkdownContent.vue # Markdown 渲染(marked + hljs
│ │ └── ai/
│ │ └── ai_helper.vue # AI 助手浮窗组件
│ ├── layout/ # 布局组件
│ │ ├── index.vue # 主布局(侧栏 + 顶栏 + 内容区)
│ │ ├── components/
│ │ │ ├── Sidebar/ # 侧边栏菜单
│ │ │ ├── TagsView/ # 标签页导航
│ │ │ └── TopHeader.vue # 顶部导航栏
│ ├── router/
│ │ └── index.js # 路由配置(静态路由 + 动态路由容器)
│ ├── store/ # Vuex 状态管理
│ │ ├── index.js # Store 入口
│ │ ├── getters.js # 全局 getters
│ │ └── modules/
│ │ ├── user.js # 用户/客户/应用/菜单状态
│ │ ├── tagsView.js # 标签页缓存状态
│ │ └── settings.js # 布局设置
│ ├── styles/ # 全局样式
│ │ ├── index.scss # 样式入口
│ │ ├── variables.scss # SCSS 变量
│ │ ├── mixin.scss # 混入
│ │ ├── sidebar.scss # 侧边栏样式
│ │ ├── element-ui.scss # Element UI 覆写
│ │ └── transition.scss # 过渡动画
│ ├── utils/ # 工具函数
│ │ ├── request.js # Axios 封装(拦截器/Token/错误处理)
│ │ ├── index.js # 通用工具函数
│ │ ├── validate.js # 校验工具
│ │ ├── msgUtil.js # 消息提示工具
│ │ ├── public.js # 公共方法
│ │ ├── constUtil.js # 常量
│ │ ├── envUtil.js # 环境变量
│ │ ├── autoRefresh.js # 自动刷新
│ │ ├── uiSizeUtil.js # UI 尺寸
│ │ └── get-page-title.js # 页面标题
│ ├── views/ # 页面
│ │ ├── login/ # 登录
│ │ ├── register/ # 注册
│ │ ├── user/ # 用户管理(5 页面)
│ │ ├── permission/ # 权限管理(3 页面)
│ │ ├── customer/ # 客户管理(12 页面)
│ │ ├── app/ # 应用管理(2 页面)
│ │ ├── system/ # 系统配置 + AI/LLM8 页面)
│ │ ├── ai/ # AI 工具管理(7 页面)
│ │ ├── home/ # 首页看板
│ │ ├── base/ # 基础页面(图片上传)
│ │ └── 404.vue # 404 错误页
│ ├── App.vue # 根组件
│ └── main.js # 应用入口
├── package.json
├── vue.config.js
── README.md
── babel.config.js
├── postcss.config.js
├── jsconfig.json
└── .gitignore
```
## 开发
## 快速开始
### 环境要求
- Node.js >= 14(推荐 16.x / 18.x
- npm >= 6
### 安装与运行
```bash
# 安装依赖
# 1. 克隆仓库
git clone https://gitea.apescale.com/figmar/apes-Authon-Web.git
cd apes-Authon-Web
# 2. 安装依赖
npm install
# 启动开发服务器
# 3. 启动开发服务器(默认端口 8201
npm run dev
# 构建生产版本
# 4. 构建生产版本
npm run build:prod
# 5. 构建预发布版本
npm run build:stage
```
开发服务器启动后访问 `http://localhost:8201`
### 代理配置
`vue.config.js` 中已配置开发环境代理:
```javascript
proxy: {
'/api/user-service': {
target: 'http://localhost:8202', // 后端 apes-Authon 服务地址
changeOrigin: true,
pathRewrite: { '^/api/user-service': '/' }
}
}
```
如后端地址不同,修改 `target` 即可。
### 部署
```bash
# 构建产物在 authon-web/ 目录
npm run build:prod
# 将 authon-web/ 部署到 Nginx / 其他 Web 服务器
# Nginx 参考配置:
# server {
# listen 80;
# server_name your-domain.com;
# root /path/to/authon-web;
# index index.html;
# location / { try_files $uri $uri/ /index.html; }
# location /api/ { proxy_pass http://backend:8090; }
# }
```
> 构建输出目录为 `authon-web`(在 `vue.config.js` 的 `outputDir` 中配置)。
## 架构说明
### 路由体系
本项目采用 **静态路由 + 动态路由** 双层路由架构:
**静态路由**`router/index.js`):
- `/login` — 登录页
- `/register` — 注册页
- `/user/*` — 用户管理(5 个子路由)
- `/base/*` — 基础配置(图片上传、应用管理、权限管理)
- `/customer/*` — 客户管理(6 个子路由)
- `/common`**动态路由容器**children 初始为空)
- `/error/404` — 404 页面
- `/` — 首页看板(重定向到 `/login`
**动态路由**`menuApi.js`):
应用启动时,`main.js` 调用后端接口获取当前用户的菜单列表,`menuApi.handleMenu()` 根据菜单数据动态注册路由到 `/common` 下:
| menuType | 处理方式 | 示例 |
|----------|----------|------|
| 1 | Vue 页面 — 通过 `require.context` 映射到 `@/views/${menu.vuePath}` | `views/user/list.vue` |
| 2 | 伙伴云 iframe — 使用 `iframeView` 组件 | 外部表单 |
| 3 | 支付 iframe — 使用 `iframeView` 组件 | 支付页面 |
| 4 | Web iframe — 使用 `iframeView` 组件 | 外部链接 |
```javascript
// menuApi.js 核心逻辑
handleMenu(menuList) {
menuList.forEach(menu => {
if (menu.menuType === 2 || menu.menuType === 3 || menu.menuType === 4) {
// iframe 类型:统一使用 iframeView 组件
router.addRoute('common', {
path: typePrefix + '/' + menu.id,
component: () => import('@/components/iframeView'),
...
})
}
if (menu.menuType === 1) {
// Vue 页面:动态加载对应组件
router.addRoute('common', {
path: menu.menuPath,
component: (resolve) => require([`@/views/${menu.vuePath}`], resolve),
...
})
}
if (menu.child) this.handleMenu(menu.child) // 递归处理子菜单
})
}
```
### 状态管理
Vuex Store 包含两个模块:
**user 模块**`store/modules/user.js`):
| State | 说明 |
|-------|------|
| `loginUser` | 当前登录用户信息 |
| `currentCustomer` | 当前客户/企业信息 |
| `appList` | 用户可访问的应用列表 |
| `currentApp` | 当前选中应用 |
| `currentAppMenus` | 当前应用的菜单树 |
| `allAppMenus` | 所有应用的菜单映射 |
| `menuList` | 当前菜单列表 |
**tagsView 模块**`store/modules/tagsView.js`):
- 管理标签页的打开/关闭/缓存
### 请求层
`utils/request.js` 封装了 Axios 实例:
- **请求拦截器**:自动注入 `token`(从 `localStorage` 读取)、`time`(时间戳)、`version`API 版本)
- **响应拦截器**:检测 `code === 99`(未登录),自动跳转登录页(注册页除外)
- **方法封装**`apiGet` / `apiPost` / `apiPostJson` / `apiDownloadPost`
```javascript
// 请求拦截器自动注入 token
config.headers = {
...config.headers,
time: new Date().getTime(),
version: '1.1',
token: localStorage.getItem('_token') || ''
}
```
### 启动流程
`main.js` 的应用启动流程:
```
1. 从 URL 参数读取 token(支持 SSO 跳转) → 写入 localStorage
2. 调用 getCurrentUser() → 获取用户信息 + 客户信息
3. 调用 getMyApps() → 获取应用列表
4. 遍历应用 → 调用 getAppMenus() → 获取每个应用的菜单
5. menuApi.handleMenu() → 动态注册路由
6. 匹配当前 URL → 设置当前应用和菜单
7. 实例化 Vue 应用
```
### CDN Externals 机制
`public/index.html` 通过 CDN `<script>` 标签引入核心库,`vue.config.js``externals` 配置告诉 Webpack 不打包这些库:
| 库 | CDN 地址 | externals 映射 |
|----|----------|----------------|
| Vue | unpkg.com/vue@2.7.14 | `vue``Vue` |
| Vue Router | unpkg.com/vue-router@3.5.4 | `vue-router``VueRouter` |
| Vuex | unpkg.com/vuex@3.1.3 | `vuex``Vuex` |
| Element UI | unpkg.com/element-ui@2.15.14 | `element-ui``ELEMENT` |
| Axios | unpkg.com/axios@0.18.1 | `axios``axios` |
> **离线部署**:如需离线使用,将 CDN 资源下载到 `public/static/` 并修改 `index.html` 中的引用路径,同时移除 `vue.config.js` 中的 `externals` 配置。
## 与后端对应关系
| 后端 (apes-Authon) | 前端 (apes-Authon-Web) |
|---|---|
| UserController | views/user/ |
| PermissionController | views/permission/ |
| CustomerController | views/customer/ |
| AppController | views/app/ |
| AccessTokenController | views/customer/accessToken.vue |
| SSOController | views/user/sso.vue, views/login/ |
| CustomerPackageController | views/customer/packages.vue |
| SysOrganizationController | views/system/organization/ |
| SysOperationLogController | views/system/operationlog/ |
| SysQuotaController | views/system/quota/ |
| SysPackagePlanController | views/system/packagePlan/ |
| LlmModelConfigController | views/system/llmModel/ |
| LlmAgentConfigController | views/system/llmAgent/ |
| AiController | views/system/aiHelper/ |
| LlmToolController | views/ai/tool.vue |
| LlmChatController | views/ai/chat.vue |
| LlmConversationController | views/ai/conversationHistory.vue |
| 后端 Controller (apes-Authon) | 前端页面 | API 文件 |
|-------------------------------|----------|----------|
| UserController | views/user/ | user.js |
| PermissionController | views/permission/ | permissionApi.js |
| CustomerController | views/customer/ | customerApi.js |
| AppController | views/app/ | appApi.js |
| MenuController (内嵌) | — | menuApi.js |
| AccessTokenController | views/customer/accessToken.vue | accessTokenApi.js |
| SSOController (内嵌于 User) | views/user/sso.vue, views/login/ | user.js |
| CustomerPackageController | views/customer/packages.vue | customerPackageApi.js |
| SysOrganizationController | views/system/organization/ | organizationApi.js |
| SysOperationLogController | views/system/operationlog/ | — |
| SysQuotaController | views/system/quota/ | quotaApi.js |
| SysPackagePlanController | views/system/packagePlan/ | packagePlanApi.js |
| LlmModelConfigController | views/system/llmModel/ | llmModelApi.js |
| LlmAgentConfigController | views/system/llmAgent/ | llmAgentApi.js |
| AiController | views/system/aiHelper/ | aiSkill.js |
| LlmToolController | views/ai/tool.vue | llmToolApi.js |
| LlmChatController | views/ai/chat.vue | — |
| LlmConversationController | views/ai/conversationHistory.vue | llmConversationApi.js |
## 开发指南
### 新增页面
1.`src/views/` 下创建 `.vue` 文件
2. 如为静态路由:在 `router/index.js``constantRoutes` 中添加路由配置
3. 如为动态路由:在后端菜单管理中配置 `menuType=1``menuPath`(路由路径)、`vuePath`(组件路径,如 `user/list`
### 新增 API
1.`src/api/` 下创建或复用 `.js` 文件
2. 导入 request 实例:`import http from '@/utils/request'`
3. 定义 API 方法:
```javascript
import http from '@/utils/request'
export default {
getList(params) {
return http.apiGet('/api/user-service/some/endpoint', params)
},
create(data) {
return http.apiPost('/api/user-service/some/endpoint', data)
}
}
```
### 新增组件
`src/components/` 下创建 `.vue` 文件,通过 `import` 引入使用。
## 文件统计
| 类型 | 数量 |
|------|------|
| Vue 页面 (.vue) | 40 |
| API 接口 (.js) | 19 |
| 公共组件 (.vue) | 6 |
| 工具函数 (.js) | 10 |
| 样式文件 (.scss) | 6 |
| 布局组件 (.vue) | 4 |
## 剥离说明
本项目从 saas-web 单体前端中剥离,移除了以下业务模块
- 智慧农业大屏 (fei)
- 溯源管理 (trace, tracing)
- 自助过磅 (weight)
- 灌溉管理 (irrigation)
- 伙伴云表单 (huoban) — 后续 Phase 5C 代办
- 其他业务页面 (brain, certify, payment, park 等)
本项目从 saas-web 单体前端中剥离,移除了约 82 个业务页面及对应的 API、组件、工具函数。详细剥离方案和执行记录见 `docs/` 目录
详细方案见 `docs/apes-Authon-Web-剥离方案.md`
- [剥离方案](docs/apes-Authon-Web-剥离方案.md) — 剥离前的计划文档(保留/删除/修改清单)
- [剥离历史与说明](docs/剥离历史与说明.md) — 剥离执行记录、变更明细和框架修改说明
## 关联仓库
| 仓库 | 说明 | 地址 |
|------|------|------|
| apes-Authon | 后端账权服务 | https://gitea.apescale.com/figmar/apes-Authon |
| apes-Authon-Web | 前端账权管理(本仓库) | https://gitea.apescale.com/figmar/apes-Authon-Web |
| apes-Authdata | 源码归档(完整单体应用) | https://gitea.apescale.com/figmar/apes-Authdata |
## License
+344
View File
@@ -0,0 +1,344 @@
# apes-Authon-Web 剥离历史与说明
> 本文档记录从 saas-web 单体前端剥离纯净账权页面的执行过程、变更明细和框架修改说明。
- **源仓库**: saas-web(单体前端,含 120+ 页面)
- **目标仓库**: apes-Authon-Web(纯净账权前端,40 页面)
- **剥离时间**: 2026-08-09
- **提交**: `8ebd1ca` — 176 files changed, +222/-60093
---
## 一、剥离概览
| 分类 | 数量 | 说明 |
|------|------|------|
| 账权页面保留 | 24 | login、register、user、permission、customer、app |
| 系统配置保留 | 9 | organization、operationlog、quota、packagePlan |
| AI/LLM 页面保留 | 11 | llmModel、llmAgent、aiHelper、ai 工具管理 |
| 业务页面删除 | ~82 | fei、trace、weight、tracing、irrigation 等 |
| 框架文件修改 | 8 | router、main.js、request.js、store 等 |
| 代码变更量 | +222 / -60093 | 净减约 6 万行业务代码 |
---
## 二、保留清单
### 2.1 页面 (views/)
| 目录 | 文件 | 功能 |
|------|------|------|
| login/ | index.vue | 登录页(短信验证码 + 密码 + SSO) |
| register/ | index.vue | 注册页 |
| user/ | list.vue, editProfile.vue, info.vue, pwd.vue, sso.vue | 用户管理(5 个页面) |
| permission/ | menuList.vue, permissionList.vue, roleList.vue | 权限管理(3 个页面) |
| customer/ | index.vue, detail.vue, editCustomer.vue, employee.vue, user.vue, myCustomer.vue, packages.vue, packageOverview.vue, quotaChangeLog.vue, uiConfig.vue, accessToken.vue, extendApplyList.vue | 客户管理(12 个页面) |
| app/ | appList.vue, appDetail.vue | 应用管理 |
| system/ | organization/, operationlog/, quota/, packagePlan/, llmModel/, llmAgent/, aiHelper/ | 系统配置 + AI/LLM 配置(8 个页面) |
| ai/ | tool.vue, toolEdit.vue, skill.vue, toolLog.vue, callLog.vue, conversationHistory.vue, chat.vue | AI 工具管理(7 个页面) |
| home/ | index.vue | 首页看板 |
| base/ | imageUpload.vue | 图片上传 |
| 404.vue | — | 404 错误页 |
### 2.2 API 文件 (api/) — 19 个
| 文件 | 功能 |
|------|------|
| user.js | 登录/注册/用户管理/获取当前用户 |
| permissionApi.js | 菜单/权限/角色 CRUD |
| menuApi.js | 动态路由构建(require.context |
| appApi.js | 应用管理 CRUD |
| customerApi.js | 客户管理 CRUD |
| customerPackageApi.js | 客户套餐管理 |
| accessTokenApi.js | AccessToken 管理 |
| organizationApi.js | 组织架构管理 |
| quotaApi.js | 配额管理 |
| packagePlanApi.js | 套餐方案管理 |
| baseApi.js | 基础接口(文件上传等) |
| llmModelApi.js | LLM 模型配置 |
| llmAgentApi.js | LLM Agent 管理 |
| llmAgentSkillApi.js | LLM Agent 技能管理 |
| llmAgentToolApi.js | LLM Agent 工具管理 |
| llmToolApi.js | LLM 工具管理 |
| llmToolLogApi.js | LLM 工具日志 |
| llmConversationApi.js | LLM 对话管理 |
| aiSkill.js | AI 技能管理 |
### 2.3 组件 (components/) — 6 个
| 文件 | 功能 | 备注 |
|------|------|------|
| breadcrumb.vue | 面包屑导航 | 原样保留 |
| tagView.vue | 标签页缓存 | 原样保留 |
| pageBox.vue | 页面容器 | 原样保留 |
| iframeView.vue | 通用 iframe 组件 | **重写**(见下文) |
| MarkdownContent.vue | Markdown 渲染 | **新建**(见下文) |
| ai/ai_helper.vue | AI 助手浮窗 | 原样保留 |
### 2.4 工具函数 (utils/) — 10 个
| 文件 | 功能 | 备注 |
|------|------|------|
| request.js | Axios 封装 | **修改**(见下文) |
| index.js | 通用工具函数 | 原样保留 |
| validate.js | 校验工具 | 原样保留 |
| msgUtil.js | 消息提示 | 原样保留 |
| public.js | 公共方法 | 原样保留 |
| constUtil.js | 常量 | 原样保留 |
| envUtil.js | 环境变量 | 原样保留 |
| autoRefresh.js | 自动刷新 | 原样保留 |
| uiSizeUtil.js | UI 尺寸 | 原样保留 |
| get-page-title.js | 页面标题 | 原样保留 |
---
## 三、删除清单
### 3.1 页面删除
| 目录 | 文件数 | 业务域 |
|------|--------|--------|
| fei/ | 22 | 智慧农业大屏/可视化 |
| trace/ | 21 | 溯源管理 |
| weight/ | 13 | 自助过磅系统 |
| tracing/ | 6 | 溯源追踪/路线 |
| irrigation/ | 2 | 灌溉管理 |
| brain/ | 3 | AI 大脑 |
| certify/ | 5 | 认证管理 |
| certifyAgreement/ | 1 | 认证协议 |
| payment/ | 1 | 支付 |
| park/ | 2 | 园区管理 |
| waterFertilizer/ | 2 | 水肥一体化 |
| fertigationDevice/ | 2 | 施肥设备 |
| extLink/ | 1 | 外部链接 |
| preference/ | 1 | 偏好设置 |
| agreement/ | 1 | 协议管理 |
| web/ | 1 | Web iframe |
| tracking/ | 1 | 追踪 |
| huoban/ | 1 | 伙伴云(Phase 5C 代办) |
| 其他 | ~3 | PAGECODE.md 等 |
### 3.2 API 删除
| 文件/目录 | 业务域 |
|-----------|--------|
| fei/ 目录 | 智慧农业 |
| trace/, traceabilityApi.js, trackingConfigApi.js | 溯源 |
| weightApi.js | 过磅 |
| huobanTableApi.js | 伙伴云 |
| farmPlan.js, inspection.js, inputMaterial.js, irrigation.js, park.js, fertigationDevice.js, cameraInfo.js | 农业/设备 |
| n8nApi.js | N8N 工作流 |
| extLink.js, userPreference.js | 外链/偏好 |
### 3.3 工具函数删除
| 文件 | 原因 |
|------|------|
| ezvizConfig.js, ezvizStream.js | 萤石云视频流配置 |
| tracingDisplay.js, tracingPermission.js, tracingQualPermission.js, tracingTestCertificate.js | 溯源专用工具 |
| huobanAuth.js | 伙伴云鉴权 |
| markdown.js | 富文本编辑器封装(被 MarkdownContent.vue 替代) |
| wangEditConfig.js | wangEditor 富文本配置 |
### 3.4 组件删除
| 目录/文件 | 原因 |
|-----------|------|
| components/brain/ | 大屏专用组件 |
| components/tracing/ | 溯源专用组件 |
| components/MarkdownContent.vue(原版) | 依赖已删除的 markdown.js,由新版替代 |
### 3.5 配置删除
| 文件 | 原因 |
|------|------|
| config/ezviz.js, config/ezviz.example.js | 萤石云配置 |
| config/tracingOpenKey.js | 溯源 OpenKey 配置 |
| styles/tracing-screen.scss | 溯源大屏样式 |
---
## 四、框架文件修改详情
### 4.1 router/index.js — 路由重构
**修改内容**
- 移除所有业务路由(certify、huoban、weight、tracing、fei_screen、brain、tracing_screen
- 保留核心路由:`/login``/register``/user/*``/base/*``/customer/*``/error/404``/`(首页)
- 新增 `/common` 路由作为动态菜单路由的容器:
```javascript
{
path: '/common',
component: LayoutBox,
name: 'common',
children: [] // 动态路由运行时注入
}
```
**原因**`menuApi.js` 通过 `router.addRoute('common', ...)` 动态注册菜单路由,需要一个名为 `common` 的命名路由作为父容器。
### 4.2 main.js — 入口精简
**移除内容**
- `import * as echarts from 'echarts'``Vue.prototype.$echarts = echarts`(首页看板不再使用 echarts 图表)
- `import userPreferenceApi from '@/api/userPreference'` 及相关调用(用户偏好功能已删除)
- `staticPages` 数组精简为 `['/register']`(移除了其他静态页面路径)
**保留内容**
- Token 从 URL 参数读取(SSO 支持)
- `getCurrentUser``setLoginUser``getMyApps``loadAppMenus``matchCurrentPath` 核心启动流程
### 4.3 utils/request.js — 请求层简化
**移除内容**
- `isHuobanWebApi()` 函数(判断是否为伙伴云 API 请求)
- `resolveRequestToken()` 辅助函数(根据请求类型解析不同 token)
- 伙伴云 token 相关逻辑
**简化后**Token 统一从 `localStorage.getItem('_token')` 获取:
```javascript
config.headers = {
...config.headers,
time: new Date().getTime(),
version: '1.1',
token: localStorage.getItem('_token') || ''
}
```
### 4.4 store/modules/user.js — 状态清理
**移除内容**
- `huobanToken` state 字段
- `SET_HUOBAN_TOKEN` mutation
- `setHuobanToken` action
**保留的 State**`loginUser``menuList``currentMenuId``currentCustomer``appList``currentApp``currentAppMenus``allAppMenus`
### 4.5 store/getters.js — 清理不存在模块
**移除内容**:对 `app``permission``errorLog``common` 模块的 getter 引用(这些模块不存在于本项目中)
**修改后**
```javascript
const getters = {
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
loginUser: state => state.user.loginUser,
currentCustomer: state => state.user.currentCustomer,
menuList: state => state.user.menuList,
appList: state => state.user.appList,
currentApp: state => state.user.currentApp,
currentAppMenus: state => state.user.currentAppMenus
}
```
### 4.6 vue.config.js — 构建配置更新
**移除内容**
- `MonacoWebpackPlugin` require 和插件注册
- n8n 工作流代理配置
- `echarts``monaco-editor` 的 externals 配置
- monaco/echarts/wangEditor 的 splitChunks cacheGroups
**修改内容**
- `outputDir`: `"saas-web"``"authon-web"`
- `name`: 添加 `'apes-Authon'`
### 4.7 package.json — 依赖清理
**移除的依赖**
- `@amap/amap-jsapi-loader`(高德地图)
- `@wangeditor/core``@wangeditor/editor``@wangeditor/editor-for-vue`(富文本编辑器)
- `echarts`(图表库)
- `html2canvas`(截图)
- `jspdf`PDF 生成)
- `qrcodejs2`(二维码)
**保留的特殊依赖**
- `monaco-editor` — AI 工具编辑器使用(`views/ai/toolEdit.vue`
- `vue-monaco` — Monaco Editor 的 Vue 封装
- `marked` — AI 对话中的 Markdown 渲染
- `highlight.js` — AI 对话中的代码高亮
### 4.8 public/index.html — CDN 清理
**移除内容**
- echarts CDN script
- monaco-editor CDN scriptsloader、nls、editor.main
**保留内容**
- Vue、VueRouter、Vuex、ElementUI、Axios 的 CDN externals
### 4.9 iframeView.vue — 重写
**原版**:为每种 iframe 类型(web/payment/huoban)分别导入对应的 view 组件。
**新版**:统一为单个通用 `<iframe>` 组件,适用于所有 menuType 2/3/4
```vue
<template>
<div class="iframe-container">
<iframe :src="frameUrl" frameborder="0" style="width:100%;height:100%"></iframe>
</div>
</template>
```
### 4.10 menuApi.js — 路由注册统一
**修改内容**menuType 2/3/4 统一使用 `@/components/iframeView` 组件,不再为每种类型分别导入 view。
### 4.11 MarkdownContent.vue — 新建
**背景**:原版 `MarkdownContent.vue` 导入了已删除的 `@/utils/markdown.js`,导致构建失败。
**新版**:直接使用 `marked` + `highlight.js`,自包含无外部依赖:
```javascript
import { marked } from 'marked'
import hljs from 'highlight.js'
import 'highlight.js/styles/github.css'
```
---
## 五、业务引用清理
以下文件中移除了对已删除模块的引用,替换为空操作或简化逻辑:
| 文件 | 移除的引用 | 替代方案 |
|------|-----------|----------|
| TopHeader.vue | `weightApi``clearTracingPermissionCache``clearHuobanToken` | 移除调用,保留方法结构 |
| login/index.vue | `weightApi``clearHuobanToken` | 移除调用 |
| home/index.vue | `extLinkApi` | `loadExtLinks()` 改为空操作 |
| customer/index.vue | `huobanTableApi` | `upsetOne()` 改为设置 skip 状态 |
| customer/uiConfig.vue | `weightApi` | `loadConfig()` / `handleSave()` / `handleReset()` 改为成功提示 |
| permissionApi.js | `TRACING_OPEN_KEY` | 移除 `getTrackingConfigByCustomerId()` 方法 |
---
## 六、构建验证
```bash
npm run build:prod
# DONE Compiled successfully
# Build complete. The authon-web directory is ready to be deployed.
```
构建产物输出到 `authon-web/` 目录,可直接部署到 Nginx 或其他 Web 服务器。
---
## 七、后续代办
| 代办 | 说明 | 状态 |
|------|------|------|
| Phase 5A: AI/LLM 后端提取 | ~54 Java 文件从源码同步到 apes-Authon | 待办 |
| Phase 5B: 系统配置页面补充 | 后端已有 Controller,前端已保留页面 | 基本完成 |
| Phase 5C: 伙伴云表单配置 | 5 Controller + 7 .vue + 1 API | 待办 |
---
*文档更新时间: 2026-08-09 | 仓库: https://gitea.apescale.com/figmar/apes-Authon-Web*