Parcourir la source

数据模板归档

cfort il y a 2 ans
Parent
commit
758153bdf8

+ 1 - 1
src/business/platform/data/constants/buttons.js

@@ -43,7 +43,7 @@ const buttons = {
     },
     'detail': {
         label: '明细',
-        type: 'primary',
+        type: 'info',
         icon: 'ibps-icon-detail',
         scope: ['manage'],
         contextmenu: 'sub'

+ 229 - 229
src/business/platform/data/templatebuilder/right-aside/editors/filter-condition.vue

@@ -1,248 +1,248 @@
 <template>
-  <el-form
-    ref="form"
-    :model="formData"
-    :rules="rules"
-    style="height:400px;"
-    label-width="120px"
-    size="mini"
-    @submit.native.prevent
-  >
-    <el-form-item label="过滤名称" prop="label">
-      <el-input v-model="formData.label" placeholder="过滤名称" />
-    </el-form-item>
-    <!-- <el-form-item label="权限" prop="rights">
-      <rights-selector v-model="formData.rights" />
-    </el-form-item> -->
-    <el-form-item style="margin-bottom: 5px;">
-      <div slot="label">过滤规则:<ibps-help content="设置为空时不会出现为null数据;设置为null时不会出现为空数据。" /></div>
-    </el-form-item>
-   <el-form-item prop="rules" label-width="0">
-      <ibps-query-builder
-        ref="queryBuilder"
-        :value="formData.filter"
-        :filters="filters"
-        :conditions="conditions"
-        :control-types="controlTypes"
-      />
-    </el-form-item>
-  </el-form>
+    <el-form
+        ref="form"
+        :model="formData"
+        :rules="rules"
+        style="height:400px;"
+        label-width="120px"
+        size="mini"
+        @submit.native.prevent
+    >
+        <el-form-item label="过滤名称" prop="label">
+            <el-input v-model="formData.label" placeholder="过滤名称" />
+        </el-form-item>
+        <!-- <el-form-item label="权限" prop="rights">
+            <rights-selector v-model="formData.rights" />
+        </el-form-item> -->
+        <el-form-item style="margin-bottom: 5px;">
+            <div slot="label">过滤规则:<ibps-help content="设置为空时不会出现为null数据;设置为null时不会出现为空数据。" /></div>
+        </el-form-item>
+        <el-form-item prop="rules" label-width="0">
+            <ibps-query-builder
+                ref="queryBuilder"
+                :value="formData.filter"
+                :filters="filters"
+                :conditions="conditions"
+                :control-types="controlTypes"
+            />
+        </el-form-item>
+    </el-form>
 </template>
 <script>
 // import RightsSelector from '@/business/platform/rights/config/selector'
 import IbpsQueryBuilder from '@/components/ibps-query-builder'
 
 export default {
-  components: {
-    // RightsSelector,
-    IbpsQueryBuilder
-  },
-  props: {
-    data: {
-      type: Object
+    components: {
+        // RightsSelector,
+        IbpsQueryBuilder
     },
-    fields: {
-      type: Array,
-      default: () => []
-    }
-  },
-  data() {
-    return {
-      conditions: {
-        'AND': '并且',
-        'OR': '或者'
-      },
-      controlTypes: {
-        'text': '单行文本',
-        'number': '数字',
-        'radio': '单选框',
-        'checkbox': '多选框',
-        'select': '下拉框',
-        'datePicker': '日期控件',
-        'dictionary': '数据字典',
-        'selector': '选择器',
-        'customDialog': '自定义对话框',
-        'linkdata': '关联数据'
-      },
-      formName: 'form',
-      formData: {
-        label: '默认条件',
-        key: '',
-        rights: [],
-        filter: {}
-      },
-      rules: {
-        label: [{ required: true, message: this.$t('validate.required') }],
-        filter: [{ required: true, message: this.$t('validate.required') }]
-      }
-    }
-  },
-  computed: {
-    filters() {
-      const filters = []
-      if (this.fields.length === 0) return []
-      this.fields.forEach(field => {
-        // // 屏蔽附件/签名
-        if (field.field_type !== 'attachment' && field.field_type !== 'signature') {
-          filters.push(this.getFilter(field))
+    props: {
+        data: {
+            type: Object
+        },
+        fields: {
+            type: Array,
+            default: () => []
         }
-      })
-      return filters
-    }
-  },
-  watch: {
-    data: {
-      handler(val) {
-        if (val) {
-          this.formData = JSON.parse(JSON.stringify(val))
-          console.log(val.filter)
+    },
+    data () {
+        return {
+            conditions: {
+                'AND': '并且',
+                'OR': '或者'
+            },
+            controlTypes: {
+                'text': '单行文本',
+                'number': '数字',
+                'radio': '单选框',
+                'checkbox': '多选框',
+                'select': '下拉框',
+                'datePicker': '日期控件',
+                'dictionary': '数据字典',
+                'selector': '选择器',
+                'customDialog': '自定义对话框',
+                'linkdata': '关联数据'
+            },
+            formName: 'form',
+            formData: {
+                label: '默认条件',
+                key: '',
+                rights: [],
+                filter: {}
+            },
+            rules: {
+                label: [{ required: true, message: this.$t('validate.required') }],
+                filter: [{ required: true, message: this.$t('validate.required') }]
+            }
         }
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    getFilter(field) {
-      const filter = {
-        id: field.name,
-        label: field.label,
-        field: field.name
-      }
-      let type = this.getType(field.type)
-      const options = field['field_options'] ? field['field_options']['options'] || [] : []
-      const values = {}
-      if (type === 'date' && field.field_type !== 'datePicker') {
-        field.field_type = 'datePicker'
-      } else if (type === 'number') {
-        field.field_type = 'number'
-      }
+    },
+    computed: {
+        filters () {
+            const filters = []
+            if (this.fields.length === 0) return []
+            this.fields.forEach(field => {
+                // // 屏蔽附件/签名
+                if (field.field_type !== 'attachment' && field.field_type !== 'signature') {
+                    filters.push(this.getFilter(field))
+                }
+            })
+            return filters
+        }
+    },
+    watch: {
+        data: {
+            handler (val) {
+                if (val) {
+                    this.formData = JSON.parse(JSON.stringify(val))
+                    console.log(val.filter)
+                }
+            },
+            immediate: true
+        }
+    },
+    methods: {
+        getFilter (field) {
+            const filter = {
+                id: field.name,
+                label: field.label,
+                field: field.name
+            }
+            let type = this.getType(field.type)
+            const options = field['field_options'] ? field['field_options']['options'] || [] : []
+            const values = {}
+            if (type === 'date' && field.field_type !== 'datePicker') {
+                field.field_type = 'datePicker'
+            } else if (type === 'number') {
+                field.field_type = 'number'
+            }
 
-      let input = 'text'
-      switch (field.field_type) { // 字段控件类型
-        case 'text':
-        case 'textarea':
-          type = 'string'
-          break
-        case 'editor':
+            let input = 'text'
+            switch (field.field_type) { // 字段控件类型
+                case 'text':
+                case 'textarea':
+                    type = 'string'
+                    break
+                case 'editor':
 
-          input = 'text'
-          filter.operators = [
-            'contains',
-            'not_contains',
-            'is_empty',
-            'is_not_empty',
-            'is_null',
-            'is_not_null']
-          break
-        case 'number':
-          input = 'number'
-          filter.operators = [
-            'equal', 'not_equal',
-            'less', 'less_or_equal',
-            'greater', 'greater_or_equal',
-            'between', 'not_between',
-            'is_null', 'is_not_null']
-          break
-        case 'datePicker':
-          type = 'date'
-          input = field.field_options && field.field_options.datefmt !== 'custom' ? field.field_options.datefmt || 'datetime' : 'datetime'
-          filter.operators = [
-            'equal',
-            'not_equal',
-            'less',
-            'less_or_equal',
-            'between',
-            'not_between',
-            'greater',
-            'greater_or_equal',
-            'is_null',
-            'is_not_null']
+                    input = 'text'
+                    filter.operators = [
+                        'contains',
+                        'not_contains',
+                        'is_empty',
+                        'is_not_empty',
+                        'is_null',
+                        'is_not_null']
+                    break
+                case 'number':
+                    input = 'number'
+                    filter.operators = [
+                        'equal', 'not_equal',
+                        'less', 'less_or_equal',
+                        'greater', 'greater_or_equal',
+                        'between', 'not_between',
+                        'is_null', 'is_not_null']
+                    break
+                case 'datePicker':
+                    type = 'date'
+                    input = field.field_options && field.field_options.datefmt !== 'custom' ? field.field_options.datefmt || 'datetime' : 'datetime'
+                    filter.operators = [
+                        'equal',
+                        'not_equal',
+                        'less',
+                        'less_or_equal',
+                        'between',
+                        'not_between',
+                        'greater',
+                        'greater_or_equal',
+                        'is_null',
+                        'is_not_null']
 
-          break
-        case 'radio':
-        case 'checkbox':
-        case 'select':
-          filter.operators = ['equal', 'not_equal', 'in', 'not_in', 'is_null', 'is_not_null']
-          options.forEach(option => {
-            values[option.val] = option.label
-          })
-          filter.values = values
-          break
-        case 'dictionary':
-          type = 'string'
-          filter.operators = [
-            'equal',
-            'not_equal',
-            'in',
-            'not_in',
-            'is_empty',
-            'is_not_empty',
-            'is_null',
-            'is_not_null']
-          break
-        case 'selector':
-          type = 'string'
-          filter.operators = [
-            'equal',
-            'not_equal',
-            'contains',
-            'not_contains',
-            'in',
-            'not_in',
-            'is_empty',
-            'is_not_empty',
-            'is_null',
-            'is_not_null'
-          ]
-          break
-      }
-      filter.input = input
-      filter.type = type
+                    break
+                case 'radio':
+                case 'checkbox':
+                case 'select':
+                    filter.operators = ['equal', 'not_equal', 'in', 'not_in', 'is_null', 'is_not_null']
+                    options.forEach(option => {
+                        values[option.val] = option.label
+                    })
+                    filter.values = values
+                    break
+                case 'dictionary':
+                    type = 'string'
+                    filter.operators = [
+                        'equal',
+                        'not_equal',
+                        'in',
+                        'not_in',
+                        'is_empty',
+                        'is_not_empty',
+                        'is_null',
+                        'is_not_null']
+                    break
+                case 'selector':
+                    type = 'string'
+                    filter.operators = [
+                        'equal',
+                        'not_equal',
+                        'contains',
+                        'not_contains',
+                        'in',
+                        'not_in',
+                        'is_empty',
+                        'is_not_empty',
+                        'is_null',
+                        'is_not_null'
+                    ]
+                    break
+            }
+            filter.input = input
+            filter.type = type
 
-      return filter
-    },
-    getType: function(dataType) {
-      var type = 'string'
-      switch (dataType) { // 字段数据类型
-        case 'number':
-          type = 'number'
-          break
-        case 'date':
-          type = 'date'
-          break
-        default:
-          type = 'string'
-      }
-      return type
-    },
-    // 获取表单数据
-    getFormData(callback) {
-      this.$refs[this.formName].validate((valid) => {
-        if (valid) {
-          // TODO: 验证过滤条件
-          const data = this.$refs.queryBuilder.getData()
-          if (!data || this.$utils.isEmpty(data.rules)) {
-            this.$message({
-              message: '请设置过滤条件',
-              type: 'warning'
-            })
-            return
-          }
-          const hasErrors = this.$refs.queryBuilder.getErrors()
-          if (hasErrors) {
-            this.$message({
-              message: '请检查过滤条件是否填写正确',
-              type: 'warning'
+            return filter
+        },
+        getType: function (dataType) {
+            var type = 'string'
+            switch (dataType) { // 字段数据类型
+                case 'number':
+                    type = 'number'
+                    break
+                case 'date':
+                    type = 'date'
+                    break
+                default:
+                    type = 'string'
+            }
+            return type
+        },
+        // 获取表单数据
+        getFormData (callback) {
+            this.$refs[this.formName].validate((valid) => {
+                if (valid) {
+                    // TODO: 验证过滤条件
+                    const data = this.$refs.queryBuilder.getData()
+                    if (!data || this.$utils.isEmpty(data.rules)) {
+                        this.$message({
+                            message: '请设置过滤条件',
+                            type: 'warning'
+                        })
+                        return
+                    }
+                    const hasErrors = this.$refs.queryBuilder.getErrors()
+                    if (hasErrors) {
+                        this.$message({
+                            message: '请检查过滤条件是否填写正确',
+                            type: 'warning'
+                        })
+                        return
+                    }
+                    this.formData.filter = data
+                    callback(this.formData)
+                } else {
+                    callback()
+                }
             })
-            return
-          }
-          this.formData.filter = data
-          callback(this.formData)
-        } else {
-          callback()
         }
-      })
     }
-  }
 }
 </script>

+ 111 - 113
src/business/platform/data/templaterender/index.vue

@@ -1,130 +1,128 @@
 <template>
-  <component
-    :is="templateType"
-    v-if="template"
-    ref="dataTemplate"
-    :value="value"
-    :template-type-name="templateType"
-    :template="template"
-    :data-template="dataTemplate"
-    :dynamic-params="dynamicParams"
-    :multiple="multiple"
-    :height="height"
-    :fields="fields"
-    :preview="preview"
-    v-on="$listeners"
-  />
+    <component
+        :is="templateType"
+        v-if="template"
+        ref="dataTemplate"
+        :value="value"
+        :template-type-name="templateType"
+        :template="template"
+        :data-template="dataTemplate"
+        :dynamic-params="dynamicParams"
+        :multiple="multiple"
+        :height="height"
+        :fields="fields"
+        :preview="preview"
+        v-on="$listeners"
+    />
 </template>
 <script>
 import DataTemplate from './templates'
-
 import Vue from 'vue'
 Vue.component('ibps-data-template-formrender', () => import('@/business/platform/form/formrender/index.vue'))
 
 export default {
-  components: DataTemplate,
-  props: {
-    value: [String, Number, Array, Object],
-    data: {
-      type: Object
-    },
-    dynamicParams: {
-      type: Object
-    },
-    multiple: {
-      type: Boolean,
-      default: true
-    },
-    height: {
-      type: [String, Number]
-    },
-    preview: {
-      type: Boolean,
-      default: false
-    },
-  },
-  data() {
-    return {
-      selected: false,
-      dataTemplate: {}
-    }
-  },
-  computed: {
-    templateType() {
-      if (this.$utils.isEmpty(this.dataTemplate)) {
-        return
-      }
-      let key = ''
-      if (this.dataTemplate.type === 'valueSource') {
-        key = 'value-source'
-      } else {
-        if (this.dataTemplate.showType === 'compose') {
-          if (this.dataTemplate.composeType === 'treeList' || this.dataTemplate.composeType === 'listTree') {
-            key = 'treeList'
-          } else {
-            key = this.dataTemplate.composeType
-          }
-        } else {
-          key = this.dataTemplate.showType
+    components: DataTemplate,
+    props: {
+        value: [String, Number, Array, Object],
+        data: {
+            type: Object
+        },
+        dynamicParams: {
+            type: Object
+        },
+        multiple: {
+            type: Boolean,
+            default: true
+        },
+        height: {
+            type: [String, Number]
+        },
+        preview: {
+            type: Boolean,
+            default: false
         }
-      }
-      if (this.$utils.isEmpty(key)) { return }
-      return 'ibps-data-template-' + key
     },
-    template() {
-      if (this.$utils.isEmpty(this.dataTemplate)) {
-        return {}
-      }
-      const templates = this.dataTemplate.templates || []
-      if (this.dataTemplate.showType === 'compose' && this.dataTemplate.composeType !== 'treeForm') {
-        return templates
-      } else {
-        return templates.length > 0 ? templates[0] : {}
-      }
+    data () {
+        return {
+            selected: false,
+            dataTemplate: {}
+        }
     },
-    fields() {
-      if (this.$utils.isEmpty(this.dataTemplate)) {
-        return {}
-      }
-      const fields = {}
-      if (this.dataTemplate.datasets && this.dataTemplate.datasets.length > 0) {
-        this.dataTemplate.datasets.forEach(dataset => {
-          if (dataset.parentId !== '0') {
-            fields[dataset.name] = dataset
-          }
-        })
-      }
-      return fields
-    }
-
-  },
-  watch: {
-    data: {
-      handler(val, oldVal) {
-        if (val !== oldVal) {
-          this.dataTemplate = JSON.parse(JSON.stringify(val))
+    computed: {
+        templateType () {
+            if (this.$utils.isEmpty(this.dataTemplate)) {
+                return
+            }
+            let key = ''
+            if (this.dataTemplate.type === 'valueSource') {
+                key = 'value-source'
+            } else {
+                if (this.dataTemplate.showType === 'compose') {
+                    if (this.dataTemplate.composeType === 'treeList' || this.dataTemplate.composeType === 'listTree') {
+                        key = 'treeList'
+                    } else {
+                        key = this.dataTemplate.composeType
+                    }
+                } else {
+                    key = this.dataTemplate.showType
+                }
+            }
+            if (this.$utils.isEmpty(key)) { return }
+            return 'ibps-data-template-' + key
+        },
+        template () {
+            if (this.$utils.isEmpty(this.dataTemplate)) {
+                return {}
+            }
+            const templates = this.dataTemplate.templates || []
+            if (this.dataTemplate.showType === 'compose' && this.dataTemplate.composeType !== 'treeForm') {
+                return templates
+            } else {
+                return templates.length > 0 ? templates[0] : {}
+            }
+        },
+        fields () {
+            if (this.$utils.isEmpty(this.dataTemplate)) {
+                return {}
+            }
+            const fields = {}
+            if (this.dataTemplate.datasets && this.dataTemplate.datasets.length > 0) {
+                this.dataTemplate.datasets.forEach(dataset => {
+                    if (dataset.parentId !== '0') {
+                        fields[dataset.name] = dataset
+                    }
+                })
+            }
+            return fields
         }
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    // 清空选择
-    clearSelection() {
-      if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].clearSelection) {
-        this.$refs['dataTemplate'].clearSelection()
-      }
     },
-    resetSearchForm() {
-      if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].resetSearchForm) {
-        this.$refs['dataTemplate'].resetSearchForm()
-      }
+    watch: {
+        data: {
+            handler (val, oldVal) {
+                if (val !== oldVal) {
+                    this.dataTemplate = JSON.parse(JSON.stringify(val))
+                }
+            },
+            immediate: true
+        }
     },
-    setSelectRow() {
-      if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].setSelectRow) {
-        this.$refs['dataTemplate'].setSelectRow()
-      }
+    methods: {
+        // 清空选择
+        clearSelection () {
+            if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].clearSelection) {
+                this.$refs['dataTemplate'].clearSelection()
+            }
+        },
+        resetSearchForm () {
+            if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].resetSearchForm) {
+                this.$refs['dataTemplate'].resetSearchForm()
+            }
+        },
+        setSelectRow () {
+            if (this.$refs['dataTemplate'] && this.$refs['dataTemplate'].setSelectRow) {
+                this.$refs['dataTemplate'].setSelectRow()
+            }
+        }
     }
-  }
 }
 </script>

+ 1 - 0
src/components/ibps-crud/components/search-form/index.vue

@@ -85,6 +85,7 @@
         :style="itemStyle + (item.itemWidth ? `width: ${item.itemWidth}px;` : '')"
         :picker-options="item.pickerOptions || {}"
         type="daterange"
+        unlink-panels
         @change="date => changeDate(date, item.prop[0], item.prop[1])"
         @keyup.enter.native.stop="handleEnter"
       />

+ 5 - 5
src/views/platform/bpmn/bpmDef/list.vue

@@ -191,13 +191,13 @@ export default {
         },
         // 表格字段配置
         columns: [
-          { prop: 'name', label: '流程名称', slotName: 'defName', sortable: true },
-          { prop: 'defKey', label: '流程业务主键', width: 150, sortable: true },
+          { prop: 'name', label: '流程名称', slotName: 'defName', sortable: true, minWidth: 200 },
+          { prop: 'defKey', label: '流程业务主键', width: 120, sortable: true },
           { prop: 'status', label: '流程状态', tags: statusOptions, width: 90 },
           { prop: 'testStatus', label: '测试状态', tags: testStatusOptions, width: 90 },
-          { prop: 'createTime', label: '创建时间', width: 150, sortable: true },
-          { prop: 'updateTime', label: '更新时间', width: 150, sortable: true },
-          { prop: 'version', label: '版本号', width: 90, sortable: true }
+          { prop: 'createTime', label: '创建时间', width: 140, sortable: true },
+          { prop: 'updateTime', label: '更新时间', width: 140, sortable: true },
+          { prop: 'version', label: '版本号', width: 80, sortable: true }
         ],
         rowHandle: {
           actions: [

+ 35 - 18
src/views/platform/bpmn/bpmInstHis/list.vue

@@ -4,15 +4,16 @@
             <ibps-type-tree
                 :width="width"
                 :height="height"
-
                 :location="location"
                 category-key="FLOW_TYPE"
-                :hasPermission="hasPermission"
+                :has-permission="hasPermission"
                 @node-click="handleNodeClick"
                 @expand-collapse="handleExpandCollapse"
             />
         </div>
+        <template-list v-if="templateData.templateid_" :template-data="templateData" />
         <ibps-crud
+            v-else
             ref="crud"
             :style="{ marginLeft: width + 'px' }"
             :height="height"
@@ -20,7 +21,7 @@
             :toolbars="listConfig.toolbars"
             :search-form="listConfig.searchForm"
             :pk-key="pkKey"
-            :displayField="tableTitle"
+            :display-field="tableTitle"
             :columns="listConfig.columns"
             :row-handle="listConfig.rowHandle"
             :pagination="pagination"
@@ -167,12 +168,14 @@ import BpmnFormrender from '@/business/platform/bpmn/form/dialog'
 import curdPost from '@/business/platform/form/utils/custom/joinCURD.js'
 import IbpsAttachment from '@/business/platform/file/attachment/selector'
 import { specialType, specialBtn, specialParams, specialTable, specialField } from './corresponding/index'
+import TemplateList from './templateList'
 
 export default {
     components: {
         IbpsTypeTree,
         BpmnFormrender,
-        'ibps-attachment': IbpsAttachment
+        IbpsAttachment,
+        TemplateList
     },
     filters: {
         // 截取报表名称
@@ -215,7 +218,11 @@ export default {
             title: '',
             loading: true,
             height: document.clientHeight,
-            reportAll: [],
+            reportAll: {
+                process: [],
+                template: []
+            },
+            templateData: {},
             listData: [],
             pagination: {},
             sorts: {},
@@ -242,13 +249,14 @@ export default {
                     { prop: 'procDefName', label: '表单名称', sortable: 'custom', formatter: this.replaceFormName, width: 250 },
                     { prop: 'subject', label: '事务说明', formatter: this.getDesc, 'min-width': 300 },
                     { prop: 'tUser', label: '编制人', width: 80 },
-                    { prop: 'endTime', label: '完成时间', sortable: 'custom', dateFormat: 'yyyy-MM-dd', width: 90 }
+                    { prop: 'endTime', label: '完成时间', sortable: 'custom', dateFormat: 'yyyy-MM-dd hh:mm:ss', width: 150 }
                 ],
                 rowHandle: {
                     actions: [
                         {
                             key: 'detail',
-                            label: '详情'
+                            label: '详情',
+                            type: 'info'
                         }
                     ],
                     effect: 'display',
@@ -313,9 +321,12 @@ export default {
         },
         // 获取所有流程的报表配置数据
         getConfig () {
-            const sql = 'select bao_biao_lu_jing_, fu_jian_nei_rong_, guan_lian_zi_duan, liu_cheng_xuan_ze, shi_fou_zi_biao_ from t_lcidglbdbb'
+            const sql = `select * from t_lcidglbdbb`
             curdPost('sql', sql).then((res) => {
-                this.reportAll = res.variables && res.variables.data
+                const { data = [] } = res.variables || {}
+                data.forEach(i => {
+                    this.reportAll[i.gui_dang_lei_xing].push(i)
+                })
             }).catch(() => {
                 console.log('获取流程配置报表数据失败!')
             })
@@ -336,7 +347,7 @@ export default {
                 return
             }
             this.numbersClick()
-            const temp = this.reportAll.find(item => item.liu_cheng_xuan_ze === procDefKey)
+            const temp = this.reportAll.process.find(item => item.liu_cheng_xuan_ze === procDefKey)
             if (!temp) {
                 return
             }
@@ -372,7 +383,7 @@ export default {
         },
         // 获取所有附件
         getAllFile ({ file, table, field, bizKey }) {
-	    let resultList = []
+            const resultList = []
             table.forEach((item, index) => {
                 const sql = `select ${file[index]} from ${item} where ${field.length && field[index] ? field[index] : 'id_'} = '${bizKey}'`
                 resultList.push(this.getFile(sql, file[index]))
@@ -389,8 +400,8 @@ export default {
         getFile (sql, fileField) {
             return new Promise((resolve, reject) => {
                 curdPost('sql', sql).then(res => {
-		    let result = []
-		    let fileList = fileField.split(',')
+                    const result = []
+                    const fileList = fileField.split(',')
                     // console.log(fileList)
                     let { data = [] } = res.variables || {}
                     data = data.filter(i => i)
@@ -415,8 +426,8 @@ export default {
         getFileId (value) {
             // 判断是否为图片类型,文件类型只存储文件ID,图片会以对象形式保存
             if (value.includes('id')) {
-                    let result = []
-                    let temp = JSON.parse(value)
+                const result = []
+                const temp = JSON.parse(value)
                 temp.forEach(item => result.push(item.id))
                 return result.join(',')
             }
@@ -536,8 +547,8 @@ export default {
                 showClose: false,
                 closeOnClickModal: false
             }).then(() => {
-	    	let formKeyArr = []
-		let delList = {}
+                const formKeyArr = []
+                const delList = {}
                 data.forEach(item => {
                     const { bizKey, formKey } = item
                     if (!delList[formKey]) {
@@ -582,7 +593,13 @@ export default {
         handleNodeClick (typeId, typeName) {
             this.tableTitle = typeName.name
             this.typeId = typeId
-            this.loadData()
+            this.templateData = this.reportAll.template.find(i => i.fen_lei_id_ === typeId) || {}
+            if (!this.templateData.templateid_) {
+                this.loadData()
+            } else {
+                this.templateData.typeId = typeId
+                this.templateData.typeName = typeName.name
+            }
         },
         handleExpandCollapse (isExpand) {
             this.width = isExpand ? 230 : 30

+ 49 - 0
src/views/platform/bpmn/bpmInstHis/templateList.vue

@@ -0,0 +1,49 @@
+<template>
+    <div class="template-container">
+        <template-list
+            v-if="templateId"
+            :template-id="templateId"
+            :dynamic-params="dynamicParams"
+            :filter-params="filterParams"
+            :type-name="typeName"
+        />
+    </div>
+</template>
+
+<script>
+import TemplateList from '@/views/platform/data/dataTemplate/template-list.vue'
+export default {
+    components: {
+        TemplateList
+    },
+    props: {
+        templateData: {
+            type: Object,
+            default: () => {}
+        }
+    },
+    data () {
+        const { templateid_, guo_lv_can_shu_, typeName } = this.templateData
+        console.log(guo_lv_can_shu_)
+        console.log(JSON.parse(guo_lv_can_shu_))
+        return {
+            typeName,
+            templateId: templateid_,
+            filterParams: guo_lv_can_shu_ ? JSON.parse(guo_lv_can_shu_) : [],
+            dynamicParams: {}
+        }
+    },
+    // methods: {
+        
+    // }
+}
+</script>
+
+<style lang="scss" scoped>
+    .template-container{
+        ::v-deep .container-component{
+            margin-left: 250px;
+        }
+    }
+</style>
+

+ 187 - 132
src/views/platform/data/dataTemplate/template-list.vue

@@ -1,12 +1,12 @@
 <template>
-  <div v-if="$utils.isNotEmpty(dataTemplate)">
-    <data-template-render
-      :data="dataTemplate"
-      :height="height"
-      :dynamic-params="dynamicParams"
-    />
-  </div>
-  <div v-else class="ibps-container-frame" />
+    <div v-if="$utils.isNotEmpty(dataTemplate)">
+        <data-template-render
+            :data="dataTemplate"
+            :height="height"
+            :dynamic-params="dynamicParams"
+        />
+    </div>
+    <div v-else class="ibps-container-frame" />
 </template>
 <script>
 import { getBuildDataById } from '@/api/platform/data/dataTemplate'
@@ -16,143 +16,198 @@ import DataTemplateRender from '@/business/platform/data/templaterender'
 import { buildFelds } from '@/business/platform/data/templaterender/utils'
 
 export default {
-  components: {
-    DataTemplateRender
-  },
-  props: {
-    height: [String, Number],
-    dynamicParams: {
-      type: Object
+    components: {
+        DataTemplateRender
     },
-    templateId: {
-      type: String,
-      default: ''
-    },
-  },
-  data() {
-    return {
-      dataTemplate: {},
-      dataTemplateId: ''
-    }
-  },
-  watch: {
-    '$route': {
-      handler(val, oldVal) {
-        if (val === oldVal) {
-          return
+    props: {
+        height: [String, Number],
+        dynamicParams: {
+            type: Object
+        },
+        filterParams: {
+            type: Array
+        },
+        templateId: {
+            type: String,
+            default: ''
+        },
+        typeName: {
+            type: String,
+            default: ''
         }
-        this.$nextTick(() => {
-          const defaultUrl = this.$route.meta.defaultUrl
-          const isDashboard = this.$route.name
-          if (this.$utils.isNotEmpty(defaultUrl)) {
-            // 判断地址是否正确
-            const url = defaultUrl.split('/')
-            this.dataTemplateId = url[url.length - 1]
-          } else if (isDashboard === 'dashboard') {
-            this.dataTemplateId = this.templateId
-          } else {
-            const params = this.$route.params
-            this.dataTemplateId = params.id
-          }
-          if (this.$utils.isEmpty(this.dataTemplateId)) {
-            this.$alert('参数错误,未获取模版ID')
-            return
-          }
-          this.loadDataTemplate()
-        })
-      },
-      deep: true,
-      immediate: true
     },
- /*   templateId: {
-      handler(val) {
-        if (this.$utils.isNotEmpty(val)) {
-          this.dataTemplateId = val
-          this.loadDataTemplate()
+    data () {
+        return {
+            dataTemplate: {},
+            dataTemplateId: ''
         }
-      },
-      immediate: true
-    } */
-  },
-  // created(){
-  //   this.loadDataTemplate()
-  // },
-  methods: {
-    loadDataTemplate() {
-      const loading = this.$loading({
-        lock: false,
-        background: 'transparent'
-      })
-      this.dataTemplate = {}
-      getBuildDataById({
-        dataTemplateId: this.templateId || this.dataTemplateId,
-        isFilterForm: false,
-        isRightsFilter: true
-      }).then(response => {
-        // 从后台获取数据
-        const data = this.$utils.parseData(response.data)
-        if (data && data.attrs && this.$utils.isNotEmpty(data.attrs.form_key)) {
-          getFormDataByFormKey({
-            formKey: data.attrs.form_key
-          }).then(response => {
-            const formData = this.$utils.parseData(response.data)
-            const datasets = buildFelds(formData.fields, data.datasets)
-            data.datasets = datasets
-            this.dataTemplate = data
-            setTimeout(() => {
-              loading.close()
-            }, 1000)
-          }).catch(() => {
-            loading.close()
-          })
-        } else {
-          this.dataTemplate = data
-          setTimeout(() => {
-            loading.close()
-          }, 1000)
+    },
+    watch: {
+        '$route': {
+            handler (val, oldVal) {
+                if (val === oldVal) {
+                    return
+                }
+                this.$nextTick(() => {
+                    const defaultUrl = this.$route.meta.defaultUrl
+                    const isDashboard = this.$route.name
+                    if (this.$utils.isNotEmpty(defaultUrl)) {
+                        // 判断地址是否正确
+                        const url = defaultUrl.split('/')
+                        this.dataTemplateId = url[url.length - 1]
+                    } else if (isDashboard === 'dashboard') {
+                        this.dataTemplateId = this.templateId
+                    } else {
+                        const params = this.$route.params
+                        this.dataTemplateId = params.id
+                    }
+                    if (this.$utils.isEmpty(this.dataTemplateId)) {
+                        this.$alert('参数错误,未获取模版ID')
+                        return
+                    }
+                    this.loadDataTemplate()
+                })
+            },
+            deep: true,
+            immediate: true
         }
-      }).catch(() => {
-        loading.close()
-      })
+        // templateId: {
+        //     handler (val) {
+        //         if (this.$utils.isNotEmpty(val)) {
+        //             this.dataTemplateId = val
+        //             this.loadDataTemplate()
+        //         }
+        //     },
+        //     immediate: true
+        // }
     },
-    buildFelds(fields, datasets) {
-      const fieldMap = {}
-      fields.forEach(field => {
-        if (field.field_type === 'grid' || field.field_type === 'tabs') {
-          field.field_options.columns.forEach(column => {
-            column.fields.forEach(cfield => {
-              fieldMap[cfield.field_name] = cfield
+    // created () {
+    //     this.loadDataTemplate()
+    // },
+    methods: {
+        loadDataTemplate () {
+            const loading = this.$loading({
+                lock: false,
+                background: 'transparent'
             })
-          })
-        } else {
-          fieldMap[field.field_name] = field
-        }
-      })
-      const rtn = []
-      datasets.forEach(dataset => {
-        const field = fieldMap[dataset.name]
-        if (this.$utils.isNotEmpty(field)) {
-          dataset.field_type = field.field_type
-          dataset.field_options = field.field_options
+            this.dataTemplate = {}
+            getBuildDataById({
+                dataTemplateId: this.templateId || this.dataTemplateId,
+                isFilterForm: false,
+                isRightsFilter: true
+            }).then(response => {
+                // 从后台获取数据
+                const data = this.$utils.parseData(response.data)
+                if (data && data.attrs && this.$utils.isNotEmpty(data.attrs.form_key)) {
+                    getFormDataByFormKey({
+                        formKey: data.attrs.form_key
+                    }).then(response => {
+                        const formData = this.$utils.parseData(response.data)
+                        const datasets = buildFelds(formData.fields, data.datasets)
+                        data.datasets = datasets
+                        this.dataTemplate = data
+                        if (this.typeName) {
+                            this.dataTemplate.templates = this.dealData(this.dataTemplate)
+                        }
+                        setTimeout(() => {
+                            loading.close()
+                        }, 1000)
+                    }).catch(() => {
+                        loading.close()
+                    })
+                } else {
+                    this.dataTemplate = data
+                    setTimeout(() => {
+                        loading.close()
+                    }, 1000)
+                }
+            }).catch(() => {
+                loading.close()
+            })
+        },
+        buildFelds (fields, datasets) {
+            const fieldMap = {}
+            fields.forEach(field => {
+                if (field.field_type === 'grid' || field.field_type === 'tabs') {
+                    field.field_options.columns.forEach(column => {
+                        column.fields.forEach(cfield => {
+                            fieldMap[cfield.field_name] = cfield
+                        })
+                    })
+                } else {
+                    fieldMap[field.field_name] = field
+                }
+            })
+            const rtn = []
+            datasets.forEach(dataset => {
+                const field = fieldMap[dataset.name]
+                if (this.$utils.isNotEmpty(field)) {
+                    dataset.field_type = field.field_type
+                    dataset.field_options = field.field_options
+                }
+                rtn.push(dataset)
+            })
+            return rtn
+        },
+        dealData ({ showType, templates }) {
+            if (showType !== 'list') {
+                return templates
+            }
+            const data = templates[0]
+            // 替换列表标题
+            data.attrs.display_field = this.typeName
+            // 替换按钮
+            data.buttons.function_buttons = this.dealButtom(data.buttons.function_buttons)
+            // 增加过滤信息
+            data.filter_conditions = this.dealFilter(data.filter_conditions)
+            return [data]
+        },
+        dealButtom (buttons) {
+            const keys = ['search', 'remove', 'consult']
+            if (!buttons.length) {
+                return []
+            }
+            const btn = buttons.filter(i => keys.includes(i.button_type))
+            btn.push({
+                button_type: 'detail',
+                label: '明细',
+                position: 'manage',
+                type: 'info'
+            })
+            return btn
+        },
+        dealFilter (dataList) {
+            if (!dataList.length || !this.filterParams.length) {
+                return []
+            }
+            const newDataList = dataList.map(data => {
+                const newRules = [
+                    ...this.filterParams.map(item => ({
+                        id: item.field,
+                        type: 'string',
+                        input: 'text',
+                        ...item
+                    })),
+                    ...data.filter.rules
+                ]
+                return { ...data, filter: { ...data.filter, rules: newRules }}
+            })
+            return newDataList
         }
-        rtn.push(dataset)
-      })
-      return rtn
     }
-  }
 }
 </script>
-<style lang="scss" >
-  .data-template-renderer-dialog{
-    .el-dialog__header{
-      padding: 0;
-      border-bottom:0;
+<style lang="scss">
+.data-template-renderer-dialog {
+    .el-dialog__header {
+        padding: 0;
+        border-bottom: 0;
     }
     .el-dialog__body {
-      padding: 0;
+        padding: 0;
     }
-    .el-dialog__headerbtn{
-      z-index: 99999;
+    .el-dialog__headerbtn {
+        z-index: 99999;
     }
-  }
+}
 </style>

+ 1 - 1
src/views/system/dashboard/components/home-calendar.vue

@@ -452,7 +452,7 @@ export default {
         opacity: 0.4!important;
         color: #C0C4CC!important;}
        .el-tree{border-right:1px solid #ccc;}
-       .el-tree-node__label{width:120px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}
+       /* .el-tree-node__label{width:120px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;} */
        .span-ellipsis {
         width: 100%;
         overflow: hidden;