diff --git a/src/api/users.ts b/src/api/users.ts index f95673df..5bc4f335 100644 --- a/src/api/users.ts +++ b/src/api/users.ts @@ -275,6 +275,7 @@ function normalizeUser(item: unknown, index: number): UserListItem { const name = getString(record, ['name', 'real_name', 'realName', 'nickname', 'username'], `用户${index + 1}`) const roleType = getString(record, ['role_type', 'roleType', 'role'], '') const status = getStatus(record) + const institutionId = getString(record, ['institution', 'institution_id', 'institutionId'], '') return { id: getString(record, ['id', 'uuid', 'user_id', 'userId'], `${index}`), @@ -282,7 +283,7 @@ function normalizeUser(item: unknown, index: number): UserListItem { account: getString(record, ['account', 'username', 'phone', 'mobile', 'email'], name), role: getString(record, ['role_name', 'roleName', 'role', 'role_type', 'roleType']), roleType, - org: getString(record, ['org', 'organization', 'organization_name', 'organizationName', 'hospital', 'hospital_name', 'hospitalName']), + org: getString(record, ['org', 'organization', 'organization_name', 'organizationName', 'institution_name', 'institutionName', 'hospital', 'hospital_name', 'hospitalName'], institutionId || '-'), lastLogin: getString(record, ['last_login', 'lastLogin', 'login_time', 'loginTime']), enabled: getBoolean(record, ['enabled', 'is_active', 'isActive', 'status']), phone: getString(record, ['phone', 'mobile', 'account', 'username'], ''), @@ -292,7 +293,7 @@ function normalizeUser(item: unknown, index: number): UserListItem { major: getString(record, ['major']), trainingStage: getString(record, ['training_stage', 'trainingStage']), status, - institutionId: getString(record, ['institution', 'institution_id', 'institutionId']) + institutionId } } diff --git a/src/mock/dashboard.ts b/src/mock/dashboard.ts index 70099cef..4e42f202 100644 --- a/src/mock/dashboard.ts +++ b/src/mock/dashboard.ts @@ -58,7 +58,7 @@ export const platformDashboard = { activeUserTrend: [6420, 7310, 8160, 8940, 10320, 11860], userComposition: [ { name: '学生', value: 38260 }, - { name: '带教老师', value: 7240 }, + { name: '带教医生', value: 7240 }, { name: '医院管理员', value: 2760 } ], hourlyTrainingAverage: { @@ -154,7 +154,7 @@ export const hospitalDashboard = { }, kpis: [ { label: '本院科室数', value: '18', change: '+2 较上月', tone: 'blue' }, - { label: '带教老师数', value: '86', change: '+6', tone: 'green' }, + { label: '带教医生数', value: '86', change: '+6', tone: 'green' }, { label: '本院学员数', value: '1,260', change: '+84', tone: 'purple' }, { label: '训练完成率', value: '89.6%', change: '+3.2%', tone: 'orange' }, { label: '平均训练得分', value: '84.8', change: '+1.6 分', tone: 'green' }, diff --git a/src/mock/navigation.ts b/src/mock/navigation.ts index b3e20fd2..2de7c14f 100644 --- a/src/mock/navigation.ts +++ b/src/mock/navigation.ts @@ -88,7 +88,7 @@ export const roleMenus: Record = { { title: '人员管理', items: [ - { page: 'doctor-list', icon: DoctorIcon, title: '医生管理' }, + { page: 'doctor-list', icon: DoctorIcon, title: '带教医生管理' }, { page: 'student-list', icon: School, title: '医学生管理' }, { page: 'teacher-list', icon: Reading, title: '师生关系管理' } ] diff --git a/src/router/index.ts b/src/router/index.ts index 538dc002..626933df 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -27,7 +27,7 @@ const routes: RouteRecordRaw[] = [ { path: 'users', name: 'Users', component: () => import('@/views/UsersView.vue'), meta: { title: '用户列表' } }, { path: 'cases/ai-generate', name: 'AiCaseGenerate', component: () => import('@/views/AiCaseGenerateView.vue'), meta: { title: 'AI病例生成' } }, { path: 'cases/review', name: 'CaseReview', component: () => import('@/views/CaseReviewView.vue'), meta: { title: '病例审核' } }, - { path: 'users/doctors', name: 'DoctorUsers', component: () => import('@/views/RoleUsersView.vue'), meta: { title: '医生管理', roleType: 'doctor' } }, + { path: 'users/doctors', name: 'DoctorUsers', component: () => import('@/views/RoleUsersView.vue'), meta: { title: '带教医生管理', roleType: 'doctor' } }, { path: 'users/students', name: 'StudentUsers', component: () => import('@/views/RoleUsersView.vue'), meta: { title: '医学生管理', roleType: 'student' } }, { path: 'users/content-admins', name: 'ContentAdminUsers', component: () => import('@/views/RoleUsersView.vue'), meta: { title: '内容管理员', roleType: 'content_admin' } }, { path: 'my-students', name: 'MyStudents', component: () => import('@/views/MyStudentsView.vue'), meta: { title: '我的学生' } }, diff --git a/src/stores/app.ts b/src/stores/app.ts index 4eb0dfe2..d89808ce 100644 --- a/src/stores/app.ts +++ b/src/stores/app.ts @@ -8,7 +8,7 @@ const roleProfiles: Record> = 'super-admin': { name: '张管理员', avatarText: '张' }, 'hospital-admin': { name: '李院管', avatarText: '李' }, 'content-admin': { name: '王内容', avatarText: '王' }, - teacher: { name: '陈医生', avatarText: '陈' } + teacher: { name: '陈带教', avatarText: '陈' } } const loginRoleMap: Record = { diff --git a/src/views/CasesView.vue b/src/views/CasesView.vue index 5180b563..d3f71c5f 100644 --- a/src/views/CasesView.vue +++ b/src/views/CasesView.vue @@ -592,7 +592,7 @@ -
+

评分规则

@@ -847,6 +847,9 @@ const canEditDetailCase = computed(() => detailCase.value?.publishStatus === 0) const visibleScoringRules = computed(() => detailForm.scoring_rules.filter(rule => rule.dimension.trim() || rule.scoring_standard.trim()) ) +const showScoringRulesSection = computed(() => + detailCase.value?.publishStatus === 2 && visibleScoringRules.value.length > 0 +) const relationsCurrentTitle = computed(() => { if (!relationsCase.value) { return '' diff --git a/src/views/DashboardView.vue b/src/views/DashboardView.vue index b87341ed..a7338353 100644 --- a/src/views/DashboardView.vue +++ b/src/views/DashboardView.vue @@ -21,7 +21,7 @@
- +
@@ -339,9 +339,9 @@ function ratioText(part: number | null | undefined, total: number | null | undef function roleLabel(role: string) { const labels: Record = { super_admin: '超级管理员', - doctor: '医生', + doctor: '带教医生', student: '学生', - teacher: '带教老师', + teacher: '带教医生', content_admin: '内容管理员', hospital_admin: '医院管理员' } diff --git a/src/views/HospitalDashboardView.vue b/src/views/HospitalDashboardView.vue index 4d16b76a..4e2fb9b4 100644 --- a/src/views/HospitalDashboardView.vue +++ b/src/views/HospitalDashboardView.vue @@ -120,7 +120,7 @@ const dashboard = computed(() => { }, kpis: [ stat('本院科室数', numberText(summary.dept_count), '当前机构', 'blue'), - stat('带教老师数', numberText(summary.doctor_count), '医生用户', 'green'), + stat('带教医生数', numberText(summary.doctor_count), '带教医生用户', 'green'), stat('本院学员数', numberText(summary.student_count), '学生用户', 'purple'), stat('累计训练次数', numberText(summary.train_total), '本院训练', 'blue'), stat('训练完成率', percentText(summary.complete_rate), '完成训练占比', 'orange'), diff --git a/src/views/HospitalStatsModuleView.vue b/src/views/HospitalStatsModuleView.vue index b0c0b3cd..fb648308 100644 --- a/src/views/HospitalStatsModuleView.vue +++ b/src/views/HospitalStatsModuleView.vue @@ -289,7 +289,7 @@ const pageKpis = computed(() => { return [ stat('本院科室数', numberText(summary.dept_count), '当前机构', 'blue'), - stat('带教老师数', numberText(summary.doctor_count), '医生用户', 'green'), + stat('带教医生数', numberText(summary.doctor_count), '带教医生用户', 'green'), stat('本院学员数', numberText(summary.student_count), '学生用户', 'purple'), stat('累计训练次数', numberText(summary.train_total), '本院训练', 'blue'), stat('训练完成率', percentText(summary.complete_rate), '完成训练占比', 'orange'), diff --git a/src/views/InstitutionsView.vue b/src/views/InstitutionsView.vue index 5f7e6629..95ea0af7 100644 --- a/src/views/InstitutionsView.vue +++ b/src/views/InstitutionsView.vue @@ -76,7 +76,7 @@ - + @@ -86,7 +86,9 @@ - + + + @@ -239,6 +241,19 @@ const institutionForm = reactive({ bannerUrl: '' }) +const hospitalLevelOptions = [ + '三级甲等', + '三级乙等', + '三级丙等', + '二级甲等', + '二级乙等', + '二级丙等', + '一级甲等', + '一级乙等', + '一级丙等', + '未定级' +] + const provinceOptions = [ { name: '北京市', cities: ['北京市'] }, { name: '天津市', cities: ['天津市'] }, diff --git a/src/views/KnowledgeBaseView.vue b/src/views/KnowledgeBaseView.vue index 689aef0c..1963e55d 100644 --- a/src/views/KnowledgeBaseView.vue +++ b/src/views/KnowledgeBaseView.vue @@ -124,8 +124,8 @@ const form = reactive({ const rows = ref([ { id: 'KB-202606-001', name: '胸痛中心诊疗指南库', category: '临床指南', owner: '王内容', fileCount: 8, updatedAt: '2026-06-05', status: '已发布' }, - { id: 'KB-202606-002', name: '儿科发热问诊课件', category: '教学课件', owner: '李医生', fileCount: 5, updatedAt: '2026-06-03', status: '整理中' }, - { id: 'KB-202605-029', name: '糖尿病慢病随访规范', category: '诊疗规范', owner: '陈医生', fileCount: 12, updatedAt: '2026-05-28', status: '已发布' }, + { id: 'KB-202606-002', name: '儿科发热问诊课件', category: '教学课件', owner: '李带教', fileCount: 5, updatedAt: '2026-06-03', status: '整理中' }, + { id: 'KB-202605-029', name: '糖尿病慢病随访规范', category: '诊疗规范', owner: '陈带教', fileCount: 12, updatedAt: '2026-05-28', status: '已发布' }, { id: 'KB-202605-017', name: '神经内科病例资料包', category: '病例资料', owner: '王内容', fileCount: 3, updatedAt: '2026-05-21', status: '草稿' } ]) diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 5f0a401e..105396f0 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -79,7 +79,7 @@ const loginRoleOptions: Array<{ label: string; value: LoginRole }> = [ { label: '超级管理员', value: 'super_admin' }, { label: '医院管理员', value: 'hospital_admin' }, { label: '内容管理员', value: 'content_admin' }, - { label: '医生', value: 'doctor' } + { label: '带教医生', value: 'doctor' } ] const features = [ diff --git a/src/views/ModuleView.vue b/src/views/ModuleView.vue index 64d8aff9..48b982e0 100644 --- a/src/views/ModuleView.vue +++ b/src/views/ModuleView.vue @@ -194,7 +194,7 @@ const aiRows = [ const auditRows = [ { time: '06-03 13:42', user: '张管理员', action: '更新 AI 评分策略', result: '成功' }, { time: '06-03 11:08', user: '王内容', action: '提交病例审核', result: '成功' }, - { time: '06-02 19:26', user: '李医生', action: '导出训练报告', result: '成功' } + { time: '06-02 19:26', user: '李带教', action: '导出训练报告', result: '成功' } ] const lineOption = computed(() => ({ @@ -291,7 +291,7 @@ function inferTableTitle(currentPage: string) { if (currentPage.includes('department') || currentPage.includes('dept')) return '科室名称' if (currentPage.includes('training')) return '训练任务' if (currentPage.includes('student')) return '学生姓名' - if (currentPage.includes('doctor') || currentPage.includes('teacher')) return '医生姓名' + if (currentPage.includes('doctor') || currentPage.includes('teacher')) return '带教医生姓名' return '名称' } @@ -306,9 +306,9 @@ function inferPrimaryAction(currentPage: string) { function createRows(title: string) { return [ { id: 'M-202606-001', name: `${title}核心数据维护`, category: '方正中心医院', owner: '张管理员', metric: '1,286', status: '正常' }, - { id: 'M-202606-002', name: `${title}待审核任务`, category: '心内科', owner: '李医生', metric: '86%', status: '待审核' }, + { id: 'M-202606-002', name: `${title}待审核任务`, category: '心内科', owner: '李带教', metric: '86%', status: '待审核' }, { id: 'M-202606-003', name: `${title}专题内容包`, category: '教学运营部', owner: '王内容', metric: '342', status: '已发布' }, - { id: 'M-202606-004', name: `${title}试点项目`, category: '南城社区医院', owner: '陈医生', metric: '73%', status: '正常' } + { id: 'M-202606-004', name: `${title}试点项目`, category: '南城社区医院', owner: '陈带教', metric: '73%', status: '正常' } ] } diff --git a/src/views/PlatformAbilityView.vue b/src/views/PlatformAbilityView.vue index 7808a8b0..7e80785e 100644 --- a/src/views/PlatformAbilityView.vue +++ b/src/views/PlatformAbilityView.vue @@ -254,9 +254,9 @@ function bounded(value: number | null | undefined) { function roleLabel(role: string) { const labels: Record = { super_admin: '超级管理员', - doctor: '医生', + doctor: '带教医生', student: '学生', - teacher: '带教老师', + teacher: '带教医生', content_admin: '内容管理员', hospital_admin: '医院管理员' } diff --git a/src/views/RoleUsersView.vue b/src/views/RoleUsersView.vue index c239fba0..4c2549f7 100644 --- a/src/views/RoleUsersView.vue +++ b/src/views/RoleUsersView.vue @@ -244,12 +244,12 @@ const resetPasswordForm = reactive({ }) const roleOptions: Array<{ label: string; value: ManagedRoleType }> = [ - { label: '医生', value: 'doctor' }, + { label: '带教医生', value: 'doctor' }, { label: '医学生', value: 'student' }, { label: '内容管理员', value: 'content_admin' } ] const pageConfigs: Record = { - doctor: { title: '医生管理', description: '维护本院医生和内容管理员账号,支持查询、导入导出、启停和密码重置。' }, + doctor: { title: '带教医生管理', description: '维护本院带教医生和内容管理员账号,支持查询、导入导出、启停和密码重置。' }, student: { title: '医学生管理', description: '维护本院医学生账号,支持查询、导入导出、启停和密码重置。' }, content_admin: { title: '内容管理员', description: '维护本院内容管理员账号,支持查询、导入导出、启停和密码重置。' } } diff --git a/src/views/UsersView.vue b/src/views/UsersView.vue index 106246b1..a38753ee 100644 --- a/src/views/UsersView.vue +++ b/src/views/UsersView.vue @@ -283,7 +283,7 @@ const resetPasswordForm = reactive({ }) const roleTypeOptions = [ - { label: '医生 doctor', value: 'doctor' }, + { label: '带教医生 doctor', value: 'doctor' }, { label: '医学生 student', value: 'student' }, { label: '超级管理员 super_admin', value: 'super_admin' }, { label: '医院管理员 hospital_admin', value: 'hospital_admin' },