init: 初始化项目文档中心
- 添加前端设计文档(rui-admin、收银系统、模块打包) - 添加前端实施计划(收银后台功能完善) - 添加通用规范(API、编码、数据库、前端开发规则) - 建立文档索引和使用指南
This commit is contained in:
@@ -0,0 +1,371 @@
|
||||
# Admin-UI 分模块打包功能设计文档
|
||||
|
||||
> **设计日期**: 2026-06-04
|
||||
> **版本**: v1.0
|
||||
> **状态**: 已批准
|
||||
> **目标**: 实现 Admin-UI 按系统配置分模块打包,支持不同租户类型输出不同产物包
|
||||
|
||||
---
|
||||
|
||||
## 一、背景与目标
|
||||
|
||||
### 1.1 现状分析
|
||||
|
||||
当前 Admin-UI 存在以下问题:
|
||||
|
||||
1. **路由硬编码**:所有页面路由集中在 `router/index.ts` 中硬编码,无法按模块裁剪
|
||||
2. **构建产物单一**:无论服务哪个租户,都打包所有页面代码,产物体积大
|
||||
3. **缺乏系统差异化**:Dashboard、登录页等核心页面无法根据不同系统定制
|
||||
4. **模块管理已有雏形**:后端已支持租户模块配置(`ModuleDialog.vue`),但前端构建未与之配合
|
||||
|
||||
### 1.2 目标定义
|
||||
|
||||
1. **构建时分包**:根据 JSON 配置文件,构建时只打包指定模块的代码
|
||||
2. **动态路由生成**:替换硬编码路由,构建时根据配置动态生成路由表
|
||||
3. **系统差异化页面**:支持 Dashboard、登录页按系统配置加载不同子组件
|
||||
4. **多产物输出**:不同系统输出到 `dist/{systemKey}/` 目录
|
||||
5. **保持现有功能**:菜单 API 获取、权限控制、主题切换等功能不受影响
|
||||
|
||||
---
|
||||
|
||||
## 二、详细设计
|
||||
|
||||
### 2.1 整体架构
|
||||
|
||||
```
|
||||
构建流程:
|
||||
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||
│ build-config/ │ │ Vite Plugin │ │ 构建产物 │
|
||||
│ cashier.json │────→│ (module-build) │────→│ dist/cashier/ │
|
||||
│ admin.json │ │ │ │ dist/admin/ │
|
||||
│ super.json │ │ 1. 读取配置 │ │ dist/super/ │
|
||||
└─────────────────┘ │ 2. 生成路由 │ │ │
|
||||
│ 3. 注入配置 │ └─────────────────┘
|
||||
│ 4. 配置输出 │
|
||||
└──────────────────┘
|
||||
|
||||
运行时:
|
||||
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
|
||||
│ 统一入口页面 │────→│ 虚拟模块配置 │────→│ 系统特定子组件 │
|
||||
│ Dashboard │ │ __SYSTEM_CONFIG__│ │ systems/ │
|
||||
│ Login │ │ │ │ Cashier.vue │
|
||||
└─────────────────┘ └──────────────────┘ │ Super.vue │
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 核心组件
|
||||
|
||||
#### 2.2.1 配置文件(`build-config/`)
|
||||
|
||||
每个系统一个 JSON 配置文件:
|
||||
|
||||
```typescript
|
||||
interface BuildConfig {
|
||||
/** 系统唯一标识,产物目录名 */
|
||||
key: string
|
||||
/** 系统显示名称 */
|
||||
name: string
|
||||
/** 系统描述 */
|
||||
description?: string
|
||||
/** 包含的模块列表 */
|
||||
modules: string[]
|
||||
/** 登录页配置 */
|
||||
login: {
|
||||
/** 登录组件名(对应 views/login/systems/ 下的组件) */
|
||||
component: string
|
||||
/** 是否显示租户ID输入 */
|
||||
showTenantInput: boolean
|
||||
/** 页面标题 */
|
||||
title: string
|
||||
/** 副标题 */
|
||||
subtitle?: string
|
||||
/** 背景图路径 */
|
||||
background?: string
|
||||
/** Logo路径 */
|
||||
logo?: string
|
||||
}
|
||||
/** Dashboard配置 */
|
||||
dashboard: {
|
||||
/** Dashboard组件名(对应 views/dashboard/systems/ 下的组件) */
|
||||
component: string
|
||||
/** 页面标题 */
|
||||
title: string
|
||||
}
|
||||
/** 主题配置 */
|
||||
theme: {
|
||||
/** 主题色 */
|
||||
primaryColor: string
|
||||
/** 页面标题 */
|
||||
title: string
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**示例配置:**
|
||||
|
||||
```json
|
||||
// build-config/super.json
|
||||
{
|
||||
"key": "super",
|
||||
"name": "超级管理后台",
|
||||
"description": "超级租户专用,包含租户管理",
|
||||
"modules": ["system", "user"],
|
||||
"login": {
|
||||
"component": "Super",
|
||||
"showTenantInput": false,
|
||||
"title": "睿核平台管理",
|
||||
"subtitle": "超级管理员登录"
|
||||
},
|
||||
"dashboard": {
|
||||
"component": "Super",
|
||||
"title": "平台运营概览"
|
||||
},
|
||||
"theme": {
|
||||
"primaryColor": "#722ed1",
|
||||
"title": "睿核平台管理"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
// build-config/cashier.json
|
||||
{
|
||||
"key": "cashier",
|
||||
"name": "收银系统",
|
||||
"description": "面向收银场景的管理后台",
|
||||
"modules": ["system", "user", "cms", "cashier"],
|
||||
"login": {
|
||||
"component": "Cashier",
|
||||
"showTenantInput": true,
|
||||
"title": "睿核收银",
|
||||
"subtitle": "门店管理系统"
|
||||
},
|
||||
"dashboard": {
|
||||
"component": "Cashier",
|
||||
"title": "收银数据概览"
|
||||
},
|
||||
"theme": {
|
||||
"primaryColor": "#1677ff",
|
||||
"title": "睿核收银"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2.2 Vite 插件(`scripts/vite-plugin-module-build.ts`)
|
||||
|
||||
插件职责:
|
||||
|
||||
1. **解析命令行参数**:读取 `--system={key}` 参数
|
||||
2. **加载配置**:读取 `build-config/{key}.json`
|
||||
3. **生成虚拟路由模块**:`virtual:generated-routes`
|
||||
- 根据 `config.modules` 从路由模板中组装路由表
|
||||
- 只包含指定模块的路由 + 核心页面路由(登录、Dashboard入口、个人中心、设置)
|
||||
4. **生成虚拟配置模块**:`virtual:system-config`
|
||||
- 将配置对象注入为全局常量 `__SYSTEM_CONFIG__`
|
||||
5. **配置构建输出**:
|
||||
- `build.outDir = dist/${config.key}`
|
||||
- `build.rollupOptions.treeshake = true` 确保未使用代码被移除
|
||||
|
||||
**路由生成逻辑:**
|
||||
|
||||
```typescript
|
||||
// router/modules/system.ts
|
||||
export const systemRoutes = [
|
||||
{ path: 'system/menu', name: 'SystemMenu', component: () => import('@/views/system/menu/Index.vue'), meta: { i18n: 'menu.systemMenu' } },
|
||||
{ path: 'system/role', name: 'SystemRole', component: () => import('@/views/system/role/Index.vue'), meta: { i18n: 'menu.systemRole' } },
|
||||
// ...
|
||||
]
|
||||
|
||||
// router/modules/user.ts
|
||||
export const userRoutes = [
|
||||
{ path: 'user/info', name: 'UserInfo', component: () => import('@/views/user/info/Index.vue'), meta: { i18n: 'menu.userInfo' } },
|
||||
// ...
|
||||
]
|
||||
|
||||
// 插件根据 config.modules 动态组装
|
||||
const moduleRoutes = config.modules.flatMap(module => {
|
||||
const routeModule = routeModules[module]
|
||||
return routeModule ? routeModule.routes : []
|
||||
})
|
||||
```
|
||||
|
||||
#### 2.2.3 统一入口页面
|
||||
|
||||
**Dashboard 入口(`views/dashboard/Index.vue`):**
|
||||
|
||||
```vue
|
||||
<script setup lang="ts">
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
import systemConfig from 'virtual:system-config'
|
||||
|
||||
// 动态加载系统特定的 Dashboard 组件
|
||||
const dashboardComponent = defineAsyncComponent(() =>
|
||||
import(`./systems/${systemConfig.dashboard.component}.vue`)
|
||||
)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<component :is="dashboardComponent" />
|
||||
</template>
|
||||
```
|
||||
|
||||
**登录页入口(`views/login/Index.vue`):**
|
||||
|
||||
```vue
|
||||
<script setup lang="ts">
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
import systemConfig from 'virtual:system-config'
|
||||
|
||||
// 动态加载系统特定的登录组件
|
||||
const loginComponent = defineAsyncComponent(() =>
|
||||
import(`./systems/${systemConfig.login.component}.vue`)
|
||||
)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<component :is="loginComponent" :config="systemConfig.login" />
|
||||
</template>
|
||||
```
|
||||
|
||||
### 2.3 模块映射关系
|
||||
|
||||
建立 `src/views/` 下的页面目录与模块标识的映射:
|
||||
|
||||
| 模块标识 | 对应目录 | 包含页面 |
|
||||
|---------|---------|---------|
|
||||
| `system` | `views/system/*` | 菜单、角色、部门、岗位、字典、配置、日志、登录日志、租户、租户套餐、数据权限、OAuth2客户端 |
|
||||
| `user` | `views/user/*` | 用户信息、用户详情、等级、等级日志、地址、账户 |
|
||||
| `order` | `views/order/*` | 订单列表、退款记录 |
|
||||
| `cms` | `views/cms/*` | 文章、分类、轮播图 |
|
||||
| `marketing` | `views/marketing/*` | 优惠券、活动管理 |
|
||||
| `demo` | `views/demo/*` | 图标演示、列表演示 |
|
||||
| `cashier` | `views/cashier/*` | 门店、包间、定价、订单、商品、报表 |
|
||||
|
||||
**核心页面(所有系统默认包含,不依赖模块配置):**
|
||||
- `views/login/Index.vue` - 登录页入口
|
||||
- `views/login/systems/*.vue` - 系统特定登录组件
|
||||
- `views/dashboard/Index.vue` - Dashboard 入口
|
||||
- `views/dashboard/systems/*.vue` - 系统特定 Dashboard 组件
|
||||
- `views/profile/Index.vue` - 个人中心
|
||||
- `views/settings/Index.vue` - 系统设置
|
||||
|
||||
### 2.4 目录结构
|
||||
|
||||
```
|
||||
admin-ui/
|
||||
├── build-config/ # 系统打包配置
|
||||
│ ├── cashier.json
|
||||
│ ├── admin.json
|
||||
│ ├── super.json
|
||||
│ └── default.json # 默认配置(全模块,用于开发)
|
||||
├── scripts/ # 构建脚本
|
||||
│ └── vite-plugin-module-build.ts # Vite 插件
|
||||
├── src/
|
||||
│ ├── router/
|
||||
│ │ ├── index.ts # 改造:使用虚拟路由模块
|
||||
│ │ └── modules/ # 新增:按模块拆分路由配置
|
||||
│ │ ├── core.ts # 核心路由(登录、Dashboard入口等)
|
||||
│ │ ├── system.ts
|
||||
│ │ ├── user.ts
|
||||
│ │ ├── order.ts
|
||||
│ │ ├── cms.ts
|
||||
│ │ ├── marketing.ts
|
||||
│ │ ├── demo.ts
|
||||
│ │ └── cashier.ts
|
||||
│ ├── views/
|
||||
│ │ ├── login/
|
||||
│ │ │ ├── Index.vue # 改造:统一入口
|
||||
│ │ │ └── systems/ # 新增:系统特定登录组件
|
||||
│ │ │ ├── Default.vue # 默认登录页
|
||||
│ │ │ ├── Super.vue # 超级租户登录页
|
||||
│ │ │ └── Cashier.vue # 收银系统登录页
|
||||
│ │ ├── dashboard/
|
||||
│ │ │ ├── Index.vue # 改造:统一入口
|
||||
│ │ │ └── systems/ # 新增:系统特定 Dashboard
|
||||
│ │ │ ├── Default.vue # 默认 Dashboard
|
||||
│ │ │ ├── Cashier.vue # 收银系统 Dashboard
|
||||
│ │ │ └── Super.vue # 超级租户 Dashboard
|
||||
│ │ └── ... # 业务页面(保持现有结构)
|
||||
│ ├── types/
|
||||
│ │ └── system-config.d.ts # 系统配置类型定义
|
||||
│ └── ...
|
||||
├── package.json # 改造:添加构建命令
|
||||
└── vite.config.ts # 改造:注册插件
|
||||
```
|
||||
|
||||
### 2.5 构建命令
|
||||
|
||||
```json
|
||||
// package.json
|
||||
{
|
||||
"scripts": {
|
||||
"dev": "vite --port 3000",
|
||||
"dev:cashier": "vite --port 3000 -- --system=cashier",
|
||||
"dev:super": "vite --port 3000 -- --system=super",
|
||||
"build": "vue-tsc && vite build",
|
||||
"build:cashier": "vue-tsc && vite build -- --system=cashier",
|
||||
"build:super": "vue-tsc && vite build -- --system=super",
|
||||
"build:admin": "vue-tsc && vite build -- --system=admin",
|
||||
"build:all": "pnpm build:cashier && pnpm build:super && pnpm build:admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**产物输出:**
|
||||
|
||||
```
|
||||
dist/
|
||||
├── cashier/ # 收银系统(system + user + cms + cashier)
|
||||
├── super/ # 超级租户(system + user)
|
||||
├── admin/ # 普通后台(system + user + order + cms + marketing)
|
||||
└── default/ # 默认(全模块,用于开发测试)
|
||||
```
|
||||
|
||||
### 2.6 主题配置应用
|
||||
|
||||
系统配置中的 `theme` 字段在运行时应用:
|
||||
|
||||
```typescript
|
||||
// App.vue 或布局组件
|
||||
import systemConfig from 'virtual:system-config'
|
||||
|
||||
// 设置页面标题
|
||||
document.title = systemConfig.theme.title
|
||||
|
||||
// 设置主题色(Element Plus)
|
||||
const el = document.documentElement
|
||||
el.style.setProperty('--el-color-primary', systemConfig.theme.primaryColor)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、验收标准
|
||||
|
||||
- [ ] 执行 `pnpm build:super` 成功构建,产物输出到 `dist/super/`,只包含 system 和 user 模块的页面
|
||||
- [ ] 执行 `pnpm build:cashier` 成功构建,产物输出到 `dist/cashier/`,包含 system、user、cms、cashier 模块的页面
|
||||
- [ ] 不同系统的 Dashboard 显示不同的子组件内容
|
||||
- [ ] 不同系统的登录页显示不同的子组件内容(超级租户无租户ID输入)
|
||||
- [ ] 构建产物中不包含未配置模块的页面代码(Tree Shaking 生效)
|
||||
- [ ] 现有菜单 API 获取、权限控制、主题切换功能正常
|
||||
- [ ] 开发模式 `pnpm dev:cashier` 正常工作,热更新无问题
|
||||
|
||||
---
|
||||
|
||||
## 四、风险与依赖
|
||||
|
||||
| 风险 | 影响 | 缓解措施 |
|
||||
|------|------|---------|
|
||||
| Vite 插件开发复杂度 | 中 | 插件逻辑清晰拆分:配置读取、路由生成、虚拟模块、输出配置 |
|
||||
| Tree Shaking 不彻底 | 中 | 使用 `import()` 动态导入,配合 Rollup 的 `treeshake` 配置,构建后检查产物 |
|
||||
| 动态组件加载失败 | 低 | 添加错误处理,加载失败时回退到 Default 组件 |
|
||||
| 现有功能回归 | 中 | 构建后逐一验证核心功能:登录、菜单、CRUD、主题切换 |
|
||||
| 多人协作冲突 | 低 | 配置文件集中管理,模块路由独立文件,减少冲突 |
|
||||
|
||||
---
|
||||
|
||||
## 五、后续扩展
|
||||
|
||||
1. **国际化支持**:配置文件中可扩展 `locales` 字段,支持系统特定的翻译覆盖
|
||||
2. **模块懒加载**:未来可考虑运行时动态加载模块(Module Federation)
|
||||
3. **版本管理**:配置文件支持 `version` 字段,用于产物版本控制
|
||||
4. **CI/CD 集成**:构建命令可直接接入 Jenkins/GitHub Actions,参数化构建不同系统
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,268 @@
|
||||
# rui-admin 功能设计文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
rui-admin 是睿核通用平台框架的后台管理前端系统,基于 Vue 3 + Element Plus + UnoCSS 构建,提供完整的系统管理、用户管理、内容管理、订单管理、营销管理等功能。
|
||||
|
||||
## 2. 功能模块划分
|
||||
|
||||
### 2.1 系统管理(system)- 核心模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| 菜单管理 | ✅ 已完成 | SysMenuController | 树形结构、图标修复 |
|
||||
| 角色管理 | ✅ 已完成 | SysRoleController | CRUD + 权限分配 |
|
||||
| 部门管理 | ✅ 已完成 | SysDeptController | 树形表格 |
|
||||
| 字典管理 | ✅ 已完成 | SysDictTypeController | 字典类型 + 字典项 |
|
||||
| 参数配置 | ✅ 已完成 | SysConfigController | 系统参数维护 |
|
||||
| 租户管理 | ✅ 已完成 | SysTenantController | 多租户管理 |
|
||||
| **操作日志** | ⏳ 待开发 | 需新建 | 用户操作审计 |
|
||||
| **登录日志** | ⏳ 待开发 | 需新建 | 登录行为记录 |
|
||||
| **OAuth2客户端** | ⏳ 待开发 | SystemOAuth2ClientController | 客户端管理前端 |
|
||||
|
||||
### 2.2 用户中心(user)- 核心模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| 用户管理 | ✅ 已完成 | UserController | 用户CRUD |
|
||||
| 用户等级 | ✅ 已完成 | UserLevelController | 等级体系管理 |
|
||||
| **用户详情** | ⏳ 待开发 | UserDetailController | 用户详细信息 |
|
||||
| **等级日志** | ⏳ 待开发 | UserLevelLogController | 等级变更记录 |
|
||||
| **用户账户** | ⏳ 待开发 | 需评估 | 账户安全设置 |
|
||||
| **用户地址** | ⏳ 待开发 | 需新建 | 收货地址管理 |
|
||||
|
||||
### 2.3 系统设置(settings)- 基础模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| **个人设置** | ⏳ 待开发 | 需评估 | 个人信息修改 |
|
||||
| **系统设置** | ⏳ 待开发 | SysConfigController | 全局参数配置界面 |
|
||||
| **密码修改** | ⏳ 待开发 | UserController | 修改登录密码 |
|
||||
|
||||
### 2.4 订单管理(order)- 业务模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| **订单列表** | ⏳ 预留 | 需新建服务 | 订单查询、状态管理 |
|
||||
| **退款管理** | ⏳ 预留 | 需新建服务 | 退款申请处理 |
|
||||
|
||||
### 2.5 内容管理(cms)- 业务模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| **文章管理** | ⏳ 预留 | 需新建服务 | CMS文章CRUD |
|
||||
| **分类管理** | ⏳ 预留 | 需新建服务 | 文章分类 |
|
||||
| **轮播管理** | ⏳ 预留 | 需新建服务 | Banner管理 |
|
||||
|
||||
### 2.6 营销管理(marketing)- 业务模块
|
||||
|
||||
| 功能 | 状态 | 后端API | 说明 |
|
||||
|------|------|---------|------|
|
||||
| **优惠券** | ⏳ 预留 | 需新建服务 | 优惠券CRUD |
|
||||
| **活动管理** | ⏳ 预留 | 需新建服务 | 营销活动 |
|
||||
|
||||
## 3. 开发优先级
|
||||
|
||||
### Phase 1:核心功能完善(立即开始)
|
||||
|
||||
1. **操作日志**(system/log)
|
||||
- 后端:创建 OperLog 实体、Mapper、Service、Controller
|
||||
- 前端:日志列表页、详情弹窗
|
||||
- 优先级:🔴 高
|
||||
|
||||
2. **用户详情**(user/info/detail)
|
||||
- 后端:UserDetailController 已有,补充前端
|
||||
- 前端:用户详情查看/编辑
|
||||
- 优先级:🔴 高
|
||||
|
||||
3. **等级日志**(user/level-log)
|
||||
- 后端:UserLevelLogController 已有,补充前端
|
||||
- 前端:等级变更记录列表
|
||||
- 优先级:🟡 中
|
||||
|
||||
4. **系统设置**(settings)
|
||||
- 后端:复用 SysConfigController
|
||||
- 前端:参数配置界面(与 system/config 区别:更友好的展示)
|
||||
- 优先级:🟡 中
|
||||
|
||||
### Phase 2:基础功能补充(近期)
|
||||
|
||||
5. **登录日志**(system/login-log)
|
||||
- 后端:创建 LoginLog 实体、Mapper、Service、Controller
|
||||
- 前端:登录记录列表
|
||||
- 优先级:🟡 中
|
||||
|
||||
6. **OAuth2客户端管理**(system/client)
|
||||
- 后端:SystemOAuth2ClientController 已有
|
||||
- 前端:客户端CRUD
|
||||
- 优先级:🟡 中
|
||||
|
||||
7. **个人中心**(profile)
|
||||
- 后端:复用现有接口
|
||||
- 前端:个人信息展示与修改
|
||||
- 优先级:🟢 低
|
||||
|
||||
### Phase 3:业务模块(按需)
|
||||
|
||||
8. **订单管理** - 需新建 rui-service-order 服务
|
||||
9. **CMS内容管理** - 需新建 rui-service-cms 服务
|
||||
10. **营销管理** - 需新建 rui-service-marketing 服务
|
||||
|
||||
## 4. 技术规范
|
||||
|
||||
### 4.1 前端规范
|
||||
|
||||
```typescript
|
||||
// 页面结构标准
|
||||
views/
|
||||
├── {module}/
|
||||
│ ├── Index.vue # 列表页(必须)
|
||||
│ ├── {Module}FormDialog.vue # 表单弹窗(新增/编辑)
|
||||
│ └── {Module}DetailDialog.vue # 详情弹窗(可选)
|
||||
```
|
||||
|
||||
### 4.2 后端规范
|
||||
|
||||
```java
|
||||
// Controller 标准结构
|
||||
@RestController
|
||||
@RequestMapping("/{模块}/admin/{功能}")
|
||||
public class XxxController extends BaseController<IService, Entity> {
|
||||
// 自动获得:page、list、getById、save、updateById、remove
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 API 路径规范
|
||||
|
||||
| 类型 | 路径前缀 | 示例 |
|
||||
|------|---------|------|
|
||||
| 对外管理 | `/{模块}/admin/{功能}` | `/system/admin/log` |
|
||||
| 内部调用 | `/{模块}/inner/{功能}` | `/system/inner/client` |
|
||||
| 对外入口 | `/{模块}/entry/{功能}` | `/auth/entry/login` |
|
||||
|
||||
## 5. 数据库设计(新增表)
|
||||
|
||||
### 5.1 操作日志表(rui_sys_oper_log)
|
||||
|
||||
```sql
|
||||
CREATE TABLE rui_sys_oper_log (
|
||||
id BIGINT NOT NULL,
|
||||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||||
oper_type TINYINT NOT NULL DEFAULT 1 COMMENT '操作类型 1:新增 2:修改 3:删除 4:查询 5:导出 6:登录 7:登出',
|
||||
title VARCHAR(200) NOT NULL COMMENT '操作模块',
|
||||
method VARCHAR(500) DEFAULT NULL COMMENT '请求方法',
|
||||
request_url VARCHAR(500) DEFAULT NULL,
|
||||
request_method VARCHAR(10) DEFAULT NULL COMMENT 'GET/POST/PUT/DELETE',
|
||||
request_params TEXT DEFAULT NULL,
|
||||
response_data TEXT DEFAULT NULL,
|
||||
user_id BIGINT DEFAULT NULL,
|
||||
user_name VARCHAR(100) DEFAULT NULL,
|
||||
oper_ip VARCHAR(128) DEFAULT NULL,
|
||||
oper_location VARCHAR(255) DEFAULT NULL,
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:失败 1:成功',
|
||||
error_msg TEXT DEFAULT NULL,
|
||||
cost_time BIGINT DEFAULT 0 COMMENT '耗时(ms)',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_tenant (tenant_id),
|
||||
INDEX idx_created (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志';
|
||||
```
|
||||
|
||||
### 5.2 登录日志表(rui_sys_login_log)
|
||||
|
||||
```sql
|
||||
CREATE TABLE rui_sys_login_log (
|
||||
id BIGINT NOT NULL,
|
||||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||||
user_id BIGINT DEFAULT NULL,
|
||||
username VARCHAR(100) DEFAULT NULL,
|
||||
login_type TINYINT NOT NULL DEFAULT 1 COMMENT '登录类型 1:密码 2:短信 3:微信',
|
||||
client_id VARCHAR(100) DEFAULT NULL,
|
||||
ip VARCHAR(128) DEFAULT NULL,
|
||||
location VARCHAR(255) DEFAULT NULL,
|
||||
browser VARCHAR(200) DEFAULT NULL,
|
||||
os VARCHAR(200) DEFAULT NULL,
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:失败 1:成功',
|
||||
msg VARCHAR(500) DEFAULT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_tenant (tenant_id),
|
||||
INDEX idx_created (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录日志';
|
||||
```
|
||||
|
||||
## 6. 实施计划
|
||||
|
||||
### 第1周:Phase 1 核心功能
|
||||
- [ ] 后端:操作日志 AOP 拦截 + API
|
||||
- [ ] 前端:system/log 页面
|
||||
- [ ] 前端:user/info 详情弹窗
|
||||
- [ ] 前端:user/level-log 页面
|
||||
|
||||
### 第2周:Phase 2 基础功能
|
||||
- [ ] 后端:登录日志 API
|
||||
- [ ] 前端:system/login-log 页面
|
||||
- [ ] 前端:settings 系统设置页
|
||||
- [ ] 前端:profile 个人中心
|
||||
|
||||
### 第3周+:Phase 3 业务模块(按需)
|
||||
- [ ] 订单服务 + 前端页面
|
||||
- [ ] CMS服务 + 前端页面
|
||||
- [ ] 营销服务 + 前端页面
|
||||
|
||||
## 7. 前端组件规划
|
||||
|
||||
### 7.1 复用组件
|
||||
|
||||
| 组件 | 用途 | 位置 |
|
||||
|------|------|------|
|
||||
| RuiTable | 通用表格 | components/RuiTable.vue |
|
||||
| RuiIcon | 图标渲染 | components/RuiIcon.vue |
|
||||
| IconPicker | 图标选择 | components/IconPicker.vue |
|
||||
|
||||
### 7.2 新增组件需求
|
||||
|
||||
| 组件 | 用途 | 优先级 |
|
||||
|------|------|--------|
|
||||
| LogDetailDialog | 日志详情展示 | 🔴 高 |
|
||||
| UserDetailPanel | 用户信息卡片 | 🔴 高 |
|
||||
| ConfigGroupPanel | 配置分组展示 | 🟡 中 |
|
||||
|
||||
## 8. 权限设计
|
||||
|
||||
### 8.1 菜单权限
|
||||
|
||||
```
|
||||
system:menu:list - 菜单列表
|
||||
system:menu:add - 新增菜单
|
||||
system:menu:edit - 编辑菜单
|
||||
system:menu:remove - 删除菜单
|
||||
system:log:list - 日志列表
|
||||
system:log:remove - 删除日志
|
||||
```
|
||||
|
||||
### 8.2 数据权限
|
||||
|
||||
- 超级管理员:查看所有租户数据
|
||||
- 租户管理员:仅查看本租户数据
|
||||
- 普通用户:仅查看个人数据
|
||||
|
||||
## 9. 注意事项
|
||||
|
||||
1. **操作日志性能**:大量操作日志可能影响性能,建议:
|
||||
- 异步写入(MQ或线程池)
|
||||
- 定期归档(30天前的日志迁移到历史表)
|
||||
- 提供日志清理功能
|
||||
|
||||
2. **登录日志安全**:
|
||||
- 记录失败登录尝试,用于安全审计
|
||||
- 支持 IP 黑名单
|
||||
- 异常登录告警
|
||||
|
||||
3. **预留模块**:
|
||||
- order/cms/marketing 为业务预留模块
|
||||
- 需要时创建对应后端服务
|
||||
- 前端页面保持占位状态即可
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user