增加建立新版本
This commit is contained in:
@@ -201,6 +201,9 @@ async function finish() {
|
||||
// Backend copies latest prior version products/details into this draft
|
||||
await reloadProductsAfterImportModeSave()
|
||||
proxy.$modal.msgSuccess("建价方式已保存,已带出上一版产品,可导入 Excel 按产品+国家覆盖或新增")
|
||||
} else if (version.priceBuildMode === 'IMPORT_FRESH') {
|
||||
savedProductsSnapshot.value = (products.value || []).map(p => ({ ...p }))
|
||||
proxy.$modal.msgSuccess("建价方式已保存并清空旧明细,可直接导入 Excel 建价(不延用以前的产品价格)")
|
||||
} else {
|
||||
savedProductsSnapshot.value = (products.value || []).map(p => ({ ...p }))
|
||||
proxy.$modal.msgSuccess("建价方式已保存并清空旧明细,可导入 Excel 建价")
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
type="button"
|
||||
class="build-card build-card--pull"
|
||||
:class="{ selected: isPullBuildMode(priceBuildMode) }"
|
||||
:disabled="buildModeLocked || choosingMode"
|
||||
:disabled="!canChooseBuildMode"
|
||||
@click="chooseBuildMode('PULL')"
|
||||
>
|
||||
<div class="build-card__title">按产品价建价</div>
|
||||
@@ -61,11 +61,21 @@
|
||||
type="button"
|
||||
class="build-card build-card--import"
|
||||
:class="{ selected: isImportBuildMode(priceBuildMode) }"
|
||||
:disabled="buildModeLocked || !isFixedType(setType) || choosingMode"
|
||||
:disabled="!canChooseBuildMode || !isFixedType(setType)"
|
||||
@click="chooseBuildMode('IMPORT')"
|
||||
>
|
||||
<div class="build-card__title">Excel 导入建价</div>
|
||||
<div class="build-card__desc">上传威狮 B2C 小包价表,直接生成套餐销售价</div>
|
||||
<div class="build-card__title">按上一版 Excel 建价</div>
|
||||
<div class="build-card__desc">延用以前的产品价格,带出上一版后再导入 Excel 按产品+国家覆盖或新增</div>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="build-card build-card--import-fresh"
|
||||
:class="{ selected: isImportFreshBuildMode(priceBuildMode) }"
|
||||
:disabled="!canChooseBuildMode || !isFixedType(setType)"
|
||||
@click="chooseBuildMode('IMPORT_FRESH')"
|
||||
>
|
||||
<div class="build-card__title">Excel 重新建价</div>
|
||||
<div class="build-card__desc">不延用以前的产品价格,不带出上一版,上传 Excel 直接生成套餐销售价</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -207,7 +217,9 @@ import {
|
||||
isBuildModeLockedVersion,
|
||||
isDiscountType,
|
||||
isFixedType,
|
||||
isExcelBuildMode,
|
||||
isImportBuildMode,
|
||||
isImportFreshBuildMode,
|
||||
isPullBuildMode,
|
||||
pickLatestPriorVersion,
|
||||
setTypeLabel,
|
||||
@@ -233,7 +245,9 @@ const props = defineProps({
|
||||
/** Version status: draft can change build mode; started versions lock it */
|
||||
versionStatus: { type: [String, Number], default: undefined },
|
||||
/** True when build mode changed locally and not saved yet */
|
||||
buildModeDirty: { type: Boolean, default: false }
|
||||
buildModeDirty: { type: Boolean, default: false },
|
||||
/** False while parent still loading package data — avoid first click being wiped by applySetData */
|
||||
buildModeReady: { type: Boolean, default: true }
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:psvId', 'update:priceBuildMode', 'update:pefId'])
|
||||
@@ -279,7 +293,7 @@ const regionOptions = ref([])
|
||||
const countryImportDesc = [
|
||||
'选择目的国家后上传专线成本价表(含「产品目录」),目录中的产品都会记到该国家。',
|
||||
'按产品+国家覆盖:仅替换已选国家的明细,其它产品/国家保留。',
|
||||
'邮编、赔偿标准等 sheet 不导入。仅套餐「Excel 导入建价」可用。'
|
||||
'邮编、赔偿标准等 sheet 不导入。仅套餐 Excel 建价方式可用。'
|
||||
]
|
||||
const importProgressVisible = ref(false)
|
||||
const importProgressPercent = ref(0)
|
||||
@@ -287,16 +301,19 @@ const importProgressMessage = ref('')
|
||||
const importProgressStatus = ref(undefined)
|
||||
const progressDialogTitle = ref('正在导入价格')
|
||||
const hasBuildMode = computed(() => {
|
||||
if (isPullBuildMode(props.priceBuildMode) || isImportBuildMode(props.priceBuildMode)) return true
|
||||
if (isPullBuildMode(props.priceBuildMode) || isExcelBuildMode(props.priceBuildMode)) return true
|
||||
// Legacy / already has products: treat as build mode ready
|
||||
return (props.products || []).some(p => p && p.productCode)
|
||||
})
|
||||
/** Started (non-draft) versions: show cards but disable switching */
|
||||
const buildModeLocked = computed(() => isBuildModeLockedVersion(props.versionStatus))
|
||||
const choosingMode = ref(false)
|
||||
const canChooseBuildMode = computed(() =>
|
||||
!!props.buildModeReady && !buildModeLocked.value && !choosingMode.value
|
||||
)
|
||||
const isModifyImport = computed(() => {
|
||||
if (isPullBuildMode(props.priceBuildMode)) return true
|
||||
if (isImportBuildMode(props.priceBuildMode)) return false
|
||||
if (isExcelBuildMode(props.priceBuildMode)) return false
|
||||
return (props.products || []).some(p => p && p.productCode)
|
||||
})
|
||||
const importActionLabel = computed(() =>
|
||||
@@ -311,27 +328,36 @@ const importDesc = computed(() => {
|
||||
'仅固定价套餐可导入;未匹配行不会新增明细。'
|
||||
]
|
||||
}
|
||||
if (isImportFreshBuildMode(props.priceBuildMode)) {
|
||||
return [
|
||||
'适用威狮B2C小包价表(含「产品目录」)。',
|
||||
'不延用以前的产品价格;导入按「产品+国家」写入套餐销售价,直接生成产品明细。',
|
||||
'同一产品下重复国家+重量段将整单失败。仅固定价套餐「Excel 重新建价」可用。'
|
||||
]
|
||||
}
|
||||
return [
|
||||
'适用威狮B2C小包价表(含「产品目录」)。',
|
||||
'先带出上一版全部产品;导入按「产品+国家」匹配:命中则覆盖该国家明细,未命中则新增;其它产品/国家保留。',
|
||||
'同一产品下重复国家+重量段将整单失败。仅固定价套餐「导入 Excel 建价」可用。'
|
||||
'延用以前的产品价格:先带出上一版全部产品;导入按「产品+国家」匹配:命中则覆盖该国家明细,未命中则新增;其它产品/国家保留。',
|
||||
'同一产品下重复国家+重量段将整单失败。仅固定价套餐「按上一版 Excel 建价」可用。'
|
||||
]
|
||||
})
|
||||
|
||||
const typeHint = computed(() => {
|
||||
if (isPullBuildMode(props.priceBuildMode)) return '· 按产品价建价'
|
||||
if (isImportBuildMode(props.priceBuildMode)) return '· Excel 导入'
|
||||
if (isImportBuildMode(props.priceBuildMode)) return '· 按上一版 Excel 建价'
|
||||
if (isImportFreshBuildMode(props.priceBuildMode)) return '· Excel 重新建价'
|
||||
if (hasBuildMode.value) return '· 当前:' + setTypeLabel(props.setType)
|
||||
return '· 请选择创建价格方式'
|
||||
})
|
||||
// PULL: hide pull btn (already pulled), show modify-import.
|
||||
// IMPORT: show create-import.
|
||||
// IMPORT / IMPORT_FRESH: show create-import.
|
||||
const showPullAction = computed(() => false)
|
||||
const showImportAction = computed(() => hasBuildMode.value && isFixedType(props.setType))
|
||||
const emptyTip = computed(() => {
|
||||
if (props.livePersist) return '暂无产品'
|
||||
if (isPullBuildMode(props.priceBuildMode)) return '暂无产品,请先返回上一步重新拉取或等待拉取完成'
|
||||
if (isImportBuildMode(props.priceBuildMode)) return '暂无上一版产品,请点击右上角导入 Excel 建价(按产品+国家覆盖或新增)'
|
||||
if (isImportFreshBuildMode(props.priceBuildMode)) return '暂无产品,请点击右上角导入 Excel 建价'
|
||||
return '暂无产品,请先选择创建价格方式'
|
||||
})
|
||||
|
||||
@@ -467,7 +493,7 @@ const pulling = ref(false)
|
||||
function noop() {}
|
||||
|
||||
async function chooseBuildMode(mode) {
|
||||
if (!mode || choosingMode.value || buildModeLocked.value) return
|
||||
if (!mode || !canChooseBuildMode.value) return
|
||||
if (mode === props.priceBuildMode) return
|
||||
choosingMode.value = true
|
||||
try {
|
||||
@@ -1103,6 +1129,7 @@ defineExpose({ pullAllFromLibrary, clearLocalDraft, loadLatestPriorVersionDraft
|
||||
}
|
||||
.build-card--pull:hover:not(:disabled) { border-color: #67c23a; }
|
||||
.build-card--import:hover:not(:disabled) { border-color: #409eff; }
|
||||
.build-card--import-fresh:hover:not(:disabled) { border-color: #e6a23c; }
|
||||
.build-card__title {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
@@ -1111,6 +1138,7 @@ defineExpose({ pullAllFromLibrary, clearLocalDraft, loadLatestPriorVersionDraft
|
||||
}
|
||||
.build-card--pull .build-card__title { color: #67c23a; }
|
||||
.build-card--import .build-card__title { color: #409eff; }
|
||||
.build-card--import-fresh .build-card__title { color: #e6a23c; }
|
||||
.build-card__desc {
|
||||
font-size: 13px;
|
||||
line-height: 1.6;
|
||||
|
||||
Reference in New Issue
Block a user