{"remainingRequest":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\cssc-fvue\\src\\components\\dataTemplate\\TemplateDynamicView.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\cssc-fvue\\src\\components\\dataTemplate\\TemplateDynamicView.vue","mtime":1667804638821},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\cssc-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: 10,\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 {\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 {\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 {\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 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;k0){\r\n let bindList = [];\r\n for(var i=0; i {\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: 10, 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: 10,\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: 10,\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]}