props.modelValue, (newVal) => {
@@ -144,6 +151,7 @@ import { closeAllMessage } from '../../utils/message'
if (newVal) {
selectedId.value = props.currentCoverId
currentPage.value = 1
+ sourceFilter.value = undefined
fetchFileList()
}
})
@@ -161,10 +169,11 @@ import { closeAllMessage } from '../../utils/message'
fileList.value = [] // 清空列表
try {
- const res = await getFileList({
- page: currentPage.value,
- count: pageSize.value
- })
+ const params = { page: currentPage.value, count: pageSize.value }
+ if (sourceFilter.value !== undefined && sourceFilter.value !== null && sourceFilter.value !== '') {
+ params.is_admin = sourceFilter.value
+ }
+ const res = await getFileList(params)
console.log("获取文件列表:", res)
@@ -219,6 +228,12 @@ import { closeAllMessage } from '../../utils/message'
fetchFileList()
}
+ // 来源筛选变化
+ const handleSourceChange = () => {
+ currentPage.value = 1
+ fetchFileList()
+ }
+
// 切换到上传标签页
const switchToUpload = () => {
activeTab.value = 'upload'
@@ -312,6 +327,7 @@ import { closeAllMessage } from '../../utils/message'
fileList.value = []
currentPage.value = 1
total.value = 0
+ sourceFilter.value = undefined
}
// 确认选择
@@ -347,6 +363,12 @@ import { closeAllMessage } from '../../utils/message'
margin: 0;
color: #303133;
}
+
+ .header-actions {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
.file-grid {
display: grid;
diff --git a/src/components/admin/ImageSelector.vue b/src/components/admin/ImageSelector.vue
index 193c5e2..10585f6 100644
--- a/src/components/admin/ImageSelector.vue
+++ b/src/components/admin/ImageSelector.vue
@@ -33,6 +33,10 @@
@input="handleSearch"
style="width: 300px;"
/>
+
+
+
+
@@ -178,6 +182,7 @@ const currentPage = ref(1)
const pageSize = ref(12)
const total = ref(0)
const searchKeyword = ref('')
+const sourceFilter = ref(undefined)
const pendingFiles = ref([]) // 待上传文件列表
const uploading = ref(false) // 批量上传中
let fetchVersion = 0 // 防止 fetchFileList 竞态条件
@@ -190,6 +195,7 @@ watch(() => props.modelValue, (newVal) => {
selectedIds.value = new Set()
currentPage.value = 1
searchKeyword.value = ''
+ sourceFilter.value = undefined
fetchFileList()
}
})
@@ -224,10 +230,11 @@ const fetchFileList = async () => {
loading.value = true
try {
- const res = await getFileList({
- page: currentPage.value,
- count: pageSize.value
- })
+ const params = { page: currentPage.value, count: pageSize.value }
+ if (sourceFilter.value !== undefined && sourceFilter.value !== null && sourceFilter.value !== '') {
+ params.is_admin = sourceFilter.value
+ }
+ const res = await getFileList(params)
// 如果有更新的请求发起,丢弃当前结果
if (currentFetchVersion !== fetchVersion) return
@@ -285,10 +292,15 @@ const handleTabClick = (tab) => {
// 处理搜索
const handleSearch = () => {
- // 搜索时重置到第一页
currentPage.value = 1
}
+// 来源筛选变化
+const handleSourceChange = () => {
+ currentPage.value = 1
+ fetchFileList()
+}
+
// 分页处理
const handleSizeChange = (size) => {
pageSize.value = size
@@ -436,6 +448,7 @@ const handleClose = () => {
currentPage.value = 1
total.value = 0
searchKeyword.value = ''
+ sourceFilter.value = undefined
// 清理待上传文件的预览URL
pendingFiles.value.forEach(f => {
if (f.previewUrl) URL.revokeObjectURL(f.previewUrl)
@@ -495,6 +508,8 @@ const handleConfirm = () => {
.filter-section {
margin-bottom: 20px;
+ display: flex;
+ align-items: center;
}
.file-grid {
diff --git a/src/config/menus.js b/src/config/menus.js
index 1c50552..01f110e 100644
--- a/src/config/menus.js
+++ b/src/config/menus.js
@@ -194,6 +194,10 @@ export const menus = [
path: '/system/setting-manage',
title: '配置管理'
},
+ {
+ path: '/system/notice-channel',
+ title: '通知管理'
+ },
{
path: '/system/menu',
title: '菜单管理',
diff --git a/src/router/index.js b/src/router/index.js
index 7dd6a94..09bebdb 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -424,6 +424,12 @@ const routes = [
component: () => import('../views/system/SettingManage.vue'),
meta: { title: '配置管理' }
},
+ {
+ path: 'notice-channel',
+ name: 'NoticeChannel',
+ component: () => import('../views/system/NoticeChannel.vue'),
+ meta: { title: '通知管理' }
+ },
{
path: 'menu-manage',
name: 'MenuManage',
diff --git a/src/views/system/NoticeChannel.vue b/src/views/system/NoticeChannel.vue
new file mode 100644
index 0000000..e2e56a3
--- /dev/null
+++ b/src/views/system/NoticeChannel.vue
@@ -0,0 +1,500 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 渠道配置
+
+
+
+
+
+
+
+
+
+
+ {{ item.eventName || '-' }}
+ handleToggle(item, val)" />
+
+
+ {{ item.eventType }}
+ {{ item.note }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.eventName || '-' }}
+ handleToggle(item, val)" />
+
+
+ {{ item.eventType }}
+ {{ item.note }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.eventName || '-' }}
+ {{ item.channel }}
+ handleToggle(item, val)" />
+
+
+ {{ item.eventType }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 模板管理
+
+
+
+
+
+
+
+
+
+
+ {{ row.name }}
+
+
+
+
+ {{ row.tag }}
+
+
+
+
+
+
+
+
+ {{ row.type === 'email' ? '邮件' : '短信' }}
+
+
+
+
+
+
+ {{ row.content || '-' }}
+
+
+
+
+
+ {{ arg }}
+
+ -
+
+
+
+ {{ row.note || '-' }}
+
+
+ {{ formatTime(row.UpdatedAt) }}
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 邮件
+
+
+
+
+
+ 短信
+
+
+
+
+
+
+ 点击参数按钮可将其插入到模板内容光标处
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+
+
+
+
+
diff --git a/src/views/user-vm/UserVmDetail.vue b/src/views/user-vm/UserVmDetail.vue
index bd50bc2..4376499 100644
--- a/src/views/user-vm/UserVmDetail.vue
+++ b/src/views/user-vm/UserVmDetail.vue
@@ -402,15 +402,28 @@