From e87846bfc7e467836d958632b15a22a901eb51d2 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 09 一月 2025 15:33:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/index.vue                                            |    9 
 src/views/projectManage/plan/planInfo.vue                      |    1 
 src/views/flowable/task/myProcess/detail/index.vue             |   55 +-
 src/components/flow/User/SingleUser.vue                        |   90 +---
 src/assets/styles/ruoyi.scss                                   |    2 
 src/views/function/api/purchase.js                             |    3 
 src/views/components/noticeTable.vue                           |   54 +
 src/views/todo/api/myTodoList.js                               |    4 
 src/components/Process/designer.vue                            |    9 
 src/views/projectEngineering/projectLibrary/projectDetails.vue |    1 
 src/views/projectProcess/detail/index.vue                      |    3 
 src/views/projectProcess/index.vue                             |    1 
 src/components/flow/User/MultUser.vue                          |   90 +--
 src/views/todo/api/allTodoList.js                              |    4 
 src/components/Process/panel/PropertiesPanel.vue               |    1 
 src/components/Process/panel/TaskConfPanel.vue                 |  550 +++++++++++++++++++++++++++
 src/components/flow/Role/MyRole.vue                            |  107 +---
 src/components/flow/Dept/MyDept.vue                            |    9 
 src/views/todo/processTask.vue                                 |    3 
 src/views/flowable/task/myProcess/send/index.vue               |  111 ++++-
 src/components/flow/Expression/index.vue                       |    8 
 src/components/flow/User/index.vue                             |    2 
 src/views/function/leaveApply.vue                              |    5 
 src/views/flowable/definition/model.vue                        |    1 
 src/components/Process/panel/formPanel.vue                     |    5 
 src/views/components/tidingsTable.vue                          |   28 
 26 files changed, 832 insertions(+), 324 deletions(-)

diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss
index 3a16ea5..2a328ff 100644
--- a/src/assets/styles/ruoyi.scss
+++ b/src/assets/styles/ruoyi.scss
@@ -202,7 +202,7 @@
 }
 
 .el-card__body {
-  padding: 15px 20px 20px 20px !important;
+  padding: 15px 20px 15px 20px !important;
 }
 
 .card-box {
diff --git a/src/components/Process/designer.vue b/src/components/Process/designer.vue
index 5fb87e9..5687849 100644
--- a/src/components/Process/designer.vue
+++ b/src/components/Process/designer.vue
@@ -66,7 +66,7 @@
 import TaskListener from './panel/taskListener'
 import MultiInstance from './panel/multiInstance'
 import CommonPanel from './panel/commonPanel'
-import UserTaskPanel from './panel/taskPanel'
+import UserTaskPanel from './panel/TaskConfPanel'
 import ConditionPanel from './panel/conditionPanel'
 import FormPanel from './panel/formPanel'
 import OtherPanel from './panel/otherPanel'
@@ -139,11 +139,9 @@
       });
       // 鐩戝惉閫夋嫨浜嬩欢锛屼慨鏀瑰綋鍓嶆縺娲荤殑鍏冪礌浠ュ強琛ㄥ崟
       this.modelerStore.modeler.on("selection.changed", ({newSelection}) => {
-        console.log("鏁版嵁鏀瑰彉1", newSelection)
         this.initFormOnChanged(newSelection[0] || null);
       });
       this.modelerStore.modeler.on("element.changed", ({element}) => {
-        console.log("鏁版嵁鏀瑰彉2")
         // 淇濊瘉 淇敼 "榛樿娴佽浆璺緞" 绫讳技闇�瑕佷慨鏀瑰涓厓绱犵殑浜嬩欢鍙戠敓鐨勬椂鍊欙紝鏇存柊琛ㄥ崟鐨勫厓绱犱笌鍘熼�変腑鍏冪礌涓嶄竴鑷淬��
         if (element && element.id === this.elementId) {
           this.initFormOnChanged(element);
@@ -153,24 +151,19 @@
 
     // 鍒濆鍖栨暟鎹�
     initFormOnChanged(element) {
-      console.log(element, "鑺傜偣鏁版嵁")
       let activatedElement = element;
       if (!activatedElement) {
-        console.log(1)
         activatedElement =
           this.modelerStore.elRegistry.find(el => el.type === "bpmn:Process") ??
           this.modelerStore.elRegistry.find(el => el.type === "bpmn:Collaboration");
       }
       if (!activatedElement) return;
-      console.log(2, activatedElement)
       this.modelerStore.element = activatedElement;
       this.elementId = activatedElement.id;
       // 纭繚elementId鍊兼病鍙樹篃瑕佹洿鏂癴orm缁勪欢閫変腑鐨勫��
       if (this.formVisible) {
-        console.log(this.modelerStore.element.businessObject.formKey, "鏂扮殑鍊�")
         this.$refs.formSelect.init()
       }
-      console.log(3, this.elementId)
       this.elementType = activatedElement.type.split(":")[1] || "";
       this.conditionVisible = !!(
         this.elementType === "SequenceFlow" &&
diff --git a/src/components/Process/panel/PropertiesPanel.vue b/src/components/Process/panel/PropertiesPanel.vue
index 959fc1a..6042067 100644
--- a/src/components/Process/panel/PropertiesPanel.vue
+++ b/src/components/Process/panel/PropertiesPanel.vue
@@ -107,7 +107,6 @@
 
         }
       })
-      console.log(this.canConfigPropertyList, "杩欐槸浠�涔堥")
       this.elementPropertyList = JSON.parse(JSON.stringify(this.bpmnElementPropertyList ?? []));
     },
     openAttributesForm(attr, index) {
diff --git a/src/components/Process/panel/TaskConfPanel.vue b/src/components/Process/panel/TaskConfPanel.vue
new file mode 100644
index 0000000..9d93362
--- /dev/null
+++ b/src/components/Process/panel/TaskConfPanel.vue
@@ -0,0 +1,550 @@
+<template>
+  <div>
+    <el-form label-width="80px" size="small">
+      <el-form-item label="寮傛">
+        <el-switch v-model="bpmnFormData.async" active-text="鏄�" inactive-text="鍚�" @change="updateElementTask('async')"/>
+      </el-form-item>
+      <el-form-item label="鐢ㄦ埛绫诲瀷">
+        <el-select v-model="bpmnFormData.userType" placeholder="鐢ㄦ埛绫诲瀷" @change="updateUserType">
+          <el-option
+            v-for="item in userTypeOption"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="鎸囧畾浜哄憳" v-if="bpmnFormData.userType === 'assignee'">
+        <single-user ref="singleUser" :select-user="delegationUserSelect && delegationUserSelect.length > 0 ? delegationUserSelect[0].userId : null" :show="singleUserShow" @close="closeSingleUser" @submit="getSingleUserSelect" :key="singleUserKey"/>
+        <div v-if="expSelect">
+          <el-tag class="select-tag" :key="expSelect.id + 'kfc'" type="info" closable @close="removeExp">{{expSelect.expression}}</el-tag>
+        </div>
+        <div v-else>
+          <el-tag class="select-tag" v-for="user in delegationUserSelect" :key="user.userId + 'abc'" type="info" closable @close="removeSingleUser(user)">{{user.nickName}}</el-tag>
+        </div>
+        <el-button-group class="ml-4" style="margin-top: 4px">
+          <!--鎸囧畾浜哄憳-->
+          <el-tooltip class="box-item" effect="dark" content="鎸囧畾浜哄憳" :disabled="typeButDisable" placement="bottom">
+            <el-button size="mini" type="primary" icon="el-icon-user" :disabled="typeButDisable" @click="editSingleUser"/>
+          </el-tooltip>
+          <!--閫夋嫨琛ㄨ揪寮�-->
+          <el-tooltip class="box-item" effect="dark" content="閫夋嫨琛ㄨ揪寮�" :disabled="expButDisable" placement="bottom">
+            <el-button size="mini" type="warning" icon="el-icon-postcard" :disabled="expButDisable" @click="editExp"/>
+          </el-tooltip>
+        </el-button-group>
+      </el-form-item>
+
+      <el-form-item label="鍊欓�変汉鍛�" v-else-if="bpmnFormData.userType === 'candidateUsers'">
+        <mult-user ref="multUser" :select-user="delegationUserSelect" :show="multUserShow" @close="closeMultUser" @submit="getMultUserSelect" :key="multUserKey"/>
+        <div v-if="expSelect">
+          <el-tag class="select-tag" :key="expSelect.id + 'kfc'" type="info" closable @close="removeExp">{{expSelect.expression}}</el-tag>
+        </div>
+        <div v-else>
+          <el-tag class="select-tag" v-for="user in delegationUserSelect" :key="user.userId + 'qwe'" type="info" closable @close="removeMultUser(user)">{{user.nickName}}</el-tag>
+        </div>
+        <el-button-group class="ml-4" style="margin-top: 4px">
+          <!--鍊欓�変汉鍛�-->
+          <el-tooltip class="box-item" effect="dark" content="鍊欓�変汉鍛�" :disabled="typeButDisable" placement="bottom">
+            <el-button size="mini" type="primary" icon="el-icon-user" :disabled="typeButDisable" @click="editMultUser"/>
+          </el-tooltip>
+          <!--閫夋嫨琛ㄨ揪寮�-->
+          <el-tooltip class="box-item" effect="dark" content="閫夋嫨琛ㄨ揪寮�" :disabled="expButDisable" placement="bottom">
+            <el-button size="mini" type="warning" icon="el-icon-postcard" :disabled="expButDisable" @click="editExp"/>
+          </el-tooltip>
+        </el-button-group>
+      </el-form-item>
+
+      <el-form-item label="鍊欓�夎鑹�" v-else-if="bpmnFormData.userType === 'candidateGroups'">
+        <my-role ref="role" :select-values="delegationRoleSelect" :show="roleShow" @close="closeRole" @submit="getRoleSelect" :key="roleKey"/>
+        <div v-if="expSelect">
+          <el-tag class="select-tag" :key="expSelect.id + 'kfc'" type="info" closable @close="removeExp">{{expSelect.expression}}</el-tag>
+        </div>
+        <div v-else>
+          <el-tag class="select-tag" v-for="role in delegationRoleSelect" :key="role.roleId + 'rty'" type="info" closable @close="removeRole(role)">{{role.roleName}}</el-tag>
+        </div>
+        <el-button-group class="ml-4" style="margin-top: 4px">
+          <!--鍊欓�夎鑹�-->
+          <el-tooltip class="box-item" effect="dark" content="鍊欓�夎鑹�" :disabled="typeButDisable" placement="bottom">
+            <el-button size="mini" type="primary" icon="el-icon-user" :disabled="typeButDisable"  @click="editRole"/>
+          </el-tooltip>
+          <!--閫夋嫨琛ㄨ揪寮�-->
+          <el-tooltip class="box-item" effect="dark" content="閫夋嫨琛ㄨ揪寮�" :disabled="expButDisable" placement="bottom">
+            <el-button size="mini" type="warning" icon="el-icon-postcard" :disabled="expButDisable" @click="editExp"/>
+          </el-tooltip>
+        </el-button-group>
+      </el-form-item>
+
+      <el-form-item label="鍊欓�夐儴闂�" v-else>
+        <MyDept ref="dept" :checkeds="delegationDeptSelect" :show="deptShow" @close="closeDept" @submit="getDeptSelect" :key="deptKey"/>
+        <div v-if="expSelect">
+          <el-tag class="select-tag" :key="expSelect.id + 'kfc'" type="info" closable @close="removeExp">{{expSelect.expression}}</el-tag>
+        </div>
+        <div v-else>
+          <el-tag class="select-tag" v-for="dept in delegationDeptSelect" :key="dept.id + 'zxc'" type="info" closable @close="removeDept(dept)">{{dept.label}}</el-tag>
+        </div>
+        <el-button-group class="ml-4" style="margin-top: 4px">
+          <!--鍊欓�夐儴闂�-->
+          <el-tooltip class="box-item" effect="dark" content="鍊欓�夐儴闂�" :disabled="typeButDisable" placement="bottom">
+            <el-button size="mini" type="primary" icon="el-icon-user" :disabled="typeButDisable" @click="editDept"/>
+          </el-tooltip>
+          <!--閫夋嫨琛ㄨ揪寮�-->
+          <el-tooltip class="box-item" effect="dark" content="閫夋嫨琛ㄨ揪寮�" :disabled="expButDisable" placement="bottom">
+            <el-button size="mini" type="warning" icon="el-icon-postcard" :disabled="expButDisable" @click="editExp"/>
+          </el-tooltip>
+        </el-button-group>
+      </el-form-item>
+
+      <el-form-item label="浼樺厛绾�">
+        <el-input v-model="bpmnFormData.priority" @change="updateElementTask('priority')"/>
+      </el-form-item>
+      <el-form-item label="鍒版湡鏃堕棿">
+        <el-input v-model="bpmnFormData.dueDate" @change="updateElementTask('dueDate')"/>
+      </el-form-item>
+    </el-form>
+
+    <!--閫夋嫨琛ㄨ揪寮�-->
+    <el-dialog
+      title="閫夋嫨琛ㄨ揪寮�"
+      :visible.sync="expVisible"
+      width="60%"
+      :close-on-press-escape="false"
+      :destroy-on-close="true"
+      @close="closeExp"
+    >
+      <flow-exp :selectValues="expSelect" @handleSingleExpSelect="getExpSelect"></flow-exp>
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" type="primary" @click="checkExpComplete">纭� 瀹�</el-button>
+      </div>
+    </el-dialog>
+
+
+  </div>
+</template>
+
+<script>
+import FlowExp from '@/components/flow/Expression'
+import {StrUtil} from '@/utils/StrUtil'
+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'
+
+
+export default {
+  name: "TaskConfPanel",
+  components: {
+    FlowExp,
+    MyRole,
+    MyDept,
+    SingleUser,
+    MultUser,
+  },
+  /** 缁勪欢浼犲��  */
+  props : {
+    id: {
+      type: String,
+      required: true
+    },
+  },
+  data() {
+    return {
+      typeButDisable: false, // 鐢ㄦ埛绫诲瀷閫夋嫨鎸夐挳鏄惁绂佺敤
+      expButDisable: false, // 鐢ㄦ埛绫诲瀷閫夋嫨鎸夐挳鏄惁绂佺敤
+      roleKey: 'role',
+      deptKey: 'dept',
+      multUserKey: 0,
+      singleUserKey: 'single',
+      roleShow: false, // 瑙掕壊缁勬樉绀�
+      delegationRoleSelect: [], // 閫変腑瑙掕壊
+      multUserShow: false, // 鐢ㄦ埛缁勬樉绀�
+      singleUserShow: false, // 鎸囧畾鐢ㄦ埛鏄剧ず
+      delegationUserSelect: [], // 閫変腑鐨勭敤鎴�
+      deptShow: false, // 閮ㄩ棬缁勬樉绀�
+      delegationDeptSelect: [], // 閫変腑閮ㄩ棬
+      expSelect: null,  // 閫変腑琛ㄨ揪寮�
+      num: 0, // 鐢ㄤ簬瑙﹀彂鐢ㄦ埛閫夋嫨鏇存柊
+      expVisible: false,
+      isIndeterminate: true,
+      checkType: 'single', // 閫夌被
+      userType: '',
+      userTypeOption: [
+        {label: '鎸囧畾浜哄憳', value: 'assignee'},
+        {label: '鍊欓�変汉鍛�', value: 'candidateUsers'},
+        {label: '鍊欓�夎鑹�', value: 'candidateGroups'},
+        {label: '鍊欓�夐儴闂�', value: 'candidateDeptGroups'},
+      ],
+      checkAll: false,
+      bpmnFormData: {
+        userType: "candidateDeptGroups",
+        assignee: "",
+        candidateUsers: "",
+        candidateGroups: "",
+        dueDate: "",
+        priority: "",
+        dataType: "",
+        expId: "",
+      },
+      // 鏁版嵁鍥炴樉
+      selectData: {
+        assignee: null,
+        candidateUsers: null,
+        candidateGroups: [],  // 瑙掕壊
+        candidateDeptGroups: [], // 閮ㄩ棬
+        exp: null,
+      },
+      otherExtensionList:[],
+    }
+  },
+
+  /** 浼犲�肩洃鍚� */
+  watch: {
+    id: {
+      handler(newVal) {
+        if (StrUtil.isNotBlank(newVal)) {
+          this.resetTaskForm();
+        }
+      },
+      immediate: true, // 绔嬪嵆鐢熸晥
+    },
+  },
+  created() {
+
+  },
+  methods: {
+    removeExp() {
+      this.getExpSelect(null)
+    },
+    removeDept(dept) {
+      let index = this.delegationDeptSelect.indexOf(dept);
+      if (index !== -1) {
+        this.delegationDeptSelect.splice(index, 1);
+      }
+      this.getDeptSelect(this.delegationDeptSelect)
+    },
+    removeRole(role) {
+      let index = this.delegationRoleSelect.indexOf(role);
+      if (index !== -1) {
+        this.delegationRoleSelect.splice(index, 1);
+      }
+      this.getRoleSelect(this.delegationRoleSelect)
+    },
+    removeMultUser(user) {
+      let index = this.delegationUserSelect.indexOf(user);
+      if (index !== -1) {
+        this.delegationUserSelect.splice(index, 1);
+      }
+      this.getMultUserSelect(this.delegationUserSelect)
+    },
+    removeSingleUser(user) {
+      // 鍥犱负鍙兘閫変竴涓敤鎴凤紝鎵�浠ュ垹浜嗗氨娌′簡
+      this.getSingleUserSelect(null)
+    },
+    editDept() {
+      this.$nextTick(() => {
+        this.deptKey += '1'
+        this.$refs.dept.setCheckList(this.delegationDeptSelect)
+      })
+      this.deptShow = true
+    },
+    editSingleUser() {
+      if (this.delegationUserSelect && this.delegationUserSelect.length > 0) {
+        this.singleUserKey += '1'
+        this.$nextTick(() => {
+          this.$refs.singleUser.setChecked(this.delegationUserSelect[0])
+        })
+      }
+      this.singleUserShow = true
+    },
+    editRole() {
+      if (this.delegationRoleSelect && this.delegationRoleSelect.length > 0) {
+        this.roleKey += '1'
+        this.$nextTick(() => {
+          this.$refs.role.setChecked(this.delegationRoleSelect)
+        })
+      }
+      this.roleShow = true
+    },
+    editMultUser() {
+      if (this.delegationUserSelect && this.delegationUserSelect.length > 0) {
+        this.multUserKey += '1'
+        this.$nextTick(() => {
+          this.$refs.multUser.setChecked(this.delegationUserSelect)
+        })
+      }
+      this.multUserShow = true
+    },
+    editExp() {
+      this.expVisible = true;
+    },
+    getDeptSelect(deptList) {
+      if (deptList && deptList.length > 0) {
+        this.deleteFlowAttar();
+        this.updateCustomElement('dataType', 'fixed');
+        this.updateCustomElement("candidateGroups", deptList.map(item => item.id).join(","));
+        this.delegationDeptSelect = deptList
+        this.expButDisable = true
+      } else {
+        this.delegationDeptSelect = []
+        this.expButDisable = false
+      }
+      this.deptShow = false
+      this.deptKey += '1'
+    },
+    getMultUserSelect(userList) {
+      if (userList && userList.length > 0) {
+        this.deleteFlowAttar();
+        this.updateCustomElement('dataType', 'fixed');
+        this.updateCustomElement(this.bpmnFormData.userType, userList.map(item => item.userId).join(","));
+        this.delegationUserSelect = userList
+        this.expButDisable = true
+      } else {
+        this.delegationUserSelect = []
+        this.expButDisable = false
+      }
+      this.multUserShow = false
+      this.multUserKey += 1;
+    },
+    getRoleSelect(roleList) {
+      if (roleList && roleList.length > 0) {
+        this.deleteFlowAttar();
+        this.updateCustomElement('dataType', 'fixed');
+        // userType = candidateGroups
+        this.updateCustomElement(this.bpmnFormData.userType, roleList.map(item => item.roleId).join(","));
+        this.delegationRoleSelect = roleList
+        this.expButDisable = true
+      } else {
+        this.delegationRoleSelect = []
+        this.expButDisable = false
+      }
+      this.roleShow = false
+      this.roleKey += '1'
+    },
+    getSingleUserSelect(user) {
+      if (user) {
+        this.deleteFlowAttar();
+        this.updateCustomElement('dataType', 'fixed');
+        this.updateCustomElement(this.bpmnFormData.userType, user.userId);
+        this.delegationUserSelect = [user]
+        this.expButDisable = true
+      } else {
+        this.delegationUserSelect = []
+        this.expButDisable = false
+        this.deleteFlowAttar();
+      }
+      this.singleUserShow = false
+      this.singleUserKey += '1'
+    },
+    getExpSelect(selection) {
+      console.log(selection, "閫変腑鐨勮〃杈惧紡")
+      if (selection) {
+        this.expSelect = selection
+        this.deleteFlowAttar();
+        this.bpmnFormData[this.bpmnFormData.userType] = selection.name;
+        this.updateCustomElement('dataType', selection.dataType);
+        this.updateCustomElement('expId', selection.id.toString());
+        const userType = this.bpmnFormData.userType === "candidateDeptGroups" ? "candidateGroups" : this.bpmnFormData.userType
+        this.updateCustomElement(userType, selection.expression);
+        this.handleSelectData("exp", selection.id);
+        this.typeButDisable = true
+      } else {
+        this.expSelect = null
+        this.typeButDisable = false
+        this.deleteFlowAttar();
+      }
+    },
+    closeExp() {
+      this.expVisible = false
+    },
+    closeDept() {
+      this.deptShow = false
+      this.deptKey += '1'
+    },
+    closeSingleUser() {
+      this.singleUserShow = false
+      this.singleUserKey += '1'
+    },
+    closeRole() {
+      this.roleShow = false
+      this.roleKey += '1'
+    },
+    closeMultUser() {
+      this.multUserShow = false
+      this.multUserKey += 1;
+    },
+
+    // 鍒濆鍖栬〃鍗�
+    resetTaskForm() {
+      // 鍒濆鍖栬涓虹┖鍊�
+      this.bpmnFormData = {
+        userType: "candidateDeptGroups",
+        assignee: "",
+        candidateUsers: "",
+        candidateGroups: "",
+        dueDate: "",
+        priority: "",
+        dataType: "",
+        expId: "",
+      }
+      this.selectData = {
+        assignee: null,
+        candidateUsers: null,
+        candidateGroups: null,
+        exp: null,
+      }
+      // 娴佺▼鑺傜偣淇℃伅涓婂彇鍊�
+      for (let key in this.bpmnFormData) {
+        const value = this.modelerStore.element?.businessObject[key] || this.bpmnFormData[key];
+        this.$set(this.bpmnFormData, key, value);
+      }
+      console.log(this.bpmnFormData, "鍒濆鍖栨暟鎹�")
+      // 浜哄憳銆佽鑹层�侀儴闂ㄤ俊鎭洖鏄�
+      this.checkValuesEcho(this.bpmnFormData);
+    },
+
+    // 鏇存柊鑺傜偣淇℃伅
+    updateElementTask(key) {
+      const taskAttr = Object.create(null);
+      taskAttr[key] = this.bpmnFormData[key] || "";
+      this.modelerStore.modeling.updateProperties(this.modelerStore.element, taskAttr);
+    },
+
+    // 鏇存柊鑷畾涔夋祦绋嬭妭鐐�/鍙傛暟淇℃伅
+    updateCustomElement(key, value) {
+      const taskAttr = Object.create(null);
+      taskAttr[key] = value;
+      this.modelerStore.modeling.updateProperties(this.modelerStore.element, taskAttr);
+    },
+
+    // 鏇存柊浜哄憳绫诲瀷
+    updateUserType(val) {
+      console.log(val, "浜哄憳绫诲瀷")
+      // 鍒犻櫎xml涓凡閫夋嫨鏁版嵁绫诲瀷鑺傜偣
+      this.deleteFlowAttar();
+      // 娓呴櫎宸查�変汉鍛樻暟鎹�
+      if (val === "candidateDeptGroups") {
+        val = "candidateGroups"
+        this.delegationDeptSelect = []  // 閮ㄩ棬
+      } else if (val === "candidateGroups") {
+        this.delegationRoleSelect = []  // 瑙掕壊
+      } else if (val === "assignee" || val === "candidateUsers") {
+        this.delegationUserSelect = []   // 鎸囧畾鐢ㄦ埛/鍊欓�夌敤鎴�
+      }
+      this.expSelect = null  // 琛ㄨ揪寮忛噸缃负绌�
+      this.selectData = {
+        assignee: null,
+        candidateUsers: null,
+        candidateGroups: null,
+        exp: null,
+      }
+      this.typeButDisable = false
+      this.expButDisable = false
+      // 鍐欏叆userType鑺傜偣淇℃伅鍒皒ml
+      this.updateCustomElement('userType', val);
+    },
+
+    // 璁捐鍣ㄥ彸渚ц〃鍗曟暟鎹洖鏄�
+    checkValuesEcho(formData) {
+      if (formData.expId) {
+        this.getExpList(formData.expId);
+        this.typeButDisable = true
+        this.expButDisable = false
+      } else {
+        this.typeButDisable = false
+        this.expSelect = null
+        if ("candidateGroups" === formData.userType || "candidateDeptGroups" === formData.userType) {
+          this.getRoleOrDeptReview(formData.candidateGroups)
+        } else {
+          this.getUserList(formData[formData.userType], formData.userType);
+        }
+      }
+    },
+
+    // 鑾峰彇琛ㄨ揪寮忎俊鎭�
+    getExpList(expId) {
+      this.expSelect = this.modelerStore.expList?.find(item => item.id.toString() === expId);
+    },
+
+    // 鑾峰彇浜哄憳淇℃伅
+    getUserList(val, key) {
+      if (StrUtil.isNotBlank(val)) {
+        this.expButDisable = true
+        this.typeButDisable = false
+        if ('assignee' === key) {
+          const uList = this.modelerStore.userList.filter(item => item.userId == val);
+          this.delegationUserSelect = uList
+        } else {
+          const newArr = this.modelerStore.userList?.filter(i => val.split(',').includes(i.userId.toString()))
+          this.delegationUserSelect = newArr
+        }
+      } else {
+        this.expButDisable = false
+        this.delegationUserSelect = []
+      }
+    },
+
+    // 鑾峰彇瑙掕壊淇℃伅
+    getRoleOrDeptReview(ids) {
+      this.delegationDeptSelect = []
+      this.delegationRoleSelect = []
+      if (StrUtil.isNotBlank(ids)) {
+        this.expButDisable = true
+        this.typeButDisable = false
+        // 鏍规嵁id绛涢�夊嚭鏄鑹茶繕鏄儴闂�
+        const roleAndDeptIds = ids.split(",");
+        const deptIds = roleAndDeptIds.filter(item => item.includes("dept"));
+        const roleIds = roleAndDeptIds.filter(item => !item.includes("dept"));
+
+        if (roleIds && roleIds.length > 0) {  // 瑙掕壊
+          const targetRoleList = this.modelerStore.roleList?.filter(i => roleIds.includes(i.roleId.toString()))
+          this.delegationRoleSelect = targetRoleList;
+          this.bpmnFormData.userType = "candidateGroups"
+        }
+        if (deptIds && deptIds.length > 0){ // 閮ㄩ棬
+          const targetDeptList = this.modelerStore.deptList?.filter(i => deptIds.includes(i.id))
+          this.delegationDeptSelect = targetDeptList
+          this.bpmnFormData.userType = "candidateDeptGroups"
+        }
+      } else {
+        this.expButDisable = false
+        this.delegationDeptSelect = []
+        this.delegationRoleSelect = []
+      }
+    },
+
+    // ------ 娴佺▼瀹℃壒浜哄憳淇℃伅寮瑰嚭妗� start---------
+
+
+    // 澶勭悊浜哄憳鍥炴樉
+    handleSelectData(key, value) {
+      for (let oldKey in this.selectData) {
+        if (key !== oldKey) {
+          this.$set(this.selectData, oldKey, null);
+        } else {
+          this.$set(this.selectData, oldKey, value);
+        }
+      }
+    },
+
+    /*琛ㄨ揪寮忛�変腑璧嬪��*/
+    checkExpComplete() {
+      this.expVisible = false;
+    },
+
+    // 鍒犻櫎鑺傜偣
+    deleteFlowAttar() {
+      delete this.modelerStore.element.businessObject[`dataType`]
+      delete this.modelerStore.element.businessObject[`expId`]
+      delete this.modelerStore.element.businessObject[`assignee`]
+      delete this.modelerStore.element.businessObject[`candidateUsers`]
+      delete this.modelerStore.element.businessObject[`candidateGroups`]
+    },
+
+  }
+}
+</script>
+<style scoped>
+.select-tag {
+  margin-right: 3px;
+}
+</style>
diff --git a/src/components/Process/panel/formPanel.vue b/src/components/Process/panel/formPanel.vue
index c1d4f14..d5016c2 100644
--- a/src/components/Process/panel/formPanel.vue
+++ b/src/components/Process/panel/formPanel.vue
@@ -39,7 +39,6 @@
   watch: {
     id: {
       handler(newVal) {
-        console.log("鏂扮殑id鍊硷細", newVal)
         if (StrUtil.isNotBlank(newVal)) {
           this.init()
         }
@@ -59,12 +58,9 @@
     // 鏂规硶鍖�
     resetFlowForm() {
       this.bpmnFormData.formKey = this.modelerStore.element.businessObject.formKey;
-      console.log(this.bpmnFormData.formKey, "formKey!!")
     },
 
     updateElementFormKey(val) {
-      console.log(val, "鏁版嵁鏀瑰彉")
-      console.log(this.bpmnFormData.formKey, "鏁版嵁鏀瑰彉")
       this.init()
       if (StrUtil.isBlank(val)) {
         delete this.modelerStore.element.businessObject[`formKey`]
@@ -80,7 +76,6 @@
           item.formId = item.formId.toString();
         })
         this.formList = res.data;
-        console.log("琛ㄥ崟淇℃伅锛�", this.formList)
       })
     }
   }
diff --git a/src/components/flow/Dept/MyDept.vue b/src/components/flow/Dept/MyDept.vue
index ea0b709..27abe9a 100644
--- a/src/components/flow/Dept/MyDept.vue
+++ b/src/components/flow/Dept/MyDept.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      :title="`閫夋嫨鍊欓�夐儴闂╜"
+      :title="title"
       :visible.sync="show"
       width="65%"
       :destroy-on-close="true"
@@ -34,6 +34,11 @@
     show: {
       required: true,
       type: Boolean
+    },
+    title: {
+      type: String,
+      required: false,
+      default: '鍊欓�夐儴闂�'
     },
     checkeds: {
       required: true
@@ -82,7 +87,7 @@
     },
     handleCheckChange(data, checked, indeterminate) {
       if (checked) {
-        if (this.checkList.indexOf(data) === -1) {
+        if (this.checkList.every(item => item.id !== data.id)) {
           this.checkList.push(data)
         }
       } else {
diff --git a/src/components/flow/Expression/index.vue b/src/components/flow/Expression/index.vue
index 7c9776c..973e5cb 100644
--- a/src/components/flow/Expression/index.vue
+++ b/src/components/flow/Expression/index.vue
@@ -54,7 +54,7 @@
   props: {
     // 鍥炴樉鏁版嵁浼犲��
     selectValues: {
-      type: Number | String,
+      type: Object,
       default: null,
       required: false
     }
@@ -93,8 +93,10 @@
   watch: {
     selectValues: {
       handler(newVal) {
-        if (StrUtil.isNotBlank(newVal)) {
-          this.radioSelected = newVal
+        if (newVal) {
+          this.radioSelected = newVal.id
+        } else {
+          this.radioSelected = null
         }
       },
       immediate: true,
diff --git a/src/components/flow/Role/MyRole.vue b/src/components/flow/Role/MyRole.vue
index f2027a0..e5e9cd7 100644
--- a/src/components/flow/Role/MyRole.vue
+++ b/src/components/flow/Role/MyRole.vue
@@ -1,11 +1,12 @@
 <template>
   <div>
     <el-dialog
-      :title="`閫夋嫨鍊欓�夎鑹瞏"
+      :title="title"
       :visible.sync="show"
       width="65%"
       :destroy-on-close="true"
       :close-on-click-modal="false"
+      :modal-append-to-body="false"
       :modal="false"
       :before-close="close">
       <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
@@ -14,6 +15,7 @@
             v-model="queryParams.roleName"
             placeholder="璇疯緭鍏ヨ鑹插悕绉�"
             clearable
+            @clear="handleQuery"
             style="width: 240px"
             @keyup.enter.native="handleQuery"
           />
@@ -24,13 +26,13 @@
         </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">
+      <el-table ref="dataTable" :row-key="getRowKey" v-loading="loading"  :data="roleList" @selection-change="handleMultipleRoleSelect">
+        <el-table-column type="selection" width="50" align="center"  :reserve-selection="true"/>
+        <el-table-column label="瑙掕壊缂栧彿" prop="roleId"/>
+        <el-table-column label="瑙掕壊鍚嶇О" prop="roleName" :show-overflow-tooltip="true"/>
+        <el-table-column label="鏉冮檺瀛楃" prop="roleKey" :show-overflow-tooltip="true"/>
+        <el-table-column label="鏄剧ず椤哄簭" prop="roleSort"/>
+        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime">
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.createTime) }}</span>
           </template>
@@ -68,6 +70,11 @@
       required: true,
       default: true
     },
+    title: {
+      type: String,
+      required: false,
+      default: '鍊欓�夎鑹�'
+    },
     // 鍥炴樉鏁版嵁浼犲��
     selectValues: {
       type: Array,
@@ -79,22 +86,12 @@
     return {
       // 閬僵灞�
       loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
       // 瑙掕壊琛ㄦ牸鏁版嵁
       roleList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -103,72 +100,30 @@
         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() {
+    console.log("鎴戝鍦ㄤ簡")
     this.getList();
   },
   methods: {
+    // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁
+    getRowKey (row) {
+      console.log(row.roleId)
+      return row.roleId
+    },
     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 = []
-      }
+
+      this.selectRoleList = val
+      console.log("鎺ユ敹鍒扮殑鏁版嵁", this.selectRoleList)
+      this.$nextTick(() => {
+        this.selectRoleList.forEach(check => {
+          this.$refs.dataTable.toggleRowSelection(check, true)
+        })
+      });
     },
     close() {
       this.$emit("close")
@@ -187,8 +142,8 @@
       );
     },
     // 澶氶�夋閫変腑鏁版嵁
-    handleMultipleRoleSelect(selection) {
-      this.selectRoleList = selection
+    handleMultipleRoleSelect(rows) {
+      this.selectRoleList = [...new Set(rows)]
     },
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
diff --git a/src/components/flow/User/MultUser.vue b/src/components/flow/User/MultUser.vue
index c4e18b7..00406bb 100644
--- a/src/components/flow/User/MultUser.vue
+++ b/src/components/flow/User/MultUser.vue
@@ -1,11 +1,12 @@
 <template>
   <div>
     <el-dialog
-      :title="`閫夋嫨杞姙鎺ユ敹浜哄憳`"
+      :title="title"
       :visible.sync="show"
       width="65%"
       :destroy-on-close="true"
       :close-on-click-modal="false"
+      :modal-append-to-body="false"
       :modal="false"
       :before-close="close">
       <el-row :gutter="20">
@@ -38,11 +39,12 @@
         <!--鐢ㄦ埛鏁版嵁-->
         <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-form-item label="鐢ㄦ埛鍚嶇О" prop="nickName">
               <el-input
-                v-model="queryParams.userName"
-                placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
+                v-model="queryParams.nickName"
+                placeholder="璇疯緭鍏ョ敤鎴峰鍚�"
                 clearable
+                @clear="handleQuery"
                 style="width: 150px"
                 @keyup.enter.native="handleQuery"
               />
@@ -53,7 +55,7 @@
             </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 type="selection" align="center" :reserve-selection="true"/>
             <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" />
@@ -94,9 +96,14 @@
       required: true,
       type: Boolean
     },
+    title: {
+      type: String,
+      required: false,
+      default: '鍊欓�変汉鍛�'
+    },
     // 鍥炴樉鏁版嵁浼犲��
     selectUserList: {
-      type: Number,
+      type: Array,
       default: null,
       required: false
     },
@@ -104,27 +111,19 @@
   },
   data() {
     return {
-      innerSelected: [],
+      innerSelected: [], // 閫変腑
       // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
+      loading: false,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
       userList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
       // 閮ㄩ棬鏍戦�夐」
       deptOptions: undefined,
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
       // 閮ㄩ棬鍚嶇О
       deptName: undefined,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
       defaultProps: {
         children: "children",
         label: "label"
@@ -133,7 +132,7 @@
       queryParams: {
         pageNum: 1,
         pageSize: 5,
-        userName: undefined,
+        nickName: undefined,
         phonenumber: undefined,
         status: undefined,
         deptId: undefined
@@ -148,7 +147,6 @@
         { key: 5, label: `鐘舵�乣, visible: true },
         { key: 6, label: `鍒涘缓鏃堕棿`, visible: true }
       ],
-      radioSelected: 0, // 鍗曢�夋浼犲��
     };
   },
   watch: {
@@ -156,46 +154,24 @@
     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();
+    this.getList();
   },
   methods: {
+    // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁
+    getRowKey (row) {
+      return row.userId
+    },
     setChecked(val) {
+      this.innerSelected = 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)
-            }
-          })
+          this.$refs.dataTable.toggleRowSelection(check, true)
         })
       });
+
     },
     /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
     getList() {
@@ -213,10 +189,6 @@
         this.deptOptions = response.data;
       });
     },
-    // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁
-    getRowKey (row) {
-      return row.id
-    },
     // 绛涢�夎妭鐐�
     filterNode(value, data) {
       if (!value) return true;
@@ -229,11 +201,17 @@
     },
     // 浼犻�掗�変腑鍊�
     handleUserSelect(selectionList) {
-      console.log("閫変腑鍊�", selectionList)
-      this.innerSelected = selectionList
+
+      console.log("鍘熷厛鍊�", this.innerSelected)
+      this.innerSelected = [...new Set(selectionList)]
+      console.log("閫変腑鍊�", this.innerSelected)
     },
     getSelected() {
       this.$emit('submit', this.innerSelected);
+
+    },
+    close() {
+      this.$emit("close")
     },
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
@@ -248,9 +226,7 @@
       this.$refs.tree.setCurrentKey(null);
       this.handleQuery();
     },
-    close() {
-      this.$emit("close")
-    },
+
   }
 };
 </script>
diff --git a/src/components/flow/User/SingleUser.vue b/src/components/flow/User/SingleUser.vue
index e8cf64d..d779e71 100644
--- a/src/components/flow/User/SingleUser.vue
+++ b/src/components/flow/User/SingleUser.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog
-      :title="`閫夋嫨杞姙鎺ユ敹浜哄憳`"
+      :title="title"
       :visible.sync="show"
       width="65%"
       :destroy-on-close="true"
@@ -38,11 +38,12 @@
         <!--鐢ㄦ埛鏁版嵁-->
         <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-form-item label="鐢ㄦ埛濮撳悕" prop="nickName">
               <el-input
-                v-model="queryParams.userName"
-                placeholder="璇疯緭鍏ョ敤鎴峰悕绉�"
+                v-model="queryParams.nickName"
+                placeholder="璇疯緭鍏ョ敤鎴峰鍚�"
                 clearable
+                @clear="handleQuery"
                 style="width: 150px"
                 @keyup.enter.native="handleQuery"
               />
@@ -53,7 +54,7 @@
             </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 type="selection" :reserve-selection="true"/>
             <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" />
@@ -94,6 +95,11 @@
       required: true,
       type: Boolean
     },
+    title: {
+      type: String,
+      required: false,
+      default: '鎸囧畾浜哄憳'
+    },
     // 鍥炴樉鏁版嵁浼犲��
     selectUser: {
       default: null,
@@ -106,24 +112,16 @@
       innerSelected: null,
       // 閬僵灞�
       loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
       userList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
       // 閮ㄩ棬鏍戦�夐」
       deptOptions: undefined,
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
       // 閮ㄩ棬鍚嶇О
       deptName: undefined,
-      // 琛ㄥ崟鍙傛暟
-      form: {},
       defaultProps: {
         children: "children",
         label: "label"
@@ -132,7 +130,7 @@
       queryParams: {
         pageNum: 1,
         pageSize: 5,
-        userName: undefined,
+        nickName: undefined,
         phonenumber: undefined,
         status: undefined,
         deptId: undefined
@@ -147,7 +145,6 @@
         { key: 5, label: `鐘舵�乣, visible: true },
         { key: 6, label: `鍒涘缓鏃堕棿`, visible: true }
       ],
-      radioSelected: 0, // 鍗曢�夋浼犲��
       selectUserList: [] // 鍥炴樉鏁版嵁浼犲��
     };
   },
@@ -156,64 +153,21 @@
     deptName(val) {
       this.$refs.tree.filter(val);
     },
-    selectUser: {
-      deep: true,
-      handler(newVal) {
-        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;
-        }
-      },
-    },
-    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() {
     this.getList();
     this.getDeptTree();
   },
   methods: {
+    // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁
+    getRowKey (row) {
+      return row.userId
+    },
     setChecked(val) {
-      if (val) {
-        this.$nextTick(() => {
-          this.$refs.dataTable.clearSelection();
-          this.userList.forEach(item => {
-            if (val.userId === item.userId) {
-              this.innerSelected = item
-              this.$refs.dataTable.toggleRowSelection(item)
-            }
-          })
-        });
-      } else {
-        this.innerSelected = null
-      }
+      this.innerSelected = val
+      this.$nextTick(() => {
+        this.$refs.dataTable.toggleRowSelection(val, true)
+      });
     },
     /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
     getList() {
@@ -230,10 +184,6 @@
       deptTreeSelect().then(response => {
         this.deptOptions = response.data;
       });
-    },
-    // 淇濆瓨閫変腑鐨勬暟鎹甶d,row-key灏辨槸瑕佹寚瀹氫竴涓猭ey鏍囪瘑杩欎竴琛岀殑鏁版嵁
-    getRowKey (row) {
-      return row.id
     },
     // 绛涢�夎妭鐐�
     filterNode(value, data) {
diff --git a/src/components/flow/User/index.vue b/src/components/flow/User/index.vue
index 33dcb57..5109608 100644
--- a/src/components/flow/User/index.vue
+++ b/src/components/flow/User/index.vue
@@ -245,8 +245,6 @@
         this.$nextTick(() => {
           this.$refs.dataTable.clearSelection();
           this.userList.forEach(item => {
-            console.log("鍗曢�夊�硷細", this.radioSelected)
-            console.log(parseInt(this.radioSelected) === item.userId)
             if (parseInt(this.radioSelected) === item.userId) {
               this.$refs.dataTable.toggleRowSelection(item)
             }
diff --git a/src/views/components/noticeTable.vue b/src/views/components/noticeTable.vue
index 319ebda..4789ab9 100644
--- a/src/views/components/noticeTable.vue
+++ b/src/views/components/noticeTable.vue
@@ -1,6 +1,6 @@
 <template>
-    <div>
-        <div class="flex justify-between mb-[15px]">
+    <div style="position: relative">
+        <div class="flex justify-between mb-[15px]" style="align-items: center;margin-bottom: 5px">
             <div class="block mb-3 font-semibold fonts">寰呭姙浜嬮」</div>
             <div class="flex text-[12px]">
                 <div
@@ -26,7 +26,7 @@
                 color: '#454B5E',
                 fontSize: '12px'
             }"
-            height="280"
+            min-height="280"
             max-height="280"
         >
             <el-table-column
@@ -37,6 +37,7 @@
                 :min-width="column.minWidth"
                 :prop="column.prop"
                 :show-overflow-tooltip="true"
+                :formatter="column.formatter"
             >
             </el-table-column>
 
@@ -44,35 +45,39 @@
                 align="center"
                 fixed="right"
                 label="鎿嶄綔"
-                min-width="150"
+                min-width="90"
             >
-                <template #default="scope">
+                <template slot-scope="scope">
                     <el-button
-                        plain
                         size="small"
-                        type="primary"
+                        type="text"
                         @click="handleDetail(scope.row)"
                     >
                         鏌ョ湅</el-button
                     >
                     <el-button
-                        plain
                         size="small"
-                        type="primary"
+                        type="text"
                         @click="handleUpdate(scope.row)"
                     >
-                        澶勭疆</el-button
+                        澶勭悊</el-button
                     >
                 </template>
             </el-table-column>
         </el-table>
-        <pagination
+      <div style="position: absolute; bottom: 0px;width: 100%;">
+        <div style="width: 100%;display: flex;flex-direction: row-reverse;align-items: center">
+          <pagination
+            style="width: 100%"
             v-show="total >= 0"
+            :page-sizes="[4]"
             :limit="queryParams.pageSize"
             :page="queryParams.pageNum"
             :total="total"
             @pagination="getList"
-        />
+          />
+        </div>
+      </div>
     </div>
 </template>
 <script>
@@ -85,7 +90,7 @@
             total: 0,
             queryParams: {
                 pageNum: 1,
-                pageSize: 5,
+                pageSize: 4,
             },
             tableData: [],
             currentTableHeaders: [],
@@ -93,11 +98,25 @@
                 { label: "娴佺▼鐜妭", prop: "taskName", minWidth: 150, align: "left" },
                 {
                     label: "鐢宠椤圭洰",
-                    prop: "processName",
+                    prop: "projectName",
                     minWidth: 150,
                     align: "left",
                 },
-                { label: "瀹℃壒浜�", prop: "handlerName", minWidth: 100, align: "left" },
+                {
+                  label: "澶勭悊浜�",
+                  prop: "handlerName",
+                  minWidth: 100,
+                  align: "left",
+                  formatter: (row) => {
+                    if (row.handlerType === 'USER') {
+                      return row.handlerName.join('銆�')
+                    } else if (row.handlerType === 'DEPT') {
+                      return row.handlerUnitName.join('銆�')
+                    } else if (row.handlerType === 'ROLE') {
+                      return row.handlerUnitName.join('銆�')
+                    }
+                  }
+                },
                 { label: "瀹屾垚鎯呭喌", prop: "taskStatus", minWidth: 143, align: "left" },
                 {
                     label: "鍓╀綑鏃堕棿",
@@ -221,10 +240,13 @@
 
 <style lang="scss" scoped>
 .tab {
-    padding: 8px;
+    padding: 6px;
     border: 1px solid #dbdeea;
     cursor: pointer;
     width: 72px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
 }
 
 .active {
diff --git a/src/views/components/tidingsTable.vue b/src/views/components/tidingsTable.vue
index 99d3b80..8c88212 100644
--- a/src/views/components/tidingsTable.vue
+++ b/src/views/components/tidingsTable.vue
@@ -1,6 +1,6 @@
 <template>
-    <div>
-        <div class="flex justify-between mb-[15px]">
+    <div style="position: relative">
+        <div class="flex justify-between mb-[15px]" style="align-items: center;margin-bottom: 5px">
             <div class="block mb-3 font-semibold fonts">娑堟伅涓績</div>
             <div class="flex text-[12px]">
                 <div
@@ -24,7 +24,7 @@
                 color: '#454B5E',
                 fontSize: '12px'
             }"
-            height="280"
+            min-height="280"
             max-height="280"
         >
             <el-table-column
@@ -65,9 +65,8 @@
             >
                 <template #default="scope">
                     <el-button
-                        plain
                         size="small"
-                        type="primary"
+                        type="text"
                         @click="handleDetail(scope.row)"
                     >
                         鏌ョ湅</el-button
@@ -76,13 +75,19 @@
                 </template>
             </el-table-column>
         </el-table>
-        <pagination
+      <div style="position: absolute; bottom: 0px;width: 100%;">
+        <div style="width: 100%;display: flex;flex-direction: row-reverse;align-items: center">
+          <pagination
+            style="width: 100%"
             v-show="total >= 0"
+            :page-sizes="[4]"
             :limit="queryParams.pageSize"
             :page="queryParams.pageNum"
             :total="total"
             @pagination="getList"
-        />
+          />
+        </div>
+      </div>
     </div>
 </template>
 <script>
@@ -95,7 +100,7 @@
             total: 0,
             queryParams: {
                 pageNum: 1,
-                pageSize: 10
+                pageSize: 4
             },
             tableData: [],
             tabs: [
@@ -190,10 +195,13 @@
 
 <style lang="scss" scoped>
 .tab {
-    padding: 8px;
+    padding: 6px;
     border: 1px solid #dbdeea;
     cursor: pointer;
     width: 72px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
 }
 
 .active {
@@ -255,7 +263,7 @@
     text-align: end;
 }
 ::v-deep .el-pagination .btn-prev .el-icon,
- ::v-deep .el-pagination .btn-next .el-icon 
+ ::v-deep .el-pagination .btn-next .el-icon
 {
     display: inline;
 }
diff --git a/src/views/flowable/definition/model.vue b/src/views/flowable/definition/model.vue
index bead3c6..3ef28fd 100644
--- a/src/views/flowable/definition/model.vue
+++ b/src/views/flowable/definition/model.vue
@@ -104,7 +104,6 @@
     /** 鎸囧畾娴佺▼鍔炵悊浜哄憳鍒楄〃 */
     getDataList() {
       userList().then(res => {
-        console.log(this.modelerStore, "dhg")
         this.modelerStore.userList = res.data;
       })
       roleList().then(res => {
diff --git a/src/views/flowable/task/myProcess/detail/index.vue b/src/views/flowable/task/myProcess/detail/index.vue
index baa1eae..9879bd8 100644
--- a/src/views/flowable/task/myProcess/detail/index.vue
+++ b/src/views/flowable/task/myProcess/detail/index.vue
@@ -9,17 +9,41 @@
       <el-tabs  tab-position="top" v-model="activeName" @tab-click="handleClick">
         <!--琛ㄥ崟淇℃伅-->
         <el-tab-pane label="琛ㄥ崟淇℃伅" name="1">
+          <!--鍒濆鍖栨祦绋嬪姞杞借〃鍗曚俊鎭�-->
           <el-col :span="16" :offset="4">
             <div v-if="formDataList && formDataList.length > 0">
-              <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp">
-                <div v-if="formDataObj.current" style="margin-bottom: 15px;color: #409eff">褰撳墠闃舵锛�<span style="color: red">{{formDataObj.beforeNodeName}}</span></div>
-                <div v-else style="margin-bottom: 15px;color: #409eff">鍓嶇疆闃舵锛�<span style="color: #d5904b">{{formDataObj.beforeNodeName}}</span></div>
-                <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
-                  <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+              <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp" style="position: relative">
+                <div v-if="formDataObj.current">
+                  <div style="margin-bottom: 15px;color: #E6A23C">褰撳墠闃舵锛�<span style="color: #409EFF">{{formDataObj.beforeNodeName}}</span></div>
+                  <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
+                    <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+                  </div>
+                  <div v-else>
+                    <el-alert
+                      title="褰撳墠鑺傜偣鏈粦瀹氳〃鍗�"
+                      type="info"
+                      :closable="false"
+                    >
+                    </el-alert>
+                  </div>
                 </div>
-                <div v-else>
+                <div v-else-if="formDataList.length > 1">
+                  <div style="margin-bottom: 15px;color: #E6A23C">鍓嶇疆闃舵锛�<span style="color: #F56C6C">{{formDataObj.beforeNodeName}}</span></div>
+                  <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
+                    <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+                  </div>
+                  <div v-else>
+                    <el-alert
+                      title="鍓嶇疆鑺傜偣鏈粦瀹氳〃鍗�"
+                      type="info"
+                      :closable="false"
+                    >
+                    </el-alert>
+                  </div>
+                </div>
+                <div v-if="formDataList.length <= 1">
                   <el-alert
-                    title="鑺傜偣鏃犺〃鍗曟暟鎹�"
+                    title="涓嶅瓨鍦ㄥ墠缃妭鐐�"
                     type="info"
                     :closable="false"
                   >
@@ -27,22 +51,7 @@
                 </div>
               </div>
             </div>
-            <div v-else>
-              <el-alert
-                title="褰撳墠鑺傜偣鏃犺〃鍗曟暟鎹�"
-                type="info"
-                :closable="false"
-              >
-              </el-alert>
-              <el-alert
-                style="margin-top: 20px"
-                title="鍓嶇疆鑺傜偣鏃犺〃鍗曟暟鎹�"
-                type="info"
-                :closable="false"
-              >
-              </el-alert>
-            </div>
-         </el-col>
+          </el-col>
         </el-tab-pane>
         <!--娴佺▼娴佽浆璁板綍-->
         <el-tab-pane label="娴佽浆璁板綍" name="2">
diff --git a/src/views/flowable/task/myProcess/send/index.vue b/src/views/flowable/task/myProcess/send/index.vue
index 76f7c37..1fdc23e 100644
--- a/src/views/flowable/task/myProcess/send/index.vue
+++ b/src/views/flowable/task/myProcess/send/index.vue
@@ -10,21 +10,56 @@
         <!--琛ㄥ崟淇℃伅-->
         <el-tab-pane label="琛ㄥ崟淇℃伅" name="1">
           <!--鍒濆鍖栨祦绋嬪姞杞借〃鍗曚俊鎭�-->
-          <el-col :span="16" :offset="4" v-if="formDataList && formDataList.length > 0">
-            <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp" style="position: relative">
-<!--     鍓嶇疆鑺傜偣鍙┏鍥�         -->
-              <div v-if="!formDataObj.current" style="position: absolute; top: 4px; right: 4px">
-                <el-button type="danger" size="small" @click="openRejectTask(formDataObj.beforeNodeDefId)">椹� 鍥�</el-button>
+          <el-col :span="16" :offset="4">
+            <div v-if="formDataList && formDataList.length > 0">
+              <div v-for="(formDataObj, index) in formDataList" :key="index" class="form-warp" style="position: relative">
+                <div v-if="formDataObj.current">
+                  <!--     褰撳墠鑺傜偣鍙崗鍚屻�佽浆鍔炵瓑鎿嶄綔         -->
+                  <div style="position: absolute; top: 4px; right: 4px; display: flex;justify-content: center; align-items: center;">
+                    <el-button size="small" type="primary" @click="submitForm">纭骞舵彁浜�</el-button>
+                    <el-button size="small" type="primary" disabled @click="submitForm">鍗忓悓鍔炵悊(鍔熻兘寮�鍙戜腑)</el-button>
+                    <el-button size="small" type="primary" @click="openDelegation(formDataList[0].beforeNodeName)">杞姙</el-button>
+                  </div>
+                  <div style="margin-bottom: 15px;color: #E6A23C">褰撳墠闃舵锛�<span style="color: #409EFF">{{formDataObj.beforeNodeName}}</span></div>
+                  <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
+                    <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+                  </div>
+                  <div v-else>
+                    <el-alert
+                      title="褰撳墠鑺傜偣鏈粦瀹氳〃鍗�"
+                      type="info"
+                      :closable="false"
+                    >
+                    </el-alert>
+                  </div>
+                </div>
+                <div v-else-if="formDataList.length > 1">
+                  <!--     鍓嶇疆鑺傜偣鍙┏鍥�         -->
+                  <div style="position: absolute; top: 4px; right: 4px">
+                    <el-button type="danger" size="small" @click="openRejectTask(formDataObj.beforeNodeDefId)">椹� 鍥�</el-button>
+                  </div>
+                  <div style="margin-bottom: 15px;color: #E6A23C">鍓嶇疆闃舵锛�<span style="color: #F56C6C">{{formDataObj.beforeNodeName}}</span></div>
+                  <div v-if="formDataObj.formJson !== null && formDataObj.formJson !== ''">
+                    <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
+                  </div>
+                  <div v-else>
+                    <el-alert
+                      title="鍓嶇疆鑺傜偣鏈粦瀹氳〃鍗�"
+                      type="info"
+                      :closable="false"
+                    >
+                    </el-alert>
+                  </div>
+                </div>
+                <div v-if="formDataList.length <= 1">
+                  <el-alert
+                    title="涓嶅瓨鍦ㄥ墠缃妭鐐�"
+                    type="info"
+                    :closable="false"
+                  >
+                  </el-alert>
+                </div>
               </div>
-<!--     褰撳墠鑺傜偣鍙崗鍚屻�佽浆鍔炵瓑鎿嶄綔         -->
-              <div v-else style="position: absolute; top: 4px; right: 4px; display: flex;justify-content: center; align-items: center;">
-                <el-button size="small" type="primary" @click="submitForm">纭骞舵彁浜�</el-button>
-                <el-button size="small" type="primary" disabled @click="submitForm">鍗忓悓鍔炵悊(鍔熻兘寮�鍙戜腑)</el-button>
-                <el-button size="small" type="primary" @click="openDelegation(formDataList[0].beforeNodeName)">杞姙</el-button>
-              </div>
-              <div v-if="formDataObj.current" style="margin-bottom: 15px;color: #E6A23C">褰撳墠闃舵锛�<span style="color: #409EFF">{{formDataObj.beforeNodeName}}</span></div>
-              <div v-else style="margin-bottom: 15px;color: #E6A23C">鍓嶇疆闃舵锛�<span style="color: #F56C6C">{{formDataObj.beforeNodeName}}</span></div>
-              <v-form-render  :form-data="formDataObj.formJson" :ref="'form' + index"/>
             </div>
           </el-col>
         </el-tab-pane>
@@ -84,13 +119,13 @@
           <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="鍊欓�夌敤鎴�" value="USER"></el-option>
+              <el-option label="鍊欓�変汉鍛�" value="USER"></el-option>
               <el-option label="鍊欓�夐儴闂�" value="DEPT"></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">
-            <MyDept ref="dept" :checkeds="delegationDeptSelect" :show="deptShow" @close="closeDept" @submit="getDeptSelect"/>
+            <MyDept ref="dept" :checkeds="delegationDeptSelect" :title="`閫夋嫨杞姙閮ㄩ棬`" :show="deptShow" @close="closeDept" @submit="getDeptSelect" :key="deptKey"/>
             <div style="display: flex;align-items: center">
               <div>
                 <el-tag v-for="dept in delegationDeptSelect" :key="dept.id + 'zxc'" type="info" closable @close="removeDept(dept)">{{dept.label}}</el-tag>
@@ -98,8 +133,8 @@
               <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="closeSingleUser" @submit="getSingleUserSelect"/>
+          <el-form-item v-if="delegationForm.peopleType === 'FIX_USER'" label="鎸囧畾浜哄憳" prop="targetId">
+            <single-user ref="singleUser" :select-user="delegationForm.targetId" :title="`閫夋嫨杞姙鎺ユ敹浜哄憳(鍗曚汉)`" :show="singleUserShow" @close="closeSingleUser" @submit="getSingleUserSelect" :key="singleUserKey"/>
             <div style="display: flex;align-items: center">
               <div>
                 <el-tag v-for="user in delegationUserSelect" :key="user.userId + 'abc'" type="info" closable @close="removeSingleUser(user)">{{user.nickName}}</el-tag>
@@ -107,8 +142,8 @@
               <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"/>
+          <el-form-item v-if="delegationForm.peopleType === 'USER'" label="鍊欓�変汉鍛�" prop="targetId">
+            <mult-user ref="multUser" :select-user="delegationUserSelect" :title="`閫夋嫨杞姙鎺ユ敹浜哄憳(鍙浜�)`" :show="multUserShow" @close="closeMultUser" @submit="getMultUserSelect" :key="multUserKey"/>
             <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>
@@ -117,7 +152,7 @@
             </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"/>
+            <my-role ref="role" :select-values="delegationRoleSelect" :title="`閫夋嫨杞姙瑙掕壊`" :show="roleShow" @close="closeRole" @submit="getRoleSelect" :key="roleKey"/>
             <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>
@@ -128,7 +163,7 @@
         </el-form>
       </div>
       <div class="opBut">
-        <el-button type="danger" size="small" @click="delegation">杞姙</el-button>
+        <el-button type="danger" size="small" @click="delegation">杞� 鍔�</el-button>
       </div>
     </el-dialog>
 
@@ -160,6 +195,10 @@
   props: {},
   data() {
     return {
+      roleKey: 'role',
+      deptKey: 'dept',
+      multUserKey: 0,
+      singleUserKey: 'single',
       projectName: '',
       flowName: '',
       roleShow: false, // 瑙掕壊缁勬樉绀�
@@ -306,6 +345,7 @@
       }
     },
     editDept() {
+      this.deptKey += '1'
       this.$nextTick(() => {
         this.$refs.dept.setCheckList(this.delegationDeptSelect)
       })
@@ -313,6 +353,7 @@
     },
     editSingleUser() {
       if (this.delegationUserSelect && this.delegationUserSelect.length > 0) {
+        this.singleUserKey += '1'
         this.$nextTick(() => {
           this.$refs.singleUser.setChecked(this.delegationUserSelect[0])
         })
@@ -321,6 +362,7 @@
     },
     editRole() {
       if (this.delegationRoleSelect && this.delegationRoleSelect.length > 0) {
+        this.roleKey += '1'
         this.$nextTick(() => {
           this.$refs.role.setChecked(this.delegationRoleSelect)
         })
@@ -329,6 +371,7 @@
     },
     editMultUser() {
       if (this.delegationForm.targetId) {
+        this.multUserKey += 1
         this.$nextTick(() => {
           this.$refs.multUser.setChecked(this.delegationUserSelect)
         })
@@ -339,8 +382,11 @@
       if (deptList && deptList.length > 0) {
         this.delegationForm.targetId = deptList.map(item => item.id).join(",")
         this.delegationDeptSelect = deptList
+      } else {
+        this.delegationDeptSelect = []
       }
       this.deptShow = false
+      this.deptKey += 1
     },
     getMultUserSelect(userList) {
       if (userList && userList.length > 0) {
@@ -351,6 +397,7 @@
         this.delegationUserSelect = []
       }
       this.multUserShow = false
+      this.multUserKey += 1
     },
     getRoleSelect(roleList) {
       if (roleList && roleList.length > 0) {
@@ -361,6 +408,7 @@
         this.delegationRoleSelect = []
       }
       this.roleShow = false
+      this.roleKey += '1'
     },
     getSingleUserSelect(user) {
       if (user) {
@@ -371,18 +419,23 @@
         this.delegationUserSelect = []
       }
       this.singleUserShow = false
+      this.singleUserKey += '1'
     },
     closeDept() {
       this.deptShow = false
+      this.deptKey += '1'
     },
     closeSingleUser() {
       this.singleUserShow = false
+      this.singleUserKey += '1'
     },
     closeRole() {
       this.roleShow = false
+      this.roleKey += '1'
     },
     closeMultUser() {
       this.multUserShow = false
+      this.multUserKey += 1
     },
     openDelegation(taskName) {
       this.delegationForm.taskName = taskName
@@ -415,14 +468,15 @@
         if (this.formDataList && this.formDataList.length > 0) {
           this.$nextTick(() => {
             this.formDataList.forEach((formDataObj, index) => {
-              console.log("琛ㄥ崟鏁版嵁鍒楄〃", formDataObj.formJson)
               let that = this
-              console.log(eval("that.$refs.form" +index)[0])
-              eval("that.$refs.form" +index)[0].setFormJson(formDataObj.formJsonObj.formJson);
-
-              eval("that.$refs.form" +index)[0].setFormData(formDataObj.formJsonObj);
+              if (formDataObj.formJsonObj) {
+                eval("that.$refs.form" +index)[0].setFormJson(formDataObj.formJsonObj.formJson);
+                eval("that.$refs.form" +index)[0].setFormData(formDataObj.formJsonObj);
+              }
             })
-            this.formJson = this.formDataList[0].formJsonObj.formJson
+            if (this.formDataList[0].formJsonObj) {
+              this.formJson = this.formDataList[0].formJsonObj.formJson
+            }
           })
 
         }
@@ -446,7 +500,6 @@
         //   })
         // }
       }).catch(res => {
-        console.log("鎶ラ敊浜嗭細", res)
         this.goBack();
       })
     },
diff --git a/src/views/function/api/purchase.js b/src/views/function/api/purchase.js
index 1ef3bc0..34c094e 100644
--- a/src/views/function/api/purchase.js
+++ b/src/views/function/api/purchase.js
@@ -5,7 +5,6 @@
 
 export const getPurchaseApplyList = data => {
     const queryString = commonUtil.objectToQueryStr(data);
-    console.log("aaaaaaaaaaaaaaaaaaaaaaa2", queryString);
     return request({
         url: '/purchase/list',
         method: 'post',
@@ -47,4 +46,4 @@
         method: 'post',
         data: fd
     });
-}
\ No newline at end of file
+}
diff --git a/src/views/function/leaveApply.vue b/src/views/function/leaveApply.vue
index 15b9672..f93d294 100644
--- a/src/views/function/leaveApply.vue
+++ b/src/views/function/leaveApply.vue
@@ -100,7 +100,7 @@
                 <el-form-item label="閮ㄩ棬棰嗗">
                     <el-select v-model="form.deptleader">
                         <el-option
-                            v-for="(user, i) in userList" 
+                            v-for="(user, i) in userList"
                             :key="i"
                             :label="user.userName"
                             :value="user.userName"
@@ -170,7 +170,6 @@
     mounted() {
         this.getLeaveApplyListAndRender(this.searchParams)
         listUser().then(res => {
-            console.log("鑾峰彇鐢ㄦ埛", res);
             this.userList = res.rows;
         });
     },
@@ -184,7 +183,7 @@
                 const ids = this.selectionIds.join(",");
                 this.deleteByIdsAndRender(ids);
             });
-           
+
         },
         handleExport() {
             this.$confirm('纭畾瀵煎嚭鎵�鏈夋暟鎹悧锛�', {
diff --git a/src/views/index.vue b/src/views/index.vue
index b4cd025..513d018 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -83,13 +83,13 @@
         <div class="flex">
             <div class="flex_card">
                 <el-card>
-                    <NoticeTable style="height: 360px" />
+                    <NoticeTable style="height: 340px" />
                 </el-card>
             </div>
             <!-- 娑堟伅閫氱煡 -->
             <div class="flex_card">
                 <el-card>
-                    <TidingsTable style="height: 360px" />
+                    <TidingsTable style="height: 340px" />
                 </el-card>
             </div>
             <!-- 鍦板浘 -->
@@ -98,7 +98,7 @@
             <el-card>
                 <div>
                     <div class="search-form">
-                        <el-form :model="searchForm" inline>
+                        <el-form :model="searchForm" inline size="small">
                             <el-form-item label=" ">
                                 <el-input
                                     v-model="searchForm.name"
@@ -109,6 +109,8 @@
                             </el-form-item>
                             <el-form-item style="margin-right: 0px">
                                 <el-button
+                                    clearable
+                                    @clear="searchList"
                                     icon="Search"
                                     type="primary"
                                     @click="searchList"
@@ -206,7 +208,6 @@
             this.queryParams.endTime = this.timeMerge[1];
         },
         handleQuery() {
-            console.log(this.queryParams);
             const obj = {
                 startDate: this.queryParams.startTime,
                 endDate: this.queryParams.endTime,
diff --git a/src/views/projectEngineering/projectLibrary/projectDetails.vue b/src/views/projectEngineering/projectLibrary/projectDetails.vue
index 6204cbf..9332ed8 100644
--- a/src/views/projectEngineering/projectLibrary/projectDetails.vue
+++ b/src/views/projectEngineering/projectLibrary/projectDetails.vue
@@ -131,7 +131,6 @@
     },
     handleClick(tabTarget) {
       this.componentName = this.TABS_DATA[tabTarget.index].componentName;
-      console.log(this.projectForm);
     },
     changeTable(index) {
       this.componentName = this.TABS_DATA[index].componentName;
diff --git a/src/views/projectManage/plan/planInfo.vue b/src/views/projectManage/plan/planInfo.vue
index b7cabf3..789eaf3 100644
--- a/src/views/projectManage/plan/planInfo.vue
+++ b/src/views/projectManage/plan/planInfo.vue
@@ -193,7 +193,6 @@
     // 淇濆瓨褰撳墠琛屾暟鎹�
     handleSave(index) {
       this.tableData[index].projectPlanRecordId = this.projectInfoData.id;
-      console.log(this.tableData[index])
       savePlanInfo(this.tableData[index], this.planInfoData.id).then(response => {
         this.$message.success('淇濆瓨鎴愬姛');
       });
diff --git a/src/views/projectProcess/detail/index.vue b/src/views/projectProcess/detail/index.vue
index 6c17627..207b6a4 100644
--- a/src/views/projectProcess/detail/index.vue
+++ b/src/views/projectProcess/detail/index.vue
@@ -232,13 +232,16 @@
     },
     search() {
       this.queryParams.currentPage = 1;
+      this.tableLoading = true
       this.getList()
     },
     sizeChange(pageSize) {
+      this.tableLoading = true
       this.queryParams.pageSize = pageSize;
       this.getList()
     },
     pageChange(pageNum) {
+      this.tableLoading = true
       this.queryParams.currentPage = pageNum;
       this.getList()
     },
diff --git a/src/views/projectProcess/index.vue b/src/views/projectProcess/index.vue
index 9838167..a71814a 100644
--- a/src/views/projectProcess/index.vue
+++ b/src/views/projectProcess/index.vue
@@ -393,7 +393,6 @@
   methods: {
     // 鏌ョ湅璇︽儏
     lookProcessDetail(row) {
-      console.log(row.processDefId)
       this.$router.push({
         path: '/projectFlow/detail',
         query: {
diff --git a/src/views/todo/api/allTodoList.js b/src/views/todo/api/allTodoList.js
index 3f9cb28..b0d011a 100644
--- a/src/views/todo/api/allTodoList.js
+++ b/src/views/todo/api/allTodoList.js
@@ -3,9 +3,7 @@
 
 // 鑾峰彇鎴戠殑寰呭姙
 export const getAllTodoList = data => {
-    console.log("aaaaaaaaaaaaaaaaaaaaaaa1");
     const queryString = commonUtil.objectToQueryStr(data);
-    console.log("aaaaaaaaaaaaaaaaaaaaaaa2", queryString);
     return request({
         url: '/task/manage/alllist',
         method: 'post',
@@ -14,4 +12,4 @@
             'Content-Type': 'application/x-www-form-urlencoded'
         },
     });
-}
\ No newline at end of file
+}
diff --git a/src/views/todo/api/myTodoList.js b/src/views/todo/api/myTodoList.js
index d8d2bdd..2189cd3 100644
--- a/src/views/todo/api/myTodoList.js
+++ b/src/views/todo/api/myTodoList.js
@@ -3,9 +3,7 @@
 
 // 鑾峰彇鎴戠殑寰呭姙
 export const getMyTodoList = data => {
-    console.log("aaaaaaaaaaaaaaaaaaaaaaa1");
     const queryString = commonUtil.objectToQueryStr(data);
-    console.log("aaaaaaaaaaaaaaaaaaaaaaa2", queryString);
     return request({
         url: '/task/manage/mylist',
         method: 'post',
@@ -101,4 +99,4 @@
         url: url + `?taskid=${taksId}`,
         method: 'get',
     });
-}
\ No newline at end of file
+}
diff --git a/src/views/todo/processTask.vue b/src/views/todo/processTask.vue
index 4ad1076..8504a5a 100644
--- a/src/views/todo/processTask.vue
+++ b/src/views/todo/processTask.vue
@@ -109,7 +109,6 @@
                 if (this.step === "input") {
                     const id = this.$route.query.id;
                     const {content} = data;
-                    console.log(id);
                     fillMeetingRecord({
                         id,
                         content
@@ -118,7 +117,7 @@
                     });
                 }
             }
-     
+
             if (this.taskType === "leaveapply") {
                 if (
                     this.step === "destroyapply"

--
Gitblit v1.8.0