gitea-publish ec81673722 docs: 更新 README — 去历史化,关联 apes-Authon 组织仓库
- 移除 apes-Authdata 引用,以全新面貌展示
- 仓库地址更新为组织路径(apes-Authon/apes-Authon-Web)
- 后端引用更新为 apes-Authon-Server
- 剥离说明指向 apes-Authon-history 仓库
- docs/剥离历史与说明.md 更新仓库地址
2026-08-09 13:04:21 +08:00

apes-Authon-Web — 账权管理前端

Vue 2.7 账权管理前端,与后端 apes-Authon-Server 配合使用
已通过构建验证,可独立部署

项目背景

apes-Authon-Web 是一套独立的账权管理前端应用,提供用户管理、角色权限、客户管理、应用管理、系统配置和 AI/LLM 工具管理等功能。采用 Vue 2.7 + Element UI 技术栈,通过 CDN externals 机制优化构建体积,支持动态路由和多应用菜单切换。

技术栈

组件 版本 用途
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,显著减小构建体积。

功能模块

模块 页面数 说明
登录注册 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/                         # 文档
│   ├── apes-Authon-Web-剥离方案.md       # 剥离方案(计划文档)
│   ├── apes-Authon-Web-剥离方案.html     # 剥离方案(HTML 版)
│   └── 剥离历史与说明.md                  # 剥离执行记录与变更说明
├── public/                       # 静态资源
│   ├── index.html                # HTML 模板(含 CDN externals
│   └── static/                   # 静态文件
├── src/
│   ├── 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/LLM(8 页面)
│   │   ├── ai/                      # AI 工具管理(7 页面)
│   │   ├── home/                    # 首页看板
│   │   ├── base/                    # 基础页面(图片上传)
│   │   └── 404.vue                  # 404 错误页
│   ├── App.vue                   # 根组件
│   └── main.js                   # 应用入口
├── package.json
├── vue.config.js
├── babel.config.js
├── postcss.config.js
├── jsconfig.json
└── .gitignore

快速开始

环境要求

  • Node.js >= 14(推荐 16.x / 18.x
  • npm >= 6

安装与运行

# 1. 克隆仓库
git clone https://gitea.apescale.com/apes-Authon/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 中已配置开发环境代理:

proxy: {
  '/api/user-service': {
    target: 'http://localhost:8202',  // 后端 apes-Authon-Server 服务地址
    changeOrigin: true,
    pathRewrite: { '^/api/user-service': '/' }
  }
}

如后端地址不同,修改 target 即可。

部署

# 构建产物在 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.jsoutputDir 中配置)。

架构说明

路由体系

本项目采用 静态路由 + 动态路由 双层路由架构:

静态路由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 组件 外部链接
// 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(时间戳)、versionAPI 版本)
  • 响应拦截器:检测 code === 99(未登录),自动跳转登录页(注册页除外)
  • 方法封装apiGet / apiPost / apiPostJson / apiDownloadPost
// 请求拦截器自动注入 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.jsexternals 配置告诉 Webpack 不打包这些库:

CDN 地址 externals 映射
Vue unpkg.com/vue@2.7.14 vueVue
Vue Router unpkg.com/vue-router@3.5.4 vue-routerVueRouter
Vuex unpkg.com/vuex@3.1.3 vuexVuex
Element UI unpkg.com/element-ui@2.15.14 element-uiELEMENT
Axios unpkg.com/axios@0.18.1 axiosaxios

离线部署:如需离线使用,将 CDN 资源下载到 public/static/ 并修改 index.html 中的引用路径,同时移除 vue.config.js 中的 externals 配置。

与后端对应关系

后端 Controller (apes-Authon-Server) 前端页面 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.jsconstantRoutes 中添加路由配置
  3. 如为动态路由:在后端菜单管理中配置 menuType=1menuPath(路由路径)、vuePath(组件路径,如 user/list

新增 API

  1. src/api/ 下创建或复用 .js 文件
  2. 导入 request 实例:import http from '@/utils/request'
  3. 定义 API 方法:
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

剥离说明

本项目的完整剥离方案和执行记录已归档至 apes-Authon-history 仓库,docs/ 目录保留操作参考文档:

关联仓库

仓库 说明 地址
apes-Authon-Server 后端账权服务 https://gitea.apescale.com/apes-Authon/apes-Authon-Server
apes-Authon-Web 前端账权管理(本仓库) https://gitea.apescale.com/apes-Authon/apes-Authon-Web
apes-Authon-history 剥离历史与分析归档 https://gitea.apescale.com/apes-Authon/apes-Authon-history

License

MIT

S
Description
No description provided
Readme 30 MiB
Languages
Vue 90.7%
JavaScript 8.1%
SCSS 1.1%
HTML 0.1%