import request from '@/utils/request' export function listPriceSet(query) { return request({ url: '/price/set/list', method: 'get', params: query }) } export function getPriceSet(priceSetId) { return request({ url: '/price/set/' + priceSetId, method: 'get' }) } export function savePriceSet(data) { return request({ url: '/price/set', method: 'post', data: data }) } export function getPriceSetSaveTask(taskId) { return request({ url: '/price/set/save/task/' + taskId, method: 'get' }) } /** * Submit save async and poll Redis progress until SUCCESS/FAIL. * @returns {Promise<{ priceSetId: number|string, task: object }>} */ export async function savePriceSetAsync(data, onProgress) { const submitRes = await savePriceSet(data) const taskId = pickSaveTaskId(submitRes) if (!taskId) { throw new Error('missing save taskId') } const started = Date.now() const maxMs = 30 * 60 * 1000 while (Date.now() - started < maxMs) { const res = await getPriceSetSaveTask(taskId) const task = res.data || {} if (typeof onProgress === 'function') { onProgress(task) } if (task.status === 'SUCCESS') { return { priceSetId: task.priceSetId, task } } if (task.status === 'FAIL') { const err = new Error(task.error || task.message || 'save failed') err.task = task throw err } await new Promise(resolve => setTimeout(resolve, 800)) } throw new Error('save timeout') } /** Accept data.taskId / data string / legacy msg UUID (RuoYi String overload). */ function pickSaveTaskId(res) { if (!res) return null const d = res.data if (d && typeof d === 'object' && d.taskId) return String(d.taskId) if (typeof d === 'string' && d.trim()) return d.trim() if (typeof res.msg === 'string') { const m = res.msg.trim() if (/^[a-f0-9]{32}$/i.test(m)) return m if (/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i.test(m)) { return m.replace(/-/g, '') } } return null } export function updatePriceSet(data) { return request({ url: '/price/set', method: 'put', data: data }) } export function delPriceSet(priceSetIds) { return request({ url: '/price/set/' + priceSetIds, method: 'delete' }) } export function submitPriceSet(priceSetId) { return request({ url: '/price/set/submit/' + priceSetId, method: 'put' }) } export function approvePriceSet(priceSetId) { return request({ url: '/price/set/approve/' + priceSetId, method: 'put' }) } export function rejectPriceSet(priceSetId) { return request({ url: '/price/set/reject/' + priceSetId, method: 'put' }) } export function activatePriceSetVersion(psvId, data) { return request({ url: '/price/set/version/activate/' + psvId, method: 'put', data: data || {} }) } export function copyPriceSetVersion(psvId) { return request({ url: '/price/set/version/copy/' + psvId, method: 'post' }) } export function deletePriceSetVersion(psvId) { return request({ url: '/price/set/version/' + psvId, method: 'delete' }) } export function disablePriceSet(priceSetId) { return request({ url: '/price/set/disable/' + priceSetId, method: 'put' }) } export function copyPriceSet(priceSetId) { return request({ url: '/price/set/copy/' + priceSetId, method: 'post' }) } export function validatePriceSet(data) { return request({ url: '/price/set/validate', method: 'post', data: data }) } export function listSetDetail(query) { return request({ url: '/price/set/detail/list', method: 'get', params: query }) } export function addSetDetail(data) { return request({ url: '/price/set/detail', method: 'post', data: data }) } export function updateSetDetail(data) { return request({ url: '/price/set/detail', method: 'put', data: data }) } export function delSetDetail(psdIds) { return request({ url: '/price/set/detail/' + psdIds, method: 'delete' }) } export function listSetCustomer(query) { return request({ url: '/price/set/customer/list', method: 'get', params: query }) } export function addSetCustomer(data) { return request({ url: '/price/set/customer', method: 'post', data: data }) } export function updateSetCustomer(data) { return request({ url: '/price/set/customer', method: 'put', data: data }) } export function delSetCustomer(ids) { return request({ url: '/price/set/customer/' + ids, method: 'delete' }) }