Files
tms-erp-web/.workbuddy/memory/2026-09-09.md
T
gxwebsoft e73e1da877 feat(contract-manage): 将付款比例设置提示改为tooltip展示
- 付款比例设置区块标题后添加问号图标悬浮提示,替换原红色文字说明
- 编辑弹窗、详情弹窗、合同变更页统一使用el-tooltip + el-icon-question-filled组件
- 移除contract-manage.vue中原有.red tip提示及相应样式

feat(temporary-credit-limit): 优化临时额度申请界面及校验规则

- 增加新增/编辑/查看临时额度申请标题,覆盖默认菜单注入标题
- 所有表单字段统一设置placeholder为“请输入/请选择”无字段名
- 搜索栏占位符统一为“请输入/请选择”,与其他模块一致
- 临时额度申请有效期至字段增加“必须晚于当前日期”日期校验规则
- 增添futureDateRule通用校验规则,支持多种日期格式即时触发验证

feat(project-apply): 新增资金使用风险快速筛选及风险提示

- 项目申请列表增加资金使用风险列,显示高风险/中风险标签
- 新增资金使用风险快速筛选区,可点击标签筛选项目风险等级
- 提供资金使用风险阈值配置,支持中风险≥80%、高风险≥90%
- 调整页面样式及交互,优化风险筛选体验
- 新增后端接口getFundRiskStats,用于获取风险统计数据并实时刷新
2026-09-09 12:45:46 +08:00

9.7 KiB
Raw Blame History

付款比例设置提示改为 tooltipcontract-manage / contract-manage-change

  • 需求:将「付款比例设置」区块原有的红色文字提示改为标题右侧的 ? 图标悬停提示。
  • 改动:编辑弹窗、详情弹窗、合同变更页三处标题后添加 el-tooltip + el-icon-question-filled,content 为「非必填;配置付款比例时,合计必须等于100%。」;同时移除 contract-manage.vue 中原 .contract-manage-form__tip 红色提示文字及对应样式。

必填星号与 label 首行齐平(全局)

  • 根因:element-ui.scss.el-form-item--label-right .el-form-item__label { align-items:center } 使 inline-flex label 的星号 ::before(独立 flex 子项)在多行折行时被垂直居中。
  • 修复:label 改 align-self:center(整体仍随行垂直居中)+ align-items:flex-start(星号/文字首行齐平),覆盖 label-right/left/top 三种位置;旧 inline-block 注释已修正。
  • 影响页面:project-apply 独立表单页等所有多行 label 场景(弹窗内 white-space:nowrap 不受影响)。

必填星号首行对齐:改用 align-items: normalstretch 方案)

  • 最终写法(src/styles/element-ui.scss):.is-required .el-form-item__label { align-self:center; align-items:normal; } + ::before { display:inline-block; height:auto; line-height:inherit; margin-right:4px }
  • 原理:stretch 让星号盒子在「换行时」被拉伸到 label 全高、内容从顶部排布 → 贴首行;单行时盒子=一行高,视觉不变(比 flex-start 更贴合「只换行才生效」)。
  • 前提:::before 高度必须 auto 且继承行高;label 不能是 固定 height + 等高 line-height,否则退化成居中,需 JS 判行数加 class。

