{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-fvue\\src\\components\\dataTemplate\\TemplateDynamicView.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\src\\components\\dataTemplate\\TemplateDynamicView.vue","mtime":1667327529137},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport {Loading} from 'element-ui'\r\nimport HtCheckbox from '@/components/control/HtCheckbox.vue'\r\nimport HtDialog from '@/components/control/HtDialog.vue'\r\nimport HtDialogBtn from '@/components/control/htDialogBtn.vue'\r\nimport EipSelect from '@/components/eipControl/EipSelect.vue'\r\nimport VRuntimeTemplate from 'v-runtime-template'\r\nimport utils from '@/utils.js'\r\nimport {Base64} from 'js-base64'\r\nimport Vue from 'vue'\r\nimport QRCode from 'qrcode'\r\nimport req from '@/request.js'\r\nimport form from '@/api/form.js'\r\nimport dialog from '@/api/dialogApi.js'\r\nconst TemplateBatchUpdateDialog = () =>\r\n  import('@/components/dialog/TemplateBatchUpdateDialog.vue')\r\nexport default {\r\n  name: 'template-dynamic-view',\r\n  props: {\r\n    templateKey: String,\r\n    html: String,\r\n    templateInfo: Object,\r\n    parameterqQuerys: String,\r\n    single: {\r\n      default: 'true'\r\n    },\r\n    defKey: String,\r\n    taskType: {\r\n      default: ''\r\n    },\r\n    dataView: Object,\r\n    isJoinFlow: {\r\n      default: false\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      refreshTime:new Date().getTime(),\r\n      showDateView: true\r\n    }\r\n  },\r\n  created() {\r\n    this.init()\r\n  },\r\n  watch: {\r\n    html: function(newVal) {\r\n      if (newVal) {\r\n        this.init()\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    init() {\r\n      Vue.component('ht-dataview-runtime-template', {\r\n        template: this.html,\r\n        props: {\r\n          templateKey: String,\r\n          templateInfo: Object,\r\n          single: String,\r\n          defKey: String,\r\n          taskType: {\r\n            default: ''\r\n          },\r\n          dataView: Object,\r\n          isJoinFlow: {\r\n            default: false\r\n          },\r\n          parameterqQuerys:String\r\n        },\r\n        data() {\r\n          return {\r\n            treeQuerys: [],\r\n            alias_new: 'statement',\r\n            loading: false,\r\n            QRCodeurl: '',\r\n            QRCodeDialog: false,\r\n            html: '',\r\n            tableData: {selectRows: [], querys: ''},\r\n            dialogExportVisible: false,\r\n            exportData: {getType: 'all', expField: []},\r\n            displayFields: [],\r\n            exportSellection: [],\r\n            searchForm: {F_xb: '', F_xm: ''},\r\n            queryForm: {\r\n              queryData: ''\r\n            },\r\n            formType: false,\r\n            labelPosition: 'left',\r\n            incons: 'el-icon-arrow-down',\r\n            options: {\r\n              fullscreen: true,\r\n              lock: true\r\n            },\r\n            rowTemplateId: null,\r\n            rowId: null,\r\n            QRCodeShow: true,\r\n            QRCodeDesc: [],\r\n            tree: [],\r\n            customDialog: [],\r\n            tableHeight: 0.685 * window.innerHeight,\r\n            dialogSubVisible: false,\r\n            tabs: [],\r\n            ents: [],\r\n            modifyRecord: {\r\n              pagination: {\r\n                pageBean: {\r\n                  page: 1,\r\n                  pageSize: 20,\r\n                  total: 0\r\n                }\r\n              }\r\n            },\r\n            recordList: [],\r\n            recordRefId: '',\r\n            dialogRecordVisible: false,\r\n            recordTableLoading: false,\r\n            modifyDetailDialogVisible: false,\r\n            currentModify: {},\r\n            refId: '',\r\n            querySubValue: '',\r\n            subTableLoading: false,\r\n            currentTabName: '',\r\n            currentTab: {},\r\n            exportType: 'main',\r\n            subDisplayFields: [],\r\n            subDisplayFieldsList: [],\r\n            notPrint: false,\r\n            displayField: {},\r\n            treeList: [],\r\n            rows: [],\r\n            pagination: {\r\n              page: 1,\r\n              pageSize: 10\r\n            },\r\n            paginationLayout: 'total, sizes, prev, pager, next, jumper',\r\n            total: 0,\r\n            permission: {\r\n              print: true,\r\n              add: true,\r\n              del: true,\r\n              export: true,\r\n              edit: true,\r\n              hidden: false\r\n            },\r\n            showRightMenu: true,\r\n            listSelectable: true,\r\n            filters: {},\r\n            sorter: null,\r\n            dialogSunVisible: false, //孙表对话框\r\n            sunTabs: [], //孙表数据\r\n            querySunValue: '',\r\n            operateColWidth: '240',\r\n            summaryFields: [],\r\n            dialogVisible: false,\r\n            pageResult: {\r\n              page: 1,\r\n              pageSize: 20,\r\n              total: 0\r\n            },\r\n            logData: [],\r\n            notSortableFields: [\r\n              'bpm_status_',\r\n              'bpm_proc_inst_id_',\r\n              'bpm_subject_',\r\n              'bpm_proc_def_name_',\r\n              'bpm_create_time_',\r\n              'bpm_end_time_',\r\n              'bpm_is_forbidden_',\r\n              'bpm_creator_'\r\n            ],\r\n            defaultValueList: [], //批量更新数据\r\n            ignoredAlias: ['appCenterFront'],\r\n            QRCodePattern: true,\r\n            QRCodeType: '',\r\n            isMobile: false,\r\n            activeNames: ['1'],\r\n            switchMap:{},\r\n            filterMap:{}\r\n          }\r\n        },\r\n        components: {\r\n          VRuntimeTemplate,\r\n          HtCheckbox,\r\n          HtDialog,\r\n          HtDialogBtn,\r\n          TemplateBatchUpdateDialog,\r\n          EipSelect\r\n        },\r\n        watch: {\r\n          ents: {\r\n            handler: function(newVal, oldValue) {\r\n              if (newVal && newVal.length >= 1 && newVal != oldValue) {\r\n                this.getSubData(this, this.refId)\r\n              }\r\n            },\r\n            deep: true,\r\n            immediate: true\r\n          },\r\n          templateInfo: {\r\n            handler: function(newVal, oldVal) {\r\n              if (newVal && newVal.id ) {\r\n                const loading = this.$loading(this.options)\r\n                let _me = this\r\n                _me.templateInfo = newVal\r\n                if (_me.templateInfo.displayField) {\r\n                  let displayField = utils.parseToJson(\r\n                    _me.templateInfo.displayField\r\n                  )\r\n                  for (var i = 0; i < displayField.length; i++) {\r\n                    if (displayField[i].type) {\r\n                      this.displayFields.push(displayField[i])\r\n                    }\r\n                  }\r\n                }\r\n                if (_me.templateInfo.conditionField) {\r\n                  let conditionField = utils.parseToJson(\r\n                    _me.templateInfo.conditionField\r\n                  )\r\n                  for (var i = 0; i < conditionField.length; i++) {\r\n                    var fieldName = 'F_' + conditionField[i].name\r\n                    this.$set(this.searchForm, fieldName, '')\r\n                  }\r\n                }\r\n                let params = {templateId: _me.templateInfo.id}\r\n                let pageBean = {\r\n                  pageBean: {\r\n                    page: '1',\r\n                    pageSize: newVal.pageSize,\r\n                    showTotal: 'true'\r\n                  }\r\n                } //初次加载默认pageBean\r\n                params.pagination = pageBean\r\n                if (_me.isJoinFlow) {\r\n                  params.isJoinFlow = true\r\n                  params.taskType = _me.taskType\r\n                  params.defKey = _me.defKey\r\n                }\r\n                if (_me.dataView) {\r\n                  _me.handelBindFiledValua()\r\n                  //关联查询字段\r\n                  if (_me.dataView.selectList && _me.dataView.selectList.length >0) {\r\n                    params.selectList = _me.dataView.selectList\r\n                  }\r\n                  params.refIdValue = _me.dataView.refIdValue\r\n                }\r\n                if (this.parameterqQuerys) {\r\n                  var querys = JSON.parse(\r\n                    Base64.decode(decodeURIComponent(this.parameterqQuerys))\r\n                  )\r\n                  params.pagination.querys = querys\r\n                }\r\n                let defaultQuery = this.buildDefaultQuerys();\r\n                if(defaultQuery.length > 0){\r\n                  if(params.pagination.querys){\r\n                    params.pagination.querys.concat(defaultQuery);\r\n                  }else{\r\n                    params.pagination.querys = defaultQuery;\r\n                  }\r\n                }\r\n                //如果有设置默认排序,优先使用默认排序\r\n                if(this.templateInfo.sortField){\r\n                  let sortField=JSON.parse(this.templateInfo.sortField);\r\n                  let sorter=[];\r\n                  for(let x=0;x<sortField.length;x++){\r\n                      sorter.push({'property':sortField[x].name ,'direction':sortField[x].sort});\r\n                  }\r\n                  params.pagination.sorter =sorter;\r\n                }\r\n\r\n                const this_ = this\r\n                if (params.templateId) {\r\n                  this.$store\r\n                    .dispatch('form/getBpmTemplateByPagination', params)\r\n                    .then(response => {\r\n                      this_.rows = response.data.rows\r\n                      this_.total = response.data.total\r\n                      this_.pagination.page = response.data.page\r\n                      this_.pagination.pageSize = response.data.pageSize\r\n                      loading.close()\r\n                      this_.initSwitchStatus()\r\n                      if (this_.$el && this_.$el.querySelector) {\r\n                        let topBtnDom = this_.$el.querySelector(\r\n                          'div.top_btn_col'\r\n                        )\r\n                        if (\r\n                          !topBtnDom ||\r\n                          (!topBtnDom.querySelector('i.el-icon-delete') &&\r\n                          !topBtnDom.querySelector('i.el-icon-edit') &&\r\n                          !topBtnDom.querySelector('i.el-icon-s-grid'))\r\n                        ) {\r\n                          this_.listSelectable = false\r\n                        }\r\n                        setTimeout(function() {\r\n                          let tdDom = this_.$el.querySelector('td.right_menu')\r\n                          if (!tdDom || (!tdDom.querySelector('button') && tdDom.querySelector('switch'))) {\r\n                            this_.showRightMenu = false\r\n                          }\r\n                        }, 200)\r\n                      }\r\n                    })\r\n                } else {\r\n                  loading.close()\r\n                }\r\n                if (newVal.treeField && newVal.treeField !== '{}') {\r\n                  let treeField = JSON.parse(newVal.treeField)\r\n                  this.initTree(treeField)\r\n                  form.getSubEntsByFormKey(this.templateInfo.formKey, resp => {\r\n                    resp.data.forEach(item => {\r\n                      let subDisplayFields = []\r\n                      item.attributeList.forEach(attr => {\r\n                        subDisplayFields.push({\r\n                          desc: attr.comment,\r\n                          name: attr.fieldName,\r\n                          type: attr.columnType\r\n                        })\r\n                      })\r\n                      this.subDisplayFields.push({\r\n                        fields: subDisplayFields,\r\n                        name: item.name,\r\n                        comment: item.comment\r\n                      })\r\n                    })\r\n                  })\r\n                }\r\n                if (newVal.summaryField) {\r\n                  this.summaryFields = JSON.parse(newVal.summaryField)\r\n                }\r\n              }\r\n            },\r\n            deep: true,\r\n            immediate: true\r\n          },\r\n          currentTabName: function(newVal) {\r\n            if (newVal) {\r\n              this.querySubValue = ''\r\n            }\r\n          }\r\n        },\r\n        computed:{\r\n          showDraftList(){//如果当前页面被嵌入iframe里面不显示草稿\r\n            return window.self === window.top;\r\n          }\r\n        },\r\n        mounted() {\r\n          this.handelBindFiledValua()\r\n          let this_ = this\r\n          this.$root.$on('form-reload-success', function() {\r\n            this_.handelBindFiledValua()\r\n          })\r\n          this.$emit(\"afterMounted\")\r\n        },\r\n        methods: {\r\n          loadData(param, cb) {\r\n            let querys = param.querys || []\r\n            let hasDefaultQuery = false\r\n            this.handelBindFiledValua()\r\n            let pID = this.dataView.refIdValue\r\n            querys.forEach(q => {\r\n              if (q.property == 'PId') {\r\n                hasDefaultQuery = true\r\n              }\r\n            })\r\n            if (!hasDefaultQuery) {\r\n              querys.push({\r\n                operation: 'EQUAL',\r\n                group: 'defalut',\r\n                property: 'PId',\r\n                relation: 'AND',\r\n                value: pID\r\n              })\r\n              querys.push({\r\n                operation: 'EQUAL',\r\n                group: 'defalut',\r\n                property: 'boAlias',\r\n                relation: 'AND',\r\n                value: this.templateInfo.boDefAlias\r\n              })\r\n            }\r\n            param.querys = querys\r\n            req\r\n              .post(\r\n                window.context.form + '/form/formDataImportLog/v1/listJson',\r\n                param\r\n              )\r\n              .then(data => {\r\n                let response = data.data\r\n                this.logData = response.rows\r\n                this.pageResult = {\r\n                  page: response.page,\r\n                  pageSize: response.pageSize,\r\n                  total: response.total\r\n                }\r\n              })\r\n              .finally(() => cb())\r\n          },\r\n          handelBindFiledValua() {\r\n            //数据视图控件\r\n            let _me = this\r\n            if (this.dataView) {\r\n              const pInst = utils.getOnlineFormInstance(\r\n                this.$parent.$parent.$parent.$parent\r\n              )\r\n              if(!pInst[this.dataView.boDefAlias]){\r\n                this.dataView.boDefAlias = Object.keys(pInst.data)[0];\r\n              }\r\n              let refIdValue = utils.getValueByPath(\r\n                pInst,\r\n                'data.' + this.dataView.boDefAlias + '.id_'\r\n              )\r\n\r\n              if (\r\n                sessionStorage.getItem('formImportTempRefId') &&\r\n                !refIdValue\r\n              ) {\r\n                refIdValue = sessionStorage.getItem('formImportTempRefId')\r\n              } else if (!refIdValue) {\r\n                //导入的时候没有关键的外键，则为其自动添加\r\n                refIdValue = new Date().getTime()\r\n                sessionStorage.setItem('formImportTempRefId', refIdValue)\r\n              }\r\n              _me.dataView.refIdValue = refIdValue\r\n\r\n              if (\r\n                pInst.permission &&\r\n                pInst.permission.table &&\r\n                pInst.permission.table[this.templateInfo.boDefAlias]\r\n              ) {\r\n                this.permission =\r\n                  pInst.permission.table[this.templateInfo.boDefAlias]\r\n              }\r\n              if (this.permission.hidden) {\r\n                this.$parent.showDateView = false\r\n              }\r\n              //关联查询字段\r\n              let selectList = this.dataView.selectList;\r\n              if(selectList && selectList.length >0 ){\r\n                for(var i=0;i<selectList.length;i++){\r\n                  if(selectList[i].selectField) {\r\n                    const path =\r\n                      'data.' +\r\n                      this.dataView.boDefAlias +\r\n                      '.' +\r\n                      selectList[i].selectField\r\n                    const value = utils.getValueByPath(pInst, path)\r\n                    selectList[i].selectValue = value;\r\n\r\n                    //添加监听\r\n                    pInst.$watch(path, function(newVal, oldVal) {\r\n                      // 监听中使用间隔请求，减少请求次数\r\n                      clearTimeout(this.timeout)\r\n                      this.timeout = setTimeout(() => {\r\n                        if (newVal !== oldVal) {\r\n                          //_me.setDataViewValue(_me.dataView);\r\n                          _me.search()\r\n                        }\r\n                      }, 500)\r\n                    })\r\n                  }\r\n                }\r\n              }\r\n              //关联填充字段\r\n              let bindList = this.dataView.bindList;\r\n              if(bindList && bindList.length >0 ) {\r\n                for(var i=0; i<bindList.length;i++) {\r\n                  if(bindList[i].fillField){\r\n                    const path =\r\n                      'data.' +\r\n                      this.dataView.boDefAlias +\r\n                      '.' +\r\n                      bindList[i].fillField\r\n                    const value = utils.getValueByPath(pInst, path)\r\n\r\n                    bindList[i].fillValue = value\r\n                    pInst.$watch(path, function(newVal, oldVal) {\r\n                      // 监听中使用间隔请求，减少请求次数\r\n                      clearTimeout(this.timeout)\r\n                      this.timeout = setTimeout(() => {\r\n                        if (newVal !== oldVal) {\r\n                          //_me.setDataViewValue(_me.dataView);\r\n                          _me.search();\r\n                        }\r\n                      }, 500)\r\n                    })\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          },\r\n          printList() {\r\n            this.notPrint = true\r\n            setTimeout(() => {\r\n              document.body.innerHTML = document.getElementById(\r\n                'printData'\r\n              ).innerHTML\r\n              window.print()\r\n              location.reload()\r\n            }, 200)\r\n            setTimeout(() => {\r\n              this.notPrint = false\r\n            }, 200)\r\n          },\r\n          printDetail(templateId, id, action) {\r\n            //数据随机添加到其他菜单下面时获取当前菜单的别名\r\n            if (sessionStorage.menu_alias) {\r\n              this.alias_new = sessionStorage.menu_alias\r\n            }\r\n            var url =\r\n              '/' +\r\n              this.alias_new +\r\n              '/template/form/' +\r\n              this.templateKey +\r\n              '/' +\r\n              action +\r\n              '/true'\r\n            if (id) {\r\n              url = url + '?id=' + id + '&'\r\n            } else {\r\n              url += '?'\r\n            }\r\n            var startFlowStr = 'startFlow=false'\r\n            let path = url + startFlowStr\r\n            if (path.indexOf('othermenu') != -1) {\r\n              path = path.replace('/othermenu', '/statement')\r\n            }\r\n\r\n            this.$router.push({\r\n              path: path,\r\n              query: {isPrint: true}\r\n            })\r\n          },\r\n          complete(row,taskType) {\r\n            if (taskType=='todo'){\r\n              var url =window.context.bpmRunTime + '/runtime/task/v1/getBpmTaskByInstId?instId='+row.bpm_proc_inst_id_\r\n              req.get(url).then(res => {\r\n                if (res.data.length == 0) {\r\n                  this.$message.error('此任务已被处理或不存在！')\r\n                } else if (res.data.length == 1) {\r\n                  this.$router.push(\"/reportModuleInst/\" + res.data[0].id  + \"/0\"+\"/\"+this.defKey+\"/true/\"+this.templateKey);\r\n                } else {\r\n                  this.$message.error('暂不支持！')\r\n                }\r\n              })\r\n            }else if(taskType==\"done\"){\r\n              this.$router.push('/reportModuleInstDone/' + row.bpm_proc_inst_id_+ '/doneList/'+this.defKey+'/'+this.templateKey);\r\n            }else if(taskType==\"request\"){\r\n              this.$router.push('/reportModuleInstDone/' + row.bpm_proc_inst_id_ + '/request/'+this.defKey+'/'+this.templateKey)\r\n            }else if(taskType==\"todoRead\"){\r\n              let pageBean = { \"page\": 1, \"pageSize\": 10, \"showTotal\": \"true\"}\r\n              let status=row.bpm_status_;\r\n              req.post('${bpmRunTime}/runtime/task/v1/getNoticeTodoReadList', {pageBean:pageBean,querys:[{property:\"proc_inst_id_\",value:row.bpm_proc_inst_id_,operation: 'EQUAL',relation: 'AND'}]}).then(response => {\r\n                  if (response.data.rows&&response.data.rows.length>0){\r\n                    let id=response.data.rows[0].id;\r\n                    let url=\"\";7\r\n                    if (status == 'FOLLOW') {\r\n                        url='/reportModuleInstTaskRead/' +id + '/FOLLOW/'+this.defKey+'/'+this.templateKey;\r\n                    } else if (status == 'COMMU') {\r\n                        url = '/reportModuleInst/' + id + '/0/'+this.defKey+'/true/'+this.templateKey;\r\n                    } else {\r\n                        url = '/reportModuleInstRead/' + row.bpm_proc_inst_id_ + '/read/' + id+'/'+this.defKey+\"/\"+this.templateKey;\r\n                    }\r\n                    this.$router.push(url);\r\n                  }\r\n              });\r\n            }else if(taskType==\"doneRead\"){\r\n              let pageBean = { \"page\": 1, \"pageSize\": 10, \"showTotal\": \"true\"}\r\n              req.post('${bpmRunTime}/runtime/task/v1/getNoticeDoneReadList', {pageBean:pageBean,querys:[{property:\"proc_inst_id_\",value:row.bpm_proc_inst_id_,operation: 'EQUAL',relation: 'AND'}]}).then(response => {\r\n                if (response.data.rows&&response.data.rows.length>0){\r\n                  let id=response.data.rows[0].id;\r\n                  this.$router.push('/reportModuleInstDone/' +  row.bpm_proc_inst_id_ + '/read/done/' +id+'/'+this.defKey+\"/\"+this.templateKey)\r\n                }\r\n              });\r\n            }else if(taskType==\"myRead\"){\r\n              let pageBean = { \"page\": 1, \"pageSize\": 10, \"showTotal\": \"true\"}\r\n              req.post('${bpmRunTime}/runtime/task/v1/getMyNoticeReadList', {pageBean:pageBean,querys:[{property:\"proc_inst_id_\",value:row.bpm_proc_inst_id_,operation: 'EQUAL',relation: 'AND'}]}).then(response => {\r\n                if (response.data.rows&&response.data.rows.length>0){\r\n                  let id=response.data.rows[0].id;\r\n                  this.$router.push('/reportModuleInstMyRead/' + row.bpm_proc_inst_id_ + '/' + id + '/myRead/'+this.defKey+\"/\"+this.templateKey)\r\n                }\r\n              });\r\n            }else if(taskType==\"myDelegate\"){\r\n              this.$router.push('/reportModuleInstRead/' + row.bpm_proc_inst_id_ + '/delegate/'+this.defKey+\"/\"+this.templateKey)\r\n            }\r\n          },\r\n          //下载全部选中的二维码\r\n          downloadAllQRCode(\r\n            templateId,\r\n            mobileFormAlias,\r\n            display,\r\n            pkField,\r\n            QRCodePattern\r\n          ) {\r\n            this.QRCodePattern = QRCodePattern\r\n            const _selectData = this.$refs.multipleTemplateTable.selection\r\n            if (_selectData.length === 0) {\r\n              this.$message.error('请至少选中一条数据!')\r\n              return\r\n            }\r\n            this.loading = true\r\n            let account = Base64.encode(\r\n              this.$store.state.login.currentUser.account\r\n            )\r\n            let token = this.$store.state.login.currentUser.token\r\n            let mobile = window.context.mobile\r\n            let QRCodeurl = ''\r\n            let zip = new JSZip()\r\n            // 创建一个名为images的新的文件目录\r\n            let img = zip.folder('images')\r\n            let plist = []\r\n            for (let x = 0; x < _selectData.length; x++) {\r\n              if (this.QRCodePattern) {\r\n                QRCodeurl =\r\n                  mobile +\r\n                  '/QRCodeForm/' +\r\n                  this.templateKey +\r\n                  '/get' +\r\n                  '?id=' +\r\n                  _selectData[x][pkField] +\r\n                  '&token=' +\r\n                  token\r\n              } else {\r\n                QRCodeurl =\r\n                  mobile +\r\n                  '/QRCodeForm/' +\r\n                  this.templateKey +\r\n                  '/edit' +\r\n                  '?id=' +\r\n                  _selectData[x][pkField]\r\n              }\r\n              let msg = document.createElement('canvas')\r\n\r\n              QRCode.toCanvas(msg, QRCodeurl, function(error) {\r\n                console.log(error)\r\n              })\r\n              let _canvas = document.createElement('div')\r\n              _canvas.setAttribute('id', 'QRCodeAndDescAll' + x)\r\n              _canvas.setAttribute(\r\n                'style',\r\n                'text-align:center;width:' + msg.width + 'px;'\r\n              )\r\n              _canvas.appendChild(msg)\r\n              //创建底部的描述信息\r\n              for (let Y = 0; Y < display.length; Y++) {\r\n                let item = JSON.parse(display[Y])\r\n                if (_selectData[x][item.name]) {\r\n                  let desc = document.createElement('div')\r\n                  desc.innerHTML = item.desc + ':' + _selectData[x][item.name]\r\n                  _canvas.appendChild(desc)\r\n                }\r\n              }\r\n              document.getElementById('QRCodeAndDescAll').appendChild(_canvas)\r\n              plist.push(\r\n                this.downloadQRCodeAndDesc('#QRCodeAndDescAll' + x, _canvas)\r\n              )\r\n            }\r\n            Promise.all(plist).then(result => {\r\n              document.getElementById('QRCodeAndDescAll').innerHTML = ''\r\n              for (let x = 0; x < result.length; x++) {\r\n                let canvas = result[x]\r\n                let image = canvas.toDataURL().split(';base64,')[1]\r\n                // 这个images文件目录中创建一个base64数据为imgData的图像，图像名是smile.gif\r\n                img.file(x + '.png', image, {base64: true})\r\n              }\r\n              // 把打包内容异步转成blob二进制格式\r\n              zip.generateAsync({type: 'blob'}).then(function(content) {\r\n                let eleLink = document.createElement('a')\r\n                eleLink.download = '二维码.zip'\r\n                eleLink.style.display = 'none'\r\n                // 下载内容转变成blob地址\r\n                eleLink.href = URL.createObjectURL(content)\r\n                // 触发点击\r\n                document.body.appendChild(eleLink)\r\n                eleLink.click()\r\n                // 然后移除\r\n                document.body.removeChild(eleLink)\r\n              })\r\n\r\n              this.loading = false\r\n            })\r\n          },\r\n          onCopy(e) {\r\n            this.$message.success('内容已复制到剪切板！')\r\n          },\r\n          // 复制失败时的回调函数\r\n          onError(e) {\r\n            this.$message.error('抱歉，复制失败！')\r\n          },\r\n          downloadQRCode() {\r\n            let plist = []\r\n            let _canvas = document.querySelector('#QRCodeAndDesc')\r\n            plist.push(this.downloadQRCodeAndDesc('#QRCodeAndDesc', _canvas))\r\n            Promise.all(plist).then(result => {\r\n              let canvas = result[0]\r\n              let link = document.createElement('a')\r\n              link.href = canvas.toDataURL() //下载链接\r\n              link.setAttribute('download', '二维码.jpg')\r\n              link.style.display = 'none' //a标签隐藏\r\n              document.body.appendChild(link)\r\n              link.click()\r\n            })\r\n          },\r\n          //把二维码与二维码说明一起下载成图片\r\n          downloadQRCodeAndDesc(classs, _canvas) {\r\n            let p2 = new Promise((resolve, reject) => {\r\n              let canvas2 = document.createElement('canvas')\r\n              let w = parseInt(window.getComputedStyle(_canvas).width)\r\n              let h = parseInt(window.getComputedStyle(_canvas).height)\r\n              //将canvas画布放大若干倍，然后盛放在较小的容器内，就显得不模糊了\r\n              canvas2.width = w * 2\r\n              canvas2.height = h * 2\r\n              canvas2.style.width = w + 'px'\r\n              canvas2.style.height = h + 'px'\r\n              //可以按照自己的需求，对context的参数修改,translate指的是偏移量\r\n              let context = canvas2.getContext('2d')\r\n              context.scale(2, 2)\r\n              return html2canvas(document.querySelector(classs), {\r\n                canvas: canvas2\r\n              }).then(function(canvas) {\r\n                resolve(canvas)\r\n              })\r\n            })\r\n            return p2\r\n          },\r\n          QRCodeDialogClose() {\r\n            this.QRCodeType = ''\r\n            this.QRCodeDialog = false\r\n          },\r\n          foundQRCode() {\r\n            /*this.QRCodeurl =\r\n              window.context.front +\r\n              \"/QRCodeForm/\" +\r\n              this.templateKey +\r\n              \"/get\" +\r\n              \"?id=\" +\r\n              this.rowId +\r\n              \"&token=\" +\r\n              this.$store.state.login.currentUser.token;*/\r\n            if (this.QRCodeType == 'add') {\r\n              let isStartFlow = this.templateInfo.defId ? 'true' : 'false'\r\n              this.QRCodeurl =\r\n                req.getContext().mobile +\r\n                '/template/form/' +\r\n                this.templateKey +\r\n                '/add/?startFlow=' +\r\n                isStartFlow\r\n              if (this.QRCodePattern) {\r\n                let token = this.$store.state.login.currentUser.token\r\n                this.QRCodeurl += '&token=' + token\r\n              }\r\n            } else {\r\n              //不论需不需要登录，访问的都是明细页面\r\n              if (this.QRCodePattern) {\r\n                //免登录\r\n                this.QRCodeurl =\r\n                  req.getContext().mobile +\r\n                  '/QRCodeForm/' +\r\n                  this.templateKey +\r\n                  '/get?id=' +\r\n                  this.rowId +\r\n                  '&token=' +\r\n                  this.$store.state.login.currentUser.token\r\n              } else {\r\n                //需要登录\r\n                this.QRCodeurl =\r\n                  req.getContext().mobile +\r\n                  '/QRCodeForm/' +\r\n                  this.templateKey +\r\n                  '/get?id=' +\r\n                  this.rowId\r\n              }\r\n            }\r\n            // Base64.encode(this.$store.state.login.currentUser.account);\r\n            let msg = document.getElementById('QRCode')\r\n\r\n            QRCode.toCanvas(msg, this.QRCodeurl, function(error) {\r\n              console.log(error)\r\n            })\r\n            this.QRCodeShow = true\r\n          },\r\n          getQRCode(\r\n            templateId,\r\n            id,\r\n            mobileFormAlias,\r\n            display,\r\n            index,\r\n            QRCodePattern\r\n          ) {\r\n            this.QRCodePattern = QRCodePattern\r\n            this.QRCodeDesc = []\r\n            for (let x = 0; x < display.length; x++) {\r\n              let item = JSON.parse(display[x])\r\n              if (this.rows[index][item.name]) {\r\n                this.QRCodeDesc.push(\r\n                  item.desc + ':' + this.rows[index][item.name]\r\n                )\r\n              }\r\n            }\r\n            this.mobileFormAlias = mobileFormAlias\r\n            this.QRCodeShow = false\r\n            this.QRCodeDialog = true\r\n            this.rowTemplateId = templateId\r\n            this.rowId = id\r\n          },\r\n          handleSizeChange: function(size) {\r\n            //每页下拉显示数据\r\n            this.pagination.pageSize = size\r\n            this.search()\r\n          },\r\n          handleCurrentChange: function(currentPage) {\r\n            //点击第几页\r\n            this.pagination.page = currentPage\r\n            this.search()\r\n          },\r\n          getParam() {\r\n            let params = {}\r\n            if (str == 'find') {\r\n              // this.$store.dispatch(\"form/setBpmTemplatePaginationPageNum\", 1);\r\n              this.pagination.page = 1\r\n            }\r\n\r\n            //判断为合并查询还是分开查询\r\n            if (this.formType) {\r\n              params = this.getQueryFilter()\r\n            } else {\r\n              //判断是否配置了合并查询\r\n              if ($('.search-query').length > 0) {\r\n                params = this.getConditionQuery()\r\n              } else {\r\n                params = this.getQueryFilter()\r\n              }\r\n            }\r\n\r\n            if (\r\n              params.pagination &&\r\n              params.pagination &&\r\n              params.pagination.querys\r\n            ) {\r\n              let tempQueryS = []\r\n              let betweenConditions = {}\r\n              params.pagination.querys.forEach(q => {\r\n                if (\r\n                  q.value &&\r\n                  (q.operation != 'BETWEEN' || q.value.constructor == Array)\r\n                ) {\r\n                  tempQueryS.push(q)\r\n                } else if (q.value) {\r\n                  let conditions = q\r\n                  if (betweenConditions[q.property]) {\r\n                    conditions = betweenConditions[q.property]\r\n                    conditions.value = [conditions.value]\r\n                    conditions.value.push(q.value)\r\n                  }\r\n                  betweenConditions[q.property] = conditions\r\n                }\r\n              })\r\n              for (const key in betweenConditions) {\r\n                tempQueryS.push(betweenConditions[key])\r\n              }\r\n              params.pagination.querys = tempQueryS\r\n            }\r\n            return params\r\n          },\r\n          search(str) {\r\n            const loading = this.$loading(this.options)\r\n            let params = {}\r\n            if (str == 'find') {\r\n              // this.$store.dispatch(\"form/setBpmTemplatePaginationPageNum\", 1);\r\n              this.pagination.page = 1\r\n            }\r\n            //判断为合并查询还是分开查询\r\n            if (this.formType) {\r\n              params = this.getQueryFilter()\r\n            } else {\r\n              //判断是否配置了合并查询\r\n              if ($('.search-query').length > 0) {\r\n                params = this.getConditionQuery()\r\n              } else {\r\n                params = this.getQueryFilter()\r\n              }\r\n            }\r\n            if (params.pagination && params.pagination.querys) {\r\n              let tempQueryS = []\r\n              let betweenConditions = {}\r\n              params.pagination.querys.forEach(q => {\r\n                if (\r\n                  q.value &&\r\n                  (q.operation != 'BETWEEN' || q.value.constructor == Array)\r\n                ) {\r\n                  tempQueryS.push(q)\r\n                } else if (q.value) {\r\n                  let conditions = q\r\n                  if (betweenConditions[q.property]) {\r\n                    conditions = betweenConditions[q.property]\r\n                    conditions.value = [conditions.value]\r\n                    conditions.value.push(q.value)\r\n                  }\r\n                  betweenConditions[q.property] = conditions\r\n                }\r\n              })\r\n              for (const key in betweenConditions) {\r\n                tempQueryS.push(betweenConditions[key])\r\n              }\r\n              params.pagination.querys = tempQueryS\r\n              params.pagination.querys = params.pagination.querys\r\n                ? params.pagination.querys.concat(this.treeQuerys)\r\n                : this.treeQuerys\r\n            }\r\n            //把过滤树的条件也拼接进去\r\n            if (this.treeQuerys && this.treeQuerys.length > 0) {\r\n              params.pagination.querys = params.pagination.querys\r\n                ? params.pagination.querys.concat(this.treeQuerys)\r\n                : this.treeQuerys\r\n            }\r\n\r\n            //数据视图控件\r\n            if (this.dataView) {\r\n              this.handelBindFiledValua()\r\n              params.refIdValue = this.dataView.refIdValue\r\n              //关联查询字段\r\n              if (this.dataView.selectList && this.dataView.selectList.length >0) {\r\n                params.selectList = this.dataView.selectList\r\n              }\r\n            }\r\n            const this_ = this\r\n            if (this_.isJoinFlow) {\r\n              params.isJoinFlow = true\r\n              params.taskType = this_.taskType\r\n              params.defKey = this_.defKey\r\n            }\r\n            if ($.isEmptyObject(this.searchForm)) {\r\n              this.$store\r\n                .dispatch('form/getBpmTemplateByPagination', params)\r\n                .then(response => {\r\n                  this_.rows = response.data.rows\r\n                  this_.total = response.data.total\r\n                  this_.pagination.page = response.data.page\r\n                  this_.pagination.pageSize = response.data.pageSize\r\n                  loading.close()\r\n                })\r\n            } else {\r\n              this.$store\r\n                .dispatch('form/getBpmTemplateByPagination', params)\r\n                .then(response => {\r\n                  this_.rows = response.data.rows\r\n                  this_.total = response.data.total\r\n                  this_.pagination.page = response.data.page\r\n                  this_.pagination.pageSize = response.data.pageSize\r\n                  loading.close()\r\n                })\r\n            }\r\n          },\r\n          getQueryFilter() {\r\n            let operationMap = this.getSearchItems()\r\n            let fieldTypeMap = this.getFieldType()\r\n            let specialMap = this.getSpecialMap()\r\n            let querys = [] //查询条件\r\n            let queryFilter = {}\r\n            let pageBean = {pageBean: this.pagination}\r\n            let params = {templateId: this.templateInfo.id}\r\n            params.pagination = pageBean\r\n            if ($.isEmptyObject(this.searchForm)) {\r\n              return params\r\n            } else {\r\n              for (let key in this.searchForm) {\r\n                if (\r\n                  typeof this.searchForm[key] != 'undefined' &&\r\n                  this.searchForm[key] != '' &&\r\n                  this.searchForm[key] != null\r\n                ) {\r\n                  if (this.searchForm[key] instanceof Array) {\r\n                    for (let i = 0; i < this.searchForm[key].length; i++) {\r\n                      querys.push({\r\n                        property: key,\r\n                        value: this.searchForm[key][i],\r\n                        group: 'main',\r\n                        operation: operationMap[key],\r\n                        relation: 'AND'\r\n                      })\r\n                    }\r\n                  } else if (this.searchForm[key].includes(',') && !specialMap[key]) {\r\n                    let arr = this.searchForm[key].split(',')\r\n                    arr.forEach(v => {\r\n                      querys.push({\r\n                        property: key,\r\n                        value: v,\r\n                        group: 'main',\r\n                        operation: operationMap[key],\r\n                        relation: 'AND'\r\n                      })\r\n                    })\r\n                  } else {\r\n                    let value = this.searchForm[key]\r\n                    //整数类型\r\n                    if (fieldTypeMap[key] && fieldTypeMap[key] == 'number') {\r\n                      value = parseFloat(this.searchForm[key])\r\n                    }\r\n                    querys.push({\r\n                      property: key,\r\n                      value: value,\r\n                      group: 'main',\r\n                      operation: operationMap[key],\r\n                      relation: 'AND'\r\n                    })\r\n                  }\r\n                }\r\n              }\r\n              this.clearQueryByGroupName(querys, 'filter')\r\n              // 将过滤条件添加查询参数数组中\r\n              if (this.filters && Object.keys(this.filters).length > 0) {\r\n                let prefix = this.templateInfo.isExternal===1?\"\":\"F_\"\r\n                Object.keys(this.filters).forEach(k => {\r\n                  const filter = this.filters[k]\r\n                  let query = {\r\n                    property: prefix + k,\r\n                    value: filter[0],\r\n                    group: 'filter',\r\n                    relation: 'AND'\r\n                  }\r\n                  if (filter.length == 1) {\r\n                    query.operation = 'EQUAL'\r\n                    querys.push(query)\r\n                  } else if (filter.length > 1) {\r\n                    query.operation = 'IN'\r\n                    query.value = filter\r\n                    querys.push(query)\r\n                  }\r\n                })\r\n              }\r\n              queryFilter = {pageBean: this.pagination, querys}\r\n              //如果有设置默认排序,优先使用默认排序\r\n              if(this.templateInfo.sortField){\r\n                let sortField=JSON.parse(this.templateInfo.sortField);\r\n                let sorter=[];\r\n                for(let x=0;x<sortField.length;x++){\r\n                    sorter.push({'property':sortField[x].name ,'direction':sortField[x].sort});\r\n                }\r\n                queryFilter.sorter =sorter;\r\n              }\r\n              if (this.sorter && this.sorter.length > 0) {\r\n                queryFilter.sorter = this.sorter\r\n              }\r\n              params.pagination = queryFilter\r\n              return params\r\n            }\r\n          },\r\n          // 通过分组名称清除对应查询条件\r\n          clearQueryByGroupName(querys, groupName) {\r\n            // 待删除的查询条件\r\n            let toDelete = []\r\n            querys &&\r\n              querys.forEach(query => {\r\n                if (query.group == groupName) {\r\n                  toDelete.push(query)\r\n                }\r\n              })\r\n            toDelete.forEach(d => {\r\n              querys.remove(d)\r\n            })\r\n          },\r\n          handleSortChange(column) {\r\n            if (!column.order) {\r\n              this.sorter = null\r\n            } else {\r\n              this.sorter = [\r\n                {\r\n                  property: column.prop,\r\n                  direction: column.order == 'ascending' ? 'ASC' : 'DESC'\r\n                }\r\n              ]\r\n            }\r\n            this.search()\r\n          },\r\n          handleFilterChange(m) {\r\n            this.filters = {...this.filters, ...m}\r\n            Object.keys(this.filters).forEach(k => {\r\n              if (!this.filters[k] || this.filters[k].length == 0) {\r\n                delete this.filters[k]\r\n              }\r\n            })\r\n            this.search()\r\n          },\r\n          getSearchItems() {\r\n            let searchItems = $('.search-item')\r\n            let operationMap = {}\r\n            let operationType = {\r\n              like: 'LIKE',\r\n              equal: 'EQUAL',\r\n              between: 'BETWEEN',\r\n              left_like: 'LEFT_LIKE',\r\n              right_like: 'RIGHT_LIKE'\r\n            }\r\n            if (searchItems) {\r\n              for (let i = 0; i < searchItems.length; i++) {\r\n                let operation = '='\r\n                if (typeof $(searchItems[i]).attr('ht-query') != 'undefined') {\r\n                  operation = $(searchItems[i]).attr('operation')\r\n                  operationMap[$(searchItems[i]).attr('ht-query')] =\r\n                    typeof operationType[operation] != 'undefined'\r\n                      ? operationType[operation]\r\n                      : operation\r\n                } else if (\r\n                  typeof $(searchItems[i])\r\n                    .children()\r\n                    .attr('ht-query') != 'undefined'\r\n                ) {\r\n                  operation = $(searchItems[i])\r\n                    .children()\r\n                    .attr('operation')\r\n                  operationMap[\r\n                    $(searchItems[i])\r\n                      .children()\r\n                      .attr('ht-query')\r\n                  ] =\r\n                    typeof operationType[operation] != 'undefined'\r\n                      ? operationType[operation]\r\n                      : operation\r\n                }\r\n              }\r\n            }\r\n            return operationMap\r\n          },\r\n          getFieldType() {\r\n            let searchItems = $('.search-item')\r\n            let operationMap = {}\r\n            let operationType = {\r\n              number: 'number',\r\n              text: 'text'\r\n            }\r\n            if (searchItems) {\r\n              for (let i = 0; i < searchItems.length; i++) {\r\n                let operation = '='\r\n                if (typeof $(searchItems[i]).attr('ht-query') != 'undefined') {\r\n                  operation = $(searchItems[i]).attr('type')\r\n                  operationMap[$(searchItems[i]).attr('ht-query')] =\r\n                    typeof operationType[operation] != 'undefined'\r\n                      ? operationType[operation]\r\n                      : operation\r\n                } else if (\r\n                  typeof $(searchItems[i])\r\n                    .children()\r\n                    .attr('ht-query') != 'undefined'\r\n                ) {\r\n                  operation = $(searchItems[i])\r\n                    .children()\r\n                    .attr('type')\r\n                  operationMap[\r\n                    $(searchItems[i])\r\n                      .children()\r\n                      .attr('ht-query')\r\n                  ] =\r\n                    typeof operationType[operation] != 'undefined'\r\n                      ? operationType[operation]\r\n                      : operation\r\n                }\r\n              }\r\n            }\r\n            return operationMap\r\n          },\r\n          //获取特殊查询情况（自定义对话框）\r\n          getSpecialMap() {\r\n            let searchItems = $(\".search-item\");\r\n            let fieldQueryMap = {};//查询条件字段\r\n\r\n            if (searchItems) {\r\n              for (var i = 0; i < searchItems.length; i++) {\r\n                if (typeof $(searchItems[i]).attr(\"ht-query\") != \"undefined\") {\r\n                  //查询条件字段\r\n                  fieldQueryMap[$(searchItems[i]).attr(\"ht-query\")] =\r\n                    typeof $(searchItems[i]).attr(\"special-query\") != \"undefined\"\r\n                      ? true\r\n                      : false;\r\n                } else if (\r\n                  typeof $(searchItems[i])\r\n                    .children()\r\n                    .attr(\"ht-query\") != \"undefined\"\r\n                ) {\r\n                  //查询条件字段\r\n                  fieldQueryMap[$(searchItems[i]).children().attr(\"ht-query\")] =\r\n                    typeof $(searchItems[i]).children().attr(\"special-query\") != \"undefined\"\r\n                      ? true\r\n                      : false;\r\n                }\r\n              }\r\n            }\r\n            return fieldQueryMap;\r\n          },\r\n          getConditionQuery() {\r\n            let searchAll = $('.search-query')\r\n            let values = ''\r\n            let querys = [] //查询条件\r\n            let queryFilter = {}\r\n            let pageBean = {pageBean: this.pagination}\r\n            let params = {templateId: this.templateInfo.id}\r\n            params.pagination = pageBean\r\n\r\n            // 将过滤条件添加查询参数数组中\r\n            if (this.filters && Object.keys(this.filters).length > 0) {\r\n              let prefix = this.templateInfo.isExternal===1?\"\":\"F_\"\r\n              Object.keys(this.filters).forEach(k => {\r\n                const filter = this.filters[k]\r\n                let query = {\r\n                  property: prefix + k,\r\n                  value: filter[0],\r\n                  group: 'filter',\r\n                  relation: 'AND'\r\n                }\r\n                if (filter.length == 1) {\r\n                  query.operation = 'EQUAL'\r\n                  querys.push(query)\r\n                } else if (filter.length > 1) {\r\n                  query.operation = 'IN'\r\n                  query.value = filter\r\n                  querys.push(query)\r\n                }\r\n              })\r\n            }\r\n\r\n            if (this.queryForm.queryData == '') {\r\n              queryFilter = {pageBean: this.pagination, querys};\r\n              params.pagination = queryFilter;\r\n              return params\r\n            } else {\r\n              if (\r\n                typeof $($(searchAll[0]).children()[0]).attr(\r\n                  'ht-quick-search'\r\n                ) != 'undefined'\r\n              ) {\r\n                values = $($(searchAll[0]).children()[0]).attr(\r\n                  'ht-quick-search'\r\n                )\r\n                let arr = values.split(',')\r\n                for (let value of arr) {\r\n                  querys.push({\r\n                    property: value,\r\n                    value: this.queryForm.queryData,\r\n                    group: 'main',\r\n                    operation: 'LIKE',\r\n                    relation: 'OR'\r\n                  })\r\n                }\r\n              }\r\n            }\r\n            queryFilter = {pageBean: this.pagination, querys}\r\n            params.pagination = queryFilter\r\n            return params\r\n          },\r\n          //打开高级检索\r\n          advanced() {\r\n            this.formType = !this.formType\r\n            if (this.formType) {\r\n              this.incons = 'el-icon-arrow-up'\r\n              this.queryForm.queryData = ''\r\n            } else {\r\n              this.incons = 'el-icon-arrow-down'\r\n              this.searchForm = {}\r\n            }\r\n          },\r\n          //回车查询\r\n          searchEnterFun: function(e) {\r\n            let keyCode = window.event ? e.keyCode : e.which\r\n            if (keyCode == 13) {\r\n              this.search('find');\r\n            }\r\n          },\r\n          reset(flag) {\r\n            this.queryForm.queryData = ''\r\n            if (this.templateInfo.conditionField) {\r\n              let conditionField = utils.parseToJson(\r\n                this.templateInfo.conditionField\r\n              )\r\n              for (let i = 0; i < conditionField.length; i++) {\r\n                let fieldName = 'F_' + conditionField[i].name\r\n                this.$set(this.searchForm, fieldName, '')\r\n                this.$set(this.searchForm, conditionField[i].name, '')\r\n              }\r\n            }\r\n            this.filters = {}\r\n            this.$refs.multipleTemplateTable.clearFilter()\r\n            if (!flag) {\r\n              this.search('find')\r\n            }\r\n          },\r\n          handleSelectionChange(val) {\r\n            this.tableData.selectRows = val\r\n          },\r\n          deleted() {\r\n            if (\r\n              this.tableData.selectRows == null ||\r\n              this.tableData.selectRows.length == 0\r\n            ) {\r\n              this.$message.warning('请选择文件删除!')\r\n              return false\r\n            }\r\n            this.$confirm('此操作将删除该文件, 是否继续?', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            })\r\n              .then(() => {\r\n                let s = []\r\n                for (let i = 0; i < this.tableData.selectRows.length; i++) {\r\n                  s.push(\r\n                    this.tableData.selectRows[i][this.templateInfo.pkField]\r\n                  )\r\n                }\r\n                let data = {\r\n                  ids: s.join(','),\r\n                  boAlias: this.templateInfo.boDefAlias\r\n                }\r\n                this.$store\r\n                  .dispatch('form/deleteTemplateDataById', data)\r\n                  .then(() => {\r\n                    this.pagination.page = 1\r\n                    this.search()\r\n                  })\r\n              })\r\n              .catch(() => {\r\n                this.$message({\r\n                  type: 'info',\r\n                  message: '已取消删除'\r\n                })\r\n              })\r\n          },\r\n          del(id) {\r\n            this.$confirm('此操作将删除该数据, 是否继续?', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            })\r\n              .then(() => {\r\n                let data = {ids: id, boAlias: this.templateInfo.boDefAlias}\r\n                this.$store\r\n                  .dispatch('form/deleteTemplateDataById', data)\r\n                  .then(() => {\r\n                    this.pagination.page = 1\r\n                    this.search()\r\n                  })\r\n              })\r\n              .catch(() => {\r\n                this.$message({\r\n                  type: 'info',\r\n                  message: '已取消删除'\r\n                })\r\n              })\r\n          },\r\n          operating(templateId, id, action, defId, isStartFlow, openType) {\r\n            //isStartFlow （false：可以发起流程，true：不可以发起流程）\r\n            if(this.templateInfo.manageField && !isStartFlow){\r\n              //先配置不能发起流程\r\n              if(action == \"add\" && isStartFlow==\"\"){\r\n                isStartFlow = true;\r\n              }\r\n              if(action == \"edit\" && isStartFlow===false){\r\n                isStartFlow = true;\r\n              }\r\n              //再判断是否可以发起流程\r\n              let manageField = JSON.parse(this.templateInfo.manageField);\r\n              //判断是否配置了发起流程按钮\r\n              for(let k =0;k<manageField.length;k++){\r\n                if(action == \"add\" && manageField[k].name==\"startFlow\"){\r\n                  isStartFlow = false;\r\n                  break;\r\n                }else if(action == \"edit\" && manageField[k].name==\"startFlow\"){\r\n                  isStartFlow = false;\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n            if (!templateId) {\r\n              templateId = this.templateInfo.id\r\n              action = action == 'select' ? 'get' : 'add'\r\n            }\r\n            //数据视图随机添加到其他菜单下面时获取当前菜单的别名  并且当前数据视图不是表单里的数据视图  dataView\r\n            if (\r\n              sessionStorage.menu_alias &&\r\n              !this.dataView &&\r\n              !this.ignoredAlias.includes(sessionStorage.menu_alias)\r\n            ) {\r\n              this.alias_new = sessionStorage.menu_alias\r\n            }\r\n            var url =\r\n              '/' +\r\n              this.alias_new +\r\n              '/template/form/' +\r\n              this.templateKey +\r\n              '/' +\r\n              action\r\n            if(this.isJoinFlow){\r\n              this.alias_new=\"statement\"\r\n            }\r\n            if (this.single == 'true') {\r\n              url =\r\n                '/' +\r\n                this.alias_new +\r\n                '/template/form/' +\r\n                this.templateKey +\r\n                '/' +\r\n                action +\r\n                '/true'\r\n            }\r\n            //判断数据视图控件\r\n            let isDataView = false;\r\n            if(this.dataView){\r\n              if(this.dataView.boDefAlias && this.dataView.boDefAlias != \"\"){\r\n                isDataView = true;\r\n              }\r\n            }\r\n\r\n            if(openType == \"new\" || this.isJoinFlow || isDataView ){\r\n              url += \"/new\";\r\n            }\r\n\r\n            if (id) {\r\n              url = url + '?id=' + id + '&'\r\n            } else {\r\n              url += '?'\r\n            }\r\n            let startFlowStr = 'startFlow=false'\r\n            if (action == 'add' && defId && isStartFlow===false) {\r\n              startFlowStr = 'startFlow=true'\r\n            } else if (id && isStartFlow===false && defId) {\r\n              startFlowStr = 'startFlow=true'\r\n            }\r\n            let dataUrl = '';\r\n            if(this.dataView){\r\n              if(this.dataView.bindList && this.dataView.bindList.length >0){\r\n                let bindList = [];\r\n                for(var i=0; i<this.dataView.bindList.length;i++){\r\n                  let item = {key: this.dataView.bindList[i].bindFilld, value: this.dataView.bindList[i].fillValue};\r\n                  bindList.push(item);\r\n                }\r\n                dataUrl = '&bindList=' + encodeURIComponent(Base64.encode(JSON.stringify(bindList)));\r\n              }\r\n            }\r\n            let path = url + startFlowStr\r\n            if (dataUrl != '') {\r\n              path = url + startFlowStr + dataUrl\r\n            }\r\n            debugger;\r\n            //TODO 如果是模块开发 全部已新窗口打开\r\n            if (openType == 'new' || this.isJoinFlow || isDataView ) {\r\n              window.open(\r\n                this.$router.resolve(path.replace(this.alias_new,\"statement\") + '&isNewPage=true').href,\r\n                '_blank'\r\n              )\r\n            } else {\r\n              if (path.indexOf('othermenu') != -1) {\r\n                path = path.replace('/othermenu', '/statement')\r\n              }\r\n              this.$router.push(path)\r\n            }\r\n          },\r\n          openUrl(url, type, row, fieldName) {\r\n            if (row && fieldName) {\r\n              url = this.handledUrlParams(url, row, fieldName)\r\n            }\r\n            if (type == 'new') {\r\n              window.open(url, '_blank')\r\n            } else {\r\n              window.location.href = url\r\n            }\r\n          },\r\n          handledUrlParams(url, row, fieldName) {\r\n            if (this.templateInfo.displayField) {\r\n              let displayFields = JSON.parse(this.templateInfo.displayField)\r\n              displayFields.forEach(display => {\r\n                if (display.name == fieldName) {\r\n                  if (display.urlParams && display.urlParams.length > 0) {\r\n                    let urlParams = display.urlParams\r\n                    let suffix = ''\r\n                    urlParams.forEach(param => {\r\n                      if (suffix) {\r\n                        suffix += '&'\r\n                      }\r\n                      suffix = suffix + param.name + '=' + row[param.field]\r\n                    })\r\n                    if (suffix) {\r\n                      if (url.indexOf('?') != -1) {\r\n                        url = url + '&' + suffix\r\n                      } else {\r\n                        url = url + '?' + suffix\r\n                      }\r\n                      return url\r\n                    }\r\n                  }\r\n                  return url\r\n                }\r\n              })\r\n            }\r\n            return url\r\n          },\r\n          viewReport(data, jsonStr, openType) {\r\n            let item = JSON.parse(Base64.decode(jsonStr))\r\n            let conditionField = item.conditionField\r\n            let querys = []\r\n            if (conditionField && conditionField.length > 0) {\r\n              conditionField.forEach(obj => {\r\n                if (obj.parameter) {\r\n                  querys.push({\r\n                    property: obj.key,\r\n                    value: data[obj.parameter],\r\n                    group: 'main',\r\n                    operation: obj.qt,\r\n                    relation: 'AND'\r\n                  })\r\n                }\r\n              })\r\n            }\r\n            //数据随机添加到其他菜单下面时获取当前菜单的别名\r\n            if (sessionStorage.menu_alias) {\r\n              this.alias_new = sessionStorage.menu_alias\r\n            }\r\n            var url =\r\n              '/' +\r\n              this.alias_new +\r\n              '/template/preview/' +\r\n              item.alias +\r\n              '/false/' +\r\n              encodeURIComponent(Base64.encode(JSON.stringify(querys)))\r\n            //url 转码防止有斜杠 导致路由跳转不对\r\n            if (openType == 'new') {\r\n              window.open(this.$router.resolve(url).href, '_blank')\r\n            } else {\r\n              this.$router.push(url)\r\n            }\r\n          },\r\n          startFlow(id) {\r\n            let data = {\r\n              defKey: this.templateInfo.defId,\r\n              businessKey: id,\r\n              boAlias: this.templateInfo.boDefAlias\r\n            }\r\n            let loadingInstance = Loading.service({fullscreen: true}) //开始\r\n            this.$store\r\n              .dispatch('storeProcess/startForm', data)\r\n              .then(result => {\r\n                loadingInstance.close() // 结束\r\n                if (result.state) {\r\n                  this.$message.success(result.message)\r\n                  this.search()\r\n                } else {\r\n                  this.disabled = false\r\n                  this.$message.error(result.message)\r\n                }\r\n              })\r\n          },\r\n          //点击导出按钮\r\n          exports(exportSettingFields) {\r\n            let displayFields=[]\r\n            if (exportSettingFields){\r\n              displayFields= JSON.parse(Base64.decode(exportSettingFields))\r\n            }\r\n            if (displayFields.length==0 && this.templateInfo.displayField){\r\n              displayFields = JSON.parse(this.templateInfo.displayField)\r\n            }\r\n            this.exportType = 'main'\r\n            this.displayFields = []\r\n            displayFields.forEach(item => {\r\n              if (item.type) {\r\n                this.displayFields.push(item)\r\n              }\r\n            })\r\n            this.dialogExportVisible = true\r\n          },\r\n          importCommand(params) {\r\n            switch (params.command) {\r\n              case 'downloadTempFile':\r\n                this.downloadMainTempFile()\r\n                break\r\n              case 'importMain':\r\n                this.importMain()\r\n                break\r\n              case 'log':\r\n                this.openLog()\r\n                break\r\n              default:\r\n                break\r\n            }\r\n          },\r\n          openLog() {\r\n            this.dialogVisible = true\r\n          },\r\n          downloadMainTempFile() {\r\n            let customTemplateId = ''\r\n            if (this.templateInfo && this.templateInfo.manageField) {\r\n              let manageFieldList = JSON.parse(this.templateInfo.manageField)\r\n              for (let index = 0; index < manageFieldList.length; index++) {\r\n                let manage = manageFieldList[index]\r\n                if (manage.name == 'import') {\r\n                  if (\r\n                    manage.importTemplate &&\r\n                    manage.importTemplate.length > 0\r\n                  ) {\r\n                    customTemplateId = manage.importTemplate[0].id\r\n                  }\r\n                  break\r\n                }\r\n              }\r\n            }\r\n\r\n            if (customTemplateId) {\r\n              this.$store.dispatch('menu/downloadFile', customTemplateId)\r\n            } else {\r\n              let loadingInstance = Loading.service({fullscreen: true}) //开始\r\n              this.$store\r\n                .dispatch('form/downloadMainTempFile', this.templateInfo.alias)\r\n                .then(() => {\r\n                  loadingInstance.close() // 结束\r\n                })\r\n                .catch(c => {\r\n                  loadingInstance.close()\r\n                })\r\n            }\r\n          },\r\n\r\n          importMain(param) {\r\n            let formData = new FormData()\r\n            formData.append('file', param.file)\r\n\r\n            let params = {\r\n              data: formData,\r\n              alias: this.templateInfo.alias\r\n            }\r\n\r\n            if (this.dataView) {\r\n              this.handelBindFiledValua()\r\n              params.bindFilld = this.dataView.bindFilld || ''\r\n              params.fillValue = this.dataView.fillValue || ''\r\n              params.refIdValue = this.dataView.refIdValue\r\n            }\r\n\r\n            let loadingInstance = Loading.service({fullscreen: true}) //开始\r\n            form.mainImport(params, data => {\r\n              loadingInstance.close() // 结束\r\n              if (data.state) {\r\n                //导入成功之后重新渲染当前组件\r\n                this.$parent.refreshTime=new Date().getTime();\r\n                this.$message({type: 'success', message: data.message})\r\n                param.onSuccess()\r\n                if (sessionStorage.getItem('formImportTempRefId')) {\r\n                  let json = JSON.parse(data.value)\r\n                  json.boAlias = this.dataView.boDefAlias\r\n                  let oldConf = sessionStorage.getItem('formImportTempJson')\r\n                  if (!oldConf) {\r\n                    sessionStorage.setItem(\r\n                      'formImportTempJson',\r\n                      JSON.stringify([json])\r\n                    )\r\n                  } else {\r\n                    let oldJosn = JSON.parse(oldConf)\r\n                    let isInOldJosn = false\r\n                    for (let index = 0; index < oldJosn.length; index++) {\r\n                      const old = oldJosn[index]\r\n                      if (\r\n                        old.tabName == json.tabName &&\r\n                        old.bindFilld == json.bindFilld\r\n                      ) {\r\n                        isInOldJosn = true\r\n                        break\r\n                      }\r\n                    }\r\n                    if (!isInOldJosn) {\r\n                      oldJosn.push(json)\r\n                    }\r\n                    sessionStorage.setItem(\r\n                      'formImportTempJson',\r\n                      JSON.stringify(oldJosn)\r\n                    )\r\n                  }\r\n                }\r\n                this.search()\r\n              } else {\r\n                param.onError()\r\n              }\r\n            })\r\n          },\r\n          //显示子表对话框\r\n          showSubList(refId) {\r\n            this.refId = refId\r\n            this.getSubEntsByFormKey(refId)\r\n          },\r\n          //显示修改记录\r\n          openRecordList(refId) {\r\n            this.dialogRecordVisible = true\r\n            this.recordRefId = refId\r\n            let param = {\r\n              pageBean: {page: 1, pageSize: 20, showTotal: true},\r\n              sorter: [{direction: 'ASC', property: 'modifyTime'}],\r\n              querys: [\r\n                {\r\n                  property: 'ref_id_',\r\n                  value: this.recordRefId,\r\n                  group: 'main',\r\n                  operation: 'EQUAL',\r\n                  relation: 'AND'\r\n                }\r\n              ]\r\n            }\r\n            this.recordTableLoading = true\r\n            let url = '${bpmRunTime}/bpm/boDataModifyRecord/v1/listJson'\r\n            req.post(url, param).then(resp => {\r\n              this.recordTableLoading = false\r\n              this.recordList = resp.data.rows\r\n              this.modifyRecord.pagination.pageBean = {\r\n                pageSize: resp.data.pageSize,\r\n                page: resp.data.page,\r\n                total: resp.data.total\r\n              }\r\n            })\r\n          },\r\n          handleRecordCurrentChange(index, modifyRecord) {\r\n            modifyRecord.pagination.pageBean.page = index\r\n            let param = {\r\n              pageBean: modifyRecord.pagination.pageBean,\r\n              sorter: [{direction: 'ASC', property: 'modifyTime'}],\r\n              querys: [\r\n                {\r\n                  property: 'ref_id_',\r\n                  value: this.recordRefId,\r\n                  group: 'main',\r\n                  operation: 'EQUAL',\r\n                  relation: 'AND'\r\n                }\r\n              ]\r\n            }\r\n            this.recordTableLoading = true\r\n            let url = '${bpmRunTime}/bpm/boDataModifyRecord/v1/listJson'\r\n            req.post(url, param).then(resp => {\r\n              this.recordTableLoading = false\r\n              this.recordList = resp.data.rows\r\n              this.modifyRecord.pagination.pageBean = {\r\n                pageSize: resp.data.pageSize,\r\n                page: resp.data.page,\r\n                total: resp.data.total\r\n              }\r\n            })\r\n          },\r\n          //取消修改记录对话框\r\n          recordCancel() {\r\n            this.dialogRecordVisible = false\r\n            this.recordList = []\r\n            this.recordRefId = ''\r\n            this.modifyRecord = {\r\n              pagination: {\r\n                pageBean: {\r\n                  page: 1,\r\n                  pageSize: 20,\r\n                  total: 0\r\n                }\r\n              }\r\n            }\r\n          },\r\n          //\r\n          openModifyDetail(row) {\r\n            this.currentModify = row\r\n            this.modifyDetailDialogVisible = true\r\n          },\r\n          //查看修改记录详情\r\n          showModifyRecord(id, refId) {\r\n            var url =\r\n              '/statement/template/form/' +\r\n              this.templateKey +\r\n              '/get/true' +\r\n              '?id=' +\r\n              refId +\r\n              '&startFlow=false&recordId=' +\r\n              id +\r\n              '&isNewPage=true'\r\n            window.open(this.$router.resolve(url).href, '_blank')\r\n          },\r\n          //确定导出\r\n          submitExport() {\r\n            if (!this.exportData || this.exportData.expField.length < 1) {\r\n              this.$message({\r\n                type: 'info',\r\n                message: '请选择要导出的字段！'\r\n              })\r\n              return\r\n            }\r\n\r\n            if (this.exportType === 'main') this.exportMain()\r\n            else\r\n              this.exportSubData(\r\n                this.exportData.expField,\r\n                this.refId,\r\n                this.currentTab.entName\r\n              )\r\n          },\r\n          exportMain() {\r\n            let expField = ''\r\n            for (let i = 0; i < this.exportData.expField.length; i++) {\r\n              if (i > 0) {\r\n                expField += ','\r\n              }\r\n              expField += this.exportData.expField[i].name\r\n            }\r\n            expField = Base64.encode(expField)\r\n\r\n            let data = {\r\n              boAlias: this.templateInfo.alias,\r\n              getType: this.exportData.getType,\r\n              expField: expField,\r\n              filterKey: ''\r\n            }\r\n            data.query = this.getQueryFilter().pagination\r\n            if (this.dataView && this.dataView.bindSelectd) {\r\n              data.query.querys.push({\r\n                value: this.dataView.selectValue,\r\n                operation: 'EQUAL',\r\n                property: 'F_' + this.dataView.bindSelectd\r\n              })\r\n            }\r\n            let loadingInstance = Loading.service({fullscreen: true}) //开始\r\n            this.$store.dispatch('form/templateExport', data).then(() => {\r\n              loadingInstance.close() // 结束\r\n              this.dialogExportVisible = false\r\n            })\r\n            for (let i = 0; i < this.subDisplayFieldsList.length; i++) {\r\n              this.exportSubData(\r\n                this.$refs['subExportTable'][i].selection,\r\n                '',\r\n                this.subDisplayFieldsList[i].name\r\n              )\r\n              this.$set(this.$refs['subExportTable'][i], 'selection', [])\r\n            }\r\n          },\r\n          exportSubData(expFields, refId, alias) {\r\n            let expField = []\r\n            for (let i = 0; i < expFields.length; i++) {\r\n              expField.push({\r\n                key: expFields[i].name,\r\n                value: expFields[i].desc\r\n              })\r\n            }\r\n            let data = {\r\n              alias: alias,\r\n              refId: refId,\r\n              type: this.exportData.getType,\r\n              expField: JSON.stringify(expField),\r\n              filterKey: ''\r\n            }\r\n            data.queryFilter = this.currentTab.pagination\r\n            let loadingInstance = Loading.service({fullscreen: true})\r\n            form.subExport(data, resp => {\r\n              loadingInstance.close()\r\n              this.dialogExportVisible = false\r\n            })\r\n          },\r\n          //取消导出\r\n          exportCancel() {\r\n            this.dialogExportVisible = false\r\n            this.exportData.expField = []\r\n          },\r\n          //取消子表对话框\r\n          subCancel() {\r\n            this.dialogSubVisible = false\r\n            this.tabs = []\r\n            this.ents = []\r\n          },\r\n          sunCancel() {\r\n            this.dialogSunVisible = false\r\n            this.sunTabs = []\r\n          },\r\n          handleExportSelectionChange(val) {\r\n            this.exportData.expField = []\r\n            if (val) {\r\n              this.exportData.expField = val\r\n            }\r\n          },\r\n          //全选\r\n          handleExportSelectAll() {\r\n            this.exportData.expField = this.displayFields\r\n          },\r\n          //排序\r\n          sort(index, type) {\r\n            if ('up' == type) {\r\n              if (index === 0) {\r\n                this.$message({\r\n                  message: '已经是列表中第一位',\r\n                  type: 'warning'\r\n                })\r\n              } else {\r\n                let temp = this.displayFields[index - 1]\r\n                this.$set(\r\n                  this.displayFields,\r\n                  index - 1,\r\n                  this.displayFields[index]\r\n                )\r\n                this.$set(this.displayFields, index, temp)\r\n              }\r\n            } else {\r\n              if (index === this.displayFields.length - 1) {\r\n                this.$message({\r\n                  message: '已经是列表中最后一位',\r\n                  type: 'warning'\r\n                })\r\n              } else {\r\n                this.isTransition = true\r\n                let i = this.displayFields[index + 1]\r\n                this.$set(\r\n                  this.displayFields,\r\n                  index + 1,\r\n                  this.displayFields[index]\r\n                )\r\n                this.$set(this.displayFields, index, i)\r\n              }\r\n            }\r\n          },\r\n          async getSunData(tab, row) {\r\n            let ents = tab.childEnts\r\n            let pk = tab.pkKey\r\n            let refId = ''\r\n            if (row[pk.toLocaleLowerCase()]) {\r\n              refId = row[pk.toLocaleLowerCase()]\r\n            } else {\r\n              refId = row[pk.toUpperCase()]\r\n            }\r\n            this.subTableLoading = true\r\n            if (ents && ents.length > 0) {\r\n              for (let i = 0; i < ents.length; i++) {\r\n                let tab = await this.getBoData(ents[i], refId)\r\n                this.sunTabs.push(tab)\r\n              }\r\n            }\r\n            this.subTableLoading = false\r\n            this.dialogSunVisible = true\r\n          },\r\n          getBoData(ent, refId) {\r\n            let attributeList = ent.attributeList\r\n            let tab = {\r\n              refId: refId,\r\n              pkKey: ent.pkKey,\r\n              name: ent.tableName,\r\n              entName: ent.name,\r\n              title: ent.comment,\r\n              attributeList: attributeList,\r\n              comment: ent.comment,\r\n              pagination: {\r\n                pageBean: {\r\n                  pageSize: 20,\r\n                  page: 1,\r\n                  total: 0\r\n                }\r\n              }\r\n            }\r\n            tab.childEnts = []\r\n            if (ent.childEnts && ent.childEnts.length > 0) {\r\n              tab.childEnts = ent.childEnts\r\n            }\r\n            return new Promise((resolve, reject) => {\r\n              this.$store\r\n                .dispatch('form/getSubDataPagination', {\r\n                  pagination: tab.pagination,\r\n                  name: ent.name,\r\n                  refId: refId\r\n                })\r\n                .then(data => {\r\n                  if (data && data.rows.length > 0) {\r\n                    tab.dataList = data.rows\r\n                    tab.pagination.pageBean.pageSize = data.pageSize\r\n                    tab.pagination.pageBean.page = data.page\r\n                    tab.pagination.pageBean.total = data.total\r\n                  } else {\r\n                    tab.dataList = []\r\n                    tab.pagination.pageBean.pageSize = 1\r\n                    tab.pagination.pageBean.page = 1\r\n                    tab.pagination.pageBean.total = 0\r\n                  }\r\n                  resolve(tab)\r\n                })\r\n            })\r\n          },\r\n          getSubEntsByFormKey(refId) {\r\n            /*if (!this.ents || this.ents.length < 1) {\r\n              form.getSubEntsByFormKey(this.templateInfo.formKey, (resp) => {\r\n                // 子表与孙表字段名设置小写\r\n                for (let i = 0; i < resp.data.length; i++) {\r\n                  resp.data[i].attributeList.forEach(attribute => {\r\n                    attribute.fieldName = attribute.fieldName.toLowerCase();\r\n                  })\r\n                  resp.data[i].childEnts.forEach(showChildEnt => {\r\n                    showChildEnt.attributeList.forEach(attribute => {\r\n                      attribute.fieldName = attribute.fieldName.toLowerCase();\r\n                    })\r\n                  })\r\n                }\r\n                this.ents = resp.data;\r\n              });\r\n            } else {*/\r\n            this.getSubData(this, refId)\r\n            /* }*/\r\n          },\r\n          async getSubData(_me, refId) {\r\n            //let ents = this.ents;\r\n            let ents = JSON.parse(_me.templateInfo.subField)\r\n\r\n            if (ents && ents.length > 0) {\r\n              for (let i = 0; i < ents.length; i++) {\r\n                ents[i].attributeList.forEach(attr => {\r\n                  attr.fieldName = attr.fieldName.toLowerCase()\r\n                })\r\n                ents[i].childEnts.forEach(showChildEnt => {\r\n                  showChildEnt.attributeList.forEach(attribute => {\r\n                    attribute.fieldName = attribute.fieldName.toLowerCase()\r\n                  })\r\n                })\r\n                let tab = await this.getBoData(ents[i], refId)\r\n                this.tabs.push(tab)\r\n              }\r\n            }\r\n            this.dialogSubVisible = true\r\n          },\r\n          nodeClick(node) {\r\n            const loading = this.$loading(this.options)\r\n            // this.$store.dispatch(\"form/setBpmTemplatePaginationPageNum\", 1);\r\n            this.pagination.page = 1\r\n            //每次点击过滤树,应该把右边的table 与分页全部重置为初始\r\n\r\n            let pageBean = {\r\n              pageBean: {page: 1, pageSize: this.pagination.pageSize}\r\n            }\r\n            pageBean.querys = []\r\n            if (!node.id || node.id != -1) {\r\n              let treeField = JSON.parse(this.templateInfo.treeField)\r\n              treeField.querys.forEach(item => {\r\n                if (item.key_ && item.value_) {\r\n                  pageBean.querys.push({\r\n                    property: '$TREE$' + item.key_,\r\n                    value: node[item.value_],\r\n                    group: 'main',\r\n                    operation: 'EQUAL',\r\n                    relation: 'AND'\r\n                  })\r\n                }\r\n              })\r\n            }\r\n            //把过滤树的查询条件存一份起来,右边的搜索与分页才能同时使用\r\n            this.treeQuerys = pageBean.querys\r\n\r\n            let params = {\r\n              templateId: this.templateInfo.id,\r\n              pagination: pageBean\r\n            }\r\n            this.reset(true)\r\n            //数据视图控件\r\n            if (this.dataView) {\r\n              if (this.dataView.selectList && this.dataView.selectList.length >0) {\r\n                params.selectList = this.dataView.selectList\r\n              }\r\n            }\r\n            const this_ = this\r\n            if (this_.isJoinFlow) {\r\n              params.isJoinFlow = true\r\n              params.taskType = this_.taskType\r\n              params.defKey = this_.defKey\r\n            }\r\n            this.$store\r\n              .dispatch('form/getBpmTemplateByPagination', params)\r\n              .then(response => {\r\n                this_.rows = response.data.rows\r\n                this_.total = response.data.total\r\n                this_.pagination.page = response.data.page\r\n                this_.pagination.pageSize = response.data.pageSize\r\n                loading.close()\r\n              })\r\n          },\r\n          //加载树的信息\r\n          toTreeData(data, id, pid, name, pvalue) {\r\n            // 建立个树形结构,需要定义个最顶层的父节点，pvalue是0\r\n            let parents = data.filter(\r\n              value =>\r\n                value[id] == value[pid] ||\r\n                value[pid] == null ||\r\n                value[pid] == pvalue\r\n            )\r\n            if (!parents) {\r\n              parents = data.filter(\r\n                value =>\r\n                  value[pid] !== 'undefined' &&\r\n                  value[pid] != null &&\r\n                  value[id] != value[pid]\r\n              )\r\n            }\r\n            return parents\r\n          },\r\n          //初始化树\r\n          initTree(treeField) {\r\n            const this_ = this\r\n            form.getByAlias(treeField.alias, res => {\r\n              this_.customDialog = res\r\n              dialog.getTreeData(\r\n                {\r\n                  requestType: 'GET',\r\n                  url:\r\n                    '${form}/form/customDialog/v1/getTreeData?alias=' +\r\n                    treeField.alias +\r\n                    '&mapParam='\r\n                },\r\n                resp => {\r\n                  if (this_.customDialog.displayfield) {\r\n                    let displayfield = JSON.parse(\r\n                      this_.customDialog.displayfield\r\n                    )\r\n                    this_.displayField = displayfield\r\n                    this_.treeList = resp.data\r\n                    let head = {}\r\n                    head[displayfield.displayName] = '全部'\r\n                    head.id = -1\r\n                    this_.tree.push(head)\r\n                  }\r\n                }\r\n              )\r\n            })\r\n          },\r\n          loadTree(node, resolve) {\r\n            if (node) {\r\n              if (node.data.id === -1) {\r\n                let tree = this.toTreeData(\r\n                  this.treeList,\r\n                  this.displayField.id,\r\n                  this.displayField.pid,\r\n                  this.displayField.displayName,\r\n                  this.displayField.pvalue ? this.displayField.pvalue : '0'\r\n                )\r\n                resolve(tree)\r\n              } else {\r\n                resolve(\r\n                  this.treeList.filter(\r\n                    value =>\r\n                      value[this.displayField.pid] ===\r\n                      node.data[this.displayField.id]\r\n                  )\r\n                )\r\n              }\r\n            } else {\r\n              resolve([])\r\n            }\r\n          },\r\n          handleSubCurrentChange(index, tab) {\r\n            tab.pagination.pageBean.page = index\r\n            this.subTableLoading = true\r\n            this.$store\r\n              .dispatch('form/getSubDataPagination', {\r\n                pagination: tab.pagination,\r\n                name: tab.entName,\r\n                refId: tab.refId ? tab.refId : this.refId\r\n              })\r\n              .then(resp => {\r\n                tab.pagination.pageBean = {\r\n                  pageSize: resp.pageSize,\r\n                  page: resp.page,\r\n                  total: resp.total\r\n                }\r\n                tab.dataList = resp.rows\r\n              })\r\n              .finally(() => {\r\n                this.subTableLoading = false\r\n              })\r\n          },\r\n          querySubTable(tab) {\r\n            tab.pagination.querys = []\r\n            if (this.querySubValue) {\r\n              tab.attributeList.forEach(item => {\r\n                //pgSql使用模糊查询，类型不匹配时会报错，此处只保留varchar类型\r\n                // if (item.dataType == 'varchar') {\r\n                tab.pagination.querys.push({\r\n                  property: item.fieldName,\r\n                  value: this.querySubValue,\r\n                  group: 'other',\r\n                  operation: 'LIKE',\r\n                  relation: 'OR'\r\n                })\r\n                // }\r\n              })\r\n            } else if (this.querySunValue) {\r\n              tab.attributeList.forEach(item => {\r\n                // if (item.dataType == 'varchar') {\r\n                tab.pagination.querys.push({\r\n                  property: item.fieldName,\r\n                  value: this.querySunValue,\r\n                  group: 'other',\r\n                  operation: 'LIKE',\r\n                  relation: 'OR'\r\n                })\r\n                // }\r\n              })\r\n            }\r\n            this.handleSubCurrentChange(1, tab)\r\n          },\r\n          importSub(param) {\r\n            let formData = new FormData()\r\n            formData.append('file', param.file)\r\n            let params = {\r\n              data: formData,\r\n              alias: this.currentTab.entName,\r\n              refId: this.refId\r\n            }\r\n            form.subImport(params, data => {\r\n              if (data.state) {\r\n                this.$message({type: 'success', message: data.message})\r\n                param.onSuccess()\r\n                this.handleSubCurrentChange(1, this.currentTab)\r\n              } else {\r\n                this.$message.error(data.message)\r\n                param.onError()\r\n              }\r\n            })\r\n          },\r\n          exportSub(tab) {\r\n            this.exportType = 'sub'\r\n            this.currentTab = tab\r\n            this.displayFields = []\r\n            this.subDisplayFieldsList = []\r\n            tab.attributeList.forEach(item => {\r\n              this.displayFields.push({\r\n                desc: item.comment,\r\n                name: item.fieldName,\r\n                type: item.columnType\r\n              })\r\n            })\r\n            this.dialogExportVisible = true\r\n          },\r\n          importButton(tab) {\r\n            this.currentTab = tab\r\n          },\r\n          myDraftList() {\r\n            //数据视图随机添加到其他菜单下面时获取当前菜单的别名  并且当前数据视图不是表单里的数据视图  dataView\r\n            if (\r\n              sessionStorage.menu_alias &&\r\n              !this.dataView &&\r\n              !this.ignoredAlias.includes(sessionStorage.menu_alias)\r\n            ) {\r\n              this.alias_new = sessionStorage.menu_alias\r\n            }\r\n            let dataViewFlag = false;\r\n            //判断当前数据视图是不是表单里的数据视图\r\n            if(this.dataView){\r\n              if(this.dataView.boDefAlias && this.dataView.boDefAlias != \"\"){\r\n                dataViewFlag = true;\r\n              }\r\n            }\r\n            let path =\r\n              '/' +\r\n              this.alias_new +\r\n              '/draftList/' +\r\n              this.templateInfo.alias +\r\n              '/' +\r\n              dataViewFlag;\r\n              if(this.openType == \"new\" || dataViewFlag){\r\n                path += \"?isNew=true\";\r\n              }\r\n              if(dataViewFlag) {\r\n                window.open(path, '_blank');\r\n              }else{\r\n                this.$router.push(path);\r\n              }\r\n\r\n            // let url =\r\n            //   \"/statement/draftList?tempAlias=\" + ;\r\n            // const { href } = this.$router.push({\r\n            //   path: url,\r\n            // });\r\n            // window.open(href, \"_blank\");\r\n          },\r\n          initSwitchStatus() {\r\n            //初始化开关状态\r\n            let manages = utils.parseToJson(this.templateInfo.manageField)\r\n            for (let i = 0; i < manages.length; i++) {\r\n              if (manages[i].name === 'switch') {\r\n                let fieldName = manages[i].bind;\r\n                this.$set(this.switchMap,fieldName,{});\r\n                this.switchMap[fieldName].on = manages[i].switchOn;\r\n                this.switchMap[fieldName].off = manages[i].switchOff;\r\n                this.switchMap[fieldName].onLabel = manages[i].switchOnLabel;\r\n                this.switchMap[fieldName].offLabel = manages[i].switchOffLabel;\r\n              }\r\n            }\r\n          },\r\n          switchChange(pkVal, on, off, fieldName, row, defaultTrue) {\r\n            let this_ = this\r\n            let val = row[fieldName];\r\n            if(val != on && val != off){\r\n              if(defaultTrue == \"true\"){\r\n                this.$set(row,fieldName,off);\r\n                val = off;\r\n              }else{\r\n                this.$set(row,fieldName,on);\r\n                val = on;\r\n              }\r\n            }\r\n            this_\r\n              .$confirm('将会修改该数据，是否继续?', {\r\n                confirmButtonText: '确定',\r\n                cancelButtonText: '取消',\r\n                type: 'warning'\r\n              })\r\n              .then(() => {\r\n                let form = window.context.form\r\n                let formAlias = this_.templateInfo.formKey //表单别名\r\n                let dataDefAlias = this_.templateInfo.boDefAlias //数据建模别名\r\n                req\r\n                  .get(\r\n                    form +\r\n                      '/form/dataTemplate/v1/getForm/' +\r\n                      formAlias +\r\n                      '/' +\r\n                      dataDefAlias +\r\n                      '?id=' +\r\n                      pkVal +\r\n                      '&action=get&recordId='\r\n                  )\r\n                  .then(resp => {\r\n                    let boData = resp.data.data\r\n                    boData[dataDefAlias][fieldName] = val;\r\n                    let saveData = {\r\n                      boAlias: this_.templateInfo.boDefAlias,\r\n                      boData: resp.data.data\r\n                    }\r\n                    this_.$store\r\n                      .dispatch('form/boSave', saveData)\r\n                      .then(result => {\r\n                        if (result.state) {\r\n                          this_.$message({\r\n                            type: 'success',\r\n                            message: '保存成功'\r\n                          })\r\n                        } else {\r\n                          this_.$message({\r\n                            type: 'error',\r\n                            message: '保存失败'\r\n                          })\r\n                        }\r\n                      })\r\n                  })\r\n              })\r\n              .catch(() => {\r\n                let form = window.context.form\r\n                let formAlias = this_.templateInfo.formKey //表单别名\r\n                let dataDefAlias = this_.templateInfo.boDefAlias //数据建模别名\r\n                req\r\n                .get(\r\n                  form +\r\n                    '/form/dataTemplate/v1/getForm/' +\r\n                    formAlias +\r\n                    '/' +\r\n                    dataDefAlias +\r\n                    '?id=' +\r\n                    pkVal +\r\n                    '&action=get&recordId='\r\n                ).then(resp=>{\r\n                  this_.$set(row,fieldName,resp.data.data[dataDefAlias][fieldName]);\r\n                })\r\n              })\r\n          },\r\n          display(mpDisplay) {\r\n            //pc端的数据报表不需要做本方法的处理，直接返回true即可。\r\n            return true\r\n          },\r\n          getFixed(fixed) {\r\n            return fixed\r\n          },\r\n          summary(method, field, decimal) {\r\n            let list = this.rows\r\n              .filter(item => item[field] !== undefined && item[field] !== '')\r\n              .map(item => new Number(item[field]))\r\n            if (!list || list.length == 0) {\r\n              return\r\n            }\r\n            if (method === 'count') {\r\n              return list.length\r\n            } else if (method === 'sum') {\r\n              return list.reduce((a, b) => a + b).toFixed(decimal)\r\n            } else if (method === 'min') {\r\n              return Math.min(...list).toFixed(decimal)\r\n            } else if (method === 'max') {\r\n              return Math.max(...list).toFixed(decimal)\r\n            } else if (method === 'avg') {\r\n              return (list.reduce((a, b) => a + b) / list.length).toFixed(\r\n                decimal\r\n              )\r\n            }\r\n          },\r\n          getColor(data, row) {\r\n            let resuColor = 'color:black'\r\n            let decode = Base64.decode(data)\r\n            let colorRule = JSON.parse(decode)\r\n            if (colorRule && colorRule instanceof Array) {\r\n              colorRule.forEach(rule => {\r\n                let Fn = Function('data', rule.proRule)\r\n                if (Fn(row)) {\r\n                  resuColor = 'color:' + rule.proColor\r\n                }\r\n              })\r\n            }\r\n            return resuColor\r\n          },\r\n          getProValue(value, rule) {\r\n            return Math.round((value / rule) * 10000) / 100 // 小数点后两位百分比\r\n          },\r\n          getProColor(data, row) {\r\n            let resuColor = '#409eff'\r\n            let decode = Base64.decode(data)\r\n            /*decode=decode.replace(/\\s*!/g,\"\");*/\r\n            let colorRule = JSON.parse(decode)\r\n            if (colorRule && colorRule instanceof Array) {\r\n              colorRule.forEach(rule => {\r\n                let Fn = Function('data', rule.proRule)\r\n                if (Fn(row)) {\r\n                  resuColor = rule.proColor\r\n                }\r\n              })\r\n            }\r\n            return resuColor\r\n          },\r\n          isSortable(field) {\r\n            let isClob = false;\r\n            this.displayFields.forEach(item => {\r\n              if (item.name === field && item.type==='clob') {\r\n                isClob = true;\r\n              }\r\n            });\r\n            return !this.notSortableFields.includes(field) && !isClob;\r\n          },\r\n          customEvilJS(row, htScript) {\r\n            let Fn = Function('_req', 'row', '_this', Base64.decode(htScript)) //一个变量指向Function，防止有些前端编译工具报错\r\n            let result = Fn(req, row, this)\r\n          },\r\n          batchUpdate(title,base64Json, base64Fileds) {\r\n            if (\r\n              this.tableData.selectRows == null ||\r\n              this.tableData.selectRows.length == 0\r\n            ) {\r\n              this.$message.warning('请选择数据')\r\n              return false\r\n            }\r\n            let defaultValueList = []\r\n            let outForm = []\r\n            if (base64Json) {\r\n              //是否有用户自己输入的字段\r\n              let res = true\r\n              let batchUpdateData = JSON.parse(Base64.decode(base64Json))\r\n              let filedsObj = JSON.parse(Base64.decode(base64Fileds))\r\n              batchUpdateData.forEach(item => {\r\n                if (item.valueType == 1) {\r\n                  var isRequired=false;\r\n                  if(item.isRequired){isRequired=true;}\r\n                  let obj = {\r\n                    name: item.name,\r\n                    desc: filedsObj[item.name],\r\n                    outType: item.outValueType,\r\n                    single: false,\r\n                    selectCurrent: false,\r\n                    isRequired:isRequired\r\n                  }\r\n                  if (item.outValueType == 'select') {\r\n                    let selectConfig = JSON.parse(item.outConfig)\r\n                    obj.ganged={alias:'',valueBind:'',noInit:'',labelBind:'',bind:{}};\r\n                    if (selectConfig.customQuery){\r\n                      let ganged={alias:selectConfig.customQuery.alias,valueBind:selectConfig.customQuery.valueBind,noInit:'',labelBind:selectConfig.customQuery.labelBind,bind:{}};\r\n                      obj.ganged=ganged;\r\n                    }\r\n                    obj.selectData = selectConfig.selectData\r\n                  }else if (item.outValueType == 'dialog'){\r\n                    let selectConfig = JSON.parse(item.outConfig)\r\n                    let dialogConfig= selectConfig.dialogConfig;\r\n                    let mappingConf=[];\r\n                    let parameter= selectConfig.parameter;\r\n                    for (var key in parameter) {\r\n                       let value= parameter[key] || \"\";\r\n                       mappingConf.push({from:key,target:[value],targetSub:[value]})\r\n                    }\r\n                    let custdialog={selectNum:dialogConfig.selectNum,conditions:[],mappingConf:mappingConf,custQueryJson:[],alias:dialogConfig.alias,type:dialogConfig.custDialog};\r\n                    obj.custdialog={name:'请选择',custDialog:custdialog,resultField:dialogConfig.resultField};\r\n                  }else if (\r\n                    item.outConfig &&\r\n                    (item.outValueType != 'input' ||\r\n                      item.outValueType != 'data' ||\r\n                      item.outValueType != 'number')\r\n                  ) {\r\n                    let outConfig = JSON.parse(item.outConfig)\r\n                    let parameter = outConfig.parameter\r\n                    for (var key in parameter) {\r\n                      if (!parameter[key]) {\r\n                        delete parameter[key]\r\n                      } else {\r\n                        parameter[key] = 'data.' + parameter[key]\r\n                      }\r\n                    }\r\n                    if (outConfig.selectCurrent) {\r\n                      obj.selectCurrent = outConfig.selectCurrent\r\n                    }\r\n                    if (outConfig.isSingle) {\r\n                      obj.single = outConfig.isSingle\r\n                    }\r\n                    obj.bindConfig = parameter\r\n                  }\r\n                  outForm.push(obj)\r\n                  res = false\r\n                } else {\r\n                  defaultValueList.push({\r\n                    key: item.name,\r\n                    value: item.defaultValue\r\n                  })\r\n                }\r\n              })\r\n              if (res) {\r\n                this.updateBo(defaultValueList)\r\n              } else {\r\n                this.defaultValueList = defaultValueList\r\n                this.$refs.templateBatchUpdateDialog.showDialog(title,outForm)\r\n              }\r\n            } else {\r\n              this.$message({type: 'info', message: '未设置更新内容'})\r\n            }\r\n          },\r\n          onConfirm(data) {\r\n            let defaultValueList = []\r\n            for (var key in data) {\r\n              defaultValueList.push({key: key, value: data[key]})\r\n            }\r\n            let boData = this.defaultValueList?this.defaultValueList.concat(defaultValueList):this.defaultValue;\r\n            this.updateBo(boData)\r\n          },\r\n          updateBo(defaultValueList) {\r\n            this.$confirm('此操作将批量更新数据, 是否继续?', '提示', {\r\n              confirmButtonText: '确定',\r\n              cancelButtonText: '取消',\r\n              type: 'warning'\r\n            }).then(() => {\r\n                let selectRows = this.tableData.selectRows\r\n                for (let i = 0; i < selectRows.length; i++) {\r\n                  selectRows[i].formKey = this.templateInfo.formKey\r\n                  for (let j = 0; j < defaultValueList.length; j++) {\r\n                    selectRows[i][defaultValueList[j].key] =\r\n                      defaultValueList[j].value\r\n                  }\r\n                }\r\n                let data = {\r\n                  boData: selectRows,\r\n                  boAlias: this.templateInfo.boDefAlias\r\n                }\r\n                this.$store\r\n                  .dispatch('form/batchUpdateTemplateData', data)\r\n                  .then(data => {\r\n                    if(data.state){\r\n                      this.$message({type: 'success', message: data.message})\r\n                      this.search()\r\n                    }\r\n                  })\r\n              })\r\n              .catch(() => {\r\n                this.$message({type: 'info', message: '已取消更新'})\r\n              })\r\n          },\r\n          addCommand(command) {\r\n            if (command == 'notLogin' || command == 'login') {\r\n              this.getAddQRCode(command)\r\n            }\r\n          },\r\n          getAddQRCode(command) {\r\n            this.QRCodePattern = command == 'notLogin' ? true : false\r\n            this.QRCodeDesc = []\r\n            this.QRCodeType = 'add'\r\n            this.QRCodeShow = false\r\n            this.QRCodeDialog = true\r\n          },\r\n          showSearchPane() {\r\n            return true\r\n          },\r\n          buildDefaultQuerys(){\r\n            let this_ = this;\r\n            let querys = [];\r\n            let conditions = JSON.parse(this_.templateInfo.conditionField);\r\n            let prefix = this.templateInfo.isExternal == 1 ? \"\" : \"F_\"\r\n            //条件字段默认值判断\r\n            conditions.forEach(condition=>{\r\n              if(condition.defaultValue){\r\n                let field = condition.colPrefix + condition.na;\r\n                this_.$set(this_.searchForm,field,condition.defaultValue)\r\n                let value = condition.defaultValue;\r\n                if(condition.ty == 'number'){\r\n                  value = parseFloat(value);\r\n                }\r\n                querys.push({\r\n                  property:field,\r\n                  value:value,\r\n                  group:\"main\",\r\n                  operation:condition.qt.toUpperCase(),\r\n                  relation:'AND'\r\n                })\r\n              }\r\n            })\r\n            //筛选字段默认值判断\r\n\r\n            let filters = JSON.parse(this_.templateInfo.filteringField)\r\n            filters.forEach(filter=>{\r\n              if(filter.defaultValue && filter.defaultValue.length > 0){\r\n                this_.filterMap[filter.name] = filter.defaultValue;\r\n                filter.defaultValue.forEach(val=>{\r\n                  querys.push({\r\n                    property:prefix+filter.name,\r\n                    value:val,\r\n                    group:\"defVal_\"+filter.name,\r\n                    operation:\"EQUAL\",\r\n                    relation:\"OR\"\r\n                  })\r\n                })\r\n              }\r\n            })\r\n            this_.$on(\"afterMounted\",()=>{\r\n              let headerColumns = this_.$refs.multipleTemplateTable.$refs.tableHeader.columns;\r\n              headerColumns.forEach(column=>{\r\n                if(this_.filterMap.hasOwnProperty(column.property)){\r\n                  this_.filterMap[column.property].forEach(val=>{\r\n                    column.filteredValue.push(val);\r\n                  })\r\n                }\r\n              })\r\n            })\r\n            return querys;\r\n          }\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n",null]}