+
+ 实时预览
+
}
@@ -425,7 +442,7 @@ const UpdateForm: React.FC<{
height: '600px',
overflow: 'auto',
backgroundColor: '#f5f5f5',
- }
+ },
}}
>
diff --git a/src/pages/Woo/Product/TagTool/index.tsx b/src/pages/Woo/Product/TagTool/index.tsx
index 180fc51..e398d92 100644
--- a/src/pages/Woo/Product/TagTool/index.tsx
+++ b/src/pages/Woo/Product/TagTool/index.tsx
@@ -221,6 +221,8 @@ const WpToolPage: React.FC = () => {
const [csvData, setCsvData] = useState([]); // 解析后的 CSV 数据
const [processedData, setProcessedData] = useState([]); // 处理后待下载的数据
const [isProcessing, setIsProcessing] = useState(false); // 是否正在处理中
+ const [isConfigLoading, setIsConfigLoading] = useState(false); // 是否正在加载配置
+ const [configLoadAttempts, setConfigLoadAttempts] = useState(0); // 配置加载重试次数
const [config, setConfig] = useState({
// 动态配置
brands: [],
@@ -237,22 +239,34 @@ const WpToolPage: React.FC = () => {
useEffect(() => {
const fetchAllConfigs = async () => {
try {
+ message.loading({ content: '正在加载字典配置...', key: 'loading-config' });
+
// 1. 获取所有字典列表以找到对应的 ID
- const dictList = await request('/dict/list');
+ const dictListResponse = await request('/dict/list');
+ // 处理后端统一响应格式
+ const dictList = dictListResponse?.data || dictListResponse || [];
// 2. 根据字典名称获取字典项
const getItems = async (dictName: string) => {
- const dict = dictList.find((d: any) => d.name === dictName);
- if (!dict) {
- console.warn(`Dictionary ${dictName} not found`);
+ try {
+ const dict = dictList.find((d: any) => d.name === dictName);
+ if (!dict) {
+ console.warn(`Dictionary ${dictName} not found`);
+ return [];
+ }
+ const response = await request('/dict/items', {
+ params: { dictId: dict.id },
+ });
+ // 处理后端统一响应格式,获取数据数组
+ const items = response?.data || response || [];
+ return items.map((item: any) => item.name);
+ } catch (error) {
+ console.error(`Failed to fetch items for ${dictName}:`, error);
return [];
}
- const res = await request('/dict/items', {
- params: { dictId: dict.id },
- });
- return res.map((item: any) => item.name);
};
+ // 3. 并行获取所有字典项
const [
brands,
fruitKeys,
@@ -264,9 +278,9 @@ const WpToolPage: React.FC = () => {
categoryKeys,
] = await Promise.all([
getItems('brand'),
- getItems('fruit'), // 假设字典名为 fruit
- getItems('mint'), // 假设字典名为 mint
- getItems('flavor'), // 假设字典名为 flavor
+ getItems('fruit'),
+ getItems('mint'),
+ getItems('flavor'),
getItems('strength'),
getItems('size'),
getItems('humidity'),
@@ -283,11 +297,19 @@ const WpToolPage: React.FC = () => {
humidityKeys,
categoryKeys,
};
+
setConfig(newConfig);
form.setFieldsValue(newConfig);
+ message.success({ content: '字典配置加载成功', key: 'loading-config' });
+
+ // 显示加载结果统计
+ const totalItems = brands.length + fruitKeys.length + mintKeys.length + flavorKeys.length +
+ strengthKeys.length + sizeKeys.length + humidityKeys.length + categoryKeys.length;
+ console.log(`字典配置加载完成: 共 ${totalItems} 个配置项`);
+
} catch (error) {
console.error('Failed to fetch configs:', error);
- message.error('获取字典配置失败');
+ message.error({ content: '获取字典配置失败,请刷新页面重试', key: 'loading-config' });
}
};
diff --git a/src/servers/api/customer.ts b/src/servers/api/customer.ts
index de753f9..2d2b137 100644
--- a/src/servers/api/customer.ts
+++ b/src/servers/api/customer.ts
@@ -47,6 +47,21 @@ export async function customercontrollerGetcustomerlist(
});
}
+/** 此处后端没有提供注释 GET /customer/getcustomerstatisticlist */
+export async function customercontrollerGetcustomerstatisticlist(
+ // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
+ params: API.customercontrollerGetcustomerstatisticlistParams,
+ options?: { [key: string]: any },
+) {
+ return request>('/customer/getcustomerstatisticlist', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
/** 此处后端没有提供注释 GET /customer/gettags */
export async function customercontrollerGettags(options?: {
[key: string]: any;
@@ -71,3 +86,18 @@ export async function customercontrollerSetrate(
...(options || {}),
});
}
+
+/** 此处后端没有提供注释 POST /customer/sync */
+export async function customercontrollerSynccustomers(
+ body: Record,
+ options?: { [key: string]: any },
+) {
+ return request>('/customer/sync', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'text/plain',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/servers/api/site.ts b/src/servers/api/site.ts
index 5dee931..f5bbe6a 100644
--- a/src/servers/api/site.ts
+++ b/src/servers/api/site.ts
@@ -4,7 +4,7 @@ import { request } from 'umi';
/** 此处后端没有提供注释 GET /site/all */
export async function sitecontrollerAll(options?: { [key: string]: any }) {
- return request('/site/all', {
+ return request('/site/all', {
method: 'GET',
...(options || {}),
});
diff --git a/src/servers/api/typings.d.ts b/src/servers/api/typings.d.ts
index 0c8f997..4525d65 100644
--- a/src/servers/api/typings.d.ts
+++ b/src/servers/api/typings.d.ts
@@ -285,6 +285,18 @@ declare namespace API {
customerId?: number;
};
+ type customercontrollerGetcustomerstatisticlistParams = {
+ current?: string;
+ pageSize?: string;
+ email?: string;
+ tags?: string;
+ sorterKey?: string;
+ sorterValue?: string;
+ state?: string;
+ first_purchase_date?: string;
+ customerId?: number;
+ };
+
type CustomerTagDTO = {
email?: string;
tag?: string;
@@ -1893,6 +1905,17 @@ declare namespace API {
id: string;
};
+ type SitesResponse = {
+ /** 状态码 */
+ code?: number;
+ /** 是否成功 */
+ success?: boolean;
+ /** 消息内容 */
+ message?: string;
+ /** 响应数据 */
+ data?: SiteConfig[];
+ };
+
type statisticscontrollerGetinativeusersbymonthParams = {
month?: string;
};
@@ -3014,15 +3037,4 @@ declare namespace API {
/** 数据列表 */
items?: WpProductDTO[];
};
-
- type WpSitesResponse = {
- /** 状态码 */
- code?: number;
- /** 是否成功 */
- success?: boolean;
- /** 消息内容 */
- message?: string;
- /** 响应数据 */
- data?: SiteConfig[];
- };
}