优化编辑商品

This commit is contained in:
gyq 2024-07-11 17:57:37 +08:00
parent bbd8405605
commit 7c8942942d
1 changed files with 101 additions and 378 deletions

View File

@ -1,21 +1,10 @@
<template>
<div class="app-container">
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="140px"
label-position="left"
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="140px" label-position="left">
<el-form-item label="商品类型" prop="typeEnum">
<div class="shop_type_box" :class="{ disabled: form.id }">
<div
class="item"
v-for="(item, index) in shopTypes"
:key="index"
:class="{ active: shopTypesActive == index }"
@click="changeTypeEnum(index)"
>
<div class="item" v-for="(item, index) in shopTypes" :key="index"
:class="{ active: shopTypesActive == index }" @click="changeTypeEnum(index)">
<div class="s_title">{{ item.label }}</div>
<div class="intro">{{ item.intro }}</div>
<div class="active_dot">
@ -25,132 +14,56 @@
</div>
</el-form-item>
<el-form-item label="商品名称" prop="name">
<el-input
v-model="form.name"
placeholder="请输入商品名称"
style="width: 500px;"
></el-input>
<el-input v-model="form.name" placeholder="请输入商品名称" style="width: 500px;"></el-input>
</el-form-item>
<el-form-item label="单位">
<el-select
v-model="form.unitId"
placeholder="请选择单位"
style="width: 500px;"
@change="selectUnitt"
>
<el-option
:label="item.name"
:value="item.id"
v-for="item in units"
:key="item.id"
></el-option>
<el-select v-model="form.unitId" placeholder="请选择单位" style="width: 500px;" @change="selectUnitt">
<el-option :label="item.name" :value="item.id" v-for="item in units" :key="item.id"></el-option>
</el-select>
<el-button
type="primary"
plain
icon="el-icon-plus"
@click="$refs.addUnitRef.show()"
>添加单位</el-button
>
<el-button type="primary" plain icon="el-icon-plus" @click="$refs.addUnitRef.show()">添加单位</el-button>
<addUnit ref="addUnitRef" @success="tbShopUnit" />
</el-form-item>
<el-form-item
label="团购券分类"
prop="groupCategoryId"
v-if="form.typeEnum == 'group'"
>
<el-table
:data="form.groupCategoryId"
border
style="width: 500px;"
v-if="form.groupCategoryId.length"
>
<el-form-item label="团购券分类" prop="groupCategoryId" v-if="form.typeEnum == 'group'">
<el-table :data="form.groupCategoryId" border style="width: 500px;" v-if="form.groupCategoryId.length">
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="操作" width="160">
<template v-slot="scope">
<el-button
type="text"
@click="form.groupCategoryId.splice(scope.$index, 1)"
>删除</el-button
>
<el-button type="text" @click="form.groupCategoryId.splice(scope.$index, 1)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-button
type="text"
@click="$refs.groupTypeList.show(form.groupCategoryId)"
>添加团购券分类</el-button
>
<el-button type="text" @click="$refs.groupTypeList.show(form.groupCategoryId)">添加团购券分类</el-button>
</el-form-item>
<el-form-item label="商品分类" prop="categoryId" v-else>
<el-select
v-model="form.categoryId"
placeholder="请选择商品分类"
style="width: 500px;"
>
<el-option
:label="item.name"
:value="item.id"
v-for="item in categorys"
:key="item.id"
></el-option>
<el-select v-model="form.categoryId" placeholder="请选择商品分类" style="width: 500px;">
<el-option :label="item.name" :value="item.id" v-for="item in categorys" :key="item.id"></el-option>
</el-select>
<el-button
type="primary"
plain
icon="el-icon-plus"
@click="$refs.addClassifyRef.show()"
>添加分类</el-button
>
<el-button type="primary" plain icon="el-icon-plus" @click="$refs.addClassifyRef.show()">添加分类</el-button>
<addClassify ref="addClassifyRef" @success="tbShopCategoryGet" />
</el-form-item>
<el-form-item label="商品图片">
<uploadImg
ref="uploadImg"
:limit="9"
@success="uploadSuccess"
@remove="uploadRemove"
/>
<uploadImg ref="uploadImg" :limit="9" @success="uploadSuccess" @remove="uploadRemove" />
<div class="tips">第一张图为商品封面图图片尺寸为750×750</div>
</el-form-item>
<el-form-item
label="套餐商品"
v-if="shopTypes[shopTypesActive].typeEnum == 'group'"
>
<el-form-item label="套餐商品" v-if="shopTypes[shopTypesActive].typeEnum == 'group'">
<el-table :data="form.groupSnap" border v-if="form.groupSnap.length">
<el-table-column label="标题" prop="title">
<template v-slot="scope">
<el-input
v-model="scope.row.title"
placeholder="请输入标题:自选小吃"
></el-input>
<el-input v-model="scope.row.title" placeholder="请输入标题:自选小吃"></el-input>
</template>
</el-table-column>
<el-table-column label="商品信息">
<template v-slot="scope">
<div class="shop_list">
<div
class="item"
v-for="(item, index) in scope.row.goods"
:key="item.id"
>
<div class="item" v-for="(item, index) in scope.row.goods" :key="item.id">
<span class="dot"></span>
<div class="name">
<div class="t">{{ item.name }}</div>
<div class="t" v-if="!form.id">x{{ item.groupNum }}</div>
<el-input-number
v-model="item.groupNum"
:step="1"
step-strictly
:min="1"
size="mini"
v-else
></el-input-number>
<el-input-number v-model="item.groupNum" :step="1" step-strictly :min="1" size="mini"
v-else></el-input-number>
</div>
<i
class="del el-icon-delete"
@click="delGoods(scope.row.goods, index, scope.$index)"
></i>
<i class="del el-icon-delete" @click="delGoods(scope.row.goods, index, scope.$index)"></i>
</div>
</div>
</template>
@ -158,93 +71,58 @@
<el-table-column label="几选几">
<template v-slot="scope">
<span>{{ scope.row.goods.length }}</span>
<el-input-number
v-model="scope.row.number"
controls-position="right"
:min="1"
></el-input-number>
<el-input-number v-model="scope.row.number" controls-position="right" :min="1"></el-input-number>
</template>
</el-table-column>
<el-table-column label="操作" width="160">
<template v-slot="scope">
<el-button
type="text"
@click="tableAddShop(scope.$index, scope.row.goods)"
>添加商品</el-button
>
<el-button
type="text"
@click="form.groupSnap.splice(scope.$index, 1)"
>删除分组</el-button
>
<el-button type="text" @click="tableAddShop(scope.$index, scope.row.goods)">添加商品</el-button>
<el-button type="text" @click="form.groupSnap.splice(scope.$index, 1)">删除分组</el-button>
</template>
</el-table-column>
</el-table>
<el-button type="text" @click="$refs.shopListRef.show()"
>添加分组</el-button
>
<el-button type="text" @click="$refs.shopListRef.show()">添加分组</el-button>
<shopList ref="shopListRef" @success="selectShopRes" />
</el-form-item>
<el-form-item
label="规格属性"
v-if="shopTypes[shopTypesActive].typeEnum != 'sku'"
>
<el-form-item label="规格属性" v-if="shopTypes[shopTypesActive].typeEnum != 'sku'">
<el-table :data="form.skuList" border>
<el-table-column label="售价" prop="salePrice">
<template v-slot="scope">
<el-input-number
v-model="scope.row.salePrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.salePrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="会员价" prop="memberPrice">
<template v-slot="scope">
<el-input-number
v-model="scope.row.memberPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.memberPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="成本价" prop="costPrice">
<template v-slot="scope">
<el-input-number
v-model="scope.row.costPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.costPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="原价" prop="originPrice">
<template v-slot="scope">
<el-input-number
v-model="scope.row.originPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.originPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="起售数量" prop="suit">
<!-- <el-table-column label="起售数量" prop="suit">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.suit"
controls-position="right"
></el-input-number>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="库存数量" prop="stockNumber">
<template v-slot="scope">
<el-input-number
v-model="scope.row.stockNumber"
:disabled="!!form.id"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.stockNumber" :disabled="!!form.id"
controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="分销金额" prop="firstShared">
<template v-slot="scope">
<el-input-number
v-model="scope.row.firstShared"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.firstShared" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="商品条码">
@ -259,210 +137,103 @@
</el-form-item>
<template v-if="form.typeEnum == 'group'">
<el-form-item label="使用日期说明" prop="notices.dateUsed">
<el-input
type="textarea"
v-model="form.notices.dateUsed"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入使用日期说明"
></el-input>
<el-input type="textarea" v-model="form.notices.dateUsed" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入使用日期说明"></el-input>
</el-form-item>
<el-form-item label="可用时间说明" prop="notices.availableTime">
<el-input
type="textarea"
v-model="form.notices.availableTime"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入可用时间说明
"
></el-input>
<el-input type="textarea" v-model="form.notices.availableTime" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入可用时间说明
"></el-input>
</el-form-item>
<el-form-item label="预约方式" prop="notices.bookingType">
<el-input
type="textarea"
v-model="form.notices.bookingType"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入预约方式
"
></el-input>
<el-input type="textarea" v-model="form.notices.bookingType" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入预约方式
"></el-input>
</el-form-item>
<el-form-item label="退款说明" prop="notices.refundPolicy">
<el-input
type="textarea"
v-model="form.notices.refundPolicy"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入退款说明
"
></el-input>
<el-input type="textarea" v-model="form.notices.refundPolicy" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入退款说明
"></el-input>
</el-form-item>
<el-form-item label="团购价说明">
<el-input
type="textarea"
v-model="form.notices.groupPurInfo"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入团购价说明"
></el-input>
<el-input type="textarea" v-model="form.notices.groupPurInfo" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入团购价说明"></el-input>
</el-form-item>
<el-form-item label="门市价/划线价说明">
<el-input
type="textarea"
v-model="form.notices.marketPriceInfo"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入门市价/划线价说明"
></el-input>
<el-input type="textarea" v-model="form.notices.marketPriceInfo" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入门市价/划线价说明"></el-input>
</el-form-item>
<el-form-item label="折扣说明">
<el-input
type="textarea"
v-model="form.notices.discountInfo"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入折扣说明"
></el-input>
<el-input type="textarea" v-model="form.notices.discountInfo" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入折扣说明"></el-input>
</el-form-item>
<el-form-item label="发票说明">
<el-input
type="textarea"
v-model="form.notices.invoiceInfo"
:autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;"
placeholder="请输入发票说明"
></el-input>
<el-input type="textarea" v-model="form.notices.invoiceInfo" :autosize="{ minRows: 3, maxRows: 10 }"
style="width: 500px;" placeholder="请输入发票说明"></el-input>
</el-form-item>
<el-form-item label="使用规则">
<Editor
:minHeight="200"
:value="form.notices.usageRules"
v-model="form.notices.usageRules"
/>
<Editor :minHeight="200" :value="form.notices.usageRules" v-model="form.notices.usageRules" />
</el-form-item>
</template>
<el-form-item
label="选择规格"
v-if="shopTypes[shopTypesActive].typeEnum == 'sku'"
>
<el-select
v-model="form.specId"
placeholder="请选择规格"
style="width: 500px;"
@change="selectSpecHandle"
>
<el-option
:label="item.name"
:value="item.id"
v-for="item in specList"
:key="item.id"
></el-option>
<el-form-item label="选择规格" v-if="shopTypes[shopTypesActive].typeEnum == 'sku'">
<el-select v-model="form.specId" placeholder="请选择规格" style="width: 500px;" @change="selectSpecHandle">
<el-option :label="item.name" :value="item.id" v-for="item in specList" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item
:label="item.name"
v-if="selectSpec.length"
v-for="item in selectSpec"
:key="item.name"
>
<el-checkbox-group
v-model="item.selectSpecResult"
@change="selectSpecResultChange"
>
<el-checkbox
:label="item"
v-for="(item, index) in item.value"
:key="index"
></el-checkbox>
<el-form-item :label="item.name" v-if="selectSpec.length" v-for="item in selectSpec" :key="item.name">
<el-checkbox-group v-model="item.selectSpecResult" @change="selectSpecResultChange">
<el-checkbox :label="item" v-for="(item, index) in item.value" :key="index"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item
v-if="selectSpecResult && shopTypes[shopTypesActive].typeEnum == 'sku'"
>
<el-form-item v-if="selectSpecResult && shopTypes[shopTypesActive].typeEnum == 'sku'">
<el-table :data="form.skuList" border>
<el-table-column
:label="item.label"
:prop="item.value"
v-for="(item, index) in specTableHeaders"
:key="index"
>
<el-table-column :label="item.label" :prop="item.value" v-for="(item, index) in specTableHeaders"
:key="index">
</el-table-column>
<el-table-column label="图片" prop="coverImg" width="80">
<template v-slot="scope">
<uploadImg
type="text"
:limit="1"
@success="res => (scope.row.coverImg = res[0])"
v-if="!scope.row.coverImg"
/>
<el-image
style="width:30px;height:30px;"
:src="scope.row.coverImg"
v-else
/>
<uploadImg type="text" :limit="1" @success="res => (scope.row.coverImg = res[0])"
v-if="!scope.row.coverImg" />
<el-image style="width:30px;height:30px;" :src="scope.row.coverImg" v-else />
</template>
</el-table-column>
<el-table-column label="售价" prop="salePrice">
<template slot="header" slot-scope="scope">
<span>售价</span>
<i
class="icon el-icon-edit"
@click="batchNumber('salePrice')"
></i>
<i class="icon el-icon-edit" @click="batchNumber('salePrice')"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.salePrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.salePrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="会员价" prop="memberPrice">
<template slot="header" slot-scope="scope">
<span>会员价</span>
<i
class="icon el-icon-edit"
@click="batchNumber('memberPrice')"
></i>
<i class="icon el-icon-edit" @click="batchNumber('memberPrice')"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.memberPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.memberPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="成本价" prop="costPrice">
<template slot="header" slot-scope="scope">
<span>成本价</span>
<i
class="icon el-icon-edit"
@click="batchNumber('costPrice')"
></i>
<i class="icon el-icon-edit" @click="batchNumber('costPrice')"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.costPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.costPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="原价" prop="originPrice">
<template slot="header" slot-scope="scope">
<span>原价</span>
<i
class="icon el-icon-edit"
@click="batchNumber('originPrice')"
></i>
<i class="icon el-icon-edit" @click="batchNumber('originPrice')"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.originPrice"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.originPrice" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="起售数量" prop="suit">
<!-- <el-table-column label="起售数量" prop="suit">
<template slot="header" slot-scope="scope">
<span>起售数量</span>
<i class="icon el-icon-edit" @click="batchNumber('suit')"></i>
@ -473,37 +244,24 @@
controls-position="right"
></el-input-number>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="库存数量" prop="stockNumber">
<template slot="header" slot-scope="scope">
<span>库存数量</span>
<i
class="icon el-icon-edit"
@click="batchNumber('stockNumber')"
v-if="!form.id"
></i>
<i class="icon el-icon-edit" @click="batchNumber('stockNumber')" v-if="!form.id"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.stockNumber"
:disabled="!!scope.row.id"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.stockNumber" :disabled="!!scope.row.id"
controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="分销金额" prop="firstShared">
<template slot="header" slot-scope="scope">
<span>分销金额</span>
<i
class="icon el-icon-edit"
@click="batchNumber('firstShared')"
></i>
<i class="icon el-icon-edit" @click="batchNumber('firstShared')"></i>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.firstShared"
controls-position="right"
></el-input-number>
<el-input-number v-model="scope.row.firstShared" controls-position="right"></el-input-number>
</template>
</el-table-column>
<el-table-column label="商品条码">
@ -528,21 +286,13 @@
<template v-if="form.typeEnum != 'group'">
<el-form-item label="上架区域">
<div class="shop_type_box">
<div
class="item"
:class="{ active: form.isShowCash }"
@click="areaChange('isShowCash')"
>
<div class="item" :class="{ active: form.isShowCash }" @click="areaChange('isShowCash')">
<div class="s_title">收银台</div>
<div class="active_dot">
<i class="el-icon-check"></i>
</div>
</div>
<div
class="item"
:class="{ active: form.isShowMall }"
@click="areaChange('isShowMall')"
>
<div class="item" :class="{ active: form.isShowMall }" @click="areaChange('isShowMall')">
<div class="s_title">小程序商城</div>
<div class="active_dot">
<i class="el-icon-check"></i>
@ -551,76 +301,45 @@
</div>
</el-form-item>
<el-form-item label="库存开关">
<el-switch
v-model="form.isStock"
:active-value="1"
:inactive-value="0"
></el-switch>
<el-switch v-model="form.isStock" :active-value="1" :inactive-value="0"></el-switch>
<div class="tips">关闭则不计算出入库数据</div>
</el-form-item>
<el-form-item label="标签打印">
<el-switch
v-model="form.enableLabel"
:active-value="1"
:inactive-value="0"
></el-switch>
<el-switch v-model="form.enableLabel" :active-value="1" :inactive-value="0"></el-switch>
<div class="tips">开启后: 收银完成后会自动打印对应数量的标签数</div>
</el-form-item>
<el-form-item label="打包费">
<el-input-number
v-model="form.packFee"
controls-position="right"
:min="0"
></el-input-number>
<el-input-number v-model="form.packFee" controls-position="right" :min="0"></el-input-number>
<div class="tips">
单份商品打包费店铺开启外卖模式下该数据才生效
</div>
</el-form-item>
<el-form-item label="虚拟销量">
<el-input-number
v-model="form.baseSalesNumber"
controls-position="right"
:min="0"
></el-input-number>
<el-input-number v-model="form.baseSalesNumber" controls-position="right" :min="0"></el-input-number>
</el-form-item>
</template>
<el-form-item label="排序" v-if="form.id">
<el-input-number
v-model="form.sort"
controls-position="right"
:min="0"
></el-input-number>
<el-input-number v-model="form.sort" controls-position="right" :min="0"></el-input-number>
</el-form-item>
<el-form-item>
<el-button type="primary" v-loading="loading" @click="submitHandle"
>确定</el-button
>
<el-button type="primary" v-loading="loading" @click="submitHandle">确定</el-button>
<el-button @click="$router.back()">取消</el-button>
</el-form-item>
</el-form>
<el-dialog title="批量修改" width="400px" :visible.sync="showBatchModal">
<el-form :model="batchNumberForm">
<el-form-item>
<el-input-number
v-model="batchNumberForm.batchNumber"
:min="0"
controls-position="right"
style="width: 100%;"
></el-input-number>
<el-input-number v-model="batchNumberForm.batchNumber" :min="0" controls-position="right"
style="width: 100%;"></el-input-number>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="showBatchModal = false"> </el-button>
<el-button type="primary" @click="batchNumberFormConfirm"
> </el-button
>
<el-button type="primary" @click="batchNumberFormConfirm"> </el-button>
</span>
</el-dialog>
<!-- 选择团购券分类 -->
<groupTypeList
ref="groupTypeList"
@success="res => (form.groupCategoryId = res)"
/>
<groupTypeList ref="groupTypeList" @success="res => (form.groupCategoryId = res)" />
</div>
</template>
@ -678,7 +397,7 @@ export default {
stockNumber: 0,
firstShared: 0,
barCode: `${localStorage.getItem("shopId")}${dayjs().valueOf()}`,
suit: 1
// suit: 1
},
tableAddShopIndex: null,
isEditor: false,
@ -855,6 +574,10 @@ export default {
this.isEditor = true;
this.form.skuList = skuList.map((item, index) => {
specInfo[index].id = item.id;
specInfo[index].productId = item.productId;
specInfo[index].realSalesNumber = item.productId;
specInfo[index].shopId = item.shopId;
specInfo[index].warnLine = item.warnLine;
return specInfo[index];
});
this.originSkuList = [...this.form.skuList];
@ -1087,7 +810,7 @@ export default {
size: 100
});
this.specList = res.content;
} catch (error) {}
} catch (error) { }
},
//
async tbShopUnit() {
@ -1099,7 +822,7 @@ export default {
size: 100
});
this.units = res.content;
} catch (error) {}
} catch (error) { }
},
//
async tbShopCategoryGet() {