|
@@ -2,7 +2,7 @@
|
|
<!-- 单规格 -->
|
|
<!-- 单规格 -->
|
|
<template v-if="formData!.skus!.length == 1">
|
|
<template v-if="formData!.skus!.length == 1">
|
|
<el-form
|
|
<el-form
|
|
-ref="formRef" :model="item" v-for="item in formData!.skus!" :key="item"
|
|
|
|
|
|
+ref="formRef" :model="item" v-for="item in formData!.skus!" :key="item"
|
|
:class="{ 'view': isDetail, 'mobile-card': mobile }" label-width="80px" :disabled="isDetail"
|
|
:class="{ 'view': isDetail, 'mobile-card': mobile }" label-width="80px" :disabled="isDetail"
|
|
style="margin:0;padding: 0;width: 100%">
|
|
style="margin:0;padding: 0;width: 100%">
|
|
<el-row>
|
|
<el-row>
|
|
@@ -34,13 +34,10 @@ v-for="(item2, index) in tableHeaders" :key="index" :label="item2.label" align="
|
|
</el-row>
|
|
</el-row>
|
|
<el-row>
|
|
<el-row>
|
|
<el-col>
|
|
<el-col>
|
|
-
|
|
|
|
|
|
+
|
|
<el-form-item label="销售价">
|
|
<el-form-item label="销售价">
|
|
<el-input-number
|
|
<el-input-number
|
|
-v-if="highPrecisionChange.value" v-model="item.highPrecisionPrice" :min="0" :precision="6"
|
|
|
|
- :step="0.1" class="w-100%" controls-position="right" />
|
|
|
|
- <el-input-number
|
|
|
|
-v-else v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
|
|
|
|
+v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
controls-position="right" />
|
|
controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -50,7 +47,7 @@ v-else v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<el-form-item label="市场价">
|
|
<el-form-item label="市场价">
|
|
<el-input-number
|
|
<el-input-number
|
|
v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
- controls-position="right" :disabled="highPrecisionChange.value" />
|
|
|
|
|
|
+ controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
@@ -59,19 +56,15 @@ v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<el-form-item label="成本价">
|
|
<el-form-item label="成本价">
|
|
<el-input-number
|
|
<el-input-number
|
|
v-model="item.costPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
v-model="item.costPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
- controls-position="right" :disabled="highPrecisionChange.value" />
|
|
|
|
|
|
+ controls-position="right" :disabled="areaId.value == 2" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
<el-row>
|
|
<el-row>
|
|
<el-col>
|
|
<el-col>
|
|
<el-form-item label="结算价">
|
|
<el-form-item label="结算价">
|
|
-
|
|
|
|
- <el-input-number
|
|
|
|
-v-if="highPrecisionChange.value" v-model="item.highPrecisionSettlementPrice" :min="0" :precision="6"
|
|
|
|
- :step="0.1" class="w-100%" controls-position="right" />
|
|
|
|
<el-input-number
|
|
<el-input-number
|
|
-v-else v-model="item.settlementPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
|
|
|
|
+v-model="item.settlementPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
controls-position="right" />
|
|
controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -123,7 +116,7 @@ v-model="item.volume" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<!-- 移动端多规格 -->
|
|
<!-- 移动端多规格 -->
|
|
<template v-else>
|
|
<template v-else>
|
|
<el-form
|
|
<el-form
|
|
-ref="formRef" :model="item" v-for="(item, index) in formData!.skus!" :key="item"
|
|
|
|
|
|
+ref="formRef" :model="item" v-for="(item, index) in formData!.skus!" :key="item"
|
|
:class="{ 'view': isDetail, 'mobile-card': mobile }" label-width="80px" :disabled="isDetail">
|
|
:class="{ 'view': isDetail, 'mobile-card': mobile }" label-width="80px" :disabled="isDetail">
|
|
<div class="mobile-card-title">
|
|
<div class="mobile-card-title">
|
|
<Icon icon="ep:list" /> 规格列表 {{ index + 1 }}
|
|
<Icon icon="ep:list" /> 规格列表 {{ index + 1 }}
|
|
@@ -158,11 +151,9 @@ v-for="(item2, index) in tableHeaders" :key="index" :label="item2.label" align="
|
|
<el-row>
|
|
<el-row>
|
|
<el-col>
|
|
<el-col>
|
|
<el-form-item label="销售价">
|
|
<el-form-item label="销售价">
|
|
|
|
+
|
|
<el-input-number
|
|
<el-input-number
|
|
-v-if="highPrecisionChange.value" v-model="item.highPrecisionPrice" :min="0" :precision="6"
|
|
|
|
- :step="0.1" class="w-100%" controls-position="right" />
|
|
|
|
- <el-input-number
|
|
|
|
-v-else v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
|
|
|
|
+v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
controls-position="right" />
|
|
controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -172,7 +163,7 @@ v-else v-model="item.price" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<el-form-item label="市场价">
|
|
<el-form-item label="市场价">
|
|
<el-input-number
|
|
<el-input-number
|
|
v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
- controls-position="right" :disabled="highPrecisionChange.value" />
|
|
|
|
|
|
+ controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
@@ -181,7 +172,7 @@ v-model="item.marketPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<el-form-item label="成本价">
|
|
<el-form-item label="成本价">
|
|
<el-input-number
|
|
<el-input-number
|
|
v-model="item.costPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
v-model="item.costPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
- controls-position="right" :disabled="highPrecisionChange.value" />
|
|
|
|
|
|
+ controls-position="right" :disabled="areaId.value == 2" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
@@ -190,10 +181,7 @@ v-model="item.costPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
<el-form-item label="结算价">
|
|
<el-form-item label="结算价">
|
|
|
|
|
|
<el-input-number
|
|
<el-input-number
|
|
-v-if="highPrecisionChange.value" v-model="item.highPrecisionSettlementPrice" :min="0" :precision="6"
|
|
|
|
- :step="0.1" class="w-100%" controls-position="right" />
|
|
|
|
- <el-input-number
|
|
|
|
-v-else v-model="item.settlementPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
|
|
|
|
+v-model="item.settlementPrice" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
controls-position="right" />
|
|
controls-position="right" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -239,7 +227,7 @@ v-model="item.volume" :min="0" :precision="2" :step="0.1" class="w-100%"
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
-
|
|
|
|
|
|
+
|
|
</el-form>
|
|
</el-form>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -259,8 +247,8 @@ const appStore = useAppStore()
|
|
const mobile = computed(() => appStore.getMobile)
|
|
const mobile = computed(() => appStore.getMobile)
|
|
import { inject } from 'vue';
|
|
import { inject } from 'vue';
|
|
import { ElTable } from 'element-plus'
|
|
import { ElTable } from 'element-plus'
|
|
-const spuTypeChange = inject('spuTypeChange');
|
|
|
|
-const highPrecisionChange = inject('highPrecisionChange');
|
|
|
|
|
|
+
|
|
|
|
+const areaId = inject('areaId') as Ref<number>;
|
|
defineOptions({ name: 'SkuList' })
|
|
defineOptions({ name: 'SkuList' })
|
|
const message = useMessage() // 消息弹窗
|
|
const message = useMessage() // 消息弹窗
|
|
|
|
|
|
@@ -300,30 +288,6 @@ const skuList = ref<Sku[]>([
|
|
}
|
|
}
|
|
]) // 批量添加时的临时数据
|
|
]) // 批量添加时的临时数据
|
|
|
|
|
|
-watchEffect(() => {
|
|
|
|
- skuList.value.forEach(sku => {
|
|
|
|
- // 直接计算推广费并更新
|
|
|
|
- sku.promotionFee = sku.price - sku.costPrice;
|
|
|
|
- });
|
|
|
|
-});
|
|
|
|
-// 监听如果开启高精度 销售价 市场价 成本价 推广费清0
|
|
|
|
-watch(() => highPrecisionChange.value, (newVal) => {
|
|
|
|
- // console.log(newVal, formData.value!.skus!)
|
|
|
|
- if (newVal) {
|
|
|
|
- formData.value!.skus!.forEach(sku => {
|
|
|
|
- sku.price = 0
|
|
|
|
- sku.marketPrice = 0
|
|
|
|
- sku.costPrice = 0
|
|
|
|
- sku.promotionFee = 0
|
|
|
|
- });
|
|
|
|
- } else {
|
|
|
|
- formData.value!.skus!.forEach(sku => {
|
|
|
|
- sku.highPrecisionPrice = 0
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-});
|
|
|
|
-
|
|
|
|
/** 商品图预览 */
|
|
/** 商品图预览 */
|
|
const imagePreview = (imgUrl: string) => {
|
|
const imagePreview = (imgUrl: string) => {
|
|
createImageViewer({
|
|
createImageViewer({
|
|
@@ -356,7 +320,7 @@ const validateSku = () => {
|
|
let validate = true // 默认通过
|
|
let validate = true // 默认通过
|
|
for (const sku of formData.value!.skus!) {
|
|
for (const sku of formData.value!.skus!) {
|
|
// 作为活动组件的校验
|
|
// 作为活动组件的校验
|
|
- const ruleConfigg = highPrecisionChange.value ? [] :props?.ruleConfig
|
|
|
|
|
|
+ const ruleConfigg = areaId.value ? [] : props?.ruleConfig
|
|
for (const rule of ruleConfigg) {
|
|
for (const rule of ruleConfigg) {
|
|
const arg = getValue(sku, rule.name)
|
|
const arg = getValue(sku, rule.name)
|
|
// console.log(arg, rule.rule)
|
|
// console.log(arg, rule.rule)
|
|
@@ -370,41 +334,21 @@ const validateSku = () => {
|
|
message.warning("sku必须上传图片")
|
|
message.warning("sku必须上传图片")
|
|
throw new Error("sku必须上传图片")
|
|
throw new Error("sku必须上传图片")
|
|
}
|
|
}
|
|
- // 如果spu是虚拟产品0 那么销售价可以大于等于成本价
|
|
|
|
- if (spuTypeChange.value == 0) {
|
|
|
|
- if (parseFloat(sku.price) < parseFloat(sku.costPrice)) {
|
|
|
|
- message.warning("商品销售价必须大于成本价")
|
|
|
|
- throw new Error("商品销售价必须大于成本价")
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- if (parseFloat(sku.price) <= parseFloat(sku.costPrice)) {
|
|
|
|
- message.warning("商品销售价必须大于成本价")
|
|
|
|
- throw new Error("商品销售价必须大于成本价")
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
- // 如果是开启高精度 结算价必须小于等于销售价
|
|
|
|
- if(highPrecisionChange.value){
|
|
|
|
- if(!parseFloat(sku.highPrecisionPrice)){
|
|
|
|
- message.warning("商品销售价必须大于 0 元")
|
|
|
|
- throw new Error("商品销售价必须大于 0 元")
|
|
|
|
- }
|
|
|
|
- if(!parseFloat(sku.highPrecisionSettlementPrice)){
|
|
|
|
- message.warning("商品结算价必须大于 0 元")
|
|
|
|
- throw new Error("商品结算价必须大于 0 元")
|
|
|
|
- }
|
|
|
|
- if(parseFloat(sku.highPrecisionPrice) < parseFloat(sku.highPrecisionSettlementPrice)){
|
|
|
|
- message.warning("商品结算价必须小于等于销售价")
|
|
|
|
- throw new Error("商品结算价必须小于等于销售价")
|
|
|
|
- }
|
|
|
|
- }else{
|
|
|
|
- // 如果是正常商品 结算价必须小于等于成本价
|
|
|
|
- if(parseFloat( sku.costPrice) < parseFloat(sku.settlementPrice) ){
|
|
|
|
- message.warning("商品结算价必须小于等于成本价")
|
|
|
|
- throw new Error("商品结算价必须小于等于成本价")
|
|
|
|
|
|
+
|
|
|
|
+ // 如果是选了绿区 那么销售价必须等于成本价
|
|
|
|
+ if (areaId.value === 2) {
|
|
|
|
+ if (sku.price != sku.costPrice) {
|
|
|
|
+ message.warning("商品销售价必须等于成本价")
|
|
|
|
+ throw new Error("商品销售价必须等于成本价")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 结算价不能大于销售价
|
|
|
|
+ if (parseFloat(sku.settlementPrice) > parseFloat(sku.price)) {
|
|
|
|
+ message.warning("商品结算价不能大于销售价")
|
|
|
|
+ throw new Error("商品结算价不能大于销售价")
|
|
|
|
+ }
|
|
|
|
|
|
// 只要有一个不通过则结束后续的校验
|
|
// 只要有一个不通过则结束后续的校验
|
|
if (!validate) {
|
|
if (!validate) {
|
|
@@ -445,16 +389,17 @@ const handleSelectionChange = (val: Sku[]) => {
|
|
watch(
|
|
watch(
|
|
() => props.propFormData,
|
|
() => props.propFormData,
|
|
(data) => {
|
|
(data) => {
|
|
- console.log(data)
|
|
|
|
-
|
|
|
|
if (!data) return
|
|
if (!data) return
|
|
formData.value = data
|
|
formData.value = data
|
|
|
|
|
|
- watchEffect(() => {
|
|
|
|
- formData.value.skus.forEach(sku => {
|
|
|
|
- // 直接计算推广费并更新
|
|
|
|
- sku.promotionFee = sku.price - sku.costPrice;
|
|
|
|
- });
|
|
|
|
|
|
+ formData.value.skus.forEach(sku => {
|
|
|
|
+ // 直接计算推广费并更新
|
|
|
|
+ sku.promotionFee = sku.price - sku.costPrice;
|
|
|
|
+
|
|
|
|
+ // 如果绿区则成本价等于销售价
|
|
|
|
+ if(areaId.value === 2){
|
|
|
|
+ sku.costPrice = sku.price;
|
|
|
|
+ }
|
|
});
|
|
});
|
|
},
|
|
},
|
|
{
|
|
{
|