fix: 站点编辑实现编辑弹窗+PUT端点, 配置查看修复(加载失败)改用/content端点+DTO加submitterId

This commit is contained in:
mediabot-pt
2026-06-30 00:32:14 +08:00
parent 48d0e6a247
commit 550535f882
9 changed files with 158 additions and 10 deletions

View File

@@ -41,6 +41,7 @@ export default {
pending: () => api.get('/configs/pending'),
bySite: (siteId) => api.get(`/configs/${siteId}`),
download: (siteId, version) => api.get(`/configs/${siteId}/${version}`),
content: (siteId, version) => api.get(`/configs/${siteId}/${version}/content`),
approve: (id, comment) => api.post(`/admin/reviews/${id}/approve`, null, { params: { comment } }),
reject: (id, comment) => api.post(`/admin/reviews/${id}/reject`, null, { params: { comment } })
},

View File

@@ -81,19 +81,29 @@ const handleView = async (row) => {
showHistory.value = false
viewVisible.value = true
try {
const res = await api.configs.download(row.siteId, row.version)
configContent.value = typeof res === 'string' ? res : JSON.stringify(res, null, 2)
} catch {
configContent.value = '(加载失败)'
const resp = await api.configs.content(row.siteId, row.version)
const content = resp.data
if (content) {
configContent.value = typeof content === 'string' ? content : JSON.stringify(content, null, 2)
} else {
configContent.value = '(无配置内容)'
}
} catch (e) {
configContent.value = '(加载失败: ' + (e.response?.data?.message || e.message || '未知错误') + ')'
}
}
const loadHistoryConfig = async (h) => {
try {
const res = await api.configs.download(h.siteId, h.version)
configContent.value = typeof res === 'string' ? res : JSON.stringify(res, null, 2)
} catch {
configContent.value = '(加载失败)'
const resp = await api.configs.content(h.siteId, h.version)
const content = resp.data
if (content) {
configContent.value = typeof content === 'string' ? content : JSON.stringify(content, null, 2)
} else {
configContent.value = '(无配置内容)'
}
} catch (e) {
configContent.value = '(加载失败: ' + (e.response?.data?.message || e.message || '未知错误') + ')'
}
}

View File

@@ -22,6 +22,31 @@
</el-table-column>
</el-table>
</el-card>
<!-- 编辑对话框 -->
<el-dialog v-model="editVisible" title="编辑站点" width="500px" :close-on-click-modal="false">
<el-form :model="editForm" label-width="80px" @submit.prevent="handleSave">
<el-form-item label="站点ID">
<el-input v-model="editForm.siteId" disabled />
</el-form-item>
<el-form-item label="名称">
<el-input v-model="editForm.name" placeholder="站点名称" />
</el-form-item>
<el-form-item label="基础URL">
<el-input v-model="editForm.baseUrl" placeholder="https://example.com" />
</el-form-item>
<el-form-item label="类型">
<el-input v-model="editForm.siteType" placeholder="nexusphp / mteam / ..." />
</el-form-item>
<el-form-item label="描述">
<el-input v-model="editForm.description" type="textarea" :rows="3" placeholder="站点描述" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="editVisible = false">取消</el-button>
<el-button type="primary" @click="handleSave" :loading="saving">保存</el-button>
</template>
</el-dialog>
</div>
</template>
@@ -30,6 +55,9 @@ import api from '../api'
const sites = ref([])
const loading = ref(false)
const editVisible = ref(false)
const saving = ref(false)
const editForm = ref({ id: null, siteId: '', name: '', baseUrl: '', siteType: '', description: '' })
const fetchSites = async () => {
loading.value = true
@@ -44,7 +72,38 @@ const fetchSites = async () => {
}
const handleEdit = (row) => {
ElMessage.info(`编辑站点: ${row.name}`)
editForm.value = {
id: row.id,
siteId: row.siteId,
name: row.name || '',
baseUrl: row.baseUrl || '',
siteType: row.siteType || '',
description: row.description || '',
}
editVisible.value = true
}
const handleSave = async () => {
if (!editForm.value.name.trim() || !editForm.value.baseUrl.trim()) {
ElMessage.warning('名称和基础URL不能为空')
return
}
saving.value = true
try {
await api.sites.update(editForm.value.siteId, {
name: editForm.value.name.trim(),
baseUrl: editForm.value.baseUrl.trim(),
siteType: editForm.value.siteType.trim() || 'unknown',
description: editForm.value.description.trim() || null,
})
ElMessage.success('保存成功')
editVisible.value = false
fetchSites()
} catch (e) {
ElMessage.error(e.response?.data?.message || '保存失败')
} finally {
saving.value = false
}
}
onMounted(fetchSites)