From 74f1ef1cf957bb3552574687dd8e9c824cb6325d Mon Sep 17 00:00:00 2001 From: liuwenxin <1009266660@qq.com> Date: Fri, 16 Oct 2026 09:32:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E5=AE=A1=E6=89=B9=E4=B8=8E?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE=E6=A8=A1=E5=9D=97=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=8E=A5=E5=85=A5=E5=8F=8A=E4=B8=9A=E5=8A=A1=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...T+对接数据需求清单_2026-10-15.xlsx | Bin 0 -> 20679 bytes .../plans/2026-10-12-剩余开发计划.md | 159 ++++++- docs/功能模块清单.xlsx | Bin 7706 -> 0 bytes docs/待澄清问题清单_2026-10-15.xlsx | Bin 0 -> 11095 bytes docs/模块页面功能清单_2026-10-13.xlsx | Bin 12127 -> 17189 bytes docs/需求规格说明书.docx | Bin 0 -> 82429 bytes frontend/src/api/approvals.ts | 91 ++++ frontend/src/api/businesses.ts | 17 +- frontend/src/api/settings.ts | 40 ++ frontend/src/composables/useAppMenu.ts | 6 + frontend/src/router/index.ts | 43 +- .../src/views/business/businesses/index.vue | 153 +++++++ frontend/src/views/login/index.vue | 20 +- frontend/src/views/system/approvals/index.vue | 416 ++++++++++++++++++ frontend/src/views/system/settings/index.vue | 298 +++++++++++++ 15 files changed, 1215 insertions(+), 28 deletions(-) create mode 100644 docs/T+对接数据需求清单_2026-10-15.xlsx delete mode 100644 docs/功能模块清单.xlsx create mode 100644 docs/待澄清问题清单_2026-10-15.xlsx create mode 100644 docs/需求规格说明书.docx create mode 100644 frontend/src/api/approvals.ts create mode 100644 frontend/src/api/settings.ts create mode 100644 frontend/src/views/system/approvals/index.vue create mode 100644 frontend/src/views/system/settings/index.vue diff --git a/docs/T+对接数据需求清单_2026-10-15.xlsx b/docs/T+对接数据需求清单_2026-10-15.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..26881ec697c10b7269d143a5b27d9df9aabb7d82 GIT binary patch literal 20679 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 b0Qik=7#n~nCUyV-D`f{$gf-9T=hc4zr77VL literal 0 HcmV?d00001 diff --git a/docs/superpowers/plans/2026-10-12-剩余开发计划.md b/docs/superpowers/plans/2026-10-12-剩余开发计划.md index 56a7444..e5e2d9d 100644 --- a/docs/superpowers/plans/2026-10-12-剩余开发计划.md +++ b/docs/superpowers/plans/2026-10-12-剩余开发计划.md @@ -2,7 +2,7 @@ > **面向 AI 代理的工作者:** 首工作块(M1)实施时使用 subagent-driven-development(推荐)或 executing-plans 逐任务实现本计划第二章;步骤使用复选框(`- [ ]`)语法跟踪进度。第一章路线图供全局导航。 -**目标:** 在需求裁决全部落定(2026-10-12)后,为剩余 5 大模块与 T+ 同步给出推进路线;并交付首个工作块「系统设置与参数体系(#28)」的可执行实施计划(任务级,含测试与验证)。 +**目标:** 在需求裁决全部落定(2026-10-12)后,为剩余 5 大模块与 T+ 同步给出推进路线;并交付首个工作块「系统设置与参数体系(#28)」的可执行实施计划(任务级,含测试与验证)。2026-10-15 功能清单核查补充(二次分配方案、工作台、复核审批、月结与调整单、备份恢复运维、公司信息配置)已并入路线图(1.1/1.3/1.4)并收录为第三章。 **架构:** 沿用现有六层(api → services → repositories → models,schemas 承载请求/响应,core 横切);新增「公式模板注册表(代码内有限集合)+ 参数按生效日期时点化存储 + 计算预览」作为核算模块的输入契约,不引入规则引擎。 @@ -40,11 +40,17 @@ ### 1.1 推荐顺序与依赖 ```text -① 系统设置与参数体系(#28) ← 地基:岗位角色 + 参数 + 公式模板 -② 基础数据管理 ← 人员引用 ① 岗位角色(外键上游) -③ 业务数据管理 ← 引用 ② 人员/产品/客户 +① 系统设置与参数体系(#28)✅ ← 地基:岗位角色 + 参数 + 公式模板 +│ 增量(2026-10-15):公司信息配置;审批开关走参数体系 +② 基础数据管理 ✅ ← 人员引用 ① 岗位角色(外键上游) +③ 业务数据管理 ✅ ← 引用 ② 人员/产品/客户 +│ 增量(2026-10-15):二次分配方案(合同刚建立时录入) ④ 绩效工资核算 ← 消费 ① 参数快照(按回款到账日)+ ②③ 数据 -⑤ 报表统计(∥ ⑥ T+ 同步) ← ⑤ 只读消费 ③④;⑥ 写入 ②③ 目标表,受 IT 字段映射制约 +│ 增量(2026-10-15):月度结算/调整单/负数工资;二次分配分摊(语义待澄清) +⑦ 复核审批流(新) ← 月结/二次分配的审批链(营销后勤→财务→领导);登录角色体系扩展 +⑤ 报表统计(∥ ⑥ T+ 同步) ← ⑤ 只读消费 ③④;签字导出模板依赖 ⑦ 与公司信息;⑥ 受 IT 字段映射制约 +⑧ 工作台(新) ← 消费 ④⑤⑥⑦ 数据的聚合展示层 +⑨ 备份恢复与运维检查(新) ← 独立于业务块,可与任一批次并行,建议尽早 ``` ### 1.2 顺序论证(要点) @@ -59,32 +65,37 @@ | 块 | 范围界定 | 验收标准(一句话) | | --- | --- | --- | -| ① 系统设置与参数体系 | 岗位角色 CRUD + 模板绑定;参数目录/版本化存储/按日期取值/变更留痕/对比/导出;公式纯函数;计算预览 | 管理员可新增岗位并绑定模板;任一参数变更产生含变更人/时间/项/旧值/新值/生效日期的记录;任意业务日期可解析当时快照;预览精确复现 360 天=6‰、361 天=4‰;301 基线不回归 | -| ② 基础数据管理 | 人员(岗位/工资标准/团队/辐射区域/拓展计划)、产品类型与目录、业务(客户)与归属变更 | 三类数据可维护并留痕;人员岗位引用 ① 岗位表;表含 T+ 预留列;客户分类(个人户/经理个人户/企业户)与归属修改不回溯历史 | -| ③ 业务数据管理 | 业务明细+指导价、发货(批次/运费/发货日)、回款(批次号/到账日/以物抵顶/手动指定发货批次)、毛利润(不含运费)、客户评级计算器 | 一笔业务可多产品多批次发货、多笔回款;回款天数按「发货日首日=1」自动算;折算走精确分数;评级只出等级不影响金额 | -| ④ 绩效工资核算 | 核算引擎(按回款到账日取参数)、单笔台账+核销防重、经理 12.5%+5%、试用期/年累计 18000、起付 60% 与 R×R、预付款/以物抵顶、月工资(分岗口径)、重算授权留痕 | 任一笔回款可复算到分(零误差);同笔回款不重复核算;08-13 前后企业户 2‰/3‰ 回溯正确;月工资表可生成 | -| ⑤ 报表统计 | 个人绩效明细、部门汇总、业务统计、回款区间统计、Excel 导出与打印 | 四表口径与台账一致且可下钻单笔;导出精度与页面一致 | +| ① 系统设置与参数体系 | 岗位角色 CRUD + 模板绑定;参数目录/版本化存储/按日期取值/变更留痕/对比/导出;公式纯函数;计算预览。**✅ 已完成**。增量(2026-10-15):公司信息配置(公司名称、logo 等基本信息);审批开关配置走参数体系;新增参数一律进参数注册表(用户重申:参数配置尽量灵活) | (原验收已达成)增量:公司信息可配置并用于登录页与导出页眉;审批开关参数化,关闭直接生效、开启走审批 | +| ② 基础数据管理 | 人员(岗位/工资标准/团队/辐射区域/拓展计划)、产品类型与目录、业务(客户)与归属变更。**✅ 已完成** | 三类数据可维护并留痕;人员岗位引用 ① 岗位表;表含 T+ 预留列;客户分类(个人户/经理个人户/企业户)与归属修改不回溯历史 | +| ③ 业务数据管理 | 业务明细+指导价、发货(批次/运费/发货日)、回款(批次号/到账日/以物抵顶/手动指定发货批次)、毛利润(不含运费)、客户评级计算器。**✅ 已完成**。增量(2026-10-15):二次分配方案 —— 只出现在合同刚建立时;合同建立时可手动选择参与二次分配的业务员;分配比例不要求合计 100%;审批开关开启时走审批 | (原验收已达成)增量:合同建立时可录入参与业务员与比例(不强制合计 100%);开关关闭直接生效;方案修改不影响已结算月份 | +| ④ 绩效工资核算 | 核算引擎(按回款到账日取参数)、单笔台账+核销防重、经理 12.5%+5%、试用期/年累计 18000、起付 60% 与 R×R、预付款/以物抵顶、月工资(分岗口径)、重算授权留痕。增量(2026-10-15):月度结算(按确认回款和计算快照生成);支持负数工资、扣补说明和调整单;结算后锁定 —— 修改源数据不影响已结算结果,只产生提示、历史记录和后续调整;二次分配分摊(语义待澄清,见 3.3) | 任一笔回款可复算到分(零误差);同笔回款不重复核算;08-13 前后企业户 2‰/3‰ 回溯正确;月工资表可生成。增量:任一月份可出月结快照并锁定;已锁月份源数据变更只产生提示与历史,金额不变;调整单留痕可追溯 | +| ⑤ 报表统计 | 个人绩效明细、部门汇总、业务统计、回款区间统计、Excel 导出与打印。增量(2026-10-15):导出模板围绕财务复核和领导签字设计 | 四表口径与台账一致且可下钻单笔;导出精度与页面一致。增量:导出模板含复核/签字栏与公司信息页眉 | | ⑥ T+ 数据同步 | 五类数据抓取/清洗/入库、唯一键去重、失败重试、同步日志、周定时+手动触发 | 手动同步幂等(重跑不重复入库);失败有日志与重试;不覆盖人工字段 | +| ⑦ 复核审批流(新) | 月结与二次分配的审批链:营销后勤提交 → 财务复核 → 领导审核;审批开关配置(参数化,关闭直接生效);审批意见与版本;登录角色体系扩展(营销后勤/财务/领导为系统新登录角色,激活闲置的 permissions/role_permissions) | 开关关闭时提交即生效;开启时三级流转全程留痕;每级意见与版本可追溯;重算/改单产生新版本,不覆盖既有审批记录 | +| ⑧ 工作台(新) | 经营绩效总览、待办事项、风险预警、最近同步/计算/审批动态 | 四区块出数口径与台账/审批/同步日志一致可下钻;预警规则参数化可配置 | +| ⑨ 备份恢复与运维检查(新) | MySQL 定时备份与恢复演练、运维检查(容器/磁盘/日志/Redis/同步状态)、检查清单与脚本 | 任一备份可按文档恢复成功;检查项脚本化输出健康报告 | ### 1.4 里程碑(交付批次) | 批次 | 内容 | 说明 | | --- | --- | --- | -| **M1** | ① 系统设置与参数体系 | 独立可交付;预览工具可作业务对账入口先行验收 | -| **M2** | ② + ③ | 合并交付:一次表结构评审把 T+ 预留列与报表字段清单同时定稿 | -| **M3** | ④ 绩效工资核算 | 核心钱袋子;测试重点在精度与参数回溯 | -| **M4** | ⑤ 报表 + ⑥ T+ 同步(并行) | ⑥ 受 IT 制约,谁先就绪谁先交 | +| **M1** | ① 系统设置与参数体系 | ✅ 已完成(2026-10-13 推送 feat/system-params) | +| **M2** | ② + ③ | ✅ 已完成(2026-10-13 分支 feat/base-business-data) | +| **M3** | ① 增量(公司信息/审批开关)+ ③ 增量(二次分配录入)+ ④ 绩效工资核算(含月结/调整单/负数工资)+ ⑦ 复核审批流 | 核心闭环「核算 → 提交 → 财务复核 → 领导审核 → 锁定」;开工前必须澄清:二次分配分摊语义(3.3-1)、经理个人户基数(开放问题 #7);内部建议顺序 ①增量 → ③增量 → ⑦ 审批框架 → ④ 核算 → 月结与审批串联 | +| **M4** | ⑤ 报表(含财务复核/领导签字导出模板)+ ⑥ T+ 同步(并行)+ ⑧ 工作台 | ⑥ 受 IT 制约,谁先就绪谁先交;⑧ 消费 ④⑤⑥⑦ 出数,排其后 | +| **⑨ 备份恢复与运维检查** | 不占独立批次,随任一批次并行(建议 M3 期间并行交付) | 数据持续积累,备份先行;不依赖业务模块进度 | ### 1.5 需求依据对照 | 块 | 依据 | 关联作废条款(不引用) | | --- | --- | --- | -| ① | 需规 2.3.1(四)/2.5.2/2.1.2;对照表 #28/#5/#8/#20–#24 | 经理个人户 8‰(不设参数);含运费口径;协助 25%(不设参数) | +| ① | 需规 2.3.1(四)/2.5.2/2.1.2;对照表 #28/#5/#8/#20–#24;增量见 3.1(五)(六) | 经理个人户 8‰(不设参数);含运费口径;协助 25%(不设参数) | | ② | 需规 2.1.1–2.1.3;对照表 #9/#19/#26 | 信息部负责人条款(信息员独立角色) | -| ③ | 需规 2.2.1–2.2.5;对照表 #1/#2/#12/#13/#14/#18/#25 | 26 天示例;含运费公式(2.2.4/2.3.3 整段) | -| ④ | 需规 2.3.1–2.3.3;对照表 #3/#4/#6/#7/#11/#15/#16/#17/#20–#24 | 协助 25%;经理 8‰;26 天示例;含运费公式 | -| ⑤ | 需规 2.4.1–2.4.3;对照表 #22(明细展示 R) | — | +| ③ | 需规 2.2.1–2.2.5;对照表 #1/#2/#12/#13/#14/#18/#25;增量见 3.1(一) | 26 天示例;含运费公式(2.2.4/2.3.3 整段) | +| ④ | 需规 2.3.1–2.3.3;对照表 #3/#4/#6/#7/#11/#15/#16/#17/#20–#24;增量见 3.1(一)(四) | 协助 25%;经理 8‰;26 天示例;含运费公式 | +| ⑤ | 需规 2.4.1–2.4.3;对照表 #22(明细展示 R);增量见 3.1(四) | — | | ⑥ | 需规各「同步 T+」条;对照表 #10/#26/#27 | — | +| ⑦⑧⑨ 及各块增量 | **2026-10-15 功能清单核查补充(本文第三章,原文照录)**——尚未回填需规与对照表,引用以第三章原文为准 | 二次分配 ≠ 协助 25%:#15 作废的是「协助 25% 分成」条款,二次分配是合同建立时的新机制,关系待业务澄清(3.3-1) | --- @@ -599,6 +610,118 @@ git commit -m "test(system): 参数体系模块用例与测试记录" | 6 | 导出格式与列集合(是否含批次说明/操作人) | 以需规 2.3.1(四) 字段为准,导出前与业务对一次列 | | 7 | 经理个人户业绩如何进入 12.5%+5%(裁决 #7 的具体衔接:该业绩是否计入「本人带领业务员」基数) | ④ 开工前必须确认(影响台账归属字段设计) | +--- + +## 第三章 2026-10-15 功能清单核查补充(新增需求) + +> **来源与地位:** 用户以现有功能清单核查后补充的需求(2026-10-15)。本章 3.1 为**原文照录**(未做任何改写),3.2 起为开发侧归属与推演,**两者严格区分**;引用新需求一律以 3.1 原文为准。本批内容尚未回填需规文档与《问题与解决方案对照表》,是否回填由用户决定。任务级实施计划在对应里程碑开工前按第二章同粒度补齐。 + +### 3.1 需求原文(照录) + +#### (一)二次分配方案 + +- 二次分配只出现在合同刚建立时。 +- 合同建立时可手动选择参与二次分配的业务员。 +- 分配比例不要求合计 100%。 +- 审批流程可增加开关配置;关闭时直接生效,开启时走审批。 +- 修改二次分配方案不影响已经结算的月份。 +- 已结算月份如需调整,只能通过调整单或后续月份扣补处理。 + +#### (二)工作台 + +- 经营绩效总览 +- 待办事项 +- 风险预警 +- 最近同步/计算/审批动态 + +#### (三)复核审批 + +- 营销后勤提交 +- 财务复核 +- 领导审核 +- 审批开关配置 +- 审批意见与版本 + +#### (四)月结、审批、报表 + +- 月度结算按确认回款和计算快照生成。 +- 支持负数工资、扣补说明和调整单。 +- 结算后锁定,修改源数据不影响已结算结果,只产生提示、历史记录和后续调整。 +- 导出模板围绕财务复核和领导签字设计。 + +#### (五)备份恢复与运维检查 + +- (标题级条目,无细则,用户强调「这个备份恢复很重要」) + +#### (六)系统设置 + +- 公司信息配置:公司名称、logo 等基本信息 + +#### (七)参数配置强调 + +- (用户原话):「业务强调参数配置尽量还是灵活一点,能省去以后很多麻烦」 + +### 3.2 模块归属与设计要点(开发侧推演,非需求原文) + +#### (一) 二次分配方案 → ③ 录入 + ④ 分摊消费 + ⑦ 审批联动 + ④ 调整单衔接 + +- 「只出现在合同刚建立时」→ 录入入口放业务创建流程(与 `businesses` 创建同事务或紧随其后);合同建立后是否允许补录/修改未明说,方案修改的留痕方式待设计; +- 「分配比例不要求合计 100%」→ 余额归属规则需求未说明(3.3-1),存储上只存各参与人比例、不强制校验合计; +- 「修改不影响已结算月份」→ 月结快照天然隔离(快照固化当月结果),方案表需支持编辑 + 修改留痕; +- 「已结算月份调整只能通过调整单或后续月份扣补」→ 调整单为统一承载机制,见 (四)。 + +#### (二) 工作台 → ⑧ 新页面(升级现有 Bento 仪表盘占位) + +| 区块 | 数据源(推演) | +| --- | --- | +| 经营绩效总览 | ④ 台账/月结(按人/团队/月份汇总) | +| 待办事项 | ⑦ 待审批单、⑥ 同步失败、回款未指定批次(M2 已有该状态可复用) | +| 风险预警 | 规则未定义(3.3-5),先落参数化规则容器 | +| 最近同步/计算/审批动态 | ⑥ 同步日志 + ④ 核算/月结记录 + ⑦ 审批记录 | + +#### (三) 复核审批 → ⑦ 新模块 + +- 三级节点:营销后勤提交 → 财务复核 → 领导审核; +- 审批对象:月度结算((四) 联动);二次分配方案审批((一) 开关联动); +- 「审批开关配置」→ 进 ① 参数体系(BOOL 参数,按审批对象各一);「关闭时直接生效」= 提交即生成自动通过的审批记录(留痕不断链); +- 「审批意见与版本」→ 审批单带版本号:重算/改单产生新版本,旧版本与意见留痕不覆盖; +- **登录角色体系扩展**:营销后勤/财务/领导是系统新登录角色(`roles` 表基础设施已有;`permissions`/`role_permissions` 自 M1 起闲置待权限清单,此处激活)——打破一期「营销人员不登录」的前提,但与该原则不矛盾(营销人员仍不登录,后勤/财务/领导是职能角色)。 + +#### (四) 月结、审批、报表 → ④ 月结子块 + ⑦ 审批 + ⑤ 导出模板 + +- 月度结算 = 台账之上的月度汇总快照(按月生成、含状态机:草稿/待审/已审定/已锁定);「确认回款」定义待澄清(3.3-3); +- 「支持负数工资」与既有裁决「负绩效按公式正常计算(不归零)」一致,无需改公式口径; +- 调整单:新单据类型(补发/扣减方向、关联月份、扣补说明、审批状态); +- 「结算后锁定」:已锁月份的快照金额不可变;源数据修改只产生提示、历史记录和后续调整 —— 与 #19「归属变更不回溯历史」同一哲学,扩展到全部源数据; +- 导出模板含财务复核栏、领导签字栏、公司信息页眉(依赖 (六) 公司信息配置)。 + +#### (五) 备份恢复与运维检查 → ⑨(原文无细则,范围由开发定义后交用户确认) + +- 备份:MySQL 定时全量(mysqldump,命名卷外置)+ 保留策略 + **恢复演练文档与脚本**(备份不演练 = 没有备份); +- 运维检查:容器状态、磁盘空间、备份新鲜度、Redis 键 TTL 抽查、同步日志异常、登录日志异常 → 脚本化健康报告; +- 用户强调重要 → 建议 M3 期间并行尽早交付(不依赖业务模块)。 + +#### (六) 系统设置-公司信息 + 参数灵活性 → ① 增量 + +- 公司信息配置:公司名称、logo(登录页与 ⑤ 导出页眉消费); +- 参数灵活性(用户重申方向):新增审批开关、二次分配、月结相关配置**一律进参数注册表**(16 项清单将扩充),沿用「公式模板(代码内有限集合)+ 参数绑定」既定路线;新增公式形态仍需加模板(一期接受,与「不引入规则引擎」一致)。 + +### 3.3 待澄清问题(不阻塞收录,对应模块开工前须澄清) + +| # | 事项 | 影响模块 | 建议默认处理 | +| --- | --- | --- | --- | +| 1 | 二次分配的**分配标的**(绩效金额?折算毛利润?业绩额?)与**余额归属**(合计 ≠100% 时差额归谁);与已作废的「协助 25%」(#15)是何关系 | ④ 分摊逻辑与台账归属字段 | 未确认前 ④ 只落录入与存储,不实现分摊 | +| 2 | 二次分配审批开关默认值(开/关) | ⑦ 参数种子 | 按「支付环节按需规默认值参数化」先例:默认关闭(直接生效),可开 —— 待业务确认 | +| 3 | 「确认回款」的定义:登记即确认 / T+ 同步即确认 / 需人工确认动作? | ④ 月结取数口径 | 建议需人工确认动作(可在回款确认状态上扩展),待确认 | +| 4 | 审批角色权限清单:营销后勤/财务/领导的账号归属、可见菜单、操作权限点 | ⑦ 与系统管理 | 开工前业务方给出清单;技术侧激活 permissions/role_permissions | +| 5 | 风险预警规则:哪些情形预警、阈值多少 | ⑧ | ④⑤ 落地后与业务确认首批规则,先落参数化容器 | +| 6 | 调整单是否走同一审批链;能否跨月调整已锁定月份 | ④⑦ | 建议走同一审批链;「后续月份扣补」为默认路径,跨月调整需授权留痕 —— 待确认 | +| 7 | 待办事项的范围(除审批/同步失败外还含哪些,回款未指定批次是否算待办) | ⑧ | 按 3.2(二) 默认清单起步,业务确认后扩充 | + +### 3.4 对路线图的影响(本次已修订) + +1.1 依赖图、1.3 范围与验收、1.4 里程碑、1.5 依据对照均已并入本批内容;第三章待 3.3 各项澄清后,按第二章同粒度补齐 M3 各增量块的任务级实施计划。 + ## 验证方式 1. 计划内容与 `ai-aux/AI_CONTEXT.md` 需求裁决节逐条核对(口径无冲突、无遗漏作废条款); diff --git a/docs/功能模块清单.xlsx b/docs/功能模块清单.xlsx deleted file mode 100644 index aa94e3de785141cbb0c4051ca6bbb9b7de21dc21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7706 zcma)B1yEaCyAAH{Zo!HKcXvqfLU9NXptwu%(&7$93N;F)P$=%2LQ8|YTXA=Xz@xqM zzx&_LeKRkaeRlSo{jKb?&i=kVvz87R1(g&40AK<@VGqq;nY>J#y&v%*0RRN|y}vWa z&&|`x+Re?0*WblCVW2{*gO3n>@o|MKyB15V4rw6{4wswNj+c$_nX(K;GYdITrSmx< zO;Y>U<@_anLbRcpna#Tb%LSj$#3~*UG1AItamDE2L&>KerB*p}aPg9>FV%JFA`?n9 zx?d?9c(5aL3k@|yP|*9xG%3N9bOrAOAE%F}7CxUo3d`!?$Z3>GlfTB44ZKdj0}=Vi zp&fT@Pt2|FAzVTN=7VPklC&Am5CsP1fD{uqGBfd}QO(lV=G1|X)EJ?~-tn=y$LOFR z&M4n+dNjngb~uj~+0mJlY2X z#$eYOKEjsR_Fxupt+Qw}aVG=voNXF+V*ylytvyL@=u2)e!JyCnApJWBH~n`F%JPWi zpk1SwbR`o9F~Wsr)jpl%wGE)%s1byU2xe|Y=N%T_z`phzgV*T6T?b({O~pX2s&q*L~>NGIry?0H|YDLzL@ z*ueS1+(82VVs=pB&I;pAAj{(|=eEk4h7olXImH86HGm;ixhaMb1sB^l_W~&65+?m$G{sA7pNb zXunDvHlY-{`E7U9S-D9}vPlcDXfP9L#1&J0G*ILin;_(T!5Z~kkEIGU&g6?kK}!)m z)kmO(4Ky*WtvYR1(-F`PKwFly&6!x+$69!UpR3y@6D0QPj7=-yf^d4-Blto;5SzX5 z^rtr42oddU(pxHZwt?rlHpVNJXc~pJ9A^e5%&Dkxy^ok5CS>bql#jk4A;nB|AQz9~ z=moxt;*_4)FCVy7`7tSakt+XDrq6s3DU!El7MN~lhy4<7SkB;wloDFY%nX^#S&vu} za``^897Jux9xT#9%vJ{FkvLU=eP&U3B2LX}1;4Ps9yfiT9IwrZCDs95dp8T=eh$oh z#?_J(n8n3?42(heR$4-eqU%cOuZh&ny%eMfUbtjD+PBp-Y29tu&%k|&SA4Ai9}MOq z-I{*)swbo_cc;0=LPl6%dw~fS14xeMMk1tOj^hj$HO*pw7 ziSIw4Hdk=bsZApGoX!bC_>m>>z8B$`QN=o)$q9=1&#>Y7gF94o&P^>7HblB zS~OI-f1XahEH@@RLF~!4F2c z1VVcC#Mf>6jIPM>%R;_87+~vxDdqL@uM>6GxejH~9%h4tS&z{N2@_%|M}$yKQ-Y3R zyM4mBak#5$ANW+6jBIs+?hv@u!CD+|I|ywRoYxxrKj5w=TawWzor|kuXDGtTurs#! zBP1V=Yw8Cqq)qp%8Tbc%fumqXb&M(9+})&XUN_pfG|fan6O~@BlVNgA6fv^ z;bz>JIN?mPawBeEPDNs)W2{)+S!Fe?=!n{k1dk_iR+W2KV#rx_8Frbq`V6^JkYK03W?YN&wiQ49IXeVkbzNmY>*0V zmTElM>Kp}FOx^e)Z0e}LDgyzC>BjsBvZ>#`Y@KO0eW;hrfN>bUO+Bv|v2WEl>}Y`e z;Az4+m%96N+lAEwH<%$BS!K75RdGxmo`%&U5e}e#U-?<|$U`-HG1UV)xy~fy6D0e@ z%_ihT9R?01Y?74FsINMgTA z{DC)vLqm8zlk8i`ex8+t3peG-i=PP1ISF8oB33zn_BuAL5&=1QaSYivUY>HZ;@j!_ z*#`SMX>;%oSjE3;{+^y%WVhXTfU9hn?|%znmFHv1pDhNH8Z*owy+>r%a$UBp?cMfp zi^Rua{HVfa2i2@|88{$!Tq09{p3UwV+USs0Qh&zGUoou7(D12>w)w``Tb#2NxuTGJ z{)tm1G}MX~xl51^#eshJp=$K|610sGu_Jp3ibB7U*UcCJD*q0z}hrDwYOY6AJopVcdO^nY4VnXy-A4o zRy1_03k27I{fZO{sPlpLMVM1c4gL&@^D>ca+e(npr{#U{J8 zC7sU+joNi{TF6~rhFLt7Ai3oFQxYlXszVbgBRmRTWpMU?|&;B_EEQ+K}J91C+ z?s5Ufo=az3TD3Qd+39&CMVNuS9Fj^ZYD z?~AnCU=O`1rbxT^R4h#3p*1ceQnU8)Ksc9daOtCrUnD`S151*VZhCJGDHZ$D#z}-B z_x37Xa40>TYiqsIVt#zd6C9JKa*L!{^PuHY@IlL|-~+mAs+aS(_wADEW#V0%;e+Aq zF=1H#mjK{U#s#Qa$rIdaDYa)Qm3ol5NHN$i^9ZCSBVUTZ;~BOXebI*MeTBrnwD2`f zrPbM)V$?)qAvBI$W@*C5EM2$Yi}LyD60Gh3?7*$jro4VUIGMrxxdzzXJR)m<;z*|q zR#OkfQ3c9Qi{FqZF5Zx9d>mSOFBF7FUt?#|!~LnIZA=BFr;x?6Lv`URQSjYM`nz|* z&P%gIxVaWG6aC#Bhp$9mmN~S!nGb~|-M59-JVdLP^0jox*j4Zo50(Zuj>XiVmdY+B z2@U#z7Z7SIUNTx6N_o5FRez(7-gq79*C!fe6nf=*eo2yU(_Yy6FOg%rO>EwZ+xzo; z8r5aNQAhWB{ym^ZS1fG$#D$ECGoKl$;m9*VRsoL+v( zQ5WvVH2w*dqlO41M8#2s81{MO+1MzhO&d3eE(d8*uG^%kSqt=^N5mf=Qr0D9umFMx zzI!z5?xOXFd{;F9GQ?g@g%cSY(nzZKlfiMOJ@lOn50|vS#vLz(fecG&(mZ5>*aFyG z&nAL3(`P48)4#OK)uszO#KQ|8BDXC-^VsGRaRZN-`1x46Ql=bgjbT)kbgJjZ>f~)j?2(#6#4X6^mNO#X2^l_ zFrzZE-{SqUD92R__m{&=heJ7p+4m_4B%y9hV;6C@kv=6t-}~G}dif zs6D=ZArgT^X6-CdqI{K}6dq2aO3&eQ$!^}-EafcIy?T^{NFXPu-eJoSYpfbgwKs?z(OFVMq2sR!e*LD|sCaZi>MVuzj z63p+=nJ7>Hap5BR!-l{X>Yc7ge#gTb)lkAaT`k!W@Kc{QRi({M)sGz-`XGiH(#tye z_L+F}6R+HbZ`(PJrQzfAi^Jm6;y|8!c@!5B9cQF?FNzsbDWK_%Yv##Cel%26?wMnJYO`*xu zE?rR)?Z2Lc$VN zn?OY%&0FWG$@%(svVf#8{5gCIL{rag>Rr-aSJ@HQkEpvUNw7$*D6%Wky0+YBf_l?f zXHpqTF3IoHSfj;{MKzgZ8_Qm13&32e$`YwID*DpDArV~K*nL@+3XKb&vk`ST?TQRZ zWw}y!R^S&65DgeVJ4q8;5tmk`qVgoE793cm?=mlaQKL8BTOhDM*#BTE3BKQJ%O0xW z3y%?#qW+0H&yo5vFL(drn~Iij^3)5l$PP^rns>gN*1LY$T;p^WHcd-J?1YEtFnPSbs zSEL;)1@~L4DUef$?X6YUkxC*)IHyBnxQtJ4SjWo!5)QaX!4W2!E49;kCV@{%Y)xW! zP8){$A?+BIwG*m(U9k4S2|l<+v`b*sPJtU-%_58gnSo~J*s&@MyiPBgKKObkzCI@M zOQ?iF4%*x6S7$Pbc^KbkVXQDI2zI0gRavIhrhyYDPhH;X6jhx#Y2riyljJMB7%Ax_ z$*o;sEOa_8;^by%$xd}TYS>iD*N#}tNlzd*2^X90)Ud$7?3+)tL?pC*(FH39p0S#v zZ}xz74Y>zFaGZASRHiYU3!8pi?U?#(ySigfHE~E-I6sg~d#zfJoO{fU^h%}kBeCw6 z1H--_k?O64V9&JO+ZBifgJk+qEQ+()_kh;dLQ(kbR)syA6C8-Ik@AVpt*yV=5}H0( z%bpR8F3b-3@!4J-)Bl}y1y!d|B2tc30;q~kI$X>pNy zt~L=>h8OZOlaV7BPGHHBQ*)-P1Sl!(MS$lOSr$#siI_Cp-hbl}d3!aI)qpbIR|xTF zXUC6^MWOF6-l&>^4PBu2bi=h1*?P6GC%+jhLlL?Z(Ofjcw7drruYREAfMy_(4sJp|>)i^*EdoH?}2R>D8aJh9>plCDx&_Xmu9V0a%MpktIyOZwnYJ)QZZXqheQ+URt#0Uc!0I;Ca2N zCV?@-WgcI!ixN!OjR}iKPi>wytMm|#RgrbqiN%&!PtB5*a|%vdCYO`FVLcOHgR0u4 zzZ30tiIFSGQnGUDmhv)XuBHPKLCjSWq$~Yyg$67if3M$*5wpmwSrgc(qi1gDl3DVh zDr*yj*7(K}hefb|awIh3#{`4sN=EuCd9 z%ZMNA8+l^Dn!m?m5dEOblN3#kHzMkSx`Mjz3uB+AymmX#c=wf7+*+wi+@&yFK%g7A z_%O|CQcLiMlUU=%Qx_=N+$Q#AH5Y^_NeH^BC9`LYrA8p!*|BXUiAS}R&y-x0>UJkRWQ5;2lPSHHAJKiO8&8B^bBye?roLJmoT zM2x@H=-G{;b4V2&q}{COjK!ihOhvBr85w=$ z?9UrZE>q!gd=`~6fiHUI7&4WVki)W?Zp06IQ}I&&O@p+n6cR!D-h91BkYqP8trHuy zO6wIut4#9Kk*VKI39M+N&ncP5Q?WnU3&?uEVoztz6nobs+Q;nrIwkMN^~74^Q+rYU z;@1POFA$g3wg{5f2aeG{6Px*6~%9p3S{50VDB-QRm1= zAz~d50sOgEu{xhHGtHDzFS@CQ(l0-KL(8Ca!g1Vf@$qQB)=6elFd$>(QI-fI-r%*XdNC*TI0>lpLYL|qNiGtMQhD<&siY;VS3|g z{?l45{1zFne5%9`wZlsGsQMh?)|y5R#F$}Go~3=H^Rr`IGc5;u+BVBIeZFWOY!yQc zyyeQtM*Kv!U}q^Wxj`eAJ&g3AZ0QE;5eOIC-9R@`SGB_Knr(x6T73L-lL~jy zV^5&<(D`L`lS}R7X79RB`L#uz7~^FpQVdV3Id7OImOd%dnluMej!)V7lI;fxMX+(p z4Np&#E0WvT;JP?$nWUFSMVCt15WZ=+Mu+M+nAqDi+zJ`x_!)q9?Kqn9T3n&v!_RMLu3C*kyFABVY^7qm0n*Aq8aX=Z+2K4wO!tBsrOz5F4~?Bi|6 zBgQN%Bc%s*hIrr4@N#(K?!|Z?;_4;M?BMO~E&&30+1$&F5HDUgcc|_tM|VEgZ?># zneh?C(;n(A%?$d(8DVBrx0PnrgNQ%{Z0+oX#e~G{goFg`m>EGbQlNi4ugrf4{mXG7 zjn3dByeISM-fW=$OP%?P)BpBee)C(Cs`<-&Q7N+y(B3h^iqRc$ZG@OUMVg@R(nXL= z@#fpxz*6dw^BB_^$(<{+zljcypRP>rZthfpBt^J!xCi>xGc zWh^&Ql-2aWorq?!gG&NF^-D)4h&O3P)GS0`YQH2a_uGc9&&6PLhW-QXT$Iu+{TL!+ zO%59O@{D8G#1tefbmf*peW`MUSBd7txX0>?D|0U4j2iU6y^W60Pnf{{mBpi)%~&U z{|x@qHv20S0LTx=x_>vn1kwLB(f$nm({cE(P}JX{fBFx90{khz{tY0F@$X{np9p^{ zrGF!g{)O_U;nFM{vG)5rQq*CPpaP!@P8DBKXLv{g}-qc?<>r| XB!&(c4gJ?7%=<6OeH}ug{Wba@c%aRq diff --git a/docs/待澄清问题清单_2026-10-15.xlsx b/docs/待澄清问题清单_2026-10-15.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c2215b5884cb0a9553ea850e07c0c08e182a8d7b GIT binary patch literal 11095 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 U0^(n-H-Fj?EC3)S`uFMo0p0A)u>b%7 delta 2824 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 b`uUas3Xvx5!i89w0cPO#(Uj|v`F`~u@{#ZV diff --git a/docs/需求规格说明书.docx b/docs/需求规格说明书.docx new file mode 100644 index 0000000000000000000000000000000000000000..175574b61d11ab8125d48274eb643779aebf38b9 GIT binary patch literal 82429 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

