| | |
| | | @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">新 增--> |
| | |
| | | @row-dblclick="handleRowClick"> |
| | | <template slot="menuLeft"> |
| | | <el-button icon="el-icon-coordinate" size="small" type="primary" |
| | | @click="handlerAuto">自动填充 |
| | | @click="handlerBottomAuto">自动填充 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | |
| | | listCodeAttributeByClassId, |
| | | syncClassifyModel |
| | | } from '@/api/integration/integration.js' |
| | | import {getPage} from "@/api/omd/OmdAttribute"; |
| | | import {getByGroupAttrMapping, getEnumAttrByClsOidAndAttrId} from "@/api/vciAttrbute"; |
| | | |
| | | export default { |
| | | components: { |
| | |
| | | highlightCurrentRow: true, |
| | | } |
| | | return { |
| | | selectRow: "", |
| | | targetNameList: [], // 元数据返回名称 |
| | | defaultCheckedKeys: [], |
| | | isNodeDisabled: true, |
| | |
| | | refreshBtn: false, |
| | | delBtn: false, |
| | | addBtn: false, |
| | | index: true, |
| | | columnBtn: false, |
| | | searchShow: true, |
| | | emptyBtn: false, |
| | |
| | | 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}, |
| | |
| | | mappingForm: {}, |
| | | // 定时器 |
| | | times: null, |
| | | TreeSelectOid: "" |
| | | TreeOid: "", |
| | | tableSelectId: '' |
| | | |
| | | } |
| | | }, |
| | |
| | | } |
| | | }, |
| | | 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; |
| | | // 过滤匹配 |
| | | // console.log(groupReturnData) |
| | | 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 => { |
| | | console.log(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; |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | }) |
| | | }, |
| | | 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() !== "") // 过滤掉name为空的属性 |
| | | .map(item => { |
| | |
| | | targetAttrId: item.oid, |
| | | targetAttrKey: item.id, |
| | | targetAttrName: item.name, |
| | | disabled: false |
| | | // disabled: false |
| | | } |
| | | }); |
| | | }, |
| | |
| | | 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; |
| | | } |
| | | } |
| | | // 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; |
| | | // } |
| | | // } |
| | | } |
| | | }, |
| | | // 接口获取属性映射取值范围 |
| | |
| | | } |
| | | for (const item of this.mappingData) { |
| | | item.$cellEdit = false; |
| | | if (item.targetAttrName) { |
| | | 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({ |
| | |
| | | }, |
| | | // 左侧树点击 |
| | | handelTreeCell(event) { |
| | | this.TreeOid = event.oid; |
| | | this.treeParam.codeClassifyId = event.oid |
| | | this.form.groupValue = '' |
| | | this.groupVal = '' |
| | |
| | | }, |
| | | // 集团映射属性行选择(单击) |
| | | handleMapingClick(row) { |
| | | // console.log(row) |
| | | this.tableSelectId = row.targetAttrKey || ""; |
| | | this.selectRow = row.$index; |
| | | clearTimeout(this.times) |
| | | this.mappingForm = row |
| | | this.times = setTimeout(() => { |
| | |
| | | // 获取目标属性信息 |
| | | const {targetAttrId, targetAttrKey, targetAttrName} = await getTargetCorresponding(row); |
| | | |
| | | // 更新行数据 |
| | | Object.assign(row, {targetAttrId, targetAttrKey, targetAttrName}); |
| | | |
| | | const response = await batchAddSave({dockingPreAttrMappingVOList: this.mappingData}); |
| | | // 更新行数据 |
| | | Object.assign(row, { |
| | | targetAttrId: targetAttrId.toLowerCase(), |
| | | targetAttrKey: targetAttrKey.toLowerCase(), |
| | | targetAttrName: targetAttrName.toLowerCase() |
| | | }); |
| | | |
| | | const response = await batchAddSave({dockingPreAttrMappingVOList: [row]}); |
| | | |
| | | if (response.status === 200) { |
| | | this.$message({ |
| | |
| | | } |
| | | }, |
| | | setCurrentRow(selection, row) { |
| | | console.log(selection, row) |
| | | this.mappingForm = row |
| | | this.disabledPush = false |
| | | }, |
| | | handleSelectAll(selection) { |
| | | this.$refs.crudMapping.toggleSelection() |
| | | } |
| | | }, |
| | | |
| | | } |
| | | } |
| | | </script> |