合同变更页(contract-manage-change.vue

  • 「其它附件」上传按钮改为 type="primary" plain icon="el-icon-upload",与「变更材料」区 vehicle-attachment-upload 内置按钮一致。
  • 分区标题必填星号:.dialog-section-title.is-required::after { content:'*'; color:#f56c6c }::before 已被蓝色竖条占用,星号走 ::after)。
  • 再次变更逻辑:load() 里 form 强制重置 changeContent/changeReason/changeAttachmentsJson = ''changeMaterials = [](不带上一次内容);新增 mergeChangeAttachments() 把上一次的 changeAttachmentsJson 归集进 attachments(其它附件),按 url/名去重,数字 size 转格式化文本,提交时随 attachmentsJson 持久化。

合同变更记录对齐客商变更记录(contract-manage.vue

  • 编辑页与详情弹窗的两处「变更记录」表格新增「变更内容」列:formatContractChangeContent(row) 复用 buildDetailChangeRecordRows 生成「字段:变更前:x → 变更后:y」摘要,单行省略 + el-tooltip 全量悬浮(样式 .contract-change-record-content-cell/-tooltip 照搬客商 change-record-content-*)。
  • 编辑页操作列由单个「流程」改为「详情 + 流程」(openDetailChangeRecord + openFlow,宽度 120→150);详情弹窗表格「查看详情」改「详情」与客商一致。
  • 值格式化增强:billingPlanJson→方案名(默认)列表、paymentRatioJson→「第N笔 xx%」、settlementRuleJson/preSettlementConfigJson/formalSettlementConfigJson→可读摘要(自动生成开关/结算类型/周期类型/截单日/周期天数,含预结算+正式结算双段)。
  • buildDetailChangeRecordRows 过滤条件补「前后都为空则跳过」(原来只比 JSON 字符串,'' 与 null 会漏)。

星号方案补丁(关键)

  • EP 的 .el-form-item__label 写死 height:32px; line-height:32px(项目只覆盖了 line-height:14px),导致 stretch 方案文字顶到 32px 盒子顶部、单行不居中。
  • 修复:.is-required .el-form-item__label { height:auto; align-self:center; align-items:normal }——height:auto 收缩到内容高 + align-self:center 行内居中 + normal(stretch) 仅换行时星号贴首行。

车辆认证审核弹窗重构(transportCapacity/vehicle.vue

  • 背景:用户反馈「样式不统一、内容不全」。根因是审核弹窗用 <el-descriptions :column="3" border>(大白表 + 居中 label),与同页编辑弹窗的 <section-card> 白卡分组风格不一致。
  • 改造:弹窗主体改为 4 个 section-card 分组 —— 基础信息 / 尺寸重量 / 证件信息 / 证件图片;内部 el-form label-position="right" label-width="auto" + el-row/el-col3 列 :span="8",所属组织与备注占 :span="24")。
  • 内容补全:新增「证件图片」分组,6 张证件照用 <image-upload-field readonly large class-prefix="vehicle"> 只读展示(可点击放大);证件图片尺寸 240×151 复用已有全局 :deep(.vehicle-uploader--large) 规则,无需新写。
  • label 单位统一为中文全角括号:外廓长度(毫米) / 核定载质量(KG(原为半角 外廓长度(mm))。
  • 方法重构:formatAuditValue(item)auditValue(prop),签名更简洁;新增 longTermMap,对 drivingLicenseEndDate / roadTransportCertEndDate / annualReviewEndDate / compulsoryScrapDate 在勾选长期有效时返回「长期有效」,避免与未填写的「-」混淆(与列表页 formatEndDate 行为一致)。
  • 删除已无引用的 auditDetailItems computed。

全站弹窗标题补 4px 主色竖条(全局 element-ui.scss

  • 发现:.el-dialog__title 全局只配了 inline-flex + gap:8px没有竖条(竖条此前只在 .dialog-section-title::before),导致全站 el-dialog 标题都不带竖条,不符合 AGENTS.md 4.8。
  • 修复:新增 .el-dialog__title:not(:empty)::before { width:4px; height:16px; border-radius:2px; background:var(--el-color-primary) }
  • 注意:必须加 :not(:empty),否则无标题弹窗会出现孤立蓝条。
  • customer-archive.vue 评分详情弹窗:将「临时额度申请使用期限」区间行(span=12 + 至 连接)拆分为两个 span=6 独立字段「临时申请额度有效期起 / 止」,字段名 tempCreditStartDate/End 不变,删除废弃样式 .score-detail-form__range。
  • temporary-credit-limit 文案调整:option 增加 addTitle/editTitle/viewTitle=「新增/编辑/查看临时额度申请」(覆盖 crud-dialog-title mixin 按菜单名注入的「临时额度管理」);remark label 改「临时额度信息」(hide:true 无表格副作用,rules 同步);projectName 表单 label 用 #projectName-label 插槽改「项目额度信息」,列 label 保持「项目名称」不动表格列头/搜索。Avue 支持-{prop}-label / -header / -search 插槽分离表单/表头/搜索文案。
  • temporary-credit-limit「申请有效期至」增加「必须晚于当前日期」校验:common.js 新增通用 futureDateRule(label)trigger: ['change','blur'],空值/非法值放行,按 0 点比较,当天也算过期),temporary-credit-limit.js 的 validUntil rules 追加该规则。已验证 Element Plus 通用 picker 在选中日期时调用 formItem.validate('change'),故选择即刻提示;form.validate() 不带 trigger 时会跑全部规则,提交仍拦截。
  • temporary-credit-limit 搜索占位文案统一:createCrudOption(withSearchPlaceholders([...])),搜索栏 placeholder 变为「请输入/请选择」不带字段名,与 waybill-manage / transport-plan / shipping-template 同一模式。
  • temporary-credit-limit 弹窗表单 placeholder 统一为「请输入/请选择」不带字段名:option 各列加 placeholderprojectCode/undertakeDeptName/projectFundLimit/usedFundLimit/remainingFundLimit/remark=请输入,validUntil=请选择),视图 formslot 自定义控件(projectName select、applyLimit inputplaceholder 同步改。

【项目管理】列表增加「项目资金使用预警」(project-apply

  • 需求:列表新增「资金使用风险」列,高风险红色、中风险黄色;列表头部增加「资金使用风险」快速筛选标签(高风险(数)/中风险(数)),点击筛选。规则 tooltip:中风险≥80%、高风险≥90%,使用率=已使用资金/项目资金使用额度×100%。
  • 前端(已落地,src/views/business/project-apply.vue + src/option/business/project-apply.js + src/api/business/project-apply.js):
    • option/project-apply.js 新增列 fundUseRisk(slot:true, hide 列表显示) + 导出 fundUseRiskOptions(high/medium/none) 与 fundUseRiskThreshold{high:90, medium:80}。
    • view 新增 #header 插槽:el-check-tag 快速筛选(复用 contract-manage 到期标签交互),带数量(fundRiskStats[statKey])与 ? tooltip 规则;新增 #fundUseRisk 插槽渲染彩色 el-taghigh→type=danger 红,medium→type=warning 黄,无→"-")。
    • data 加 fundRiskScope/fundRiskStats{high,medium,none}/fundRiskTagOptionsonLoad 追加 fundUseRisk 筛选参数 + 成功后 refreshFundRiskStats;新增 changeFundRiskScope(再次点击取消)、refreshFundRiskStatssearchReset 清空风险筛选。
    • api 新增 getFundRiskStats → GET /blade-transport/project-apply/fund-risk-stats。
  • 后端契约(未改,待确认数据来源):ProjectApplyVO 补齐 fundUseRisk(high/medium/none)、fundUseRiskNamefundUseRateusedFundLimit/remainingFundLimit;列表 selectProjectApplyPage 填充每行风险 + buildQuery 支持 fundUseRisk 过滤;新增 /fund-risk-stats 返回 {high,medium,none}。
  • ⚠️ 关键阻塞:系统里项目与任何费用表(运输计划/运单/账单/客商)均无关联字段,usedFundLimit(已使用资金) 无真实取数来源;临时额度模块的 project-apply/list 返回里 usedFundLimit 实际为空。需业务方确认「已使用资金」口径后才能算风险等级,否则列表风险列全空、统计为 0。