# 2026-04-29 工作日志
- 修复 SysAdminView.vue 第 849 行 `
` 占位符 bug(上一轮 i18n 修改误删内容),恢复为 `
`
- 在 `en.json` 的 `message` 节点补充缺失的 `"sysadmin": "System Admin"` 翻译
- 全面重新分析代码结构,更新并精简 MEMORY.md(整合后端 main.go 启动流程、apiSysAdmin 完整路由、前端路由守卫逻辑、stores/user.js isSysAdmin 机制等)
- 将 SysAdminView.vue 拆分为三个子组件:`src/views/sysadmin/UsersTab.vue`(用户管理+详情弹窗)、`GroupsTab.vue`(用户组+添加/移除成员)、`LogsTab.vue`(登录失败日志);父组件改用 v-show 保持子组件挂载,UsersTab 自身 onMounted 加载数据,Groups/Logs 由父组件 watch(activeTab) 懒加载
- 将 SysAdminView.vue 整体移入 `src/views/sysadmin/` 目录,并更新 router/index.js 中的引用路径为 `@/views/sysadmin/SysAdminView.vue`
- 客户模块权限改造:移除 `/getinfo` 返回的 `isCustomerAdmin`,改为按记录返回 `edit` 权限标记
- 后端 `apiCustomer.go`:新增 `canModifyCustomer()` 函数(创建者或管理员可编辑),`/list` 每条记录附加 `edit` 字段,`/get` 返回 `canModify`,`/update` 和 `/delete` 改用 `canModifyCustomer` 校验权限
- 后端 `apiUsers.go`:移除 `isCustomerAdmin` 返回
- 前端 `stores/user.js`:移除 `isCustomerAdmin` 状态
- 前端 `CustomerList.vue`:改用 `customer.edit` 控制编辑/删除按钮显示,新增按钮始终显示(后端会校验权限)
- 客户称呼选项调整:移除"夫人"/"博士",新增"单位"作为默认选项
- `CustomerFormModal.vue`:`titleOptions` 改为 `['Unit', 'Mr', 'Ms']`,默认值改为 `'Unit'`
- `zh-CN.json`:新增 `salutation_unit: "单位"`,移除 `salutation_mrs`/`salutation_dr`
- `en.json`:新增 `salutation_unit: "Unit"`,移除 `salutation_mrs`/`salutation_dr`
- 后端 `apiCustomer.go`:`Title` 字段注释改为 `称呼:Unit/Mr/Ms`
- 客户表单字段顺序调整:姓在前(必填),名在后(非必填)
- `CustomerFormModal.vue`:表单 grid 改为 姓 → 名,移除 `first_name` 必填验证
- `CustomerList.vue`:列表显示改为 `last_name + first_name` 顺序
- 创建客户详情页 `CustomerDetail.vue`
- 显示客户基本信息(姓名、称呼、创建时间、创建者)
- 显示电话列表(含主号码标记)
- 显示邮箱列表(含主邮箱标记)
- 显示单位列表(含主单位标记)
- 编辑按钮(仅 `canModify` 为 true 时显示)
- 返回按钮
- 创建客户编辑页 `CustomerEdit.vue`(包装 `CustomerFormModal`)
- 添加路由:`/customer/detail/:id` 和 `/customer/edit/:id`
- `CustomerList.vue`:姓名改为可点击链接,跳转到详情页
- i18n:添加 `common.back`、`customer.detail_title`、`customer.basic_info`、`customer.created_by`、`customer.not_found` 等翻译
- 工单-客户关联功能
- `binds.go`: 新增 `TabWorkOrderCustomerBind` 关联表,在 `BindsInit()` 中注册
- `apiWorkOrder.go`: `/get` API 返回 `linkedCustomers`;新增 `/link_customer` 和 `/unlink_customer` API
- `ShowWorkOrder.vue`: 详情页显示关联客户,支持搜索/关联/解除关联客户
- `work_order.js`: 添加 `linkCustomer` 和 `unlinkCustomer` API 方法
- `AddEditWorkOrder.vue`: 新增工单时支持搜索并关联客户
- i18n: 添加 `linked_customer`、`linked_customers`、`link_customer_placeholder` 等翻译
- 工单编辑页支持关联物品和客户(多选)
- `AddEditWorkOrder.vue`: 移除 `v-if="!isEdit"` 限制,编辑模式也显示关联物品/客户搜索框
- `AddEditWorkOrder.vue`: 编辑模式加载时回填 `selectedItems` 和 `selectedCustomers`
- `AddEditWorkOrder.vue`: 编辑提交时发送 `item_ids` 和 `customer_ids`
- `apiWorkOrder.go`: `/update` 接口新增 `ItemIDs` 和 `CustomerIDs` 字段,重建物品/客户关联绑定