feat: 邀请函邮件发送 + 首次设密/密码为空 + 姓名单一可信源
邀请发送 (菜单暂隐藏, 待确认参数见 发送邀请-待确认参数.md): - 后端: BizInvite / BizInviteRecipient + Controller/Service/Mapper/XML - 邮件: InviteMailSender (spring-boot-starter-mail SMTP) + application*.yml 邮件配置 - 上传进度: UploadProgressRegistry + UploadProgressController - 前端: InviteList / InviteNew / InviteDetail / InviteView + api/business/invite.js - 原型: proto/html/components/invite-detail / new-invitation / send-invitation 登录/账号: - 首次设密: /getInfo 返回 isPasswordEmpty, SysProfileController 密码为空时跳过旧密码校验, ForcePasswordDialog 强制弹窗 - 姓名单一可信源 resolveDisplayName: doctor→biz_expert.name, sponsor/executor→biz_person.name, 其余回退 nick_name - OA compliance 门禁改为按手机号查 ecology 视图 (不再限定 manager/leader) 其它: - OSS zip 在线查看 (列清单+取单文件, 公开只读) + SecurityConfig permitAll - doctor 项目详情 ProjectDetail.vue - 数据库/测试/设计文档 (md) 入库
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# 待优化遗留项(本次 0/1→Y/N 未改的部分)
|
||||
|
||||
> 记录时间:2026-09-06
|
||||
>
|
||||
> 背景:已完成 `biz_project.is_finished` / `is_published`、`biz_department.status`、`biz_article.status`、`biz_meeting.labor_signed` 这 5 列 `char(1)` 0/1→Y/N 的迁移(test+prod 两库、后端、前端、文档四层同步)。
|
||||
>
|
||||
> 下面是**发现但未修改**的项,留待下次处理。
|
||||
|
||||
---
|
||||
|
||||
## 1. 其它表 `status` 仍存 0/1(未纳入本次 5 列范围)
|
||||
|
||||
这些 `status` 仍是 0/1,与新 Y/N 约定不一致。
|
||||
|
||||
| 表.列 | 后端字面量 | 前端文件 | 备注 |
|
||||
|---|---|---|---|
|
||||
| `biz_special_plan.status` | `BizSpecialPlanMapper.xml:33` `status='0'` | `admin/BizSpecialPlanAdmin.vue`、`BizSpecialPlanEdit.vue` | 专项计划 |
|
||||
| `biz_doctor_title.status` | `BizDoctorTitleMapper.xml:37` `status='0'` | `admin/Title.vue` | 医生职称 |
|
||||
| `biz_org.status` | `BizOrgMapper.xml:183` `o.status='0'` | 待查(机构管理页) | 机构 |
|
||||
| `sys_user.status` | `BizSysUserQueryMapper.xml:26` `u.status='0'` | `admin/Users.vue` | 框架标准字段 |
|
||||
| `sys_role.status` | —(框架自带) | `admin/Roles.vue` | 框架标准字段 |
|
||||
| `sys_dict.status` | —(框架自带) | `admin/ProjectCategory.vue` | 框架标准字段 |
|
||||
| `biz_project_assign.status` | `BizProjectAssignMapper.xml:33` `status='0'` | 待查/可能无前端 | 项目分配 |
|
||||
|
||||
> ⚠️ 各表的 0/1 语义**并不相同**(有的 0=启用/1=停用,有的 0=正常/1=停用,biz_project_assign.status 含义又不同)。改之前逐个查 `COLUMN_COMMENT` 确认,**不要照搬本批次的映射方向**。
|
||||
> `sys_user` / `sys_role` / `sys_dict` 是 RuoYi 框架标准字段,改动会影响框架行为,建议单独评估是否值得动。
|
||||
|
||||
## 2. `biz_project_plan.is_finished` 是死字段
|
||||
|
||||
- 查库确认:`biz_project_plan` 表**没有** `is_finished` 列(全库只有 `biz_meeting.is_finished` 和 `biz_project.is_finished` 两列)。
|
||||
- `BizProjectPlan.java:49-50` 的 `isFinished` 字段无对应列、无 resultMap 映射,属残留,可直接删除。
|
||||
|
||||
## 3. `biz_meeting.is_finished` 是 tinyint 0/1(与项目级 `is_finished` 同名不同型)
|
||||
|
||||
- DB:`biz_meeting.is_finished tinyint NOT NULL DEFAULT 0`
|
||||
- 后端:`BizMeeting.java` 的 `isFinished` 是 `Integer`(不是 String)
|
||||
- 前端:`utils/meetingStage.js` 的 `isTrue()`、`views/meetings/Meetings.vue`、`MeetingDetail.vue` 都按 tinyint(0/1)判断
|
||||
- 若也要统一成 `char(1)` Y/N,需改:列类型 → `Integer` 改 `String` → 前端这些 `isOne/isTrue/isOneVal` 判断,改动面较大,建议单独评估。
|
||||
|
||||
## 4. `biz_meeting.labor_signed` 签署链路未接线
|
||||
|
||||
- 已改成 `char(1)` Y/N(默认 `N`),但全库该列从未出现过 Y:test 46 条、prod 3 条全 `N`。
|
||||
- 代码里无 `setLaborSigned(...)` 调用,前端无 `laborSigned` 引用——「签署劳务」动作目前未实现。
|
||||
- 将来实现签署时,落库值要写 `'Y'`(不是旧 `'1'`)。
|
||||
Reference in New Issue
Block a user