style: 统一中文标点符号为英文格式

This commit is contained in:
tikkhun 2025-11-21 17:16:30 +08:00
parent 7234c4ae55
commit 429a844563
16 changed files with 83 additions and 83 deletions

View File

@ -124,7 +124,7 @@ export default defineConfig({
}, },
], ],
}, },
// 新增:订阅管理路由分组(权限复用 canSeeOrder // 新增:订阅管理路由分组(权限复用 canSeeOrder)
{ {
name: '订阅管理', name: '订阅管理',
path: '/subscription', path: '/subscription',

View File

@ -16,7 +16,7 @@ import { usercontrollerGetuser } from './servers/api/user';
dayjs.locale('zh-cn'); dayjs.locale('zh-cn');
// 全局初始化数据配置,用于 Layout 用户信息和权限初始化 // 全局初始化数据配置,用于 Layout 用户信息和权限初始化
// 更多信息见文档https://umijs.org/docs/api/runtime-config#getinitialstate // 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState(): Promise<{ export async function getInitialState(): Promise<{
user?: Record<string, any>; user?: Record<string, any>;
categoryList?: ProSchemaValueEnumObj; categoryList?: ProSchemaValueEnumObj;

View File

@ -2,7 +2,7 @@ import { useEffect, useState } from 'react';
import FingerprintJS from '@fingerprintjs/fingerprintjs'; import FingerprintJS from '@fingerprintjs/fingerprintjs';
/** /**
* Hook: 获取设备指纹visitorId * Hook: 获取设备指纹(visitorId)
*/ */
export function useDeviceFingerprint() { export function useDeviceFingerprint() {
const [fingerprint, setFingerprint] = useState<string | null>(null); const [fingerprint, setFingerprint] = useState<string | null>(null);

View File

@ -7,24 +7,24 @@ import dayjs from 'dayjs';
import { ordercontrollerGetordersales } from '@/servers/api/order'; import { ordercontrollerGetordersales } from '@/servers/api/order';
import { sitecontrollerAll } from '@/servers/api/site'; import { sitecontrollerAll } from '@/servers/api/site';
// 列表行数据结构(订单商品聚合) // 列表行数据结构(订单商品聚合)
interface OrderItemAggRow { interface OrderItemAggRow {
externalProductId: number; // 商品ID(来自 WooCommerce 产品ID externalProductId: number; // 商品ID(来自 WooCommerce 产品ID)
externalVariationId: number; // 变体ID(来自 WooCommerce 变体ID externalVariationId: number; // 变体ID(来自 WooCommerce 变体ID)
name: string; // 商品名称 name: string; // 商品名称
totalQuantity: number; // 总售出数量(时间范围内) totalQuantity: number; // 总售出数量(时间范围内)
totalOrders: number; // 涉及订单数(去重) totalOrders: number; // 涉及订单数(去重)
firstOrderCount: number; // 客户首单次数(该商品) firstOrderCount: number; // 客户首单次数(该商品)
secondOrderCount: number; // 客户第二次购买次数(该商品) secondOrderCount: number; // 客户第二次购买次数(该商品)
thirdOrderCount: number; // 客户第三次购买次数(该商品) thirdOrderCount: number; // 客户第三次购买次数(该商品)
moreThirdOrderCount: number; // 客户超过三次购买次数(该商品) moreThirdOrderCount: number; // 客户超过三次购买次数(该商品)
} }
const OrderItemsPage: React.FC = () => { const OrderItemsPage: React.FC = () => {
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const { message } = App.useApp(); const { message } = App.useApp();
// 列配置(中文标题,符合当前项目风格;显示英文默认语言可后续走国际化) // 列配置(中文标题,符合当前项目风格;显示英文默认语言可后续走国际化)
const columns: ProColumns<OrderItemAggRow>[] = [ const columns: ProColumns<OrderItemAggRow>[] = [
{ {
title: '商品名称', title: '商品名称',
@ -85,7 +85,7 @@ const OrderItemsPage: React.FC = () => {
dataIndex: 'siteId', dataIndex: 'siteId',
valueType: 'select', valueType: 'select',
request: async () => { request: async () => {
// 拉取站点列表(后台 /site/all // 拉取站点列表(后台 /site/all)
const { data = [] } = await sitecontrollerAll(); const { data = [] } = await sitecontrollerAll();
return (data || []).map((item: any) => ({ label: item.siteName, value: item.id })); return (data || []).map((item: any) => ({ label: item.siteName, value: item.id }));
}, },
@ -103,12 +103,12 @@ const OrderItemsPage: React.FC = () => {
}, },
]; ];
// 表格请求方法调用 /order/getOrderSales 接口并设置 isSource=true 获取订单项聚合 // 表格请求方法:调用 /order/getOrderSales 接口并设置 isSource=true 获取订单项聚合
const request: ProTableProps<OrderItemAggRow>['request'] = async (params:any) => { const request: ProTableProps<OrderItemAggRow>['request'] = async (params:any) => {
try { try {
const { current = 1, pageSize = 10, siteId, name } = params as any; const { current = 1, pageSize = 10, siteId, name } = params as any;
const [startDate, endDate] = (params as any).dateRange || []; const [startDate, endDate] = (params as any).dateRange || [];
// 调用后端接口isSource=true 表示按订单项聚合) // 调用后端接口(isSource=true 表示按订单项聚合)
const resp = await ordercontrollerGetordersales({ const resp = await ordercontrollerGetordersales({
current, current,
pageSize, pageSize,

View File

@ -824,7 +824,7 @@ const Detail: React.FC<{
return ( return (
<div> <div>
<div> <div>
company company:
<span> <span>
{record?.shipping?.company || {record?.shipping?.company ||
record?.billing?.company || record?.billing?.company ||
@ -832,7 +832,7 @@ const Detail: React.FC<{
</span> </span>
</div> </div>
<div> <div>
first_name first_name:
<span> <span>
{record?.shipping?.first_name || {record?.shipping?.first_name ||
record?.billing?.first_name || record?.billing?.first_name ||
@ -840,7 +840,7 @@ const Detail: React.FC<{
</span> </span>
</div> </div>
<div> <div>
last_name last_name:
<span> <span>
{record?.shipping?.last_name || {record?.shipping?.last_name ||
record?.billing?.last_name || record?.billing?.last_name ||
@ -848,7 +848,7 @@ const Detail: React.FC<{
</span> </span>
</div> </div>
<div> <div>
country country:
<span> <span>
{record?.shipping?.country || {record?.shipping?.country ||
record?.billing?.country || record?.billing?.country ||
@ -856,19 +856,19 @@ const Detail: React.FC<{
</span> </span>
</div> </div>
<div> <div>
state state:
<span> <span>
{record?.shipping?.state || record?.billing?.state || '-'} {record?.shipping?.state || record?.billing?.state || '-'}
</span> </span>
</div> </div>
<div> <div>
city city:
<span> <span>
{record?.shipping?.city || record?.billing?.city || '-'} {record?.shipping?.city || record?.billing?.city || '-'}
</span> </span>
</div> </div>
<div> <div>
postcode postcode:
<span> <span>
{record?.shipping?.postcode || {record?.shipping?.postcode ||
record?.billing?.postcode || record?.billing?.postcode ||
@ -876,13 +876,13 @@ const Detail: React.FC<{
</span> </span>
</div> </div>
<div> <div>
phone phone:
<span> <span>
{record?.shipping?.phone || record?.billing?.phone || '-'} {record?.shipping?.phone || record?.billing?.phone || '-'}
</span> </span>
</div> </div>
<div> <div>
address_1 address_1:
<span> <span>
{record?.shipping?.address_1 || {record?.shipping?.address_1 ||
record?.billing?.address_1 || record?.billing?.address_1 ||
@ -902,7 +902,7 @@ const Detail: React.FC<{
<ul> <ul>
{record?.items?.map((item: any) => ( {record?.items?.map((item: any) => (
<li key={item.id}> <li key={item.id}>
{item.name}{item.quantity} {item.name}:{item.quantity}
</li> </li>
))} ))}
</ul> </ul>
@ -926,7 +926,7 @@ const Detail: React.FC<{
<ul> <ul>
{record?.sales?.map((item: any) => ( {record?.sales?.map((item: any) => (
<li key={item.id}> <li key={item.id}>
{item.name}{item.quantity} {item.name}:{item.quantity}
</li> </li>
))} ))}
</ul> </ul>
@ -1039,7 +1039,7 @@ const Detail: React.FC<{
: [] : []
} }
> >
<div> {v?.orderIds?.join(',')}</div> <div>: {v?.orderIds?.join(',')}</div>
{v?.items?.map((item) => ( {v?.items?.map((item) => (
<div> <div>
{item.name}: {item.quantity} {item.name}: {item.quantity}

View File

@ -192,7 +192,7 @@ const ListPage: React.FC = () => {
<div> <div>
{record?.first_hot_purchase?.map((v) => ( {record?.first_hot_purchase?.map((v) => (
<div> <div>
{v.name} :{v.user_count} :{v.name} :{v.user_count}
</div> </div>
))} ))}
</div> </div>
@ -206,7 +206,7 @@ const ListPage: React.FC = () => {
<div> <div>
{record?.second_hot_purchase?.map((v) => ( {record?.second_hot_purchase?.map((v) => (
<div> <div>
{v.name} :{v.user_count} :{v.name} :{v.user_count}
</div> </div>
))} ))}
</div> </div>
@ -220,7 +220,7 @@ const ListPage: React.FC = () => {
<div> <div>
{record?.third_hot_purchase?.map((v) => ( {record?.third_hot_purchase?.map((v) => (
<div> <div>
{v.name} :{v.user_count} :{v.name} :{v.user_count}
</div> </div>
))} ))}
</div> </div>

View File

@ -157,7 +157,7 @@ const ListPage: React.FC = () => {
}} }}
columns={columns} columns={columns}
dateFormatter="number" dateFormatter="number"
footer={() => `总计 ${total}`} footer={() => `总计: ${total}`}
toolBarRender={() => [ toolBarRender={() => [
<Button <Button
type="primary" type="primary"

View File

@ -245,7 +245,7 @@ const CreateForm: React.FC<{
/> />
<ProFormDependency name={['items']}> <ProFormDependency name={['items']}>
{({ items }) => { {({ items }) => {
return '数量' + items?.reduce((acc, cur) => acc + cur.quantity, 0); return '数量:' + items?.reduce((acc, cur) => acc + cur.quantity, 0);
}} }}
</ProFormDependency> </ProFormDependency>
<ProFormList<API.PurchaseOrderItem> <ProFormList<API.PurchaseOrderItem>
@ -428,7 +428,7 @@ const UpdateForm: React.FC<{
<ProFormDependency name={['items']}> <ProFormDependency name={['items']}>
{({ items }) => { {({ items }) => {
return ( return (
'数量' + items?.reduce((acc, cur) => acc + cur.quantity, 0) '数量:' + items?.reduce((acc, cur) => acc + cur.quantity, 0)
); );
}} }}
</ProFormDependency> </ProFormDependency>

View File

@ -289,7 +289,7 @@ const CreateForm: React.FC<{
}}></Button>} /> }}></Button>} />
<ProFormDependency name={['items']}> <ProFormDependency name={['items']}>
{({ items }) => { {({ items }) => {
return '数量' + (items?.reduce?.((acc, cur) => acc + cur.quantity, 0)||0); return '数量:' + (items?.reduce?.((acc, cur) => acc + cur.quantity, 0)||0);
}} }}
</ProFormDependency> </ProFormDependency>
<ProFormList <ProFormList
@ -465,7 +465,7 @@ const UpdateForm: React.FC<{
<ProFormTextArea name="note" label="备注" /> <ProFormTextArea name="note" label="备注" />
<ProFormDependency name={['items']}> <ProFormDependency name={['items']}>
{({ items }) => { {({ items }) => {
return '数量' + items?.reduce?.((acc, cur) => acc + cur.quantity, 0); return '数量:' + items?.reduce?.((acc, cur) => acc + cur.quantity, 0);
}} }}
</ProFormDependency> </ProFormDependency>
<ProFormList <ProFormList

View File

@ -17,7 +17,7 @@ import {
import { sitecontrollerAll } from '@/servers/api/site'; import { sitecontrollerAll } from '@/servers/api/site';
/** /**
* * ()
* *
*/ */
const SUBSCRIPTION_STATUS_ENUM: Record<string, { text: string }> = { const SUBSCRIPTION_STATUS_ENUM: Record<string, { text: string }> = {
@ -29,10 +29,10 @@ const SUBSCRIPTION_STATUS_ENUM: Record<string, { text: string }> = {
}; };
/** /**
* * 订阅列表页:
*/ */
const ListPage: React.FC = () => { const ListPage: React.FC = () => {
// 表格操作引用用于在同步后触发表格刷新 // 表格操作引用:用于在同步后触发表格刷新
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const { message } = App.useApp(); const { message } = App.useApp();
@ -41,7 +41,7 @@ const ListPage: React.FC = () => {
const [drawerTitle, setDrawerTitle] = useState('详情'); const [drawerTitle, setDrawerTitle] = useState('详情');
const [relatedOrders, setRelatedOrders] = useState<any[]>([]); const [relatedOrders, setRelatedOrders] = useState<any[]>([]);
// 表格列定义(尽量与项目风格保持一致) // 表格列定义(尽量与项目风格保持一致)
const columns: ProColumns<API.Subscription>[] = [ const columns: ProColumns<API.Subscription>[] = [
{ {
title: '站点', title: '站点',
@ -144,14 +144,14 @@ const ListPage: React.FC = () => {
message.warning('该订阅缺少父订单号'); message.warning('该订阅缺少父订单号');
return; return;
} }
// 通过父订单号查询关联订单(模糊匹配) // 通过父订单号查询关联订单(模糊匹配)
const resp = await request('/order/getOrderByNumber', { const resp = await request('/order/getOrderByNumber', {
method: 'POST', method: 'POST',
data: { number: parentNumber }, data: { number: parentNumber },
}); });
const { success, data, message: errMsg } = resp as any; const { success, data, message: errMsg } = resp as any;
if (!success) throw new Error(errMsg || '获取失败'); if (!success) throw new Error(errMsg || '获取失败');
// 仅保留与父订单号完全一致的订单(避免模糊匹配误入) // 仅保留与父订单号完全一致的订单(避免模糊匹配误入)
const candidates: any[] = (Array.isArray(data) ? data : []).filter( const candidates: any[] = (Array.isArray(data) ? data : []).filter(
(c: any) => String(c?.externalOrderId) === parentNumber (c: any) => String(c?.externalOrderId) === parentNumber
); );
@ -213,10 +213,10 @@ const ListPage: React.FC = () => {
}; };
}} }}
columns={columns} columns={columns}
// 工具栏订阅同步入口 // 工具栏:订阅同步入口
toolBarRender={() => [<SyncForm key="sync" tableRef={actionRef} />]} toolBarRender={() => [<SyncForm key="sync" tableRef={actionRef} />]}
/> />
{/* 关联订单抽屉展示订单号、关系、时间、状态与金额 */} {/* 关联订单抽屉:展示订单号、关系、时间、状态与金额 */}
<Drawer <Drawer
open={drawerOpen} open={drawerOpen}
title={drawerTitle} title={drawerTitle}
@ -230,7 +230,7 @@ const ListPage: React.FC = () => {
<List.Item> <List.Item>
<List.Item.Meta <List.Item.Meta
title={`#${item?.externalOrderId || '-'}`} title={`#${item?.externalOrderId || '-'}`}
description={`关系${item?.relationship || '-'},站点${item?.siteName || '-'}`} description={`关系:${item?.relationship || '-'},站点:${item?.siteName || '-'}`}
/> />
<div style={{ display: 'flex', gap: 12, alignItems: 'center' }}> <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>
<span>{item?.date_created ? dayjs(item.date_created).format('YYYY-MM-DD HH:mm') : '-'}</span> <span>{item?.date_created ? dayjs(item.date_created).format('YYYY-MM-DD HH:mm') : '-'}</span>
@ -249,7 +249,7 @@ const ListPage: React.FC = () => {
}; };
/** /**
* * 同步订阅抽屉表单:选择站点后触发同
*/ */
const SyncForm: React.FC<{ const SyncForm: React.FC<{
tableRef: React.MutableRefObject<ActionType | undefined>; tableRef: React.MutableRefObject<ActionType | undefined>;
@ -267,7 +267,7 @@ const SyncForm: React.FC<{
autoFocusFirstInput autoFocusFirstInput
drawerProps={{ destroyOnHidden: true }} drawerProps={{ destroyOnHidden: true }}
/** /**
* * :
* 1. ProForm + rules * 1. ProForm + rules
* 2. * 2.
* 3. * 3.

View File

@ -13,7 +13,7 @@ import {
import { ActionType, ProDescriptions } from '@ant-design/pro-components'; import { ActionType, ProDescriptions } from '@ant-design/pro-components';
import { CopyOutlined, DeleteFilled } from '@ant-design/icons'; import { CopyOutlined, DeleteFilled } from '@ant-design/icons';
// 服务器 API 引用(保持与原 index.tsx 一致) // 服务器 API 引用(保持与原 index.tsx 一致)
import { import {
ordercontrollerChangestatus, ordercontrollerChangestatus,
ordercontrollerGetorderdetail, ordercontrollerGetorderdetail,
@ -27,21 +27,21 @@ import { formatShipmentState, formatSource } from '@/utils/format';
import RelatedOrders from './RelatedOrders'; import RelatedOrders from './RelatedOrders';
import { ORDER_STATUS_ENUM } from '@/constants'; import { ORDER_STATUS_ENUM } from '@/constants';
// 中文注释为保持原文件结构简单,此处从 index.tsx 引入的子组件仍由原文件导出或保持原状 // 中文注释:为保持原文件结构简单,此处从 index.tsx 引入的子组件仍由原文件导出或保持原状
// 若后续需要彻底解耦,可将 OrderNote / Shipping / SalesChange 也独立到文件 // 若后续需要彻底解耦,可将 OrderNote / Shipping / SalesChange 也独立到文件
// 当前按你的要求仅抽离详情 Drawer // 当前按你的要求仅抽离详情 Drawer
type OrderRecord = API.Order; type OrderRecord = API.Order;
interface OrderDetailDrawerProps { interface OrderDetailDrawerProps {
tableRef: React.MutableRefObject<ActionType | undefined>; // 中文注释列表刷新引用 tableRef: React.MutableRefObject<ActionType | undefined>; // 中文注释:列表刷新引用
orderId: number; // 中文注释订单主键 ID orderId: number; // 中文注释:订单主键 ID
record: OrderRecord; // 中文注释订单行记录 record: OrderRecord; // 中文注释:订单行记录
open: boolean; // 中文注释是否打开抽屉 open: boolean; // 中文注释:是否打开抽屉
onClose: () => void; // 中文注释关闭抽屉回调 onClose: () => void; // 中文注释:关闭抽屉回调
setActiveLine: (id: number) => void; // 中文注释高亮当前行 setActiveLine: (id: number) => void; // 中文注释:高亮当前行
OrderNoteComponent: React.ComponentType<any>; // 中文注释:备注组件(从外部注入) OrderNoteComponent: React.ComponentType<any>; // 中文注释:备注组件(从外部注入)
SalesChangeComponent: React.ComponentType<any>; // 中文注释:换货组件(从外部注入) SalesChangeComponent: React.ComponentType<any>; // 中文注释:换货组件(从外部注入)
} }
const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
@ -57,7 +57,7 @@ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
const { message } = App.useApp(); const { message } = App.useApp();
const ref = useRef<ActionType>(); const ref = useRef<ActionType>();
// 中文注释:加载详情数据(与 index.tsx 中完全保持一致) // 中文注释:加载详情数据(与 index.tsx 中完全保持一致)
const initRequest = async () => { const initRequest = async () => {
const { data, success }: API.OrderDetailRes = await ordercontrollerGetorderdetail({ orderId }); const { data, success }: API.OrderDetailRes = await ordercontrollerGetorderdetail({ orderId });
if (!success || !data) return { data: {} } as any; if (!success || !data) return { data: {} } as any;
@ -84,7 +84,7 @@ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
size="large" size="large"
onClose={onClose} onClose={onClose}
footer={[ footer={[
// 中文注释:备注组件(外部传入以避免循环依赖) // 中文注释:备注组件(外部传入以避免循环依赖)
<OrderNoteComponent key="order-note" id={orderId} descRef={ref} />, <OrderNoteComponent key="order-note" id={orderId} descRef={ref} />,
...(['after_sale_pending', 'pending_reshipment'].includes( ...(['after_sale_pending', 'pending_reshipment'].includes(
record.orderStatus, record.orderStatus,
@ -241,21 +241,21 @@ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
<ProDescriptions.Item label="客户备注" dataIndex="customer_note" span={3} /> <ProDescriptions.Item label="客户备注" dataIndex="customer_note" span={3} />
<ProDescriptions.Item label="发货信息" span={3} render={(_, r: any) => ( <ProDescriptions.Item label="发货信息" span={3} render={(_, r: any) => (
<div> <div>
<div>company<span>{r?.shipping?.company || r?.billing?.company || '-'}</span></div> <div>company:<span>{r?.shipping?.company || r?.billing?.company || '-'}</span></div>
<div>first_name<span>{r?.shipping?.first_name || r?.billing?.first_name || '-'}</span></div> <div>first_name:<span>{r?.shipping?.first_name || r?.billing?.first_name || '-'}</span></div>
<div>last_name<span>{r?.shipping?.last_name || r?.billing?.last_name || '-'}</span></div> <div>last_name:<span>{r?.shipping?.last_name || r?.billing?.last_name || '-'}</span></div>
<div>country<span>{r?.shipping?.country || r?.billing?.country || '-'}</span></div> <div>country:<span>{r?.shipping?.country || r?.billing?.country || '-'}</span></div>
<div>state<span>{r?.shipping?.state || r?.billing?.state || '-'}</span></div> <div>state:<span>{r?.shipping?.state || r?.billing?.state || '-'}</span></div>
<div>city<span>{r?.shipping?.city || r?.billing?.city || '-'}</span></div> <div>city:<span>{r?.shipping?.city || r?.billing?.city || '-'}</span></div>
<div>postcode<span>{r?.shipping?.postcode || r?.billing?.postcode || '-'}</span></div> <div>postcode:<span>{r?.shipping?.postcode || r?.billing?.postcode || '-'}</span></div>
<div>phone<span>{r?.shipping?.phone || r?.billing?.phone || '-'}</span></div> <div>phone:<span>{r?.shipping?.phone || r?.billing?.phone || '-'}</span></div>
<div>address_1<span>{r?.shipping?.address_1 || r?.billing?.address_1 || '-'}</span></div> <div>address_1:<span>{r?.shipping?.address_1 || r?.billing?.address_1 || '-'}</span></div>
</div> </div>
)} /> )} />
<ProDescriptions.Item label="原始订单" span={3} render={(_, r: any) => ( <ProDescriptions.Item label="原始订单" span={3} render={(_, r: any) => (
<ul> <ul>
{(r?.items || []).map((item: any) => ( {(r?.items || []).map((item: any) => (
<li key={item.id}>{item.name}{item.quantity}</li> <li key={item.id}>{item.name}:{item.quantity}</li>
))} ))}
</ul> </ul>
)} /> )} />
@ -265,7 +265,7 @@ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
<ProDescriptions.Item label="订单内容" span={3} render={(_, r: any) => ( <ProDescriptions.Item label="订单内容" span={3} render={(_, r: any) => (
<ul> <ul>
{(r?.sales || []).map((item: any) => ( {(r?.sales || []).map((item: any) => (
<li key={item.id}>{item.name}{item.quantity}</li> <li key={item.id}>{item.name}:{item.quantity}</li>
))} ))}
</ul> </ul>
)} /> )} />
@ -310,7 +310,7 @@ const OrderDetailDrawer: React.FC<OrderDetailDrawerProps> = ({
</Popconfirm> </Popconfirm>
] : [] } ] : [] }
> >
<div> {Array.isArray(v?.orderIds) ? v.orderIds.join(',') : '-'}</div> <div>: {Array.isArray(v?.orderIds) ? v.orderIds.join(',') : '-'}</div>
{Array.isArray(v?.items) && v.items.map((item: any) => ( {Array.isArray(v?.items) && v.items.map((item: any) => (
<div key={item.id}>{item.name}: {item.quantity}</div> <div key={item.id}>{item.name}: {item.quantity}</div>
))} ))}

View File

@ -7,8 +7,8 @@ dayjs.extend(relativeTime);
/** /**
* RelatedOrders * RelatedOrders
* / * (/)
* 便 * 中文注释:本组件将订阅与订单统一归一化为五列展便
*/ */
const RelatedOrders: React.FC<{ data?: any[] }> = ({ data = [] }) => { const RelatedOrders: React.FC<{ data?: any[] }> = ({ data = [] }) => {
const rows = (Array.isArray(data) ? data : []).map((it: any) => { const rows = (Array.isArray(data) ? data : []).map((it: any) => {
@ -29,7 +29,7 @@ const RelatedOrders: React.FC<{ data?: any[] }> = ({ data = [] }) => {
return ( return (
<div style={{ width: '100%' }}> <div style={{ width: '100%' }}>
{/* 表头(英文文案,符合国际化默认英文的要求) */} {/* 表头(英文文案,符合国际化默认英文的要求) */}
<div style={{ display: 'grid', gridTemplateColumns: '1.5fr 1fr 1fr 1fr 1fr', padding: '8px 0', fontWeight: 600 }}> <div style={{ display: 'grid', gridTemplateColumns: '1.5fr 1fr 1fr 1fr 1fr', padding: '8px 0', fontWeight: 600 }}>
<div></div> <div></div>
<div></div> <div></div>

View File

@ -22,7 +22,7 @@ interface OrderItemRow {
const OrdersPage: React.FC = () => { const OrdersPage: React.FC = () => {
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const { message } = App.useApp(); const { message } = App.useApp();
// 抽屉状态改为复用订单详情抽屉组件 // 抽屉状态:改为复用订单详情抽屉组件
const [detailOpen, setDetailOpen] = useState(false); const [detailOpen, setDetailOpen] = useState(false);
const [detailRecord, setDetailRecord] = useState<any | null>(null); const [detailRecord, setDetailRecord] = useState<any | null>(null);
const [detailOrderId, setDetailOrderId] = useState<number | null>(null); const [detailOrderId, setDetailOrderId] = useState<number | null>(null);
@ -149,7 +149,7 @@ const OrdersPage: React.FC = () => {
}} }}
toolBarRender={false} toolBarRender={false}
/> />
{/* 订阅关联直接使用订单详情抽屉组件 */} {/* 订阅关联:直接使用订单详情抽屉组件 */}
{detailRecord && detailOrderId !== null && ( {detailRecord && detailOrderId !== null && (
<OrderDetailDrawer <OrderDetailDrawer
open={detailOpen} open={detailOpen}

View File

@ -1,7 +1,7 @@
// @ts-ignore // @ts-ignore
/* eslint-disable */ /* eslint-disable */
// API 更新时间 // API 更新时间:
// API 唯一标识 // API 唯一标识:
import * as customer from './customer'; import * as customer from './customer';
import * as logistics from './logistics'; import * as logistics from './logistics';
import * as order from './order'; import * as order from './order';

View File

@ -965,7 +965,7 @@ declare namespace API {
| 'pending-cancel'; | 'pending-cancel';
/** 客户邮箱 */ /** 客户邮箱 */
customer_email?: string; customer_email?: string;
/** 关键字订阅ID、邮箱等 */ /** 关键字(订阅ID、邮箱等) */
keyword?: string; keyword?: string;
}; };
@ -1345,7 +1345,7 @@ declare namespace API {
billing_interval?: number; billing_interval?: number;
customer_id?: number; customer_id?: number;
customer_email?: string; customer_email?: string;
/** 父订单/父订阅ID(如有) */ /** 父订单/父订阅ID(如有) */
parent_id?: number; parent_id?: number;
start_date?: string; start_date?: string;
trial_end?: string; trial_end?: string;
@ -1376,7 +1376,7 @@ declare namespace API {
| 'pending-cancel'; | 'pending-cancel';
/** 客户邮箱 */ /** 客户邮箱 */
customer_email?: string; customer_email?: string;
/** 关键字订阅ID、邮箱等 */ /** 关键字(订阅ID、邮箱等) */
keyword?: string; keyword?: string;
}; };

4
typings.d.ts vendored
View File

@ -5,8 +5,8 @@ declare namespace BaseType {
type EnumTransformOptions { type EnumTransformOptions {
value: string; // 用于作为 value 的字段名 value: string; // 用于作为 value 的字段名
label: string; // 用于作为 text 的字段名 label: string; // 用于作为 text 的字段名
status?: string | undefined; // 可选用于设置状态的字段名 status?: string | undefined; // 可选:用于设置状态的字段名
color?: string | undefined; // 可选用于设置颜色的字段名 color?: string | undefined; // 可选:用于设置颜色的字段名
} }
} }