chore: force category management to use real tenant APIs

This commit is contained in:
2026-02-20 18:46:11 +08:00
parent c6d0694737
commit 6145eec825
4 changed files with 282 additions and 269 deletions

View File

@@ -12,6 +12,9 @@ VITE_TENANT_ID=806357433394921472
# 是否开启 Nitro Mock服务true 为开启false 为关闭
VITE_NITRO_MOCK=false
# 是否开启商品分类管理 mock默认 false分类管理强制走真实 API
VITE_MOCK_PRODUCT_CATEGORY=false
# 是否打开 devtoolstrue 为打开false 为关闭
VITE_DEVTOOLS=false

View File

@@ -1,6 +1,6 @@
// Mock 数据入口,仅在开发环境下使用
// 门店模块已切换真实 TenantApi此处仅保留其他业务 mock。
// 门店模块与商品分类管理已切换真实 TenantApi此处仅保留其他业务 mock。
import './product';
import './product-extensions';
console.warn('[Mock] 非门店模块 Mock 数据已启用');
console.warn('[Mock] 已启用非门店/非分类管理 Mock 数据(分类管理强制走真实 API');

View File

@@ -150,6 +150,8 @@ const PRODUCT_SEEDS = [
const storeMap = new Map<string, ProductExtensionStoreState>();
let idSeed = 10_000;
const ENABLE_PRODUCT_CATEGORY_MOCK =
import.meta.env.VITE_MOCK_PRODUCT_CATEGORY === 'true';
function parseUrlParams(url: string) {
const parsed = new URL(url, 'http://localhost');
@@ -592,7 +594,9 @@ function ensureStoreState(storeId = '') {
return state;
}
Mock.mock(
// 分类管理与商品选择器默认走真实 TenantApi需手动开启才启用 mock。
if (ENABLE_PRODUCT_CATEGORY_MOCK) {
Mock.mock(
/\/product\/category\/manage\/list(?:\?|$)/,
'get',
(options: MockRequestOptions) => {
@@ -616,9 +620,9 @@ Mock.mock(
return { code: 200, data: list };
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/save/,
'post',
(options: MockRequestOptions) => {
@@ -639,7 +643,8 @@ Mock.mock(
}
const currentSortMax =
state.categories.reduce((max, item) => Math.max(max, item.sort), 0) + 1;
state.categories.reduce((max, item) => Math.max(max, item.sort), 0) +
1;
const existingIndex = state.categories.findIndex((item) => item.id === id);
const next =
@@ -687,9 +692,9 @@ Mock.mock(
return { code: 200, data: toCategoryManageItem(state, next) };
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/delete/,
'post',
(options: MockRequestOptions) => {
@@ -717,9 +722,9 @@ Mock.mock(
);
return { code: 200, data: null };
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/status/,
'post',
(options: MockRequestOptions) => {
@@ -735,9 +740,9 @@ Mock.mock(
target.status = normalizeSwitchStatus(body.status, target.status);
return { code: 200, data: toCategoryManageItem(state, target) };
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/sort/,
'post',
(options: MockRequestOptions) => {
@@ -770,9 +775,9 @@ Mock.mock(
data: state.categories.map((item) => toCategoryManageItem(state, item)),
};
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/products\/bind/,
'post',
(options: MockRequestOptions) => {
@@ -806,9 +811,9 @@ Mock.mock(
},
};
},
);
);
Mock.mock(
Mock.mock(
/\/product\/category\/manage\/products\/unbind/,
'post',
(options: MockRequestOptions) => {
@@ -834,9 +839,9 @@ Mock.mock(
return { code: 200, data: target };
},
);
);
Mock.mock(
Mock.mock(
/\/product\/picker\/list(?:\?|$)/,
'get',
(options: MockRequestOptions) => {
@@ -872,7 +877,8 @@ Mock.mock(
return { code: 200, data: list };
},
);
);
}
Mock.mock(
/\/product\/spec\/list(?:\?|$)/,

View File

@@ -296,6 +296,8 @@ const PRODUCT_SEEDS: ProductSeed[] = [
];
const productStoreMap = new Map<string, ProductStoreState>();
const ENABLE_PRODUCT_CATEGORY_MOCK =
import.meta.env.VITE_MOCK_PRODUCT_CATEGORY === 'true';
/** 解析 URL 查询参数。 */
function parseUrlParams(url: string) {
@@ -540,8 +542,9 @@ function resolveStatusByShelfMode(
return fallback;
}
/** 获取商品分类。 */
Mock.mock(
/** 获取商品分类(默认走真实 TenantApi需手动开启才启用 mock。 */
if (ENABLE_PRODUCT_CATEGORY_MOCK) {
Mock.mock(
/\/product\/category\/list(?:\?|$)/,
'get',
(options: MockRequestOptions) => {
@@ -553,7 +556,8 @@ Mock.mock(
data: buildCategoryList(state.products),
};
},
);
);
}
/** 获取商品列表。 */
Mock.mock(/\/product\/list(?:\?|$)/, 'get', (options: MockRequestOptions) => {