Files
tms-erp-web/.workbuddy/memory/2026-08-28.md
T
gxwebsoft 16af750030 feat(project-apply): 优化表单提示与客户承运商表格交互
- 将“项目资金使用额度”和“项目应收账款额度”提示从placeholder移至label右侧问号tooltip
- 调整提示文案为“实际业务回款周期内付款”和“回款期内最大应收账款额”
- 客户信息和承运商信息表格中“客户”“承运商”列变为可点击链接,点击跳转查看客商档案
- 删除客户和承运商表格中的“联系人”“联系方式”列
- 表单输入框placeholder统一调整为“请选择”或“请输入”
- 新增openCustomerArchive方法支持查看客商档案,缺失ID时提示警告
- 项目申请页面用户查询条件由account改为phone,相关表格列同步调整
- 部门管理权限调整,操作列只显示“添加”按钮,删除查看、编辑、删除按钮相关代码及样式
- Vite配置中更新本地开发端口为2889并修改API代理目标地址为局域网地址http://172.16.203.228:8000
- 修正项目申请页面部分样式,使label问号图标与文字baseline对齐和换行显示
2026-08-28 16:44:06 +08:00

83 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-08-28 工作日志
## contract-manage 表单底部操作栏间距/文案修复
- 文件:`src/views/business/contract-manage.vue`
- 问题:底部浮动操作栏 `.contract-manage-page__footer``gap:8px`,与全站统一 12px 标准不一致("间距不一致不统一")。
- 修复:去掉 `gap:8px`,改用 `.el-button + .el-button { margin-left:12px }`,对齐全站"去 gap、12px"规范。
- 文案:底部"关闭"→"取消"(底部操作栏统一命名规范;详情弹窗/流程图弹窗的"关闭"为只读/纯关闭场景,按规范保留)。
## contract-manage 草稿编辑页按钮缺失修复
- 问题:编辑态(含草稿编辑)底部只有单个"提交"submitEdit),缺"暂存/提交临时合同/提交正式合同",与新增页不一致。
- 修复:新增 computed `isDraftEdit``formMode==='edit' && form.approvalStatus==='draft'`);footer 三按钮条件由 `formMode==='add'` 改为 `formMode==='add' || isDraftEdit`,草稿编辑复用 `submitCreate`(按 id upsert + temporary/formal 提升),非草稿编辑仍走 submitEdit 单个"提交"。
## contract-manage-change 变更页底部操作栏统一改造
- 文件:`src/views/business/contract-manage-change.vue`
- 问题:`.page-footer` 左侧对齐、`gap:16px`、不悬浮,且按钮顺序/命名(提交→关闭)与新增页规范相反。
- 修复:
- DOM:按钮重排为 `[取消][提交]`(次要居左、主操作居右),"关闭"→"取消"。
- 样式:`.page-footer` 改为 `position:fixed` 悬浮吸底(left:230px / avue--collapse 60px / avue-layout--horizontal 0)、`justify-content:flex-end` 右对齐、去 gap 改用 `.el-button+.el-button{margin-left:12px}` 统一 12px、白底+上边框+上投影。
- 容器 `.contract-change-page``padding-bottom:72px`,避免内容被悬浮栏遮挡。
## contract-manage 新增页"合同文件"标题未加粗修复
- 文件:`src/views/business/contract-manage.vue`
- 问题:`attachment-section` 子组件内渲染的 `.dialog-section-title` 不受当前页面 scoped `> .dialog-section-title` 样式命中,导致"合同文件"标题字重未加粗(截图反馈)。
- 修复:在 `.contract-manage-form__section` 样式规则中补充 `:deep(.dialog-section-title)`,使直接子元素和子组件内部标题均统一为 16px/600/#303133
## contract-manage 搜索栏"时间段快捷筛选"组位置前置
- 文件:`src/views/business/contract-manage.vue` + `src/option/business/contract-manage.js`
- 第一轮(理解偏差):把"签约类型"select 和 check-tag 组一起塞进 `#search-menu` slot。主人纠正:「签约类型」是普通搜索字段,应与第一行 8 个搜索项同排,不是 slot 内的辅助元素。
- 第二轮(终态):
- option 把 `signType``search:true / searchOrder:10 / searchPlaceholder:'请选择'`,作为 Avue 标准搜索字段,与其它 8 项同排(放在末尾)。
- 页面 `#search-menu` slot 移除「签约类型」select,仅留 5 个 el-check-tag。
- 页面 data 移除冗余的 `contractSignType:''`onLoad/searchReset 不再手动维护 signTypeAvue search form 自动绑定到 query)。
- 样式:`.el-select { width: 180px }` 已成 dead code,移除。
- `:deep(...)` 调整:去掉 `margin-right:auto`,只留 `order:-1``.avue-form__menu` 本身 `flex / flex-end`,check-tag 组排首项后,整体仍紧靠右侧,与 `[查询][重置][收起]` 形成 `[快捷筛选] [查询] [重置] [收起]` 右对齐序列。
## 登录验证码:滑块(behavior) → 图形字符验证码(image)
- 文件:`src/config/website.js`(第14行 `captchaType: 'behavior'``'image'`)、`src/page/login/userlogin.vue``src/styles/login.scss`
- 背景:登录页原 `captchaType:'behavior'`(滑块/旋转行为验证)。需求改成截图中的「输入框 + 右侧独立彩色字符验证码图片」。
- 改动:
1. `website.js``captchaType: 'image'` 启用图形验证码分支(代码原本就有 image 模式的 UI 与 `getCaptcha()` 逻辑,仅未启用)。
2. `userlogin.vue` image 分支模板:验证码图片从 `el-input``#append` 内联改为 form-item 内 `.login-code-wrap` 并排独立方块(输入框 flex:1 + 右侧 130px 图片块),点击刷新。
3. `login.scss` 重写 `.login-code/.login-code-wrap/.login-code-box/.login-code-img`:flex 并排、图片块带 1px 边框 + hover 主色高亮、`object-fit:fill` 撑满。
- 验证:`vite build --outDir /tmp/tms-verify-build` 全量编译通过(exit 0,无报错)。注意原 `pnpm build` 因 WorkBuddy safe-delete 钩子拦截清空 dist/(741 文件)而中断,非代码问题。
- 注意:登录页 `activeName` 默认 `'iam'`IAM 统一登录),图形验证码在 `userlogin.vue`,需点「账号密码登录」才可见;验证码图片依赖后端 `/blade-auth/oauth/captcha` 返回的 `data.key` + `data.image`
## 全站「所属组织」搜索统一为树形下拉(el-tree-select
- 背景:合同管理页「所属组织」原为 cascader(radio 风格),客户档案页(vehicle/customer-archive)已用树形下拉。主人要求全站统一为树形。
- 统一方案:新建可复用 mixin `src/mixins/organization-search.js`(封装 organizationTreeOptions 树数据、loadOrganizationOptions()、renderOrganizationSearch(scope) 渲染函数,自动识别 organizationName / deptName 两种 prop 并挂 column.renderSearch;树节点 node-key='id')。
- 适用两种架构:
1. **avue-crud 搜索**renderSearch 模式):option 列加 `searchslot:true`,视图混入 mixin + created/初始化调 loadOrganizationOptions。已改:contract-manageoption 去 cascader 改 searchslot,视图用 renderOrganizationSearch 渲染函数)、transportCapacity 的 driver/vehicle/ship 三页(option 去 type:select 改 searchslot,视图混 mixin)。
2. **自定义搜索表单**query.deptName 文本框模式):替换 `<el-input v-model="query.deptName">``<el-tree-select>`node-key='id'@update:model-value 用 findOrgById(val)?.rawLabel 把 id 转回部门名写入 query.deptName(保后端按名称过滤兼容)。已改 payment 模块 4 处:invoice-application / invoice-receipt / payment-application / components/bill-payment-search。
- 关键坑:mixin 内部树数据命名为 `organizationTreeOptions`(非 organizationOptions),与 transportCapacity 等页面表单自用的扁平 `organizationOptions` 隔离,避免相互覆盖破坏表单 select。
- 待办(同自定义表单模式,未改):settlement 模块 4 个视图(transport-reconciliation/formal-settlement/pre-settlement/settlement-adjustment,搜索用动态 v-for 渲染 searchFields,需给 deptName 加 `type:'tree'` 分支)、system/user.vuedeptName)。business 模块(waybill-manage/transport-plan 等)所属组织为 `hide:true` 不展示搜索,无需改。
## project-apply 业务部门栏占满宽度修复
- 文件:`src/views/business/project-apply.vue`
- 问题:「重大项目补录」(独立表单页 /business/project-apply/form?mode=majorSupplement)下"业务部门"项横跨整行,与上下两行半宽风格不一致。
- 根因:`<el-form-item label="业务部门">` 误加 `class="project-apply-form__item--full"`(该类对应样式 `:deep(.project-apply-form__item--full) { grid-column: 1 / -1; ... }` 是横跨整行的:本意只用于"项目由来说明"等多行文本字段)。
- 修复:移除该 class,业务部门恢复为半宽(一行两列网格的常规项),仅"项目由来说明"等需要全宽铺开的字段仍保留 full。同时把样式块上方注释由「占满整行的表单项(业务部门 / 项目由来说明)」改为「占满整行的表单项(如项目由来说明等多行文本字段)」,避免再误读。
## project-apply 字段 label 问号悬浮提示
- 文件:`src/views/business/project-apply.vue`
- 需求:把"项目资金使用额度"/"项目应收账款额度"两字段的提示从 placeholder 移到 label 右侧问号 tooltip。
- 实现:
-`el-form-item``class="project-apply-form__tip-label"`,用 `#label` slot 包裹文字 + `<el-tooltip content=... placement="top"><el-icon class="project-apply-form__label-tip"><QuestionFilled /></el-icon></el-tooltip>`
- placeholder 改回"请输入"。
- 提示文案按截图(去掉"额度"二字):资金使用额度→`实际业务回款周期内付款`;应收账款额度→`回款期内最大应收账款额`
- scoped 样式:`__tip-label :deep(.el-form-item__label){vertical-align:top}` 保持默认 inline 布局,让文字按全局 `white-space: normal` 换行显示;`__label-tip{margin-left:4px;color:#a8abb2;cursor:help;vertical-align:-0.125em}` 问号与文字 baseline 对齐。
- 图标 `QuestionFilled` 已在 main.js 全局注册(@element-plus/icons-vue),模板可直接用。
- 可复用模式:其它表单字段如需 label 旁问号提示,套用此 slot 结构即可。
## project-apply 详情页客户/承运商表格改造
- 文件:`src/views/business/project-apply.vue`
- 需求:
1. 客户信息、承运商信息两个表格的「客户」「承运商」列改为可点击链接,跳转打开对应客商档案。
2. 删除两个表格的「联系人」「联系方式」列。
- 实现:
- 模板:两列的 `el-table-column``#default` slot 渲染 `<el-link type="primary" :underline="false" @click="openCustomerArchive(row)">`,显示 `row.customer` / `row.carrier`
- 删除原 `prop="contact"``prop="phone"` 两列。
- methods 新增 `openCustomerArchive(row)`:取 `getCustomerRowId(row)``row.id || row.customerId || row.carrierId`),无 ID 时 `this.$message.warning`;有 ID 则 `this.$router.push({ path: '/vehicle/customer-archive/form', query: { id: String(id), name: '查看客商档案', view: '1' } })`
- 注意:客商档案查看态由 `customer-archive.vue``this.$route.query.view === '1'` 识别,与现有查看逻辑一致。