Sazg1 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 UAiz34Xb_*ljSfo?+@K-;A4_lE> { + return request({ url: '/v1/system/approvals', method: 'get', params }) +} + +export function getApproval(orderId: number): Promise { + return request({ url: `/v1/system/approvals/${orderId}`, method: 'get' }) +} + +export function actApproval( + orderId: number, + data: { action: 1 | 2; opinion?: string | null }, +): Promise { + return request({ url: `/v1/system/approvals/${orderId}/action`, method: 'post', data }) +} diff --git a/frontend/src/api/businesses.ts b/frontend/src/api/businesses.ts index f9c10cf..89d10df 100644 --- a/frontend/src/api/businesses.ts +++ b/frontend/src/api/businesses.ts @@ -50,9 +50,20 @@ export interface BusinessItem { remark: string | null } -/** 业务详情:附产品明细行(编辑弹窗一次回显) */ +/** 二次分配参与人(2026-10-15 补充需求;比例不强制合计 100%) */ +export interface SecondaryAllocationRow { + personnel_id: number + personnel_name: string + /** 百分比数字字符串(两位小数) */ + ratio: string +} + +/** 业务详情:附产品明细行与二次分配方案(编辑弹窗一次回显) */ export interface BusinessDetail extends BusinessItem { items: BusinessItemRow[] + secondary_allocations: SecondaryAllocationRow[] + /** 方案合计/余额提示(余额归属待澄清 #2,仅展示) */ + allocation_hint: string | null } export interface BusinessQueryParams { @@ -96,6 +107,8 @@ export interface BusinessCreateParams { is_special?: number special_note?: string | null items: BusinessItemParams[] + /** 二次分配方案(只出现在合同刚建立时;空=不设置) */ + secondary_allocations?: { personnel_id: number; ratio: string }[] remark?: string | null } @@ -111,6 +124,8 @@ export interface BusinessUpdateParams { is_special?: number special_note?: string | null items: BusinessItemParams[] + /** 二次分配方案(全量替换;空数组=清空) */ + secondary_allocations?: { personnel_id: number; ratio: string }[] remark?: string | null } diff --git a/frontend/src/api/settings.ts b/frontend/src/api/settings.ts new file mode 100644 index 0000000..d2ecf2a --- /dev/null +++ b/frontend/src/api/settings.ts @@ -0,0 +1,40 @@ +import service, { request } from './request' + +/** 公司信息(管理端) */ +export interface CompanySettings { + company_name: string + /** 未上传时为 null */ + logo_url: string | null +} + +/** 匿名端点出参(登录页消费;与后端 SettingPublicOut 白名单一致) */ +export interface PublicSettings { + company_name: string + logo_url: string | null +} + +export function getSettings(): Promise { + return request({ url: '/v1/system/settings', method: 'get' }) +} + +export function updateSettings(companyName: string): Promise { + return request({ + url: '/v1/system/settings', + method: 'put', + data: { company_name: companyName }, + }) +} + +/** logo 上传走独立的 FormData(multipart,非 JSON) */ +export function uploadLogo(file: File): Promise { + const form = new FormData() + form.append('file', file) + return service.post('/v1/system/settings/logo', form, { + headers: { 'Content-Type': 'multipart/form-data' }, + }) +} + +/** 登录页消费:无令牌也可调用(后端白名单端点) */ +export function getPublicSettings(): Promise { + return request({ url: '/v1/system/settings/public', method: 'get' }) +} diff --git a/frontend/src/composables/useAppMenu.ts b/frontend/src/composables/useAppMenu.ts index 857e743..2bc464b 100644 --- a/frontend/src/composables/useAppMenu.ts +++ b/frontend/src/composables/useAppMenu.ts @@ -31,12 +31,18 @@ export function useAppMenu() { const userStore = useUserStore() const isAdmin = computed(() => userStore.roles.includes(ROLE_ADMIN)) + const userRoles = computed(() => userStore.roles) const menuNodes = computed(() => router .getRoutes() .filter((record) => Boolean(record.meta.title) && record.meta.menu !== false) .filter((record) => !record.meta.requiresAdmin || isAdmin.value) + // 职能页面(审批等):任一列入角色命中即可见(admin 须显式列入集合) + .filter( + (record) => + !record.meta.allowedRoles || record.meta.allowedRoles.some((role) => userRoles.value.includes(role)), + ) .map((record) => ({ path: record.path, title: record.meta.title ?? '', diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index b3fb951..225ee4b 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -12,6 +12,9 @@ declare module 'vue-router' { title?: string /** 仅管理员可访问 —— 菜单隐藏 + 守卫兜底(直接输 URL 会被弹回首页) */ requiresAdmin?: boolean + /** 任一角色可访问(与 requiresAdmin 互斥使用;admin 须显式列入)—— + * 菜单按角色过滤 + 守卫兜底,用于审批等职能页面 */ + allowedRoles?: string[] /** 是否出现在侧边菜单(默认 true);false 用于排除登录页等 */ menu?: boolean /** 菜单分组名(同名聚合为一个子菜单);不设则为顶层菜单项 */ @@ -64,49 +67,67 @@ const routes: RouteRecordRaw[] = [ component: () => import('@/views/system/params/index.vue'), meta: { title: '计提参数', group: '系统管理', requiresAdmin: true, order: 6 }, }, + { + path: '/system/settings', + name: 'system-settings', + component: () => import('@/views/system/settings/index.vue'), + meta: { title: '公司信息', group: '系统管理', requiresAdmin: true, order: 7 }, + }, + { + // 审批管理:管理员/财务/领导可见(营销后勤待权限清单答复后放开) + path: '/system/approvals', + name: 'system-approvals', + component: () => import('@/views/system/approvals/index.vue'), + meta: { + title: '审批管理', + group: '系统管理', + allowedRoles: [ROLE_ADMIN, 'finance', 'leader'], + order: 8, + }, + }, { path: '/system/logs', name: 'system-logs', component: () => import('@/views/system/logs/index.vue'), - meta: { title: '日志查询', group: '系统管理', requiresAdmin: true, order: 7 }, + meta: { title: '日志查询', group: '系统管理', requiresAdmin: true, order: 9 }, }, { // 基础数据属业务操作:登录即可访问,不设 requiresAdmin(对照后端 api/v1/base) path: '/base/personnel', name: 'base-personnel', component: () => import('@/views/base/personnel/index.vue'), - meta: { title: '人员管理', group: '基础数据', order: 8 }, + meta: { title: '人员管理', group: '基础数据', order: 10 }, }, { path: '/base/products', name: 'base-products', component: () => import('@/views/base/products/index.vue'), - meta: { title: '产品管理', group: '基础数据', order: 9 }, + meta: { title: '产品管理', group: '基础数据', order: 11 }, }, { path: '/base/customers', name: 'base-customers', component: () => import('@/views/base/customers/index.vue'), - meta: { title: '客户管理', group: '基础数据', order: 10 }, + meta: { title: '客户管理', group: '基础数据', order: 12 }, }, { // 业务数据组一律为业务操作:登录即可访问,不设 requiresAdmin path: '/business/businesses', name: 'business-businesses', component: () => import('@/views/business/businesses/index.vue'), - meta: { title: '业务管理', group: '业务数据', order: 11 }, + meta: { title: '业务管理', group: '业务数据', order: 13 }, }, { path: '/business/shipments', name: 'business-shipments', component: () => import('@/views/business/shipments/index.vue'), - meta: { title: '发货管理', group: '业务数据', order: 12 }, + meta: { title: '发货管理', group: '业务数据', order: 14 }, }, { path: '/business/receipts', name: 'business-receipts', component: () => import('@/views/business/receipts/index.vue'), - meta: { title: '回款管理', group: '业务数据', order: 13 }, + meta: { title: '回款管理', group: '业务数据', order: 15 }, }, { // 业务数据组首个页面:评级计算器是打分工具,不影响绩效金额, @@ -114,7 +135,7 @@ const routes: RouteRecordRaw[] = [ path: '/business/rating', name: 'business-rating', component: () => import('@/views/business/rating/index.vue'), - meta: { title: '客户评级计算器', group: '业务数据', order: 14 }, + meta: { title: '客户评级计算器', group: '业务数据', order: 16 }, }, ], }, @@ -163,6 +184,12 @@ router.beforeEach(async (to) => { return { path: '/dashboard' } } + // 职能页面(审批等):任一角色命中即可进;菜单隐藏之外的第二道防线 + if (to.meta.allowedRoles && !to.meta.allowedRoles.some((role) => userStore.roles.includes(role))) { + ElMessage.error('无权访问该页面') + return { path: '/dashboard' } + } + return true }) diff --git a/frontend/src/views/business/businesses/index.vue b/frontend/src/views/business/businesses/index.vue index 45cfa7c..2773ee5 100644 --- a/frontend/src/views/business/businesses/index.vue +++ b/frontend/src/views/business/businesses/index.vue @@ -131,6 +131,69 @@ const form = reactive({ remark: '', }) +// ==================== 二次分配方案(合同刚建立时可录入;不强制合计 100%) ==================== + +interface AllocationDraft { + personnel_id: number | undefined + /** 百分比数字字符串(两位小数),与后端 NUMERIC(5,2) 同口径 */ + ratio: string +} + +const allocationRows = ref([]) + +/** 合计(0-999.99 不做上限:需求原文不要求合计 100%);余额 = 100 - 合计 */ +const allocationTotal = computed(() => { + let total = 0 + for (const row of allocationRows.value) { + const value = Number(row.ratio) + if (Number.isFinite(value)) total += value + } + return total +}) + +const allocationHint = computed(() => { + if (allocationRows.value.length === 0) return '' + const total = Number(allocationTotal.value.toFixed(2)) + if (total === 100) return `二次分配合计 ${total.toFixed(2)}%` + const rest = Number((100 - total).toFixed(2)) + return `二次分配合计 ${total.toFixed(2)}%,余额 ${rest.toFixed(2)}%(归属待业务确认)` +}) + +function addAllocationRow(): void { + allocationRows.value.push({ personnel_id: undefined, ratio: '' }) +} + +function removeAllocationRow(index: number): void { + allocationRows.value.splice(index, 1) +} + +/** 分配行校验:人员非重、比例 0-100 两位小数;空行(未选人员且比例为 0)自动忽略 */ +function validateAllocationRows(rows: AllocationDraft[]): string | null { + const active = rows.filter((r) => r.personnel_id !== undefined || Number(r.ratio) > 0) + const seen = new Set() + for (let i = 0; i < active.length; i += 1) { + const row = active[i] + const no = `第 ${i + 1} 个` + if (row.personnel_id === undefined) return `${no}参与人未选择` + if (seen.has(row.personnel_id)) return `${no}参与人重复` + seen.add(row.personnel_id) + const value = row.ratio.trim() + if (!value) return `${no}分配比例未填写` + if (!AMOUNT_PATTERN.test(value) || ZERO_PATTERN.test(value)) { + return `${no}分配比例须为大于 0 的数字,最多两位小数` + } + if (Number(value) > 100) return `${no}分配比例不能超过 100%` + } + return null +} + +/** 提交行:空行剔除;人员/比例均按提交格式直出 */ +function buildAllocationParams(rows: AllocationDraft[]): { personnel_id: number; ratio: string }[] { + return rows + .filter((r) => r.personnel_id !== undefined) + .map((r) => ({ personnel_id: r.personnel_id as number, ratio: r.ratio.trim() })) +} + /** 默认落在首个类别上,避免空类别提交被后端拒 */ function emptyItem(): ItemDraft { return { @@ -172,6 +235,7 @@ function openCreate(): void { remark: '', }) itemRows.value = [emptyItem()] // 预置一空行,用户可直接填写 + allocationRows.value = [] dialogVisible.value = true formRef.value?.clearValidate() } @@ -203,6 +267,10 @@ async function openEdit(row: BusinessItem): Promise { cost_amount: it.cost_amount ?? '', guided_price: it.guided_price ?? '', })) + allocationRows.value = (detail.secondary_allocations ?? []).map((a) => ({ + personnel_id: a.personnel_id, + ratio: a.ratio, + })) formRef.value?.clearValidate() } @@ -266,6 +334,11 @@ async function handleSubmit(): Promise { ElMessage.warning(rowError) return } + const allocError = validateAllocationRows(allocationRows.value) + if (allocError) { + ElMessage.warning(allocError) + return + } submitting.value = true try { @@ -277,6 +350,7 @@ async function handleSubmit(): Promise { is_special: form.is_special, special_note: form.is_special === 1 ? form.special_note.trim() || null : null, items: buildItemParams(itemRows.value), + secondary_allocations: buildAllocationParams(allocationRows.value), remark: form.remark.trim() || null, }) ElMessage.success('已保存') @@ -289,6 +363,7 @@ async function handleSubmit(): Promise { is_special: form.is_special, special_note: form.is_special === 1 ? form.special_note.trim() || null : null, items: buildItemParams(itemRows.value), + secondary_allocations: buildAllocationParams(allocationRows.value), remark: form.remark.trim() || null, }) ElMessage.success('业务已创建') @@ -752,6 +827,58 @@ onMounted(() => { + +

+ + 二次分配方案 + (可选;比例不要求合计 100%,分摊计算待业务确认后另批) + + 添加参与人 +
+ + + + + + + + + + + + +
+ {{ allocationHint }} +
+
产品明细(至少 1 行,编辑为全量替换) 添加一行 @@ -1209,6 +1336,32 @@ onMounted(() => { font-size: 13px; } +.alloc-note { + margin-left: 6px; + font-weight: 400; + font-size: 11px; + color: var(--ys-ink-3); +} + +.alloc-total { + margin: -8px 0 16px; + padding: 6px 10px; + font-size: 12px; + color: var(--ys-ink-3); + background: #f4f5f8; + border-radius: 0 0 6px 6px; +} + +.alloc-total.is-full { + color: var(--ys-indigo); + background: rgba(46, 75, 168, 0.07); +} + +.alloc-empty { + font-size: 12px; + color: var(--ys-ink-3); +} + .items-table { margin-bottom: 16px; } diff --git a/frontend/src/views/login/index.vue b/frontend/src/views/login/index.vue index 244dc6a..c23a04f 100644 --- a/frontend/src/views/login/index.vue +++ b/frontend/src/views/login/index.vue @@ -4,6 +4,7 @@ import { onMounted, reactive, ref } from 'vue' import { useRoute, useRouter } from 'vue-router' import { getCaptcha } from '@/api/auth' +import { getPublicSettings } from '@/api/settings' import { useUserStore } from '@/store/user' const router = useRouter() @@ -23,6 +24,20 @@ const form = reactive({ const captchaId = ref('') const captchaImage = ref('') +/** 品牌名:默认衍水集团,公司信息设置页改了以后登录页同步生效(public 端点) */ +const brandName = ref('衍水集团') +const brandLogo = ref(null) + +async function loadBrand(): Promise { + try { + const data = await getPublicSettings() + if (data.company_name) brandName.value = data.company_name + brandLogo.value = data.logo_url + } catch { + // 登录页必须可用:公司信息接口失败时静默回退默认品牌名,不阻断登录 + } +} + const rules: FormRules = { username: [{ required: true, message: '请输入用户名', trigger: 'blur' }], password: [{ required: true, message: '请输入密码', trigger: 'blur' }], @@ -72,7 +87,10 @@ async function handleSubmit(): Promise { } } -onMounted(refreshCaptcha) +onMounted(() => { + refreshCaptcha() + loadBrand() +})