From 23fdfa68682eef52fee5a8d257c002cdd375a563 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 02 一月 2025 13:46:45 +0800 Subject: [PATCH] 转办:候选用户、候选角色实现 --- src/views/flowable/task/myProcess/send/index.vue | 161 +++++++++-- src/components/flow/Dept/index.vue | 4 src/components/flow/Role/MyRole.vue | 207 ++++++++++++++ src/components/flow/Dept/MyDept.vue | 105 +++++++ src/components/flow/User/MultUser.vue | 259 ++++++++++++++++++ src/components/flow/User/SingleUser.vue | 49 ++ 6 files changed, 744 insertions(+), 41 deletions(-) diff --git a/src/components/flow/Dept/MyDept.vue b/src/components/flow/Dept/MyDept.vue new file mode 100644 index 0000000..ea0b709 --- /dev/null +++ b/src/components/flow/Dept/MyDept.vue @@ -0,0 +1,105 @@ +<template> + <div> + <el-dialog + :title="`閫夋嫨鍊欓�夐儴闂╜" + :visible.sync="show" + width="65%" + :destroy-on-close="true" + :close-on-click-modal="false" + :modal="false" + :before-close="close"> + <el-tree + ref="tree" + :data="deptTree" + show-checkbox + node-key="id" + :check-strictly="true" + :default-expanded-keys="['dept:100']" + @check-change="handleCheckChange" + > + </el-tree> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submit">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import {flowableDeptTreeSelect} from "@/api/system/user"; + +export default { + name: "MyDept", + props: { + show: { + required: true, + type: Boolean + }, + checkeds: { + required: true + } + }, + watch: { + checkeds: { + handler(newV) { + if (newV && newV.length > 0) { + this.checkList = newV + this.$nextTick(() => { + if (this.$refs.tree) { + this.$refs.tree.setCheckedKeys(newV.map(item => item.id)); + } + }); + } else { + this.checkList = [] + } + }, + deep: true + }, + }, + data() { + return { + deptTree: [], + checkList: [], + } + }, + created() { + flowableDeptTreeSelect().then(res => { + this.deptTree = res.data + }) + }, + methods: { + setCheckList(newV) { + if (newV && newV.length > 0) { + this.checkList = newV + this.$nextTick(() => { + if (this.$refs.tree) { + this.$refs.tree.setCheckedKeys(newV.map(item => item.id)); + } + }); + } else { + this.checkList = [] + } + }, + handleCheckChange(data, checked, indeterminate) { + if (checked) { + if (this.checkList.indexOf(data) === -1) { + this.checkList.push(data) + } + } else { + this.checkList = this.checkList.filter(item => item !== data) + } + console.log(data, checked, indeterminate); + }, + close() { + this.$emit("close") + }, + submit() { + this.$emit("submit", this.checkList) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/src/components/flow/Dept/index.vue b/src/components/flow/Dept/index.vue index b119eef..7081767 100644 --- a/src/components/flow/Dept/index.vue +++ b/src/components/flow/Dept/index.vue @@ -74,7 +74,9 @@ }, handleCheckChange(data, checked, indeterminate) { if (checked) { - this.checkList.push(data) + if (this.checkList.indexOf(data) === -1) { + this.checkList.push(data) + } } else { this.checkList = this.checkList.filter(item => item !== data) } diff --git a/src/components/flow/Role/MyRole.vue b/src/components/flow/Role/MyRole.vue new file mode 100644 index 0000000..f2027a0 --- /dev/null +++ b/src/components/flow/Role/MyRole.vue @@ -0,0 +1,207 @@ +<template> + <div> + <el-dialog + :title="`閫夋嫨鍊欓�夎鑹瞏" + :visible.sync="show" + width="65%" + :destroy-on-close="true" + :close-on-click-modal="false" + :modal="false" + :before-close="close"> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> + <el-form-item label="瑙掕壊鍚嶇О" prop="roleName"> + <el-input + v-model="queryParams.roleName" + placeholder="璇疯緭鍏ヨ鑹插悕绉�" + clearable + style="width: 240px" + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + </el-form> + + <el-table ref="dataTable" v-loading="loading" :data="roleList" @selection-change="handleMultipleRoleSelect"> + <el-table-column type="selection" width="50" align="center" /> + <el-table-column label="瑙掕壊缂栧彿" prop="roleId" width="120" /> + <el-table-column label="瑙掕壊鍚嶇О" prop="roleName" :show-overflow-tooltip="true" width="150" /> + <el-table-column label="鏉冮檺瀛楃" prop="roleKey" :show-overflow-tooltip="true" width="150" /> + <el-table-column label="鏄剧ず椤哄簭" prop="roleSort" width="100" /> + <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.createTime) }}</span> + </template> + </el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :page-sizes="[5,10]" + layout="prev, pager, next" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submit">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import { listRole} from "@/api/system/role"; +import {StrUtil} from "@/utils/StrUtil"; + +export default { + name: "MyRole", + dicts: ['sys_normal_disable'], + // 鎺ュ彈鐖剁粍浠剁殑鍊� + props: { + show: { + type: Boolean, + required: true, + default: true + }, + // 鍥炴樉鏁版嵁浼犲�� + selectValues: { + type: Array, + default: [], + required: false + } + }, + data() { + return { + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 闈炲崟涓鐢� + single: true, + // 闈炲涓鐢� + multiple: true, + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 瑙掕壊琛ㄦ牸鏁版嵁 + roleList: [], + // 寮瑰嚭灞傛爣棰� + title: "", + // 鏄惁鏄剧ず寮瑰嚭灞� + open: false, + // 鏌ヨ鍙傛暟 + queryParams: { + pageNum: 1, + pageSize: 5, + roleName: undefined, + roleKey: undefined, + status: undefined + }, + // 琛ㄥ崟鍙傛暟 + form: {}, + radioSelected: 0, // 鍗曢�夋浼犲�� + selectRoleList: [] // 鍥炴樉鏁版嵁浼犲�� + }; + }, + watch: { + selectValues: { + deep: true, + handler(newVal) { + if (newVal && newVal.length > 0) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + this.selectRoleList = [] + newVal.forEach(item => { + this.roleList.forEach(role => { + if (item.roleId === role.roleId) { + this.selectRoleList.push(role) + this.$refs.dataTable.toggleRowSelection(role) + } + }) + }); + }) + } else { + this.selectRoleList = [] + } + } + }, + roleList: { + deep: true, + handler(newVal) { + if (newVal && newVal.length > 0) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + this.selectValues.forEach(item => { + newVal.forEach(role => { + if (item.roleId === role.roleId) { + this.$refs.dataTable.toggleRowSelection(role) + } + }) + }); + }) + } + } + } + }, + mounted() { + this.getList(); + }, + methods: { + setChecked(val) { + if (val && val.length > 0) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + this.selectRoleList = val + val.forEach(check => { + this.roleList.forEach(item => { + if (check.roleId === item.roleId) { + this.$refs.dataTable.toggleRowSelection(item) + } + }) + }) + }); + } else { + this.selectRoleList = [] + } + }, + close() { + this.$emit("close") + }, + submit() { + this.$emit("submit", this.selectRoleList) + }, + /** 鏌ヨ瑙掕壊鍒楄〃 */ + getList() { + this.loading = true; + listRole(this.queryParams).then(response => { + this.roleList = response.rows; + this.total = response.total; + this.loading = false; + } + ); + }, + // 澶氶�夋閫変腑鏁版嵁 + handleMultipleRoleSelect(selection) { + this.selectRoleList = selection + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.handleQuery(); + }, + } +}; +</script> +<style scoped> + +</style> diff --git a/src/components/flow/User/MultUser.vue b/src/components/flow/User/MultUser.vue new file mode 100644 index 0000000..c4e18b7 --- /dev/null +++ b/src/components/flow/User/MultUser.vue @@ -0,0 +1,259 @@ +<template> + <div> + <el-dialog + :title="`閫夋嫨杞姙鎺ユ敹浜哄憳`" + :visible.sync="show" + width="65%" + :destroy-on-close="true" + :close-on-click-modal="false" + :modal="false" + :before-close="close"> + <el-row :gutter="20"> + <!--閮ㄩ棬鏁版嵁--> + <el-col :span="6" :xs="24"> + <div class="head-container"> + <el-input + v-model="deptName" + placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�" + clearable + size="small" + prefix-icon="el-icon-search" + style="margin-bottom: 20px" + /> + </div> + <div class="head-container"> + <el-tree + :data="deptOptions" + :props="defaultProps" + :expand-on-click-node="false" + :filter-node-method="filterNode" + ref="tree" + node-key="id" + default-expand-all + highlight-current + @node-click="handleNodeClick" + /> + </div> + </el-col> + <!--鐢ㄦ埛鏁版嵁--> + <el-col :span="18" :xs="24"> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> + <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName"> + <el-input + v-model="queryParams.userName" + placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" + clearable + style="width: 150px" + @keyup.enter.native="handleQuery" + /> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> + </el-form> + <el-table ref="dataTable" v-loading="loading" :row-key="getRowKey" :data="userList" @selection-change="handleUserSelect"> + <el-table-column type="selection" align="center" /> + <el-table-column label="鐢ㄦ埛缂栧彿" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> + <el-table-column label="鐧诲綍璐﹀彿" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> + <el-table-column label="鐢ㄦ埛濮撳悕" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> + <el-table-column label="閮ㄩ棬" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> + <el-table-column label="鎵嬫満鍙风爜" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> + </el-table> + <pagination + v-show="total>0" + :total="total" + :page-sizes="[5,10]" + layout="prev, pager, next" + :page.sync="queryParams.pageNum" + :limit.sync="queryParams.pageSize" + @pagination="getList" + /> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button type="danger" @click="getSelected">纭</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import { listUser, deptTreeSelect } from "@/api/system/user"; +import Treeselect from "@riophae/vue-treeselect"; +import "@riophae/vue-treeselect/dist/vue-treeselect.css"; +import {StrUtil} from '@/utils/StrUtil' + +export default { + name: "SingleUser", + dicts: ['sys_normal_disable', 'sys_user_sex'], + components: { Treeselect }, + // 鎺ュ彈鐖剁粍浠剁殑鍊� + props: { + show: { + required: true, + type: Boolean + }, + // 鍥炴樉鏁版嵁浼犲�� + selectUserList: { + type: Number, + default: null, + required: false + }, + + }, + data() { + return { + innerSelected: [], + // 閬僵灞� + loading: true, + // 閫変腑鏁扮粍 + ids: [], + // 鏄剧ず鎼滅储鏉′欢 + showSearch: true, + // 鎬绘潯鏁� + total: 0, + // 鐢ㄦ埛琛ㄦ牸鏁版嵁 + userList: [], + // 寮瑰嚭灞傛爣棰� + title: "", + // 閮ㄩ棬鏍戦�夐」 + deptOptions: undefined, + // 鏄惁鏄剧ず寮瑰嚭灞� + open: false, + // 閮ㄩ棬鍚嶇О + deptName: undefined, + // 琛ㄥ崟鍙傛暟 + form: {}, + defaultProps: { + children: "children", + label: "label" + }, + // 鏌ヨ鍙傛暟 + queryParams: { + pageNum: 1, + pageSize: 5, + userName: undefined, + phonenumber: undefined, + status: undefined, + deptId: undefined + }, + // 鍒椾俊鎭� + columns: [ + { key: 0, label: `鐢ㄦ埛缂栧彿`, visible: true }, + { key: 1, label: `鐢ㄦ埛鍚嶇О`, visible: true }, + { key: 2, label: `鐢ㄦ埛鏄电О`, visible: true }, + { key: 3, label: `閮ㄩ棬`, visible: true }, + { key: 4, label: `鎵嬫満鍙风爜`, visible: true }, + { key: 5, label: `鐘舵�乣, visible: true }, + { key: 6, label: `鍒涘缓鏃堕棿`, visible: true } + ], + radioSelected: 0, // 鍗曢�夋浼犲�� + }; + }, + watch: { + // 鏍规嵁鍚嶇О绛涢�夐儴闂ㄦ爲 + deptName(val) { + this.$refs.tree.filter(val); + }, + selectUserList: { + deep: true, + handler(newVal) { + console.log(this.selectValues, "浼犲叆鐨勫�兼槸") + this.setChecked(newVal) + }, + }, + userList: { + deep: true, + handler(newVal) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + this.innerSelected.forEach(check => { + newVal.forEach(item => { + if (check.userId === item.userId) { + this.$refs.dataTable.toggleRowSelection(item) + } + }) + }) + }); + }, + }, + }, + mounted() { + this.getList(); + this.getDeptTree(); + }, + methods: { + setChecked(val) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + this.innerSelected = val + val.forEach(check => { + this.userList.forEach(item => { + if (check.userId === item.userId) { + this.$refs.dataTable.toggleRowSelection(item) + } + }) + }) + }); + }, + /** 鏌ヨ鐢ㄦ埛鍒楄〃 */ + getList() { + this.loading = true; + listUser(this.queryParams).then(response => { + this.userList = response.rows; + this.total = response.total; + this.loading = false; + } + ); + }, + /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */ + getDeptTree() { + deptTreeSelect().then(response => { + this.deptOptions = response.data; + }); + }, + // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁 + getRowKey (row) { + return row.id + }, + // 绛涢�夎妭鐐� + filterNode(value, data) { + if (!value) return true; + return data.label.indexOf(value) !== -1; + }, + // 鑺傜偣鍗曞嚮浜嬩欢 + handleNodeClick(data) { + this.queryParams.deptId = data.id; + this.handleQuery(); + }, + // 浼犻�掗�変腑鍊� + handleUserSelect(selectionList) { + console.log("閫変腑鍊�", selectionList) + this.innerSelected = selectionList + }, + getSelected() { + this.$emit('submit', this.innerSelected); + }, + /** 鎼滅储鎸夐挳鎿嶄綔 */ + handleQuery() { + this.queryParams.pageNum = 1; + this.getList(); + }, + /** 閲嶇疆鎸夐挳鎿嶄綔 */ + resetQuery() { + this.dateRange = []; + this.resetForm("queryForm"); + this.queryParams.deptId = undefined; + this.$refs.tree.setCurrentKey(null); + this.handleQuery(); + }, + close() { + this.$emit("close") + }, + } +}; +</script> +<style scoped> + +</style> diff --git a/src/components/flow/User/SingleUser.vue b/src/components/flow/User/SingleUser.vue index e33de92..e8cf64d 100644 --- a/src/components/flow/User/SingleUser.vue +++ b/src/components/flow/User/SingleUser.vue @@ -96,7 +96,6 @@ }, // 鍥炴樉鏁版嵁浼犲�� selectUser: { - type: Number, default: null, required: false }, @@ -160,18 +159,40 @@ selectUser: { deep: true, handler(newVal) { - console.log(this.selectValues, "浼犲叆鐨勫�兼槸") - this.$nextTick(() => { - this.$refs.dataTable.clearSelection(); + if (newVal) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); this.userList.forEach(item => { if (newVal === item.userId) { this.innerSelected = item this.$refs.dataTable.toggleRowSelection(item) } }) - }); + }); + } else { + this.innerSelected = null; + } }, - // immediate: true + }, + userLst: { + deep: true, + handler(newVal) { + if (newVal) { + this.$nextTick(() => { + this.$refs.dataTable.clearSelection(); + if (! this.innerSelected) { + newVal.forEach(item => { + if (this.innerSelected.userId === item.userId) { + this.innerSelected = item + this.$refs.dataTable.toggleRowSelection(item) + } + }) + } + }); + } else { + this.innerSelected = null; + } + }, }, }, mounted() { @@ -180,15 +201,19 @@ }, methods: { setChecked(val) { + if (val) { this.$nextTick(() => { this.$refs.dataTable.clearSelection(); - this.userList.forEach(item => { - if (val === item.userId) { - this.innerSelected = item - this.$refs.dataTable.toggleRowSelection(item) - } - }) + this.userList.forEach(item => { + if (val.userId === item.userId) { + this.innerSelected = item + this.$refs.dataTable.toggleRowSelection(item) + } + }) }); + } else { + this.innerSelected = null + } }, /** 鏌ヨ鐢ㄦ埛鍒楄〃 */ getList() { diff --git a/src/views/flowable/task/myProcess/send/index.vue b/src/views/flowable/task/myProcess/send/index.vue index e55ed89..a6dc3b9 100644 --- a/src/views/flowable/task/myProcess/send/index.vue +++ b/src/views/flowable/task/myProcess/send/index.vue @@ -84,23 +84,45 @@ <el-form-item label="鐢ㄦ埛绫诲瀷" prop="peopleType"> <el-select v-model="delegationForm.peopleType" @change="peopleTypeChange" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷"> <el-option label="鎸囧畾浜哄憳" value="FIX_USER"></el-option> - <el-option label="鍊欓�夌敤鎴�" disabled value="USER"></el-option> + <el-option label="鍊欓�夌敤鎴�" value="USER"></el-option> <el-option label="鍊欓�夐儴闂�" value="DEPT"></el-option> - <el-option label="鍊欓�夎鑹�" disabled value="ROLE"></el-option> + <el-option label="鍊欓�夎鑹�" value="ROLE"></el-option> </el-select> </el-form-item> <el-form-item v-if="delegationForm.peopleType === 'DEPT'" label="鍊欓�夐儴闂�" prop="targetId"> - <Dept ref="dept" :checkeds="delegationDeptSelect" :show="deptShow" @close="closeDept" @submit="getDeptSelect"/> + <MyDept ref="dept" :checkeds="delegationDeptSelect" :show="deptShow" @close="closeDept" @submit="getDeptSelect"/> <div style="display: flex;align-items: center"> - <div>{{deptNames}}</div> - <el-button style="margin-left: 8px" type="text" @click="editDept">缂栬緫</el-button> + <div> + <el-tag v-for="dept in delegationDeptSelect" :key="dept.id + 'zxc'" type="info" closable @close="removeDept(dept)">{{dept.label}}</el-tag> + </div> + <el-button style="margin-left: 8px" type="text" @click="editDept">閫夋嫨</el-button> </div> </el-form-item> <el-form-item v-if="delegationForm.peopleType === 'FIX_USER'" label="鎸囧畾鐢ㄦ埛" prop="targetId"> - <single-user ref="singleUser" :select-user="delegationForm.targetId" :show="singleUserShow" @close="closeUser" @submit="getSingleUserSelect"/> + <single-user ref="singleUser" :select-user="delegationForm.targetId" :show="singleUserShow" @close="closeSingleUser" @submit="getSingleUserSelect"/> <div style="display: flex;align-items: center"> - <div>{{delegationUserSelect.map(item => item.nickName).join(',')}}</div> - <el-button style="margin-left: 8px" type="text" @click="editUser">缂栬緫</el-button> + <div> + <el-tag v-for="user in delegationUserSelect" :key="user.userId + 'abc'" type="info" closable @close="removeSingleUser(user)">{{user.nickName}}</el-tag> + </div> + <el-button style="margin-left: 8px" type="text" @click="editSingleUser">閫夋嫨</el-button> + </div> + </el-form-item> + <el-form-item v-if="delegationForm.peopleType === 'USER'" label="鍊欓�夌敤鎴�" prop="targetId"> + <mult-user ref="multUser" :select-user="delegationUserSelect" :show="multUserShow" @close="closeMultUser" @submit="getMultUserSelect"/> + <div style="display: flex;align-items: center"> + <div> + <el-tag v-for="user in delegationUserSelect" :key="user.userId + 'qwe'" type="info" closable @close="removeMultUser(user)">{{user.nickName}}</el-tag> + </div> + <el-button style="margin-left: 8px" type="text" @click="editMultUser">閫夋嫨</el-button> + </div> + </el-form-item> + <el-form-item v-if="delegationForm.peopleType === 'ROLE'" label="鍊欓�夎鑹�" prop="targetId"> + <my-role ref="role" :select-values="delegationRoleSelect" :show="roleShow" @close="closeRole" @submit="getRoleSelect"/> + <div style="display: flex;align-items: center"> + <div> + <el-tag v-for="role in delegationRoleSelect" :key="role.roleId + 'rty'" type="info" closable @close="removeRole(role)">{{role.roleName}}</el-tag> + </div> + <el-button style="margin-left: 8px" type="text" @click="editRole">閫夋嫨</el-button> </div> </el-form-item> </el-form> @@ -116,13 +138,13 @@ <script> import {definitionStart, flowXmlAndNode} from "@/api/flowable/definition"; import BpmnViewer from '@/components/Process/viewer'; -import Dept from '@/components/flow/Dept' +import MyDept from '@/components/flow/Dept/MyDept' import SingleUser from '@/components/flow/User/SingleUser' +import MultUser from '@/components/flow/User/MultUser' +import MyRole from '@/components/flow/Role/MyRole' import {completeSubmitFormTask} from "@/api/flowable/process"; import { flowTaskForm } from "@/api/flowable/todo"; import {getNextFlowNodeByStart} from "@/api/flowable/todo"; -import FlowUser from '@/components/flow/User' -import FlowRole from '@/components/flow/Role' import {rejectTask} from "@/api/flowable/process"; import {taskDelegation} from "@/api/projectProcess/projectProcess"; @@ -130,18 +152,20 @@ name: "Record", components: { BpmnViewer, - FlowUser, - FlowRole, - Dept, + MyRole, + MyDept, SingleUser, + MultUser, }, props: {}, data() { return { + roleShow: false, // 瑙掕壊缁勬樉绀� + delegationRoleSelect: [], // 閫変腑瑙掕壊 + multUserShow: false, // 鐢ㄦ埛缁勬樉绀� singleUserShow: false, // 鎸囧畾鐢ㄦ埛鏄剧ず delegationUserSelect: [], // 閫変腑鐨勭敤鎴� - deptShow: false, // 閮ㄩ棬鏄剧ず - deptNames: '', // 閫変腑鐨勯儴闂ㄥ悕绉� + deptShow: false, // 閮ㄩ棬缁勬樉绀� delegationDeptSelect: [], // 閫変腑閮ㄩ棬 delegationFormRules: { peopleType: [ @@ -204,10 +228,45 @@ this.getFlowFormData(this.taskId); }, methods: { + removeDept(dept) { + let index = this.delegationDeptSelect.indexOf(dept); + if (index !== -1) { + this.delegationDeptSelect.splice(index, 1); + } + this.delegationForm.targetId = this.delegationDeptSelect.map(item => item.id).join(",") + }, + removeRole(role) { + let index = this.delegationRoleSelect.indexOf(role); + if (index !== -1) { + this.delegationRoleSelect.splice(index, 1); + } + this.delegationForm.targetId = this.delegationRoleSelect.map(item => item.roleId).join(",") + }, + removeMultUser(user) { + let index = this.delegationUserSelect.indexOf(user); + if (index !== -1) { + this.delegationUserSelect.splice(index, 1); + } + this.delegationForm.targetId = this.delegationUserSelect.map(item => item.userId).join(",") + }, + removeSingleUser(user) { + // 鍥犱负鍙兘閫変竴涓敤鎴凤紝鎵�浠ュ垹浜嗗氨娌′簡 + this.delegationUserSelect = [] + this.delegationForm.targetId = '' + }, + getTips() { + if (this.delegationForm.peopleType === 'USER' || this.delegationForm.peopleType === 'FIX_USER') { + return this.delegationUserSelect.map(item => item.nickName).join("銆�") + } else if (this.delegationForm.peopleType === 'DEPT') { + return this.delegationDeptSelect.map(item => item.label).join("銆�") + } else if (this.delegationForm.peopleType === 'ROLE') { + return this.delegationRoleSelect.map(item => item.roleName).join("銆�") + } + }, delegation() { this.$refs['delegationForm'].validate((valid) => { if (valid) { - this.$confirm(`纭畾瑕佸皢姝や换鍔′氦鐢便��${this.deptNames}銆戝鐞嗗悧?`, '鎻愮ず', { + this.$confirm(`纭畾瑕佸皢姝や换鍔′氦鐢便��${this.getTips()}銆戝鐞嗗悧?`, '鎻愮ず', { confirmButtonText: '纭畾', cancelButtonText: '鍙栨秷', type: 'warning' @@ -236,6 +295,10 @@ this.deptShow = true } else if (val === 'FIX_USER') { this.singleUserShow = true + } else if (val === 'USER') { + this.multUserShow = true + } else if (val === 'ROLE') { + this.roleShow = true } }, editDept() { @@ -244,20 +307,56 @@ }) this.deptShow = true }, - editUser() { - this.$nextTick(() => { - this.$refs.singleUser.setChecked(this.delegationForm.targetId) - }) + editSingleUser() { + if (this.delegationUserSelect && this.delegationUserSelect.length > 0) { + this.$nextTick(() => { + this.$refs.singleUser.setChecked(this.delegationUserSelect[0]) + }) + } this.singleUserShow = true }, - getDeptSelect(list, names) { - console.log(list, names) - if (list) { - this.delegationForm.targetId = list - this.delegationDeptSelect = list.split(",") - this.deptNames = names + editRole() { + if (this.delegationRoleSelect && this.delegationRoleSelect.length > 0) { + this.$nextTick(() => { + this.$refs.role.setChecked(this.delegationRoleSelect) + }) + } + this.roleShow = true + }, + editMultUser() { + if (this.delegationForm.targetId) { + this.$nextTick(() => { + this.$refs.multUser.setChecked(this.delegationUserSelect) + }) + } + this.multUserShow = true + }, + getDeptSelect(deptList) { + if (deptList && deptList.length > 0) { + this.delegationForm.targetId = deptList.map(item => item.id).join(",") + this.delegationDeptSelect = deptList } this.deptShow = false + }, + getMultUserSelect(userList) { + if (userList && userList.length > 0) { + this.delegationForm.targetId = userList.map(item => item.userId).join(",") + this.delegationUserSelect = userList + } else { + this.delegationForm.targetId = '' + this.delegationUserSelect = [] + } + this.multUserShow = false + }, + getRoleSelect(roleList) { + if (roleList && roleList.length > 0) { + this.delegationForm.targetId = roleList.map(item => item.roleId).join(",") + this.delegationRoleSelect = roleList + } else { + this.delegationForm.targetId = '' + this.delegationRoleSelect = [] + } + this.roleShow = false }, getSingleUserSelect(user) { if (user) { @@ -272,9 +371,15 @@ closeDept() { this.deptShow = false }, - closeUser() { + closeSingleUser() { this.singleUserShow = false }, + closeRole() { + this.roleShow = false + }, + closeMultUser() { + this.multUserShow = false + }, openDelegation(taskName) { this.delegationForm.taskName = taskName this.delegationForm.taskId = this.taskId -- Gitblit v1.8.0