diff --git a/src/pages/Order/List/index.tsx b/src/pages/Order/List/index.tsx index 6c3b0f9..4609e74 100644 --- a/src/pages/Order/List/index.tsx +++ b/src/pages/Order/List/index.tsx @@ -22,6 +22,7 @@ import { ordercontrollerRefundorder, ordercontrollerSyncorderbyid, ordercontrollerUpdateorderitems, + ordercontrollerExportorder, } from '@/servers/api/order'; import { productcontrollerSearchproducts } from '@/servers/api/product'; import { sitecontrollerAll } from '@/servers/api/site'; @@ -74,6 +75,7 @@ import { Tag, } from 'antd'; import React, { useMemo, useRef, useState } from 'react'; +import { request, useParams } from '@umijs/max'; import RelatedOrders from '../../Subscription/Orders/RelatedOrders'; const ListPage: React.FC = () => { @@ -489,20 +491,29 @@ const ListPage: React.FC = () => { // > // 批量导出 // , - { - + console.log(selectedRowKeys); try { - const { success, message: errMsg } = - await ordercontrollerExportorder({ + const res = await request('/order/order/export', { + method: 'GET', + params: { ids: selectedRowKeys, - }); - if (!success) { - throw new Error(errMsg); + } + }); + if (res?.success && res?.data?.csv) { + const blob = new Blob([res.data.csv], { type: 'text/csv;charset=utf-8;' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'customers.csv'; + a.click(); + URL.revokeObjectURL(url); + } else { + message.error(res.message || '导出失败'); } - message.success('导出成功'); actionRef.current?.reload(); setSelectedRowKeys([]); } catch (error: any) { @@ -513,7 +524,7 @@ const ListPage: React.FC = () => { }} > - diff --git a/src/pages/Statistics/Order/index.tsx b/src/pages/Statistics/Order/index.tsx index 8147e70..eab4eb0 100644 --- a/src/pages/Statistics/Order/index.tsx +++ b/src/pages/Statistics/Order/index.tsx @@ -21,7 +21,9 @@ import { Button, Space, Tag } from 'antd'; import dayjs from 'dayjs'; import ReactECharts from 'echarts-for-react'; import { useEffect, useMemo, useRef, useState } from 'react'; +import weekOfYear from 'dayjs/plugin/weekOfYear'; +dayjs.extend(weekOfYear); const highlightText = (text: string, keyword: string) => { if (!keyword) return text; const parts = text.split(new RegExp(`(${keyword})`, 'gi')); @@ -128,7 +130,21 @@ const ListPage: React.FC = () => { }); if (success) { const res = data?.sort(() => -1); - setXAxis(res?.map((v) => dayjs(v.order_date).format('YYYY-MM-DD'))); + const formatMap = { + month: 'YYYY-MM', + week: 'YYYY年第WW周', + day: 'YYYY-MM-DD', + }; + const format = formatMap[params.grouping] || 'YYYY-MM-DD'; + + if (params.grouping === 'week') { + setXAxis(res?.map((v) => { + const [year, week] = v.order_date.split('-'); + return `${year}年第${week}周`; + })); + } else { + setXAxis(res?.map((v) => dayjs(v.order_date).format(format))); + } setSeries([ { name: 'TOGO CPC订单数', @@ -583,6 +599,16 @@ const ListPage: React.FC = () => { name="date" /> {/* */} + { data: data?.inactiveRes?.map((v) => v.new_user_count)?.sort((_) => -1), label: { show: true, + formatter: function (params) { + if (!params.value) return ''; + return Math.abs(params.value) + +'\n' + +Math.abs(data?.inactiveRes?.find((item) => item.order_month === params.name)?.new_user_total || 0); + }, + color: '#000000', }, emphasis: { focus: 'series', @@ -52,6 +59,13 @@ const ListPage: React.FC = () => { data: data?.inactiveRes?.map((v) => v.old_user_count)?.sort((_) => -1), label: { show: true, + formatter: function (params) { + if (!params.value) return ''; + return Math.abs(params.value) + +'\n' + +Math.abs(data?.inactiveRes?.find((item) => item.order_month === params.name)?.old_user_total || 0); + }, + color: '#000000', }, emphasis: { focus: 'series', @@ -69,9 +83,12 @@ const ListPage: React.FC = () => { show: true, formatter: function (params) { if (!params.value) return ''; - return Math.abs(params.value); - }, - color: '#fff', + return Math.abs(params.value) + +'\n'+ + +Math.abs(data?.res?.find((item) => item.order_month === params.name && + item.first_order_month_group === v)?.total || 0); + }, + color: '#000000', }, data: xAxisData.map((month) => { return ( @@ -95,6 +112,7 @@ const ListPage: React.FC = () => { stack: 'total', label: { show: true, + }, emphasis: { focus: 'series',