Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2025-05-28 11:38:02 +08:00
commit c2ee643ce4
6 files changed
+199 -162

No files matched your search

@@ -58,7 +58,7 @@
<script setup lang="ts">
import { nanoid } from "nanoid"
import { useMessage } from "/@/hooks/message"
import { type rowVU } from "./packageUnit.vue"
import { type rowVU } from "./package-unit.vue"
export interface rowVC {
id: string
@@ -1,20 +1,10 @@
<template>
<el-row>
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="商户" prop="merchantId">-->
<!-- <select-mch v-model="form.merchantId" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12" class="mb20">
<el-form-item label="货号" prop="productCode">
<el-input v-model.trim="form.productCode" placeholder="请输入货号" />
</el-form-item>
</el-col>
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="自编码/条码" prop="barcode">-->
<!-- <el-input v-model.trim="form.barcode" placeholder="请输入自编码/条码" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12" class="mb20">
<el-form-item label="商品名称" prop="productName">
<el-input v-model.trim="form.productName" placeholder="请输入商品名称" />
@@ -51,44 +41,6 @@
<upload-img v-model:imageUrl="form.picUrl"></upload-img>
</el-form-item>
</el-col>
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="单位" prop="unit">-->
<!-- &lt;!&ndash; <el-alert type="warning" show-icon>&ndash;&gt;-->
<!-- &lt;!&ndash; <p>最小售卖的基本单位</p>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-alert>&ndash;&gt;-->
<!-- <el-input placeholder="请输入单位" v-model.trim="form.unit" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="14" class="mb20">-->
<!-- <el-form-item label="内装数" prop="packageNum">-->
<!-- &lt;!&ndash; <el-alert type="warning" show-icon >&ndash;&gt;-->
<!-- &lt;!&ndash; <p>注:内装数据必须为该商品的基本单位的内装数,否则无法完成库存数量转换。&ndash;&gt;-->
<!-- &lt;!&ndash; 例如:零售一瓶矿泉水内装数为1,按一箱售卖矿泉水内装填'24'</p>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-alert>&ndash;&gt;-->
<!-- <el-input-number v-model="form.packageNum" :min="0" :precision="0" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="零售价" prop="retailPrice">-->
<!-- <el-input-number v-model="form.retailPrice" :min="0" :precision="2" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="进价" prop="purchasePrice">-->
<!-- <el-input-number v-model="form.purchasePrice" :min="0" :precision="2" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="促销价" prop="promotionPrice">-->
<!-- <el-input-number v-model="form.promotionPrice" :min="0" :precision="2" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="成本价" prop="costPrice">-->
<!-- <el-input-number v-model="form.costPrice" :min="0" :precision="2" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="24" class="mb20">
<el-form-item label="商品状态" prop="status">
<el-radio-group v-model="form.status">
@@ -96,16 +48,6 @@
</el-radio-group>
</el-form-item>
</el-col>
<!-- <el-col :span="12" class="mb20">-->
<!-- <el-form-item label="规格" prop="spec">-->
<!-- <el-input placeholder="请输入规格" v-model.trim="form.spec" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12" class="mb20">
<el-form-item label="产地" prop="origin">
<el-input v-model.trim="form.origin" placeholder="请输入产地" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="排序字段" prop="sort">
<el-input-number :min="0" :max="1000" :precision="0" v-model="form.sort" />
@@ -116,6 +58,59 @@
<el-input-number v-model="form.grossMargin" :min="0" :precision="2" />
</el-form-item>
</el-col>
<el-col :span="24" class="mb20">
<el-form-item label="产地" prop="origin">
<el-input v-model.trim="form.origin" placeholder="请输入产地" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="条码" prop="barCode">
<el-input v-model.trim="form.barCode" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="规格" prop="spec">
<el-input v-model.trim="form.spec" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="单位" prop="unit">
<el-input v-model.trim="form.unit" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="单位状态" prop="unitStatus">
<el-radio-group v-model="form.unitStatus">
<el-radio label="0" border>正常</el-radio>
<el-radio label="1" border>停销</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="内装数" prop="packageNum">
<el-input-number v-model="form.packageNum" :min="0" :precision="0" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="进价(元)" prop="purchasePrice">
<el-input-number v-model="form.purchasePrice" :min="0" :precision="2" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="零售价(元)" prop="retailPrice">
<el-input-number v-model="form.retailPrice" :min="0" :precision="2" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="促销价(元)" prop="promotionPrice">
<el-input-number v-model="form.promotionPrice" :min="0" :precision="2" />
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-form-item label="成本价(元)" prop="costPrice">
<el-input-number v-model="form.costPrice" :min="0" :precision="2" />
</el-form-item>
</el-col>
</el-row>
</template>
@@ -1,7 +1,7 @@
<template>
<div class="w-full h-full p-1">
<el-row class="my-1">
<el-button type="primary" @click="pushEvent">新增</el-button>
<el-button type="primary" @click="pushEvent()">新增</el-button>
<el-button @click="removeSelectRowEvent">删除选中</el-button>
<el-tooltip effect="light" placement="right">
<template #content>
@@ -62,13 +62,13 @@
<vxe-column field="status" title="状态" :edit-render="{}">
<template #edit="{ row }">
<el-select v-model="row.status">
<el-option label="正常" :value="0" />
<el-option label="停销" :value="1" />
<el-option label="正常" value="0" />
<el-option label="停销" value="1" />
</el-select>
</template>
<template #default="{ row }">
<span v-if="row.status === 0">正常</span>
<span v-else-if="row.status === 1">停销</span>
<span v-if="row.status == '0'">正常</span>
<span v-else-if="row.status == '1'">停销</span>
<span v-else style="color: #c0c4cf">请选择</span>
</template>
</vxe-column>
@@ -113,6 +113,7 @@ export interface rowVU {
costPrice: number
isNew?: boolean
isBase?: boolean | null
flag?: string
}
const packageUnitList = defineModel<rowVU[]>("modelValue", {
@@ -145,19 +146,25 @@ const validRules = {
}
// 底部表格行新增
const pushEvent = () => {
const newRow: rowVU = {
id: nanoid(5),
barCode: "",
spec: "",
unit: "",
status: "",
packageNum: 0,
purchasePrice: 0,
retailPrice: 0,
promotionPrice: null,
costPrice: 0,
isNew: true,
const pushEvent = (row?: rowVU | undefined) => {
const newRow = {} as rowVU
if (row) {
Object.assign(newRow, row)
} else {
row = {
id: nanoid(5),
barCode: "",
spec: "",
unit: "",
status: "",
packageNum: 0,
purchasePrice: 0,
retailPrice: 0,
promotionPrice: null,
costPrice: 0,
isNew: true,
}
Object.assign(newRow, row)
}
packageUnitList.value.push(newRow)
nextTick(() => {
@@ -216,5 +223,6 @@ defineExpose({
editableTableValidate,
getRadioEvent,
setRadioRow,
pushEvent,
})
</script>
@@ -1,44 +1,48 @@
<template>
<el-dialog width="80%" :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="auto" v-loading="loading">
<el-tabs v-model="tabPaneActiveName" @tab-change="handleTabChange">
<el-tab-pane class="el-tab-pane" label="基础信息" name="基础信息">
<el-form ref="dataFormRef" :model="form" :rules="dataRules" label-width="150px" v-loading="loading">
<el-tabs class="el-tabs" v-model="tabPaneActiveName" @tab-change="handleTabChange" type="border-card">
<el-tab-pane class="el-tab-pane" label="基础信息" name="基础信息" :disabled="true">
<base-info v-model="form" />
</el-tab-pane>
<el-tab-pane class="el-tab-pane" label="包装单位" name="包装单位">
<el-tab-pane class="el-tab-pane" label="包装单位" name="包装单位" :disabled="true">
<package-unit ref="packageUnitRef" v-model="form.smErpUnitEntityList" />
</el-tab-pane>
<el-tab-pane class="el-tab-pane" label="库存" name="库存">
<el-tab-pane class="el-tab-pane" label="库存" name="库存" :disabled="true">
<product-inventory
v-model:stock="form.stock"
v-model:inventoryUpperLimit="form.inventoryUpperLimit"
v-model:inventoryLowerLimit="form.inventoryLowerLimit"
/>
</el-tab-pane>
<el-tab-pane class="el-tab-pane" label="辅助条码" name="辅助条码">
<el-tab-pane class="el-tab-pane" label="辅助条码" name="辅助条码" :disabled="true">
<auxiliary-code :smErpUnitEntityList="form.smErpUnitEntityList" v-model="form.smErpAuxiliaryCodeEntityList" />
</el-tab-pane>
</el-tabs>
</el-form>
<template #footer>
<el-button @click="visible = false">取消</el-button>
<!-- <el-button @click="visible = false">取消</el-button> -->
<el-button v-if="currentTabPaneIndex != 0" type="primary" @click="currentTabPaneIndex--" :disabled="loading">上一步</el-button>
<el-button v-if="currentTabPaneIndex != 3" type="primary" @click="currentTabPaneIndex++">下一步</el-button>
<el-button v-if="currentTabPaneIndex == 0" type="primary" @click="addPackageUnitNextStep">下一步</el-button>
<el-button v-if="currentTabPaneIndex == 1 || currentTabPaneIndex == 2" type="primary" @click="currentTabPaneIndex++">
下一步
</el-button>
<el-button v-if="currentTabPaneIndex == 3" type="primary" @click="onSubmit" :disabled="loading">提 交</el-button>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import baseInfo from "./components/baseInfo.vue"
import packageUnit, { type rowVU } from "./components/packageUnit.vue"
import productInventory from "./components/productInventory.vue"
import auxiliaryCode, { type rowVC } from "./components/auxiliaryCode.vue"
import BaseInfo from "./components/base-info.vue"
import PackageUnit, { type rowVU } from "./components/package-unit.vue"
import ProductInventory from "./components/product-inventory.vue"
import AuxiliaryCode, { type rowVC } from "./components/auxiliary-code.vue"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/supermarketSpu"
import { TabPaneName } from "element-plus"
import { useMessage } from "/@/hooks/message"
import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { nanoid } from "nanoid"
const emit = defineEmits(["refresh"])
@@ -55,39 +59,39 @@ const form = reactive<any>({
id: "",
merchantId: "",
productCode: "",
barcode: "",
productName: "",
unit: "",
categoryId: "",
brandId: "",
picUrl: "",
sliderPicUrls: "",
sort: 0,
status: "0",
costPrice: 0,
stock: 0,
spec: "",
origin: "",
packageNum: 0,
retailPrice: 0,
purchasePrice: 0,
supplierId: "",
promotionPrice: 0,
productNature: "",
inventoryUpperLimit: 0,
inventoryLowerLimit: 0,
grossMargin: 0,
smErpUnitEntityList: [],
smErpAuxiliaryCodeEntityList: [],
barCode: "",
spec: "",
unit: "",
unitStatus: "0",
packageNum: 0,
purchasePrice: 0,
retailPrice: 0,
promotionPrice: 0,
costPrice: 0,
})
// 定义校验规则
const dataRules = {
productNature: [{ required: true, message: "请选择商品性质", trigger: "blur" }],
merchantId: [{ required: true, message: "商户不能为空", trigger: "blur" }],
productCode: [{ required: true, message: "货号不能为空", trigger: "blur" }],
barcode: [{ required: true, message: "自编码/条码不能为空", trigger: "blur" }],
productName: [{ required: true, message: "商品名称不能为空", trigger: "blur" }],
unit: [{ required: true, message: "单位不能为空", trigger: "blur" }],
categoryId: [{ required: true, message: "商品分类不能为空", trigger: "blur" }],
// brandId: [{ required: true, message: "品牌不能为空", trigger: "blur" }],
// picUrl: [{ required: true, message: "商品封面图不能为空", trigger: "blur" }],
@@ -95,15 +99,18 @@ const dataRules = {
supplierId: [{ required: true, message: "请选择货商", trigger: "blur" }],
smErpUnitEntityList: [{ required: true, message: "请添加包装单位", trigger: "change" }],
smErpAuxiliaryCodeEntityList: [{ required: true, message: "请添加辅助条码", trigger: "change" }],
retailPrice: [{ required: true, message: "零售价不能为空", trigger: "blur" }],
purchasePrice: [{ required: true, message: "进价不能为空", trigger: "blur" }],
promotionPrice: [{ required: true, message: "促销价不能为空", trigger: "blur" }],
costPrice: [{ required: true, message: "成本价不能为空", trigger: "blur" }],
packageNum: [{ required: true, message: "内装数不能为空", trigger: "blur" }],
stock: [{ required: true, message: "总库存不能为空", trigger: "blur" }],
inventoryUpperLimit: [{ required: true, message: "库存上限不能为空", trigger: "blur" }],
inventoryLowerLimit: [{ required: true, message: "库存下限不能为空", trigger: "blur" }],
// barCode: [{ required: true, message: "条码不能为空", trigger: "blur" }],
// unit: [{ required: true, message: "单位不能为空", trigger: "blur" }],
// unitStatus: [{ required: true, message: "单位状态不能为空", trigger: "blur" }],
// packageNum: [{ required: true, message: "内装数不能为空", trigger: "blur" }],
// purchasePrice: [{ required: true, message: "进价不能为空", trigger: "blur" }],
// retailPrice: [{ required: true, message: "零售价不能为空", trigger: "blur" }],
// promotionPrice: [{ required: true, message: "促销价不能为空", trigger: "blur" }],
// costPrice: [{ required: true, message: "成本价不能为空", trigger: "blur" }],
}
// 打开弹窗
@@ -158,6 +165,28 @@ const resetForm = () => {
form.smErpAuxiliaryCodeEntityList = []
}
// 第一步的下一步
const addPackageUnitNextStep = () => {
currentTabPaneIndex.value++
const row = {
id: nanoid(5),
barCode: form.barCode,
spec: form.spec,
unit: form.unit,
status: form.unitStatus,
packageNum: form.packageNum,
purchasePrice: form.purchasePrice,
retailPrice: form.retailPrice,
promotionPrice: form.promotionPrice,
costPrice: form.costPrice,
isNew: true,
flag: "addPackageUnitNextStep",
}
const isFlagRowExist = form.smErpUnitEntityList.some((item: rowVU) => item.flag === "addPackageUnitNextStep")
if (isFlagRowExist) return
packageUnitRef.value.pushEvent(row)
}
// tab栏切换
const handleTabChange = (name: TabPaneName) => (currentTabPaneIndex.value = tabPaneEnum.findIndex((item) => item === name))
@@ -177,7 +206,7 @@ const usePackageUnitList = () => {
item.retailPrice = storePrice(item.retailPrice)
if (item.isNew) {
item.id = ""
delete item.isNew
// delete item.isNew
}
return item
})
@@ -189,7 +218,7 @@ const useAuxiliaryCode = () => {
return smErpAuxiliaryCodeEntityList
.filter((item: rowVC) => item.unitId)
.map((item: rowVC) => {
const curPackageUnitItem = form.smErpUnitEntityList.find((unitItem: any) => unitItem.id === item.unitId)
const curPackageUnitItem = form.smErpUnitEntityList.find((unitItem: any) => unitItem.id == item.unitId)
console.log(form.smErpUnitEntityList)
if (item.isNew) {
@@ -253,4 +282,8 @@ defineExpose({
overflow-y: auto;
height: 60vh;
}
::v-deep .el-tabs .el-tabs__nav .is-active {
color: #2e5cf6 !important;
font-weight: bold !important;
}
</style>