diff --git a/src/api/domain.js b/src/api/domain.js new file mode 100644 index 0000000..4216c2e --- /dev/null +++ b/src/api/domain.js @@ -0,0 +1,110 @@ +import request from '@/utils/request' + +// ==================== 主域名池管理 ==================== + +// 获取域名池列表 +export function getDomainPoolList(params) { + return request({ + url: '/admin/domain/pool/index', + method: 'get', + params + }) +} + +// 获取启用的主域名列表 +export function getEnabledDomains() { + return request({ + url: '/admin/domain/pool/getEnabledDomains', + method: 'get' + }) +} + +// 创建主域名 +export function createDomainPool(data) { + return request({ + url: '/admin/domain/pool/create', + method: 'post', + data + }) +} + +// 更新主域名 +export function updateDomainPool(data) { + return request({ + url: '/admin/domain/pool/update', + method: 'post', + data + }) +} + +// 删除主域名 +export function deleteDomainPool(id) { + return request({ + url: `/admin/domain/pool/delete/${id}`, + method: 'delete' + }) +} + +// 切换主域名状态 +export function toggleDomainPoolStatus(id) { + return request({ + url: '/admin/domain/pool/toggleStatus', + method: 'post', + data: { id } + }) +} + +// ==================== 租户域名管理 ==================== + +// 获取租户域名列表(管理员) +export function getTenantDomainList(params) { + return request({ + url: '/admin/domain/tenant/index', + method: 'get', + params + }) +} + +// 获取当前租户的域名列表 +export function getMyDomains(params) { + return request({ + url: '/admin/domain/tenant/myDomains', + method: 'get', + params + }) +} + +// 申请二级域名 +export function applyTenantDomain(data) { + return request({ + url: '/admin/domain/tenant/apply', + method: 'post', + data + }) +} + +// 审核租户域名 +export function auditTenantDomain(data) { + return request({ + url: '/admin/domain/tenant/audit', + method: 'post', + data + }) +} + +// 禁用/启用租户域名 +export function toggleTenantDomainStatus(id) { + return request({ + url: '/admin/domain/tenant/toggleStatus', + method: 'post', + data: { id } + }) +} + +// 删除租户域名 +export function deleteTenantDomain(id) { + return request({ + url: `/admin/domain/tenant/delete/${id}`, + method: 'delete' + }) +} diff --git a/src/views/apps/cms/domain/audit.vue b/src/views/apps/cms/domain/audit.vue new file mode 100644 index 0000000..918193f --- /dev/null +++ b/src/views/apps/cms/domain/audit.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/views/apps/cms/domain/index.vue b/src/views/apps/cms/domain/index.vue new file mode 100644 index 0000000..6c5b98b --- /dev/null +++ b/src/views/apps/cms/domain/index.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/src/views/apps/cms/domain/pool.vue b/src/views/apps/cms/domain/pool.vue new file mode 100644 index 0000000..81cff16 --- /dev/null +++ b/src/views/apps/cms/domain/pool.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/src/views/apps/cms/templates/index.vue b/src/views/apps/cms/templates/index.vue index ffcd804..48e814f 100644 --- a/src/views/apps/cms/templates/index.vue +++ b/src/views/apps/cms/templates/index.vue @@ -35,7 +35,7 @@
- preview + preview
使用中
@@ -61,44 +61,11 @@ 当前使用 - 预览 - 编辑数据
- - - - - - - - - - - - - - - - - - - - - - - @@ -106,20 +73,22 @@ import { ref, onMounted } from 'vue' import { ElMessage } from 'element-plus' import { Refresh, Loading } from '@element-plus/icons-vue' -import { getThemeList, switchTheme, getThemeData, saveThemeData } from '@/api/theme' +import { getThemeList, switchTheme } from '@/api/theme' + +const API_BASE_URL = import.meta.env.VITE_API_BASE_URL // 状态 const loading = ref(false) const switching = ref('') -const saving = ref(false) const templateList = ref([]) const currentTheme = ref('default') -const previewVisible = ref(false) -const previewUrl = ref('') -const editVisible = ref(false) -const editForm = ref({}) -const selectedField = ref('') -const fieldValue = ref('') + +// 获取完整预览图URL +const getPreviewUrl = (path: string) => { + if (!path) return '' + if (path.startsWith('http')) return path + return API_BASE_URL + path +} // 获取模板列表 const fetchTemplates = async () => { @@ -157,75 +126,6 @@ const handleUse = async (item: any) => { } } -// 预览模板 -const handlePreview = (item: any) => { - previewUrl.value = item.path - previewVisible.value = true -} - -// 编辑模板数据 -const handleEdit = async (item: any) => { - editForm.value = { ...item, fields: item.fields || {} } - selectedField.value = '' - fieldValue.value = '' - - // 获取已保存的数据 - try { - const res = await getThemeData({ theme_key: item.key }) - if (res.code === 200 && res.data.data) { - // 预填充已有数据 - const savedData = res.data.data - // 找到第一个有值的字段 - for (const key in savedData) { - if (savedData[key]) { - selectedField.value = key - fieldValue.value = typeof savedData[key] === 'object' - ? JSON.stringify(savedData[key], null, 2) - : savedData[key] - break - } - } - } - } catch (error) { - console.error('获取模板数据失败', error) - } - - editVisible.value = true -} - -// 字段变更 -const handleFieldChange = (field: string) => { - fieldValue.value = '' -} - -// 保存数据 -const handleSaveData = async () => { - if (!selectedField.value) { - ElMessage.warning('请选择要编辑的字段') - return - } - - saving.value = true - try { - const res = await saveThemeData({ - theme_key: editForm.value.key, - field_key: selectedField.value, - field_value: fieldValue.value - }) - - if (res.code === 200) { - ElMessage.success('保存成功') - editVisible.value = false - } else { - ElMessage.error(res.msg || '保存失败') - } - } catch (error) { - ElMessage.error('保存失败') - } finally { - saving.value = false - } -} - // 图片加载失败处理 const handleImageError = (event: Event) => { const img = event.target as HTMLImageElement @@ -370,10 +270,4 @@ onMounted(() => { } } } - -.preview-iframe { - width: 100%; - height: 70vh; - border: none; -} diff --git a/src/views/basicSettings/tenants/domain.vue b/src/views/basicSettings/tenants/domain.vue new file mode 100644 index 0000000..c54693c --- /dev/null +++ b/src/views/basicSettings/tenants/domain.vue @@ -0,0 +1,193 @@ + + + + +