Просмотр исходного кода

Merge branch 'master' into feature/everrightForm

# Conflicts:
#	src/views/flow/create/components/FormDesign.vue
#	src/views/flow/group/components/listGroup.vue
luoyali 1 год назад
Родитель
Сommit
8f9fa61f2b

+ 1 - 1
src/components/Flow/FlowNodeAvatar.vue

@@ -5,7 +5,7 @@
 		<!-- <el-avatar v-else :size="size" class="icon" :icon="UserFilled" /> -->
 		<el-avatar v-if="!avatar && !useSlots().avatar" :size="size" class="icon">
 			<template v-if="name">
-				{{ name.charAt(0) }}
+				{{ name?.charAt(0) || '-' }}
 			</template>
 			<UserFilled v-else />
 		</el-avatar>

+ 7 - 2
src/components/scWorkflow/index.vue

@@ -7,7 +7,7 @@
 				<div class="end-node-text">流程结束</div>
 			</div>
 		</div>
-		<use-select v-if="selectVisible" ref="useselect" @closed="selectVisible = false"></use-select>
+		<use-select v-if="selectVisible" ref="useselect" @update:selected="update_activeSelected" @closed="selectVisible = false"></use-select>
 	</div>
 </template>
 
@@ -32,7 +32,8 @@ export default {
 	data() {
 		return {
 			nodeConfig: this.modelValue,
-			selectVisible: false
+			selectVisible: false,
+      activeSelected: []
 		}
 	},
 	watch: {
@@ -45,8 +46,12 @@ export default {
 	},
 	mounted() {},
 	methods: {
+    update_activeSelected(newSelected) {
+      this.activeSelected.splice(0, this.activeSelected.length, ...newSelected)
+    },
 		selectHandle(type, data) {
 			this.selectVisible = true
+      this.activeSelected = data
 			this.$nextTick(() => {
 				this.$refs.useselect.open(type, data)
 			})

+ 2 - 1
src/components/scWorkflow/nodes/addNode.vue

@@ -52,6 +52,7 @@ export default {
 					term: 0, //审批期限
 					termMode: 1, //审批期限超时后执行类型
 					examineMode: 1, //多人审批时审批方式
+					approveSelf: 0, //审批人与提交人为同一人时
 					directorMode: 0, //连续主管审批方式
 					childNode: this.modelValue,
 					typeOfApprover: '1' // 审批类型 1:人工审批 2:自动通过 3:自动拒绝
@@ -60,7 +61,7 @@ export default {
 				node = {
 					nodeName: '抄送人',
 					type: 2,
-					userSelectFlag: true,
+					allowSelection: true,
 					nodeUserList: [],
 					childNode: this.modelValue
 				}

+ 33 - 18
src/components/scWorkflow/nodes/approver.vue

@@ -30,14 +30,13 @@
 							</el-radio-group>
 						</el-form-item>
 					</el-form>
-
-					<div v-show="form.typeOfApprover === '1'" class="self-radio-group">
-						<el-radio-group v-model="radio1">
-							<el-radio-button v-for="v of approveType_1_options" :key="v.value" :label="v.value">{{ v.label }}</el-radio-button>
-						</el-radio-group>
-					</div>
-
+					<!-- 人工审批 -->
 					<div v-show="form.typeOfApprover === '1'">
+						<div class="self-radio-group">
+							<el-radio-group v-model="radio1">
+								<el-radio-button v-for="v of approveType_1_options" :key="v.value" :label="v.value">{{ v.label }}</el-radio-button>
+							</el-radio-group>
+						</div>
 						<!-- 设置审批人 -->
 						<el-form v-show="radio1 === '1'" label-position="top" class="aForm">
 							<el-form-item label="">
@@ -65,7 +64,7 @@
 							</el-form-item>
 
 							<el-form-item v-if="form.setType === 2" label="指定主管">
-								发起人的第 <el-input-number v-model="form.examineLevel" :min="1" /> 级主管
+								<div>发起人的第 <el-input-number v-model="form.examineLevel" :min="1" :max="20" /> 级主管</div>
 							</el-form-item>
 
 							<el-form-item v-if="form.setType === 3" label="选择角色">
@@ -83,12 +82,13 @@
 								</el-radio-group>
 							</el-form-item>
 
-							<el-form-item v-if="form.setType === 7" label="连续主管审批终点">
+							<el-form-item v-if="form.setType === 6" label="连续主管审批终点">
 								<el-radio-group v-model="form.directorMode">
-									<el-radio :label="0">直到最上层主管</el-radio>
-									<el-radio :label="1">自定义审批终点</el-radio>
+									<el-radio v-for="v of directorModeOptions" :key="v.value" :label="v.value">{{ v.label }}</el-radio>
 								</el-radio-group>
-								<p v-if="form.directorMode === 1">直到发起人的第 <el-input-number v-model="form.directorLevel" :min="1" /> 级主管</p>
+								<div v-if="form.directorMode === 1" style="margin-top: 4px">
+									直到发起人的第 <el-input-number v-model="form.examineLevel" :min="1" :max="20" /> 级主管
+								</div>
 							</el-form-item>
 							<el-divider></el-divider>
 							<el-form-item label="">
@@ -106,9 +106,13 @@
 							<el-divider></el-divider>
 							<el-form-item label="多人审批时审批方式">
 								<el-radio-group v-model="form.examineMode">
-									<p style="width: 100%"><el-radio :label="1">按顺序依次审批</el-radio></p>
-									<p style="width: 100%"><el-radio :label="2">会签 (可同时审批,每个人必须审批通过)</el-radio></p>
-									<p style="width: 100%"><el-radio :label="3">或签 (有一人审批通过即可)</el-radio></p>
+									<el-radio v-for="v of examineModeOptions" :key="v.value" style="width: 100%" :label="v.value">{{ v.label }}</el-radio>
+								</el-radio-group>
+							</el-form-item>
+							<el-divider></el-divider>
+							<el-form-item label="审批人与提交人为同一人时">
+								<el-radio-group v-model="form.approveSelf">
+									<el-radio v-for="v of approveSelfOptions" :key="v.value" style="width: 40%" :label="v.value">{{ v.label }}</el-radio>
 								</el-radio-group>
 							</el-form-item>
 						</el-form>
@@ -161,7 +165,15 @@ import addNode from './addNode'
 import { Plus } from '@element-plus/icons-vue'
 import { mapState } from 'pinia' //引入映射函数
 import useFlowStore from '@/store/modules/flow'
-import { approveTypeOptions, approveType_1_options, setTypeOptions, selectModeOptions } from './config'
+import {
+	approveTypeOptions,
+	approveType_1_options,
+	setTypeOptions,
+	selectModeOptions,
+	approveSelfOptions,
+	directorModeOptions,
+	examineModeOptions
+} from './config'
 export default {
 	components: {
 		addNode
@@ -180,7 +192,10 @@ export default {
 			approveTypeOptions,
 			approveType_1_options,
 			setTypeOptions,
-			selectModeOptions
+			selectModeOptions,
+			examineModeOptions,
+			directorModeOptions,
+			approveSelfOptions
 		}
 	},
 	computed: {
@@ -277,7 +292,7 @@ export default {
 				return '发起人自选'
 			} else if (type === 5) {
 				return '发起人自己'
-			} else if (type === 7) {
+			} else if (type === 6) {
 				return '连续多级主管'
 			}
 		}

+ 54 - 0
src/components/scWorkflow/nodes/config.ts

@@ -17,6 +17,7 @@ export const approveTypeOptions_config = approveTypeOptions.reduce((res: { [key:
 	res[value] = label
 	return res
 }, {})
+// 人工审批tabs
 export const approveType_1_options = [
 	{
 		label: '设置审批人',
@@ -78,3 +79,56 @@ export const selectModeOptions_config = selectModeOptions.reduce((res: { [key: s
 	res[value] = label
 	return res
 }, {})
+
+// 连续主管审批终点 (人工审批 & setType: 6)
+export const directorModeOptions = [
+	{
+		label: '直到最上层主管',
+		value: 0
+	},
+	{
+		label: '自定义审批终点',
+		value: 1
+	}
+]
+
+// 多人审批时审批方式
+export const examineModeOptions = [
+	{
+		label: '按顺序依次审批',
+		value: 1
+	},
+	{
+		label: '会签 (可同时审批,每个人必须审批通过)',
+		value: 2
+	},
+	{
+		label: '或签 (有一人审批通过即可)',
+		value: 3
+	}
+]
+
+// 审批人与提交人为同一人时
+export const approveSelfOptions = [
+	{
+		label: '由发起人对自己审批',
+		value: 0
+	},
+	{
+		label: '自动跳过',
+		value: 1
+	},
+	{
+		label: '转交给直接上级审批',
+		value: 2
+	},
+	{
+		label: '转交给部门负责人审批',
+		value: 3
+	}
+]
+
+// export const approveSelfOptions_config = approveSelfOptions.reduce((res: { [key: string]: any }, { label, value }) => {
+// 	res[value] = label
+// 	return res
+// }, {})

+ 2 - 2
src/components/scWorkflow/nodes/send.vue

@@ -31,7 +31,7 @@
 							</div>
 						</el-form-item>
 						<el-form-item label="">
-							<el-checkbox v-model="form.userSelectFlag" label="允许发起人自选抄送人"></el-checkbox>
+							<el-checkbox v-model="form.allowSelection" label="允许发起人自选抄送人"></el-checkbox>
 						</el-form-item>
 					</el-form>
 				</el-main>
@@ -110,7 +110,7 @@ export default {
 				const users = nodeConfig.nodeUserList.map(item => item.name).join('、')
 				return users
 			} else {
-				if (nodeConfig.userSelectFlag) {
+				if (nodeConfig.allowSelection) {
 					return '发起人自选'
 				} else {
 					return false

+ 20 - 7
src/components/scWorkflow/select.vue

@@ -1,7 +1,7 @@
 <template>
 	<el-dialog
-    class="le-dialog"
 		v-model="dialogVisible"
+		class="le-dialog"
 		:title="titleMap[type - 1]"
 		:width="type == 1 ? 680 : 460"
 		destroy-on-close
@@ -73,8 +73,8 @@
 						<el-scrollbar>
 							<li v-for="(item, index) in selected" :key="item.id">
 								<span class="name">
-									<el-avatar size="small">{{ item.name.substring(0, 1) }}</el-avatar>
-									<label>{{ item.name }}</label>
+									<el-avatar size="small">{{ item.name?.substring(0, 1) }}</el-avatar>
+									<label>{{ item.name || '-' }}</label>
 								</span>
 								<span class="delete">
 									<el-button type="danger" icon="Delete" circle size="small" @click="deleteSelected(index)" />
@@ -118,7 +118,7 @@
 						<el-scrollbar>
 							<li v-for="(item, index) in selected" :key="item.id">
 								<span class="name">
-									<label>{{ item.name }}</label>
+									<label>{{ item.name || '-' }}</label>
 								</span>
 								<span class="delete">
 									<el-button type="danger" icon="Delete" circle size="small" @click="deleteSelected(index)" />
@@ -144,7 +144,9 @@ import user from '@/api/system/user'
 import role from '@/api/system/role'
 export default {
 	props: {
-		modelValue: { type: Boolean, default: false }
+		modelValue: { type: Boolean, default: false },
+		minSelected: { type: Number, default: 0 },
+		maxSelected: { type: Number, default: 999999 }
 	},
 	data() {
 		return {
@@ -190,7 +192,7 @@ export default {
 		//打开赋值
 		open(type, data) {
 			this.type = type
-			this.value = data || []
+			this.value = JSON.parse(JSON.stringify(data || []))
 			this.selected = JSON.parse(JSON.stringify(data || []))
 			this.dialogVisible = true
 
@@ -289,7 +291,18 @@ export default {
 			this.selected.map(item => {
 				this.value.push(item)
 			})
-			this.$emit('contentEv', this.value)
+			// 最小限制
+			const minSelected = this.minSelected
+			// 最大限制
+			const maxSelected = this.maxSelected
+			const selected_l = this.selected.length
+			if (selected_l < minSelected) {
+				return this.$message.warning(`选中的数据个数不能小于${minSelected}条`)
+			}
+			if (selected_l > maxSelected) {
+				return this.$message.warning(`选中的数据个数不能大于${maxSelected}条`)
+			}
+			this.$emit('update:selected', this.value)
 			this.dialogVisible = false
 		}
 	}

+ 2 - 0
src/utils/index.ts

@@ -214,6 +214,8 @@ export const format_milliseconds = (milliseconds: number) => {
 		}
 		if (seconds > 0) {
 			timeString += seconds + '秒'
+		} else {
+			timeString += milliseconds + '毫秒'
 		}
 	}
 	return timeString

+ 142 - 57
src/views/approve/launch/ItemDrawer.vue

@@ -21,27 +21,27 @@
 					</template>
 					<template v-else>
 						<div style="padding-bottom: 6px">{{ v.name }}</div>
-						<div v-if="v.type !== 0">
-							<div v-if="userMap.get(v.name).type === 1" style="display: flex; align-items: center; gap: 6px">
-								<el-tooltip content="添加用户" placement="left">
+						<div v-if="assigneeMap[v.name]" style="display: flex; align-items: center; gap: 6px">
+							<template v-if="assigneeMap[v.name].type === 1">
+								<el-tooltip v-if="!assigneeMap[v.name].disabled" content="添加用户" placement="left">
 									<el-button style="width: 32px" @click="selectHandler(v.name, 1)">
 										<svg-icon style="font-size: 18px" icon-class="flow-user-add" />
 									</el-button>
 								</el-tooltip>
-								<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px" />
-							</div>
-							<div v-else style="display: flex; align-items: center; gap: 6px">
-								<el-tooltip content="添加角色" placement="left">
+								<FlowNodeAvatar v-for="(item, index) in assigneeMap[v.name].assignees" :key="index" :name="item.name" style="margin-top: 5px" />
+							</template>
+							<template v-else>
+								<el-tooltip v-if="!assigneeMap[v.name].disabled" content="添加角色" placement="left">
 									<el-button style="width: 32px" @click="selectHandler(v.name, 2)">
 										<svg-icon style="font-size: 18px" icon-class="flow-group-add" />
 									</el-button>
 								</el-tooltip>
-								<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px">
+								<FlowNodeAvatar v-for="(item, index) in assigneeMap[v.name].assignees" :key="index" :name="item.name" style="margin-top: 5px">
 									<template #avatar>
 										<svg-icon icon-class="flow-group" color="#fff" />
 									</template>
 								</FlowNodeAvatar>
-							</div>
+							</template>
 						</div>
 					</template>
 				</el-timeline-item>
@@ -57,7 +57,8 @@
 			<el-button :disabled="validateForm.loading" type="primary" style="margin-left: 8px" @click="onSubmit">{{ $t('le.btn.confirm') }}</el-button>
 		</template>
 	</el-drawer>
-	<use-select ref="useSelectRef"></use-select>
+	<!--  选择人员/角色-->
+	<use-select ref="useSelectRef" v-bind="active_selectOpts" @update:selected="updateActive_assigneeMap"></use-select>
 </template>
 <script setup lang="ts">
 import model from '@/api/flow/process'
@@ -77,13 +78,46 @@ const emit = defineEmits<{
 	update: [value: string]
 }>()
 const updateModelValue = (bool: boolean) => emit('update:modelValue', bool)
-const userMap = ref(new Map())
+type Assignee = {
+	type: 1 | 2 // 1: 用户 2: 角色
+	assignees: { [key: string]: any /*name, id*/ }
+	disabled?: boolean
+	selectOpts?: any
+	// minSelected?: number
+	// maxSelected?: number
+}
 const useSelectRef = ref()
+const assigneeMap = ref<{
+	[key: string]: Assignee
+}>({})
+const active_assigneeKey = ref<string>()
+const active_selectOpts = ref({})
+// const userMap = ref(new Map())
+// const active_assigneeMap = ref<Assignee>({})
+window.assigneeMap = assigneeMap
+const updateActive_assigneeMap = (assignees: any[]) => {
+	// active_assigneeMap todo...   { assignees: [], type }
+	const _cur = assigneeMap.value[active_assigneeKey.value]
+	if (_cur) {
+		_cur.assignees = assignees
+	}
+	// assigneeMap.value[active_assigneeKey.value].assignees = assignees
+	// Object.assign()
+}
 const selectHandler = (name: string, type: number) => {
-	if (!userMap.value.get(name)) {
+	/*if (!userMap.value.get(name)) {
 		userMap.value.set(name, { assignees: [], type })
 	}
 	useSelectRef.value.open(type, userMap.value.get(name).assignees)
+	*/
+	if (!assigneeMap.value[name]) {
+		assigneeMap.value[name] = { assignees: [], type }
+	}
+	// active_assigneeMap.value = assigneeMap.value[name]
+	const config = assigneeMap.value[name]
+	active_assigneeKey.value = name
+	active_selectOpts.value = config.selectOpts || {}
+	useSelectRef.value.open(type, config.assignees)
 }
 const FormCreate = viewForm.$form()
 const validateForm = ref({
@@ -94,6 +128,7 @@ const validateForm = ref({
 	rule: [],
 	loading: false
 })
+
 const onSubmit = async () => {
 	const api = validateForm.value.api
 	await api.validate()
@@ -106,11 +141,20 @@ const onSubmit = async () => {
 		// 填写的数据存储(local_: 本地数据处理标识)
 		v.local_value = values[v.field]
 	})
+	const _assigneeMap = assigneeMap.value
+	const assigneeMap_ = Object.keys(_assigneeMap).reduce((obj, key) => {
+		const _o = _assigneeMap[key]
+		obj[key] = {
+			assigneeList: _o.assignees,
+			type: _o.type
+		}
+		return obj
+	}, {})
 	model
 		.processLaunchApi({
 			processId, // 流程ID
 			processForm: JSON.stringify(processForm), // 流程表单JSON内容 & local_value 保存
-			assigneeMap: userMap.value // 流程节点审批人
+			assigneeMap: assigneeMap_
 		})
 		.then(res => {
 			ElMessage.success('提交成功')
@@ -132,49 +176,8 @@ const packageProcess = (data, list = []) => {
 	return data.reduce((_list, config) => {
 		if (config.conditionNode === 0) {
 			console.log(config.name, 'name 普通节点名称', config, data)
-			// 需要人工审批的 做额外处理
-			if (+config.type === 1) {
-				/**
-				 * 设置审批类型 不同情况控制
-				 *
-				 * 1,指定人员
-				 *      模型设计的时候需要判断必须选择人员。  发起的时候不允许重新选择
-				 *
-				 * 2,主管
-				 *      发起的时候不需要选择
-				 *
-				 * 3,角色
-				 *      发起人允许重新选择
-				 *
-				 * 4,发起人自选
-				 *     发起控制:  选择一个人,  选择多个人
-				 *
-				 * 5,发起人自己
-				 *     发起人不能选择,后台控制发起人自己处理
-				 *
-				 * 6,连续多级主管
-				 *     发起人不能选择,后台控制找到对应主管
-				 */
-				const handleName = setTypeOptions_config[config.setType]
-				// if (config.setType) {
-				// 针对审核人 做限制 审批限制
-				if (Reflect.has(config, 'setType')) {
-					console.log(handleName, 'handleName')
-				}
-				/*switch (handleName) {
-          switch: ''
-                break;
-          switch: ''
-                break;
-          switch: ''
-                break;
-          switch: ''
-                break;
-          switch: ''
-                break;
-        }*/
-			}
-			// 默认用户
+			/* // todo...
+      // 默认用户
 			let type = 1
 			let assignees = config.nodeUserList
 			if (config.nodeRoleList) {
@@ -182,7 +185,89 @@ const packageProcess = (data, list = []) => {
 				type = 2
 				assignees = config.nodeRoleList
 			}
-			userMap.value.set(config.name, { assignees, type })
+			// userMap.value.set(config.name, { assignees, type })
+			// 流程名称
+			assigneeMap.value[config.name] = { assignees, type }*/
+			// 0,发起人 1,审批人 2,抄送人 3,条件审批 4,条件分支 5,办理子流程 6,定时器在务 7,触发器在务
+			switch (+config.type) {
+				case 0: {
+					// 发起人
+					console.error(1)
+					break
+				}
+				case 1: {
+					// 审批人
+
+					const handleName = setTypeOptions_config[config.setType]
+					// if (config.setType) {
+					// 针对审核人 不同情况控制
+					if (Reflect.has(config, 'setType')) {
+						console.log(handleName, 'handleName', config)
+						let disabled = false
+						let selectOpts = {}
+						switch (config.setType) {
+							case 1:
+								// 指定人员 (不允许重新选择) // 但展示
+								disabled = true
+							case 2:
+								// 主管 (不需要选择)
+								break
+							case 3:
+								// 角色 选择角色 (允许重新选择)
+								assigneeMap.value[config.name] = { assignees: config.nodeRoleList, type: 2 }
+								break
+							case 4:
+								// 发起人自选 (1: 选择一个人, 2: 选择多个人)
+								// const isMultiple = config.selectMode === 2
+								if (config.selectMode === 1) {
+									selectOpts.maxSelected = 1
+								}
+								break
+							case 5:
+							// 发起人自己 (不能选择)
+							// break
+							case 6:
+								// 连续多级主管 (不能选择)
+								break
+							default:
+								assigneeMap.value[config.name] = { assignees: config.nodeUserList, type: 1, disabled: false, selectOpts }
+							// 发起的时候不需要选择
+						}
+					}
+					break
+				}
+				case 2: {
+					// 抄送人
+					// 选择人员 & allowSelection 控制 true 允许选择 否则  隐藏
+					assigneeMap.value[config.name] = { assignees: config.nodeUserList, type: 1, disabled: !config.allowSelection }
+					break
+				}
+				/*case 3: {
+					// 条件审批
+					console.error(1)
+					break
+				}
+				case 4: {
+					// 条件分支
+					console.error(1)
+					break
+				}
+				case 5: {
+					// 办理子流程
+					console.error(1)
+					break
+				}
+				case 6: {
+					// 定时器在务
+					console.error(1)
+					break
+				}
+				case 7: {
+					// 触发器在务
+					console.error(1)
+					break
+				}*/
+			}
 			_list.push(config)
 		} else if (config.conditionNode === 1) {
 			// 自定义标识key

+ 17 - 12
src/views/flow/create/components/BasicInfo.vue

@@ -21,19 +21,22 @@ const rules = {
 	processKey: [
 		{
 			required: true,
-			message: '请输入唯一标识'
+			message: '请输入唯一标识',
+			trigger: 'blur'
 		}
 	],
 	processName: [
 		{
 			required: true,
-			message: '请输入名称'
+			message: '请输入名称',
+			trigger: 'blur'
 		}
 	],
 	categoryId: [
 		{
 			required: true,
-			message: '请选择分组'
+			message: '请选择分组',
+			trigger: 'blur'
 		}
 	]
 }
@@ -41,15 +44,16 @@ const rules = {
 // 基础信息表单提交校验
 const validate = () => {
 	return new Promise((resolve, reject) => {
+		console.log('validate..........')
 		formRef.value.validate((valid, errObj) => {
+			// console.error(valid, 'valid errObj', errObj)
 			if (valid) {
-				console.error('valid 成功')
 				// cb?.(form.value)
-				resolve(form.value)
+				resolve()
 				// return form.value
 				return
 			}
-			return reject(['基本信息', errObj])
+			return reject(errObj)
 		})
 	})
 }
@@ -132,7 +136,7 @@ defineExpose({
 <template>
 	<div class="base-info">
 		<div class="base-info-panel" style="position: relative">
-			<el-form ref="formRef" :rules="rules" label-position="top">
+			<el-form ref="formRef" :model="flowInfo" :rules="rules" label-position="top">
 				<el-form-item label="图标" prop="flowInfo.processIcon">
 					<el-space>
 						<LeIcon class="icon-shower" :icon-class="`${flowIconPrefix}${flowInfo.processIcon}`" />
@@ -151,16 +155,17 @@ defineExpose({
 						</template>
 					</el-popover>
 				</el-form-item>
-				<el-form-item label="唯一标识 key" prop="flowInfo.processKey">
+				<el-form-item label="唯一标识 key" prop="processKey">
+					processKey
 					<el-input v-model="flowInfo.processKey" clearable maxlength="100"></el-input>
 				</el-form-item>
-				<el-form-item label="名称" prop="flowInfo.processName">
+				<el-form-item label="名称" prop="processName">
 					<el-input v-model="flowInfo.processName" clearable maxlength="15"></el-input>
 				</el-form-item>
-				<el-form-item label="说明" prop="flowInfo.remark">
+				<el-form-item label="说明" prop="remark">
 					<el-input v-model="flowInfo.remark" type="textarea" clearable></el-input>
 				</el-form-item>
-				<el-form-item label="分组" prop="flowInfo.categoryId">
+				<el-form-item label="分组" prop="categoryId">
 					<el-select v-model="flowInfo.categoryId">
 						<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
 					</el-select>
@@ -199,7 +204,7 @@ defineExpose({
 				</el-form-item>
 			</el-form>
 		</div>
-		<use-select v-if="selectVisible" ref="useSelectRef" @closed="selectVisible = false" @content-ev="selectContentEv"></use-select>
+		<use-select v-if="selectVisible" ref="useSelectRef" @closed="selectVisible = false" @update:selected="selectContentEv"></use-select>
 	</div>
 </template>
 

+ 18 - 9
src/views/flow/create/components/ExtendSet.vue

@@ -7,6 +7,15 @@ defineProps({
 		type: String
 	}
 })
+const validate = () => {
+  // 根据后续的业务需求 调整 validate 的功能
+  return new Promise((resolve, reject) => {
+    resolve()
+  })
+}
+defineExpose({
+  validate
+})
 </script>
 
 <template>
@@ -17,19 +26,19 @@ defineProps({
 					<div class="_1zQ9x381ImhBju8yBmxOez">提交人权限</div>
 					<div class="_2j8sMpwI4XNYcuEeV6f56-">
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="允许撤销审批中的申请" size="medium" />
+							<el-checkbox label="允许撤销审批中的申请" />
 							<p class="revoke-setting-sub-text mtb10">第一个审批节点通过后,提交人仍可撤销申请(配置前已发起的申请不生效)</p>
 						</div>
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="允许撤销31天内通过的审批" size="medium" />
+							<el-checkbox label="允许撤销31天内通过的审批" />
 							<p class="revoke-setting-sub-text mtb10">员工可申请撤销已通过的审批(配置前已通过的审批不可撤销)</p>
 						</div>
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="允许修改31天内通过的审批" size="medium" />
+							<el-checkbox label="允许修改31天内通过的审批" />
 							<p class="revoke-setting-sub-text mtb10">提交人可申请修改已通过的审批,用于销假等场景(仅可修改一次,配置前已发起的审批不可修改)</p>
 						</div>
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="允许代他人提交" size="medium" />
+							<el-checkbox label="允许代他人提交" />
 							<p class="revoke-setting-sub-text mtb10">代提人和实际提交人都需在该审批的发起范围内,提交后将共享审批单后续状态</p>
 						</div>
 					</div>
@@ -39,15 +48,15 @@ defineProps({
 					<div class="_1zQ9x381ImhBju8yBmxOez">审批人设置</div>
 					<div class="_2j8sMpwI4XNYcuEeV6f56-">
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="允许审批人批量处理" size="medium" />
+							<el-checkbox label="允许审批人批量处理" />
 							<p class="revoke-setting-sub-text mtb10">勾选后,审批人在处理此流程的任务时,可一次批量处理多个任务</p>
 						</div>
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="开启秒批提示" size="medium" />
+							<el-checkbox label="开启秒批提示" />
 							<p class="revoke-setting-sub-text mtb10">若审批人浏览单据小于3秒或通过快捷审批处理,系统会在审批记录中进行标记</p>
 						</div>
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="可在审批卡片上进行快捷审批" size="medium" />
+							<el-checkbox label="可在审批卡片上进行快捷审批" />
 							<p class="revoke-setting-sub-text mtb10">可在审批bot的消息卡片、移动端列表卡片上进行快捷操作,无需进入具体详情页操作</p>
 						</div>
 					</div>
@@ -57,7 +66,7 @@ defineProps({
 					<div class="_1zQ9x381ImhBju8yBmxOez">转发设置</div>
 					<div class="_2j8sMpwI4XNYcuEeV6f56-">
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="仅可转发给审批相关人员" size="medium" />
+							<el-checkbox label="仅可转发给审批相关人员" />
 							<p class="revoke-setting-sub-text mtb10">审批单仅可被转发给申请人、审批人、抄送人,不能被转发给其他人</p>
 						</div>
 					</div>
@@ -67,7 +76,7 @@ defineProps({
 					<div class="_1zQ9x381ImhBju8yBmxOez">效率统计</div>
 					<div class="_2j8sMpwI4XNYcuEeV6f56-">
 						<div class="other-setting-checkbox-item">
-							<el-checkbox label="该流程数据不纳入效率统计" size="medium" />
+							<el-checkbox label="该流程数据不纳入效率统计" />
 							<p class="revoke-setting-sub-text mtb10">在效率诊断(包括团队、个人、管理员看板)中排除该流程的审批耗时数据</p>
 						</div>
 					</div>

+ 8 - 2
src/views/flow/create/components/FlowDesign.vue

@@ -35,10 +35,16 @@ onMounted(() => {
 		form.value = Object.assign({ processConfig: _val }, {})
 	}
 })
-
+const validate = () => {
+	// 根据后续的业务需求 调整 validate 的功能
+	return new Promise((resolve, reject) => {
+		resolve()
+	})
+}
 defineExpose({
 	formRef,
-	saveDesign
+	saveDesign,
+	validate
 })
 </script>