{"remainingRequest":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\cssc-fvue\\src\\components\\eipControl\\EipSubImportDialog.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\cssc-fvue\\src\\components\\eipControl\\EipSubImportDialog.vue","mtime":1667804639118},{"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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport req from \"@/request.js\";\r\nimport XLSX from \"xlsx/dist/xlsx.core.min.js\";\r\nimport SubPagination from \"@/components/eipControl/bus/SubPagination.js\";\r\nconst Base64 = require(\"js-base64\").Base64;\r\n\r\nexport default {\r\n name: \"eip-sub-import-dialog\",\r\n props: {\r\n subDesc:{\r\n type: String,\r\n default: \"子表模板\",\r\n },\r\n dataSubname: {\r\n type: String,\r\n required: true,\r\n },\r\n maxRow: {\r\n type: String,\r\n default: null,\r\n },\r\n mergeExpression: {\r\n type: String,\r\n default: null,\r\n },\r\n dataColumns: {\r\n type: String,\r\n required: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n dialogVisible: false,\r\n importRows: null,\r\n showRowData: false,\r\n mergeFunc: null,\r\n mode: \"append\",\r\n modeOptions: [\r\n { mode: \"append\", desc: \"追加导入\" },\r\n { mode: \"override\", desc: \"覆盖导入\" },\r\n { mode: \"merge\", desc: \"合并导入\", disabled: true },\r\n ],\r\n };\r\n },\r\n computed: {\r\n columns: function () {\r\n return eval(Base64.decode(this.dataColumns));\r\n }\r\n },\r\n watch: {\r\n dialogVisible: {\r\n handler: function (newVal) {\r\n // 清空附件\r\n if (!newVal && this.$refs.selectFile) {\r\n this.$refs.selectFile.value = \"\";\r\n this.importRows = null;\r\n this.showRowData = false;\r\n }\r\n },\r\n immediate: true,\r\n },\r\n mergeExpression: {\r\n handler: function (newVal) {\r\n if (newVal) {\r\n // 如果有导入合并的代码,则允许选择合并导入模式\r\n this.$set(this.modeOptions[2], \"disabled\", false);\r\n // 并设置默认为 合并导入\r\n this.mode = \"merge\";\r\n // 解码合并的代码\r\n const funcExp = Base64.decode(newVal);\r\n this.mergeFunc = eval(`(${funcExp})`);\r\n }\r\n },\r\n immediate: true,\r\n },\r\n },\r\n methods: {\r\n //子表模板导出\r\n exportFormSub(){\r\n req.post(window.context.form+\"/form/form/v1/exportFormSub?subDesc=\"+this.subDesc, this.columns, \"arraybuffer\");\r\n },\r\n getNameByDesc(desc) {\r\n var name = \"\";\r\n this.columns.forEach(col => {\r\n if (col.desc == desc) {\r\n name = col.name;\r\n }\r\n });\r\n return name;\r\n },\r\n changeRowKey(rows) {\r\n var importRows = [];\r\n rows.forEach(row => {\r\n var importRow = {};\r\n for (let key in row) {\r\n importRow[this.getNameByDesc(key)] = row[key];\r\n }\r\n importRows.push(importRow);\r\n });\r\n return importRows;\r\n },\r\n dialogConfirm() {\r\n if(this.importRows.length==0){\r\n this.$message.error(\"请选择要导入的文件\");\r\n return;\r\n }\r\n if(this.maxRow){\r\n let maxRowInt = parseInt(this.maxRow);\r\n if(this.mode==\"override\"){//覆盖导入\r\n let count = this.importRows.length;\r\n if(count>maxRowInt && maxRowInt!=0){\r\n this.$message.error(\"子表数据已超过最大行数【\"+maxRowInt+\"】\");\r\n return;\r\n }\r\n }else if(this.mode==\"append\" || this.mode==\"merge\"){//追加导入/合并导入\r\n let boData = document.getElementsByName(\"online-form\")[0].__vue__.data; //获取表单bo对象\r\n let pathArr = this.dataSubname.split('.')\r\n let subTabName = pathArr[2].replace('sub_', '')\r\n let subInitData = boData[pathArr[1]][pathArr[2]] || [];//子表数据\r\n let num = this.importRows.length+subInitData.length;\r\n if(num>maxRowInt && maxRowInt!=0){\r\n this.$message.error(\"子表数据已超过最大行数【\"+maxRowInt+\"】\");\r\n return;\r\n }\r\n }\r\n }\r\n SubPagination.importData(\r\n this.dataSubname,\r\n this.importRows,\r\n this.mode,\r\n this.mergeFunc\r\n )\r\n .then(() => {\r\n this.dialogVisible = false;\r\n })\r\n .catch((err) => {\r\n this.$message.error(`数据导入失败:${err}`);\r\n });\r\n },\r\n fileChange(m) {\r\n if (!m || !m.target || !m.target.files || m.target.files.length != 1) {\r\n return;\r\n }\r\n this.importRows = [];\r\n this.readWorkbookFromLocalFile(m.target.files[0], (rows) => {\r\n this.importRows = this.changeRowKey(rows);\r\n });\r\n },\r\n // 读取本地excel文件\r\n readWorkbookFromLocalFile(file, callback) {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n const data = e.target.result;\r\n let workbook = null;\r\n try {\r\n // 读取Excel内容\r\n workbook = XLSX.read(data, { type: \"binary\" });\r\n } catch (err) {\r\n this.$message.error(\"所选文件不是有效的Excel文件.\");\r\n return;\r\n }\r\n const sheetNames = workbook.SheetNames,\r\n // 只读取第一个sheet的数据\r\n worksheet = workbook.Sheets[sheetNames[0]];\r\n\r\n if (worksheet[\"!merges\"] && worksheet[\"!merges\"].length > 0) {\r\n const merge = worksheet[\"!merges\"][0],\r\n rowNum = Number(merge[\"e\"][\"r\"]);\r\n // 合并单元格时会导致转换出来的JSON数据格式错乱\r\n this.$message.error(\r\n `Excel中不能有合并的单元格,请检查第${rowNum + 1}行数据。`\r\n );\r\n return;\r\n }\r\n const json = XLSX.utils.sheet_to_json(worksheet);\r\n if (!json || json.constructor != Array) {\r\n this.$message.error(\"读取的数据格式错误。\");\r\n return;\r\n }\r\n if (callback) callback(json);\r\n };\r\n reader.readAsBinaryString(file);\r\n },\r\n },\r\n};\r\n",null]}