Enhance price set import functionality with preview options and update handling. Added new endpoints for previewing product library pulls and Excel imports, along with support for update-only imports. Updated internationalization messages for import success and error scenarios.

This commit is contained in:
wuweihua
2026-09-30 16:15:44 +08:00
parent 90cde8da4a
commit 6e301ecee7
19 changed files with 1260 additions and 260 deletions
+36 -4
View File
@@ -56,7 +56,7 @@ export async function savePriceSetAsync(data, onProgress) {
err.task = task
throw err
}
await new Promise(resolve => setTimeout(resolve, 800))
await new Promise(resolve => setTimeout(resolve, 400))
}
throw new Error('save timeout')
}
@@ -202,7 +202,7 @@ export function addSetDetail(data) {
/**
* Async import quote Excel into FIXED package detail prices; poll until done.
* @param {File|Blob} file
* @param {{ priceSetId: string|number, psvId?: string|number }} query
* @param {{ priceSetId: string|number, psvId?: string|number, updateOnly?: boolean }} query
* @param {(task: object) => void} [onProgress]
* @returns {Promise<{ task: object }>}
*/
@@ -212,6 +212,7 @@ export async function importSetDetailPricesAsync(file, query, onProgress) {
const params = new URLSearchParams()
if (query && query.priceSetId != null) params.set('priceSetId', query.priceSetId)
if (query && query.psvId != null && query.psvId !== '') params.set('psvId', query.psvId)
if (query && query.updateOnly) params.set('updateOnly', 'true')
const submitRes = await request({
url: '/price/set/detail/importPrices?' + params.toString(),
method: 'post',
@@ -225,6 +226,37 @@ export async function importSetDetailPricesAsync(file, query, onProgress) {
return pollPriceSetSaveTask(taskId, onProgress)
}
/**
* Preview pull product library (no DB write). Returns { products, details, message }.
*/
export function previewPullFromLibrary() {
return request({
url: '/price/set/detail/previewPullFromLibrary',
method: 'post'
})
}
/**
* Preview Excel import (no DB write).
* @param {File|Blob} file
* @param {{ updateOnly?: boolean, details?: Array }} [opts]
*/
export function previewImportDetailPrices(file, opts = {}) {
const formData = new FormData()
formData.append('file', file)
if (opts.updateOnly) formData.append('updateOnly', 'true')
if (opts.updateOnly && Array.isArray(opts.details)) {
formData.append('detailsJson', JSON.stringify(opts.details))
}
return request({
url: '/price/set/detail/previewImportPrices',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' },
timeout: 10 * 60 * 1000
})
}
/**
* Async pull product library into package version details; poll until done.
* @param {{ priceSetId: string|number, psvId?: string|number, force?: boolean }} query
@@ -263,7 +295,7 @@ async function pollPriceSetSaveTask(taskId, onProgress) {
err.task = task
throw err
}
await new Promise(resolve => setTimeout(resolve, 800))
await new Promise(resolve => setTimeout(resolve, 400))
}
throw new Error('task timeout')
}
@@ -306,7 +338,7 @@ export async function updateSetDetailSurchargeAsync(details, onProgress) {
err.task = task
throw err
}
await new Promise(resolve => setTimeout(resolve, 800))
await new Promise(resolve => setTimeout(resolve, 400))
}
throw new Error('surcharge save timeout')
}