feat: 会议劳务/会务材料分轨审核 + 注册页标题 + 下拉空值修复

会议材料分轨 (material_audit_stage 单轨 → labor/service 双轨):
- biz_meeting: labor_audit_stage/labor_compliance_approved + service_audit_stage/service_compliance_approved 四列替换原单轨两列
- StageDeriver: 单轨状态机(R/N/C0/C1/A) + 角色优先级选代表轨 + 会议物理态取两轨最小进度
- MeetingAuditStageEnum / 前端 meetingStage.js 镜像: 分轨推导 + 颜色跟随角色展示阶段(避免文案与颜色错位)
- BizMeetingController/ServiceImpl/AuditLog + mapper + MeetingStageScheduler 同步分轨字段
- MeetingDetail/Meetings/doctor/executor Meetings/ManagerProjectDetail/ManagerProjectsAssign/PublicityDetail 同步双轨

其它:
- 注册页 (执行单位/专家/支持单位) 加居中页标题
- DoctorDeptSelect/DoctorTitleSelect 空字符串统一 null, 避免挂载必填项飘红
- BizOrgMapper sponsor/executor options 加 status 字段
- sponsor/NewPerson 编辑态 orgName 只读
This commit is contained in:
郭庆泰
2026-08-26 18:13:22 +08:00
parent b5b3e3a213
commit b0256ccac3
25 changed files with 752 additions and 449 deletions
+2 -1
View File
@@ -65,7 +65,8 @@ const rawOptions = ref([])
const loading = ref(false)
// el-select 内部绑定的 key (可能 = 字典值, 可能 = OTHER_KEY)
const selectedKey = ref(props.modelValue ?? null)
// 空字符串统一成 null, 避免挂载时 '' → null 触发 el-select 的 watch→validate('change') 导致必填项直接飘红
const selectedKey = ref((props.modelValue == null || props.modelValue === '') ? null : props.modelValue)
// "其他" 输入框独立内容
const otherText = ref(props.modelValue ?? '')
+2 -1
View File
@@ -65,7 +65,8 @@ const rawOptions = ref([])
const loading = ref(false)
// el-select 内部绑定的 key
const selectedKey = ref(props.modelValue ?? null)
// 空字符串统一成 null, 避免挂载时 '' → null 触发 el-select 的 watch→validate('change') 导致必填项直接飘红
const selectedKey = ref((props.modelValue == null || props.modelValue === '') ? null : props.modelValue)
// "其他" 输入框独立内容
const otherText = ref(props.modelValue ?? '')