{"remainingRequest":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\ImportExportData\\DataTemplateSetting.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\src\\components\\ImportExportData\\DataTemplateSetting.vue","mtime":1675071991085},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xq-web-bpm\\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//\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//\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//\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport utils from '@/hotent-ui-util'\r\nimport portal from '@/api/portal'\r\nimport AddFields from '@/components/ImportExportData/AddFields'\r\nimport FormatJson from '@/components/ImportExportData/FormatJson'\r\nexport default {\r\n    name: 'DataTemplateSetting',\r\n    components: {AddFields, FormatJson},\r\n    props: {\r\n        // 页面组件别名\r\n        bizCode: {\r\n            type: String,\r\n            default: '',\r\n            required: true,\r\n        },\r\n        // 模板文件名称\r\n        tempFiles: {\r\n            type: String,\r\n            default: '',\r\n            required: true,\r\n        },\r\n        type: {\r\n            type: String,\r\n            default: 'import',\r\n            required: true,\r\n            validator: (type) => {\r\n                if (type == 'import' || 'export') {\r\n                    return true\r\n                } else {\r\n                    return false\r\n                }\r\n            },\r\n        },\r\n        originAPIOptions: {\r\n            type: Object,\r\n            default: () => {},\r\n            required: true,\r\n        },\r\n        dataBaseOptions: {\r\n            type: Object,\r\n            default: () => {},\r\n            required: true,\r\n        },\r\n    },\r\n    computed: {\r\n        title() {\r\n            if (this.type == 'import') {\r\n                return '导入模板配置'\r\n            } else {\r\n                return '导出模板配置'\r\n            }\r\n        },\r\n    },\r\n    data() {\r\n        return {\r\n            dialogShow: false,\r\n            tableHeight: 300,\r\n            tempId: '',\r\n            tempData: {}, // 模板基础数据\r\n            data: [],\r\n            loading: false,\r\n        }\r\n    },\r\n    mounted() {\r\n        this.calcTableHeight()\r\n        this.$root.$on('resize', () => {\r\n            this.calcTableHeight(500)\r\n        })\r\n    },\r\n    methods: {\r\n        changeViewType(index, row) {\r\n            let tempRow = utils.deepClone(row)\r\n            tempRow.fieldDataJson = ''\r\n            this.data.splice(index, 1, tempRow)\r\n        },\r\n        checkNumber(index, row, num) {\r\n            let number\r\n            if (!num) {\r\n                number = 0\r\n            } else {\r\n                number = parseInt(num)\r\n                if (number < 0) {\r\n                    number = 0\r\n                }\r\n            }\r\n            row.orderIndex = number\r\n            this.data.splice(index, 1, row)\r\n        },\r\n        sortData() {\r\n            this.data.sort((a, b) => {\r\n                const nameA = a.orderIndex\r\n                const nameB = b.orderIndex\r\n                if (nameA < nameB) {\r\n                    return -1\r\n                }\r\n                if (nameA > nameB) {\r\n                    return 1\r\n                }\r\n                return 0\r\n            })\r\n        },\r\n        kvJson(json) {\r\n            let kvJson = {}\r\n            if (json) {\r\n                let temp = JSON.parse(json)\r\n                temp.forEach((item) => {\r\n                    kvJson[item.value] = item.label\r\n                })\r\n                kvJson = JSON.stringify(kvJson)\r\n            }\r\n            return kvJson\r\n        },\r\n        // 保存配置\r\n        handleSave() {\r\n            if(!this.data.length){\r\n                this.$message.warning('请配置模板！')\r\n                return\r\n            }\r\n            let dataParams = utils.deepClone(this.data)\r\n            dataParams.forEach((item, index) => {\r\n                if (this.tempId) {\r\n                    item.tempId = this.tempId;\r\n                }\r\n\r\n                item.type = this.type == 'import' ? 2 : 1\r\n                item.fieldType = 1\r\n                delete item.dataType\r\n                delete item.fieldDesc\r\n                delete item.key\r\n                delete item.tableName\r\n                delete item.columnComment\r\n                delete item.columnName\r\n            })\r\n            let data = {\r\n                excelTemp: {\r\n                    id: this.tempData.id,\r\n                    tempFiles: this.tempFiles,\r\n                    bizCode: this.bizCode,\r\n                    dbDataBase: this.dataBaseOptions.tableSchema,\r\n                    dbSourceId: this.dataBaseOptions.dataBaseId,\r\n                    dbTable: this.dataBaseOptions.tableName,\r\n                    type:\r\n                        this.type == 'import'\r\n                            ? 2\r\n                            : this.type == 'export'\r\n                            ? 1\r\n                            : 'null', // 类型不对报错 类型（1：导出 2：导入）\r\n                },\r\n                fields: dataParams,\r\n            }\r\n            portal.saveTemplate(data).then((res) => {\r\n                console.log(res)\r\n                if (res.state) {\r\n                    this.$message.success('保存成功')\r\n                    this.closeDialog();\r\n                    this.$emit('reload')\r\n                }\r\n            })\r\n        },\r\n        // 返回json赋值\r\n        handleGetJSon(json, scope) {\r\n            let tempRow = utils.deepClone(scope.row)\r\n            tempRow.fieldDataJson = json\r\n            this.data.splice(scope.$index, 1, tempRow)\r\n        },\r\n        // 编辑json\r\n        openSetJson(scope) {\r\n            this.$refs.setJson.openDialog(scope)\r\n        },\r\n        // 打开配置\r\n        openDialog(tempId) {\r\n            this.tempId = tempId\r\n            this.dialogShow = true\r\n            if (tempId) {\r\n                this.loadTempData(tempId)\r\n            }\r\n\r\n            // 取消拖拽排序\r\n            // this.$nextTick(() => {\r\n            //     this.setDraggable()\r\n            // })\r\n        },\r\n        // 查询已有配置\r\n        loadTempData(id) {\r\n            this.loading = true\r\n            portal.loadTempData(id).then((res) => {\r\n                this.tempData = res.excelTemp\r\n                this.data = this.formatData(res.fields)\r\n                this.loading = false\r\n            })\r\n        },\r\n        // 格式化回填数据\r\n        formatData(data) {\r\n            data.forEach((item, index) => {\r\n                item.key = index\r\n                item.fieldViewType = parseInt(item.fieldViewType)\r\n            })\r\n            return data\r\n        },\r\n        // 关闭页面重置数据\r\n        closeDialog() {\r\n            this.data = []\r\n            this.dialogShow = false\r\n        },\r\n        // 打开添加字段弹窗\r\n        openAddFieldsDialog() {\r\n            this.$refs.AddFields.openDialog()\r\n        },\r\n        // 对象数组去重\r\n        unique(arr) {\r\n            const res = new Map()\r\n            return arr.filter(\r\n                (arr) => !res.has(arr.fieldName) && res.set(arr.fieldName, 1)\r\n            )\r\n        },\r\n        // 添加字段\r\n        handleAddFields(row) {\r\n            const addFields = utils.deepClone(row)\r\n            const originFields = utils.deepClone(this.data)\r\n            let newTarget = originFields.concat(addFields)\r\n            if (this.type == 'export') {\r\n                newTarget.sort((a, b) => {\r\n                    const nameA = a.fieldName.toUpperCase()\r\n                    const nameB = b.fieldName.toUpperCase()\r\n                    if (nameA < nameB) {\r\n                        return -1\r\n                    }\r\n                    if (nameA > nameB) {\r\n                        return 1\r\n                    }\r\n                    return 0\r\n                })\r\n            } else if (this.type == 'import') {\r\n                newTarget = this.unique(newTarget)\r\n            }\r\n            newTarget.forEach((item, index) => {\r\n                item.key = index\r\n                item.fieldViewType = 1\r\n                item.orderIndex = index\r\n            })\r\n            this.data = newTarget\r\n            console.log(this.data, 'this.data')\r\n            this.$forceUpdate()\r\n        },\r\n        handleUp(row, index) {\r\n            if (index !== 0) {\r\n                let targetItem = row // 当前Item\r\n                let upItem = this.data[index - 1] // 前一个Item\r\n                let targetIndex = this.data[index].orderIndex // 当前ItemIndex\r\n                let upIndex = this.data[index - 1].orderIndex // 前一个ItemIndex\r\n                // 交换orderIndex\r\n                targetItem.orderIndex = upIndex\r\n                upItem.orderIndex = targetIndex\r\n                this.data.splice(index - 1, 2, targetItem, upItem)\r\n            } else {\r\n                this.$message.warning('已经处于置顶，无法上移')\r\n            }\r\n        },\r\n        handleDown(row, index) {\r\n            if (index !== this.data.length - 1) {\r\n                let targetItem = row // 当前Item\r\n                let downItem = this.data[index + 1] // 前一个Item\r\n                let targetIndex = this.data[index].orderIndex // 当前ItemIndex\r\n                let downIndex = this.data[index + 1].orderIndex // 前一个ItemIndex\r\n                // 交换orderIndex\r\n                targetItem.orderIndex = downIndex\r\n                downItem.orderIndex = targetIndex\r\n                this.data.splice(index, 2, downItem, targetItem)\r\n            } else {\r\n                this.$message.warning('已经处于置底，无法下移')\r\n            }\r\n        },\r\n        // 删除字段\r\n        handleDelFields(row) {\r\n            if (row.id) {\r\n                portal.DeleteExportFields(row.id).then((res) => {\r\n                    if (res.state) {\r\n                        let data = utils.deepClone(this.data)\r\n                        let target = data.filter((item) => item.key != row.key)\r\n                        this.data = target\r\n                        this.$message.success('删除成功')\r\n                    }\r\n                })\r\n            } else {\r\n                let data = utils.deepClone(this.data)\r\n                let target = data.filter((item) => item.key != row.key)\r\n                this.data = target\r\n                this.$message.success('删除成功')\r\n            }\r\n        },\r\n        debounce(fn, delay) {\r\n            clearTimeout(this.timer)\r\n            this.timer = setTimeout(function () {\r\n                fn()\r\n            }, delay)\r\n        },\r\n        // 设置表格拖拽\r\n        setDraggable() {\r\n            const table = this.$refs.DTTable\r\n            const $data = table.data\r\n            const tbody = table.$el.querySelector(\r\n                '.el-table__body-wrapper tbody'\r\n            )\r\n            const $this = this\r\n            const trArr = tbody.querySelectorAll('tr')\r\n            let dragStartY = 0\r\n            if (trArr) {\r\n                trArr.forEach((item, index) => {\r\n                    item.setAttribute('draggable', true)\r\n                    item.setAttribute('data-index', index)\r\n                })\r\n            }\r\n            // 开始拖拽\r\n            function dragstart(e) {\r\n                console.log(e, 'dfsf')\r\n                $this.debounce(() => {\r\n                    dragStartY = e.y\r\n                }, 50)\r\n            }\r\n            // 结束拖拽\r\n            function dragend(e) {\r\n                if (!e.target) return\r\n                const index = Number(e.target.dataset.index, 10)\r\n                const trHeight = e.target.offsetHeight || 45\r\n                $this.debounce(async () => {\r\n                    const dVal = e.y - dragStartY\r\n                    const absVal = Math.abs(dVal)\r\n                    let step = 0\r\n                    if (absVal >= trHeight) {\r\n                        if (dVal > 0) {\r\n                            step = Math.floor(dVal / trHeight)\r\n                            if (step >= $data.length - index) {\r\n                                step = $data.length - index - 1\r\n                            }\r\n                        } else {\r\n                            step = Math.ceil(dVal / trHeight)\r\n                            if (Math.abs(step) > index) {\r\n                                step = index * -1\r\n                            }\r\n                        }\r\n                        if (index === 0 && step <= 0) {\r\n                            return\r\n                        }\r\n                        if (index === $data.length - 1 && step >= 0) {\r\n                            return\r\n                        }\r\n                        // const params = {\r\n                        //     id: $data[index].id,\r\n                        //     step: step * -1,\r\n                        // }\r\n                        const params = {\r\n                            index,\r\n                            step: step * -1,\r\n                        }\r\n                        console.log(params, 'params')\r\n                        $this.changeSort(params)\r\n                        // $this.loading = true\r\n                        // // 后端接口\r\n                        // await $this.$api.url.setContentSort(params)\r\n                        // // 重新获取数据\r\n                        // $this.reloadData()\r\n                    }\r\n                }, 50)\r\n            }\r\n            tbody.addEventListener('dragstart', dragstart)\r\n            tbody.addEventListener('dragend', dragend)\r\n        },\r\n        // 拖拽结束重新排序\r\n        changeSort(params) {\r\n            let data = utils.deepClone(this.data)\r\n            const targetIndex = params.index - params.step\r\n            let targetItem = data.splice(params.index, 1)\r\n            data.splice(targetIndex, 0, targetItem[0])\r\n            this.data = data\r\n            this.$forceUpdate()\r\n        },\r\n        // 动态计算表格的高度，自适应当前容器\r\n        calcTableHeight(delay) {\r\n            setTimeout(() => {\r\n                this.tableHeight =\r\n                    document.documentElement.clientHeight * 0.9 - 200\r\n            }, delay || 0)\r\n        },\r\n    },\r\n}\r\n",null]}