Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
c2ee643ce4
6 files changed
+199
-162
No files matched your search
+1
-1
@@ -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
|
||||
+53
-58
@@ -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">-->
|
||||
<!-- <!– <el-alert type="warning" show-icon>–>-->
|
||||
<!-- <!– <p>最小售卖的基本单位</p>–>-->
|
||||
<!-- <!– </el-alert>–>-->
|
||||
<!-- <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">-->
|
||||
<!-- <!– <el-alert type="warning" show-icon >–>-->
|
||||
<!-- <!– <p>注:内装数据必须为该商品的基本单位的内装数,否则无法完成库存数量转换。–>-->
|
||||
<!-- <!– 例如:零售一瓶矿泉水内装数为1,按一箱售卖矿泉水内装填'24'</p>–>-->
|
||||
<!-- <!– </el-alert>–>-->
|
||||
<!-- <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>
|
||||
|
||||
+26
-18
@@ -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>
|
||||
File renamed without changes.
@@ -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>
|
||||
Reference in new issue
Block a user