feat: 站点列表显示适配版本和状态,支持查看配置内容
This commit is contained in:
@@ -22,10 +22,24 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<el-table-column label="适配版本" width="110">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.latestVersion" class="text-xs">{{ scope.row.latestVersion }}</span>
|
||||
<el-tag v-else size="small" type="info">未适配</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="适配状态" width="100">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.configStatus" size="small" :type="configStatusTag(scope.row.configStatus)">
|
||||
{{ configStatusLabel(scope.row.configStatus) }}
|
||||
</el-tag>
|
||||
<span v-else class="text-xs" style="color:#909399">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="240">
|
||||
<template #default="scope">
|
||||
<el-button size="small" @click="handleEdit(scope.row)">编辑</el-button>
|
||||
<el-button size="small" @click="handleViewConfig(scope.row)">配置</el-button>
|
||||
<el-button size="small" type="primary" @click="handleViewConfig(scope.row)">查看配置</el-button>
|
||||
<el-button size="small" @click="handleViewHistory(scope.row)">变更</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -66,7 +80,7 @@
|
||||
</el-dialog>
|
||||
|
||||
<!-- 查看配置对话框 -->
|
||||
<el-dialog v-model="configVisible" :title="'配置:' + configSiteId" width="700px" :close-on-click-modal="false">
|
||||
<el-dialog v-model="configVisible" :title="'配置:' + configSiteId + (configVersion ? ' v' + configVersion : '')" width="700px" :close-on-click-modal="false">
|
||||
<div v-if="configLoading" style="text-align:center;padding:40px">加载中...</div>
|
||||
<div v-else-if="configError" style="color:#f56c6c;text-align:center;padding:20px">{{ configError }}</div>
|
||||
<div v-else-if="!configContent" style="text-align:center;padding:40px;color:#909399">暂无配置</div>
|
||||
@@ -129,7 +143,7 @@ const siteTypes = [
|
||||
{ value: 'unknown', label: '未知' },
|
||||
]
|
||||
|
||||
const configVisible = ref(false), configLoading = ref(false), configError = ref(''), configContent = ref(''), configSiteId = ref('')
|
||||
const configVisible = ref(false), configLoading = ref(false), configError = ref(''), configContent = ref(''), configSiteId = ref(''), configVersion = ref('')
|
||||
const historyVisible = ref(false), historyLoading = ref(false), historyList = ref([]), historySiteId = ref('')
|
||||
|
||||
const highlightedJson = computed(() => {
|
||||
@@ -173,11 +187,12 @@ const handleSave = async () => {
|
||||
}
|
||||
|
||||
const handleViewConfig = async (row) => {
|
||||
configVisible.value = true; configSiteId.value = row.siteId; configLoading.value = true; configError.value = ''; configContent.value = ''
|
||||
configVisible.value = true; configSiteId.value = row.siteId; configVersion.value = ''; configLoading.value = true; configError.value = ''; configContent.value = ''
|
||||
try {
|
||||
const r = await api.configs.bySite(row.siteId)
|
||||
const configs = r.data || []
|
||||
if (configs.length) {
|
||||
configVersion.value = configs[0].version
|
||||
const resp = await api.configs.content(configs[0].siteId, configs[0].version)
|
||||
configContent.value = typeof resp.data==='string' ? resp.data : JSON.stringify(resp.data,null,2)
|
||||
}
|
||||
@@ -202,6 +217,15 @@ const syntaxHighlight = (json) => escapeHtml(json).replace(/("(\\u[a-fA-F0-9]{4}
|
||||
|
||||
const escapeHtml = (str) => str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>')
|
||||
|
||||
const configStatusLabel = (s) => {
|
||||
const map = { approved: '已适配', pending: '待审核', rejected: '已拒绝', deprecated: '已弃用' }
|
||||
return map[s] || s
|
||||
}
|
||||
const configStatusTag = (s) => {
|
||||
const map = { approved: 'success', pending: 'warning', rejected: 'danger', deprecated: 'info' }
|
||||
return map[s] || 'info'
|
||||
}
|
||||
|
||||
onMounted(fetchAll)
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user