Преглед изворни кода

feat: 发起流程支持表单权限

luoyali пре 7 месеци
родитељ
комит
500f800fe5
2 измењених фајлова са 75 додато и 2 уклоњено
  1. 41 2
      src/components/scWorkflow/nodes/promoter.vue
  2. 34 0
      src/views/approve/launch/ItemDrawer.vue

+ 41 - 2
src/components/scWorkflow/nodes/promoter.vue

@@ -20,6 +20,8 @@
 			<el-container>
 				<el-main>
 					<el-form label-position="top">
+						<el-alert v-if="!form.nodeAssigneeList?.length" title="不指定则默认所有人都可发起此审批" type="info" :closable="false" />
+
 						<el-form-item label="谁可以发起此审批">
 							<el-button type="primary" icon="plus" round @click="selectHandle(3, form.nodeAssigneeList)">选择角色</el-button>
 							<div class="tags-list">
@@ -28,7 +30,22 @@
 								}}</el-tag>
 							</div>
 						</el-form-item>
-						<el-alert v-if="!form.nodeAssigneeList?.length" title="不指定则默认所有人都可发起此审批" type="info" :closable="false" />
+
+						<el-form-item label="表单权限">
+							<el-table ref="multipleTableRef" :data="form.extendConfig.formConfig" style="width: 100%" border>
+								<el-table-column property="label" label="表单字段" align="center" />
+								<el-table-column align="center">
+									<template #header>操作权限</template>
+									<template #default="scope">
+										<el-radio-group v-model="scope.row.opera">
+											<el-radio label="0" size="small">只读</el-radio>
+											<el-radio label="1" size="small">编辑</el-radio>
+											<el-radio label="2" size="small">隐藏</el-radio>
+										</el-radio-group>
+									</template>
+								</el-table-column>
+							</el-table>
+						</el-form-item>
 					</el-form>
 				</el-main>
 				<el-footer>
@@ -42,7 +59,9 @@
 
 <script>
 import addNode from './addNode'
-import {ElMessage} from "element-plus";
+import { ElMessage } from 'element-plus'
+import { mapState } from 'pinia'
+import useFlowStore from '@/store/modules/flow'
 export default {
 	components: {
 		addNode
@@ -63,6 +82,12 @@ export default {
 			form: {}
 		}
 	},
+	computed: {
+		/*Plus() {
+			return Plus
+		},*/
+		...mapState(useFlowStore, ['processForm']) //映射函数,取出processForm
+	},
 	watch: {
 		modelValue() {
 			this.nodeConfig = this.modelValue
@@ -75,6 +100,20 @@ export default {
 		show() {
 			if (this.disabled) return
 			this.form = JSON.parse(JSON.stringify(this.nodeConfig))
+			/* 自定义表单权限 - 发起人*/
+			const { formStructure } = JSON.parse(this.processForm)
+			const formConfig = this.form.extendConfig?.formConfig || []
+			const operateTable = (formStructure?.fields || []).map(item => {
+				let opera = '1'
+				formConfig.map(i => {
+					if (item.id === i.id) {
+						opera = i.opera
+					}
+				})
+				return { label: item.label, id: item.id, opera: opera }
+			})
+			this.form.extendConfig = { formConfig: operateTable }
+			/* 自定义表单权限 - 发起人*/
 			this.isEditTitle = false
 			this.drawer = true
 		},

+ 34 - 0
src/views/approve/launch/ItemDrawer.vue

@@ -168,6 +168,7 @@ const onSubmit = async () => {
 
 // 当前form 表单数据字符串
 let cur_processForm_str = '{}'
+let cur_formStructure = {}
 const processChecked = reactive<{ [nodeKey: string]: any }>({})
 const modelContentConfig = ref<ModelContentConfig | any>({})
 const packageProcess = (data: ModelContentConfig, list = []) => {
@@ -328,11 +329,44 @@ Promise.all([
 		// processForm 动态表单
 		// validateForm.value.rule = [...JSON.parse(cur_processForm_str) /*, { ...workflowItem, value: modelContent_config }*/ /*, { type: 'input', field: 'test_3' }*/]
 		const { formStructure } = JSON.parse(cur_processForm_str)
+		const formConfig = modelContent_config?.extendConfig?.formConfig || []
+		cur_formStructure = formStructure // 存储一份
+		let newFields = cur_formStructure.fields
+		let newFieldsList = cur_formStructure.list
+		let idx = 0
+		while (idx < newFields.length) {
+			const _field = newFields[idx]
+			const matchingFormItem = formConfig.find(formItem => formItem.id == _field.id)
+			if (matchingFormItem) {
+				// 如果找到匹配的对象,且opera为'2',则删除newFields中的对象
+				if (matchingFormItem.opera === '2') {
+					// fields 配置是准确的
+					newFields.splice(idx, 1)
+					// list 配置是跟随 fields 配置 顺序来(通过id 查找 id 只在第一次创建 才有效(修改编辑不会同步))
+					newFieldsList.splice(idx, 1)
+					idx--
+				} else {
+					// 否则,将opera属性添加到newFields中的对象
+					_field.opera = matchingFormItem.opera
+					// '0': 只读 '1': 编辑 '2': 隐藏
+					_field.options.disabled = ['0', '1'].indexOf(matchingFormItem.opera) > -1 ? !Number(matchingFormItem.opera) : false
+				}
+			}
+			idx++
+		}
+		cur_formStructure = {
+			...cur_formStructure,
+			fields: newFields,
+			list: newFieldsList
+		}
+
 		EReditorRef.value.setData(formStructure)
+		validateForm.value.rule = newFields
 		// validateForm.value.rule = JSON.parse(cur_processForm_str)
 	})
 ]).finally(() => {
 	validateForm.value.loading = false
+	validateForm.value.rule = []
 })
 </script>
 <style lang="scss">