fix: 1、entity setting的mapping调整entity和source位置,并修改其字段名;2、source的dataFormat创建后不允许修改

This commit is contained in:
刘洪洪
2024-11-19 17:16:39 +08:00
parent a8dcee4f14
commit 9f1de47236
3 changed files with 67 additions and 44 deletions

View File

@@ -2913,35 +2913,38 @@ export const intentColor = {
export const settingFields = { export const settingFields = {
ip: [ ip: [
{ displayName: 'IP', fieldName: 'ip' }, { displayName: 'IP', fieldName: 'ip', disabled: true },
{ displayName: 'Ports', fieldName: 'ports' }, { displayName: 'Ports', fieldName: 'ports' },
{ displayName: 'L7 Protocols', fieldName: 'l7_protocols' }, { displayName: 'L7 Protocols', fieldName: 'l7_protocols' },
{ displayName: 'IP.Country', fieldName: 'ip.country' }, { displayName: 'IP.Country', fieldName: 'ip_country' },
{ displayName: 'IP.Super Admin Area', fieldName: 'ip_super_admin_area' }, { displayName: 'IP.Super Admin Area', fieldName: 'ip_super_admin_area' },
{ displayName: 'IP.Admin Area', fieldName: 'ip_admin_area' }, { displayName: 'IP.Admin Area', fieldName: 'ip_admin_area' },
{ displayName: 'IP.ASN', fieldName: 'ip_asn' }, { displayName: 'IP.ASN', fieldName: 'ip_asn' },
{ displayName: 'IP.ISP', fieldName: 'ip_isp' } { displayName: 'IP.ISP', fieldName: 'ip_isp' },
{ displayName: 'seen_time', fieldName: 'seen_time' }
], ],
domain: [ domain: [
{ displayName: 'Domain', fieldName: 'domain' }, { displayName: 'Domain', fieldName: 'domain', disabled: true },
{ displayName: 'Domain.Category', fieldName: 'domain_category' }, { displayName: 'Domain.Category', fieldName: 'domain_category' },
{ displayName: 'Domain.Category Group', fieldName: 'domain_category_group' } { displayName: 'Domain.Category Group', fieldName: 'domain_category_group' },
{ displayName: 'seen_time', fieldName: 'seen_time' }
], ],
app: [ app: [
{ displayName: 'Application', fieldName: 'app' }, { displayName: 'Application', fieldName: 'app', disabled: true },
{ displayName: 'APP.Category', fieldName: 'app_category' }, { displayName: 'APP.Category', fieldName: 'app_category' },
{ displayName: 'APP.Subcategory', fieldName: 'app_subcategory' }, { displayName: 'APP.Subcategory', fieldName: 'app_subcategory' },
{ displayName: 'APP.Subcategory', fieldName: 'app_subcategory' } { displayName: 'seen_time', fieldName: 'seen_time' }
], ],
subscriber_id: [ subscriber_id: [
{ displayName: 'Subscriber ID', fieldName: 'subscriber_id' }, { displayName: 'Subscriber ID', fieldName: 'subscriber_id', disabled: true },
{ displayName: 'Subscriber.Phone Number', fieldName: 'subscriber_phone_number' }, { displayName: 'Subscriber.Phone Number', fieldName: 'subscriber_phone_number' },
{ displayName: 'Subscriber.IMSI', fieldName: 'subscriber_imsi' }, { displayName: 'Subscriber.IMSI', fieldName: 'subscriber_imsi' },
{ displayName: 'Subscriber.IMEI', fieldName: 'subscriber_imei' }, { displayName: 'Subscriber.IMEI', fieldName: 'subscriber_imei' },
{ displayName: 'Subscriber.APNs', fieldName: 'subscriber_apns' } { displayName: 'Subscriber.APNs', fieldName: 'subscriber_apns' },
{ displayName: 'seen_time', fieldName: 'seen_time' }
], ],
cell_id: [ cell_id: [
{ displayName: 'Cell ID', fieldName: 'cell_id' }, { displayName: 'Cell ID', fieldName: 'cell_id', disabled: true },
{ displayName: 'Cell.Technology', fieldName: 'cell_technology' }, { displayName: 'Cell.Technology', fieldName: 'cell_technology' },
{ displayName: 'Cell.Coverage Radius', fieldName: 'cell_coverage_radius' }, { displayName: 'Cell.Coverage Radius', fieldName: 'cell_coverage_radius' },
{ displayName: 'Cell.Operator', fieldName: 'cell_operator' }, { displayName: 'Cell.Operator', fieldName: 'cell_operator' },
@@ -2957,7 +2960,8 @@ export const settingFields = {
{ displayName: 'cell_latitude', fieldName: 'cell_latitude' }, { displayName: 'cell_latitude', fieldName: 'cell_latitude' },
{ displayName: 'cell_longitude', fieldName: 'cell_longitude' }, { displayName: 'cell_longitude', fieldName: 'cell_longitude' },
{ displayName: 'cell_azimuth', fieldName: 'cell_azimuth' }, { displayName: 'cell_azimuth', fieldName: 'cell_azimuth' },
{ displayName: 'cell_fdd_spectrum', fieldName: 'cell_fdd_spectrum' } { displayName: 'cell_fdd_spectrum', fieldName: 'cell_fdd_spectrum' },
{ displayName: 'seen_time', fieldName: 'seen_time' }
] ]
} }

View File

@@ -39,13 +39,30 @@
<div class="block-header"> <div class="block-header">
<div>{{ item.name }}</div> <div>{{ item.name }}</div>
<div class="block-header__menu"> <div class="block-header__menu">
<div>{{ $t('setting.sourceField') }}</div>
<div>{{ $t('setting.entityField') }}</div> <div>{{ $t('setting.entityField') }}</div>
<div>{{ $t('setting.sourceField') }}</div>
</div> </div>
</div> </div>
<div class="block-body" v-for="(ite, ind) in item.list" :key="index+'-'+ind"> <div class="block-body" v-for="(ite, ind) in item.list" :key="index+'-'+ind">
<el-form-item :prop="`data.${index}.list.${ind}.field`" :rules="mappingRules.type"> <el-form-item :prop="`data.${index}.list.${ind}.entityField`" :rules="mappingRules.entityField">
<el-select v-model="ite.field" class="block-body__select" placeholder=""> <el-select
v-model="ite.entityField"
class="block-body__select"
placeholder=""
@visible-change="visibleEntityFiled($event, index, ind)"
:disabled="ind===0">
<el-option
v-for="obj in settingFields[item.type]"
:key="obj.fieldName"
:label="obj.fieldName"
:value="obj.fieldName"
:disabled="obj.disabled"
/>
</el-select>
</el-form-item>
<div class="block-body-equal">=</div>
<el-form-item :prop="`data.${index}.list.${ind}.sourceField`" :rules="mappingRules.sourceField">
<el-select v-model="ite.sourceField" class="block-body__select" placeholder="">
<el-option <el-option
v-for="obj in mappingFieldOption" v-for="obj in mappingFieldOption"
:key="obj.name" :key="obj.name"
@@ -54,20 +71,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<div class="block-body-equal">=</div>
<el-form-item :prop="`data.${index}.list.${ind}.source`" :rules="mappingRules.source">
<el-select v-model="ite.source" class="block-body__select" placeholder="">
<el-option
v-for="obj in settingFields[item.type]"
:key="obj.fieldName"
:label="obj.fieldName"
:value="obj.fieldName"
/>
</el-select>
</el-form-item>
<i class="cn-icon cn-icon-add mapping-item-add" @click="addMappingListItem(index, ind)"></i> <i class="cn-icon cn-icon-add mapping-item-add" @click="addMappingListItem(index, ind)"></i>
<i class="cn-icon cn-icon-close mapping-item-close" @click="deleteMappingItem(index, ind)"></i> <i class="cn-icon cn-icon-close mapping-item-close" @click="deleteMappingItem(index, ind)"></i>
<!-- <i class="cn-icon cn-icon-close mapping-item-close" v-if="isCloseMappingItem" @click="deleteMappingItem(index, ind)"></i>-->
</div> </div>
</div> </div>
</el-form> </el-form>
@@ -223,8 +228,8 @@ export default {
sourceId: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }] sourceId: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }]
}, },
mappingRules: { mappingRules: {
type: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }], entityField: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }],
source: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }] sourceField: [{ required: true, message: this.$t('validate.required'), trigger: 'change' }]
}, },
relationRules: { required: true, message: this.$t('validate.required'), trigger: 'change' }, relationRules: { required: true, message: this.$t('validate.required'), trigger: 'change' },
sourceOption: [], sourceOption: [],
@@ -239,7 +244,7 @@ export default {
{ label: 'Domain', value: 'Domain' }, { label: 'Domain', value: 'Domain' },
{ label: 'APP', value: 'APP' } { label: 'APP', value: 'APP' }
], ],
isCloseMappingItem: true, // 删除mapping标识 isCloseMappingItem: false, // 删除mapping标识
showMappingType: false, showMappingType: false,
mappingItemType: '', // 添加mapping映射类型 mappingItemType: '', // 添加mapping映射类型
typeList: [ typeList: [
@@ -287,7 +292,7 @@ export default {
type: 'ip', type: 'ip',
name: 'IP', name: 'IP',
list: [ list: [
{ field: '', source: '' } { entityField: 'ip', sourceField: '', delFlag: false }
], ],
mapping: {} mapping: {}
} }
@@ -357,8 +362,9 @@ export default {
entities.forEach(item => { entities.forEach(item => {
const list = [] const list = []
for (const [key, value] of Object.entries(item.mapping)) { for (const [key, value] of Object.entries(item.mapping)) {
list.push({ field: key, source: value.toString() }) list.push({ entityField: value.toString(), sourceField: key, delFlag: true })
} }
list[0].delFlag = false
item.list = list item.list = list
}) })
this.editObj.schemaMappingData.data = entities this.editObj.schemaMappingData.data = entities
@@ -410,7 +416,7 @@ export default {
index: this.editObj.schemaMappingData.data.length + 1, index: this.editObj.schemaMappingData.data.length + 1,
type: this.mappingItemType, type: this.mappingItemType,
name: name, name: name,
list: [{ field: '', source: '' }], list: [{ entityField: settingFields[this.mappingItemType][0].fieldName, sourceField: '', delFlag: false }],
mapping: {} mapping: {}
}) })
this.isCloseMappingItem = true this.isCloseMappingItem = true
@@ -427,14 +433,14 @@ export default {
}, },
/** 添加schema mapping某一类型下的字段 **/ /** 添加schema mapping某一类型下的字段 **/
async addMappingListItem (index, ind) { async addMappingListItem (index, ind) {
const valid1 = await this.$refs.mappingForm.validateField(`data.${index}.list.${ind}.field`, (valid) => { const valid1 = await this.$refs.mappingForm.validateField(`data.${index}.list.${ind}.entityField`, (valid) => {
return valid return valid
}) })
const valid2 = await this.$refs.mappingForm.validateField(`data.${index}.list.${ind}.source`, (valid) => { const valid2 = await this.$refs.mappingForm.validateField(`data.${index}.list.${ind}.sourceField`, (valid) => {
return valid return valid
}) })
if (valid1 && valid2) { if (valid1 && valid2) {
this.editObj.schemaMappingData.data[index].list.push({ field: '', source: '' }) this.editObj.schemaMappingData.data[index].list.push({ entityField: '', sourceField: '', delFlag: true })
this.isCloseMappingItem = true this.isCloseMappingItem = true
} }
}, },
@@ -471,15 +477,10 @@ export default {
}) })
} }
} }
// if (this.editObj.schemaMappingData.data.length > 1) {
// this.isCloseMappingItem = true
// } else {
// this.isCloseMappingItem = this.editObj.schemaMappingData.data[0].list.length > 1
// }
let usedFlag = false let usedFlag = false
if (this.editObj.schemaMappingData.data.length > 0) { if (this.editObj.schemaMappingData.data.length > 0) {
this.editObj.schemaMappingData.data.forEach(item => { this.editObj.schemaMappingData.data.forEach(item => {
const obj1 = item.list.find(d => d.field) const obj1 = item.list.find(d => d.sourceField)
if (obj1 && !usedFlag) { if (obj1 && !usedFlag) {
usedFlag = true usedFlag = true
} }
@@ -625,7 +626,7 @@ export default {
formObj.schemaMappingData.data.forEach((item) => { formObj.schemaMappingData.data.forEach((item) => {
const obj = {} const obj = {}
item.list.forEach(ite => { item.list.forEach(ite => {
obj[ite.field] = ite.source obj[ite.entityField] = ite.sourceField
}) })
item.mapping = this.$_.cloneDeep(obj) item.mapping = this.$_.cloneDeep(obj)
}) })
@@ -756,7 +757,7 @@ export default {
let usedFlag = false let usedFlag = false
if (this.editObj.schemaMappingData.data.length > 0) { if (this.editObj.schemaMappingData.data.length > 0) {
this.editObj.schemaMappingData.data.forEach(item => { this.editObj.schemaMappingData.data.forEach(item => {
const obj1 = item.list.find(d => d.field) const obj1 = item.list.find(d => d.sourceField)
if (obj1 && !usedFlag) { if (obj1 && !usedFlag) {
usedFlag = true usedFlag = true
} }
@@ -774,6 +775,24 @@ export default {
}) })
} }
} }
},
visibleEntityFiled (callback, index, i) {
const item = this.editObj.schemaMappingData.data[index]
if (callback) {
const fieldNameList = []
item.list.forEach(ite => {
fieldNameList.push(ite.entityField)
})
this.settingFields[item.type].forEach(obj => {
if (fieldNameList.indexOf(obj.fieldName) > -1) {
obj.disabled = true
}
})
} else {
this.settingFields[item.type].forEach(obj => {
obj.disabled = false
})
}
} }
} }
} }

View File

@@ -9,7 +9,7 @@
</el-form-item> </el-form-item>
<el-form-item :label="$t('sources.dataFormat')" prop="dataFormat"> <el-form-item :label="$t('sources.dataFormat')" prop="dataFormat">
<el-select v-model="sourceObj.dataFormat" placeholder=""> <el-select v-model="sourceObj.dataFormat" placeholder="" :disabled="sourceObj.id">
<el-option <el-option
v-for="item in formatOptions" v-for="item in formatOptions"
:key="item.value" :key="item.value"