docs: 更新 README 为开发者完整指南,新增剥离历史文档
- README.md 全面重写:项目背景、技术栈、功能模块、项目结构、架构说明(路由/状态/请求层/启动流程/CDN externals)、快速开始、部署配置、开发指南、后端对应关系 - 新增 docs/剥离历史与说明.md:剥离执行记录、删除/保留/修改清单、11个框架文件修改详情、业务引用清理表、构建验证结果 - 剥离方案文档保留在 docs/ 作为计划文档参考
This commit is contained in:
@@ -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)之间零组件互相引用
|
||||
- 业务 API(weightApi/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 # 通用 iframe(menuType 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/LLM(8 页面)
|
||||
│ │ ├── 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
@@ -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 scripts(loader、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*
|
||||
Reference in New Issue
Block a user