in kystudio/src/components/common/ModelsImportModal/store.js [82:155]
function assemblyImportData (_data) {
const assignData = {}
const pageSize = 30 // 折叠项每页展示的数量
// 后端接口返回字段归类
const typeMaps = {
tables: ['MODEL_TABLE', 'MODEL_FACT', 'MODEL_DIM'],
columns: ['TABLE_COLUMN'],
partitionColumns: ['MODEL_PARTITION', 'MODEL_MULTIPLE_PARTITION'],
measures: ['MODEL_MEASURE'],
dimensions: ['MODEL_DIMENSION'],
indexes: ['WHITE_LIST_INDEX', 'TO_BE_DELETED_INDEX', 'RULE_BASED_INDEX'],
computedColumns: ['MODEL_CC'],
modelJoin: ['MODEL_JOIN'],
modelFilter: ['MODEL_FILTER']
}
// 未找到、新增、删除以及更改对应需要展示的折叠项
const dataMap = {
nofound: ['tables', 'columns'],
add: ['tables', 'modelJoin', 'columns', 'partitionColumns', 'measures', 'dimensions', 'indexes', 'computedColumns', 'modelFilter'],
reduce: ['tables', 'modelJoin', 'columns', 'partitionColumns', 'measures', 'dimensions', 'indexes', 'computedColumns', 'modelFilter'],
modified: ['columns', 'partitionColumns', 'measures', 'computedColumns', 'indexes', 'modelJoin', 'modelFilter']
}
// tab 接口字段对照
const paneTabMap = {
new_items: 'add',
missing_items: 'nofound',
reduce_items: 'reduce',
update_items: 'modified'
}
for (let item in paneTabMap) {
let v = paneTabMap[item]
if (_data[item] && _data[item].length && item !== 'missing_items') {
dataMap[v].forEach(name => {
if (name === 'indexes') {
const indexList = _data[item].filter(it => typeMaps[name].includes(it.type))
assignData[v] = {
...assignData[v],
[name]: {
agg: indexList.filter(item => (item.detail || item.first_detail) < 20000000000).map(it => (it.detail || it.first_detail)).join(','),
table: indexList.filter(item => (item.detail || item.first_detail) > 20000000000).map(it => (it.detail || it.first_detail)).join(','),
length: indexList.length
}
}
} else {
let dataList = _data[item].filter(it => typeMaps[name].includes(it.type))
assignData[v] = {
...assignData[v],
[name]: {
list: dataList.slice(0, pageSize),
totalData: dataList,
pageOffset: 1,
pageSize: pageSize
}
}
}
})
} else if (_data[item] && _data[item].length && item === 'missing_items') {
dataMap[v].forEach(name => {
let dataList = _data[item].filter(it => typeMaps[name].includes(it.type))
assignData[v] = {...assignData[v],
[name]: {
list: dataList.slice(0, pageSize),
totalData: dataList,
pageOffset: 1,
pageSize: pageSize
}
}
})
}
}
return assignData
}