feat: Add unique value column to operation history table

This commit is contained in:
thexqn 2024-08-30 01:00:39 +08:00
parent bb7157e292
commit 383d4c88ed
4 changed files with 37 additions and 2 deletions

1
.gitignore vendored
View File

@ -78,3 +78,4 @@ cmdb-ui/npm-debug.log*
cmdb-ui/yarn-debug.log* cmdb-ui/yarn-debug.log*
cmdb-ui/yarn-error.log* cmdb-ui/yarn-error.log*
cmdb-ui/package-lock.json cmdb-ui/package-lock.json
start.sh

View File

@ -22,6 +22,7 @@ from api.models.cmdb import CITypeHistory
from api.models.cmdb import CITypeTrigger from api.models.cmdb import CITypeTrigger
from api.models.cmdb import CITypeUniqueConstraint from api.models.cmdb import CITypeUniqueConstraint
from api.models.cmdb import OperationRecord from api.models.cmdb import OperationRecord
from api.lib.cmdb.utils import ValueTypeMap
class AttributeHistoryManger(object): class AttributeHistoryManger(object):
@ -59,8 +60,23 @@ class AttributeHistoryManger(object):
total = len(records) total = len(records)
res = {} res = {}
unique_set = {}
from api.lib.cmdb.ci import CIManager
for record in records: for record in records:
record_id = record.OperationRecord.id record_id = record.OperationRecord.id
ci_id = record.AttributeHistory.ci_id
if ci_id not in unique_set:
ci = CIManager.get_by_id(ci_id)
if ci and hasattr(ci, 'ci_type') and ci.ci_type:
unique_id = ci.ci_type.unique_id
unique_ci_type = AttributeCache.get(unique_id).value_type
value_table_name = ValueTypeMap.table_name.get(f"index_{unique_ci_type}")
value_table_list = getattr(ci, f"{value_table_name}.ci_id", None)
matched_items = [item for item in value_table_list if item.attr_id == unique_id] if value_table_list else []
if matched_items:
unique_set[ci_id] = matched_items[0].value
else:
unique_set[ci_id] = None
attr_hist = record.AttributeHistory.to_dict() attr_hist = record.AttributeHistory.to_dict()
attr_hist['attr'] = AttributeCache.get(attr_hist['attr_id']) attr_hist['attr'] = AttributeCache.get(attr_hist['attr_id'])
if attr_hist['attr']: if attr_hist['attr']:
@ -76,6 +92,7 @@ class AttributeHistoryManger(object):
if record_id not in res: if record_id not in res:
record_dict = record.OperationRecord.to_dict() record_dict = record.OperationRecord.to_dict()
record_dict['unique_value'] = unique_set.get(ci_id)
record_dict["user"] = UserCache.get(record_dict.get("uid")) record_dict["user"] = UserCache.get(record_dict.get("uid"))
if record_dict["user"]: if record_dict["user"]:
record_dict['user'] = record_dict['user'].nickname record_dict['user'] = record_dict['user'].nickname

View File

@ -45,6 +45,7 @@
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="type_id" width="100px" :title="$t('cmdb.ciType.ciType')"></vxe-column> <vxe-column field="type_id" width="100px" :title="$t('cmdb.ciType.ciType')"></vxe-column>
<vxe-column field="unique_value" width="100px" :title="$t('cmdb.ciType.uniqueKey')"></vxe-column>
<vxe-column field="operate_type" width="89px" :title="$t('operation')"> <vxe-column field="operate_type" width="89px" :title="$t('operation')">
<template #header="{ column }"> <template #header="{ column }">
<span>{{ column.title }}</span> <span>{{ column.title }}</span>
@ -314,7 +315,7 @@ export default {
} }
}, },
mergeRowMethod({ row, _rowIndex, column, visibleData }) { mergeRowMethod({ row, _rowIndex, column, visibleData }) {
const fields = ['created_at', 'user', 'type_id'] const fields = ['created_at', 'user', 'type_id', 'unique_value']
const cellValue = row[column.property] const cellValue = row[column.property]
const created_at = row['created_at'] const created_at = row['created_at']
if (column.property === 'created_at') { if (column.property === 'created_at') {
@ -365,6 +366,22 @@ export default {
} }
} }
} }
} else if (column.property === 'unique_value') {
if (cellValue && fields.includes(column.property)) {
const prevRow = visibleData[_rowIndex - 1]
let nextRow = visibleData[_rowIndex + 1]
if (prevRow && prevRow[column.property] === cellValue && prevRow['created_at'] === created_at) {
return { rowspan: 0, colspan: 0 }
} else {
let countRowspan = 1
while (nextRow && nextRow[column.property] === cellValue && nextRow['created_at'] === created_at) {
nextRow = visibleData[++countRowspan + _rowIndex]
}
if (countRowspan > 1) {
return { rowspan: countRowspan, colspan: 1 }
}
}
}
} }
}, },
filterUser() { filterUser() {

View File

@ -85,7 +85,7 @@
@change="onChange" @change="onChange"
format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD HH:mm"
:placeholder="[$t('cmdb.history.startTime'), $t('cmdb.history.endTime')]" :placeholder="[$t('cmdb.history.startTime'), $t('cmdb.history.endTime')]"
v-else-if="attr.value_type === '3'" v-else-if="valueTypeMap[item.value_type] == 'date' || valueTypeMap[item.value_type] == 'datetime'"
:show-time="{ :show-time="{
hideDisabledOptions: true, hideDisabledOptions: true,
defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')], defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')],