From 7cc473413471b45daa1c3b90a1ab34398a793b49 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期二, 31 十二月 2024 15:53:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/views/flowable/task/myProcess/send/index.vue | 70 +++++++++--
src/components/flow/Dept/index.vue | 1
src/components/flow/User/SingleUser.vue | 262 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 316 insertions(+), 17 deletions(-)
diff --git a/src/components/flow/Dept/index.vue b/src/components/flow/Dept/index.vue
index 44fcb17..b119eef 100644
--- a/src/components/flow/Dept/index.vue
+++ b/src/components/flow/Dept/index.vue
@@ -4,7 +4,6 @@
:title="`閫夋嫨鍊欓�夐儴闂╜"
:visible.sync="show"
width="65%"
-
:destroy-on-close="true"
:close-on-click-modal="false"
:modal="false"
diff --git a/src/components/flow/User/SingleUser.vue b/src/components/flow/User/SingleUser.vue
new file mode 100644
index 0000000..e33de92
--- /dev/null
+++ b/src/components/flow/User/SingleUser.vue
@@ -0,0 +1,262 @@
+<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" />
+ <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
+ },
+ // 鍥炴樉鏁版嵁浼犲��
+ selectUser: {
+ type: Number,
+ default: null,
+ required: false
+ },
+
+ },
+ data() {
+ return {
+ innerSelected: null,
+ // 閬僵灞�
+ 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, // 鍗曢�夋浼犲��
+ selectUserList: [] // 鍥炴樉鏁版嵁浼犲��
+ };
+ },
+ watch: {
+ // 鏍规嵁鍚嶇О绛涢�夐儴闂ㄦ爲
+ deptName(val) {
+ this.$refs.tree.filter(val);
+ },
+ selectUser: {
+ deep: true,
+ handler(newVal) {
+ console.log(this.selectValues, "浼犲叆鐨勫�兼槸")
+ this.$nextTick(() => {
+ this.$refs.dataTable.clearSelection();
+ this.userList.forEach(item => {
+ if (newVal === item.userId) {
+ this.innerSelected = item
+ this.$refs.dataTable.toggleRowSelection(item)
+ }
+ })
+ });
+ },
+ // immediate: true
+ },
+ },
+ mounted() {
+ this.getList();
+ this.getDeptTree();
+ },
+ methods: {
+ setChecked(val) {
+ this.$nextTick(() => {
+ this.$refs.dataTable.clearSelection();
+ this.userList.forEach(item => {
+ if (val === item.userId) {
+ this.innerSelected = item
+ 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) {
+ if (selectionList && selectionList.length > 1) {
+ this.$refs.dataTable.clearSelection();
+ this.$refs.dataTable.toggleRowSelection(selectionList[selectionList.length - 1]);
+ }
+ if (selectionList && selectionList.length > 0) {
+ this.innerSelected = selectionList[selectionList.length - 1]
+ console.log(this.innerSelected)
+ } else {
+ this.innerSelected = null
+ }
+ },
+ 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>
+/deep/ .el-table__header-wrapper .el-checkbox{
+ display:none
+}
+</style>
diff --git a/src/views/flowable/task/myProcess/send/index.vue b/src/views/flowable/task/myProcess/send/index.vue
index 70d044d..e55ed89 100644
--- a/src/views/flowable/task/myProcess/send/index.vue
+++ b/src/views/flowable/task/myProcess/send/index.vue
@@ -83,7 +83,7 @@
</el-alert>
<el-form-item label="鐢ㄦ埛绫诲瀷" prop="peopleType">
<el-select v-model="delegationForm.peopleType" @change="peopleTypeChange" placeholder="璇烽�夋嫨鐢ㄦ埛绫诲瀷">
- <el-option label="鎸囧畾浜哄憳" disabled value="FIX_USER"></el-option>
+ <el-option label="鎸囧畾浜哄憳" value="FIX_USER"></el-option>
<el-option label="鍊欓�夌敤鎴�" disabled value="USER"></el-option>
<el-option label="鍊欓�夐儴闂�" value="DEPT"></el-option>
<el-option label="鍊欓�夎鑹�" disabled value="ROLE"></el-option>
@@ -94,6 +94,13 @@
<div style="display: flex;align-items: center">
<div>{{deptNames}}</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"/>
+ <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-form-item>
</el-form>
@@ -110,6 +117,7 @@
import {definitionStart, flowXmlAndNode} from "@/api/flowable/definition";
import BpmnViewer from '@/components/Process/viewer';
import Dept from '@/components/flow/Dept'
+import SingleUser from '@/components/flow/User/SingleUser'
import {completeSubmitFormTask} from "@/api/flowable/process";
import { flowTaskForm } from "@/api/flowable/todo";
import {getNextFlowNodeByStart} from "@/api/flowable/todo";
@@ -125,10 +133,13 @@
FlowUser,
FlowRole,
Dept,
+ SingleUser,
},
props: {},
data() {
return {
+ singleUserShow: false, // 鎸囧畾鐢ㄦ埛鏄剧ず
+ delegationUserSelect: [], // 閫変腑鐨勭敤鎴�
deptShow: false, // 閮ㄩ棬鏄剧ず
deptNames: '', // 閫変腑鐨勯儴闂ㄥ悕绉�
delegationDeptSelect: [], // 閫変腑閮ㄩ棬
@@ -194,20 +205,27 @@
},
methods: {
delegation() {
- this.$confirm(`纭畾瑕佸皢姝や换鍔′氦鐢便��${this.deptNames}銆戝鐞嗗悧?`, '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- taskDelegation(this.delegationForm).then(res => {
- this.$message.success("宸插彂璧疯浆鍔炵敵璇�")
- this.goBack()
- })
- }).catch(() => {
- this.$message({
- type: 'info',
- message: '宸插彇娑堣浆鍔炴搷浣�'
- });
+ this.$refs['delegationForm'].validate((valid) => {
+ if (valid) {
+ this.$confirm(`纭畾瑕佸皢姝や换鍔′氦鐢便��${this.deptNames}銆戝鐞嗗悧?`, '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ taskDelegation(this.delegationForm).then(res => {
+ this.$message.success("宸插彂璧疯浆鍔炵敵璇�")
+ this.goBack()
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堣浆鍔炴搷浣�'
+ });
+ });
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
});
},
peopleTypeChange(val) {
@@ -216,6 +234,8 @@
this.$refs.dept.setCheckList(this.delegationDeptSelect)
})
this.deptShow = true
+ } else if (val === 'FIX_USER') {
+ this.singleUserShow = true
}
},
editDept() {
@@ -223,6 +243,12 @@
this.$refs.dept.setCheckList(this.delegationDeptSelect)
})
this.deptShow = true
+ },
+ editUser() {
+ this.$nextTick(() => {
+ this.$refs.singleUser.setChecked(this.delegationForm.targetId)
+ })
+ this.singleUserShow = true
},
getDeptSelect(list, names) {
console.log(list, names)
@@ -233,10 +259,22 @@
}
this.deptShow = false
},
+ getSingleUserSelect(user) {
+ if (user) {
+ this.delegationForm.targetId = user.userId
+ this.delegationUserSelect = [user]
+ } else {
+ this.delegationForm.targetId = ''
+ this.delegationUserSelect = []
+ }
+ this.singleUserShow = false
+ },
closeDept() {
- console.log(this.deptNames)
this.deptShow = false
},
+ closeUser() {
+ this.singleUserShow = false
+ },
openDelegation(taskName) {
this.delegationForm.taskName = taskName
this.delegationForm.taskId = this.taskId
--
Gitblit v1.8.0