feat(distribution): 优化货架批量操作、结算大事务、大盘与前台多端解析缓存及货架分页
This commit is contained in:
@@ -610,15 +610,50 @@ export async function updateAccountMarkup(id: number, shelfRatioDelta: number):
|
||||
return extract(resp)
|
||||
}
|
||||
|
||||
export async function batchUpdateAccountMarkup(siteID: number, listingIDs: number[], shelfRatioDelta: number): Promise<void> {
|
||||
await api.post(`/admin/distribution/accounts/batch-markup`, {
|
||||
listing_ids: listingIDs,
|
||||
shelf_ratio_delta: shelfRatioDelta,
|
||||
}, {
|
||||
export interface BatchUpdateAccountMarkupItem {
|
||||
id?: number
|
||||
listing_id?: number
|
||||
shelf_ratio_delta: number
|
||||
}
|
||||
|
||||
export interface BatchUpdateAccountMarkupRequest {
|
||||
listing_ids?: number[]
|
||||
display_ids?: number[]
|
||||
shelf_ratio_delta?: number
|
||||
items?: BatchUpdateAccountMarkupItem[]
|
||||
}
|
||||
|
||||
export async function batchUpdateAccountMarkup(
|
||||
siteID: number,
|
||||
reqOrListingIDs: BatchUpdateAccountMarkupRequest | number[],
|
||||
shelfRatioDelta?: number,
|
||||
): Promise<void> {
|
||||
const payload: BatchUpdateAccountMarkupRequest = Array.isArray(reqOrListingIDs)
|
||||
? { listing_ids: reqOrListingIDs, shelf_ratio_delta: shelfRatioDelta ?? 0 }
|
||||
: reqOrListingIDs
|
||||
|
||||
await api.post(`/admin/distribution/accounts/batch-markup`, payload, {
|
||||
params: { site_id: siteID },
|
||||
})
|
||||
}
|
||||
|
||||
export async function batchUpdateAccountDisplay(
|
||||
siteID: number,
|
||||
displayIDs: number[],
|
||||
targetStatus: 'enabled' | 'disabled',
|
||||
): Promise<void> {
|
||||
await api.post(
|
||||
`/admin/distribution/accounts/batch-display`,
|
||||
{
|
||||
display_ids: displayIDs,
|
||||
target_status: targetStatus,
|
||||
},
|
||||
{
|
||||
params: { site_id: siteID },
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
export interface DistributionAnalytics {
|
||||
today_received_count: number
|
||||
total_received_count: number
|
||||
|
||||
@@ -40,6 +40,7 @@ import {
|
||||
syncSiteAccounts,
|
||||
updateAccountMarkup,
|
||||
batchUpdateAccountMarkup,
|
||||
batchUpdateAccountDisplay,
|
||||
formatMoney,
|
||||
getMe,
|
||||
type AccountDisplay,
|
||||
@@ -254,23 +255,24 @@ export default function Accounts() {
|
||||
message.warning('请先勾选需要批量操作的账号')
|
||||
return
|
||||
}
|
||||
if (!siteID) {
|
||||
message.warning('无法获取当前分销站点信息')
|
||||
return
|
||||
}
|
||||
const actionLabel = targetStatus === 'enabled' ? '批量恢复展示' : '批量下架'
|
||||
Modal.confirm({
|
||||
title: `确认${actionLabel}?`,
|
||||
content: `即将对选中的 ${selectedRowKeys.length} 个账号执行${actionLabel}操作。`,
|
||||
onOk: async () => {
|
||||
let successCount = 0
|
||||
for (const id of selectedRowKeys) {
|
||||
try {
|
||||
await updateAccountDisplay(Number(id), targetStatus)
|
||||
successCount++
|
||||
} catch {
|
||||
// continue next
|
||||
}
|
||||
try {
|
||||
await batchUpdateAccountDisplay(siteID, selectedRowKeys.map(Number), targetStatus)
|
||||
message.success(`已成功完成选中的 ${selectedRowKeys.length} 个账号的${actionLabel}`)
|
||||
setSelectedRowKeys([])
|
||||
void load(siteID)
|
||||
} catch (error: unknown) {
|
||||
const respMessage = (error as { response?: { data?: { message?: string } } })?.response?.data?.message
|
||||
message.error(respMessage ?? `${actionLabel}失败`)
|
||||
}
|
||||
message.success(`已完成 ${successCount}/${selectedRowKeys.length} 个账号的${actionLabel}`)
|
||||
setSelectedRowKeys([])
|
||||
if (siteID) void load(siteID)
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -404,23 +406,21 @@ export default function Accounts() {
|
||||
const listingIDs = selectedItems.map((it) => it.listing_id)
|
||||
await batchUpdateAccountMarkup(siteID, listingIDs, batchValue)
|
||||
} else if (batchMode === 'percent') {
|
||||
await Promise.all(
|
||||
selectedItems.map((it) => {
|
||||
const basePriceYuan = (it.price_cent || 0) / 100
|
||||
const targetYuan = basePriceYuan * (1 + batchValue / 100)
|
||||
const delta = calcDeltaFromTargetPrice(it.haf_coin_amount || 0, it.price_cent || 0, targetYuan)
|
||||
return updateAccountMarkup(it.id, delta)
|
||||
})
|
||||
)
|
||||
const itemsToUpdate = selectedItems.map((it) => {
|
||||
const basePriceYuan = (it.price_cent || 0) / 100
|
||||
const targetYuan = basePriceYuan * (1 + batchValue / 100)
|
||||
const delta = calcDeltaFromTargetPrice(it.haf_coin_amount || 0, it.price_cent || 0, targetYuan)
|
||||
return { id: it.id, listing_id: it.listing_id, shelf_ratio_delta: delta }
|
||||
})
|
||||
await batchUpdateAccountMarkup(siteID, { items: itemsToUpdate })
|
||||
} else if (batchMode === 'add_amount') {
|
||||
await Promise.all(
|
||||
selectedItems.map((it) => {
|
||||
const basePriceYuan = (it.price_cent || 0) / 100
|
||||
const targetYuan = basePriceYuan + batchValue
|
||||
const delta = calcDeltaFromTargetPrice(it.haf_coin_amount || 0, it.price_cent || 0, targetYuan)
|
||||
return updateAccountMarkup(it.id, delta)
|
||||
})
|
||||
)
|
||||
const itemsToUpdate = selectedItems.map((it) => {
|
||||
const basePriceYuan = (it.price_cent || 0) / 100
|
||||
const targetYuan = basePriceYuan + batchValue
|
||||
const delta = calcDeltaFromTargetPrice(it.haf_coin_amount || 0, it.price_cent || 0, targetYuan)
|
||||
return { id: it.id, listing_id: it.listing_id, shelf_ratio_delta: delta }
|
||||
})
|
||||
await batchUpdateAccountMarkup(siteID, { items: itemsToUpdate })
|
||||
}
|
||||
message.success(`已成功为选中的 ${selectedItems.length} 个商品批量设置提价!`)
|
||||
setSelectedRowKeys([])
|
||||
|
||||
Reference in New Issue
Block a user