Procházet zdrojové kódy

feat: 调整下一节点审批人候选人

luoyali před 5 měsíci
rodič
revize
c712ba0c43

+ 39 - 30
src/views/approve/components/consentOrRefuseDialog.vue

@@ -27,25 +27,44 @@
 				<el-timeline>
 					<el-timeline-item v-for="(item, index) in nodeModelsData" :key="index" placement="top" :timestamp="item.nodeName">
 						<div class="flex">
-							<div v-if="item.type === 1">
+							<template v-if="item.type === 1">
 								<div v-if="[2, 5].indexOf(item.setType) > -1">
-									<el-tag v-if="item.setType === 2" type="primary">{{ setTypeOptions_config[item.setType] }}</el-tag>
-									<el-tag v-if="item.setType === 5" type="primary">{{
+									<el-tag v-if="item.setType === 5" type="primary">{{ setTypeOptions_config[item.setType] }}</el-tag>
+									<el-tag v-if="item.setType === 2" type="primary">{{
 										item.examineLevel === 1 ? '直接主管' : `发起人的第${item.examineLevel}级主管`
 									}}</el-tag>
 								</div>
-								<div v-if="item.setType === 4">
-									<div v-if="item.selectMode" class="mr-2">
+								<template v-if="item.setType === 4">
+									<div v-if="item.selectMode === 3" class="mr-2">
+										<el-tooltip content="添加角色" placement="bottom">
+											<el-button style="width: 32px" @click="selectHandler(item, 3)">
+												<svg-icon style="font-size: 18px" icon-class="flow-group-add" />
+											</el-button>
+										</el-tooltip>
+									</div>
+
+									<div v-else class="mr-2">
 										<el-tooltip content="添加用户" placement="bottom">
 											<el-button style="width: 32px" @click="selectHandler(item, 1)">
 												<svg-icon style="font-size: 18px" icon-class="flow-user-add" />
 											</el-button>
 										</el-tooltip>
 									</div>
-								</div>
+								</template>
+							</template>
+
+							<template v-else>其他的类型还未兼容</template>
+
+							<div v-if="item.selectMode !== 3">
+								<FlowNodeAvatar v-for="(childItem, childIndex) in item.nodeAssigneeList" :key="childIndex" :name="childItem.name" />
+							</div>
+							<div v-if="item.selectMode === 3">
+								<FlowNodeAvatar v-for="(childItem, childIndex) in item.nodeAssigneeList" :key="childIndex" :name="childItem.name">
+									<template #avatar>
+										<svg-icon icon-class="flow-group" color="#fff" />
+									</template>
+								</FlowNodeAvatar>
 							</div>
-							<div v-else>其他的类型</div>
-							<FlowNodeAvatar v-for="(childItem, childIndex) in item.nodeAssigneeList" :key="childIndex" :name="childItem.name" />
 						</div>
 					</el-timeline-item>
 				</el-timeline>
@@ -80,12 +99,7 @@
 		</template>
 
 		<!--  选择人员/角色-->
-		<use-select
-			ref="useSelectRef"
-			v-bind="active_selectOpts"
-			:max-selected="maxSelectedLength"
-			@update:selected="updateActive_assigneeMap"
-		></use-select>
+		<use-select ref="useSelectRef" v-bind="active_selectOpts" @update:selected="updateActive_assigneeMap"></use-select>
 	</el-dialog>
 </template>
 
@@ -146,21 +160,10 @@ const datas = reactive({
 	active_selectOpts: {},
 	useSelectRef: null,
 	active_assigneeKey: null,
-	maxSelectedLength: 1,
 	nodeTypeData: null
 })
-const {
-	formRef,
-	uploadLoading,
-	rollbackOptions,
-	btnDisabled,
-	nodeModelsData,
-	active_selectOpts,
-	useSelectRef,
-	active_assigneeKey,
-	maxSelectedLength,
-	nodeTypeData
-} = toRefs(datas)
+const { formRef, uploadLoading, rollbackOptions, btnDisabled, nodeModelsData, active_selectOpts, useSelectRef, active_assigneeKey, nodeTypeData } =
+	toRefs(datas)
 const $myEmit = defineEmits(['update:modelValue', 'successCb'])
 
 const closeDialog = () => {
@@ -232,14 +235,20 @@ const updateActive_assigneeMap = assignees => {
 	}
 }
 const selectHandler = (item, type) => {
-	// selectMode: 1 自选一人 2 自选两人
+	// 发起人自选 (1: 选择一个人, 2: 选择多个人 3: 自选角色)
 	// nodeModelsData.value数组中查找和nodeKey相匹配的对象值
 	const foundNode = findNodeByKey(item.nodeKey)
+
 	let config = foundNode ? { assignees: foundNode.nodeAssigneeList, type } : { assignees: [], type }
+	if (item.selectMode === 1) {
+		config.selectOpts = { maxSelected: 1 }
+	}
+	// 插入备选列表 candidateAssignees
+	config.selectOpts = { ...config.selectOpts, candidateAssignees: foundNode.nodeCandidate?.assignees }
+
 	active_assigneeKey.value = item.nodeKey
 	active_selectOpts.value = config.selectOpts || {}
-	maxSelectedLength.value = item.selectMode
-	useSelectRef.value.open(type, config.assignees)
+	useSelectRef.value.open(item.selectMode === 3 ? 3 : 1, config.assignees)
 }
 
 const submitForm = debounce(() => {