移除QA预设角色并收紧角色模板编辑
This commit is contained in:
@@ -385,21 +385,11 @@
|
||||
<el-input v-model="templateForm.description" type="textarea" :rows="2" placeholder="可选描述" />
|
||||
</el-form-item>
|
||||
<el-form-item label="角色类型" prop="template_type">
|
||||
<el-select v-model="templateForm.template_type" style="width: 100%">
|
||||
<el-option label="预设角色" value="ROLE" />
|
||||
<el-option label="场景角色" value="SCENARIO" />
|
||||
<el-option label="自定义角色" value="CUSTOM" />
|
||||
<el-select v-model="templateForm.template_type" style="width: 100%" :disabled="Boolean(editingTemplateId)">
|
||||
<el-option label="预设角色" value="ROLE" :disabled="!editingTemplateId" />
|
||||
<el-option label="自定义角色" value="CUSTOM" :disabled="Boolean(editingTemplateId)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="分类">
|
||||
<el-input v-model="templateForm.category" placeholder="如 PM / CRA / PV" />
|
||||
</el-form-item>
|
||||
<el-form-item label="推荐角色">
|
||||
<el-input v-model="templateForm.recommended_roles" placeholder="如 PM,CRA" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标签">
|
||||
<el-input v-model="templateForm.tags" placeholder="可选标签" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="templateDialogVisible = false">取消</el-button>
|
||||
@@ -461,6 +451,7 @@ import {
|
||||
fetchActiveRoles,
|
||||
updateActiveRoles,
|
||||
type PermissionTemplate,
|
||||
type PermissionTemplateCreate,
|
||||
type SystemPermissionItem,
|
||||
} from "@/api/projectPermissions";
|
||||
import { addMember, listMemberCandidates, listMembers, removeMember, updateMember } from "@/api/members";
|
||||
@@ -483,7 +474,7 @@ const canManageSelectedProject = computed(() => isAdmin.value || isSelectedProje
|
||||
|
||||
const ROLE_LABELS: Record<string, string> = {
|
||||
PM: "项目负责人", CRA: "CRA", PV: "PV",
|
||||
MEDICAL_REVIEW: "医学审核", IMP: "药品管理员", QA: "QA",
|
||||
MEDICAL_REVIEW: "医学审核", IMP: "药品管理员",
|
||||
};
|
||||
const roleLabel = (role: string) => ROLE_LABELS[role] || role;
|
||||
|
||||
@@ -495,7 +486,7 @@ const activeRoleLabels = computed(() => {
|
||||
return result;
|
||||
});
|
||||
const ROLE_RANK: Record<string, number> = {
|
||||
ADMIN: 100, PM: 80, QA: 60, PV: 50, MEDICAL_REVIEW: 50, CRA: 40, IMP: 40,
|
||||
ADMIN: 100, PM: 80, PV: 50, MEDICAL_REVIEW: 50, CRA: 40, IMP: 40,
|
||||
};
|
||||
type MemberRoleRow = { user_id: string; role_in_study: string; user?: any };
|
||||
const canAssignProjectRole = (role: string) => isAdmin.value || (ROLE_RANK[role] ?? 0) < ROLE_RANK.PM;
|
||||
@@ -778,7 +769,6 @@ const ALL_ROLES = [
|
||||
{ key: "PV", label: "PV", icon: "🔍", desc: "访视和参与者管理人员" },
|
||||
{ key: "MEDICAL_REVIEW", label: "医学审核", icon: "🏥", desc: "医学审核人员" },
|
||||
{ key: "IMP", label: "药品管理员", icon: "📦", desc: "物资和设备管理人员" },
|
||||
{ key: "QA", label: "QA", icon: "✅", desc: "质量检查和审计人员" },
|
||||
];
|
||||
|
||||
const activeRolesDraft = ref<string[]>([]);
|
||||
@@ -898,25 +888,31 @@ const resetTemplateForm = () => {
|
||||
templateFormRef.value?.clearValidate();
|
||||
};
|
||||
|
||||
const buildTemplateUpdatePayload = () => ({
|
||||
name: templateForm.value.name,
|
||||
description: templateForm.value.description || undefined,
|
||||
});
|
||||
|
||||
const buildTemplateCreatePayload = (): PermissionTemplateCreate => ({
|
||||
...templateForm.value,
|
||||
description: templateForm.value.description || undefined,
|
||||
category: templateForm.value.category || undefined,
|
||||
recommended_roles: templateForm.value.recommended_roles || undefined,
|
||||
tags: templateForm.value.tags || undefined,
|
||||
permissions: {},
|
||||
});
|
||||
|
||||
const submitTemplateForm = async () => {
|
||||
const valid = await templateFormRef.value?.validate().catch(() => false);
|
||||
if (!valid) return;
|
||||
templateSaving.value = true;
|
||||
try {
|
||||
const payload = {
|
||||
...templateForm.value,
|
||||
description: templateForm.value.description || undefined,
|
||||
category: templateForm.value.category || undefined,
|
||||
recommended_roles: templateForm.value.recommended_roles || undefined,
|
||||
tags: templateForm.value.tags || undefined,
|
||||
permissions: editingTemplateId.value
|
||||
? (templates.value.find((t) => t.id === editingTemplateId.value)?.permissions ?? {})
|
||||
: {},
|
||||
};
|
||||
if (editingTemplateId.value) {
|
||||
const payload = buildTemplateUpdatePayload();
|
||||
await updatePermissionTemplate(editingTemplateId.value, payload);
|
||||
ElMessage.success("角色已更新");
|
||||
} else {
|
||||
const payload = buildTemplateCreatePayload();
|
||||
await createPermissionTemplate(payload);
|
||||
ElMessage.success("角色已创建");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user