Sfoglia il codice sorgente

docs: 更新 CLAUDE.md,补充 Phase 3 实现记录及配分指标体系说明

simonlll 1 mese fa
parent
commit
88f65fc9be
1 ha cambiato i file con 501 aggiunte e 0 eliminazioni
  1. 501 0
      CLAUDE.md

+ 501 - 0
CLAUDE.md

@@ -0,0 +1,501 @@
1
+# 重庆机场安检分级质控系统 - 前端
2
+
3
+## 项目概述
4
+
5
+重庆机场安检分级质控系统管理端,基于若依(RuoYi)框架二次开发。系统涵盖考勤管理、查获物品、巡检管理、考试培训、大屏展示、绩效管理等核心业务模块。
6
+
7
+- **项目名**: airport-web
8
+- **版本**: 3.9.0
9
+- **技术栈**: Vue 3 + Vite 6 + Element Plus + Pinia + Vue Router
10
+
11
+## 开发环境
12
+
13
+```bash
14
+# 安装依赖
15
+npm install
16
+
17
+# 启动开发服务器(端口 8111)
18
+npm run dev
19
+
20
+# 生产构建
21
+npm run build:prod
22
+
23
+# 预发构建
24
+npm run build:stage
25
+```
26
+
27
+## 技术栈
28
+
29
+| 技术 | 版本 | 用途 |
30
+|------|------|------|
31
+| Vue 3 | 3.5.16 | 核心框架 |
32
+| Vite | 6.3.5 | 构建工具 |
33
+| Element Plus | 2.9.9 | UI 组件库 |
34
+| Pinia | 3.0.2 | 状态管理 |
35
+| Vue Router | 4.5.1 | 路由管理 |
36
+| Axios | 1.9.0 | HTTP 请求 |
37
+| ECharts | 5.6.0 | 图表可视化 |
38
+| js-cookie | 3.0.5 | Cookie 管理 |
39
+| jsencrypt | 3.3.2 | RSA 加密(密码登录) |
40
+| nprogress | 0.2.0 | 页面加载进度条 |
41
+| vuedraggable | 4.1.0 | 拖拽排序 |
42
+| vue-cropper | 1.1.1 | 图片裁剪 |
43
+| html2canvas / jspdf | - | 导出 PDF |
44
+| docx | 9.5.1 | 导出 Word |
45
+| codemirror | - | SQL 编辑器 |
46
+| moment | - | 日期处理 |
47
+
48
+## 目录结构
49
+
50
+```
51
+src/
52
+├── api/                  # 接口请求层(按业务模块分类)
53
+│   ├── system/           # 系统管理接口
54
+│   ├── attendance/       # 考勤接口
55
+│   ├── check/            # 巡检接口
56
+│   ├── item/             # 查获物品接口
57
+│   ├── examManage/       # 考试管理接口
58
+│   ├── largeScreen/      # 大屏接口
59
+│   ├── performance/      # 绩效接口
60
+│   └── monitor/          # 监控接口
61
+├── assets/               # 静态资源(图片、SVG图标、样式)
62
+├── components/           # 公共组件
63
+│   ├── FileUpload/       # 文件上传
64
+│   ├── ImageUpload/      # 图片上传
65
+│   ├── Editor/           # 富文本编辑器(Quill)
66
+│   ├── Pagination/       # 分页组件
67
+│   ├── DictTag/          # 字典标签
68
+│   ├── UserSelect/       # 用户选择器
69
+│   └── sqlEdit/          # SQL 编辑器
70
+├── directive/            # 自定义指令(权限、防重复点击等)
71
+├── hooks/                # 组合式函数
72
+├── layout/               # 布局组件(侧边栏、顶栏、标签页)
73
+├── plugins/              # Vue 插件注册
74
+├── router/               # 路由配置(含动态路由)
75
+├── store/                # Pinia 状态管理
76
+│   └── modules/          # 各模块 store(user、app、permission、settings等)
77
+├── utils/                # 工具函数(request、auth、dict 等)
78
+└── views/                # 页面视图
79
+    ├── system/           # 系统管理(用户、角色、菜单、部门、字典等)
80
+    ├── attendance/       # 考勤管理
81
+    ├── check/            # 巡检管理
82
+    ├── item/             # 查获物品管理
83
+    ├── examManage/       # 考试培训管理
84
+    ├── dataBigScreen/    # 数据大屏
85
+    │   ├── dashboard/    # 综合大屏
86
+    │   ├── attendance/   # 考勤大屏
87
+    │   ├── abilityPortrait/   # 能力画像大屏
88
+    │   └── examQuestionStatistics/ # 考题统计大屏
89
+    ├── performanceManage/# 绩效管理
90
+    ├── monitor/          # 系统监控
91
+    └── tool/             # 开发工具
92
+```
93
+
94
+## 环境配置
95
+
96
+| 环境 | 配置文件 | API 前缀 |
97
+|------|----------|----------|
98
+| 开发 | `.env.development` | `/dev-api` |
99
+| 预发 | `.env.staging` | - |
100
+| 生产 | `.env.production` | - |
101
+
102
+开发环境代理(`vite.config.js`):
103
+- `/dev-api` → `http://airport.samsundot.com:9024/prod-api`(生产后端,可改为本地)
104
+- 本地后端地址:`http://192.168.3.221:8088`(注释中有配置)
105
+
106
+切换本地后端:在 `vite.config.js` 中将 `baseUrl` 改为 `http://127.0.0.1:8088`
107
+
108
+## 开发约定
109
+
110
+### API 接口
111
+
112
+- 所有接口统一通过 `src/utils/request.js` 封装的 axios 实例调用
113
+- 请求头携带 `Authorization: Bearer <token>`
114
+- 统一返回结构:`{ code, msg, data }`,code=200 为成功
115
+
116
+### 权限控制
117
+
118
+- 使用 `v-hasPermi` 指令控制按钮级别权限
119
+- 使用 `v-hasRole` 指令控制角色级别权限
120
+- 动态路由从后端接口加载,存储在 Pinia `permission` store 中
121
+
122
+### 字典使用
123
+
124
+- 字典数据通过 `useDict()` hook 获取
125
+- 字典值展示使用 `<dict-tag>` 组件
126
+
127
+### 组件规范
128
+
129
+- 页面组件放在 `views/` 对应业务目录下
130
+- 公共组件放在 `components/` 目录下
131
+- 采用 `<script setup>` 语法 + `unplugin-vue-setup-extend-plus`(支持 `defineOptions`)
132
+
133
+### 样式
134
+
135
+- 使用 Less / SCSS
136
+- 全局样式在 `src/assets/styles/`
137
+- Element Plus 主题在全局样式中覆盖
138
+
139
+## 构建部署
140
+
141
+```bash
142
+# 构建后产物在 dist/ 目录
143
+# 静态资源输出到 dist/static/{js,css,img}/
144
+npm run build:prod
145
+
146
+# 通过 SSH 部署到服务器(需配置 script/deploy.mjs)
147
+npm run deploy        # 部署到开发环境
148
+npm run deploy:prod   # 部署到生产环境
149
+```
150
+
151
+## 业务模块说明
152
+
153
+| 模块 | 路径 | 说明 |
154
+|------|------|------|
155
+| 系统管理 | `/system` | 用户、角色、菜单、部门、岗位、字典、参数配置 |
156
+| 考勤管理 | `/attendance` | 考勤记录、班组记录、岗位记录、考勤区域 |
157
+| 巡检管理 | `/check` | 巡检任务、巡检记录、纠错管理 |
158
+| 查获物品 | `/item` | 查获记录、物品类别管理 |
159
+| 考试培训 | `/examManage` | 题库、试卷、日考、考试记录 |
160
+| 大屏展示 | `/dataBigScreen` | 综合大屏、考勤大屏、能力画像、考题统计 |
161
+| 绩效管理 | `/performanceManage` | 绩效配置、绩效查询 |
162
+| 系统监控 | `/monitor` | 在线用户、操作日志、登录日志、缓存、服务器 |
163
+| 审批流程 | - | 检查纠错审批流程 |
164
+
165
+---
166
+
167
+## 重庆需求分析(2026-04-23)
168
+
169
+> 来源文件:`重庆需求资料/` 目录下的需求 Excel 文档。
170
+
171
+---
172
+
173
+### 一、新增页面总览(Step1 首期)
174
+
175
+| 菜单位置 | 页面 | 说明 |
176
+|----------|------|------|
177
+| 台账管理 | 台账一键导入 | 单页面实现20个台账的Excel上传导入(两列10行布局) |
178
+| 台账管理 | 部门监察问题记录 | 导入后查询,含查询筛选+列表+导出 |
179
+| 台账管理 | 队室三级质控巡查记录 | 同上(暂未计分) |
180
+| 台账管理 | 部门实时质控拦截记录 | 同上(对应现有查获功能,部分字段不同) |
181
+| 台账管理 | 服务巡查 | 同上 |
182
+| 台账管理 | 投诉情况 | 同上 |
183
+| 台账管理 | 安保测试记录(部门) | 同上 |
184
+| 台账管理 | 通道过检率 | 同上(暂未计分) |
185
+| 台账管理 | 不安全事件 | 同上 |
186
+| 台账管理 | 2026查获违规品统计 | 同上(暂未计分) |
187
+| 台账管理 | 航站楼加分 | 同上,查询条件:审核日期/姓名/班组 |
188
+| 台账管理 | 成绩收集 | 同上,查询条件:用户名称/小组/班组/部门/类别/期数 |
189
+| 台账管理 | 小额奖励审批单 | 同上(钉钉OA接入) |
190
+| 台账管理 | 部门奖惩记录 | 页面录入(非导入),含增删改查 |
191
+| 台账管理 | 请休假记录(特殊) | 页面录入,含增删改查 |
192
+| 台账管理 | 锦旗及感谢信 | 页面录入,含增删改查 |
193
+| 配分管理 | 配分表体系维护 | 6维度98项指标树形结构,支持权重/分值/启停配置 |
194
+| 配分管理 | 配分事项录入 | 针对个人手动录入加/扣分事项,含导入导出 |
195
+| 配分管理 | 推送配置 | 各维度推送阈值配置,支持定向推送设置 |
196
+| 大屏展示 | 六维度能力画像大屏 | 雷达图(员工→小组→队室→部门→站),含等级预警色标 |
197
+
198
+---
199
+
200
+### 二、评分等级与颜色规范
201
+
202
+全系统统一使用以下颜色标识,不可混用:
203
+
204
+| 等级 | 分值 | 颜色 | 触发动作 |
205
+|------|------|------|----------|
206
+| 较差 | < 75 | **红色** `#F56C6C` | 启动预警,推送管理人员 |
207
+| 良好 | 75~85 | 正常(默认色) | 无 |
208
+| 优秀 | > 85 | **绿色** `#67C23A` | 无 |
209
+| 已推送 | — | **黄色** `#E6A23C` | 已推送标识 |
210
+
211
+---
212
+
213
+### 三、六大维度权重与雷达图
214
+
215
+雷达图需在 **员工 / 小组 / 队室 / 部门 / 站** 五个层级分别展示,逐级汇总:
216
+
217
+| 维度轴 | 权重 | 基础分 |
218
+|--------|------|--------|
219
+| 安全防控能力 | 40% | 80 |
220
+| 服务响应能力 | 20% | 80 |
221
+| 业务实操能力 | **10%** | 80 |
222
+| 作风践行能力 | 10% | 80 |
223
+| 群团协作能力 | **15%** | 80 |
224
+| 身心调节能力 | 5%  | 80 |
225
+
226
+> 2026-04-24 更新:业务实操能力 15%→10%,群团协作能力 10%→15%(来源:04.配分表分析.xlsx)
227
+
228
+**综合得分** = Σ(各维度得分 × 权重)
229
+
230
+---
231
+
232
+### 四、台账查询页面通用规范
233
+
234
+所有台账查询页面遵循以下规范:
235
+- **暂不提供增删改功能**(部门奖惩/请假/锦旗三个页面录入除外)
236
+- 列表显示绿色关键字段,详情页显示全量字段
237
+- 必须提供**导出**功能(全字段导出)
238
+- 导入时保留原始台账全量字段,不做删减
239
+- 附件字段显示为可点击的预览/下载链接
240
+
241
+各台账查询条件参考(未特别说明的保持与海口一致):
242
+- 投诉情况:时间 / 航班号 / 旅客姓名 / 班组 / 责任人
243
+- 航站楼加分:审核日期 / 姓名 / 班组
244
+- 成绩收集:用户名称 / 小组 / 班组 / 部门 / 类别 / 期数
245
+
246
+---
247
+
248
+### 五、配分表体系维护页面
249
+
250
+**功能要求:**
251
+- 以树形结构展示 6 个维度 → 98 项指标(2~4级)
252
+- 支持对每个节点:增删改查、启用/停用、备注编辑
253
+- 维度级别:可调整权重百分比
254
+- 指标级别:可调整分值(正/负)、类型(加分/扣分)
255
+- 修改分值/权重后,跑分引擎重新计算时生效
256
+
257
+---
258
+
259
+### 六、配分事项录入页面
260
+
261
+**核心字段(对应后端 `score_event` 表):**
262
+
263
+| 字段 | 说明 |
264
+|------|------|
265
+| 一级指标 | 六大维度之一 |
266
+| 二级指标 | 对应维度下的二级分类 |
267
+| 三级指标 | 末级指标(群团协作有四级) |
268
+| 四级指标 | 仅群团协作维度使用 |
269
+| 时间 | 事件发生时间 |
270
+| 位置 | 区域/通道 |
271
+| 责任人 | 关联员工 |
272
+| 分值 | 正数=加分,负数=扣分 |
273
+| 叠加分值 | 根据后果叠加的额外分值 |
274
+| 事件描述 | 事件详情 |
275
+| 备注 | 附加说明 |
276
+| 数据来源 | 手动录入 / 台账同步 |
277
+
278
+**功能要求:**
279
+- 支持手动新增、导入(Excel)、导出
280
+- 提供按员工/维度/时间范围的查询
281
+- 台账同步数据与手动录入数据在同一列表展示,来源字段区分
282
+
283
+---
284
+
285
+### 七、组织架构四级层级说明
286
+
287
+重庆特有四级结构(与其他机场不同),在部门树、权限配置、数据筛选等处均需支持:
288
+
289
+```
290
+安检站
291
+  └── 部门(如:旅检三部)
292
+        └── 队室/班组(如:安平班组)
293
+              └── 小组/通道(如:陈行小组)
294
+```
295
+
296
+行政部门(安全中心/培训中心/服务中心/设备中心)与业务部门并列,不参与评分汇总。
297
+
298
+---
299
+
300
+### 八、Step2 规划(暂不开发,预留接口位置)
301
+
302
+- 钉钉集成:组织架构同步 + 考勤接入 + OA审批流
303
+- AI助手(13个场景):员工画像/排班辅助/知识库/风险分析等
304
+- 顾客投诉独立系统
305
+- 设备中心(准入/运营/报废)
306
+- 薪酬系统对接
307
+
308
+---
309
+
310
+## Phase 1 实现记录(台账导入,2026-04-24)
311
+
312
+### 新增文件结构
313
+
314
+```
315
+src/
316
+├── api/ledger/
317
+│   └── index.js              # 全部台账 API(12个导入 + 15个列表/导出 + 3个CRUD)
318
+└── views/ledger/
319
+    ├── import/index.vue       # 台账一键导入主页(2列×6行网格卡片布局)
320
+    ├── supervisionProblem/    # 部门监察问题记录(查询+导出)
321
+    ├── patrolInspection/      # 队室三级质控巡查记录(查询+导出)
322
+    ├── realtimeInterception/  # 实时质控拦截记录(查询+导出)
323
+    ├── servicePatrol/         # 服务巡查记录(查询+导出)
324
+    ├── complaint/             # 投诉情况(查询+导出,含航班号/旅客/责任人筛选)
325
+    ├── securityTest/          # 安保测试记录(查询+导出)
326
+    ├── channelPassRate/       # 通道过检率(查询+导出)
327
+    ├── unsafeEvent/           # 不安全事件(查询+导出)
328
+    ├── seizureStats/          # 查获违规品统计(查询+导出)
329
+    ├── terminalBonus/         # 航站楼加分(查询+导出,含姓名筛选)
330
+    ├── examScore/             # 成绩收集(查询+导出,含姓名/类别/期数筛选)
331
+    ├── rewardApproval/        # 小额奖励审批单(查询+导出)
332
+    ├── rewardPenalty/         # 部门奖惩记录(完整增删改查)
333
+    ├── leaveSpecial/          # 请休假记录特殊(完整增删改查)
334
+    └── bannerLetter/          # 锦旗及感谢信(完整增删改查)
335
+```
336
+
337
+### 接口路由规范
338
+
339
+| 台账 | 导入 URL | 列表 URL |
340
+|------|----------|----------|
341
+| 部门监察问题记录 | `POST /ledger/import/supervisionProblem` | `GET /ledger/supervisionProblem/list` |
342
+| 队室三级质控巡查 | `POST /ledger/import/patrolInspection` | `GET /ledger/patrolInspection/list` |
343
+| 实时质控拦截 | `POST /ledger/import/realtimeInterception` | `GET /ledger/realtimeInterception/list` |
344
+| 服务巡查 | `POST /ledger/import/servicePatrol` | `GET /ledger/servicePatrol/list` |
345
+| 投诉情况 | `POST /ledger/import/complaint` | `GET /ledger/complaint/list` |
346
+| 安保测试 | `POST /ledger/import/securityTest` | `GET /ledger/securityTest/list` |
347
+| 通道过检率 | `POST /ledger/import/channelPassRate` | `GET /ledger/channelPassRate/list` |
348
+| 不安全事件 | `POST /ledger/import/unsafeEvent` | `GET /ledger/unsafeEvent/list` |
349
+| 查获违规品统计 | `POST /ledger/import/seizureStats` | `GET /ledger/seizureStats/list` |
350
+| 航站楼加分 | `POST /ledger/import/terminalBonus` | `GET /ledger/terminalBonus/list` |
351
+| 成绩收集 | `POST /ledger/import/examScore` | `GET /ledger/examScore/list` |
352
+| 小额奖励审批单 | `POST /ledger/import/rewardApproval` | `GET /ledger/rewardApproval/list` |
353
+| 部门奖惩记录 | 无(页面录入) | `GET /ledger/rewardPenalty/list` |
354
+| 请休假记录特殊 | 无(页面录入) | `GET /ledger/leaveSpecial/list` |
355
+| 锦旗及感谢信 | 无(页面录入) | `GET /ledger/bannerLetter/list` |
356
+
357
+### 权限标识
358
+
359
+```
360
+ledger:import:{台账key}            # 导入权限
361
+ledger:{台账key}:list              # 列表权限
362
+ledger:{台账key}:export            # 导出权限
363
+ledger:{台账key}:add/edit/remove   # 仅 rewardPenalty / leaveSpecial / bannerLetter
364
+```
365
+
366
+### 待完成(上线前)
367
+
368
+1. 在数据库执行 `sql/ledger.sql`(后端)
369
+2. 在**菜单管理**中配置"台账管理"父菜单及 15 个子菜单,路由路径对应各 `views/ledger/*/index.vue`
370
+3. 在**角色权限**中分配 `ledger:*` 权限给相关角色
371
+4. 台账导入 Excel 模板(字段顺序需与 `@Excel` 注解的 `name` 保持一致)
372
+
373
+---
374
+
375
+## Phase 2 实现记录(配分体系,2026-04-24)
376
+
377
+### 新增文件结构
378
+
379
+```
380
+src/
381
+├── api/score/
382
+│   └── index.js              # 全部配分API(维度/指标/事项/推送配置)
383
+└── views/score/
384
+    ├── dimension/index.vue   # 配分表体系维护(左侧维度卡片 + 右侧指标树)
385
+    ├── event/index.vue       # 配分事项录入(CRUD + 导入导出,指标三级联动选择)
386
+    └── pushConfig/index.vue  # 推送配置(按维度分组展示,per维度per部门配置)
387
+```
388
+
389
+### 页面功能说明
390
+
391
+**配分表体系维护 (`score/dimension`)**
392
+- 左侧:6个维度卡片,点击切换,显示权重合计(实时校验是否=100%)
393
+- 右侧:el-table 树形表格,展示指定维度下的指标树(默认全部展开)
394
+- 指标操作:新增子级(按层级递增,最多4级)、修改、删除、状态开关
395
+- 维度操作:新增、修改、删除
396
+
397
+**配分事项录入 (`score/event`)**
398
+- 列表含:维度/指标/责任人/部门/班组/基础分/叠加分/总分/来源标签
399
+- 新增对话框:维度→二级→三级→四级 联动下拉(从指标树接口实时加载)
400
+- 支持 Excel 导入(`/score/event/import`)和导出
401
+
402
+**推送配置 (`score/pushConfig`)**
403
+- 按维度分组展示所有推送规则
404
+- 每条规则可设:适用部门(空=全局)、预警阈值(默认75分)、推送人员
405
+
406
+### 权限标识
407
+
408
+```
409
+score:dimension:list/add/edit/remove/export
410
+score:indicator:list/add/edit/remove/export
411
+score:event:list/add/edit/remove/export/import
412
+score:pushConfig:list/add/edit/remove
413
+```
414
+
415
+### 待完成(上线前)
416
+
417
+1. 在数据库执行 `sql/score.sql`(建表+初始化6个维度)
418
+2. 在系统菜单管理中配置"配分管理"父菜单及3个子菜单:
419
+   - 配分表体系维护 → `/score/dimension`
420
+   - 配分事项录入 → `/score/event`
421
+   - 推送配置 → `/score/pushConfig`
422
+3. 在角色权限中分配 `score:*` 权限
423
+4. ~~后续需手动录入98条指标数据~~ → 已通过 SQL 初始化128条指标,直接执行 `score.sql` 中的三段 `INSERT INTO score_indicator` 即可
424
+
425
+---
426
+
427
+## Phase 3 实现记录(台账同步、雷达大屏、一键全量导入,2026-04-24)
428
+
429
+### 新增/修改文件
430
+
431
+```
432
+后端(chongqing-server):
433
+├── airport-ledger/.../service/impl/LedgerSyncServiceImpl.java   # 台账→配分事项同步逻辑
434
+├── airport-ledger/.../service/impl/ScoreRadarServiceImpl.java   # 雷达图:班组从sys_dept读取
435
+├── airport-ledger/.../service/impl/LedgerCombinedImportServiceImpl.java  # 多Sheet合并导入(POI)
436
+├── airport-ledger/.../service/ILedgerCombinedImportService.java
437
+└── airport-admin/.../controller/ledger/LedgerSyncController.java  # POST /ledger/sync/all|{type}
438
+
439
+前端(chongqing-web):
440
+├── src/api/score/index.js          # 新增 syncLedgerAll / syncLedgerByType
441
+├── src/api/ledger/index.js         # 新增 importCombinedLedger
442
+├── src/views/score/radar/index.vue # 新增"同步台账"按钮
443
+├── src/views/ledger/import/index.vue  # 顶部新增"一键全量导入"卡片
444
+└── src/utils/request.js            # 修复 FormData 上传 Content-Type 问题
445
+```
446
+
447
+### 功能说明
448
+
449
+**台账同步(`/ledger/sync/all`)**
450
+- 将所有已导入的台账数据按配分表规则转换为 `score_event` 记录
451
+- 权限标识:`ledger:sync:all`
452
+- 返回:`{ inserted: N, skipped: N, detail: {...} }`
453
+- 重复数据通过 `import_batch + source_ledger + 原始字段` 去重跳过
454
+
455
+**一键全量导入(`POST /ledger/import/combined`)**
456
+- 上传「旅检三部"三三"数字管理平台.xlsx」(15个Sheet)
457
+- 后端用 Apache POI 按列索引读取,完全对应 Python 脚本列映射
458
+- 权限标识:`ledger:import:combined`
459
+- 返回 Map<Sheet名, 导入结果>,前端逐条展示
460
+
461
+**雷达图班组下拉**
462
+- 从 `sys_dept` 表读取 `dept_type='MANAGER'` 的记录作为班组列表
463
+- 不依赖业务数据,建库后即可显示
464
+
465
+### 关键技术问题与解决
466
+
467
+| 问题 | 原因 | 解决方式 |
468
+|------|------|----------|
469
+| `selectList is ambiguous` | Mapper XML 定义了同名 `selectList(Domain)` 方法,与 MyBatis Plus `selectList(Wrapper)` 冲突 | 所有调用改传空 Domain 对象(如 `new LedgerSupervisionProblem()`) |
470
+| `Parameter 'name' not found` | 同上,LambdaQueryWrapper 被路由到 XML 方法 | 同上 |
471
+| 雷达图班组下拉为空 | `selectTeamList()` 从空的 `score_event` 表读取 | 改为查 `sys_dept` where `dept_type='MANAGER'` |
472
+| 文件上传报"not a multipart request" | `axios.defaults.headers['Content-Type']='application/json'` 全局覆盖了 FormData 的 multipart 类型 | 在请求拦截器中检测 `FormData` 时 `delete config.headers['Content-Type']` |
473
+
474
+### 配分指标体系(128条,2026-04-24 更新版)
475
+
476
+| 维度 | L2 | L3 | L4 | 叶子节点有分值的示例 |
477
+|------|----|----|----|--------------------|
478
+| 安全防控 | 6 | 19 | — | 站层级质控-1,不安全事件一类-10,典型查获一类+1 |
479
+| 服务响应 | 4 | 8  | — | 旅客服务投诉-2,服务监察航站楼-1.2 |
480
+| 业务实操 | 6 | 10 | — | 季度考试补考-2(阶梯),考试成绩≥98+5 |
481
+| 作风践行 | 7 | 10 | — | 全勤+5,旷工-10,打架斗殴-10 |
482
+| 群团协作 | 5 | 14 | 37 | 个人荣誉站层级一等奖+6,新闻发表+1 |
483
+| 身心调节 | 2 | —  | — | 规则待定 |
484
+
485
+> SQL 见 `sql/score.sql`,指标 ID 规则:L2=11~62,L3=111~552,L4=1211~1522
486
+
487
+### 数据库更新步骤(测试服务器)
488
+
489
+```sql
490
+-- 1. 执行 sql/ledger.sql          建15张台账表
491
+-- 2. 执行 sql/ledger_alter_columns.sql   扩展列长度
492
+-- 3. 更新维度权重(已有数据时)
493
+UPDATE score_dimension SET weight=10.00 WHERE name='业务实操能力';
494
+UPDATE score_dimension SET weight=15.00 WHERE name='群团协作能力';
495
+-- 4. 清空并重建指标
496
+DELETE FROM score_indicator;
497
+-- 执行 score.sql 中三段 INSERT INTO score_indicator
498
+-- 5. 执行 sql/menu_ledger_score.sql
499
+-- 6. 执行 sql/menu_radar.sql
500
+-- 7. 角色管理中分配新菜单权限
501
+```