wuwenyi преди 2 седмици
родител
ревизия
ddee70a977
променени са 3 файла, в които са добавени 53 реда и са изтрити 60 реда
  1. 47 57
      README.md
  2. 1 1
      src/router/index.ts
  3. 5 2
      src/views/dashboard/index.vue

+ 47 - 57
README.md

@@ -4,18 +4,12 @@
 
 ## 技术栈
 
-- Vue 3.4 + Vite 4.5
-- TypeScript 5
+- Vue 3.4 + Vite 4.5 + TypeScript 5
 - Element Plus 2.7
-- Pinia
-- Vue Router 4
+- Pinia + Vue Router 4
+- LogicFlow 1.2(流程设计器,v1.x 无 destroy 方法)
+- ECharts 6 + vue-echarts(分析看板)
 - Axios
-- LogicFlow 1.2(流程设计器)
-
-## 环境要求
-
-- Node.js 18+
-- npm 9+
 
 ## 快速启动
 
@@ -25,67 +19,63 @@ npm install
 npm run dev
 ```
 
-开发服务器默认启动在 `http://localhost:3000`,Vite 会自动代理 `/api` 请求到后端 `http://localhost:8080`。
+开发服务器:`http://localhost:3000`,自动代理 `/api` 到 `http://localhost:8080`。
 
 ## 构建部署
 
 ```bash
-# 生产构建
-npm run build
-
-# 预览生产构建
-npm run preview
+npm run build     # 输出到 dist/
+npm run preview   # 预览构建产物
 ```
 
-构建产物输出到 `dist/` 目录
+Docker 构建时如遇缓存问题,修改 `Dockerfile` 中的 `ARG BUILD_BUSTER` 值破缓存。
 
-## 开发说明
+## 默认账号
 
-### 代理配置
+密码均为 `123456a`:
 
-开发环境的 API 代理配置在 `vite.config.ts`:
+| 账号 | 可见菜单 |
+|------|---------|
+| admin | 全部(首页、审批中心、流程管理、系统管理、统计分析) |
+| zhangsan | 首页、审批中心 |
+| lisi | 首页、审批中心、系统管理 |
+| wangwu | 首页、审批中心、流程管理、统计分析 |
 
-```ts
-server: {
-  port: 3000,
-  proxy: {
-    '/api': {
-      target: 'http://localhost:8080',
-      changeOrigin: true,
-      rewrite: (path) => path.replace(/^\/api/, '')
-    }
-  }
-}
-```
+菜单可见性由 `employeeType` 控制(`super_admin` / `flow_manager` / `dept_manager` / `common_user`)。
+
+## 页面说明
 
-如果后端运行在其他地址/端口,请修改 `vite.config.ts` 中的 `target`。
+| 路由 | 页面 | 说明 |
+|------|------|------|
+| `/dashboard` | 首页 | 统计卡片 + 快捷入口 |
+| `/approval/todo` | 待办任务 | 审批通过/拒绝/转办/加签、分支选择 |
+| `/approval/mine` | 我的发起 | 已发起流程列表、筛选 |
+| `/flow/definition` | 流程管理 | 流程 CRUD、发布/停用、编辑表单和导入配置 |
+| `/flow/designer` | 流程设计器 | 拖拽设计审批流程(管理员可见) |
+| `/flow/execute` | 流程执行 | 发起流程(选择已发布流程) |
+| `/flow/instance/mine` | 我的发起 | 流程实例列表 + 批量导入 |
+| `/flow/instance/all` | 流程明细 | 全部实例(管理员) |
+| `/analysis` | 分析看板 | KPI、趋势、效率、节点统计、流程明细 |
+| `/system/user` | 用户管理 | 系统用户 CRUD + 分配角色 |
+| `/system/role` | 审批角色 | 角色 CRUD + 企微配置 |
 
-### 项目结构
+## 项目结构
 
 ```
 src/
-├── api/           # API 接口封装
-├── components/    # 公共组件(Layout、Navbar、Sidebar)
-├── router/        # 路由配置
-├── stores/        # Pinia 状态管理
-├── types/         # TypeScript 类型定义
-├── utils/         # 工具函数
-├── views/         # 页面视图
-│   ├── dashboard/
-│   ├── login/
-│   ├── flow/      # 流程模块(定义、设计器、审批、执行)
-│   └── system/    # 系统模块(用户、角色、部门、菜单)
-├── App.vue
+├── api/                # API 接口层
+│   └── flow/           # 流程相关(task、definition、instance、import)
+├── components/         # 公共组件(Layout、Sidebar、FlowFormFields、FilePreview)
+├── router/             # 路由 + 权限守卫
+├── stores/             # Pinia(user-store)
+├── types/              # TypeScript 类型定义
+├── utils/              # 工具函数(auth、file、flow、format)
+├── views/
+│   ├── dashboard/      # 首页
+│   ├── login/          # 登录
+│   ├── workbench/      # 审批中心(待办/已办/抄送/我的发起)
+│   ├── flow/           # 流程设计器、定义、执行、实例
+│   ├── system/         # 用户管理、审批角色
+│   └── analysis/       # 数据分析看板
 └── main.ts
 ```
-
-### 登录
-
-默认管理员账号:`admin` / `admin123`
-
-支持"记住密码"功能,勾选后账号密码会保存到浏览器 localStorage。
-
-## 注意事项
-
-1. 开发服务器端口 3000 被占用时,Vite 会自动切换到下一个可用端口
-2. 确保后端服务已启动(`http://localhost:8080`),否则 API 请求会失败

+ 1 - 1
src/router/index.ts

@@ -139,7 +139,7 @@ const router = createRouter({
           path: 'mine',
           name: 'MyInstance',
           component: () => import('@/views/flow/instance/mine.vue'),
-          meta: { title: '我的流程', icon: 'List' }
+          meta: { title: '我的发起', icon: 'List' }
         },
         {
           path: 'execute',

+ 5 - 2
src/views/dashboard/index.vue

@@ -35,7 +35,7 @@
             </div>
             <div class="stat-info">
               <div class="stat-value">{{ stats.instanceCount }}</div>
-              <div class="stat-label">我的流程</div>
+              <div class="stat-label">我的发起</div>
             </div>
           </div>
         </el-card>
@@ -71,7 +71,7 @@
               </div>
               <div class="quick-text">处理待办</div>
             </div>
-            <div class="quick-item" @click="$router.push('/flow/designer')">
+            <div v-if="isAdmin" class="quick-item" @click="$router.push('/flow/designer')">
               <div class="quick-icon" style="background: #409EFF;">
                 <el-icon><EditPen /></el-icon>
               </div>
@@ -185,6 +185,7 @@ import { listTodo } from '@/api/flow/task'
 import { listMyInstance, startInstance } from '@/api/flow/instance'
 import { listDefinition, listEnabled } from '@/api/flow/definition'
 import { listUser } from '@/api/system/user'
+import { useUserStore } from '@/stores/user-store'
 import { uploadFile } from '@/api/file'
 import { beforeFileUpload, collectAttachmentUrls, getUploadUrl } from '@/utils/file'
 import type { FlowDefinition } from '@/types/flow'
@@ -192,6 +193,8 @@ import FlowFormFields from '@/components/FlowFormFields/index.vue'
 import FilePreview from '@/components/FilePreview/index.vue'
 
 const router = useRouter()
+const userStore = useUserStore()
+const isAdmin = computed(() => userStore.userInfo?.employeeType === 'super_admin' || userStore.userInfo?.employeeType === 'flow_manager')
 
 const stats = ref({
   definitionCount: 0,