فهرست منبع

feat: 子表单 50%

luoyali 1 سال پیش
والد
کامیت
918be0e4e4

+ 12 - 2
src/api/flow/formtemplate.ts

@@ -7,7 +7,8 @@ const api = {
 	page: '/v1/form-template/page', // 分页列表
 	delete: '/v1/form-template/delete', // 根据ids删除
 	create: '/v1/form-template/create', // 创建
-	getOneDetail: '/v1/form-template/get' // 查询id信息
+	getOneDetail: '/v1/form-template/get', // 查询id信息
+	getSimpleList: '/v1/form-template/page-simple' // 分页列表 简单
 }
 
 function formTemplatePageApi(data: any): AxiosPromise {
@@ -18,6 +19,14 @@ function formTemplatePageApi(data: any): AxiosPromise {
 	})
 }
 
+function formTemplateSimpleListApi(data: any): AxiosPromise {
+	return request({
+		url: api.getSimpleList,
+		method: 'post',
+		data
+	})
+}
+
 function formTemplateAddOrEditSaveApi(data: any): AxiosPromise {
 	return request({
 		url: data.id ? api.update : api.create,
@@ -45,5 +54,6 @@ export default {
 	formTemplatePageApi,
 	formTemplateAddOrEditSaveApi,
 	formTemplateDeleteApi,
-	formTemplateDetailApi
+	formTemplateDetailApi,
+	formTemplateSimpleListApi
 }

+ 24 - 13
src/components/scWorkflow/nodes/approver.vue

@@ -139,19 +139,30 @@
 
 						<!-- 表单设置 -->
 						<div v-show="radio1 === '2'">
-							<el-table ref="multipleTableRef" :data="form.extendConfig.formConfig" style="width: 100%">
-								<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 label-position="top" class="aForm">
+								<el-form-item label="添加子表单">
+									<el-button type="primary" icon="plus" round @click="selectHandle(5, form.nodeAssigneeList)">选择子表单</el-button>
+									<div class="tags-list">
+										<el-tag v-for="(user, index) in form.nodeAssigneeList" :key="user.id" closable @close="delUser(index)">{{ user.name }}</el-tag>
+									</div>
+								</el-form-item>
+
+								<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>
 						</div>
 
 						<!-- 操作权限 -->

+ 150 - 6
src/components/scWorkflow/select.vue

@@ -3,7 +3,7 @@
 		v-model="dialogVisible"
 		class="le-dialog"
 		:title="curTitle"
-		:width="type === 1 ? 680 : 460"
+		:width="[1, 5].indexOf(type) !== -1 ? 680 : 460"
 		destroy-on-close
 		append-to-body
 		@closed="$emit('closed')"
@@ -130,6 +130,84 @@
 			</div>
 		</template>
 
+		<template v-if="type === 5">
+			<div class="sc-user-select">
+				<div class="sc-user-select__left">
+					<div class="sc-user-select__search">
+						<el-input v-model="keyword" prefix-icon="Search" placeholder="搜索表单">
+							<template #append>
+								<el-button icon="Search" @click="search"></el-button>
+							</template>
+						</el-input>
+					</div>
+					<div class="sc-user-select__select">
+						<div class="sc-user-select__tree">
+							<el-scrollbar>
+								<el-tree
+									ref="formCategoryTree"
+									class="menu"
+									:data="formCategoryTree"
+									:node-key="formCategoryProps.key"
+									:props="formCategoryProps"
+									highlight-current
+									:expand-on-click-node="false"
+									:current-node-key="formCategoryId"
+									@node-click="formCategoryClick"
+								/>
+							</el-scrollbar>
+						</div>
+						<div class="sc-user-select__user">
+							<div class="sc-user-select__user__list">
+								<el-scrollbar ref="formTemplateScrollbar">
+									<el-tree
+										ref="formTemplateTree"
+										class="menu"
+										:data="formTemplate"
+										:node-key="formTemplateProps.key"
+										:props="formTemplateProps"
+										:default-checked-keys="selectedIds"
+										show-checkbox
+										check-on-click-node
+										@check-change="formTemplateClick"
+									></el-tree>
+								</el-scrollbar>
+							</div>
+							<footer>
+								<el-pagination
+									v-model:currentPage="currentPage"
+									background
+									layout="prev,next"
+									small
+									:total="total"
+									:page-size="pageSize"
+									@current-change="paginationChange"
+								></el-pagination>
+							</footer>
+						</div>
+					</div>
+				</div>
+				<div class="sc-user-select__toicon">
+					<el-icon><arrow-right /></el-icon>
+				</div>
+				<div class="sc-user-select__selected">
+					<header>已选 ({{ selected.length }})</header>
+					<ul style="margin: 0; padding: 0">
+						<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>
+								</span>
+								<span class="delete">
+									<el-button type="danger" icon="Delete" circle size="small" @click="deleteSelected(index)" />
+								</span>
+							</li>
+						</el-scrollbar>
+					</ul>
+				</div>
+			</div>
+		</template>
+
 		<template #footer>
 			<el-button @click="dialogVisible = false">取 消</el-button>
 			<el-button type="primary" @click="save">确 认</el-button>
@@ -142,6 +220,10 @@ import config from '@/config/workflow'
 import department from '@/api/system/department'
 import user from '@/api/system/user'
 import role from '@/api/system/role'
+import formCategory from '@/api/flow/formcategory'
+import formtemplate from '@/api/flow/formtemplate'
+import { ElMessage } from 'element-plus'
+
 export default {
 	props: {
 		modelValue: { type: Boolean, default: false },
@@ -164,6 +246,15 @@ export default {
 				label: 'name',
 				children: 'children'
 			},
+			formCategoryProps: {
+				key: 'id',
+				label: 'name',
+				children: 'children'
+			},
+			formTemplateProps: {
+				key: 'id',
+				label: 'name'
+			},
 			dialogVisible: false,
 			showGrouploading: false,
 			showUserloading: false,
@@ -174,10 +265,16 @@ export default {
 			currentPage: 1,
 			group: [],
 			user: [],
+
 			role: [],
-			type: 1, // 1: 用户 3: 角色
+			type: 1, // 1: 用户 3: 角色 5: 子表单
 			selected: [],
-			value: []
+			value: [],
+
+			// 表单分类
+			formCategoryTree: [],
+			formCategoryId: '',
+			formTemplate: []
 		}
 	},
 	computed: {
@@ -187,7 +284,8 @@ export default {
 		curTitle() {
 			return {
 				1: '人员选择',
-				3: '角色选择'
+				3: '角色选择',
+				5: '表单分类选择'
 			}[this.type]
 		}
 	},
@@ -195,7 +293,7 @@ export default {
 	methods: {
 		//打开赋值
 		open(type, data) {
-			// 1: 用户 3: 角色
+			// 1: 用户 3: 角色 5: 子表单
 			this.type = type
 			this.value = JSON.parse(JSON.stringify(data || []))
 			this.selected = JSON.parse(JSON.stringify(data || []))
@@ -206,6 +304,9 @@ export default {
 				this.getUser()
 			} else if (this.type === 3) {
 				this.getRole()
+			} else if (this.type === 5) {
+				this.getFormCategoryListTreeListEv()
+				this.getFormTemplateListEv()
 			}
 		},
 		//获取组织
@@ -259,9 +360,24 @@ export default {
 				this.selected = this.selected.filter(item => item.id != data.id)
 			}
 		},
+		//表单模板点击
+		formTemplateClick(data, checked) {
+			if (checked) {
+				this.selected.push({
+					id: data.id,
+					name: data.name
+				})
+			} else {
+				this.selected = this.selected.filter(item => item.id != data.id)
+			}
+		},
 		//用户分页点击
 		paginationChange() {
-			this.getUser()
+			if (this.type === 1) {
+				this.getUser()
+			} else if (this.type === 5) {
+				this.getFormTemplateListEv()
+			}
 		},
 		//用户搜索
 		search() {
@@ -309,6 +425,34 @@ export default {
 			}
 			this.$emit('update:selected', this.value)
 			this.dialogVisible = false
+		},
+		// 获取表单分类树结构
+		async getFormCategoryListTreeListEv() {
+			let data = await formCategory.formCategoryListTreeApi({})
+			this.formCategoryTree = [{ id: '', name: '所有', children: data }]
+		},
+		// 分类点击
+		formCategoryClick(data) {
+			this.keyword = ''
+			this.currentPage = 1
+			this.formCategoryId = data.id
+			this.getFormTemplateListEv()
+		},
+		// 获取表单分类下的表单模板
+		async getFormTemplateListEv() {
+			var params = {
+				data: {
+					name: this.keyword || null,
+					formCategoryId: this.formCategoryId || null
+				},
+				page: this.currentPage,
+				pageSize: this.pageSize
+			}
+			const data = await formtemplate.formTemplateSimpleListApi(params)
+			console.log(data, '=')
+			this.formTemplate = data.records
+			this.total = data.total || 0
+			this.$refs.formTemplateScrollbar.setScrollTop(0)
 		}
 	}
 }

+ 7 - 1
src/views/flow/form/designForm.vue

@@ -7,7 +7,13 @@
 			</div>
 		</template>
 		<div>
-			<er-form-editor ref="EReditorRef" v-if="myProps.modelValue" :is-show-i18n="false" :file-upload-u-r-i="uploadFileApi" @listener="handleListener" />
+			<er-form-editor
+				v-if="myProps.modelValue"
+				ref="EReditorRef"
+				:is-show-i18n="false"
+				:file-upload-u-r-i="uploadFileApi"
+				@listener="handleListener"
+			/>
 		</div>
 	</el-drawer>
 </template>

+ 3 - 2
src/views/flow/form/index.vue

@@ -125,7 +125,7 @@
 		/>
 
 		<!-- 表单设计Dialog -->
-		<design-form ref="designForm" v-model="visibleDesignForm" :record="recordObject" @successFn="queryList"></design-form>
+		<design-form ref="designForm" v-model="visibleDesignForm" :record="recordObject" @success-fn="queryList"></design-form>
 	</div>
 </template>
 <script lang="tsx" setup>
@@ -294,7 +294,8 @@ const getGroup = async () => {
 		return { value: item.id, label: item.name }
 	})
 	showGroupLoading.value = false
-	treeData.value = data
+	treeData.value = [{ id: '', name: '所有', children: data }]
+	// treeData.value = data
 }
 
 // 左侧菜单点击