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

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);
// 更新选中模板信息
// 设置选中模板信息
function setStepsInfo(data: Api.Change.StepInfo[]) {
stepsInfo.value = data;
setFlowInfo(data);
}
function getSelectedMembers(steps: Api.Change.StepInfo[]) {
return steps.map(step => {
// 先找 is_sign === 1 的成员
const signed = step.members.find((m: any) => m.is_sign === 1);
// 若没有则取第一个,若成员列表为空则返回 null
const selected = signed || (step.members.length > 0 ? step.members[0] : null);
// 设置审批链信息
function setFlowInfo(data: Api.Change.StepInfo[]) {
const sortedSteps = [...data || []].sort((a, b) => a.step_order - b.step_order)
flowInfo.value = sortedSteps.map(step => {
return {
stepId: step.id,
name: step.name,
countersign: step.countersign, // 添加会签标识
selectedMember: selected? [selected] : [], // 选中的成员对象
countersign: step.countersign,
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[]) {
flowInfo.value = data;
}
@@ -42,6 +36,7 @@ export const useChangeStore = defineStore(SetupStoreId.Change, () => {
getStepsInfo,
setStepsInfo,
getFlowInfo,
updateFlowInfo
updateFlowInfo,
flowInfo,
}
});
+3 -3
View File
@@ -6,11 +6,11 @@ declare namespace Api {
*/
namespace Change {
interface MemberInfo {
id: number;
is_sign: number;
id?: number;
is_sign?: number;
org_id: number;
org_name: string;
specialty: string;
specialty?: string;
user_id: number;
user_name: string;
}
@@ -29,6 +29,13 @@ watch(() => props.currentForm, (newVal:any) => {
...rest
} = newVal;
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) => {
@@ -69,6 +76,7 @@ const form = ref<{
disciplines: string[],
plan_use_date: number | null,
risk_tools: string[],
level_score: any[],
}>({
change_type: null,
change_level: computed(() => totalScore.value >= 20 ? 2 : 1),
@@ -85,6 +93,7 @@ const form = ref<{
disciplines: [],
plan_use_date: null,
risk_tools: [],
level_score: [],
});
// 变更目的选项
const PURPOSE_OPTIONS = [
@@ -811,7 +820,7 @@ defineExpose({form, questions, applyAiResult, generateLevel: useAiLevel})
align-items: center;
}
.scroll {
height: calc(100vh - 395px);
height: calc(100vh - 393px);
overflow-y: auto;
}
</style>
@@ -72,7 +72,7 @@ const openApprovalDrawer = () => {
if (item.members && item.members.length > 0) {
// 优先选 is_sign=1 的成员 ,否则选第一个
const defaultMembers = item.members
.filter((m: any) => m.is_sign === 1)
.filter((m: any) => m?.is_sign === 1)
.map((m: any) => m.user_id);
approvers.value[item.id] = defaultMembers.length > 0 ? defaultMembers : [item.members[0].user_id];
}
@@ -84,10 +84,11 @@ const openApprovalDrawer = () => {
// 审批链
const approvalChain = computed(() => {
let template = getFlowInfo.value;
console.log(template);
if (!template || template.length === 0) return '暂无审批步骤'
const parts = template.map((step: any) => {
// 根据 countersign 决定显示名称
const displayName = step.countersign ? '专业会签' : step.name
const displayName = step.name
const members = step.selectedMember
let memberText;
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)) {
const step = steps.find(s => s.id === Number(stepId));
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) {
result.push({
countersign: step.countersign,
@@ -179,6 +180,7 @@ const finishApprover = async () => {
}
defineExpose({clearApprovers, setRegenerateLoading})
</script>
<template>