增加建立新版本
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
:ref-data="refData"
|
||||
:live-persist="livePersist"
|
||||
:build-mode-dirty="buildModeDirty"
|
||||
:build-mode-ready="pageReady"
|
||||
:header-title="detailsHeaderTitle"
|
||||
/>
|
||||
</div>
|
||||
@@ -100,6 +101,8 @@ const savedProductsSnapshot = ref([])
|
||||
const buildModeDirty = computed(() =>
|
||||
String(form.version.priceBuildMode || '') !== String(savedPriceBuildMode.value || '')
|
||||
)
|
||||
/** Gate build-mode cards until package payload applied (avoids first click being wiped). */
|
||||
const pageReady = ref(!route.query.priceSetId)
|
||||
|
||||
function mapSaveProgressMessage(message) {
|
||||
const m = message || ''
|
||||
@@ -182,6 +185,9 @@ async function finishEdit() {
|
||||
// Backend copied prior version into this draft; refresh product list from current psv
|
||||
await refreshProductsFromCurrentVersion()
|
||||
proxy.$modal.msgSuccess("建价方式已保存,已带出上一版产品")
|
||||
} else if (form.version.priceBuildMode === 'IMPORT_FRESH') {
|
||||
savedProductsSnapshot.value = (form.products || []).map(p => ({ ...p }))
|
||||
proxy.$modal.msgSuccess("建价方式已保存,可直接导入 Excel 建价(不延用以前的产品价格)")
|
||||
} else {
|
||||
savedProductsSnapshot.value = (form.products || []).map(p => ({ ...p }))
|
||||
proxy.$modal.msgSuccess("建价方式已保存")
|
||||
@@ -335,7 +341,7 @@ function onPefIdUpdate(pefId) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Step2 chose PULL / IMPORT: edit live-saves mode; create only local + optional preview pull. */
|
||||
/** Step2 chose PULL / IMPORT / IMPORT_FRESH: edit live-saves mode; create only local + optional preview pull. */
|
||||
function onPriceBuildModeUpdate(mode) {
|
||||
if (!mode) return
|
||||
if (isBuildModeLockedVersion(form.version.status)) return
|
||||
@@ -346,7 +352,7 @@ function onPriceBuildModeUpdate(mode) {
|
||||
savedProductsSnapshot.value = (form.products || []).map(p => ({ ...p }))
|
||||
}
|
||||
form.version.priceBuildMode = mode
|
||||
if (mode !== 'IMPORT') {
|
||||
if (mode !== 'IMPORT' && mode !== 'IMPORT_FRESH') {
|
||||
draftPefId.value = undefined
|
||||
draftPefIds.value = []
|
||||
}
|
||||
@@ -403,6 +409,8 @@ function onPriceBuildModeUpdate(mode) {
|
||||
proxy.$modal.msgSuccess("请导入 Excel 建价")
|
||||
}
|
||||
})
|
||||
} else if (mode === 'IMPORT_FRESH') {
|
||||
proxy.$modal.msgSuccess("请直接导入 Excel 建价(不延用以前的产品价格)")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,31 +456,48 @@ function applySetData(data, asCopy, asNewVersion) {
|
||||
const fromData = (data.version && data.version.psvId) ? data.version : null
|
||||
const current = byQuery || fromData || versions[0] || {}
|
||||
if (asCopy) {
|
||||
const keptMode = form.version.priceBuildMode
|
||||
const keptProducts = keptMode ? form.products.slice() : []
|
||||
const keptDetails = keptMode ? form.details.slice() : []
|
||||
form.version.psvId = undefined
|
||||
form.version.versionNo = nextVersionNo(versions)
|
||||
form.version.effectiveTime = undefined
|
||||
form.version.expireTime = undefined
|
||||
form.version.status = undefined
|
||||
form.version.priceBuildMode = undefined
|
||||
form.version.priceBuildMode = keptMode || undefined
|
||||
draftPefId.value = undefined
|
||||
draftPefIds.value = []
|
||||
savedPriceBuildMode.value = undefined
|
||||
form.details = []
|
||||
form.products = []
|
||||
if (keptMode) {
|
||||
form.products.splice(0, form.products.length, ...keptProducts)
|
||||
form.details.splice(0, form.details.length, ...keptDetails)
|
||||
} else {
|
||||
form.details = []
|
||||
form.products = []
|
||||
}
|
||||
} else if (asNewVersion) {
|
||||
// Draft is created on finish only. Resume only when query has psvId (legacy empty draft).
|
||||
// Keep mode/products if user already chose a build mode before this response landed.
|
||||
const keptMode = form.version.priceBuildMode
|
||||
const keptProducts = keptMode ? form.products.slice() : []
|
||||
const keptDetails = keptMode ? form.details.slice() : []
|
||||
const resume = qPsv != null ? byQuery : null
|
||||
form.version.psvId = resume ? resume.psvId : undefined
|
||||
form.version.versionNo = (resume && resume.versionNo) || nextVersionNo(versions)
|
||||
form.version.effectiveTime = undefined
|
||||
form.version.expireTime = undefined
|
||||
form.version.status = (resume && resume.status) || '0'
|
||||
form.version.priceBuildMode = undefined
|
||||
form.version.priceBuildMode = keptMode || undefined
|
||||
draftPefId.value = undefined
|
||||
draftPefIds.value = []
|
||||
savedPriceBuildMode.value = undefined
|
||||
form.details = []
|
||||
form.products = []
|
||||
if (keptMode) {
|
||||
form.products.splice(0, form.products.length, ...keptProducts)
|
||||
form.details.splice(0, form.details.length, ...keptDetails)
|
||||
} else {
|
||||
form.details = []
|
||||
form.products = []
|
||||
}
|
||||
} else {
|
||||
form.version.psvId = current.psvId
|
||||
form.version.versionNo = current.versionNo || nextVersionNo(versions)
|
||||
@@ -491,8 +516,11 @@ function applySetData(data, asCopy, asNewVersion) {
|
||||
}
|
||||
|
||||
function loadExisting(id, asCopy, asNewVersion) {
|
||||
getPriceSet(id).then(res => {
|
||||
pageReady.value = false
|
||||
return getPriceSet(id).then(res => {
|
||||
applySetData(res.data || {}, asCopy, asNewVersion)
|
||||
}).finally(() => {
|
||||
pageReady.value = true
|
||||
})
|
||||
}
|
||||
|
||||
@@ -501,6 +529,8 @@ onMounted(() => {
|
||||
const id = route.query.priceSetId
|
||||
if (id) {
|
||||
loadExisting(id, copyMode.value, newVersionMode.value)
|
||||
} else {
|
||||
pageReady.value = true
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user