feat(F006-P0A): 9 条 mock 路由切真 view - 消息(短信/邮件×4) + 行业/资讯分类 + 用户通知 + 待处理消息 + userManagement redirect
This commit is contained in:
parent
e16033bf13
commit
7e85188576
49
src/modules/message/maillog/MailLogListView.vue
Normal file
49
src/modules/message/maillog/MailLogListView.vue
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 邮件日志 - P0 真 view
|
||||||
|
* 走 /sys/maillog/page (2026-08-07 探测: 200, total=0, 接口正常暂无数据)
|
||||||
|
* 字段(推测): id/mailCode/platform/toEmail/subject/content/status/creator/createDate
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface MailLog { id: string; mailCode: string; platform: number; toEmail: string; subject: string; content: string; status: number; creator: number; createDate: string }
|
||||||
|
const STATUS_MAP: Record<number, { label: string; type: string }> = { 0: { label: '失败', type: 'danger' }, 1: { label: '成功', type: 'success' }, 2: { label: '等待', type: 'warning' } }
|
||||||
|
const list = ref<MailLog[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 10 })
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'mailCode', label: '邮件编码', width: 130 },
|
||||||
|
{ prop: 'toEmail', label: '收件邮箱', minWidth: 180 },
|
||||||
|
{ prop: 'subject', label: '主题', minWidth: 200 },
|
||||||
|
{ prop: 'status', label: '状态', width: 90, slot: 'status' },
|
||||||
|
{ prop: 'creator', label: '操作人', width: 90 },
|
||||||
|
{ prop: 'createDate', label: '发送时间', width: 180 }
|
||||||
|
]
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try { const r: any = await httpGet('/sys/maillog/page', { page: query.page, limit: query.limit }); list.value = r?.list || []; total.value = Number(r?.total || 0) }
|
||||||
|
catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader title="邮件日志" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange" @limit-change="onLimitChange">
|
||||||
|
<template #status="{ row }"><el-tag :type="(STATUS_MAP[row.status]?.type as any) || 'info'">{{ STATUS_MAP[row.status]?.label || row.status }}</el-tag></template>
|
||||||
|
</DataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
44
src/modules/message/mailtemplate/MailTemplateListView.vue
Normal file
44
src/modules/message/mailtemplate/MailTemplateListView.vue
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 邮件模板 - P0 真 view
|
||||||
|
* 走 /sys/mailtemplate/page (2026-08-07 探测: 200, total=1)
|
||||||
|
* 字段: id/name/subject/content/createDate
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface MailTpl { id: string; name: string; subject: string; content: string; createDate: string }
|
||||||
|
const list = ref<MailTpl[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 10 })
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'name', label: '模板名称', minWidth: 200 },
|
||||||
|
{ prop: 'subject', label: '邮件主题', minWidth: 200 },
|
||||||
|
{ prop: 'content', label: '内容', minWidth: 200, formatter: (r: MailTpl) => r.content ? r.content.slice(0, 50) + '...' : '--' },
|
||||||
|
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||||
|
]
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try { const r: any = await httpGet('/sys/mailtemplate/page', { page: query.page, limit: query.limit }); list.value = r?.list || []; total.value = Number(r?.total || 0) }
|
||||||
|
catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader title="邮件模板" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange" @limit-change="onLimitChange" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
48
src/modules/message/sms/SmsListView.vue
Normal file
48
src/modules/message/sms/SmsListView.vue
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 短信配置 - P0 真 view
|
||||||
|
* 走 /sys/sms/page (2026-08-07 探测: 200, total=2)
|
||||||
|
* 字段: id/smsCode/platform/remark/config/createDate
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface Sms { id: string; smsCode: string; platform: number; remark: string; config: string; createDate: string }
|
||||||
|
const PLATFORM_MAP: Record<number, { label: string; type: string }> = { 0: { label: '阿里云', type: 'success' }, 1: { label: '腾讯云', type: 'success' }, 2: { label: '七牛云', type: 'success' }, 4: { label: '又拍云', type: 'success' } }
|
||||||
|
const list = ref<Sms[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 10 })
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'smsCode', label: '短信编码', minWidth: 150 },
|
||||||
|
{ prop: 'platform', label: '平台', width: 120, slot: 'platform' },
|
||||||
|
{ prop: 'remark', label: '备注', minWidth: 200, formatter: (r: Sms) => r.remark || '--' },
|
||||||
|
{ prop: 'config', label: '配置', minWidth: 200, formatter: (r: Sms) => r.config ? r.config.slice(0, 50) + '...' : '--' },
|
||||||
|
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||||
|
]
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try { const r: any = await httpGet('/sys/sms/page', { page: query.page, limit: query.limit }); list.value = r?.list || []; total.value = Number(r?.total || 0) }
|
||||||
|
catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader title="短信配置" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange" @limit-change="onLimitChange">
|
||||||
|
<template #platform="{ row }"><el-tag :type="(PLATFORM_MAP[row.platform]?.type as any) || 'info'">{{ PLATFORM_MAP[row.platform]?.label || row.platform }}</el-tag></template>
|
||||||
|
</DataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
49
src/modules/message/smslog/SmsLogListView.vue
Normal file
49
src/modules/message/smslog/SmsLogListView.vue
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 短信日志 - P0 真 view
|
||||||
|
* 走 /sys/smslog/page (2026-08-07 探测: 200, total=1275)
|
||||||
|
* 字段: id/smsCode/platform/mobile/params1-4/status/creator/createDate
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface SmsLog { id: string; smsCode: string; platform: number; mobile: string; params1: string; params2: string; params3: string; params4: string; status: number; creator: number; createDate: string }
|
||||||
|
const STATUS_MAP: Record<number, { label: string; type: string }> = { 0: { label: '失败', type: 'danger' }, 1: { label: '成功', type: 'success' }, 2: { label: '等待', type: 'warning' } }
|
||||||
|
const list = ref<SmsLog[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 10 })
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'smsCode', label: '短信编码', width: 130 },
|
||||||
|
{ prop: 'mobile', label: '手机号', width: 140 },
|
||||||
|
{ prop: 'params1', label: '参数1', minWidth: 120, formatter: (r: SmsLog) => r.params1 || '--' },
|
||||||
|
{ prop: 'status', label: '状态', width: 90, slot: 'status' },
|
||||||
|
{ prop: 'creator', label: '操作人', width: 90 },
|
||||||
|
{ prop: 'createDate', label: '发送时间', width: 180 }
|
||||||
|
]
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try { const r: any = await httpGet('/sys/smslog/page', { page: query.page, limit: query.limit }); list.value = r?.list || []; total.value = Number(r?.total || 0) }
|
||||||
|
catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader title="短信日志" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange" @limit-change="onLimitChange">
|
||||||
|
<template #status="{ row }"><el-tag :type="(STATUS_MAP[row.status]?.type as any) || 'info'">{{ STATUS_MAP[row.status]?.label || row.status }}</el-tag></template>
|
||||||
|
</DataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
55
src/modules/other/category/CategoryDeepListView.vue
Normal file
55
src/modules/other/category/CategoryDeepListView.vue
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 行业/资讯分类 - P0 真 view (共用组件, props.type 区分)
|
||||||
|
* 走 /other/category/categoryDeepPageList (type: 1=行业 3=资讯分类)
|
||||||
|
* 2026-08-07 探测: type=1 total=27, type=3 total=4
|
||||||
|
* 字段: id/name/level/pid/sort/status/createDate/children
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface Category { id: string; name: string; level: number; pid: string; sort: number; status: number; createDate: string; children?: Category[] }
|
||||||
|
|
||||||
|
const props = defineProps<{ type?: number; title?: string }>()
|
||||||
|
const TITLES: Record<number, string> = { 1: '行业管理', 3: '资讯分类' }
|
||||||
|
|
||||||
|
const list = ref<Category[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 100 })
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'name', label: '名称', minWidth: 200 },
|
||||||
|
{ prop: 'level', label: '层级', width: 80, formatter: (r: Category) => ({ 1: '一级', 2: '二级', 3: '三级', 4: '四级' } as Record<number, string>)[r.level] || String(r.level) },
|
||||||
|
{ prop: 'sort', label: '排序', width: 80 },
|
||||||
|
{ prop: 'status', label: '状态', width: 90, slot: 'status' },
|
||||||
|
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||||
|
]
|
||||||
|
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const r: any = await httpGet('/other/category/categoryDeepPageList', { type: props.type ?? 1, page: query.page, limit: query.limit })
|
||||||
|
list.value = r?.list || []
|
||||||
|
total.value = Number(r?.total || 0)
|
||||||
|
} catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader :title="props.title || TITLES[props.type ?? 1] || '分类管理'" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="false" row-key="id" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" empty-text="暂无数据" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
49
src/modules/sys/noticeuser/NoticeUserListView.vue
Normal file
49
src/modules/sys/noticeuser/NoticeUserListView.vue
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
/**
|
||||||
|
* F006 用户通知 - P0 真 view
|
||||||
|
* 走 /sys/notice/userPage (2026-08-07 探测: 200, total=0, 接口正常暂无数据)
|
||||||
|
* 字段(推测): id/title/content/type/readFlag/receiver/createDate
|
||||||
|
*/
|
||||||
|
import { onMounted, ref, reactive } from 'vue'
|
||||||
|
import { httpGet } from '@/utils/request'
|
||||||
|
import DataTable from '@/components/DataTable/DataTable.vue'
|
||||||
|
import PageHeader from '@/components/PageHeader/PageHeader.vue'
|
||||||
|
|
||||||
|
interface NoticeUser { id: string; title: string; content: string; type: number; readFlag: number; receiver: string; createDate: string }
|
||||||
|
const READ_MAP: Record<number, { label: string; type: string }> = { 0: { label: '未读', type: 'warning' }, 1: { label: '已读', type: 'info' } }
|
||||||
|
const list = ref<NoticeUser[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const loading = ref(false)
|
||||||
|
const query = reactive({ page: 1, limit: 10 })
|
||||||
|
const columns = [
|
||||||
|
{ prop: 'id', label: 'ID', width: 80 },
|
||||||
|
{ prop: 'title', label: '标题', minWidth: 200 },
|
||||||
|
{ prop: 'content', label: '内容', minWidth: 250, formatter: (r: NoticeUser) => r.content ? r.content.slice(0, 60) + '...' : '--' },
|
||||||
|
{ prop: 'type', label: '类型', width: 100 },
|
||||||
|
{ prop: 'readFlag', label: '阅读状态', width: 100, slot: 'read' },
|
||||||
|
{ prop: 'receiver', label: '接收人', width: 120 },
|
||||||
|
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||||
|
]
|
||||||
|
async function load() {
|
||||||
|
loading.value = true
|
||||||
|
try { const r: any = await httpGet('/sys/notice/userPage', { page: query.page, limit: query.limit }); list.value = r?.list || []; total.value = Number(r?.total || 0) }
|
||||||
|
catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
|
}
|
||||||
|
function onPageChange(p: number) { query.page = p; load() }
|
||||||
|
function onLimitChange(l: number) { query.limit = l; query.page = 1; load() }
|
||||||
|
onMounted(load)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="rr-page">
|
||||||
|
<PageHeader title="用户通知" :sub="`共 ${total} 条`" />
|
||||||
|
<div class="rr-card">
|
||||||
|
<DataTable :columns="columns" :data="list" :borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange" @limit-change="onLimitChange">
|
||||||
|
<template #read="{ row }"><el-tag :type="(READ_MAP[row.readFlag]?.type as any) || 'info'">{{ READ_MAP[row.readFlag]?.label || row.readFlag }}</el-tag></template>
|
||||||
|
</DataTable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.rr-page { max-width: 1400px; }
|
||||||
|
.rr-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; }
|
||||||
|
</style>
|
||||||
@ -22,6 +22,7 @@ interface Msg {
|
|||||||
createDate: string
|
createDate: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const props = defineProps<{ status?: number }>()
|
||||||
const list = ref<Msg[]>([])
|
const list = ref<Msg[]>([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
@ -40,7 +41,7 @@ const columns = [
|
|||||||
async function load() {
|
async function load() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const resp: any = await httpGet('/user/message/page', { page: query.page, limit: query.limit })
|
const resp: any = await httpGet('/user/message/page', { page: query.page, limit: query.limit, ...(props.status !== undefined ? { status: props.status } : {}) })
|
||||||
list.value = resp?.list || []
|
list.value = resp?.list || []
|
||||||
total.value = Number(resp?.total || 0)
|
total.value = Number(resp?.total || 0)
|
||||||
} catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
} catch { list.value = []; total.value = 0 } finally { loading.value = false }
|
||||||
@ -52,7 +53,7 @@ onMounted(load)
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="rr-page">
|
<div class="rr-page">
|
||||||
<PageHeader title="系统消息" :sub="`站内消息 (共 ${total} 条)`" />
|
<PageHeader :title="props.status === 0 ? '待处理消息' : '系统消息'" :sub="`${props.status === 0 ? '待处理' : '站内'}消息 (共 ${total} 条)`" />
|
||||||
<div class="rr-card">
|
<div class="rr-card">
|
||||||
<DataTable :columns="columns" :data="list"
|
<DataTable :columns="columns" :data="list"
|
||||||
:borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无消息" @page-change="onPageChange"
|
:borderless="true" :loading="loading" :total="total" :page="query.page" :limit="query.limit" :show-pagination="true" row-key="id" empty-text="暂无消息" @page-change="onPageChange"
|
||||||
|
|||||||
@ -199,10 +199,10 @@ const routes: RouteRecordRaw[] = [
|
|||||||
|
|
||||||
// ============ W5.x.x+4: 50 个 P3 路由 - MockTableView 集中配置 ============
|
// ============ W5.x.x+4: 50 个 P3 路由 - MockTableView 集中配置 ============
|
||||||
// 4 个 message
|
// 4 个 message
|
||||||
{ path: '/message/sms', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-sms' }), meta: { title: '短信配置' } },
|
{ path: '/message/sms', component: () => import('@/modules/message/sms/SmsListView.vue'), meta: { title: '短信配置' } },
|
||||||
{ path: '/message/sms-log', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-sms-log' }), meta: { title: '短信日志' } },
|
{ path: '/message/sms-log', component: () => import('@/modules/message/smslog/SmsLogListView.vue'), meta: { title: '短信日志' } },
|
||||||
{ path: '/message/mail-template', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-mail-template' }), meta: { title: '邮件模板' } },
|
{ path: '/message/mail-template', component: () => import('@/modules/message/mailtemplate/MailTemplateListView.vue'), meta: { title: '邮件模板' } },
|
||||||
{ path: '/message/mail-log', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-mail-log' }), meta: { title: '邮件日志' } },
|
{ path: '/message/mail-log', component: () => import('@/modules/message/maillog/MailLogListView.vue'), meta: { title: '邮件日志' } },
|
||||||
// 4 个运营中心 (P1: mock -> 真 view, /sys/operation/pageList type 区分)
|
// 4 个运营中心 (P1: mock -> 真 view, /sys/operation/pageList type 区分)
|
||||||
{ path: '/sys/operation', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 1 }), meta: { title: '全国运营中心' } },
|
{ path: '/sys/operation', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 1 }), meta: { title: '全国运营中心' } },
|
||||||
{ path: '/sys/operation/province', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 2 }), meta: { title: '省级运营中心' } },
|
{ path: '/sys/operation/province', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 2 }), meta: { title: '省级运营中心' } },
|
||||||
@ -210,8 +210,8 @@ const routes: RouteRecordRaw[] = [
|
|||||||
{ path: '/sys/operation/association', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 4 }), meta: { title: '行业协会运营' } },
|
{ path: '/sys/operation/association', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 4 }), meta: { title: '行业协会运营' } },
|
||||||
// 3 个资讯类 (P1: information -> 真 view, industry/categoryZX 404 保留 mock)
|
// 3 个资讯类 (P1: information -> 真 view, industry/categoryZX 404 保留 mock)
|
||||||
{ path: '/other/information', component: () => import('@/modules/other/information/InformationListView.vue'), meta: { title: '资讯列表' } },
|
{ path: '/other/information', component: () => import('@/modules/other/information/InformationListView.vue'), meta: { title: '资讯列表' } },
|
||||||
{ path: '/other/industry', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-industry' }), meta: { title: '行业' } },
|
{ path: '/other/industry', component: () => import('@/modules/other/category/CategoryDeepListView.vue'), props: { type: 1, title: '行业管理' }, meta: { title: '行业' } },
|
||||||
{ path: '/other/category/zx', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-category-zx' }), meta: { title: '资讯分类' } },
|
{ path: '/other/category/zx', component: () => import('@/modules/other/category/CategoryDeepListView.vue'), props: { type: 3, title: '资讯分类' }, meta: { title: '资讯分类' } },
|
||||||
// devtools 5 个
|
// devtools 5 个
|
||||||
{ path: '/devtools/baseclass', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'devtools-baseclass' }), meta: { title: '基类配置' } },
|
{ path: '/devtools/baseclass', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'devtools-baseclass' }), meta: { title: '基类配置' } },
|
||||||
{ path: '/devtools/datasource', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'devtools-datasource' }), meta: { title: '数据源配置' } },
|
{ path: '/devtools/datasource', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'devtools-datasource' }), meta: { title: '数据源配置' } },
|
||||||
@ -258,8 +258,8 @@ const routes: RouteRecordRaw[] = [
|
|||||||
{ path: '/sys/log/error', component: () => import('@/modules/sys/LogErrorView.vue'), meta: { title: '异常日志' } },
|
{ path: '/sys/log/error', component: () => import('@/modules/sys/LogErrorView.vue'), meta: { title: '异常日志' } },
|
||||||
{ path: '/sys/notice', component: () => import('@/modules/sys/NoticeListView.vue'), meta: { title: '通知公告' } },
|
{ path: '/sys/notice', component: () => import('@/modules/sys/NoticeListView.vue'), meta: { title: '通知公告' } },
|
||||||
{ path: '/sys/params', component: () => import('@/modules/sys/ParamsListView.vue'), meta: { title: '参数配置' } },
|
{ path: '/sys/params', component: () => import('@/modules/sys/ParamsListView.vue'), meta: { title: '参数配置' } },
|
||||||
{ path: '/sys/notice-user', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-notice-user' }), meta: { title: '用户通知' } },
|
{ path: '/sys/notice-user', component: () => import('@/modules/sys/noticeuser/NoticeUserListView.vue'), meta: { title: '用户通知' } },
|
||||||
{ path: '/sys/userManagement', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-userManagement' }), meta: { title: '全国运营中心' } },
|
{ path: '/sys/userManagement', redirect: '/sys/operation', meta: { title: '全国运营中心' } },
|
||||||
// W18 后台用户管理 5 个 (老 vue sys/user 模块, 真 view 已存在)
|
// W18 后台用户管理 5 个 (老 vue sys/user 模块, 真 view 已存在)
|
||||||
{ path: '/sys/user', component: () => import('@/modules/sys/UserListView.vue'), meta: { title: '用户管理' } },
|
{ path: '/sys/user', component: () => import('@/modules/sys/UserListView.vue'), meta: { title: '用户管理' } },
|
||||||
{ path: '/sys/role', component: () => import('@/modules/sys/RoleListView.vue'), meta: { title: '角色管理' } },
|
{ path: '/sys/role', component: () => import('@/modules/sys/RoleListView.vue'), meta: { title: '角色管理' } },
|
||||||
@ -275,7 +275,7 @@ const routes: RouteRecordRaw[] = [
|
|||||||
{ path: '/user/finance/revenue', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), props: () => ({ type: 3 }), meta: { title: '分账记录管理' } },
|
{ path: '/user/finance/revenue', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), props: () => ({ type: 3 }), meta: { title: '分账记录管理' } },
|
||||||
{ path: '/user/finance/transaction', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), meta: { title: '交易流水' } },
|
{ path: '/user/finance/transaction', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), meta: { title: '交易流水' } },
|
||||||
{ path: '/user/message', component: () => import('@/modules/user/message/MessageListView.vue'), meta: { title: '系统消息' } },
|
{ path: '/user/message', component: () => import('@/modules/user/message/MessageListView.vue'), meta: { title: '系统消息' } },
|
||||||
{ path: '/user/message/handel', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-message-handel' }), meta: { title: '待处理消息' } },
|
{ path: '/user/message/handel', component: () => import('@/modules/user/message/MessageListView.vue'), props: { status: 0 }, meta: { title: '待处理消息' } },
|
||||||
|
|
||||||
// W3.1 通用通配占位
|
// W3.1 通用通配占位
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user