From 3623c7ad92348e76a917ca844d76d27711d58191 Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期四, 26 十二月 2024 16:15:20 +0800
Subject: [PATCH] 集成获取mdm分发通用数据格式接口集成 日志输出到日志文件中
---
Source/UBCS-WEB/src/views/integration/integrationIndex.vue | 1035 ++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 732 insertions(+), 303 deletions(-)
diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index c18063d..9f9d493 100644
--- a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
+++ b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -1,323 +1,752 @@
<template>
- <div>
- <el-container style="height: 100%; border: 1px solid #fff">
- <el-card :style="{ marginRight: '10px' }">
- <el-aside width="300px" style="background-color: #fff">
- <el-input placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�" v-model="filterText">
- </el-input>
- <el-menu :default-openeds="['1', '3']">
- <el-tree class="filter-tree" :data="treeData" accordion :props="defaultProps"
- :filter-node-method="filterNode" empty-text="鏆傛棤鏁版嵁" ref="tree" @node-click="handelTreeCell">
- </el-tree>
- </el-menu>
- </el-aside>
- </el-card>
- <el-main>
- <el-card>
- <el-form :model="form">
- <el-form-item label="闆嗗洟鍒嗙被" label-width="70px" size="small">
- <el-select clearable ref="selectTree" v-model="form.groupValue" placeholder="璇烽�夋嫨"
- popper-class="popperTreeSelect">
- <el-option :value="groupVal" :label="groupVal">
- <el-tree ref="groupTree" :data="groupTreeData" empty-text="鏆傛棤鏁版嵁" :props="defaultProps"
- @node-click="handleNodeClick">
- </el-tree>
- </el-option>
- </el-select>
+ <div>
+ <el-container style="height: 100%; border: 1px solid #fff">
+ <el-card style="margin-right: 10px;height: calc(100vh - 125px);overflow: auto">
+ <el-aside style="background-color: #fff;" width="210px">
+ <el-input v-model="filterText" placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�">
+ </el-input>
+ <el-menu :default-openeds="['1', '3']">
+ <el-tree ref="tree" :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
+ accordion class="filter-tree" empty-text="鏆傛棤鏁版嵁" @node-click="handelTreeCell">
+ <template slot-scope="{ node, data }" class="el-tree-node__label">
+ <el-tooltip :content="$createElement('div', { domProps: { innerHTML: node.label } })" class="item"
+ effect="dark"
+ open-delay="500"
+ placement="right-start">
+ <span style="font-size: 14px;">
+ {{ (node || {}).label }}
+ </span>
+ </el-tooltip>
+ </template>
+ </el-tree>
+ </el-menu>
+ </el-aside>
+ </el-card>
+ <el-main>
+ <el-card style="height: calc(100vh - 128px)">
+ <el-form :model="form">
+ <el-form-item label="闆嗗洟鍒嗙被" label-width="80px" size="small">
+ <el-select ref="selectTree" v-model="groupVal" clearable placeholder="璇烽�夋嫨"
+ popper-class="popperTreeSelect">
+ <el-option :disabled="true" :label="groupVal" :value="groupVal">
+ <el-tree ref="groupTree"
+ :data="groupTreeData"
+ :default-checked-keys="defaultCheckedKeys"
+ :default-expanded-keys="defaultCheckedKeys"
+ :props="defaultProps"
+ empty-text="鏆傛棤鏁版嵁"
+ node-key="oid"
+ show-checkbox
+ @check="handleCheck">
+ </el-tree>
+ </el-option>
+ </el-select>
- </el-form-item>
- </el-form>
- <avue-crud :table-loading="loading" :data="tableData" :option="option" ref="crud" @cell-class-name="handelCellRow"
- @cell-click="handleCellClick">
- <template slot="menuLeft">
- <el-button icon="el-icon-plus" size="small" type="primary" @click="dialogPush = true">鏂� 澧�
- </el-button>
- <el-button icon="el-icon-check" size="small" type="primary" @click="handleSave">淇� 瀛�
- </el-button>
- <el-button icon="el-icon-connection" size="small" type="primary" @click="handleSync">鍚屾妯″瀷
- </el-button>
- </template>
- <template slot="defaultValue" slot-scope="{scope}">
- <!-- <el-input v-model="scope.row.defaultValue" v-if="scope.row.index === tableRowIndex && scope.column.index === tableColumnIndex" @blur="inputBlur"> </el-input> -->
- <span>{{ scope }}</span>
- </template>
- </avue-crud>
- <el-card :style="{ marginTop: '20px' }">
- <avue-crud :data="tablesData" :option="optinos" ref="crud"
- @cell-click="handleCellClick">
- </avue-crud>
- </el-card>
- </el-card>
- </el-main>
- </el-container>
- <el-dialog title="缂栫爜灞炴��" :visible.sync="dialogPush" append-to-body="true" destroy-on-close width="30%"
- :before-close="handleClose">
- <el-form :model="form">
- <el-form-item label="鏌ヨ鏉′欢" label-width="70px" size="small">
- <el-input v-model="form.name" autocomplete="off" @change="handleQuery"></el-input>
- </el-form-item>
- </el-form>
- <p class="text_tip">*閫夋嫨鍒嗙被杩涜灞炴�ц繃婊�, 鎴栬�呰緭鍏ュ睘鎬х殑鍏ㄦ嫾鎴栬�呯畝鎷艰繘琛屾煡璇�! 濡�: 濮撳悕 (鍙緭鍏m鎴杧inming )</p>
- <transfer v-model="transferValue" :data="transferData" :filter-method="filterMethod"
- filter-placeholder="璇疯緭鍏ュ睘鎬ф嫾闊冲叏鎷兼垨鑰呮嫾闊崇缉鍐�" @left-check-change="handelLeftCheck"></transfer>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogPush = false">鍙� 娑�</el-button>
- <el-button type="primary" @click="dialogPush = false">淇� 瀛�</el-button>
- </span>
- </el-dialog>
- </div>
+ </el-form-item>
+ </el-form>
+ <el-card style="height:38vh">
+ <avue-crud ref="crudMapping" :data="mappingData" :option="optionMapping" :table-loading="loading"
+ @select="setCurrentRow" @row-update="handleMapingUpdate"
+ @row-click="handleMapingClick" @row-dblclick="handleMapingRowClick"
+ @selection-change="selectionChange"
+ @select-all="handleSelectAll">
+ <template slot="radio"
+ slot-scope="{row}">
+
+ <el-radio v-model="selectRow" :label="row.$index">-</el-radio>
+ </template>
+ <template slot="menuLeft">
+ <!-- <el-button :disabled="disabledPush" icon="el-icon-plus" size="small" type="primary"-->
+ <!-- @click="dialogPush = true">鏂� 澧�-->
+ <!-- </el-button>-->
+ <el-button v-if="permissionList.saveBtn" icon="el-icon-check" size="small" type="primary"
+ @click="handleSave">淇� 瀛�
+ </el-button>
+ <el-button v-if="permissionList.allSyncBtn" icon="el-icon-connection" size="small"
+ type="primary" @click="handleSync('all')">鍚屾涓绘ā鍨�
+ </el-button>
+ <el-button v-if="permissionList.oneSyncBtn" icon="el-icon-connection" size="small"
+ type="primary" @click="handleSync('one')">鍚屾璇︾粏妯″瀷
+ </el-button>
+ <el-button v-if="permissionList.autoBtn" icon="el-icon-coordinate" size="small"
+ type="primary" @click="handlerAuto">鑷姩濉厖
+ </el-button>
+ </template>
+ </avue-crud>
+ </el-card>
+ <el-card style="margin-top: 10px;height: 38vh">
+ <avue-crud ref="crudRange" :data="rangeData" :option="optinoRange" :style="{ marginTop: '-20px'}"
+ @row-update="handleUpdate"
+ @row-dblclick="handleRowClick">
+ <template slot="menuLeft">
+ <el-button v-if="permissionList.bottomAutoBtn" icon="el-icon-coordinate" size="small"
+ type="primary" @click="handlerBottomAuto">鑷姩濉厖
+ </el-button>
+ </template>
+ </avue-crud>
+ </el-card>
+ </el-card>
+ </el-main>
+ </el-container>
+ <integration-transfer :data="transferData" :disabledData="filtermapping" :props="transferProps"
+ :visible.sync="dialogPush" @save="handelTransferSave"></integration-transfer>
+ </div>
</template>
<script>
-import transfer from '@/components/transfer/index'
+import integrationTransfer from './integrationTransfer.vue'
import pinyin from 'js-pinyin'
-import { referCodeClassifyTree, referTree, gridAttrMapping } from '@/api/integration/integration.js'
+import {mapGetters} from "vuex";
+import {
+ referCodeClassifyTree,
+ referTree,
+ gridAttrMapping,
+ gridAttrRanges,
+ batchAddSave,
+ listCodeAttributeByClassId,
+ syncClassifyModel
+} from '@/api/integration/integration.js'
+import {getByGroupAttrMapping, getEnumAttrByClsOidAndAttrId} from "@/api/vciAttrbute";
+
export default {
- components: {
- transfer
- },
- data() {
- const generateData = () => {
- pinyin.setOptions({ checkPolyphone: false, charCase: 1 });
- const data = [];
- const cities = ['涓婃捣', '鍖椾含', '骞垮窞', '娣卞湷', '鍗椾含', '瑗垮畨', '鎴愰兘'];
- cities.forEach((city, index) => {
- data.push({
- label: city,
- key: index,
- pinyin: pinyin.getFullChars(city),
- pinyins: pinyin.getCamelChars(city),
- });
- });
- return data;
- };
- return {
- form: {
- name: '',
- groupValue: ''
- },
- loading: false,
- ishowTree: false,
- search: '',
- transferData: generateData(),
- transferValue: [],
- dialogPush: false,
- tableData: [],
- tablesData: [
- {
- id:'01',
- groupTypeName:'鏉庡洓',
- codeView:'寮犱笁',
- sex:'',
- typeName:''
- }
- ],
- filterText: '',
- tableRowIndex:null,
- tableColumnIndex:null,
- optinos: {
- title: '闆嗗洟灞炴��',
- maxHeight: '300px',
- menu: true,
- delBtn: false,
- addBtn: false,
- index: true,
- header: false,
- columnBtn: false,
- searchShow: true,
- emptyBtn: false,
- searchBtn: false,
- searchShowBtn: false,
- cellBtn: true,
- border: true,
- searchMenuSpan: 8,
- column: [
- { label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'groupTypeName', minWidth: 80, },
- { label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'codeView', minWidth: 80 },
- { label: 'MDM鏋氫妇鍊�', prop: 'sex', minWidth: 80, cell: true },
- { label: 'MDM鏋氫妇鏄剧ず鍚嶇О', prop: 'typeName', minWidth: 80, cell: true },
- ]
- },
- option: {
- maxHeight: '500px',
- menu: true,
- delBtn: false,
- addBtn: false,
- index: true,
- header: true,
- columnBtn: false,
- searchShow: true,
- emptyBtn: false,
- searchBtn: false,
- searchShowBtn: false,
- cellBtn: false,
- border: true,
- searchMenuSpan: 8,
- column: [
- { label: '闆嗗洟鍒嗙被', prop: 'sourceClassifyName', minWidth: 80, },
- { label: '鎵�灞炶鍥�', prop: 'viewName', minWidth: 80 },
- { label: '闆嗗洟灞炴��', prop: 'sourceAttrName', minWidth: 80 },
- { label: '鍒嗙被鍚嶇О', prop: 'targetClassifyName', minWidth: 80, overHidden: true },
- { label: '灞炴�у悕绉�', prop: 'targetAttrName', minWidth: 80},
- { label: '榛樿鍊�', prop: 'defaultValue', minWidth: 140, cell: true },
- ]
- },
- treeData: [],
- groupTreeData: [],
- defaultProps: {
- children: 'children',
- label: 'name',
- id: 'oid',
- isLeaf: ''
- },
- groupVal: '',
- treeParam: {}
- }
- },
- watch: {
- filterText(val) {
- console.log(this.$refs.tree)
- this.$refs.tree.filter(val);
- }
- },
- created() {
- this.getReferCodeClassifyTree()
- pinyin.setOptions({ checkPolyphone: false, charCase: 1 });
- console.log(pinyin.getFullChars('绠$悊鍛�'))
- console.log(pinyin.getCamelChars('绠$悊鍛�'))
- },
- methods: {
- async getReferCodeClassifyTree() {
- const param = {
- parentBtmName: "jclass",
- valueField: "oid",
- textField: "name",
- parentFieldName: "id"
- }
- const response = await referCodeClassifyTree(param)
- console.log(response)
- if (response.status === 200) {
- let data = response.data;
- this.treeData = data.map(item => item.children ? { ...item, ...{ isLeaf: false } } : { ...item, ...{ isLeaf: true } })
- }
- },
- async getlistCodeAttributeByClassId(oid) {
- this.loading = true
- console.log(this.treeParam)
- const response = await gridAttrMapping({ sourceClassifyId: oid, ...this.treeParam })
- console.log(response)
- if (response.status === 200) {
- this.loading = false
- this.tableData = response.data.data
- }
- },
- async referTree(oid, checked) {
- this.groupTreeData = []
- const response = await referTree({ 'conditionMap[codeclsfid]': oid, parentOid: null })
- console.log(response)
- if (response.status === 200) {
- if (checked) {
- let items = response.data.map(item => {
- let obj = {}
- if (item.checked) obj = { ...item }
- else obj = null
- return obj
- })
- var r = items.filter(s => { return s && s.trim() });
- this.groupTreeData = r
- } else {
- this.groupTreeData = response.data
- }
- }
- },
- filterNode(value, data) {
- console.log(value)
- console.log(data)
- if (!value) return true;
- return data.name.indexOf(value) !== -1;
- },
- handleSave() {
-
- },
- handlePush() {
-
- },
- handelLeftCheck(event) {
- console.log(event)
- },
- handelCellRow( {row, column, rowIndex, columnIndex }) {
- row.index = rowIndex
- column.index = columnIndex
- },
- handleQuery(event) {
- console.log(event)
- this.form.name = event
- },
- filterMethod(item) {
- return item.pinyins.indexOf(this.form.name) > -1;
- },
- handelTreeCell(event) {
- console.log(event)
- if (event.leaf) {
- this.treeParam.codeClassifyId = event.oid
- this.form.groupValue = ''
- this.groupVal = ''
- this.tableData = []
- this.referTree(event.oid, event.checked)
- }
- },
- handleNodeClick(data) {
- console.log(data)
- this.form.groupValue = data.name
- this.groupVal = data.name
- this.$refs.selectTree.blur()
- this.getlistCodeAttributeByClassId(data.oid)
- },
- handleCellClick(row, column,cell, event) {
- console.log(row)
- console.log(column)
- console.log(cell)
- console.log(event)
- this.tableRowIndex = row.index
- this.tableColumnIndex = column.index
- },
- inputBlur() {
- this.tableColumnIndex = ''
- this.tableRowIndex = null
- }
+ components: {
+ integrationTransfer
+ },
+ name: 'Integration',
+ data() {
+ const options = {
+ menu: false,
+ delBtn: false,
+ addBtn: false,
+ index: true,
+ columnBtn: false,
+ searchShow: true,
+ emptyBtn: false,
+ searchBtn: false,
+ searchShowBtn: false,
+ cellBtn: true,
+ border: true,
+ searchMenuSpan: 8,
+ highlightCurrentRow: true,
}
+ return {
+ selectRow: "",
+ targetNameList: [], // 鍏冩暟鎹繑鍥炲悕绉�
+ defaultCheckedKeys: [],
+ isNodeDisabled: true,
+ // 琛ㄥ崟鍊�
+ form: {
+ // 闆嗗洟鏍戞樉绀哄��
+ groupValue: ''
+ },
+ // 妫�娴嬫柊澧炴寜閽姸鎬�
+ disabledPush: true,
+ // 琛ㄦ牸鍔犺浇涓�
+ loading: false,
+ // 绌挎妗嗘暟鎹�
+ transferData: [],
+ // dialog寮圭獥寮�鍏�
+ dialogPush: false,
+ // 灞炴�ф槧灏勮〃鏁版嵁
+ mappingData: [],
+ // 灞炴�ф槧灏勫彇鍊艰〃鏁版嵁
+ rangeData: [],
+ // 涓绘暟鎹爲鎼滅储杩囨护
+ filterText: '',
+ // 灞炴�ф槧灏勫彇鍊艰〃閰嶇疆
+ optinoRange: {
+ title: '灞炴�ф槧灏勫彇鍊艰寖鍥�',
+ maxHeight: '280px',
+ rowKey: 'oid',
+ refreshBtn: false,
+ column: [
+ {label: '灞炴�ч泦鍥㈡灇涓惧��', prop: 'numTextValue', minWidth: 80},
+ {label: '闆嗗洟灞炴�ф灇涓炬樉绀哄悕绉�', prop: 'numText', minWidth: 80},
+ {
+ label: 'CODE鏋氫妇鍊�',
+ prop: 'targetNumTextValue',
+ minWidth: 80,
+ cell: true,
+ blur: (value) => window.handleBlur(value, 'range')
+ },
+ {
+ label: 'CODE鏋氫妇鏄剧ず鍚嶇О',
+ prop: 'targetNumText',
+ minWidth: 80,
+ cell: true,
+ blur: (value) => window.handleBlur(value, 'range')
+ },
+ ],
+ ...options
+ },
+ // 灞炴�ф槧灏勮〃閰嶇疆
+ optionMapping: {
+ maxHeight: '280px',
+ header: true,
+ rowKey: 'oid',
+ selection: false,
+ refreshBtn: false,
+ delBtn: false,
+ addBtn: false,
+ columnBtn: false,
+ searchShow: true,
+ emptyBtn: false,
+ searchBtn: false,
+ searchShowBtn: false,
+ cellBtn: true,
+ border: true,
+ searchMenuSpan: 8,
+ highlightCurrentRow: true,
+ $cellEdit: true,
+ column: [
+ {label: '', prop: 'radio', width: 60, hide: false},
+ {label: '闆嗗洟鍒嗙被', prop: 'sourceClassifyName', minWidth: 80},
+ {label: '鎵�灞炶鍥�', prop: 'viewName', minWidth: 80},
+ {label: '闆嗗洟灞炴��', prop: 'sourceAttrName', minWidth: 80},
+ {label: '鍒嗙被鍚嶇О', prop: 'targetClassifyName', minWidth: 80},
+ {
+ label: '灞炴�у悕绉�',
+ prop: 'targetAttrName',
+ type: 'select',
+ cell: true,
+ filterable: true,
+ minWidth: 80,
+ props: {
+ label: 'targetAttrName',
+ value: 'targetAttrName'
+ },
+ dicData: [],
+ },
+ // {
+ // label: '榛樿鍊�',
+ // prop: 'defaultValue',
+ // minWidth: 140,
+ // cell: true,
+ // blur: (value) => window.handleBlur(value, 'mapping')
+ // },
+ ],
+ },
+ // 涓绘暟鎹垎绫绘爲
+ treeData: [],
+ // 闆嗗洟鍒嗙被鏍�
+ groupTreeData: [],
+ // 鏍憄rpos鏇挎崲鍊�
+ defaultProps: {
+ children: 'children',
+ label: 'name',
+ id: 'oid',
+ isLeaf: '',
+ // disabled:()=>{
+ // return true
+ // }
+ },
+ transferProps: {
+ key: 'oid',
+ label: 'name'
+
+ },
+ // 闆嗗洟鍒嗙被鏍戝��
+ groupVal: '',
+ // 宸︿晶鏍戦�夋嫨鐨刬d鍊�
+ treeParam: {},
+ // 琛ㄦ牸閫夋嫨鐨勮
+ rangeForm: {},
+ mappingForm: {},
+ // 瀹氭椂鍣�
+ times: null,
+ TreeOid: "",
+ tableSelectId: ''
+
+ }
+ },
+ watch: {
+ filterText(val) {
+ this.$refs.tree.filter(val);
+ }
+ },
+ created() {
+ this.getReferCodeClassifyTree()
+ pinyin.setOptions({checkPolyphone: false, charCase: 1});
+ },
+ mounted() {
+ let that = this
+ window.handleBlur = that.handleBlur
+ },
+ computed: {
+ filtermapping() {
+ const data = this.mappingData.filter(item => {
+ return !(Object.prototype.hasOwnProperty.call(item, 'targetAttrName') && (item.targetAttrName === null || item.targetAttrName === undefined || item.targetAttrName === ""))
+ })
+ const transfer = data.map(obj => {
+ return obj.targetAttrName
+ })
+ return transfer
+ },
+ targetColumn() {
+ return this.optionMapping.column.find(column => column.prop === 'targetAttrName');
+ },
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ allSyncBtn: this.vaildData(this.permission.integration.integration_allSync, false),
+ autoBtn: this.vaildData(this.permission.integration.integration_auto, false),
+ bottomAutoBtn: this.vaildData(this.permission.integration.integration_bottomAuto, false),
+ oneSyncBtn: this.vaildData(this.permission.integration.integration_oneSync, false),
+ saveBtn: this.vaildData(this.permission.integration.integration_save, false),
+ }
+ },
+ },
+ methods: {
+ handlerAuto() {
+ if (!this.TreeOid || this.TreeOid === "") {
+ return;
+ }
+ // 杩囨护鍑洪泦鍥㈠睘鎬х殑key鍊�
+ const groupArray = this.mappingData ? this.mappingData.map(obj => obj.sourceAttrKey) : [];
+ // 鑾峰彇鍒伴渶瑕佽嚜鍔ㄥ~鍏呯殑鍊�
+ getByGroupAttrMapping({classifyId: this.TreeOid, groupAttrKeyList: groupArray})
+ .then(res => {
+ // 鍗曠嫭鎶婅繑鍥炲�肩殑groupAttrKey鏀句竴涓暟缁勶紝鐒跺悗杩囨护鍑鸿繑鍥炲�肩殑groupAttrKey鏄惁绛変簬琛ㄦ牸鏁版嵁涓殑sourceAttrKey
+ // const groupReturnData = res.data && res.data.data ? res.data.data.map(item => item.groupAttrKey) : [];
+ const groupReturnData = res.data.data;
+ // 杩囨护鍖归厤
+ this.mappingData.forEach(mappingItem => {
+ groupReturnData.forEach(groupItem => {
+ if (mappingItem.sourceAttrKey === groupItem.groupAttrKey) {
+ const result = this.transferData.find(obj => obj.id.toLowerCase() === groupItem.codeMetaAttrKey.toLowerCase());
+ if (result) {
+ mappingItem.targetAttrId = groupItem.codeMetaAttrOid.toLowerCase();
+ mappingItem.targetAttrName = groupItem.codeMetaAttrName.toLowerCase();
+ mappingItem.targetAttrKey = groupItem.codeMetaAttrKey.toLowerCase();
+ } else {
+ mappingItem.targetAttrId = '';
+ mappingItem.targetAttrName = '';
+ mappingItem.targetAttrKey = '';
+ }
+ }
+ })
+ })
+ this.$message.success('鑷姩濉厖鎴愬姛锛岃纭灞炴�у悗鐐瑰嚮淇濆瓨锛�');
+ })
+ .catch(error => {
+ this.$message.error('濉厖澶辫触锛岃绋嶅悗鍐嶈瘯锛�');
+ });
+ },
+ handlerBottomAuto() {
+ if (this.rangeData.length <= 0) {
+ this.$message.warning('璇烽�夋嫨涓�鏉℃灇涓剧被鍨嬪睘鎬�!')
+ return
+ }
+ getEnumAttrByClsOidAndAttrId({classifyId: this.TreeOid, codeMetaAttrKey: this.tableSelectId}).then(res => {
+ const data = res.data.data;
+ this.rangeData.forEach(rangeItem => {
+ data.forEach(dataItem => {
+ const similarity = this.calculateSimilarity(rangeItem.numText, dataItem.itemName);
+ if (similarity > 70) {
+ rangeItem.targetNumTextValue = rangeItem.numTextValue;
+ rangeItem.targetNumText = dataItem.itemName;
+ }
+ })
+ })
+ this.$message.success('鑷姩濉厖鎴愬姛锛岃纭灞炴�у悗鐐瑰嚮淇濆瓨锛�')
+ })
+ },
+ calculateSimilarity(str1, str2) {
+ // 璁$畻缂栬緫璺濈
+ function editDistance(s1, s2) {
+ s1 = s1.toLowerCase();
+ s2 = s2.toLowerCase();
+
+ const costs = [];
+ for (let i = 0; i <= s1.length; i++) {
+ let lastValue = i;
+ for (let j = 0; j <= s2.length; j++) {
+ if (i === 0)
+ costs[j] = j;
+ else {
+ if (j > 0) {
+ let newValue = costs[j - 1];
+ if (s1.charAt(i - 1) !== s2.charAt(j - 1))
+ newValue = Math.min(Math.min(newValue, lastValue),
+ costs[j]) + 1;
+ costs[j - 1] = lastValue;
+ lastValue = newValue;
+ }
+ }
+ }
+ if (i > 0)
+ costs[s2.length] = lastValue;
+ }
+ return costs[s2.length];
+ }
+
+ // 璁$畻鐩镐技搴︾櫨鍒嗘瘮
+ function similarityPercent(s1, s2) {
+ let maxLength = Math.max(s1.length, s2.length);
+ let distance = editDistance(s1, s2);
+ return ((maxLength - distance) / maxLength) * 100;
+ }
+
+ // 璋冪敤鐩镐技搴﹁绠楀嚱鏁板苟杩斿洖鐧惧垎姣斿舰寮忕殑鐩镐技搴�
+ const similarity = similarityPercent(str1, str2);
+ return similarity;
+ },
+ getTargetName(data) {
+ this.targetColumn.dicData = data.filter(item => item.name && item.name.trim() !== "") // 杩囨护鎺塶ame涓虹┖鐨勫睘鎬�
+ .map(item => {
+ return {
+ targetAttrId: item.oid,
+ targetAttrKey: item.id,
+ targetAttrName: item.name,
+ // disabled: false
+ }
+ });
+ },
+ // 鎺ュ彛宸︿晶鏍�
+ async getReferCodeClassifyTree() {
+ this.treeData = []
+ const param = {
+ parentBtmName: "jclass",
+ valueField: "oid",
+ textField: "name",
+ parentFieldName: "id"
+ }
+ const response = await referCodeClassifyTree(param)
+ if (response.status === 200) {
+ let data = response.data;
+ this.treeData = data.map(item => item.children ? {...item, ...{isLeaf: false}} : {...item, ...{isLeaf: true}})
+ }
+ },
+ // 鎺ュ彛鑾峰彇灞炴�ф槧灏�
+ async getGridAttrMapping(oid) {
+ this.mappingData = []
+ this.loading = true
+ const response = await gridAttrMapping({sourceClassifyId: oid, ...this.treeParam})
+ if (response.status === 200) {
+ this.loading = false
+ this.mappingData = response.data.data
+
+ // for (const item of this.mappingData) {
+ // if (item.targetAttrName && item.targetAttrId && item.targetAttrKey) {
+ // const targetObject = this.targetColumn.dicData.find(obj => obj.targetAttrName === item.targetAttrName);
+ // targetObject.disabled = true;
+ // }
+ // }
+ }
+ },
+ // 鎺ュ彛鑾峰彇灞炴�ф槧灏勫彇鍊艰寖鍥�
+ async getGridAttrRanges(oid) {
+ this.rangeData = []
+ const response = await gridAttrRanges({meatId: oid})
+ if (response.status === 200) {
+ this.rangeData = response.data.data
+ }
+ },
+ // 鎺ュ彛鑾峰彇涓绘暟鎹垎绫诲睘鎬т俊鎭�
+ async getListCodeByClassId(oid) {
+ this.transferData = []
+ pinyin.setOptions({checkPolyphone: false, charCase: 1});
+ const response = await listCodeAttributeByClassId({codeClassifyId: oid})
+ if (response.status === 200) {
+ const data = response.data.data
+ this.transferData = data;
+ this.getTargetName(data)
+ // console.log(data)
+ }
+ },
+ // 鎺ュ彛鑾峰彇闆嗗洟鍒嗙被鏍�
+ async referTree(oid) {
+ this.groupTreeData = [];
+ const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid: '0'});
+ if (response.status === 200) {
+ this.groupTreeData = response.data; // 灏嗚幏鍙栧埌鐨勬暟鎹祴鍊肩粰闆嗗洟鍒嗙被鏍戞暟鎹�
+
+ await this.filterCheckedNodes(this.groupTreeData, this.defaultCheckedKeys);
+ await this.$nextTick(() => {
+ this.$refs.groupTree.setCheckedKeys(this.defaultCheckedKeys);
+ });
+
+ this.handlerTreeData(this.groupTreeData);
+
+ this.defaultCheckedKeys = [];
+ }
+ },
+ // 杩囨护鍑烘潵checked涓簍rue鐨勮妭鐐�
+ filterCheckedNodes(data, checkedNodes) {
+ data.forEach(node => {
+ if (node.checked) {
+ checkedNodes.push(node.oid);
+ this.getGridAttrMapping(node.oid);
+ this.form.groupValue = node.oid;
+ this.groupVal = node.name;
+ }
+
+ if (node.children && node.children.length > 0) {
+ this.filterCheckedNodes(node.children, checkedNodes);
+ }
+ });
+ },
+ // 杩囨护澶勭悊姣忎釜鑺傜偣
+ handlerTreeNode(node) {
+ // 鏍规嵁鑺傜偣绂佺敤鐘舵�佽缃妭鐐规槸鍚︾鐢�
+ this.$set(node, 'disabled', !node.checked);
+ if (node.children && node.children.length > 0) {
+ // 閫掑綊寰幆澶勭悊鎵�鏈夊瓙鑺傜偣
+ node.children.forEach(child => this.handlerTreeNode(child));
+ }
+ },
+ // 妫�鏌ユ墍鏈夎妭鐐规槸鍚﹂兘鏄湭绂佺敤鐘舵��
+ allNodeChecked(data) {
+ for (const node of data) {
+ // 濡傛灉瀛樺湪绂佺敤鑺傜偣杩斿洖false
+ if (node.checked) {
+ return false;
+ }
+ // 濡傛灉瀛樺湪瀛愯妭鐐逛笖瀛愯妭鐐瑰瓨鍦ㄧ鐢ㄨ妭鐐癸紝鍒欒繑鍥瀎alse
+ if (node.children && !this.allNodeChecked(node.children)) {
+ return false;
+ }
+ }
+ // 娌℃湁绂佺敤鑺傜偣杩斿洖true
+ return true;
+ },
+ // 闆嗗洟鍒嗙被鏍戠鐢ㄦ暟鎹鐞嗘暣鍚堟柟娉�
+ handlerTreeData(data) {
+ if (this.allNodeChecked(data)) {
+ // 濡傛灉鎵�鏈夎妭鐐归兘鏈鐢ㄥ皢鎵�鏈夎妭鐐硅缃负false
+ data.forEach(node => {
+ this.$set(node, 'disabled', false); // Vue 3 涓彲鑳戒笉闇�瑕佽繖鏍峰仛
+ });
+ return;
+ }
+ // 鏌ユ壘绂佺敤鑺傜偣
+ let checkedNode = data.find(node => node.checked);
+ data.forEach(node => {
+ // 濡傛灉鑺傜偣涓嶆槸绂佺敤鑺傜偣璁剧疆涓簍rue
+ this.$set(node, 'disabled', node !== checkedNode);
+ if (node.children && node.children.length > 0) {
+ // 璋冪敤寰幆鑺傜偣
+ this.handlerTreeNode(node);
+ }
+ });
+ },
+ // 宸︿晶鏍戣繃婊ゆ悳绱�
+ filterNode(value, data) {
+ if (!value) return true;
+ return data.name.indexOf(value) !== -1;
+ },
+ // 淇濆瓨鎸夐挳
+ async handleSave() {
+ const getTargetCorresponding = (row) => {
+ return this.targetColumn.dicData.find(column => column.targetAttrName === row.targetAttrName);
+ }
+ for (const item of this.mappingData) {
+ item.$cellEdit = false;
+ if (item.targetAttrName && !item.targetAttrId && !item.targetAttrKey) {
+ const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(item);
+ Object.assign(item, {targetAttrId, targetAttrKey, targetAttrName});
+ }
+ }
+ this.mappingData[this.selectRow].dockingPreAttrRangeVoList = (this.rangeData)
+ const response = await batchAddSave({dockingPreAttrMappingVOList: this.mappingData})
+ if (response.status === 200) {
+ this.$message({
+ type: "success",
+ message: "淇濆瓨鎴愬姛!"
+ });
+ }
+ },
+ // 鍚屾鏁版嵁
+ async handleSync(type = 'all') {
+ let param = {operationType: type}
+ if (type === 'one') {
+ param.classifyId = this.form.groupValue
+ }
+ if (this.form.groupValue === '' && type === 'one') {
+ this.$message({
+ type: "error",
+ message: "璇烽�夋嫨涓�鏉¢泦鍥㈠垎绫�"
+ });
+ } else {
+ try {
+ const response = await syncClassifyModel(param);
+ if (response.status === 200) {
+ this.$message.success(response.data.msg)
+ }
+ } catch (error) {
+ console.error(error);
+ }
+ }
+ },
+ handelTransferSave(event) {
+ let that = this
+ const transferValue = event.value
+ if (Object.keys(that.mappingForm).length == 0) {
+ this.$message({
+ type: "error",
+ message: "璇烽�夋嫨涓�鏉℃暟鎹�!"
+ });
+ } else {
+ const findRow = that.mappingData.findIndex(item => item.metaListId === that.mappingForm.metaListId)
+ that.mappingData[findRow].targetAttrName = transferValue[0].name;
+ that.mappingData[findRow].targetAttrId = transferValue[0].oid;
+ that.mappingData[findRow].targetAttrKey = transferValue[0].id;
+ this.dialogPush = false;
+ }
+
+ },
+ // 宸︿晶鏍戠偣鍑�
+ handelTreeCell(event) {
+ this.TreeOid = event.oid;
+ this.treeParam.codeClassifyId = event.oid
+ this.form.groupValue = ''
+ this.groupVal = ''
+ this.tableData = []
+ this.mappingData = []
+ this.referTree(event.oid)
+ this.getListCodeByClassId(event.oid)
+ },
+ // 闆嗗洟鍒嗙被鏍戦�夋嫨
+ handleCheck(data) {
+ this.form.groupValue = data.oid
+ this.groupVal = data.name
+ this.$refs.selectTree.blur()
+ this.getGridAttrMapping(data.oid)
+ },
+ // 闆嗗洟鍒嗙被澶卞幓鐒︾偣
+ inputBlur() {
+ this.tableColumnIndex = ''
+ this.tableRowIndex = null
+ },
+ // 澶卞幓鐒︾偣
+ handleBlur(value, event) {
+ if (event === 'range') this.$refs.crudRange.rowCell(this.rangeForm, this.rangeForm.$index)
+ if (event === 'mapping') this.$refs.crudMapping.rowCell(this.mappingForm, this.mappingForm.$index)
+ },
+ // 闆嗗洟鏄犲皠灞炴�ц閫夋嫨鍗曞厓鏍肩紪杈戯紙鍙屽嚮锛�
+ handleMapingRowClick(row, column) {
+ clearTimeout(this.times)
+ this.mappingForm = row
+ if (column.label === '榛樿鍊�' || column.label === '灞炴�у悕绉�') this.$refs.crudMapping.rowCell(row, row.$index)
+ },
+ // 闆嗗洟鏄犲皠灞炴�ц閫夋嫨锛堝崟鍑伙級
+ handleMapingClick(row) {
+ // console.log(row)
+ this.tableSelectId = row.targetAttrKey || "";
+ this.selectRow = row.$index;
+ clearTimeout(this.times)
+ this.mappingForm = row
+ this.times = setTimeout(() => {
+ this.$refs.crudMapping.toggleSelection([row]);
+ }, 300)
+ },
+ // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫锛堝弻鍑伙級
+ handleRowClick(row) {
+ this.rangeForm = row
+ this.$refs.crudRange.rowCell(row, row.$index)
+ },
+ // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫鍚�
+ handleUpdate(row, index, done) {
+ const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId)
+ this.rangeData[index] = row
+ this.mappingData[findRow].dockingPreAttrRangeVoList = (this.rangeData)
+ this.$message({
+ showClose: true,
+ message: "淇敼鎴愬姛",
+ type: "success",
+ });
+ done();
+ },
+ // 灞炴�у彇鍊艰寖鍥村崟鍏冩牸缂栬緫鍚�
+ async handleMapingUpdate(row, index, done) {
+ const getTargetCorresponding = async (row) => {
+ return this.targetColumn.dicData.find(column => column.targetAttrName === row.targetAttrName);
+ };
+
+ try {
+ if (!row.targetAttrName) {
+ this.$message.warning('璇烽�夋嫨瑕佷繚瀛樼殑灞炴�у悕绉帮紒');
+ done();
+ return;
+ }
+
+ // 鑾峰彇鐩爣灞炴�т俊鎭�
+ const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(row);
+
+
+ // 鏇存柊琛屾暟鎹�
+ Object.assign(row, {
+ targetAttrId: targetAttrId.toLowerCase(),
+ targetAttrKey: targetAttrKey.toLowerCase(),
+ targetAttrName: targetAttrName.toLowerCase()
+ });
+
+ const response = await batchAddSave({dockingPreAttrMappingVOList: [row]});
+
+ if (response.status === 200) {
+ this.$message({
+ type: "success",
+ message: "淇敼鎴愬姛!"
+ });
+ }
+ } catch (error) {
+ this.$message.error(error)
+ } finally {
+ done();
+ }
+ },
+ // 闆嗗洟鏄犲皠灞炴�ч�夋嫨锛堝崟閫夛級
+ selectionChange(selection) {
+ if (selection.length > 1) {
+ const nowVal = selection.shift();
+ this.$refs.crudMapping.toggleRowSelection(nowVal, false);
+ } else if (selection.length === 1) {
+ // 瀵瑰崟閫夋暟鎹殑鎿嶄綔鍐欏湪杩欓噷
+ this.disabledPush = false
+ this.getGridAttrRanges(this.mappingForm.metaListId)
+ }
+ },
+ setCurrentRow(selection, row) {
+
+ this.mappingForm = row
+ this.disabledPush = false
+ },
+ handleSelectAll(selection) {
+ this.$refs.crudMapping.toggleSelection()
+ },
+
+ }
}
</script>
<style lang="scss" scoped>
-.text_tip {
- padding: 10px 0;
- color: #F56C6C;
-}
-
.setstyle {
- min-height: 200px;
- padding: 0 !important;
- margin: 0;
- overflow: auto;
- cursor: default !important;
+ min-height: 200px;
+ padding: 0 !important;
+ margin: 0;
+ overflow: auto;
+ cursor: default !important;
}
-/deep/ .el-transfer-panel__list {
+::v-deep {
+ .el-transfer-panel__list {
width: 100%;
-}
+ height: 370px;
+ }
-/deep/ .el-input {
+ .el-transfer-panel__body {
+ height: 370px;
+ }
+
+ .el-input {
width: auto;
-}
+ }
-/deep/ .el-transfer-panel {
+ .el-transfer-panel {
width: 270px;
+ }
+
+ .el-scrollbar__view {
+ height: 100px;
+ }
}
-/deep/ .el-transfer-panel__list {
- height: 370px;
-}
-
-/deep/ .el-transfer-panel__body {
- height: 370px;
-}
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.9.3