admin_new P0+P1 全批次合并 (84 commits) #2
62
src/modules/other/help/HelpListView.vue
Normal file
62
src/modules/other/help/HelpListView.vue
Normal file
@ -0,0 +1,62 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* F006 帮助中心 - P1 真 view
|
||||
*
|
||||
* 走 /other/help/page
|
||||
* 真实接口 (2026-08-07 探测: 200, total=1)
|
||||
* 字段: id/title/content/pid/sort/createTime
|
||||
*/
|
||||
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 HelpItem {
|
||||
id: string
|
||||
title: string
|
||||
content: string
|
||||
pid: string
|
||||
sort: number
|
||||
createTime: string
|
||||
}
|
||||
|
||||
const list = ref<HelpItem[]>([])
|
||||
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: 240 },
|
||||
{ prop: 'sort', label: '排序', width: 90, formatter: (r: HelpItem) => String(r.sort ?? 0) },
|
||||
{ prop: 'createTime', label: '创建时间', width: 180 }
|
||||
]
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const resp: any = await httpGet('/other/help/page', { page: query.page, limit: query.limit })
|
||||
list.value = resp?.list || []
|
||||
total.value = Number(resp?.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>
|
||||
61
src/modules/other/information/InformationListView.vue
Normal file
61
src/modules/other/information/InformationListView.vue
Normal file
@ -0,0 +1,61 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* F006 资讯列表 - P1 真 view
|
||||
*
|
||||
* 走 /other/information/page
|
||||
* 真实接口 (2026-08-07 探测: 200, total=7)
|
||||
* 字段: id/title/categoryId/categoryName/content/createTime
|
||||
*/
|
||||
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 Info {
|
||||
id: string
|
||||
title: string
|
||||
categoryId: string
|
||||
categoryName: string
|
||||
createTime: string
|
||||
}
|
||||
|
||||
const list = ref<Info[]>([])
|
||||
const total = ref(0)
|
||||
const loading = ref(false)
|
||||
const query = reactive({ page: 1, limit: 10 })
|
||||
|
||||
const columns = [
|
||||
{ prop: 'id', label: 'ID', width: 90 },
|
||||
{ prop: 'title', label: '资讯标题', minWidth: 280 },
|
||||
{ prop: 'categoryName', label: '分类', width: 140, formatter: (r: Info) => r.categoryName || '--' },
|
||||
{ prop: 'createTime', label: '发布时间', width: 180 }
|
||||
]
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const resp: any = await httpGet('/other/information/page', { page: query.page, limit: query.limit })
|
||||
list.value = resp?.list || []
|
||||
total.value = Number(resp?.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>
|
||||
80
src/modules/sys/operation/OperationListView.vue
Normal file
80
src/modules/sys/operation/OperationListView.vue
Normal file
@ -0,0 +1,80 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* F006 运营中心 - P1 真 view
|
||||
*
|
||||
* 走 /sys/operation/pageList (type 区分: 1全国 2省级 3县级 4协会)
|
||||
* 真实接口 (2026-08-07 探测: 200, total=1)
|
||||
* 字段: id/name/type/provinceName/cityName/areaName/memberNo/rebateRadio/status/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 Operation {
|
||||
id: string
|
||||
name: string
|
||||
type: number
|
||||
provinceName: string | null
|
||||
cityName: string | null
|
||||
areaName: string | null
|
||||
memberNo: string | null
|
||||
rebateRadio: number | null
|
||||
status: number
|
||||
createDate: string
|
||||
}
|
||||
|
||||
const props = defineProps<{ type?: number }>()
|
||||
|
||||
const TITLES: Record<number, string> = { 1: '全国运营中心', 2: '省级运营中心', 3: '县级运营中心', 4: '行业协会运营' }
|
||||
const STATUS_MAP: Record<number, { label: string; type: string }> = { 0: { label: '停用', type: 'danger' }, 1: { label: '启用', type: 'success' } }
|
||||
|
||||
const list = ref<Operation[]>([])
|
||||
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: 'provinceName', label: '省份', width: 120, formatter: (r: Operation) => r.provinceName || '--' },
|
||||
{ prop: 'cityName', label: '城市', width: 120, formatter: (r: Operation) => r.cityName || '--' },
|
||||
{ prop: 'areaName', label: '区县', width: 120, formatter: (r: Operation) => r.areaName || '--' },
|
||||
{ prop: 'memberNo', label: '会员号', width: 140, formatter: (r: Operation) => r.memberNo || '--' },
|
||||
{ prop: 'rebateRadio', label: '返佣比例', width: 100, formatter: (r: Operation) => (r.rebateRadio ?? 0) + '%' },
|
||||
{ prop: 'status', label: '状态', width: 100, slot: 'status' },
|
||||
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||
]
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const resp: any = await httpGet('/sys/operation/pageList', { page: query.page, limit: query.limit, ...(props.type ? { type: props.type } : {}) })
|
||||
list.value = resp?.list || []
|
||||
total.value = Number(resp?.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="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="true" row-key="id" empty-text="暂无数据" @page-change="onPageChange"
|
||||
@limit-change="onLimitChange">
|
||||
<template #status="{ row }">
|
||||
<el-tag :type="STATUS_MAP[row.status]?.type || '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>
|
||||
83
src/modules/user/finance/AccountTransactionListView.vue
Normal file
83
src/modules/user/finance/AccountTransactionListView.vue
Normal file
@ -0,0 +1,83 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* F006 财务流水 - P1 真 view
|
||||
*
|
||||
* 走 /user/accounttransaction/page (4 条路由共用, type 区分)
|
||||
* 真实接口 (2026-08-07 探测: 200, total=405)
|
||||
* 字段: id/userId/accountType/type/amount/balanceAfter/payTime/payType/status/orderCode/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 Tx {
|
||||
id: string
|
||||
userId: string
|
||||
accountType: number | null
|
||||
type: number | null
|
||||
amount: number
|
||||
balanceAfter: number | null
|
||||
payTime: string | null
|
||||
payType: number | null
|
||||
status: number
|
||||
orderCode: string | null
|
||||
createDate: string
|
||||
}
|
||||
|
||||
const props = defineProps<{ type?: number }>()
|
||||
|
||||
const TITLES: Record<number, string> = { 1: '充值管理', 2: '提现管理', 3: '分账记录管理' }
|
||||
const STATUS_MAP: Record<number, { label: string; type: string }> = {
|
||||
0: { label: '待审核', type: 'warning' },
|
||||
1: { label: '处理中', type: 'primary' },
|
||||
2: { label: '已驳回', type: 'danger' },
|
||||
3: { label: '已完成', type: 'success' }
|
||||
}
|
||||
|
||||
const list = ref<Tx[]>([])
|
||||
const total = ref(0)
|
||||
const loading = ref(false)
|
||||
const query = reactive({ page: 1, limit: 10 })
|
||||
|
||||
const columns = [
|
||||
{ prop: 'orderCode', label: '单号', minWidth: 180, formatter: (r: Tx) => r.orderCode || '--' },
|
||||
{ prop: 'amount', label: '金额', width: 120, formatter: (r: Tx) => '¥' + Number(r.amount ?? 0).toFixed(2) },
|
||||
{ prop: 'status', label: '状态', width: 110, slot: 'status' },
|
||||
{ prop: 'payType', label: '支付方式', width: 110, formatter: (r: Tx) => (r.payType === 1 ? '余额' : r.payType === 2 ? '微信' : r.payType === 3 ? '支付宝' : '--') },
|
||||
{ prop: 'payTime', label: '支付时间', width: 180, formatter: (r: Tx) => r.payTime || '--' },
|
||||
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||
]
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const resp: any = await httpGet('/user/accounttransaction/page', { page: query.page, limit: query.limit, ...(props.type ? { type: props.type } : {}) })
|
||||
list.value = resp?.list || []
|
||||
total.value = Number(resp?.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="TITLES[props.type ?? 0] || '交易流水'" :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 || '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>
|
||||
71
src/modules/user/message/MessageListView.vue
Normal file
71
src/modules/user/message/MessageListView.vue
Normal file
@ -0,0 +1,71 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* F006 系统消息 - P1 真 view
|
||||
*
|
||||
* 走 /user/message/page
|
||||
* 真实接口 (2026-08-07 探测: 200, total=112)
|
||||
* 字段: id/type/pushType/name/content/readFlag/itemCode/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 Msg {
|
||||
id: string
|
||||
type: number
|
||||
pushType: number | null
|
||||
name: string
|
||||
content: string
|
||||
readFlag: number
|
||||
itemCode: string | null
|
||||
createDate: string
|
||||
}
|
||||
|
||||
const list = ref<Msg[]>([])
|
||||
const total = ref(0)
|
||||
const loading = ref(false)
|
||||
const query = reactive({ page: 1, limit: 10 })
|
||||
|
||||
const READ_MAP: Record<number, { label: string; type: string }> = { 0: { label: '未读', type: 'danger' }, 1: { label: '已读', type: 'success' } }
|
||||
|
||||
const columns = [
|
||||
{ prop: 'id', label: 'ID', width: 90 },
|
||||
{ prop: 'name', label: '消息名称', minWidth: 180 },
|
||||
{ prop: 'content', label: '内容', minWidth: 280 },
|
||||
{ prop: 'readFlag', label: '状态', width: 100, slot: 'read' },
|
||||
{ prop: 'createDate', label: '创建时间', width: 180 }
|
||||
]
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const resp: any = await httpGet('/user/message/page', { page: query.page, limit: query.limit })
|
||||
list.value = resp?.list || []
|
||||
total.value = Number(resp?.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 || '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>
|
||||
@ -203,13 +203,13 @@ const routes: RouteRecordRaw[] = [
|
||||
{ path: '/message/sms-log', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-sms-log' }), meta: { title: '短信日志' } },
|
||||
{ path: '/message/mail-template', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-mail-template' }), meta: { title: '邮件模板' } },
|
||||
{ path: '/message/mail-log', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'message-mail-log' }), meta: { title: '邮件日志' } },
|
||||
// 4 个运营中心
|
||||
{ path: '/sys/operation', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-operation-country' }), meta: { title: '全国运营中心' } },
|
||||
{ path: '/sys/operation/province', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-operation-province' }), meta: { title: '省级运营中心' } },
|
||||
{ path: '/sys/operation/county', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-operation-county' }), meta: { title: '县级运营中心' } },
|
||||
{ path: '/sys/operation/association', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'sys-operation-association' }), meta: { title: '行业协会运营' } },
|
||||
// 3 个资讯类
|
||||
{ path: '/other/information', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-information' }), meta: { title: '资讯列表' } },
|
||||
// 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/province', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 2 }), meta: { title: '省级运营中心' } },
|
||||
{ path: '/sys/operation/county', component: () => import('@/modules/sys/operation/OperationListView.vue'), props: () => ({ type: 3 }), 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)
|
||||
{ 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/category/zx', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-category-zx' }), meta: { title: '资讯分类' } },
|
||||
// devtools 5 个
|
||||
@ -239,8 +239,8 @@ const routes: RouteRecordRaw[] = [
|
||||
{ path: '/other/brand', component: () => import('@/modules/other/supplierBrand/SupplierBrandListView.vue'), meta: { title: '品牌管理' } },
|
||||
// W18 真 view 切换 (原 MockTableView -> 真页面)
|
||||
{ path: '/other/category/good', component: () => import('@/modules/other/categoryGood/CategoryGoodListView.vue'), meta: { title: '平台分类' } },
|
||||
{ path: '/other/help', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-help' }), meta: { title: '帮助中心' } },
|
||||
{ path: '/other/guide', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'other-guide' }), meta: { title: '内容列表' } },
|
||||
{ path: '/other/help', component: () => import('@/modules/other/help/HelpListView.vue'), meta: { title: '帮助中心' } },
|
||||
{ path: '/other/guide', component: () => import('@/modules/other/operateguide/OperateguideListView.vue'), meta: { title: '内容列表' } },
|
||||
{ path: '/other/textconfig', component: () => import('@/modules/other/textconfig/TextconfigListView.vue'), meta: { title: '常量配置' } },
|
||||
{ path: '/other/groupbuy', component: () => import('@/modules/other/groupbuy/GroupbuyListView.vue'), meta: { title: '拼团活动' } },
|
||||
{ path: '/other/seckill', component: () => import('@/modules/other/seckill/SeckillListView.vue'), meta: { title: '秒杀活动' } },
|
||||
@ -270,11 +270,11 @@ const routes: RouteRecordRaw[] = [
|
||||
{ path: '/user/enterprise/level', component: () => import('@/modules/user/enterpriselevel/EnterpriselevelListView.vue'), meta: { title: '企业等级管理' } },
|
||||
{ path: '/user/enterprise/rating', component: () => import('@/modules/user/enterpriserating/EnterpriseratingListView.vue'), meta: { title: '供应商评级' } },
|
||||
{ path: '/user/enterprise/score', component: () => import('@/modules/user/enterprisescore/EnterprisescoreListView.vue'), meta: { title: '供应商评分' } },
|
||||
{ path: '/user/finance/recharge', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-finance-recharge', queryParams: { type: 1 } }), meta: { title: '充值管理' } },
|
||||
{ path: '/user/finance/recharge-tx', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-finance-recharge-tx', queryParams: { type: 2 } }), meta: { title: '提现管理' } },
|
||||
{ path: '/user/finance/revenue', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-finance-revenue', queryParams: { type: 3 } }), meta: { title: '分账记录管理' } },
|
||||
{ path: '/user/finance/transaction', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-finance-transaction' }), meta: { title: '交易流水' } },
|
||||
{ path: '/user/message', component: () => import('@/modules/generic/MockTableView.vue'), props: () => ({ configKey: 'user-message' }), meta: { title: '系统消息' } },
|
||||
{ path: '/user/finance/recharge', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), props: () => ({ type: 1 }), meta: { title: '充值管理' } },
|
||||
{ path: '/user/finance/recharge-tx', component: () => import('@/modules/user/finance/AccountTransactionListView.vue'), props: () => ({ type: 2 }), 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/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: '待处理消息' } },
|
||||
|
||||
// W3.1 通用通配占位
|
||||
|
||||
Loading…
Reference in New Issue
Block a user