diff --git a/components/analytics/AnalyticsMultiLineChart.uvue b/components/analytics/AnalyticsMultiLineChart.uvue new file mode 100644 index 00000000..b044bb4e --- /dev/null +++ b/components/analytics/AnalyticsMultiLineChart.uvue @@ -0,0 +1,123 @@ + + + + + diff --git a/components/analytics/AnalyticsUserGenderSection.uvue b/components/analytics/AnalyticsUserGenderSection.uvue new file mode 100644 index 00000000..41f67ab7 --- /dev/null +++ b/components/analytics/AnalyticsUserGenderSection.uvue @@ -0,0 +1,176 @@ + + + + + diff --git a/components/analytics/AnalyticsUserMapTable.uvue b/components/analytics/AnalyticsUserMapTable.uvue new file mode 100644 index 00000000..c3a5311e --- /dev/null +++ b/components/analytics/AnalyticsUserMapTable.uvue @@ -0,0 +1,242 @@ + + + + + diff --git a/layouts/admin/AdminLayout.uvue b/layouts/admin/AdminLayout.uvue index 3dc66dd2..1b0e05e1 100644 --- a/layouts/admin/AdminLayout.uvue +++ b/layouts/admin/AdminLayout.uvue @@ -47,12 +47,12 @@ /> - + - + @@ -215,8 +215,9 @@ onMounted(() => { background: #f0f2f5; } -.content { +.content-scroll { flex: 1; + overflow-y: scroll; background: #f0f2f5; } diff --git a/layouts/admin/components/AdminAside.uvue b/layouts/admin/components/AdminAside.uvue index 612834c9..a662125d 100644 --- a/layouts/admin/components/AdminAside.uvue +++ b/layouts/admin/components/AdminAside.uvue @@ -4,7 +4,7 @@ {{ collapsed ? 'M' : 'MALL' }} - + {{ menu.title }} - + @@ -46,15 +46,16 @@ const emit = defineEmits<{ function getIconText(icon: string): string { const iconMap: Record = { - 'home': 'H', - 'user': 'U', - 'product': 'P', - 'order': 'O', - 'marketing': 'M', - 'content': 'C', - 'finance': 'F', - 'statistic': 'S', - 'setting': 'T' + 'home': '🏠', + 'user': '👥', + 'product': '📦', + 'order': '📜', + 'marketing': '📉', + 'content': '📝', + 'finance': '💰', + 'statistic': '📊', + 'setting': '⚙️', + 'maintenance': '🛠️' } return iconMap[icon] || icon.charAt(0).toUpperCase() } @@ -107,6 +108,7 @@ function onLogoClick(): void { .aside-menu { flex: 1; padding: 8px 0; + overflow-y: scroll; } .menu-item { diff --git a/layouts/admin/components/AdminAside_old.uvue.bak b/layouts/admin/components/AdminAside_old.uvue.bak deleted file mode 100644 index 59073afb..00000000 --- a/layouts/admin/components/AdminAside_old.uvue.bak +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/layouts/admin/components/AdminSubsider.uvue b/layouts/admin/components/AdminSubsider.uvue index 1b621580..076e4f3b 100644 --- a/layouts/admin/components/AdminSubsider.uvue +++ b/layouts/admin/components/AdminSubsider.uvue @@ -4,7 +4,7 @@ {{ topMenuTitle }} - + {{ group.title }} @@ -20,7 +20,7 @@ {{ route.title }} - + @@ -79,6 +79,7 @@ function onRouteClick(routeId: string): void { .subsider-menu { flex: 1; padding: 8px 0; + overflow-y: scroll; } .menu-group { diff --git a/layouts/admin/components/AdminSubsider_old.uvue.bak b/layouts/admin/components/AdminSubsider_old.uvue.bak deleted file mode 100644 index a4d60bb7..00000000 --- a/layouts/admin/components/AdminSubsider_old.uvue.bak +++ /dev/null @@ -1,396 +0,0 @@ - - - - - diff --git a/layouts/admin/router/adminComponentMap.uts b/layouts/admin/router/adminComponentMap.uts index d8d8b71d..e1549903 100644 --- a/layouts/admin/router/adminComponentMap.uts +++ b/layouts/admin/router/adminComponentMap.uts @@ -18,15 +18,18 @@ import PlaceholderPage from '@/layouts/admin/components/PlaceholderPage.uvue' import HomeIndex from '@/layouts/admin/pages/HomeIndex.uvue' // 导入用户模块(纯组件,不包含 AdminLayout) +import UserStatistic from '@/pages/mall/admin/user/Statistic.uvue' import UserList from '@/pages/mall/admin/user/list.uvue' import UserLevel from '@/pages/mall/admin/user/level.uvue' import UserGroup from '@/pages/mall/admin/user/group.uvue' import UserLabel from '@/pages/mall/admin/user/label.uvue' +import MemberConfig from '@/pages/mall/admin/user/MemberConfig.uvue' // 其他用户模块组件暂时使用 PlaceholderPage // import UserGradeType from '@/pages/mall/admin/user/grade/type.uvue' // import UserGradeCard from '@/pages/mall/admin/user/grade/card.uvue' // import UserGradeRecord from '@/pages/mall/admin/user/grade/record.uvue' // import UserGradeRight from '@/pages/mall/admin/user/grade/right.uvue' +// import UserMemberConfig from '@/pages/mall/admin/user/MemberConfig.uvue' // 导入商品模块(纯组件,不包含 AdminLayout) import ProductList from '@/pages/mall/admin/product/list.uvue' @@ -39,6 +42,11 @@ import ProductProtection from '@/pages/mall/admin/product/protection.uvue' // 导入订单模块(纯组件,不包含 AdminLayout) import OrderList from '@/pages/mall/admin/order/list.uvue' +import OrderStatistic from '@/pages/mall/admin/order/order-statistics/index.uvue' +import OrderRefund from '@/pages/mall/admin/order/aftersales-order/index.uvue' +import OrderCashier from '@/pages/mall/admin/order/cashier-order/index.uvue' +import OrderVerify from '@/pages/mall/admin/order/write-off-records/index.uvue' +import OrderConfig from '@/pages/mall/admin/order/order-configuration/index.uvue' // 营销、内容、财务、数据、设置模块暂时使用 PlaceholderPage // 避免循环依赖问题 @@ -63,10 +71,12 @@ export const componentMap: Map = new Map([ ['HomeIndex', HomeIndex], // 用户模块 + ['UserStatistic', UserStatistic], ['UserList', UserList], ['UserLevel', UserLevel], ['UserGroup', UserGroup], ['UserLabel', UserLabel], + ['UserMemberConfig', MemberConfig], ['UserGradeType', PlaceholderPage], // 暂时使用占位组件 ['UserGradeCard', PlaceholderPage], ['UserGradeRecord', PlaceholderPage], @@ -83,6 +93,11 @@ export const componentMap: Map = new Map([ // 订单模块 ['OrderList', OrderList], + ['OrderStatistic', OrderStatistic], + ['OrderRefund', OrderRefund], + ['OrderCashier', OrderCashier], + ['OrderVerify', OrderVerify], + ['OrderConfig', OrderConfig], // 营销模块 - 暂时使用占位组件 ['MarketingCoupon', PlaceholderPage], diff --git a/layouts/admin/router/adminRoutes.uts b/layouts/admin/router/adminRoutes.uts index cd32859d..c782323f 100644 --- a/layouts/admin/router/adminRoutes.uts +++ b/layouts/admin/router/adminRoutes.uts @@ -72,8 +72,8 @@ export const topMenus: TopMenu[] = [ path: '/pages/mall/admin/user/list', order: 2, groups: [ - { id: 'user-manage', title: '用户管理', order: 1 }, - { id: 'user-grade', title: '会员管理', order: 2 } + { id: 'user-manage', title: '', order: 1 }, + { id: 'member-manage', title: '会员管理', order: 2 } ] }, { @@ -93,7 +93,7 @@ export const topMenus: TopMenu[] = [ path: '/pages/mall/admin/order/list', order: 4, groups: [ - { id: 'order-manage', title: '订单管理', order: 1 } + { id: 'order-manage', title: '', order: 1 } ] }, { @@ -168,6 +168,16 @@ export const routes: RouteRecord[] = [ }, // ========== 用户模块 ========== + { + id: 'user_statistic', + title: '用户统计', + path: '/pages/mall/admin/user/Statistic', + componentKey: 'UserStatistic', + parentId: 'user', + groupId: 'user-manage', + auth: ['admin-user-statistic-index'], + order: 1 + }, { id: 'user_list', title: '用户管理', @@ -176,16 +186,6 @@ export const routes: RouteRecord[] = [ parentId: 'user', groupId: 'user-manage', auth: ['admin-user-user-index'], - order: 1 - }, - { - id: 'user_level', - title: '用户等级', - path: '/pages/mall/admin/user/level', - componentKey: 'UserLevel', - parentId: 'user', - groupId: 'user-manage', - auth: ['user-user-level'], order: 2 }, { @@ -208,15 +208,35 @@ export const routes: RouteRecord[] = [ auth: ['user-user-label'], order: 4 }, + { + id: 'user_level', + title: '用户等级', + path: '/pages/mall/admin/user/level', + componentKey: 'UserLevel', + parentId: 'user', + groupId: 'user-manage', + auth: ['user-user-level'], + order: 5 + }, + { + id: 'user_member_config', + title: '用户配置', + path: '/pages/mall/admin/user/MemberConfig', + componentKey: 'UserMemberConfig', + parentId: 'user', + groupId: 'user-manage', + auth: ['admin-user-member-config'], + order: 6 + }, { id: 'user_type', title: '会员类型', path: '/pages/mall/admin/user/grade/type', componentKey: 'UserGradeType', parentId: 'user', - groupId: 'user-grade', + groupId: 'member-manage', auth: ['admin-user-member-type'], - order: 5 + order: 1 }, { id: 'user_card', @@ -224,9 +244,9 @@ export const routes: RouteRecord[] = [ path: '/pages/mall/admin/user/grade/card', componentKey: 'UserGradeCard', parentId: 'user', - groupId: 'user-grade', + groupId: 'member-manage', auth: ['admin-user-grade-card'], - order: 6 + order: 2 }, { id: 'user_record', @@ -234,9 +254,9 @@ export const routes: RouteRecord[] = [ path: '/pages/mall/admin/user/grade/record', componentKey: 'UserGradeRecord', parentId: 'user', - groupId: 'user-grade', + groupId: 'member-manage', auth: ['admin-user-grade-record'], - order: 7 + order: 3 }, { id: 'user_right', @@ -244,9 +264,9 @@ export const routes: RouteRecord[] = [ path: '/pages/mall/admin/user/grade/right', componentKey: 'UserGradeRight', parentId: 'user', - groupId: 'user-grade', + groupId: 'member-manage', auth: ['admin-user-grade-right'], - order: 8 + order: 4 }, // ========== 商品模块 ========== @@ -323,6 +343,16 @@ export const routes: RouteRecord[] = [ }, // ========== 订单模块 ========== + { + id: 'order_statistic', + title: '订单统计', + path: '/pages/mall/admin/order/statistic', + componentKey: 'OrderStatistic', + parentId: 'order', + groupId: 'order-manage', + auth: ['admin-order-statistic-index'], + order: 1 + }, { id: 'order_list', title: '订单管理', @@ -332,7 +362,47 @@ export const routes: RouteRecord[] = [ groupId: 'order-manage', auth: ['admin-order-storeOrder-index'], keepAlive: true, - order: 1 + order: 2 + }, + { + id: 'order_refund', + title: '售后订单', + path: '/pages/mall/admin/order/refund', + componentKey: 'OrderRefund', + parentId: 'order', + groupId: 'order-manage', + auth: ['admin-order-refund-index'], + order: 3 + }, + { + id: 'order_cashier', + title: '收银订单', + path: '/pages/mall/admin/order/cashier', + componentKey: 'OrderCashier', + parentId: 'order', + groupId: 'order-manage', + auth: ['admin-order-cashier-index'], + order: 4 + }, + { + id: 'order_verify', + title: '核销记录', + path: '/pages/mall/admin/order/verify', + componentKey: 'OrderVerify', + parentId: 'order', + groupId: 'order-manage', + auth: ['admin-order-verify-index'], + order: 5 + }, + { + id: 'order_config', + title: '订单配置', + path: '/pages/mall/admin/order/config', + componentKey: 'OrderConfig', + parentId: 'order', + groupId: 'order-manage', + auth: ['admin-order-config-index'], + order: 6 }, // ========== 营销模块 ========== diff --git a/pages/mall/admin/order/aftersales-order/index.uvue b/pages/mall/admin/order/aftersales-order/index.uvue index 5519b3e4..36ebdde2 100644 --- a/pages/mall/admin/order/aftersales-order/index.uvue +++ b/pages/mall/admin/order/aftersales-order/index.uvue @@ -1,18 +1,15 @@ diff --git a/pages/mall/admin/order/cashier-order/index.uvue b/pages/mall/admin/order/cashier-order/index.uvue index 39e53a8c..5aba5247 100644 --- a/pages/mall/admin/order/cashier-order/index.uvue +++ b/pages/mall/admin/order/cashier-order/index.uvue @@ -1,18 +1,15 @@ diff --git a/pages/mall/admin/order/list.uvue b/pages/mall/admin/order/list.uvue index 28fe926e..ffbcbe2a 100644 --- a/pages/mall/admin/order/list.uvue +++ b/pages/mall/admin/order/list.uvue @@ -1,15 +1,136 @@