Преглед изворни кода

同步医学改动(数据模板)

cfort пре 2 година
родитељ
комит
747be18d3b

+ 26 - 5
src/business/platform/data/constants/buttons.js

@@ -10,7 +10,7 @@ const buttons = {
     },
     'resetSearch': {
         label: '重置',
-        type: 'danger',
+        type: 'primary',
         icon: 'ibps-icon-undo',
         scope: ['toolbar', 'search']
     },
@@ -22,23 +22,23 @@ const buttons = {
     },
     'add': {
         label: '添加',
-        type: 'primary',
+        type: 'success',
         icon: 'ibps-icon-add',
         scope: ['toolbar', 'contextmenu'],
         contextmenu: 'all'
     },
     'remove': {
         label: '删除',
-        type: 'primary',
+        type: 'danger',
         icon: 'ibps-icon-remove',
-        scope: ['toolbar', 'manage'],
+        scope: ['toolbar'],
         contextmenu: 'sub'
     },
     'edit': {
         label: '编辑',
         type: 'primary',
         icon: 'ibps-icon-edit',
-        scope: ['toolbar', 'manage'],
+        scope: ['manage'],
         contextmenu: 'sub'
     },
     // 原明细
@@ -90,7 +90,28 @@ const buttons = {
         label: '导出模板',
         type: 'primary',
         icon: 'ibps-icon-export',
+        scope: ['toolbar']
+    },
+    'openTask': {
+        label: '编制',
+        type: 'success',
+        icon: 'ibps-icon-add',
         scope: ['toolbar'],
+        contextmenu: 'all'
+    },
+    'consult': {
+        label: '表单',
+        type: 'primary',
+        icon: 'ibps-icon-table',
+        scope: ['manage'],
+        contextmenu: 'sub'
+    },
+    'download': {
+        label: '下载记录',
+        type: 'primary',
+        icon: 'ibps-icon-download',
+        scope: ['manage'],
+        contextmenu: 'sub'
     },
     'close': {
         label: '关闭',

+ 184 - 184
src/business/platform/data/templatebuilder/dialog.vue

@@ -1,28 +1,28 @@
 <template>
-  <el-dialog
-    :visible.sync="dialogVisible"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    class="templatebuilder-dialog"
-    fullscreen
-    append-to-body
-    @open="getFormData"
-    @close="closeDialog"
-  >
-    <div
-      v-loading.fullscreen.lock="dialogLoading"
-      :element-loading-text="$t('common.loading')"
-    >
-      <data-template-builder
-        v-if="dialogVisible && $utils.isNotEmpty(dataTemplate)"
-        :data="dataTemplate"
-        :compose-confirm="composeConfirm"
-        @callback="handleCallback"
-        @initDataTemplte="initDataTemplte"
+    <el-dialog
+        :visible.sync="dialogVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        class="templatebuilder-dialog"
+        fullscreen
+        append-to-body
+        @open="getFormData"
         @close="closeDialog"
-      />
-    </div>
-  </el-dialog>
+    >
+        <div
+            v-loading.fullscreen.lock="dialogLoading"
+            :element-loading-text="$t('common.loading')"
+        >
+            <data-template-builder
+                v-if="dialogVisible && $utils.isNotEmpty(dataTemplate)"
+                :data="dataTemplate"
+                :compose-confirm="composeConfirm"
+                @callback="handleCallback"
+                @initDataTemplte="initDataTemplte"
+                @close="closeDialog"
+            />
+        </div>
+    </el-dialog>
 </template>
 <script>
 import { getBuildDataById } from '@/api/platform/data/dataTemplate'
@@ -34,184 +34,184 @@ import Utils from './utils'
 import DataTemplateBuilder from './index'
 
 export default {
-  components: {
-    DataTemplateBuilder
-  },
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
-    },
-    readonly: {
-      type: Boolean,
-      default: false
+    components: {
+        DataTemplateBuilder
     },
-    data: {
-      type: Object
+    props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        readonly: {
+            type: Boolean,
+            default: false
+        },
+        data: {
+            type: Object
+        },
+        composeConfirm: {
+            type: Boolean,
+            default: false
+        },
+        id: String
     },
-    composeConfirm: {
-      type: Boolean,
-      default: false
-    },
-    id: String
-  },
-  data() {
-    return {
-      dialogVisible: this.visible,
-      dialogLoading: false,
-      defaultForm: {
-        attrs: {},
-        templates: [] // 模版
-      },
-      dataTemplate: null
-    }
-  },
-  computed: {
-    formId() {
-      return this.id
-    }
-  },
-  watch: {
-    visible: {
-      handler: function(val, oldVal) {
-        this.dialogVisible = this.visible
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    ...mapActions({
-      setDatasets: 'ibps/dataTemplate/setDatasets'
-    }),
-    // 关闭当前窗口
-    closeDialog() {
-      this.$emit('close', false)
-    },
-    handleCallback() {
-      this.$emit('callback')
-    },
-    getDefaultTemplateAttrs(data) {
-      if (data.type === 'valueSource') {
-        data.templates = [
-          Utils.defaultValueSourcetAttrs(data)
-        ]
-      } else {
-        if (data.showType === 'list') {
-          data.templates = [
-            Utils.defaultListAttrs(data)
-          ]
-        } else if (data.showType === 'tree' || data.composeType === 'treeForm') {
-          data.templates = [
-            Utils.defaultTreeAttrs(data)
-          ]
-        } else if (data.showType === 'compose' && data.composeType !== 'treeForm') {
-          data.templates = []
-        }
-
-        if (data.type === 'dialog') {
-          data.dialogs = Utils.defaultDialogAttrs()
+    data () {
+        return {
+            dialogVisible: this.visible,
+            dialogLoading: false,
+            defaultForm: {
+                attrs: {},
+                templates: [] // 模版
+            },
+            dataTemplate: null
         }
-      }
-      return data
     },
-    initDataTemplte(data) {
-      const defaultForm = JSON.parse(JSON.stringify(this.defaultForm))
-      this.dataTemplate = defaultsDeep(this.getDefaultTemplateAttrs(data), defaultForm)
-    },
-    /**
-     * 获取表单数据
-     */
-    getFormData() {
-      this.dataTemplate = null
-      this.dialogLoading = true
-      const defaultForm = JSON.parse(JSON.stringify(this.defaultForm))
-      if (this.$utils.isEmpty(this.formId) && this.$utils.isNotEmpty(this.data)) {
-        const data = JSON.parse(JSON.stringify(this.data))
-        // 重置表单
-        this.dataTemplate = defaultsDeep(this.getDefaultTemplateAttrs(data), defaultForm)
-        if (this.dataTemplate.datasetKey) {
-          this.intDatasets(this.dataTemplate.datasetKey)
-        } else {
-          this.dialogLoading = false
-          this.setDatasets([])
-        }
-        return
-      }
-      getBuildDataById({
-        dataTemplateId: this.formId
-      }).then(response => {
-        const data = response.data
-        // 从后台获取数据
-        this.dataTemplate = defaultsDeep({}, JSON.parse(data), defaultForm)
-        if (this.dataTemplate.datasetKey) {
-          this.intDatasets(this.dataTemplate.datasetKey)
-        } else {
-          this.setDatasets([])
+    computed: {
+        formId () {
+            return this.id
         }
-        this.dialogLoading = false
-      }).catch(() => {
-        this.dialogLoading = false
-      })
     },
-    intDatasets(datasetKey) {
-      const datasets = this.dataTemplate.datasets
-      if (this.$utils.isNotEmpty(datasets)) {
-        this.setDatasets(datasets)
-        this.setUnique(datasets)
-        this.dialogLoading = false
-      } else {
-        buildTree({
-          datasetKey: datasetKey
-        }).then(response => {
-          this.dialogLoading = false
-          const datasets = response.data
-          this.setDatasets(datasets)
-          this.dataTemplate.datasets = datasets
-          this.setUnique(datasets)
-        }).catch((e) => {
-          this.dialogLoading = false
-        })
-      }
+    watch: {
+        visible: {
+            handler: function (val, oldVal) {
+                this.dialogVisible = this.visible
+            },
+            immediate: true
+        }
     },
-    setUnique(datasets) {
-      if (this.$utils.isEmpty(this.dataTemplate.unique)) {
-        if (Array.isArray(datasets)) {
-          // 取第一个字段
-          const fields = datasets.filter((d) => {
-            return d.parentId !== '0'
-          })
-          if (fields && fields.length > 0) {
-            this.dataTemplate.unique = fields[0].name
-          }
-        } else {
-          // TODO:唯一字段
+    methods: {
+        ...mapActions({
+            setDatasets: 'ibps/dataTemplate/setDatasets'
+        }),
+        // 关闭当前窗口
+        closeDialog () {
+            this.$emit('close', false)
+        },
+        handleCallback () {
+            this.$emit('callback')
+        },
+        getDefaultTemplateAttrs (data) {
+            if (data.type === 'valueSource') {
+                data.templates = [
+                    Utils.defaultValueSourcetAttrs(data)
+                ]
+            } else {
+                if (data.showType === 'list') {
+                    data.templates = [
+                        Utils.defaultListAttrs(data)
+                    ]
+                } else if (data.showType === 'tree' || data.composeType === 'treeForm') {
+                    data.templates = [
+                        Utils.defaultTreeAttrs(data)
+                    ]
+                } else if (data.showType === 'compose' && data.composeType !== 'treeForm') {
+                    data.templates = []
+                }
+
+                if (data.type === 'dialog') {
+                    data.dialogs = Utils.defaultDialogAttrs()
+                }
+            }
+            return data
+        },
+        initDataTemplte (data) {
+            const defaultForm = JSON.parse(JSON.stringify(this.defaultForm))
+            this.dataTemplate = defaultsDeep(this.getDefaultTemplateAttrs(data), defaultForm)
+        },
+        /**
+         * 获取表单数据
+         */
+        getFormData () {
+            this.dataTemplate = null
+            this.dialogLoading = true
+            const defaultForm = JSON.parse(JSON.stringify(this.defaultForm))
+            if (this.$utils.isEmpty(this.formId) && this.$utils.isNotEmpty(this.data)) {
+                const data = JSON.parse(JSON.stringify(this.data))
+                // 重置表单
+                this.dataTemplate = defaultsDeep(this.getDefaultTemplateAttrs(data), defaultForm)
+                if (this.dataTemplate.datasetKey) {
+                    this.intDatasets(this.dataTemplate.datasetKey)
+                } else {
+                    this.dialogLoading = false
+                    this.setDatasets([])
+                }
+                return
+            }
+            getBuildDataById({
+                dataTemplateId: this.formId
+            }).then(response => {
+                const data = response.data
+                // 从后台获取数据
+                this.dataTemplate = defaultsDeep({}, JSON.parse(data), defaultForm)
+                if (this.dataTemplate.datasetKey) {
+                    this.intDatasets(this.dataTemplate.datasetKey)
+                } else {
+                    this.setDatasets([])
+                }
+                this.dialogLoading = false
+            }).catch(() => {
+                this.dialogLoading = false
+            })
+        },
+        intDatasets (datasetKey) {
+            const datasets = this.dataTemplate.datasets
+            if (this.$utils.isNotEmpty(datasets)) {
+                this.setDatasets(datasets)
+                this.setUnique(datasets)
+                this.dialogLoading = false
+            } else {
+                buildTree({
+                    datasetKey: datasetKey
+                }).then(response => {
+                    this.dialogLoading = false
+                    const datasets = response.data
+                    this.setDatasets(datasets)
+                    this.dataTemplate.datasets = datasets
+                    this.setUnique(datasets)
+                }).catch((e) => {
+                    this.dialogLoading = false
+                })
+            }
+        },
+        setUnique (datasets) {
+            if (this.$utils.isEmpty(this.dataTemplate.unique)) {
+                if (Array.isArray(datasets)) {
+                    // 取第一个字段
+                    const fields = datasets.filter((d) => {
+                        return d.parentId !== '0'
+                    })
+                    if (fields && fields.length > 0) {
+                        this.dataTemplate.unique = fields[0].name
+                    }
+                } else {
+                    // TODO:唯一字段
+                }
+            }
         }
-      }
     }
-  }
 
 }
 </script>
 <style lang="scss" >
-  .templatebuilder-dialog{
-    .el-dialog__header{
-      padding: 0;
-      border-bottom:0;
+.templatebuilder-dialog {
+    .el-dialog__header {
+        padding: 0;
+        border-bottom: 0;
     }
     .el-dialog__body {
-     padding: 0;
+        padding: 0;
     }
-    .is-fullscreen{
-      overflow: hidden;
+    .is-fullscreen {
+        overflow: hidden;
     }
     @media print {
-      .el-dialog__headerbtn {
-        display: none !important;
-      }
-      .hidden-print{
-        padding: 0;
-        margin:  0;
-      }
+        .el-dialog__headerbtn {
+            display: none !important;
+        }
+        .hidden-print {
+            padding: 0;
+            margin: 0;
+        }
     }
-  }
+}
 </style>

+ 344 - 344
src/business/platform/data/templatebuilder/right-aside/components/column.vue

@@ -1,154 +1,154 @@
 <template>
-  <div class="panel panel-default">
-    <div class="panel-heading">
-      <span>{{ title }}
-        <ibps-help v-if="prop==='query_columns'" content="JOSN和多选数据暂时不支持" />
+    <div class="panel panel-default">
+        <div class="panel-heading">
+            <span>{{ title }}
+                <ibps-help v-if="prop==='query_columns'" content="JOSN和多选数据暂时不支持" />
 
-        <template v-if="prop==='display_columns'">
-          <el-divider direction="vertical" />
-          <el-tooltip :content="'添加所有字段为'+title" placement="top">
-            <i class="el-icon-circle-plus-outline el-dropdown-link" @click="addAllColumn" />
-          </el-tooltip>
-          <el-divider direction="vertical" />
-          <el-tooltip :content="'删除所有'+title" placement="top">
-            <i class="el-icon-delete el-dropdown-link" @click="removeAllColumn" />
-          </el-tooltip>
+                <template v-if="prop==='display_columns'">
+                    <el-divider direction="vertical" />
+                    <el-tooltip :content="'添加所有字段为'+title" placement="top">
+                        <i class="el-icon-circle-plus-outline el-dropdown-link" @click="addAllColumn" />
+                    </el-tooltip>
+                    <el-divider direction="vertical" />
+                    <el-tooltip :content="'删除所有'+title" placement="top">
+                        <i class="el-icon-delete el-dropdown-link" @click="removeAllColumn" />
+                    </el-tooltip>
 
-        </template>
-      </span>
-      <div class="ibps-fr ibps-pr-10">
-        <!-- TODO -->
-        <template v-if="datasetType==='thirdparty'">
-          <el-tooltip :content="'添加'+title" placement="top">
-            <span class="el-dropdown-link" @click="addThirdpartyColumn">
-              <i class="el-icon-circle-plus el-icon--right" />
+                </template>
             </span>
-          </el-tooltip>
-        </template>
-        <template v-else>
-          <template v-if="prop!=='filter_conditions'">
+            <div class="ibps-fr ibps-pr-10">
+                <!-- TODO -->
+                <template v-if="datasetType==='thirdparty'">
+                    <el-tooltip :content="'添加'+title" placement="top">
+                        <span class="el-dropdown-link" @click="addThirdpartyColumn">
+                            <i class="el-icon-circle-plus el-icon--right" />
+                        </span>
+                    </el-tooltip>
+                </template>
+                <template v-else>
+                    <template v-if="prop!=='filter_conditions'">
 
-            <el-dropdown :hide-on-click="false" trigger="click" @command="addColumn">
-              <el-tooltip :content="'添加'+title" placement="top">
-                <span class="el-dropdown-link">
-                  <i class="el-icon-circle-plus el-icon--right" />
-                </span>
-              </el-tooltip>
-              <el-dropdown-menu slot="dropdown">
-                <el-scrollbar
-                  tag="div"
-                  wrap-class="el-select-dropdown__wrap"
-                  view-class="el-select-dropdown__list"
-                >
-                  <el-dropdown-item
-                    v-for="(field,index) in fields"
-                    :key="field.name+index"
-                    :disabled="isDisabled(field.name)"
-                    :command="field"
-                  >
-                    <i :class="'ibps-icon-'+field.type" />{{ field.label }}
-                  </el-dropdown-item>
-                </el-scrollbar>
-              </el-dropdown-menu>
-            </el-dropdown>
+                        <el-dropdown :hide-on-click="false" trigger="click" @command="addColumn">
+                            <el-tooltip :content="'添加'+title" placement="top">
+                                <span class="el-dropdown-link">
+                                    <i class="el-icon-circle-plus el-icon--right" />
+                                </span>
+                            </el-tooltip>
+                            <el-dropdown-menu slot="dropdown">
+                                <el-scrollbar
+                                    tag="div"
+                                    wrap-class="el-select-dropdown__wrap"
+                                    view-class="el-select-dropdown__list"
+                                >
+                                    <el-dropdown-item
+                                        v-for="(field,index) in fields"
+                                        :key="field.name+index"
+                                        :disabled="isDisabled(field.name)"
+                                        :command="field"
+                                    >
+                                        <i :class="'ibps-icon-'+field.type" />{{ field.label }}
+                                    </el-dropdown-item>
+                                </el-scrollbar>
+                            </el-dropdown-menu>
+                        </el-dropdown>
 
-          </template>
-          <el-tooltip v-else :content="'添加'+title" placement="top">
-            <span class="el-dropdown-link" @click="addFilterConditions">
-              <i class="el-icon-circle-plus el-icon--right" />
-            </span>
-          </el-tooltip>
-        </template>
+                    </template>
+                    <el-tooltip v-else :content="'添加'+title" placement="top">
+                        <span class="el-dropdown-link" @click="addFilterConditions">
+                            <i class="el-icon-circle-plus el-icon--right" />
+                        </span>
+                    </el-tooltip>
+                </template>
 
-        <el-divider v-if="prop!=='sort_columns'" direction="vertical" />
-        <!-- 快捷权限设置-->
-        <el-dropdown v-if="prop!=='sort_columns'" trigger="click" @command="settingRights">
-          <el-tooltip content="快捷权限设置" placement="top">
-            <span class="el-dropdown-link">
-              <i class="ibps-icon ibps-icon-shield" />
-            </span>
-          </el-tooltip>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item
-              v-for="(rightsType,index) in rightsTypes"
-              :key="rightsType.value+index"
-              :command="rightsType.value"
+                <el-divider v-if="prop!=='sort_columns'" direction="vertical" />
+                <!-- 快捷权限设置-->
+                <el-dropdown v-if="prop!=='sort_columns'" trigger="click" @command="settingRights">
+                    <el-tooltip content="快捷权限设置" placement="top">
+                        <span class="el-dropdown-link">
+                            <i class="ibps-icon ibps-icon-shield" />
+                        </span>
+                    </el-tooltip>
+                    <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item
+                            v-for="(rightsType,index) in rightsTypes"
+                            :key="rightsType.value+index"
+                            :command="rightsType.value"
+                        >
+                            {{ rightsType.label }}
+                        </el-dropdown-item>
+                    </el-dropdown-menu>
+                </el-dropdown>
+            </div>
+        </div>
+        <div class="panel-body">
+            <vue-draggable
+                v-if="columns && columns.length >0"
+                v-model="columns"
+                v-bind="draggableOptions"
+                class="list-group"
+                @start="isDragging = true"
+                @end="()=>{isDragging= false}"
             >
-              {{ rightsType.label }}
-            </el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-      </div>
-    </div>
-    <div class="panel-body">
-      <vue-draggable
-        v-if="columns && columns.length >0"
-        v-model="columns"
-        v-bind="draggableOptions"
-        class="list-group"
-        @start="isDragging = true"
-        @end="()=>{isDragging= false}"
-      >
-        <div v-for="(column,i) in columns" :key="column.name||column.key+''+i" class="list-group-item">
-          <div class="actions-left">
-            {{ column.label }} <el-tag v-if="prop==='sort_columns'" type="">{{ column.direction ==='desc'?'降序':'升序' }}</el-tag>
-          </div>
-          <el-button-group class="actions" :class="{'sort-column-actions':prop==='sort_columns'}">
-            <template v-if="prop==='sort_columns' && datasetType !=='thirdparty'">
-              <el-tooltip
-                :content="'设置'+(column.direction==='desc'?'升序':'降序')"
-                placement="top"
-              >
-                <el-button
-                  size="small"
-                  type="text"
-                  :icon="'ibps-icon-sort-alpha-'+column.direction"
-                  @click="settingSort(i,column.direction==='desc')"
+                <div v-for="(column,i) in columns" :key="column.name||column.key+''+i" class="list-group-item">
+                    <div class="actions-left">
+                        {{ column.label }} <el-tag v-if="prop==='sort_columns'" type="">{{ column.direction ==='desc'?'降序':'升序' }}</el-tag>
+                    </div>
+                    <el-button-group class="actions" :class="{'sort-column-actions':prop==='sort_columns'}">
+                        <template v-if="prop==='sort_columns' && datasetType !=='thirdparty'">
+                            <el-tooltip
+                                :content="'设置'+(column.direction==='desc'?'升序':'降序')"
+                                placement="top"
+                            >
+                                <el-button
+                                    size="small"
+                                    type="text"
+                                    :icon="'ibps-icon-sort-alpha-'+column.direction"
+                                    @click="settingSort(i,column.direction==='desc')"
+                                />
+                            </el-tooltip>
+                        </template>
+                        <el-button size="small" type="text" title="设置" icon="ibps-icon-cog" @click="settingColumn(i)" />
+                        <el-button size="small" type="text" title="删除" icon="el-icon-delete" @click="removeColumn(i)" />
+                        <el-button size="small" class="draggable" title="拖动排序" data-role="sort_choice" type="text" icon="ibps-icon-arrows" />
+                    </el-button-group>
+                </div>
+            </vue-draggable>
+            <div v-else>
+                <el-alert
+                    :closable="false"
+                    :title="'未设置'+title"
+                    type="info"
+                    center
                 />
-              </el-tooltip>
-            </template>
-            <el-button size="small" type="text" title="设置" icon="ibps-icon-cog" @click="settingColumn(i)" />
-            <el-button size="small" type="text" title="删除" icon="el-icon-delete" @click="removeColumn(i)" />
-            <el-button size="small" class="draggable" title="拖动排序" data-role="sort_choice" type="text" icon="ibps-icon-arrows" />
-          </el-button-group>
+            </div>
         </div>
-      </vue-draggable>
-      <div v-else>
-        <el-alert
-          :closable="false"
-          :title="'未设置'+title"
-          type="info"
-          center
+        <el-dialog
+            ref="editFormDialog"
+            :visible.sync="dialogVisible"
+            :close-on-click-modal="false"
+            :close-on-press-escape="false"
+            :title="title"
+            :width="width"
+            class="edit-dialog"
+            top="5vh"
+            append-to-body
+            @close="closeDialog"
+        >
+            <slot :data.sync="editData" name="edit" />
+            <div slot="footer" class="el-dialog--center">
+                <ibps-toolbar
+                    :actions="toolbars"
+                    @action-event="handleActionEvent"
+                />
+            </div>
+        </el-dialog>
+        <rights-config
+            :visible="dialogRightsVisible"
+            title="权限配置"
+            @callback="handleRightsConfirm"
+            @close="visible => dialogRightsVisible = visible"
         />
-      </div>
     </div>
-    <el-dialog
-      ref="editFormDialog"
-      :visible.sync="dialogVisible"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      :title="title"
-      :width="width"
-      class="edit-dialog"
-      top="5vh"
-      append-to-body
-      @close="closeDialog"
-    >
-      <slot :data.sync="editData" name="edit" />
-      <div slot="footer" class="el-dialog--center">
-        <ibps-toolbar
-          :actions="toolbars"
-          @action-event="handleActionEvent"
-        />
-      </div>
-    </el-dialog>
-    <rights-config
-      :visible="dialogRightsVisible"
-      title="权限配置"
-      @callback="handleRightsConfirm"
-      @close="visible => dialogRightsVisible = visible"
-    />
-  </div>
 </template>
 <script>
 import ActionUtils from '@/utils/action'
@@ -157,222 +157,222 @@ import RightsConfig from '@/business/platform/rights/config'
 import { defaultsDeep } from 'lodash'
 import { rightsTypes } from '../constants'
 export default {
-  components: {
-    VueDraggable,
-    RightsConfig
-  },
-  props: {
-    title: {
-      type: String
+    components: {
+        VueDraggable,
+        RightsConfig
     },
-    width: {
-      type: String,
-      default: '60%'
-    },
-    prop: {
-      type: String
-    },
-    template: { // 模版
-      type: [Array, Object],
-      default: () => {}
-    },
-    // queryFields: {
-    //   type: [Array, Object],
-    //   default: () => []
-    // },
-    fields: { // 字段
-      type: [Array, Object],
-      default: () => []
+    props: {
+        title: {
+            type: String
+        },
+        width: {
+            type: String,
+            default: '60%'
+        },
+        prop: {
+            type: String
+        },
+        template: { // 模版
+            type: [Array, Object],
+            default: () => {}
+        },
+        // queryFields: {
+        //   type: [Array, Object],
+        //   default: () => []
+        // },
+        fields: { // 字段
+            type: [Array, Object],
+            default: () => []
+        },
+        defaultValue: { // 默认值
+            type: Object,
+            default: () => {}
+        },
+        datasetType: {
+            type: String,
+            default: 'table'
+        }
     },
-    defaultValue: { // 默认值
-      type: Object,
-      default: () => {}
+    data () {
+        return {
+            isDragging: false,
+            draggableOptions: {
+                handle: '.draggable',
+                ghostClass: 'sortable-ghost',
+                distance: 1,
+                disabled: false,
+                animation: 200,
+                axis: 'y'
+            },
+            rightsTypes: rightsTypes,
+            dialogVisible: false,
+            editData: {},
+            editIndex: -1,
+            dialogRightsVisible: false,
+            toolbars: [
+                { key: 'confirm' },
+                { key: 'cancel' }
+            ]
+        }
     },
-    datasetType: {
-      type: String,
-      default: 'table'
-    }
-  },
-  data() {
-    return {
-      isDragging: false,
-      draggableOptions: {
-        handle: '.draggable',
-        ghostClass: 'sortable-ghost',
-        distance: 1,
-        disabled: false,
-        animation: 200,
-        axis: 'y'
-      },
-      rightsTypes: rightsTypes,
-      dialogVisible: false,
-      editData: {},
-      editIndex: -1,
-      dialogRightsVisible: false,
-      toolbars: [
-        { key: 'confirm' },
-        { key: 'cancel' }
-      ]
-    }
-  },
-  computed: {
-    columns: {
-      get() {
-        return this.template[this.prop] || []
-      },
-      set(value) {
-        this.handleInput(value)
-      }
-    }
-  },
-  methods: {
-    handleActionEvent({ key }) {
-      switch (key) {
-        case 'confirm':
-          this.handleConfirm()
-          break
-        case 'cancel':
-          this.closeDialog()
-          break
-        default:
-          break
-      }
+    computed: {
+        columns: {
+            get () {
+                return this.template[this.prop] || []
+            },
+            set (value) {
+                this.handleInput(value)
+            }
+        }
     },
-    // 添加字段
-    addAllColumn() {
-      const columns = this.columns
-      const columnMap = {}
+    methods: {
+        handleActionEvent ({ key }) {
+            switch (key) {
+                case 'confirm':
+                    this.handleConfirm()
+                    break
+                case 'cancel':
+                    this.closeDialog()
+                    break
+                default:
+                    break
+            }
+        },
+        // 添加字段
+        addAllColumn () {
+            const columns = this.columns
+            const columnMap = {}
 
-      columns.forEach(column => {
-        columnMap[column.name] = column
-      })
+            columns.forEach(column => {
+                columnMap[column.name] = column
+            })
 
-      for (let i = 0; i < this.fields.length; i++) {
-        const field = this.fields[i]
-        if (!columnMap[field.name]) {
-          const column = {
-            label: field.label,
-            name: field.name,
-            hidden: false
-          }
-          columns.push(column)
-        }
-      }
+            for (let i = 0; i < this.fields.length; i++) {
+                const field = this.fields[i]
+                if (!columnMap[field.name]) {
+                    const column = {
+                        label: field.label,
+                        name: field.name,
+                        hidden: false
+                    }
+                    columns.push(column)
+                }
+            }
 
-      this.handleInput(columns)
-    },
-    removeAllColumn() {
-      this.handleInput([])
-    },
-    // 添加字段
-    addColumn(field) {
-      const columns = this.columns
-      const column = {
-        label: field.label,
-        name: field.name
-      }
-      if (this.prop === 'sort_columns' && columns.length >= 3) {
-        ActionUtils.warning('排序字段不能超过3个字段')
-        return
-      }
-      if (this.prop === 'sort_columns') {
-        column.direction = 'desc'
-      }
-      columns.push(column)
-      this.handleInput(columns)
-    },
-    //  添加过滤条件
-    addFilterConditions() {
-      this.editIndex = -1
-      const data = JSON.parse(JSON.stringify(this.defaultValue))
-      data.key = this.$utils.guid()
-      this.editData = data
-      this.dialogVisible = true
-    },
-    addThirdpartyColumn() {
-      this.editIndex = -1
-      const data = JSON.parse(JSON.stringify(this.defaultValue))
-      this.editData = data
-      this.dialogVisible = true
-    },
-    // 设置字段
-    settingColumn(i) {
-      this.editData = defaultsDeep({}, JSON.parse(JSON.stringify(this.columns[i])), this.defaultValue)
-      this.editIndex = i
-      this.dialogVisible = true
-    },
-    // 删除字段
-    removeColumn(i) {
-      this.columns.splice(i, 1)
-      this.handleInput(this.columns)
-    },
-    // 设置排序
-    settingSort(i, desc) {
-      const column = this.columns[i]
-      column.direction = desc ? 'asc' : 'desc'
-      this.columns.splice(i, 1, column)
-      this.handleInput(this.columns)
-    },
-    /**
+            this.handleInput(columns)
+        },
+        removeAllColumn () {
+            this.handleInput([])
+        },
+        // 添加字段
+        addColumn (field) {
+            const columns = this.columns
+            const column = {
+                label: field.label,
+                name: field.name
+            }
+            if (this.prop === 'sort_columns' && columns.length >= 5) {
+                ActionUtils.warning('排序字段不能超过5个字段')
+                return
+            }
+            if (this.prop === 'sort_columns') {
+                column.direction = 'desc'
+            }
+            columns.push(column)
+            this.handleInput(columns)
+        },
+        //  添加过滤条件
+        addFilterConditions () {
+            this.editIndex = -1
+            const data = JSON.parse(JSON.stringify(this.defaultValue))
+            data.key = this.$utils.guid()
+            this.editData = data
+            this.dialogVisible = true
+        },
+        addThirdpartyColumn () {
+            this.editIndex = -1
+            const data = JSON.parse(JSON.stringify(this.defaultValue))
+            this.editData = data
+            this.dialogVisible = true
+        },
+        // 设置字段
+        settingColumn (i) {
+            this.editData = defaultsDeep({}, JSON.parse(JSON.stringify(this.columns[i])), this.defaultValue)
+            this.editIndex = i
+            this.dialogVisible = true
+        },
+        // 删除字段
+        removeColumn (i) {
+            this.columns.splice(i, 1)
+            this.handleInput(this.columns)
+        },
+        // 设置排序
+        settingSort (i, desc) {
+            const column = this.columns[i]
+            column.direction = desc ? 'asc' : 'desc'
+            this.columns.splice(i, 1, column)
+            this.handleInput(this.columns)
+        },
+        /**
      * 统一设置权限
      */
-    settingRights(type) {
-      if (type === 'none' || type === 'all') {
-        const data = [{ type: type }]
-        this.setRightsData(data)
-      } else {
-        this.dialogRightsVisible = true
-      }
-    },
-    handleRightsConfirm(data) {
-      if (data.length === 0) {
-        data = [{ type: 'none' }]
-      }
-      this.setRightsData(data)
-    },
-    setRightsData(data) {
-      const columns = this.columns.map((column) => {
-        column.rights = data
-        return column
-      })
-      this.handleInput(columns)
-      ActionUtils.success('设置权限成功')
-    },
-    // 是否禁用
-    isDisabled(key) {
-      if (this.$utils.isEmpty(this.columns)) {
-        return false
-      } else {
-        const columns = Object.prototype.toString.call(this.columns) !== '[object Array]' ? [this.columns] : this.columns
-        return !!columns.find((column) => {
-          return column.name === key
-        })
-      }
-    },
-    // 关闭当前窗口
-    closeDialog() {
-      this.dialogVisible = false
-    },
-    handleConfirm() {
-      this.$refs.editFormDialog.$slots.default[0].componentInstance.getFormData((data) => {
-        if (!data) {
-          ActionUtils.saveErrorMessage()
-          return
-        }
-        if (this.editIndex > -1) {
-          this.columns.splice(this.editIndex, 1, data)
-        } else {
-          this.columns.push(data)
-        }
+        settingRights (type) {
+            if (type === 'none' || type === 'all') {
+                const data = [{ type: type }]
+                this.setRightsData(data)
+            } else {
+                this.dialogRightsVisible = true
+            }
+        },
+        handleRightsConfirm (data) {
+            if (data.length === 0) {
+                data = [{ type: 'none' }]
+            }
+            this.setRightsData(data)
+        },
+        setRightsData (data) {
+            const columns = this.columns.map((column) => {
+                column.rights = data
+                return column
+            })
+            this.handleInput(columns)
+            ActionUtils.success('设置权限成功')
+        },
+        // 是否禁用
+        isDisabled (key) {
+            if (this.$utils.isEmpty(this.columns)) {
+                return false
+            } else {
+                const columns = Object.prototype.toString.call(this.columns) !== '[object Array]' ? [this.columns] : this.columns
+                return !!columns.find((column) => {
+                    return column.name === key
+                })
+            }
+        },
+        // 关闭当前窗口
+        closeDialog () {
+            this.dialogVisible = false
+        },
+        handleConfirm () {
+            this.$refs.editFormDialog.$slots.default[0].componentInstance.getFormData((data) => {
+                if (!data) {
+                    ActionUtils.saveErrorMessage()
+                    return
+                }
+                if (this.editIndex > -1) {
+                    this.columns.splice(this.editIndex, 1, data)
+                } else {
+                    this.columns.push(data)
+                }
 
-        this.handleInput(this.columns)
-        this.closeDialog()
-      })
-    },
-    handleInput(value) {
-      this.$emit('input', this.prop, value)
+                this.handleInput(this.columns)
+                this.closeDialog()
+            })
+        },
+        handleInput (value) {
+            this.$emit('input', this.prop, value)
+        }
     }
-  }
 }
 </script>
 

+ 2 - 2
src/business/platform/data/templatebuilder/right-aside/constants/default-value.js

@@ -91,7 +91,7 @@ export const fucntionButtonDefaultValue = {
     position: 'all'
 }
 
-export const functionListButtonTypes = ['search', 'resetSearch', 'add', 'remove', 'edit', 'detail', 'print', 'import', 'export', 'sefStartFlow', 'custom', 'exportMuBan']
+export const functionListButtonTypes = ['search', 'resetSearch', 'add', 'remove', 'edit', 'detail', 'print', 'import', 'export', 'exportMuBan', 'openTask', 'consult', 'download', 'sefStartFlow', 'custom']
 // export const functionListButtonTypes = ['search', 'resetSearch', 'add', 'remove', 'edit', 'detail', 'sefStartFlow', 'custom']
 
 // export const functionTreeButtonTypes = ['refresh', 'expand', 'compress', 'custom']
@@ -99,5 +99,5 @@ export const functionTreeButtonTypes = ['refresh', 'expand', 'compress']
 
 export const contextmenuButtonTypes = ['add', 'remove', 'edit', 'detail']
 
-export const editButtonTypes = ['close', 'save', 'print', 'sefStartFlow', 'custom']
+export const editButtonTypes = ['close', 'save', 'print', 'sefStartFlow', 'custom', 'openTask', 'consult', 'download']
 // ['close', 'save', 'print', 'sefStartFlow']

+ 220 - 189
src/business/platform/data/templatebuilder/right-aside/editors/editor-button.vue

@@ -1,198 +1,229 @@
 <template>
-  <el-form
-    ref="form"
-    :model="formData"
-    :rules="rules"
-    label-width="120px"
-    size="mini"
-    @submit.native.prevent
-  >
-    <el-form-item label="按钮名称" required prop="label">
-      <el-input v-model="formData.label" placeholder="按钮名称" />
-    </el-form-item>
-    <el-form-item
-      v-if="formData && (formData.button_type === 'custom' || formData.button_type === 'sefStartFlow') "
-      label="按钮编码"
-      prop="code"
-      required
+    <el-form
+        ref="form"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+        size="mini"
+        @submit.native.prevent
     >
-      <el-input v-model="formData.code" placeholder="按钮编码" />
-    </el-form-item>
-    <el-form-item label="权限" prop="rights">
-      <rights-selector v-model="formData.rights" />
-    </el-form-item>
-    <el-form-item v-if="type==='function'" label="按钮位置" prop="position">
-      <el-radio-group v-model="formData.position">
-        <el-radio-button
-          v-for="t in positionType"
-          :key="t.value"
-          :label="t.value"
-        >{{ t.label }}</el-radio-button>
-      </el-radio-group>
-    </el-form-item>
-    <el-form-item label="按钮颜色" prop="style">
-      <el-select v-model="formData.style" placeholder="按钮颜色">
-        <el-option
-          v-for="item in colors"
-          :key="item.type"
-          :label="item.label"
-          :value="item.type"
+        <el-form-item label="按钮名称" required prop="label">
+            <el-input v-model="formData.label" placeholder="按钮名称" />
+        </el-form-item>
+        <el-form-item
+            v-if="formData && (formData.button_type === 'custom' || formData.button_type === 'sefStartFlow')"
+            label="按钮编码"
+            prop="code"
+            required
         >
-          <el-link :underline="false" :type="item.type " style="float: left">{{ item.label }}</el-link>
-        </el-option>
-      </el-select>
-    </el-form-item>
-    <el-form-item label="按钮图标" prop="icon">
-      <ibps-icon-select v-model="formData.icon" icon="el-icon-search" />
-    </el-form-item>
-    <el-form-item v-if="formData && formData.button_type === 'export'" label="导出字段" prop="icon">
-      <el-button size="small" type="primary" @click="handleExportFields">设置导出字段</el-button>
-    </el-form-item>
-
-    <el-form-item v-if="formData && formData.button_type === 'sefStartFlow'" prop="deflow">
-      <label slot="label">
-        绑定流程
-        <el-tooltip class="item" effect="light" placement="bottom">
-          <div slot="content" style="line-height:1.5;">
-            先在模板属性绑定表单,此流程定义数据才有!
-          </div>
-          <i class="ibps-icon-help" />:
-        </el-tooltip>
-      </label>
-      <bpm-def-selector
-        v-model="formData.deflow"
-        value-key="defKey"
-        :form-key="formKey"
-        :is-data-template-use="true"
-      />
-    </el-form-item>
-    <export-column
-      :visible="exportFieldDialogVisible"
-      :data="template"
-      @callback="handleExportColumn"
-      @close="(visible)=>exportFieldDialogVisible=visible"
-    />
-  </el-form>
+            <el-input v-model="formData.code" placeholder="按钮编码" />
+        </el-form-item>
+        <el-form-item label="权限" prop="rights">
+            <rights-selector v-model="formData.rights" />
+        </el-form-item>
+        <el-form-item
+            v-if="type === 'function'"
+            label="按钮位置"
+            prop="position"
+        >
+            <el-radio-group v-model="formData.position">
+                <el-radio-button
+                    v-for="t in positionType"
+                    :key="t.value"
+                    :label="t.value"
+                    >{{ t.label }}</el-radio-button
+                >
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="按钮颜色" prop="style">
+            <el-select v-model="formData.style" placeholder="按钮颜色">
+                <el-option
+                    v-for="item in colors"
+                    :key="item.type"
+                    :label="item.label"
+                    :value="item.type"
+                >
+                    <el-link
+                        :underline="false"
+                        :type="item.type"
+                        style="float: left;"
+                        >{{ item.label }}</el-link
+                    >
+                </el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="按钮图标" prop="icon">
+            <ibps-icon-select v-model="formData.icon" icon="el-icon-search" />
+        </el-form-item>
+        <el-form-item
+            v-if="formData && formData.button_type === 'export'"
+            label="导出字段"
+            prop="icon"
+        >
+            <el-button size="small" type="primary" @click="handleExportFields">设置导出字段</el-button>
+        </el-form-item>
+        <el-form-item
+            v-if="formData && (formData.button_type === 'consult' || formData.button_type === 'download')"
+            label="报表路径"
+            required
+            prop="label"
+        >
+            <el-input v-model="formData.reportPath" placeholder="请填写润乾报表完整路径" />
+        </el-form-item>
+        <el-form-item
+            v-if="formData && ['sefStartFlow', 'openTask'].includes(formData.button_type)"
+            prop="deflow"
+        >
+            <label slot="label">
+                绑定流程
+                <el-tooltip v-if="formData.button_type === 'sefStartFlow'" class="item" effect="light" placement="bottom">
+                    <div slot="content" style="line-height: 1.5;">
+                        先在模板属性绑定表单,此流程定义数据才有!
+                    </div>
+                    <i class="ibps-icon-help" />:
+                </el-tooltip>
+            </label>
+            <bpm-def-selector
+                v-model="formData.deflow"
+                :value-key="formData.button_type === 'sefStartFlow' ? 'defKey' : 'defId'"
+                :form-key="formKey"
+                :is-data-template-use="formData.button_type === 'sefStartFlow'"
+            />
+        </el-form-item>
+        <export-column
+            :visible="exportFieldDialogVisible"
+            :data="template"
+            @callback="handleExportColumn"
+            @close="visible => exportFieldDialogVisible = visible"
+        />
+    </el-form>
 </template>
 <script>
-import { hasPermission } from '@/business/platform/data/constants/buttons'
-import BpmDefSelector from '@/business/platform/bpmn/definition/selector'
-import RightsSelector from '@/business/platform/rights/config/selector'
-
-import ExportColumn from '../components/export-column'
-
-export default {
-  components: {
-    RightsSelector,
-    BpmDefSelector,
-    ExportColumn
-  },
-  props: {
-    data: {
-      type: Object
-    },
-    template: {
-      type: Object
-    },
-    formKey: String,
-    type: {
-      type: String,
-      default: 'function'
-    }
-  },
-  data() {
-    return {
-      colors: [
-        { type: 'default', label: '默认' },
-        { type: 'primary', label: '主要' },
-        { type: 'success', label: '成功' },
-        { type: 'info', label: '信息' },
-        { type: 'warning', label: '警告' },
-        { type: 'danger', label: '危险' }
-      ],
-      exportFieldDialogVisible: false,
-      formName: 'form',
-      formData: {
-        style: 'primary'
-      },
-      rules: {
-        label: [{ required: true, message: this.$t('validate.required') }]
-      }
-    }
-  },
-  computed: {
-    positionType() {
-      const positionType = []
-      positionType.push({
-        value: 'all',
-        label: '所有'
-      })
-      const buttonType = this.formData.button_type || ''
-      if (hasPermission(buttonType, 'toolbar') && this.type === 'function') {
-        positionType.push({
-          value: 'toolbar',
-          label: '仅顶部'
-        })
-      }
-
-      if (hasPermission(buttonType, 'manage') && this.type === 'function') {
-        positionType.push({
-          value: 'manage',
-          label: '仅管理列'
-        })
-      }
-      // if (hasPermission(buttonType, 'search') && this.type === 'function') {
-      //   positionType.push({
-      //     value: 'search',
-      //     label: '仅查询列'
-      //   })
-      // }
-
-      if (hasPermission(buttonType, 'edit') && this.type === 'edit') {
-        positionType.push({
-          value: 'edit',
-          label: '仅编辑'
-        })
-      }
+    import { hasPermission } from '@/business/platform/data/constants/buttons'
+    import BpmDefSelector from '@/business/platform/bpmn/definition/selector'
+    import RightsSelector from '@/business/platform/rights/config/selector'
+    import ExportColumn from '../components/export-column'
 
-      return positionType
-    }
-  },
-  watch: {
-    data: {
-      handler(val) {
-        if (val) {
-          this.formData = val
-          if (this.formData.button_type === 'custom' || this.formData.button_type === 'sefStartFlow') {
-            this.rules['code'] = [{ required: true, message: this.$t('validate.required') }]
-          } else {
-            this.rules['code'] = null
-          }
-        }
-      },
-      immediate: true
-    }
-  },
-  methods: {
-  // 获取表单数据
-    getFormData(callback) {
-      this.$refs[this.formName].validate((valid) => {
-        if (valid) {
-          callback(this.formData)
-        } else {
-          callback()
+    export default {
+        components: {
+            RightsSelector,
+            BpmDefSelector,
+            ExportColumn
+        },
+        props: {
+            data: {
+                type: Object
+            },
+            template: {
+                type: Object
+            },
+            formKey: String,
+            type: {
+                type: String,
+                default: 'function'
+            }
+        },
+        data() {
+            return {
+                colors: [
+                    { type: 'default', label: '默认' },
+                    { type: 'primary', label: '主要' },
+                    { type: 'success', label: '成功' },
+                    { type: 'info', label: '信息' },
+                    { type: 'warning', label: '警告' },
+                    { type: 'danger', label: '危险' }
+                ],
+                exportFieldDialogVisible: false,
+                formName: 'form',
+                formData: {
+                    style: 'primary'
+                },
+                rules: {
+                    label: [
+                        {
+                            required: true,
+                            message: this.$t('validate.required')
+                        }
+                    ]
+                }
+            }
+        },
+        computed: {
+            positionType() {
+                const positionType = []
+                positionType.push({
+                    value: 'all',
+                    label: '所有'
+                })
+                const buttonType = this.formData.button_type || ''
+                if (hasPermission(buttonType, 'toolbar') && this.type === 'function') {
+                    positionType.push({
+                        value: 'toolbar',
+                        label: '仅顶部'
+                    })
+                }
+                if (hasPermission(buttonType, 'manage') && this.type === 'function') {
+                    positionType.push({
+                        value: 'manage',
+                        label: '仅管理列'
+                    })
+                }
+                // if (hasPermission(buttonType, 'search') && this.type === 'function') {
+                //   positionType.push({
+                //     value: 'search',
+                //     label: '仅查询列'
+                //   })
+                // }
+                if (hasPermission(buttonType, 'edit') && this.type === 'edit') {
+                    positionType.push({
+                        value: 'edit',
+                        label: '仅编辑'
+                    })
+                }
+                return positionType
+            }
+        },
+        watch: {
+            data: {
+                handler(val) {
+                    if (val) {
+                        this.formData = val
+                        const spicialType = ['custom', 'sefStartFlow', 'openTask']
+                        if (spicialType.includes(this.formData.button_type)) {
+                            this.rules['code'] = [
+                                {
+                                    required: true,
+                                    message: this.$t('validate.required')
+                                }
+                            ]
+                        } else {
+                            this.rules['code'] = null
+                        }
+                    }
+                },
+                immediate: true
+            }
+        },
+        methods: {
+            // 获取表单数据
+            getFormData(callback) {
+                this.$refs[this.formName].validate((valid) => {
+                    if (valid) {
+                        callback(this.formData)
+                    } else {
+                        callback()
+                    }
+                })
+            },
+            handleExportFields() {
+                this.exportFieldDialogVisible = true
+            },
+            handleExportColumn(data) {
+                this.handleData('export_columns', data)
+            },
+            handleData(key, value) {
+                this.$emit('callback', key, value)
+            }
         }
-      })
-    },
-    handleExportFields() {
-      this.exportFieldDialogVisible = true
-    },
-    handleExportColumn(data) {
-      this.handleData('export_columns', data)
-    },
-    handleData(key, value) {
-      this.$emit('callback', key, value)
     }
-  }
-}
 </script>

+ 220 - 216
src/business/platform/data/templatebuilder/right-aside/editors/query-column.vue

@@ -1,20 +1,20 @@
 <template>
-  <el-form
-    ref="form"
-    :model="formData"
-    :rules="rules"
-    label-width="120px"
-    size="mini"
-    class="template-query-column"
-    @submit.native.prevent
-  >
+    <el-form
+        ref="form"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+        size="mini"
+        class="template-query-column"
+        @submit.native.prevent
+    >
 
-    <el-form-item label="显示名称" prop="label">
-      <el-input v-model="formData.label" placeholder="显示名称" />
-    </el-form-item>
+        <el-form-item label="显示名称" prop="label">
+            <el-input v-model="formData.label" placeholder="显示名称" />
+        </el-form-item>
 
-    <template v-if="datasetType === 'thirdparty'">
-      <!-- <el-form-item label="参数类型">
+        <template v-if="datasetType === 'thirdparty'">
+            <!-- <el-form-item label="参数类型">
         <el-select v-model="formData.paramType" placeholder="">
           <el-option
             v-for="item in paramTypeOptions"
@@ -45,143 +45,146 @@
           <el-input v-model="formData.paramValue" placeholder="绑定参数key值" />
         </el-form-item>
       </template> -->
-      <el-form-item label="标识(name)" prop="name">
-        <el-input v-model="formData.name" placeholder="标识(name)" />
-      </el-form-item>
-    </template>
-
-    <el-form-item label="权限">
-      <rights-selector v-model="formData.rights" />
-    </el-form-item>
-    <el-form-item label="是否常用条件">
-      <el-switch v-model="formData.common" active-value="Y" inactive-value="N" />
-    </el-form-item>
-    <el-form-item label="跟字段控件一致">
-      <el-switch v-model="formData.same" active-value="Y" inactive-value="N" />
-    </el-form-item>
-    <!--控件类型-->
-    <template v-if="formData.same === 'N'">
-      <el-form-item label="控件类型">
-        <el-select v-model="formData.field_type" @change="changeFieldType">
-          <el-option
-            v-for="item in queryFieldTypeOptions"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value"
-          />
-        </el-select>
-      </el-form-item>
-      <!-- 枚举值格式 -->
-      <el-form-item v-if="formData.field_type === 'radio' ||formData.field_type === 'checkbox' ||formData.field_type === 'select'" label-width="0" prop="options">
-        <field-options v-model="formData.field_options.options" />
-      </el-form-item>
-      <!-- 日期格式 -->
-      <el-form-item v-if="formData.field_type === 'datePicker' || formData.field_type === 'dateRange'" label="日期格式" prop="datefmt_type">
-        <el-select v-model="formData.field_options.datefmt_type">
-          <el-option
-            v-for="(item,index) in datefmtTypeOptions"
-            :key="index"
-            :label="item.label"
-            :value="item.value"
-          />
-        </el-select>
-        <el-input
-          v-if="formData.field_options.datefmt_type ==='custom'"
-          v-model="formData.field_options.datefmt"
-        />
-      </el-form-item>
+            <el-form-item label="标识(name)" prop="name">
+                <el-input v-model="formData.name" placeholder="标识(name)" />
+            </el-form-item>
+        </template>
 
-      <!-- 数据字典 -->
-      <el-form-item v-if="formData.field_type === 'dictionary'" label="数据字典" prop="dictionary">
-        <ibps-type-select
-          v-model="formData.field_options.dictionary"
-          category-key="DIC_TYPE"
-          node-key="typeKey"
-          clearable
-        />
-      </el-form-item>
-      <!-- 选择器 -->
-      <template v-if="formData.field_type === 'selector'" prop="selector_type">
-        <el-form-item label="选择器类型">
-          <el-select v-model="formData.field_options.selector_type">
-            <el-option
-              v-for="item in selectorTypeOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
+        <el-form-item label="权限">
+            <rights-selector v-model="formData.rights" />
         </el-form-item>
-        <el-form-item label="存储格式" prop="store">
-          <el-select v-model="formData.field_options.store">
-            <el-option
-              v-for="item in selectorStoreOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
+        <el-form-item label="是否常用条件">
+            <el-switch v-model="formData.common" active-value="Y" inactive-value="N" />
         </el-form-item>
-      </template>
-
-      <!-- 自定义对话框 -->
-      <template v-if="formData.field_type === 'customDialog'">
-        <el-form-item>
-          <template slot="label">自定义对话框</template>
-          <ibps-data-template-selector2
-            v-model="formData.field_options.dialog"
-            type="dialog"
-            placeholder="请选择自定义对话框"
-          />
+        <el-form-item label="跟字段控件一致">
+            <el-switch v-model="formData.same" active-value="Y" inactive-value="N" />
         </el-form-item>
-        <el-form-item>
-          <template slot="label">是否多选</template>
-          <el-switch
-            v-model="formData.field_options.multiple"
-            active-value="Y"
-            inactive-value="N"
-          />
-        </el-form-item>
-        <el-form-item>
-          <template slot="label">存储格式</template>
-          <el-select v-model="formData.field_options.store" style="width:100%;">
-            <el-option
-              v-for="item in dialogStoreOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-      </template>
-      <!-- end -->
-      <template v-if="formData.field_type === 'linkdata'">
-        <el-form-item>
-          <template slot="label">关联数据</template>
-          <ibps-data-template-selector2
-            v-model="formData.field_options.linkdata"
-            placeholder="请选择关联数据"
-            type="valueSource"
-          />
+        <el-form-item label="默认值">
+            <el-input v-model="formData.default_value" placeholder="默认值" />
         </el-form-item>
+        <!--控件类型-->
+        <template v-if="formData.same === 'N'">
+            <el-form-item label="控件类型">
+                <el-select v-model="formData.field_type" @change="changeFieldType">
+                    <el-option
+                        v-for="item in queryFieldTypeOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    />
+                </el-select>
+            </el-form-item>
+            <!-- 枚举值格式 -->
+            <el-form-item v-if="formData.field_type === 'radio' ||formData.field_type === 'checkbox' ||formData.field_type === 'select'" label-width="0" prop="options">
+                <field-options v-model="formData.field_options.options" />
+            </el-form-item>
+            <!-- 日期格式 -->
+            <el-form-item v-if="formData.field_type === 'datePicker' || formData.field_type === 'dateRange'" label="日期格式" prop="datefmt_type">
+                <el-select v-model="formData.field_options.datefmt_type">
+                    <el-option
+                        v-for="(item,index) in datefmtTypeOptions"
+                        :key="index"
+                        :label="item.label"
+                        :value="item.value"
+                    />
+                </el-select>
+                <el-input
+                    v-if="formData.field_options.datefmt_type ==='custom'"
+                    v-model="formData.field_options.datefmt"
+                />
+            </el-form-item>
 
-        <el-form-item>
-          <div slot="label">关联配置</div>
-          <div class="el-form-item__content">
-            <el-button
-              :disabled="disabledResultColumns"
-              style="width:100%;"
-              type="primary"
-              size="mini"
-              plain
-              @click="settingDataTemplateConfig('linkdata')"
-            >设置关联配置</el-button>
-          </div>
-        </el-form-item>
-      </template>
+            <!-- 数据字典 -->
+            <el-form-item v-if="formData.field_type === 'dictionary'" label="数据字典" prop="dictionary">
+                <ibps-type-select
+                    v-model="formData.field_options.dictionary"
+                    category-key="DIC_TYPE"
+                    node-key="typeKey"
+                    clearable
+                />
+            </el-form-item>
+            <!-- 选择器 -->
+            <template v-if="formData.field_type === 'selector'" prop="selector_type">
+                <el-form-item label="选择器类型">
+                    <el-select v-model="formData.field_options.selector_type">
+                        <el-option
+                            v-for="item in selectorTypeOptions"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="存储格式" prop="store">
+                    <el-select v-model="formData.field_options.store">
+                        <el-option
+                            v-for="item in selectorStoreOptions"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        />
+                    </el-select>
+                </el-form-item>
+            </template>
 
-    </template>
-  </el-form>
+            <!-- 自定义对话框 -->
+            <template v-if="formData.field_type === 'customDialog'">
+                <el-form-item>
+                    <template slot="label">自定义对话框</template>
+                    <ibps-data-template-selector2
+                        v-model="formData.field_options.dialog"
+                        type="dialog"
+                        placeholder="请选择自定义对话框"
+                    />
+                </el-form-item>
+                <el-form-item>
+                    <template slot="label">是否多选</template>
+                    <el-switch
+                        v-model="formData.field_options.multiple"
+                        active-value="Y"
+                        inactive-value="N"
+                    />
+                </el-form-item>
+                <el-form-item>
+                    <template slot="label">存储格式</template>
+                    <el-select v-model="formData.field_options.store" style="width:100%;">
+                        <el-option
+                            v-for="item in dialogStoreOptions"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        />
+                    </el-select>
+                </el-form-item>
+            </template>
+            <!-- end -->
+            <template v-if="formData.field_type === 'linkdata'">
+                <el-form-item>
+                    <template slot="label">关联数据</template>
+                    <ibps-data-template-selector2
+                        v-model="formData.field_options.linkdata"
+                        placeholder="请选择关联数据"
+                        type="valueSource"
+                    />
+                </el-form-item>
+
+                <el-form-item>
+                    <div slot="label">关联配置</div>
+                    <div class="el-form-item__content">
+                        <el-button
+                            :disabled="disabledResultColumns"
+                            style="width:100%;"
+                            type="primary"
+                            size="mini"
+                            plain
+                            @click="settingDataTemplateConfig('linkdata')"
+                        >设置关联配置</el-button>
+                    </div>
+                </el-form-item>
+            </template>
+
+        </template>
+    </el-form>
 </template>
 <script>
 import RightsSelector from '@/business/platform/rights/config/selector'
@@ -195,84 +198,85 @@ import IbpsDataTemplateSelector2 from '@/business/platform/data/dataTemplate/sel
 import Utils from '../../utils'
 
 export default {
-  components: {
-    RightsSelector,
-    FieldOptions,
-    IbpsTypeSelect,
-    IbpsDataTemplateSelector2
+    components: {
+        RightsSelector,
+        FieldOptions,
+        IbpsTypeSelect,
+        IbpsDataTemplateSelector2
     // IbpsTreeSelect
-  },
-  mixins: [FieldTypeMixin],
-  props: {
-    data: {
-      type: Object
     },
-    datasetType: {
-      type: String,
-      default: 'table'
+    mixins: [FieldTypeMixin],
+    props: {
+        data: {
+            type: Object
+        },
+        datasetType: {
+            type: String,
+            default: 'table'
+        },
+        fields: {
+            type: [Object, Array]
+        }
     },
-    fields: {
-      type: [Object, Array]
-    }
-  },
-  data() {
-    return {
-      queryFieldTypeOptions,
-      datefmtTypeOptions,
-      selectorTypeOptions,
-      selectorStoreOptions,
-      dialogStoreOptions,
+    data () {
+        return {
+            queryFieldTypeOptions,
+            datefmtTypeOptions,
+            selectorTypeOptions,
+            selectorStoreOptions,
+            dialogStoreOptions,
 
-      paramTypeOptions: [{
-        value: 'base',
-        label: '基本参数'
-      }, {
-        value: 'object',
-        label: '对象参数'
-      }, {
-        value: 'arrayObject',
-        label: '数组对象'
-      }],
-      formName: 'form',
-      formData: {
-        name: '',
-        label: '',
-        rights: [{ type: 'all' }],
-        common: 'Y',
-        same: 'Y',
-        field_type: 'text'
-      },
-      rules: {
-        name: [{ required: true, message: this.$t('validate.required') }],
-        label: [{ required: true, message: this.$t('validate.required') }]
-      }
-    }
-  },
-  computed: {
-    datasetData() {
-      return Utils.getFieldsByType(this.fields, 'query')
-    }
-  },
-  watch: {
-    data: {
-      handler(val) {
-        this.formData = val
-      },
-      immediate: true
-    }
-  },
-  methods: {
-  // 获取表单数据
-    getFormData(callback) {
-      this.$refs[this.formName].validate((valid) => {
-        if (valid) {
-          callback(this.formData)
-        } else {
-          callback()
+            paramTypeOptions: [{
+                value: 'base',
+                label: '基本参数'
+            }, {
+                value: 'object',
+                label: '对象参数'
+            }, {
+                value: 'arrayObject',
+                label: '数组对象'
+            }],
+            formName: 'form',
+            formData: {
+                name: '',
+                label: '',
+                rights: [{ type: 'all' }],
+                common: 'Y',
+                same: 'Y',
+                field_type: 'text',
+                default_value: ''
+            },
+            rules: {
+                name: [{ required: true, message: this.$t('validate.required') }],
+                label: [{ required: true, message: this.$t('validate.required') }]
+            }
+        }
+    },
+    computed: {
+        datasetData () {
+            return Utils.getFieldsByType(this.fields, 'query')
+        }
+    },
+    watch: {
+        data: {
+            handler (val) {
+                this.formData = val
+            },
+            immediate: true
+        }
+    },
+    methods: {
+        // 获取表单数据
+        getFormData (callback) {
+            this.$refs[this.formName].validate((valid) => {
+                if (valid) {
+                    callback(this.formData)
+                } else {
+                    callback()
+                }
+            })
         }
-      })
     }
-  }
 }
 </script>
 

+ 4 - 1
src/business/platform/data/templatebuilder/right-aside/editors/template-script.vue

@@ -23,7 +23,7 @@
                         </span>
                         <el-dropdown-menu slot="dropdown">
                             <el-dropdown-item command="onLoad">页面加载事件(onLoad)</el-dropdown-item>
-                            <!-- <el-dropdown-item command="customFormatter">自定义格式(customFormatter)</el-dropdown-item> -->
+                            <el-dropdown-item command="customFormatter">自定义格式(customFormatter)</el-dropdown-item>
                             <!-- <el-dropdown-item command="onLoadActions">按钮加载事件(onLoadActions)</el-dropdown-item> -->
                             <el-dropdown-item command="beforeSubmit">按钮前置事件(beforeSubmit)</el-dropdown-item>
                             <el-dropdown-item command="afterSubmit">按钮后置事件(afterSubmit)</el-dropdown-item>
@@ -170,6 +170,9 @@
                     case 'onLoad':
                         val = '\n\t// 加载事件\n\tonLoad (template) {\n\t\t\n\t}'
                         break
+                    case 'customFormatter':
+                        val = '\n\t// 自定义格式\n\tcustomFormatter (template, name, value, rowData, column) {\n\t\t\n\t}'
+                        break
                     case 'onLoadActions':
                         val = '\n\t// 按钮加载事件\n\tonLoadActions (template) {\n\t\t\n\t}'
                         break

+ 244 - 242
src/business/platform/data/templatebuilder/utils/index.js

@@ -3,259 +3,261 @@ import Utils from '@/utils/util'
 
 const helpers = {
 
-  defaultTemplateAttrs: function(templateType, data) {
-    let attrs
-    if (data && data.showType === 'compose') {
-      attrs = []
-      var composeType = data.composeType
-      if (composeType === 'treeList') {
-        attrs.push(this.defaultTemplateAttrs('composeTree'))
-        attrs.push(this.defaultTemplateAttrs('composeList'))
-      } else if (composeType === 'listTree') {
-        attrs.push(this.defaultTemplateAttrs('composeList'))
-        attrs.push(this.defaultTemplateAttrs('composeTree'))
-      }
-      return attrs
-    } else {
-      attrs = {}
-      attrs['template_type'] = templateType
-      return attrs
-    }
-  },
-  /**
-   * 默认列表属性
-   * @param {*} param0
-   */
-  defaultListAttrs: function({ type }) {
-    let functionButtons = []
-    const attrs = {
-      'init_query': 'Y',
-      'need_page': 'Y',
-      'page_size': 20
-    }
-    if (type === 'dialog') {
-      attrs['data_title'] = {
-        type: 'first'
-      }
-      functionButtons = [
-        {
-          button_type: 'search',
-          label: '查询'
-        }]
-    } else {
-      functionButtons = [
-        {
-          button_type: 'search',
-          label: '查询'
-        },
-        {
-          button_type: 'resetSearch',
-          label: '重置'
-        },
-        {
-          button_type: 'add',
-          label: '添加'
-        },
-        {
-          button_type: 'remove',
-          label: '删除'
-        },
-        {
-          button_type: 'edit',
-          label: '编辑'
-        },
-        {
-          button_type: 'detail',
-          label: '明细'
+    defaultTemplateAttrs: function (templateType, data) {
+        let attrs
+        if (data && data.showType === 'compose') {
+            attrs = []
+            var composeType = data.composeType
+            if (composeType === 'treeList') {
+                attrs.push(this.defaultTemplateAttrs('composeTree'))
+                attrs.push(this.defaultTemplateAttrs('composeList'))
+            } else if (composeType === 'listTree') {
+                attrs.push(this.defaultTemplateAttrs('composeList'))
+                attrs.push(this.defaultTemplateAttrs('composeTree'))
+            }
+            return attrs
+        } else {
+            attrs = {}
+            attrs['template_type'] = templateType
+            return attrs
+        }
+    },
+    /**
+     * 默认列表属性
+     * @param {*} param0
+     */
+    defaultListAttrs: function ({ type }) {
+        let functionButtons = []
+        const attrs = {
+            'init_query': 'Y',
+            'need_page': 'Y',
+            'page_size': 20
+        }
+        if (type === 'dialog') {
+            attrs['data_title'] = {
+                type: 'first'
+            }
+            functionButtons = [
+                {
+                    button_type: 'search',
+                    label: '查询'
+                }]
+        } else {
+            functionButtons = [
+                {
+                    button_type: 'search',
+                    label: '查询'
+                },
+                {
+                    button_type: 'resetSearch',
+                    label: '重置'
+                },
+                {
+                    button_type: 'add',
+                    label: '添加'
+                },
+                {
+                    button_type: 'remove',
+                    label: '删除'
+                },
+                {
+                    button_type: 'edit',
+                    label: '编辑'
+                },
+                {
+                    button_type: 'detail',
+                    label: '明细'
+                }
+            ]
         }
-      ]
-    }
 
-    const editButtons = [
-      {
-        button_type: 'close',
-        label: '关闭'
-      },
-      {
-        button_type: 'save',
-        label: '保存'
-      }
-    ]
-    return {
-      attrs: attrs,
-      display_columns: [],
-      buttons: {
-        function_buttons: functionButtons,
-        edit_buttons: editButtons
-      }}
-  },
-  /**
-   * 默认树形属性
-   * @param {*} param0
-   */
-  defaultTreeAttrs: function({ type }) {
-    let contextmenuButtons = []
-    const attrs = {
-      'expand': 'Y'
-    }
+        const editButtons = [
+            {
+                button_type: 'close',
+                label: '关闭'
+            },
+            {
+                button_type: 'save',
+                label: '保存'
+            }
+        ]
+        return {
+            attrs: attrs,
+            display_columns: [],
+            buttons: {
+                function_buttons: functionButtons,
+                edit_buttons: editButtons
+            }
+        }
+    },
+    /**
+     * 默认树形属性
+     * @param {*} param0
+     */
+    defaultTreeAttrs: function ({ type }) {
+        let contextmenuButtons = []
+        const attrs = {
+            'expand': 'Y'
+        }
 
-    if (type === 'dialog') {
-      attrs['data_title'] = {
-        type: 'first'
-      }
-    } else {
-      // 右键菜单
-      contextmenuButtons = [
-        {
-          button_type: 'add',
-          label: '添加'
-        },
-        {
-          button_type: 'remove',
-          label: '删除'
-        },
-        {
-          button_type: 'edit',
-          label: '编辑'
-        },
-        {
-          button_type: 'detail',
-          label: '明细'
+        if (type === 'dialog') {
+            attrs['data_title'] = {
+                type: 'first'
+            }
+        } else {
+            // 右键菜单
+            contextmenuButtons = [
+                {
+                    button_type: 'add',
+                    label: '添加'
+                },
+                {
+                    button_type: 'remove',
+                    label: '删除'
+                },
+                {
+                    button_type: 'edit',
+                    label: '编辑'
+                },
+                {
+                    button_type: 'detail',
+                    label: '明细'
+                }
+            ]
         }
-      ]
-    }
 
-    const functionButtons = [
-      {
-        button_type: 'refresh',
-        label: '刷新'
-      },
-      {
-        button_type: 'expand',
-        label: '展开'
-      }, {
-        button_type: 'compress',
-        label: '收缩'
-      }
-    ]
+        const functionButtons = [
+            {
+                button_type: 'refresh',
+                label: '刷新'
+            },
+            {
+                button_type: 'expand',
+                label: '展开'
+            }, {
+                button_type: 'compress',
+                label: '收缩'
+            }
+        ]
 
-    // 编辑页按钮
-    const editButtons = [
-      {
-        button_type: 'close',
-        label: '关闭'
-      },
-      {
-        button_type: 'save',
-        label: '保存'
-      }
-    ]
-    return {
-      attrs: attrs,
-      display_columns: {},
-      buttons: {
-        function_buttons: functionButtons,
-        contextmenu_buttons: contextmenuButtons,
-        edit_buttons: editButtons
-      }}
-  },
-  defaultDialogAttrs: function() {
-    return {
-      attrs: {
-        multi: 'Y',
-        width: '80',
-        height: '80'
-      },
-      buttons: {
-        'dialog_buttons': [{
-          button_type: 'ok',
-          label: '确定'
-        }, {
-          button_type: 'clean',
-          label: '清空'
-        }, {
-          button_type: 'cancel',
-          label: '取消'
-        }]
-      }
-    }
-  },
-  /**
-   * 值来源
-   */
-  defaultValueSourcetAttrs() {
-    return {
-      attrs: {}
-    }
-  },
-  getAllFields(datasets) {
-    const fields = JSON.parse(JSON.stringify(datasets))
-    if (Array.isArray(fields)) {
-      return fields.filter((d) => {
-        return d.parentId !== '0'
-      })
-    } else {
-    //  const requestData = fields.requestData
-
-      return fields
-    }
-  },
-  getFields(datasets, type) {
-    const fields = JSON.parse(JSON.stringify(datasets))
-    if (Array.isArray(fields)) {
-      return fields.filter((d) => {
-        return d.parentId !== '0'
-      })
-    } else {
-      return fields
-    }
-  },
-  getFieldsByType(datasets, type) {
-    const fields = JSON.parse(JSON.stringify(datasets))
-    if (type === 'query') {
-      const requestData = fields.requestData
-      const data = []
+        // 编辑页按钮
+        const editButtons = [
+            {
+                button_type: 'close',
+                label: '关闭'
+            },
+            {
+                button_type: 'save',
+                label: '保存'
+            }
+        ]
+        return {
+            attrs: attrs,
+            display_columns: {},
+            buttons: {
+                function_buttons: functionButtons,
+                contextmenu_buttons: contextmenuButtons,
+                edit_buttons: editButtons
+            }
+        }
+    },
+    defaultDialogAttrs: function () {
+        return {
+            attrs: {
+                multi: 'Y',
+                width: '80',
+                height: '80'
+            },
+            buttons: {
+                'dialog_buttons': [{
+                    button_type: 'ok',
+                    label: '确定'
+                }, {
+                    button_type: 'cleanClose',
+                    label: '清空并关闭'
+                }, {
+                    button_type: 'cancel',
+                    label: '取消'
+                }]
+            }
+        }
+    },
+    /**
+     * 值来源
+     */
+    defaultValueSourcetAttrs () {
+        return {
+            attrs: {}
+        }
+    },
+    getAllFields (datasets) {
+        const fields = JSON.parse(JSON.stringify(datasets))
+        if (Array.isArray(fields)) {
+            return fields.filter((d) => {
+                return d.parentId !== '0'
+            })
+        } else {
+            //  const requestData = fields.requestData
 
-      // bodyData
-      if (Utils.isNotEmpty(requestData.bodyData)) {
-        if (requestData.bodyType === 'json') {
-          data.push(requestData.bodyData[0])
+            return fields
+        }
+    },
+    getFields (datasets, type) {
+        const fields = JSON.parse(JSON.stringify(datasets))
+        if (Array.isArray(fields)) {
+            return fields.filter((d) => {
+                return d.parentId !== '0'
+            })
         } else {
-          this.buildParams(data, requestData.querys, {
-            id: 'body',
-            name: 'bodyRoot',
-            desc: 'bodyRoot'
-          })
+            return fields
         }
-      }
-      // query
-      if (Utils.isNotEmpty(requestData.querys)) {
-        this.buildParams(data, requestData.querys, {
-          id: 'query',
-          name: 'queryRoot',
-          desc: '查询(query)'
-        })
-      }
-      // 请求头
-      if (Utils.isNotEmpty(requestData.headers)) {
-        this.buildParams(data, requestData.headers, {
-          id: 'header',
-          name: 'headerRoot',
-          desc: '请求头(header)'
-        })
-      }
+    },
+    getFieldsByType (datasets, type) {
+        const fields = JSON.parse(JSON.stringify(datasets))
+        if (type === 'query') {
+            const requestData = fields.requestData
+            const data = []
 
-      return data
+            // bodyData
+            if (Utils.isNotEmpty(requestData.bodyData)) {
+                if (requestData.bodyType === 'json') {
+                    data.push(requestData.bodyData[0])
+                } else {
+                    this.buildParams(data, requestData.querys, {
+                        id: 'body',
+                        name: 'bodyRoot',
+                        desc: 'bodyRoot'
+                    })
+                }
+            }
+            // query
+            if (Utils.isNotEmpty(requestData.querys)) {
+                this.buildParams(data, requestData.querys, {
+                    id: 'query',
+                    name: 'queryRoot',
+                    desc: '查询(query)'
+                })
+            }
+            // 请求头
+            if (Utils.isNotEmpty(requestData.headers)) {
+                this.buildParams(data, requestData.headers, {
+                    id: 'header',
+                    name: 'headerRoot',
+                    desc: '请求头(header)'
+                })
+            }
+
+            return data
+        }
+    },
+    buildParams (data, list, rootData) {
+        const children = []
+        list.forEach(item => {
+            children.push(item)
+        })
+        rootData.children = children
+        data.push(rootData)
     }
-  },
-  buildParams(data, list, rootData) {
-    const children = []
-    list.forEach(item => {
-      children.push(item)
-    })
-    rootData.children = children
-    data.push(rootData)
-  }
 }
 
 export default helpers

+ 161 - 161
src/business/platform/data/templaterender/form/action.js

@@ -4,170 +4,170 @@ import { startFlowFromEdit } from '@/api/platform/bpmn/bpmInst'
 import Print from '@/utils/print'
 
 export default {
-  methods: {
-    emitEventHandler(actionKey, args) {
-      const action = args && args.attributes ? args.attributes.button_type || actionKey : actionKey
-      this.actionName = actionKey
-      switch (action) {
-        case 'close': // 关闭窗口
-          this.closeDialog()
-          break
-        case 'save':
-          this.handleSave()
-          break
-        case 'print':
-          this.handlePrint()
-          break
-        case 'sefStartFlow':
-          this.handleStartFlowFrom(args && args.attributes ? args.attributes.deflow : '')
-          break
-        case 'custom':
-          if(this.actionName == 'dingDanKaiLizanCun'){
-            this.handleSave()
-            break
-          }
-        default:
-          break
-      }
-    },
-    handleStartFlowFrom(flowKey) {
-      // 表单提交校验
-      if (this.$utils.isEmpty(flowKey)) {
-        // this.$message.warning('请检查是否绑定流程!')
-        this.bpmDefDialogVisible = true
-        return
-      }
-      // 验证表单是否正确
-      this.validate(valid => {
-        if (valid) {
-          // 表单提交校验
-          this.formSubmitVerify((result, errorMsg) => {
-            if (!result) {
-              this.$message.closeAll()
-              return this.$message.warning(errorMsg)
+    methods: {
+        emitEventHandler (actionKey, args) {
+            const action = args && args.attributes ? args.attributes.button_type || actionKey : actionKey
+            this.actionName = actionKey
+            switch (action) {
+                case 'close': // 关闭窗口
+                    this.closeDialog()
+                    break
+                case 'save':
+                    this.handleSave()
+                    break
+                case 'print':
+                    this.handlePrint()
+                    break
+                case 'sefStartFlow':
+                    this.handleStartFlowFrom(args && args.attributes ? args.attributes.deflow : '')
+                    break
+                case 'custom':
+                    if (this.actionName === 'dingDanKaiLizanCun') {
+                        this.handleSave()
+                        break
+                    }
+                default:
+                    break
             }
-            if (flowKey) {
-              this.$confirm('确定启动流程吗?', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
-                type: 'warning'
-              }).then(() => {
-                this.handleStartFlowFromEdit(flowKey)
-              }).catch(() => {})
-            } else {
-              this.bpmDefDialogVisible = true
+        },
+        handleStartFlowFrom (flowKey) {
+            // 表单提交校验
+            if (this.$utils.isEmpty(flowKey)) {
+                // this.$message.warning('请检查是否绑定流程!')
+                this.bpmDefDialogVisible = true
+                return
             }
-          })
-        } else {
-          this.formErrorToast()
-        }
-      })
-    },
-    handleDialogActionEvent(key, data) {
-      if (key === 'clean') {
-        this.bpmDefValue = {}
-      } else if (key === 'confirm') {
-        this.handleStartFlowFromEdit(data.defKey)
-      }
-    },
-    handleStartFlowFromEdit(flowKey) {
-      const formData = JSON.stringify(this.getFormData())
-      startFlowFromEdit({
-        data: formData,
-        flowKey: flowKey,
-        pk: this.pkValue || ''
-      }).then(response => {
-        this.bpmDefDialogVisible = false
-        this.$message({
-          message: '流程启动成功!',
-          type: 'success'
-        })
-        // 后置事件
-        this.afterScript(this.actionName, {
-          data: response.data,
-          variables: response.variables
-        }, () => {
-          this.callbackPage()
-        })
-      }).catch(() => {
-        this.bpmDefDialogVisible = false
-      })
-    },
-    // 保存
-    handleSave() {
-      // 验证表单是否正确
-      this.validate(valid => {
-        if (valid) {
-          // 表单提交校验
-          this.formSubmitVerify((result, errorMsg) => {
-            if (!result) {
-              this.$message.closeAll()
-              return this.$message.warning(errorMsg)
+            // 验证表单是否正确
+            this.validate(valid => {
+                if (valid) {
+                    // 表单提交校验
+                    this.formSubmitVerify((result, errorMsg) => {
+                        if (!result) {
+                            this.$message.closeAll()
+                            return this.$message.warning(errorMsg)
+                        }
+                        if (flowKey) {
+                            this.$confirm('确定启动流程吗?', '提示', {
+                                confirmButtonText: '确定',
+                                cancelButtonText: '取消',
+                                type: 'warning'
+                            }).then(() => {
+                                this.handleStartFlowFromEdit(flowKey)
+                            }).catch(() => {})
+                        } else {
+                            this.bpmDefDialogVisible = true
+                        }
+                    })
+                } else {
+                    this.formErrorToast()
+                }
+            })
+        },
+        handleDialogActionEvent (key, data) {
+            if (key === 'clean') {
+                this.bpmDefValue = {}
+            } else if (key === 'confirm') {
+                this.handleStartFlowFromEdit(data.defKey)
             }
-            // 保存数据
-            this.saveData()
-          })
-        } else {
-          this.formErrorToast()
-        }
-      })
-    },
-    // 保存数据
-    saveData() {
-      // 表单数据
-      const formData = this.getFormData()
-      const jsonData = {
-        boCode: this.boCode,
-        version: this.version,
-        formKey: this.formKey,
-        pk: this.pkValue,
-        data: JSON.stringify(formData)
-      }
-      const loading = this.$loading({
-        lock: true,
-        text: this.$t('common.saving')
-      })
-      saveFormData(jsonData).then(response => {
-        loading.close()
-        this.$alert(`保存表单成功!`, {
-          showClose: false
-        }).then(() => {
-          // 后置事件
-          this.afterScript(this.actionName, {
-            data: response.data,
-            variables: response.variables
-          }, () => {
-            this.callbackPage()
-          })
-        }).catch(() => {
-        })
-      }).catch(() => {
-        loading.close()
-      })
-    },
-    /**
-     * 打印
-     */
-    handlePrint() {
-      if (this.$utils.isNotEmpty(this.printTemplateId)) {
-        // 打开打印模版页面
-        this.formPrintTemplateDialogVisible = true
-      } else {
-      //  window.print()
-        const loading = this.$loading({
-          lock: true,
-          text: this.$t('common.loading')
-        })
-        setTimeout(() => {
-          Print(this.$refs.formrender.$el, {
-            title: '',
-            callback: () => {
-              loading.close()
+        },
+        handleStartFlowFromEdit (flowKey) {
+            const formData = JSON.stringify(this.getFormData())
+            startFlowFromEdit({
+                data: formData,
+                flowKey: flowKey,
+                pk: this.pkValue || ''
+            }).then(response => {
+                this.bpmDefDialogVisible = false
+                this.$message({
+                    message: '流程启动成功!',
+                    type: 'success'
+                })
+                // 后置事件
+                this.afterScript(this.actionName, {
+                    data: response.data,
+                    variables: response.variables
+                }, () => {
+                    this.callbackPage()
+                })
+            }).catch(() => {
+                this.bpmDefDialogVisible = false
+            })
+        },
+        // 保存
+        handleSave () {
+            // 验证表单是否正确
+            this.validate(valid => {
+                if (valid) {
+                    // 表单提交校验
+                    this.formSubmitVerify((result, errorMsg) => {
+                        if (!result) {
+                            this.$message.closeAll()
+                            return this.$message.warning(errorMsg)
+                        }
+                        // 保存数据
+                        this.saveData()
+                    })
+                } else {
+                    this.formErrorToast()
+                }
+            })
+        },
+        // 保存数据
+        saveData () {
+            // 表单数据
+            const formData = this.getFormData()
+            const jsonData = {
+                boCode: this.boCode,
+                version: this.version,
+                formKey: this.formKey,
+                pk: this.pkValue,
+                data: JSON.stringify(this.$utils.replaceNullWithEmpty(formData))
             }
-          })
-        }, 300)
-      }
-    }
+            const loading = this.$loading({
+                lock: true,
+                text: this.$t('common.saving')
+            })
+            saveFormData(jsonData).then(response => {
+                loading.close()
+                this.$alert(`保存表单成功!`, {
+                    showClose: false
+                }).then(() => {
+                    // 后置事件
+                    this.afterScript(this.actionName, {
+                        data: response.data,
+                        variables: response.variables
+                    }, () => {
+                        this.callbackPage()
+                    })
+                }).catch(() => {
+                })
+            }).catch(() => {
+                loading.close()
+            })
+        },
+        /**
+         * 打印
+         */
+        handlePrint () {
+            if (this.$utils.isNotEmpty(this.printTemplateId)) {
+                // 打开打印模版页面
+                this.formPrintTemplateDialogVisible = true
+            } else {
+                //  window.print()
+                const loading = this.$loading({
+                    lock: true,
+                    text: this.$t('common.loading')
+                })
+                setTimeout(() => {
+                    Print(this.$refs.formrender.$el, {
+                        title: '',
+                        callback: () => {
+                            loading.close()
+                        }
+                    })
+                }, 300)
+            }
+        }
 
-  }
+    }
 }

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

+ 61 - 13
src/business/platform/data/templaterender/templates/list.vue

@@ -256,6 +256,13 @@
             @close="(visible) => (importTableDialogVisible = visible)"
             @action-event="handleImportTableActionEvent"
         />
+        <ibps-attachment
+            ref="snapshot"
+            v-model="snapshotFile"
+            style="display: none;"
+            :download="false"
+            :readonly="true"
+        />
     </div>
 </template>
 <script>
@@ -301,6 +308,9 @@ import IbpsExport from '@/plugins/export'
 import IbpsImport from '@/plugins/import'
 import Vue from 'vue'
 Vue.component('ibps-data-template-render-dialog', () => import('@/business/platform/data/templaterender/preview/dialog.vue'))
+import preview from '@/business/platform/form/utils/custom/pintText'
+import { snapshoot } from '@/api/platform/file/attachment'
+import { downloadFile as download } from '@/business/platform/file/utils'
 
 export default {
     name: 'list',
@@ -421,7 +431,8 @@ export default {
             importTableDialogVisible: false,
             position: null,
             importList: [],
-            importVlaue: null
+            importVlaue: null,
+            snapshotFile: ''
         }
     },
     computed: {
@@ -865,6 +876,7 @@ export default {
 
             // 前置事件
             this.beforeScript(command, position, selection, data, () => {
+                let src = ''
                 this.readonly = false
                 switch (buttonType) {
                     case 'search': // 查询
@@ -910,6 +922,50 @@ export default {
                         break
                     case 'custom': // 自定义按钮
                         break
+                    case 'openTask': // 编制,开启对应流程
+                        // console.log(button)
+                        if (!button.deflow) {
+                            this.$message.warning('请先配置对应流程!')
+                            return
+                        }
+                        this.defId = button.deflow
+                        this.npmDialogFormVisible = true
+                        break
+                    case 'consult': // 查阅
+                        this.snapshotFile = ''
+                        if (1 && data.kuai_zhao_) {
+                            this.snapshotFile = data.kuai_zhao_
+                            setTimeout(() => {
+                                this.$refs.snapshot.handleActionEvent('preview', 0)
+                            }, 500)
+                        } else {
+                            if (!button.reportPath) {
+                                this.$message.warning('请先配置对应报表路径!')
+                                return
+                            }
+                            src = `${this.$reportPash.replace('show', 'pdf')}${button.reportPath}&id_=${selection}`
+                            // console.log(src)
+                            preview(this, src)
+                        }
+                        break
+                    case 'download': // 下载记录
+                        if (!button.reportPath) {
+                            this.$message.warning('请先配置对应报表路径!')
+                            return
+                        }
+                        // 同步医学,报表路径代码需调整
+                        // snapshoot({
+                        //     url: this.$getReportFile(button.reportPath, `id_=${selection}`),
+                        //     name: selection,
+                        //     type: 'pdf'
+                        // }).then((res) => {
+                        //     if (!res.data || !res.data.id) {
+                        //         this.$message.error('生成文件失败,请重试!')
+                        //         return
+                        //     }
+                        //     download(res.data)
+                        // })
+                        break
                     case 'print': // 打印
                         ActionUtils.selectedRecord(selection).then((id) => {
                             this.handlePrint(id)
@@ -1118,7 +1174,9 @@ export default {
             // 功能按钮
             functionButtons.forEach((rf, i) => {
                 const btn = this.buildButton(rf, i)
-
+                if (rf.button_type === 'openTask') {
+                    this.defId = rf.deflow
+                }
                 // 查询列默认是顶部
                 if (hasSearchPermission(rf.button_type) && !rf.position) {
                     rf.position = 'toolbar'
@@ -1194,17 +1252,6 @@ export default {
             })
             return columns
         },
-        /**
-         * 判断参数是否是其中之一
-         */
-        oneOf: function (obj, validList, key, key1) {
-            for (let i = 0; i < validList.length; i++) {
-                if (obj[key] === validList[i][key1]) {
-                    return true
-                }
-            }
-            return false
-        },
         /**
          * 构建按钮
          */
@@ -1241,6 +1288,7 @@ export default {
                 icon: rf.icon ? 'ibps-icon-' + rf.icon : defaultButton.icon,
                 type: rf.style || defaultButton.type,
                 deflow: rf.deflow || null,
+                reportPath: rf.reportPath,
                 mode: mode,
                 rightIcon: rightIcon,
                 menus: menus,