فهرست منبع

修复store用户数组数据,修复完结流程审批意见处理异常问题,生成快照增加延时

cfort 2 سال پیش
والد
کامیت
d0fd53091e

+ 19 - 16
src/business/platform/bpmn/form/action.js

@@ -679,22 +679,25 @@ export default {
                 const url = this.$getReportFile(path, `id_=${id}&org_=${first}`)
                 const fileName = name + this.$common.getDateNow(16, 'string')
                 console.log(url, fileName)
-                this.$common.snapshoot({
-                    url,
-                    name: fileName,
-                    type: 'pdf'
-                }).then(res => {
-                    if (!res.data || !res.data.id) {
-                        this.$message.error('生成快照失败!')
-                    }
-                    const fileId = res.data && res.data.id ? res.data.id : ''
-                    const fileParams = fileId ? { kuai_zhao_: fileId } : {}
-                    this.updateState(id, code, '已完成', fileParams)
-                }).catch(() => {
-                    // 生成快照接口调用失败时,也需要更新状态为已完成
-                    this.$message.error('提交快照生成失败!')
-                    this.updateState(id, code, '已完成')
-                })
+                // 延迟生成快照,避免数据获取失败
+                setTimeout(() => {
+                    this.$common.snapshoot({
+                        url,
+                        name: fileName,
+                        type: 'pdf'
+                    }).then(res => {
+                        if (!res.data || !res.data.id) {
+                            this.$message.error('生成快照失败!')
+                        }
+                        const fileId = res.data && res.data.id ? res.data.id : ''
+                        const fileParams = fileId ? { kuai_zhao_: fileId } : {}
+                        this.updateState(id, code, '已完成', fileParams)
+                    }).catch(() => {
+                        // 生成快照接口调用失败时,也需要更新状态为已完成
+                        this.$message.error('提交快照生成失败!')
+                        this.updateState(id, code, '已完成')
+                    })
+                }, 300)
             })
         },
         // 判断流程是否结束

+ 3 - 2
src/business/platform/form/utils/formUtil.js

@@ -848,8 +848,9 @@ const FormUtil = {
             if (Utils.isEmpty(opinion.completeTime)) { continue }
             formOpinionList.push(opinion)
         }
