From df642813c3ae4a81a354125e77dbe63095d4cd16 Mon Sep 17 00:00:00 2001 From: huangzhenbao <17818024429@163.com> Date: Wed, 4 Feb 2026 09:14:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/analytics/AnalyticsAreaChart.uvue | 12 +- .../analytics/AnalyticsMultiLineChart.uvue | 20 +- components/analytics/AnalyticsPieChart.uvue | 22 +- layouts/admin/router/adminComponentMap.uts | 25 +- layouts/admin/router/adminRoutes.uts | 20 + .../admin/marketing/combination/create.uvue | 440 +++++++++++++++++ .../admin/marketing/combination/list.uvue | 459 +++++++++++++++-- .../admin/marketing/combination/product.uvue | 465 ++++++++++++++++++ .../mall/admin/marketing/integral/config.uvue | 272 ++++++++++ pages/mall/admin/marketing/integral/list.uvue | 431 +++++++++++++--- .../mall/admin/marketing/integral/order.uvue | 408 +++++++++++++++ .../mall/admin/marketing/integral/record.uvue | 277 +++++++++++ .../admin/marketing/integral/statistic.uvue | 182 +------ .../mall/admin/marketing/lottery/config.uvue | 210 +++++++- pages/mall/admin/marketing/lottery/list.uvue | 452 ++++++++++++++++- pages/mall/analytics/profile.uvue | 3 +- 16 files changed, 3376 insertions(+), 322 deletions(-) create mode 100644 pages/mall/admin/marketing/combination/create.uvue create mode 100644 pages/mall/admin/marketing/combination/product.uvue create mode 100644 pages/mall/admin/marketing/integral/config.uvue create mode 100644 pages/mall/admin/marketing/integral/order.uvue create mode 100644 pages/mall/admin/marketing/integral/record.uvue diff --git a/components/analytics/AnalyticsAreaChart.uvue b/components/analytics/AnalyticsAreaChart.uvue index f4ef4e68..7cb190f7 100644 --- a/components/analytics/AnalyticsAreaChart.uvue +++ b/components/analytics/AnalyticsAreaChart.uvue @@ -79,8 +79,14 @@ export default { }) const option = { - grid: { left: 40, right: 20, top: 20, bottom: 40 }, - tooltip: { trigger: 'axis' }, + grid: { left: 40, right: 20, top: 40, bottom: 40 }, + tooltip: { + show: true, + trigger: 'axis', + backgroundColor: 'rgba(255, 255, 255, 0.9)', + textStyle: { color: '#666', fontSize: 12 }, + confine: true + }, xAxis: { type: 'category', boundaryGap: false, @@ -95,9 +101,11 @@ export default { axisLabel: { color: 'rgba(0,0,0,0.45)', fontSize: 10 } }, series: [{ + name: '数据', data: d, type: 'line', smooth: true, + showSymbol: false, symbolSize: 0, lineStyle: { width: 2, color: '#1890ff' }, areaStyle: { diff --git a/components/analytics/AnalyticsMultiLineChart.uvue b/components/analytics/AnalyticsMultiLineChart.uvue index b044bb4e..91ba0e60 100644 --- a/components/analytics/AnalyticsMultiLineChart.uvue +++ b/components/analytics/AnalyticsMultiLineChart.uvue @@ -75,7 +75,8 @@ export default { name: s.name, type: 'line', smooth: true, - symbolSize: 6, + showSymbol: false, + symbolSize: 0, itemStyle: { color: s.color }, lineStyle: { width: 2 }, data: s.data @@ -83,19 +84,26 @@ export default { }) const option = { - grid: { left: 50, right: 30, top: 20, bottom: 40 }, - tooltip: { trigger: 'axis' }, + grid: { left: 50, right: 30, top: 40, bottom: 60 }, + tooltip: { + show: true, + trigger: 'axis', + confine: true, + backgroundColor: 'rgba(255, 255, 255, 0.9)', + textStyle: { color: '#666', fontSize: 12 } + }, legend: { + show: true, top: 0, - left: 'center', + right: 20, itemWidth: 12, itemHeight: 2, - textStyle: { fontSize: 12, color: '#333' } + textStyle: { fontSize: 11, color: '#666' } }, xAxis: { type: 'category', boundaryGap: false, - data: this.xLabels, + data: this.xLabels.map(s => String(s)), axisLine: { lineStyle: { color: 'rgba(0,0,0,0.1)' } }, axisLabel: { color: 'rgba(0,0,0,0.45)', diff --git a/components/analytics/AnalyticsPieChart.uvue b/components/analytics/AnalyticsPieChart.uvue index 83b3b7ef..3b7f1c0b 100644 --- a/components/analytics/AnalyticsPieChart.uvue +++ b/components/analytics/AnalyticsPieChart.uvue @@ -69,18 +69,29 @@ export default { if (!this.items || this.items.length === 0) return const data = (this.items as Array).map((it) => { + const itemStyle = it.itemStyle ? this.toPlainObject(it.itemStyle) : {} as any + if (it.color && !itemStyle.color) { + itemStyle.color = it.color + } return { - name: String(it.name), + name: String(it.name || it.label), value: Number(it.value), - itemStyle: this.toPlainObject(it.itemStyle) + itemStyle: itemStyle } }) const option = { - tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' }, + color: ['#1890ff', '#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80'], + tooltip: { + show: true, + trigger: 'item', + formatter: '{b}: {c} ({d}%)', + backgroundColor: 'rgba(255, 255, 255, 0.9)', + textStyle: { color: '#666', fontSize: 12 } + }, legend: { orient: 'vertical', - right: 10, + right: 20, top: 'center', itemWidth: 10, itemHeight: 10, @@ -89,7 +100,7 @@ export default { series: [{ type: 'pie', radius: ['45%', '70%'], - center: ['35%', '50%'], + center: ['40%', '50%'], data: data, avoidLabelOverlap: true, label: { @@ -97,6 +108,7 @@ export default { }, labelLine: { show: false }, itemStyle: { + borderRadius: 4, borderWidth: 2, borderColor: '#fff' } diff --git a/layouts/admin/router/adminComponentMap.uts b/layouts/admin/router/adminComponentMap.uts index 26034adf..4709307a 100644 --- a/layouts/admin/router/adminComponentMap.uts +++ b/layouts/admin/router/adminComponentMap.uts @@ -52,6 +52,15 @@ import CmsCategory from '@/pages/mall/admin/cms/category/list.uvue' import MarketingCouponList from '@/pages/mall/admin/marketing/coupon/list.uvue' import MarketingCouponUser from '@/pages/mall/admin/marketing/coupon/user.uvue' import MarketingIntegralStatistic from '@/pages/mall/admin/marketing/integral/statistic.uvue' +import MarketingIntegralProduct from '@/pages/mall/admin/marketing/integral/list.uvue' +import MarketingIntegralOrder from '@/pages/mall/admin/marketing/integral/order.uvue' +import MarketingIntegralRecord from '@/pages/mall/admin/marketing/integral/record.uvue' +import MarketingIntegralConfig from '@/pages/mall/admin/marketing/integral/config.uvue' +import MarketingLotteryList from '@/pages/mall/admin/marketing/lottery/list.uvue' +import MarketingLotteryConfig from '@/pages/mall/admin/marketing/lottery/config.uvue' +import MarketingCombinationProduct from '@/pages/mall/admin/marketing/combination/product.uvue' +import MarketingCombinationList from '@/pages/mall/admin/marketing/combination/list.uvue' +import MarketingCombinationCreate from '@/pages/mall/admin/marketing/combination/create.uvue' // 导入财务模块(纯组件) import FinanceTransactionStats from '@/pages/mall/admin/finance/transaction_stats.uvue' @@ -124,18 +133,20 @@ export const componentMap: Map = new Map([ ['MarketingCouponUser', MarketingCouponUser], // 2. 积分管理 ['MarketingIntegralStatistic', MarketingIntegralStatistic], - ['MarketingIntegralProduct', PlaceholderPage], - ['MarketingIntegralOrder', PlaceholderPage], - ['MarketingIntegralRecord', PlaceholderPage], + ['MarketingIntegralProduct', MarketingIntegralProduct], + ['MarketingIntegralOrder', MarketingIntegralOrder], + ['MarketingIntegralRecord', MarketingIntegralRecord], + ['MarketingIntegralConfig', MarketingIntegralConfig], // 3. 抽奖管理 - ['MarketingLotteryList', PlaceholderPage], - ['MarketingLotteryConfig', PlaceholderPage], + ['MarketingLotteryList', MarketingLotteryList], + ['MarketingLotteryConfig', MarketingLotteryConfig], // 4. 砍价管理 ['MarketingBargainProduct', PlaceholderPage], ['MarketingBargainList', PlaceholderPage], // 5. 拼团管理 - ['MarketingCombinationProduct', PlaceholderPage], - ['MarketingCombinationList', PlaceholderPage], + ['MarketingCombinationProduct', MarketingCombinationProduct], + ['MarketingCombinationList', MarketingCombinationList], + ['MarketingCombinationCreate', MarketingCombinationCreate], // 6. 秒杀管理 ['MarketingSeckillList', PlaceholderPage], ['MarketingSeckillProduct', PlaceholderPage], diff --git a/layouts/admin/router/adminRoutes.uts b/layouts/admin/router/adminRoutes.uts index f48e12db..c9014968 100644 --- a/layouts/admin/router/adminRoutes.uts +++ b/layouts/admin/router/adminRoutes.uts @@ -505,6 +505,16 @@ export const routes: RouteRecord[] = [ auth: ['admin-marketing-integral-record'], order: 4 }, + { + id: 'marketing_integral_config', + title: '积分配置', + path: '/pages/mall/admin/marketing/integral/config', + componentKey: 'MarketingIntegralConfig', + parentId: 'marketing', + groupId: 'marketing-integral', + auth: ['admin-marketing-integral-config'], + order: 5 + }, // 3. 抽奖管理 { id: 'marketing_lottery_list', @@ -568,6 +578,16 @@ export const routes: RouteRecord[] = [ auth: ['admin-marketing-combination-index'], order: 2 }, + { + id: 'marketing_combination_create', + title: '添加拼团商品', + path: '/pages/mall/admin/marketing/combination/create', + componentKey: 'MarketingCombinationCreate', + parentId: 'marketing', + groupId: 'marketing-combination', + auth: ['admin-marketing-combination-create'], + hidden: true + }, // 6. 秒杀管理 { id: 'marketing_seckill_list', diff --git a/pages/mall/admin/marketing/combination/create.uvue b/pages/mall/admin/marketing/combination/create.uvue new file mode 100644 index 00000000..9e9f35b3 --- /dev/null +++ b/pages/mall/admin/marketing/combination/create.uvue @@ -0,0 +1,440 @@ +