From b8761ad3e4e8a9cdd4d73e4343823b10afcda429 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E5=BC=BA?= <357099073@qq.com>
Date: Mon, 9 Mar 2026 16:35:39 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BD=91=E7=AB=99=E6=9E=B6?=
=?UTF-8?q?=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/domain.js | 110 ++++++++
src/views/apps/cms/domain/audit.vue | 185 +++++++++++++
src/views/apps/cms/domain/index.vue | 5 +
src/views/apps/cms/domain/pool.vue | 287 +++++++++++++++++++++
src/views/apps/cms/templates/index.vue | 128 +--------
src/views/basicSettings/tenants/domain.vue | 193 ++++++++++++++
6 files changed, 791 insertions(+), 117 deletions(-)
create mode 100644 src/api/domain.js
create mode 100644 src/views/apps/cms/domain/audit.vue
create mode 100644 src/views/apps/cms/domain/index.vue
create mode 100644 src/views/apps/cms/domain/pool.vue
create mode 100644 src/views/basicSettings/tenants/domain.vue
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+ {{ scope.row.status === 1 ? '启用' : '禁用' }}
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+ {{ scope.row.status === 1 ? '禁用' : '启用' }}
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+
+
+
+
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]()
+
使用中
@@ -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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.full_domain }}
+
+
+
+
+
+ 审核中
+ 已生效
+ 已禁用
+
+
+
+
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.main_domain ? '.' + form.main_domain : '' }}
+
+ 只能包含字母、数字和连字符,不能以连字符开头或结尾
+
+
+
+ {{ form.sub_domain ? form.sub_domain + '.' + (form.main_domain || 'example.com') : '请填写上方信息' }}
+
+
+
+
+ 取消
+ 提交申请
+
+
+
+
+
+
+
+