发起变更提交-等级判定表分数保存问题修改

This commit is contained in:
2026-10-08 17:23:29 +08:00
parent 167b3de60d
commit 26582cf421
4 changed files with 27 additions and 21 deletions
+9 -14
View File
@@ -10,31 +10,25 @@ export const useChangeStore = defineStore(SetupStoreId.Change, () => {
// 获取审批链信息 // 获取审批链信息
const getFlowInfo = computed(() => flowInfo.value); const getFlowInfo = computed(() => flowInfo.value);
// 更新选中模板信息 // 设置选中模板信息
function setStepsInfo(data: Api.Change.StepInfo[]) { function setStepsInfo(data: Api.Change.StepInfo[]) {
stepsInfo.value = data; stepsInfo.value = data;
setFlowInfo(data); setFlowInfo(data);
} }
function getSelectedMembers(steps: Api.Change.StepInfo[]) { // 设置审批链信息
return steps.map(step => { function setFlowInfo(data: Api.Change.StepInfo[]) {
// 先找 is_sign === 1 的成员 const sortedSteps = [...data || []].sort((a, b) => a.step_order - b.step_order)
const signed = step.members.find((m: any) => m.is_sign === 1); flowInfo.value = sortedSteps.map(step => {
// 若没有则取第一个,若成员列表为空则返回 null
const selected = signed || (step.members.length > 0 ? step.members[0] : null);
return { return {
stepId: step.id, stepId: step.id,
name: step.name, name: step.name,
countersign: step.countersign, // 添加会签标识 countersign: step.countersign,
selectedMember: selected? [selected] : [], // 选中的成员对象 selectedMember: step.members,
}; };
}); });
} }
// 更新审批链信息 // 更新审批链信息
function setFlowInfo(data: Api.Change.StepInfo[]) {
const sortedSteps = [...data || []].sort((a, b) => a.step_order - b.step_order)
flowInfo.value = getSelectedMembers(sortedSteps);
}
function updateFlowInfo(data: Api.Change.FlowInfo[]) { function updateFlowInfo(data: Api.Change.FlowInfo[]) {
flowInfo.value = data; flowInfo.value = data;
} }
@@ -42,6 +36,7 @@ export const useChangeStore = defineStore(SetupStoreId.Change, () => {
getStepsInfo, getStepsInfo,
setStepsInfo, setStepsInfo,
getFlowInfo, getFlowInfo,
updateFlowInfo updateFlowInfo,
flowInfo,
} }
}); });
+3 -3
View File
@@ -6,11 +6,11 @@ declare namespace Api {
*/ */
namespace Change { namespace Change {
interface MemberInfo { interface MemberInfo {
id: number; id?: number;
is_sign: number; is_sign?: number;
org_id: number; org_id: number;
org_name: string; org_name: string;
specialty: string; specialty?: string;
user_id: number; user_id: number;
user_name: string; user_name: string;
} }
@@ -29,6 +29,13 @@ watch(() => props.currentForm, (newVal:any) => {
...rest ...rest
} = newVal; } = newVal;
form.value = rest; form.value = rest;
// 用 Map 建立 question_id -> score 的映射,查找 O(1)
const scoreMap = new Map(form.value?.level_score?.map((item:any) => [item.question_id, item.score]) || []);
questions.value = questions.value.map((item:any) => ({
...item,
score: scoreMap.has(item.question_id) ? scoreMap.get(item.question_id) : item.score
}));
totalScore.value = questions.value.reduce((sum:number, item:any) => sum + (item.score || 0), 0);
}) })
const aiFail = (e: any) => { const aiFail = (e: any) => {
@@ -69,6 +76,7 @@ const form = ref<{
disciplines: string[], disciplines: string[],
plan_use_date: number | null, plan_use_date: number | null,
risk_tools: string[], risk_tools: string[],
level_score: any[],
}>({ }>({
change_type: null, change_type: null,
change_level: computed(() => totalScore.value >= 20 ? 2 : 1), change_level: computed(() => totalScore.value >= 20 ? 2 : 1),
@@ -85,6 +93,7 @@ const form = ref<{
disciplines: [], disciplines: [],
plan_use_date: null, plan_use_date: null,
risk_tools: [], risk_tools: [],
level_score: [],
}); });
// 变更目的选项 // 变更目的选项
const PURPOSE_OPTIONS = [ const PURPOSE_OPTIONS = [
@@ -811,7 +820,7 @@ defineExpose({form, questions, applyAiResult, generateLevel: useAiLevel})
align-items: center; align-items: center;
} }
.scroll { .scroll {
height: calc(100vh - 395px); height: calc(100vh - 393px);
overflow-y: auto; overflow-y: auto;
} }
</style> </style>
@@ -72,7 +72,7 @@ const openApprovalDrawer = () => {
if (item.members && item.members.length > 0) { if (item.members && item.members.length > 0) {
// 优先选 is_sign=1 的成员 ,否则选第一个 // 优先选 is_sign=1 的成员 ,否则选第一个
const defaultMembers = item.members const defaultMembers = item.members
.filter((m: any) => m.is_sign === 1) .filter((m: any) => m?.is_sign === 1)
.map((m: any) => m.user_id); .map((m: any) => m.user_id);
approvers.value[item.id] = defaultMembers.length > 0 ? defaultMembers : [item.members[0].user_id]; approvers.value[item.id] = defaultMembers.length > 0 ? defaultMembers : [item.members[0].user_id];
} }
@@ -84,10 +84,11 @@ const openApprovalDrawer = () => {
// 审批链 // 审批链
const approvalChain = computed(() => { const approvalChain = computed(() => {
let template = getFlowInfo.value; let template = getFlowInfo.value;
console.log(template);
if (!template || template.length === 0) return '暂无审批步骤' if (!template || template.length === 0) return '暂无审批步骤'
const parts = template.map((step: any) => { const parts = template.map((step: any) => {
// 根据 countersign 决定显示名称 // 根据 countersign 决定显示名称
const displayName = step.countersign ? '专业会签' : step.name const displayName = step.name
const members = step.selectedMember const members = step.selectedMember
let memberText; let memberText;
if (members && members.length > 0) { if (members && members.length > 0) {
@@ -157,7 +158,7 @@ function matchApprovers(steps: any[], mapping: Record<number, number[]>) {
for (const [stepId, usersId] of Object.entries(mapping)) { for (const [stepId, usersId] of Object.entries(mapping)) {
const step = steps.find(s => s.id === Number(stepId)); const step = steps.find(s => s.id === Number(stepId));
if (step) { if (step) {
const members = step.members.filter((m: any) => usersId.includes(m.user_id)); const members = props.members.filter((m: any) => usersId.includes(m.user_id));
if (members.length > 0) { if (members.length > 0) {
result.push({ result.push({
countersign: step.countersign, countersign: step.countersign,
@@ -179,6 +180,7 @@ const finishApprover = async () => {
} }
defineExpose({clearApprovers, setRegenerateLoading}) defineExpose({clearApprovers, setRegenerateLoading})
</script> </script>
<template> <template>