diff --git a/par-core/src/main/java/com/par/core/dto/SiteDTO.java b/par-core/src/main/java/com/par/core/dto/SiteDTO.java index 23cc842..f862428 100644 --- a/par-core/src/main/java/com/par/core/dto/SiteDTO.java +++ b/par-core/src/main/java/com/par/core/dto/SiteDTO.java @@ -23,6 +23,8 @@ public class SiteDTO { private SiteType siteType; private String schemaVersion; private SiteStatus status; + private String latestVersion; + private String configStatus; private LocalDateTime createdAt; private LocalDateTime updatedAt; } diff --git a/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java b/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java index 7825983..bcd1b2e 100644 --- a/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java +++ b/par-core/src/main/java/com/par/core/service/impl/SiteServiceImpl.java @@ -9,7 +9,9 @@ import com.par.core.entity.Site; import com.par.core.entity.SiteChange; import com.par.core.enums.SiteStatus; import com.par.core.enums.SiteType; +import com.par.core.entity.SiteConfig; import com.par.core.mapper.SiteChangeMapper; +import com.par.core.mapper.SiteConfigMapper; import com.par.core.mapper.SiteMapper; import com.par.core.service.SiteService; import lombok.RequiredArgsConstructor; @@ -29,6 +31,7 @@ public class SiteServiceImpl implements SiteService { private final SiteMapper siteMapper; private final SiteChangeMapper changeMapper; + private final SiteConfigMapper siteConfigMapper; private static final ObjectMapper objectMapper = new ObjectMapper(); // ==================== 工具方法 ==================== @@ -84,6 +87,12 @@ public class SiteServiceImpl implements SiteService { dto.setSiteType(site.getSiteType()); dto.setSchemaVersion(site.getSchemaVersion()); dto.setStatus(site.getStatus()); + // 填充适配信息:最新版本号和状态 + SiteConfig latest = siteConfigMapper.selectLatestBySiteId(site.getSiteId()); + if (latest != null) { + dto.setLatestVersion(latest.getVersion()); + dto.setConfigStatus(latest.getStatus() != null ? latest.getStatus().getValue() : null); + } dto.setCreatedAt(site.getCreatedAt()); dto.setUpdatedAt(site.getUpdatedAt()); return dto; diff --git a/web/src/views/Sites.vue b/web/src/views/Sites.vue index b07ab21..023fcc2 100644 --- a/web/src/views/Sites.vue +++ b/web/src/views/Sites.vue @@ -22,10 +22,24 @@ - + + + + + + + @@ -66,7 +80,7 @@ - +
加载中...
{{ configError }}
暂无配置
@@ -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,'>') +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)