瀏覽代碼

Merge branch 'master' of http://119.23.210.103:3000/wy/zdqy_firm_former

liujiayin 2 年之前
父節點
當前提交
02cd34316d

+ 1 - 0
src/assets/styles/components/attachment-selector.scss

@@ -50,6 +50,7 @@
     }
   }
   .el-upload-list__item{
+    font-size: 12px;
     .el-upload-list__item{
         margin-top:0 ;
     }

+ 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, {

+ 1 - 1
src/views/platform/bpmn/bpmInstHis/list.vue

@@ -265,7 +265,7 @@ export default {
                 // 表格字段配置
                 columns: [
                     { prop: 'deptName', label: '部门', width: 90 },
-                    { prop: 'procDefName', label: '表单名称', sortable: 'custom', formatter: this.replaceFormName, width: 250 },
+                    { prop: 'procDefName', label: '表单名称', sortable: 'custom', formatter: this.replaceFormName, width: 230 },
                     { prop: 'desc', label: '事务说明', 'min-width': 300 },
                     { prop: 'createBy', label: '编制人', width: 80, slotName: 'creator' },
                     { prop: 'endTime', label: '完成时间', sortable: 'custom', width: 150 }

+ 49 - 3
src/views/platform/data/dataTemplate/template-list.vue

@@ -177,10 +177,27 @@ export default {
             return btn
         },
         dealFilter (dataList) {
-            if (!dataList.length || !this.filterParams.length) {
-                return []
+            // 1.去除原过滤条件中的编制部门在其中
+            // 2.追加数据模板归档中的过滤条件
+            // 3.增加地点过滤(若为第一层级用户,则过滤出所有一二级地点数据;若为第二级用户,则过滤当前地点数据)
+            const levelFilter = this.getLevelFilter()
+            if (!dataList.length) {
+                // 无过滤条件时默认地点过滤
+                return [
+                    {
+                        label: '默认条件',
+                        key: this.$utils.guid(),
+                        type: 'condition',
+                        rights: [{ type: 'all' }],
+                        filter: {
+                            condition: 'AND',
+                            rules: [levelFilter]
+                        }
+                    }
+                ]
             }
             const newDataList = dataList.map(data => {
+                const rules = data.filter.rules.filter(i => i.id !== 'find_in_set' && !i.value.includes('cscript.findPositionId()'))
                 const newRules = [
                     ...this.filterParams.map(item => ({
                         id: item.field,
@@ -188,11 +205,40 @@ export default {
                         input: 'text',
                         ...item
                     })),
-                    ...data.filter.rules
+                    ...rules,
+                    levelFilter
                 ]
                 return { ...data, filter: { ...data.filter, rules: newRules }}
             })
             return newDataList
+        },
+        // 获取当前用户地点信息 equal-等于 in-在…之内
+        getLevelFilter () {
+            const { second = '' } = this.$store.getters.level
+            const { deptList = [] } = this.$store.getters
+            if (second) {
+                return {
+                    field: 'di_dian_',
+                    id: 'di_dian_',
+                    input: 'text',
+                    label: '地点',
+                    operator: 'equal',
+                    source: 'fixed',
+                    type: 'string',
+                    value: second
+                }
+            }
+
+            return {
+                field: 'di_dian_',
+                id: 'di_dian_',
+                input: 'text',
+                label: '地点',
+                operator: 'in',
+                source: 'fixed',
+                type: 'string',
+                value: deptList.filter(i => i.depth * 1 >= 2).map(i => i.id)
+            }
         }
     }
 }

+ 2 - 2
src/views/platform/system/news/edit.vue

@@ -42,9 +42,9 @@
                         <el-radio label="top">置顶工作首页</el-radio>
                     </el-radio-group>
                 </el-form-item> -->
-                <el-form-item label="公告分类:" prop="typeId">
+                <!-- <el-form-item label="公告分类:" prop="typeId">
                     <ibps-type-select v-model="form.typeId" category-key="NOTICE_TYPE" clearable />
-                </el-form-item>
+                </el-form-item> -->
                 <el-form-item label="标题:" prop="title">
                     <el-input v-model="form.title" />
                 </el-form-item>