日期: 2026-07-30
状态: 已实现
范围: web-admin 用户管理补齐最后工作日;审批套件 Tab 离职套件;发起默认入职日期;backend 审批通过后回写发起人 last_work_day
界面模式: 对齐请假/转正套件;视觉 Fresh Mint
前置:
docs/superpowers/specs/2026-07-30-oa-leave-kit-design.mddocs/superpowers/specs/2026-07-30-oa-confirmation-kit-design.md(回写模式)套件 Tab 增加 离职套件:采集入职日期、最后工作日、离职原因及备注;审批通过后将最后工作日回写发起人用户主数据。
sys_user 增补 最后工作日;用户管理新增/编辑/详情可维护。last_work_day。| 项 | 决策 |
|---|---|
| 实现方案 | 套件容器 + 子字段拼装 |
| 容器类型 | resignationKit |
| 回写时机 | 审批全部通过 |
| 回写对象 | 始终发起人 |
| 回写字段 | 仅最后工作日 |
| 账号状态 | 不动 |
| 用户管理 | 最后工作日可新增/编辑/详情 |
| 入职日期 | 默认申请人,可改,不回写 |
| 最后工作日 | 默认必填(设计器可改);手填 |
| 交叉校验 | 首期不做 |
| 原因/备注 | 仅审批单 |
┌─ 离职套件(resignationKit)──────────────────────────┐
│ · datePicker 入职日期 ← userInfo.hireDate │
│ · datePicker 最后工作日 ← 手填;通过后回写 │
│ · select 离职原因 ← 5 默认项,可配置 │
│ · textarea 离职原因备注 │
└──────────────────────────────────────────────────────┘
运行时不渲染套件边框/标题。
| 语义 key | title | type | 必填默认 | 回写 |
|---|---|---|---|---|
hireDate |
入职日期 | datePicker 仅日期 | 是 | ✗ |
lastWorkDay |
最后工作日 | datePicker 仅日期 | 是 | ✓ → last_work_day |
resignReason |
离职原因 | select | 是 | ✗ |
resignRemark |
离职原因备注 | textarea | 否 | ✗ |
离职原因默认 options:
语义识别:props._fc_kit_field;容器 props 可挂各 *Field id。
{
"type": "resignationKit",
"props": {
"hireDateField": "...",
"lastWorkDayField": "...",
"resignReasonField": "...",
"resignRemarkField": "..."
},
"children": [
{
"type": "datePicker",
"title": "入职日期",
"props": { "_fc_kit_field": "hireDate", "type": "date", "valueFormat": "YYYY-MM-DD" },
"$required": true
},
{
"type": "datePicker",
"title": "最后工作日",
"props": { "_fc_kit_field": "lastWorkDay", "type": "date", "valueFormat": "YYYY-MM-DD" },
"$required": true
},
{
"type": "select",
"title": "离职原因",
"options": [
{ "label": "家庭原因", "value": "家庭原因" },
{ "label": "个人原因", "value": "个人原因" },
{ "label": "发展原因", "value": "发展原因" },
{ "label": "合同到期不续签", "value": "合同到期不续签" },
{ "label": "其他", "value": "其他" }
],
"props": { "_fc_kit_field": "resignReason" },
"$required": true
},
{
"type": "textarea",
"title": "离职原因备注",
"props": { "_fc_kit_field": "resignRemark", "rows": 3 },
"$required": false
}
]
}
ALTER TABLE `sys_user`
ADD COLUMN `last_work_day` date DEFAULT NULL COMMENT '最后工作日' AFTER `probation_months`;
(若库中无 probation_months,则 AFTER hire_date 或 phone_no。)
同步:SysUser、_row_to_dict(lastWorkDay)、Create/Update Body、用户管理表单与详情、userInfo 可选带出 lastWorkDay(套件默认不依赖此项)。
仅对空的入职日期写入 userInfo.hireDate。其余字段不默认。
LAYOUT_TYPES 纳入 resignationKit。挂在实例 status = completed 后(可与转正 sync 并列调用):
apply_resignation_kit_user_sync(db, inst)
resignationKit → 取 lastWorkDayYYYY-MM-DD 则更新发起人 last_work_day| 区域 | 路径 |
|---|---|
| SQL | docs/sql/sys_user_last_work_day.sql |
| 模型/CRUD/API/用户管理 | 同转正补字段路径 |
| 容器 | OaResignationKit.vue |
| DragRule / 注册 | oa-resignation-kit-rule.ts、oa-form-create-resignation-kit.ts |
| 默认值 | oa-resignation-kit-runtime.ts |
| 回写 | oa_resignation_kit_sync.py + oa_engine completed 钩子 |
| 发布/打印 | oa_publish.py、oa-approval-print.ts |
| 设计器拖入刷新 | oa-fc-host/App.vue(纳入 kit 名列表) |
userInfo 是否带出 lastWorkDay:可选,套件不依赖。