Răsfoiți Sursa

feat: 发起审批 提交

lanceJiang 1 an în urmă
părinte
comite
b1bb4e0ab3

+ 1 - 0
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:自动拒绝

+ 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: {
@@ -273,7 +288,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
+// }, {})

+ 13 - 5
src/views/approve/launch/ItemDrawer.vue

@@ -141,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: assigneeMap.value // 流程节点审批人  todo...processForm
+			assigneeMap: assigneeMap_
 		})
 		.then(res => {
 			ElMessage.success('提交成功')
@@ -198,8 +207,7 @@ const packageProcess = (data, list = []) => {
 						let selectOpts = {}
 						switch (config.setType) {
 							case 1:
-								// 指定人员 (不允许重新选择)
-								// assigneeMap.value[config.name] = { assignees: config.nodeUserList, type: 1 }
+								// 指定人员 (不允许重新选择) // 但展示
 								disabled = true
 							case 2:
 								// 主管 (不需要选择)
@@ -230,8 +238,8 @@ const packageProcess = (data, list = []) => {
 				}
 				case 2: {
 					// 抄送人
-					// 选择人员 & allowSelection 控制 true 允许选择 否则  隐藏 todo...
-					assigneeMap.value[config.name] = { assignees: config.nodeUserList, type: 1, disabled: false /*!config.allowSelection*/, selectOpts: { maxSelected: 1 } }
+					// 选择人员 & allowSelection 控制 true 允许选择 否则  隐藏
+					assigneeMap.value[config.name] = { assignees: config.nodeUserList, type: 1, disabled: !config.allowSelection }
 					break
 				}
 				/*case 3: {