-        // 筛选出已保存未提交的审批意见
-        const unComplateOpinion = opinionList.find(i => i.completeTime === null).opinion
+        // 筛选出已保存未提交的审批意见(已结束流程无此数据,需判空)
+        const unComplate = opinionList.find(i => i.completeTime === null)
+        const unComplateOpinion = unComplate ? unComplate.opinion : ''
         opinionData.unComplateOpinion = unComplateOpinion
 
         if (Utils.isEmpty(formOpinionConfig)) { // 没有绑定节点的

+ 112 - 92
src/components/ibps-tree-select/index.vue

@@ -1,87 +1,103 @@
 <template>
-  <div v-if="editable"
-       v-clickoutside="handleClose"
-       class="el-tree-select"
-       @click="toggleTree">
-    <div v-if="multiple"
-         ref="tags"
-         :style="{ 'max-width': inputWidth - 32 + 'px' }"
-         class="el-tree-select__tags">
+  <div
+    v-if="editable"
+    v-clickoutside="handleClose"
+    class="el-tree-select"
+    @click="toggleTree"
+  >
+    <div
+      v-if="multiple"
+      ref="tags"
+      :style="{ 'max-width': inputWidth - 32 + 'px' }"
+      class="el-tree-select__tags"
+    >
       <transition-group @after-leave="resetInputHeight">
         <template v-for="(item,i) in selected">
-          <el-tag :key="item.value+i"
-                  :closable="!selectDisabled"
-                  :size="collapseTagSize"
-                  type="info"
-                  disable-transitions
-                  @close.stop="deleteTag(item)">
+          <el-tag
+            :key="item.value+i"
+            :closable="!selectDisabled"
+            :size="collapseTagSize"
+            type="info"
+            disable-transitions
+            @close.stop="deleteTag(item)"
+          >
             <span class="el-tree-select__tags-text">{{ displayMode==="name"? item.label:item.path }}</span>
           </el-tag>
         </template>
       </transition-group>
-      <input v-if="filterable"
-             ref="input"
-             v-model="query"
-             :disabled="selectDisabled"
-             :placeholder="currentPlaceholder"
-             :autocomplete="false"
-             :style="{ width: inputLength + 'px'}"
-             type="text"
-             class="el-tree-select__input"
-             @focus="handleFocus"
-             @keydown.esc.stop.prevent="visible = false"
-             @keydown.delete="deletePrevTag"
-             @input="e => handleQueryChange(e.target.value)">
+      <input
+        v-if="filterable"
+        ref="input"
+        v-model="query"
+        :disabled="selectDisabled"
+        :placeholder="currentPlaceholder"
+        :autocomplete="false"
+        :style="{ width: inputLength + 'px'}"
+        type="text"
+        class="el-tree-select__input"
+        @focus="handleFocus"
+        @keydown.esc.stop.prevent="visible = false"
+        @keydown.delete="deletePrevTag"
+        @input="e => handleQueryChange(e.target.value)"
+      >
     </div>
-    <el-input ref="reference"
-              v-model="selectedLabel"
-              :disabled="selectDisabled"
-              :readonly="selectReadonly"
-              :validate-event="false"
-              :size="selectSize"
-              :class="{ 'is-focus': visible }"
-              :placeholder="currentPlaceholder"
-              type="text"
-              @focus="handleFocus"
-              @keyup.native="onInputChange"
-              @mouseenter.native="inputHovering = true"
-              @mouseleave.native="inputHovering = false">
-      <template v-if="$slots.prefix"
-                slot="prefix">
+    <el-input
+      ref="reference"
+      v-model="selectedLabel"
+      :disabled="selectDisabled"
+      :readonly="selectReadonly"
+      :validate-event="false"
+      :size="selectSize"
+      :class="{ 'is-focus': visible }"
+      :placeholder="currentPlaceholder"
+      type="text"
+      @focus="handleFocus"
+      @keyup.native="onInputChange"
+      @mouseenter.native="inputHovering = true"
+      @mouseleave.native="inputHovering = false"
+    >
+      <template v-if="$slots.prefix" slot="prefix">
         <slot name="prefix" />
       </template>
-      <i slot="suffix"
-         :class="suffixIconClass"
-         @click="handleIconClick" />
+      <i
+        slot="suffix"
+        :class="suffixIconClass"
+        @click="handleIconClick"
+      />
     </el-input>
     <transition name="el-zoom-in-top">
-      <div v-show="visible"
-           ref="popper"
-           :style="{minWidth: inputWidth + 'px'}"
-           class="el-tree-select-dropdown el-popper">
-        <el-scrollbar wrap-class="el-tree-select-dropdown__wrap">
-          <el-tree ref="tree"
-                   :data="data"
-                   :lazy="lazy"
-                   :load="load"
-                   :check-on-click-node="checkOnClickNode"
-                   :props="treeProps"
-                   :show-checkbox="showCheckbox"
-                   :expand-on-click-node="false"
-                   :check-strictly="checkStrictly"
-                   :filter-node-method="filterNodeMethod"
-                   :default-checked-keys="checkedKeys"
-                   :node-key="nodeKey"
-                   :empty-text="emptyText"
-                   :current-node-key="currentNodeKey"
-                   default-expand-all
-                   highlight-current
-                   @check="handleCheck"
-                   @node-click="handleNodeClick">
+      <div
+        v-show="visible"
+        ref="popper"
+        :style="{minWidth: inputWidth + 'px'}"
+        class="el-tree-select-dropdown el-popper"
+      >
+        <el-scrollbar
+          wrap-class="el-tree-select-dropdown__wrap"
+        >
+          <el-tree
+            ref="tree"
+            :data="data"
+            :lazy="lazy"
+            :load="load"
+            :check-on-click-node="checkOnClickNode"
+            :props="treeProps"
+            :show-checkbox="showCheckbox"
+            :expand-on-click-node="false"
+            :check-strictly="checkStrictly"
+            :filter-node-method="filterNodeMethod"
+            :default-checked-keys="checkedKeys"
+            :node-key="nodeKey"
+            :empty-text="emptyText"
+            :current-node-key="currentNodeKey"
+            default-expand-all
+            highlight-current
+            @check="handleCheck"
+            @node-click="handleNodeClick"
+          >
             <template v-slot="scope">
               <span class="el-tree-node__label">
-                <i v-if="icon"
-                   :class="icon(scope.data)" /> {{ scope.node.label }}
+                <i v-if="icon" :class="icon(scope.data)" /> {{ scope.node.label }}
               </span>
             </template>
           </el-tree>
@@ -91,17 +107,20 @@
   </div>
 
   <!--只读 文本样式-->
-  <div v-else
-       class="el-tree-select">
+  <div v-else class="el-tree-select">
     <template v-if="$utils.isNotEmpty(selected)">
-      <div v-if="multiple"
-           class="el-tree-select__tags_readonly">
+      <div
+        v-if="multiple"
+        class="el-tree-select__tags_readonly"
+      >
         <template v-for="(item,i) in selected">
-          <el-tag v-if="$utils.isNotEmpty(item.value)"
-                  :key="item.value+i"
-                  type="info"
-                  disable-transitions
-                  class="el-tree-select__tags-text ibps-mr-5 ">
+          <el-tag
+            v-if="$utils.isNotEmpty(item.value)"
+            :key="item.value+i"
+            type="info"
+            disable-transitions
+            class="el-tree-select__tags-text ibps-mr-5 "
+          >
             <template v-if="displayMode === 'name'">
               {{ item.label }}
             </template>
@@ -111,9 +130,11 @@
           </el-tag>
         </template>
       </div>
-      <el-tag v-else
-              type="info"
-              disable-transitions>
+      <el-tag
+        v-else
+        type="info"
+        disable-transitions
+      >
         {{ selectedLabel }}
       </el-tag>
     </template>
@@ -226,14 +247,14 @@ export default {
     selectMode: { // 选值模式 leaf、any
       type: String,
       default: 'any',
-      validator: function (value) {
+      validator: function(value) {
         return ['any', 'leaf'].indexOf(value) !== -1
       }
     },
     displayMode: { // 显示模式 path 、name
       type: String,
       default: 'name',
-      validator: function (value) {
+      validator: function(value) {
         return ['name', 'path'].indexOf(value) !== -1
       }
     },
@@ -283,12 +304,12 @@ export default {
     suffixIconClass() {
       let classes = ['el-tree-select__caret', 'el-input__icon']
       const criteria = this.clearable &&
-        !this.selectDisabled &&
-        this.inputHovering &&
-        !this.multiple &&
-        this.value !== undefined &&
-        this.value !== null &&
-        this.value !== ''
+          !this.selectDisabled &&
+          this.inputHovering &&
+          !this.multiple &&
+          this.value !== undefined &&
+          this.value !== null &&
+          this.value !== ''
       if (criteria) {
         classes = [...classes, 'el-icon-circle-close', 'is-show-close']
       } else {
@@ -523,7 +544,6 @@ export default {
     },
     getNodeData(value) {
       let node = null
-      console.log('value',value)
       if (Array.isArray(this.data)) {
         const traverse = (arr, lablePrefix = []) => {
           for (let i = 0; i < arr.length; i++) {
@@ -651,5 +671,5 @@ export default {
 }
 </script>
 <style lang="scss">
-@import "~@/assets/styles/components/tree-select.scss";
+@import '~@/assets/styles/components/tree-select.scss'
 </style>

+ 1 - 1
src/store/modules/ibps/modules/user.js

@@ -169,7 +169,7 @@ export default {
          */
         getUserList ({ state, dispatch }, { first, second }) {
             const params = second ? `'%${second}%' or entity.id_ = '${first}'` : first ? `'%${first}%'` : '%%'
-            const sql = `select users.id_ as userId, users.name_ as userName, users.mobile_ as phone, users.positions_ as positionId, users.job_ as roleId, (select ifnull(GROUP_CONCAT(DISTINCT roles.name_ SEPARATOR ','), '') from ibps_party_entity as roles where find_in_set(roles.id_, users.job_)) as roles, (select ifnull(GROUP_CONCAT(DISTINCT positions.name_ SEPARATOR ','), '') from ibps_party_entity as positions where find_in_set(positions.id_, users.positions_)) as positions from ibps_party_employee as users where exists (select 1 from ibps_party_entity as entity where find_in_set(entity.id_, users.positions_) and (entity.path_ like ${params}))`
+            const sql = `select users.id_ as userId, users.name_ as userName, users.mobile_ as phone, users.positions_ as positionId,  (select ifnull(GROUP_CONCAT(DISTINCT roles.id_ SEPARATOR ','), '') from ibps_party_user_role as roles where roles.user_id_ = users.id_ ) as roleId, (select ifnull(GROUP_CONCAT(DISTINCT roles.name_ SEPARATOR ','), '') from ibps_party_entity as roles where roles.id_ in (select role_id_ from ibps_party_user_role where user_id_ = users.id_ )) as roles, (select ifnull(GROUP_CONCAT(DISTINCT positions.name_ SEPARATOR ','), '') from ibps_party_entity as positions where find_in_set(positions.id_, users.positions_)) as positions from ibps_party_employee as users where exists (select 1 from ibps_party_entity as entity where find_in_set(entity.id_, users.positions_) and (entity.path_ like ${params}))`
             common.request('sql', sql).then(res => {
                 const { data = [] } = res.variables || {}
                 dispatch('ibps/param/setUserList', data, {