3193 行
176 KiB
HTML
可执行文件
3193 行
176 KiB
HTML
可执行文件
<!--商品新增、编辑-->
|
||
<!--[1.9.3]-->
|
||
<style>
|
||
.edit-goods-box {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
width: 100%;
|
||
/*min-width: 868px;*/
|
||
}
|
||
|
||
.edit-goods-content {
|
||
flex: 1;
|
||
/*min-width: 400px;*/
|
||
height: calc(100vh - 202px);
|
||
position: relative;
|
||
}
|
||
|
||
.edit-goods-content > .el-scrollbar__wrap::-webkit-scrollbar-thumb {
|
||
background-color: transparent;
|
||
}
|
||
|
||
.edit-goods-content-box {
|
||
min-width: 748px;
|
||
}
|
||
|
||
#goodsSet .el-form {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.list-num {
|
||
margin-left: 16px;
|
||
}
|
||
|
||
.list-num > li {
|
||
list-style: decimal;
|
||
}
|
||
|
||
#goodsSet .el-form-item {
|
||
min-width: 48%;
|
||
}
|
||
|
||
.el-form-item-long {
|
||
width: 100%;
|
||
}
|
||
|
||
.small-input {
|
||
width: 190px;
|
||
margin-right: 10px;
|
||
}
|
||
|
||
.mini-input {
|
||
width: 108px;
|
||
margin-right: 10px;
|
||
}
|
||
|
||
/*.mini-input .el-input__inner {*/
|
||
/*padding: 0 10px;*/
|
||
/*}*/
|
||
|
||
.edit-goods-content-box .el-input-group__prepend,
|
||
.edit-goods-content-box .el-input-group__append {
|
||
padding: 0 7px;
|
||
}
|
||
|
||
.long-input {
|
||
width: 600px;
|
||
}
|
||
|
||
.nowrap-inline {
|
||
display: flex;
|
||
align-items: center;
|
||
vertical-align: top;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.wrap-inline {
|
||
line-height: 12px;
|
||
margin-top: 5px;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.wrap-inline > i {
|
||
color: #999;
|
||
}
|
||
|
||
#goodsSet i.el-tooltip {
|
||
color: #409EFF;
|
||
}
|
||
|
||
#goodsSet .el-switch__label {
|
||
font-weight: normal;
|
||
}
|
||
|
||
#goodsSet .el-switch__label span[aria-hidden='true'] {
|
||
color: #909399;
|
||
}
|
||
|
||
.tip {
|
||
font-size: 13px;
|
||
color: #999;
|
||
margin-left: 20px;
|
||
}
|
||
|
||
.del-swiper {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
display: none;
|
||
align-items: center;
|
||
background-color: rgba(0, 0, 0, 0.3);
|
||
transition: 0.3s;
|
||
}
|
||
|
||
.del-swiper > i {
|
||
width: 100%;
|
||
color: #fff;
|
||
font-size: 20px;
|
||
line-height: 20px !important;
|
||
}
|
||
|
||
.swiper-box {
|
||
margin: 0 8px 8px 0;
|
||
}
|
||
|
||
.swiper-box:hover > .del-swiper {
|
||
display: flex;
|
||
}
|
||
|
||
.sku-attr-box {
|
||
width: calc(100% - 20px);
|
||
padding: 10px;
|
||
box-sizing: border-box;
|
||
border: 1px solid #ddd;
|
||
}
|
||
|
||
.sku-attr-list {
|
||
width: 100%;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.sku-attr-title {
|
||
width: 100%;
|
||
background-color: #f5f7fa;
|
||
padding: 8px;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.sku-list-box {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.del-sku-attr {
|
||
position: absolute;
|
||
width: 20px;
|
||
height: 20px;
|
||
top: 10px;
|
||
right: 10px;
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 18px;
|
||
color: #666;
|
||
}
|
||
|
||
.sku-list-name-box {
|
||
height: 26px;
|
||
line-height: 27px;
|
||
border: 1px solid #ddd;
|
||
position: relative;
|
||
padding: 0 20px;
|
||
margin: 5px 10px;
|
||
color: #666;
|
||
cursor: pointer;
|
||
overflow: hidden;
|
||
font-size: 12px;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.check-sku-list {
|
||
border-color: #4394ff;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.check-sku-list:after {
|
||
content: '';
|
||
width: 3px;
|
||
height: 5px;
|
||
position: absolute;
|
||
bottom: 2px;
|
||
right: 2px;
|
||
transform: rotateZ(25deg);
|
||
border-bottom: 1px solid #fff;
|
||
border-right: 1px solid #fff;
|
||
}
|
||
|
||
.check-sku-list:before {
|
||
content: '';
|
||
width: 18px;
|
||
height: 18px;
|
||
background-color: #4394ff;
|
||
position: absolute;
|
||
bottom: -9px;
|
||
right: -9px;
|
||
transform: rotateZ(45deg);
|
||
}
|
||
|
||
.search-sku-list-con {
|
||
white-space: nowrap;
|
||
margin-left: 30px;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.search-sku-list-con::selection,
|
||
.search-sku-list-con > span::selection {
|
||
background-color: transparent;
|
||
}
|
||
|
||
.sku-list-name-box::selection {
|
||
background-color: transparent;
|
||
}
|
||
|
||
.edui-default .edui-toolbar .edui-combox .edui-combox-body {
|
||
line-height: 14px !important;
|
||
}
|
||
|
||
.edui-default .edui-button-body,
|
||
.edui-splitbutton-body,
|
||
.edui-menubutton-body,
|
||
.edui-combox-body {
|
||
line-height: 14px !important;
|
||
}
|
||
|
||
.el-collapse-item:nth-child(1) .el-collapse-item__wrap .el-form-item:nth-child(1) .el-form-item__label:before {
|
||
content: '*';
|
||
color: #f56c6c;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
#goodsSet .el-table .el-form-item {
|
||
margin-top: 18px;
|
||
}
|
||
|
||
.cell .el-input-number--mini {
|
||
width: 108px;
|
||
}
|
||
|
||
.cloud-img {
|
||
max-width: 200px;
|
||
max-height: 200px;
|
||
}
|
||
|
||
.sku-name .el-tooltip {
|
||
width: 100% !important;
|
||
}
|
||
</style>
|
||
<style scoped>
|
||
/deep/ .el-table th.is-hidden > *,
|
||
/deep/ .el-table td.is-hidden > * {
|
||
visibility: visible
|
||
}
|
||
</style>
|
||
<div id="goodsSet" v-cloak v-loading="!pageLoaded">
|
||
<div class="edit-goods-box">
|
||
<el-tabs v-model="formActIndex" :tab-position="'left'" @tab-click="changeMenu(formActIndex)"
|
||
style="height: calc(100vh - 202px);width: 120px">
|
||
<el-tab-pane name="1" label="常规信息">
|
||
<template slot="label">
|
||
<el-tooltip class="item" effect="dark" placement="top-start">
|
||
<template slot="content">
|
||
<el-button type="text" size="mini">添加商品须知>>></el-button>
|
||
<ol class="list-num">
|
||
<li>带有小红星标记的为必填项,否则无法添加商品</li>
|
||
<li>当店内会员价,商城会员价,Plus会员价开启时,则店内会员价,商城会员价Plus会员价为必填项</li>
|
||
<li>当会员送积分开启时,则会员送积分为必填项</li>
|
||
<li>所有价格小数点最多只能保留两位</li>
|
||
<li>当商城出售按钮开启时,商城零售价为必填项</li>
|
||
<li>开启商品称重时,商品库存,超量值,预警值小数点后最多只能有3位,不开启时只能为正整数</li>
|
||
<li>商品条码长度不得大于17位</li>
|
||
<li>新增有初始库存的商品时,必须先在进销存板块设置供给仓</li>
|
||
<li>称重商品与规格商品无法同时开启</li>
|
||
<li>称重商品开启时必须输入单位</li>
|
||
<li>一个商品最多只能添加四种规格属性</li>
|
||
<li>多规格商品的货号为必填项</li>
|
||
<li>每个商品或多规格商品的货号和商品条码都不能重复</li>
|
||
<li>库存大于0则商品进价必须大于0</li>
|
||
<li>导购员提成设置,关闭自定义金额则表示使用门店给导购员设置的百分比来计算提成,开启则使用自定义的金额作为提成(规格商品则按规格提成计算)</li>
|
||
</ol>
|
||
</template>
|
||
<i class="el-icon-warning-outline"></i>
|
||
</el-tooltip>
|
||
<span>常规信息</span>
|
||
</template>
|
||
</el-tab-pane>
|
||
<el-tab-pane name="2" label="串码功能"></el-tab-pane>
|
||
<el-tab-pane name="3" label="称重设置"></el-tab-pane>
|
||
<el-tab-pane name="4" label="出售限制"></el-tab-pane>
|
||
<el-tab-pane name="5" label="配送设置"></el-tab-pane>
|
||
<el-tab-pane name="6" label="会员优惠"></el-tab-pane>
|
||
<el-tab-pane name="7" label="多规格设置"></el-tab-pane>
|
||
<el-tab-pane name="8" label="导购提成"></el-tab-pane>
|
||
<el-tab-pane name="9" label="图片设置"></el-tab-pane>
|
||
</el-tabs>
|
||
<el-scrollbar class="edit-goods-content" ref="scrollbar">
|
||
<div class="edit-goods-content-box" ref="form_1">
|
||
<el-divider content-position="left">常规信息</el-divider>
|
||
<el-form ref="ruleForm_1" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="商品名称" prop="goods_name">
|
||
<el-input clearable class="small-input" v-model="ruleForm.goods_name" placeholder="请输入商品名称">
|
||
</el-input>
|
||
</el-form-item>
|
||
<el-form-item label="副标题" prop="subheading">
|
||
<el-input clearable class="small-input" v-model="ruleForm.subheading" placeholder="请输入商品副标题">
|
||
</el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品货号" prop="goods_number">
|
||
<el-input clearable class="small-input" v-model="ruleForm.goods_number" placeholder="请输入商品货号">
|
||
</el-input>
|
||
|
||
<el-button size="mini" type="text" @click="getAutoGoodsNumber">生成货号</el-button>
|
||
<el-tooltip class="item" effect="dark" placement="top-start">
|
||
<div slot="content">称重商品货号建议5位数,即10000-99999,否则在电子条码秤上可能无法识别</div>
|
||
<i class="el-icon-warning-outline"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="商品条码" prop="goods_code">
|
||
<div class="nowrap-inline">
|
||
<el-input clearable class="small-input" v-model="ruleForm.goods_code"
|
||
@keydown.enter.exact.native.prevent="checkGoodsCode"
|
||
placeholder="请输入商品条码"></el-input>
|
||
<template v-if="ruleForm.goods_code!='' && ruleForm.goods_code!=null">
|
||
<el-button size="mini" type="text" @click="checkGoodsCode">检测条码</el-button>
|
||
</template>
|
||
</div>
|
||
<div class="wrap-inline">
|
||
<i>无码的商品可以</i>
|
||
<el-button size="mini" type="text" @click="getAutoGoodsCode">生成条码</el-button>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="Q3编码" prop="third_goods_code"
|
||
v-if="isWeili && ruleForm.attribute_state == '1'">
|
||
<el-input clearable class="small-input" :disabled="ruleForm.id > 0"
|
||
v-model="ruleForm.third_goods_code" placeholder="请输入Q3编码">
|
||
</el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品类别" prop="goods_class_id" class="el-form-item-long" v-if="pageLoaded">
|
||
<select-goods-category ref="category" :unit-data="temp_class_id"
|
||
:category-id.sync="ruleForm.goods_class_id"
|
||
:sel-industry-id.sync="categoryLimitIndustryId"
|
||
:limit-industry-id="labelLimitIndustryId" :store-id="store_id"
|
||
:user-type="2">
|
||
</select-goods-category>
|
||
</el-form-item>
|
||
<el-form-item label="商品进价" prop="purchase_price"
|
||
:required="ruleForm.goods_num>0&&operate.show_purchase_price==1&&ruleForm.id==0?true:false">
|
||
<span v-if="ruleForm.id>0">{{ruleForm.purchase_price}}</span>
|
||
<template v-else>
|
||
<el-input v-if="operate.show_purchase_price==1" clearable class="small-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
v-model="ruleForm.purchase_price" placeholder="商品进价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
<span v-else>***</span>
|
||
</template>
|
||
</el-form-item>
|
||
<el-form-item label="商品标签">
|
||
<select-goods-label ref="goodsLabel" :type="2" :industry-id="industry_id"
|
||
:customer-class="'small-input'" :sel-industry-id.sync="labelLimitIndustryId"
|
||
:limit-industry-id="categoryLimitIndustryId"
|
||
:goods-id="ruleForm.id*1"></select-goods-label>
|
||
<el-tooltip class="item" effect="dark" content="该标签用于商城搜索商品,最多可选10个" placement="top-start"><i
|
||
class="el-icon-question"></i></el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="分单标签" prop="label_id">
|
||
<el-select v-model="ruleForm.label_id" class="small-input" placeholder="请选择标签" clearable
|
||
filterable>
|
||
<el-option v-for="item in labelList" :value-key="item.id" :key="item.id"
|
||
:label="item.label_name" :value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
<el-tooltip class="item" effect="dark" content="如开启标签打印,WIFI打印机将会根据标签分单打印订单的商品"
|
||
placement="top-start"><i class="el-icon-question"></i></el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="店内零售价" prop="retail_price">
|
||
<el-input clearable class="small-input" ref="retail_price"
|
||
:disabled="operate.edit_price==2?true:false" v-model="ruleForm.retail_price"
|
||
placeholder="商品店内零售价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
<el-form-item label="品牌" prop="goods_brand_id">
|
||
<select-goods-brand :brand-id.sync="ruleForm.goods_brand_id" :brand-name="new_goods_brand_name">
|
||
</select-goods-brand>
|
||
</el-form-item>
|
||
<el-form-item label="商城零售价" prop="online_price">
|
||
<el-input clearable class="small-input" :disabled="operate.edit_price==2?true:false"
|
||
v-model="ruleForm.online_price" ref="online_price" placeholder="商品商城零售价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品排序" prop="goods_order">
|
||
<el-input-number v-model="ruleForm.goods_order" placeholder="超量" :precision="0" :step="1"
|
||
:max="1000000" :min="1"></el-input-number>
|
||
<el-tooltip class="item" effect="dark" content="商品默认排序,正序(默认为1)" placement="top-start"><i
|
||
class="el-icon-question"></i></el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="供货商" prop="supplier_id" v-if="!ruleForm.id">
|
||
<select-store-supplier :supplier-id.sync="ruleForm.supplier_id"></select-store-supplier>
|
||
|
||
</el-form-item>
|
||
<el-form-item label="产地" prop="goods_yieldly_id" :class="ruleForm.id?'el-form-item-long':''">
|
||
<select-goods-yieldly :yieldly-id.sync="ruleForm.goods_yieldly_id"
|
||
:yieldly-name="new_goods_yieldly_name"></select-goods-yieldly>
|
||
</el-form-item>
|
||
<el-form-item label="库存超量" prop="more_num">
|
||
<el-input-number v-model="ruleForm.more_num" :precision="ruleForm.pricing_method==1?0:3"
|
||
:step="ruleForm.pricing_method==1?1:0.001" :max="1000000"
|
||
:min="ruleForm.pricing_method==1?1:0.001"></el-input-number>
|
||
</el-form-item>
|
||
<el-form-item label="库存预警" prop="less_num">
|
||
<el-input-number v-model="ruleForm.less_num" :precision="ruleForm.pricing_method==1?0:3"
|
||
:step="ruleForm.pricing_method==1?1:0.001" :max="1000000"
|
||
:min="0"></el-input-number>
|
||
</el-form-item>
|
||
<el-form-item label="单位" prop="company" :required="ruleForm.pricing_method==2?true:false"
|
||
:class="ruleForm.pricing_method==2?'el-form-item-long':''">
|
||
<select-goods-weight-unit v-if="ruleForm.pricing_method==2" :unit.sync="ruleForm.company">
|
||
</select-goods-weight-unit>
|
||
<select-goods-customer-unit v-else :unit.sync="ruleForm.company" :user-type="2">
|
||
</select-goods-customer-unit>
|
||
</el-form-item>
|
||
<el-form-item label="重量" prop="weight_value" v-if="ruleForm.pricing_method==1">
|
||
<el-input clearable v-model="ruleForm.weight_value" class="small-input" style="width: 130px"
|
||
:readonly="ruleForm.pricing_method==2?true:false" placeholder="商品重量">
|
||
<template slot="append">kg</template>
|
||
</el-input>
|
||
<el-tooltip class="item" effect="dark" content="该设置是为了快递发货时非称重商品能按重量计费,且都是按kg计重"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="库存" prop="goods_num">
|
||
<span v-if="ruleForm.id>0">{{ruleForm.goods_num}}</span>
|
||
<span v-else-if="base_set.supplier_type==2">{{ruleForm.goods_num}}</span>
|
||
<el-input-number v-else v-model="ruleForm.goods_num" :precision="ruleForm.pricing_method==1?0:3"
|
||
:step="ruleForm.pricing_method==1?1:0.001"
|
||
:disabled="ruleForm.serial_number_state==1?true:false" :max="1000000" :min="0">
|
||
</el-input-number>
|
||
</el-form-item>
|
||
</el-form-item>
|
||
<el-form-item label="虚拟销量" prop="fictitious_num">
|
||
<el-input-number v-model="ruleForm.fictitious_num" :precision="0" :step="1" :max="1000000"
|
||
:min="0"></el-input-number>
|
||
<el-tooltip class="item" effect="dark" content="用于商城商品出售数量累加展示" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="规格" prop="specifications">
|
||
<el-input clearable class="small-input" v-model="ruleForm.specifications" placeholder="请输入商品规格">
|
||
</el-input>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_2">
|
||
<el-divider content-position="left">串码功能</el-divider>
|
||
<el-form ref="ruleForm_2" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="串码功能" prop="serial_number_state" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.serial_number_state" @change="changeSerial"
|
||
:disabled="(ruleForm.id>0||ruleForm.pricing_method==2)?true:false" inactive-value="0"
|
||
active-value="1" :active-text="ruleForm.serial_number_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" placement="top-start">
|
||
<template slot="content">
|
||
<p>1.该功能适用于3C数码手机行业,串码将与每一个独立的商品库存绑定</p>
|
||
<p>2.串码功能开启后新增商品将无法输入的库存,只能走进销存的流程</p>
|
||
<p>3.只能在新增商品时开启或关闭,之后将不能修改该商品的串码功能状态</p>
|
||
<p>4.串码功能开启后,该商品的【称重、赠品、拆分】功能将不能使用</p>
|
||
</template>
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_3">
|
||
<el-divider content-position="left">称重设置</el-divider>
|
||
<el-form ref="ruleForm_3" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="是否称重" prop="pricing_method" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.pricing_method"
|
||
:disabled="disabledChangeWeight"
|
||
inactive-value="1" active-value="2"
|
||
:active-text="ruleForm.pricing_method==2?'开启':'关闭'">
|
||
</el-switch>
|
||
<template v-if="ruleForm.pricing_method==2">
|
||
<span class="tip">称重商品必须设置</span>
|
||
<el-tooltip class="item" effect="dark" content="点击去设置单位" placement="top-start">
|
||
<el-button type="text" @click="changeMenu(1,'company')">商品单位</el-button>
|
||
</el-tooltip>
|
||
</template>
|
||
</el-form-item>
|
||
<el-form-item label="PLU码" prop="plu_code" v-if="ruleForm.attribute_state == 1">
|
||
<el-input clearable v-model="ruleForm.plu_code" class="small-input"
|
||
placeholder="请输入PLU码 [1-9999]" maxlength="4"></el-input>
|
||
<el-button type="text" @click="getPluCode">生成PLU码</el-button>
|
||
<el-tooltip class="item" effect="dark" content="称重商品建议都填写,不填写无法一键上传到电子秤" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_4">
|
||
<el-divider content-position="left">出售限制</el-divider>
|
||
<el-form ref="ruleForm_4" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="商品状态" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.status" inactive-value="1" active-value="0"
|
||
:active-text="ruleForm.status==0?'上架':'下架'">
|
||
</el-switch>
|
||
</el-form-item>
|
||
<el-form-item label="店内出售" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.retail_state" inactive-value="0" active-value="1"
|
||
@change="verifyPrice($event,1,ruleForm.retail_state==1,'retail_price')"
|
||
:active-text="ruleForm.retail_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<span class="tip">开启后需设置</span>
|
||
<el-tooltip class="item" effect="dark" content="去设置商城零售价" placement="top-start">
|
||
<el-button type="text" @click="changeMenu(1,'retail_price')">店内零售价</el-button>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="商城出售" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.online_state"
|
||
@change="getFormOffsetTop();verifyPrice($event,1,ruleForm.online_state==1,'online_price')"
|
||
inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.online_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<span class="tip">开启后需设置</span>
|
||
<el-tooltip class="item" effect="dark" content="去设置商城零售价"
|
||
placement="top-start">
|
||
<el-button type="text" @click="changeMenu(1,'online_price')">商城零售价</el-button>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="商城预售" class="el-form-item-long" v-if="ruleForm.online_state==1">
|
||
<el-switch v-model="ruleForm.advance_sale_status" inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.advance_sale_status==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="用于商城预售活动的商品" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
|
||
<el-form-item label="是否拆分" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.split_state" inactive-value="0" active-value="1"
|
||
:disabled="ruleForm.serial_number_state==1?true:false"
|
||
:active-text="ruleForm.split_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="可分成小件商品出售的商品可拆分(具体小件商品和小件商品数量请到拆分商品编辑)"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="允许退款" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.refund_state" inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.refund_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="开启表示此商品在退款换货时间范围内允许退款" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="允许换货" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.exchange_state" inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.exchange_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="开启表示此商品在退款换货时间范围内允许换货" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_5">
|
||
<el-divider content-position="left">配送设置</el-divider>
|
||
<el-form ref="ruleForm_5" :model="ruleForm" :rules="rules" label-width="110px"
|
||
@change="getFormOffsetTop" size="mini">
|
||
<el-form-item label="配送方式" prop="delivery_type" :required="ruleForm.online_state==1?true:false">
|
||
<el-checkbox-group v-model="ruleForm.delivery_type">
|
||
<el-checkbox :label="1" :value="1">自提</el-checkbox>
|
||
<el-checkbox :label="2" :value="2">同城配送</el-checkbox>
|
||
<el-checkbox :label="3" :value="3">快递配送</el-checkbox>
|
||
</el-checkbox-group>
|
||
</el-form-item>
|
||
<el-form-item label="发货模板" prop="delivery_template_id" v-if="ruleForm.delivery_type.indexOf(3)>=0"
|
||
:required="true" class="el-form-item-long">
|
||
<el-select v-model="ruleForm.delivery_template_id" placeholder="请选择发货模板" clearable filterable>
|
||
<el-option v-for="item in deliveryTemplateList" :value-key="item.id" :key="item.id"
|
||
:label="item.title" :value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_6">
|
||
<el-divider content-position="left">会员优惠</el-divider>
|
||
<el-form ref="ruleForm_6" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="店内会员价" prop="store_mem_price" class="el-form-item-long">
|
||
<el-input clearable class="small-input" :disabled="operate.edit_price==2?true:false"
|
||
v-model="ruleForm.store_mem_price" placeholder="商品店内会员价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
<template v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<span>+</span>
|
||
<el-input clearable class="small-input" :disabled="operate.edit_price==2?true:false"
|
||
v-model="ruleForm.store_mem_integral"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')"
|
||
placeholder="请输入积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</template>
|
||
<el-switch v-model="ruleForm.store_mem_status" inactive-value="2" active-value="1"
|
||
@change="verifyPrice($event,1,ruleForm.attribute_state==1,'store_mem_price')"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
:active-text="ruleForm.store_mem_status?'开启':'关闭'">
|
||
</el-switch>
|
||
</el-form-item>
|
||
<el-form-item label="商城会员价" prop="shop_mem_price" class="el-form-item-long">
|
||
<el-input clearable v-model="ruleForm.shop_mem_price" class="small-input"
|
||
:disabled="operate.edit_price==2?true:false" placeholder="商品商城会员价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
|
||
<template v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<span>+</span>
|
||
<el-input clearable class="small-input" v-model="ruleForm.shop_mem_integral"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')" placeholder="请输入积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</template>
|
||
<el-switch v-model="ruleForm.shop_mem_status" inactive-value="2" active-value="1"
|
||
@change="verifyPrice($event,1,ruleForm.attribute_state==1,'shop_mem_price')"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
:active-text="ruleForm.shop_mem_status?'开启':'关闭'">
|
||
</el-switch>
|
||
</el-form-item>
|
||
<el-form-item label="PLUS会员价" prop="plus_price" class="el-form-item-long">
|
||
<el-input clearable class="small-input" v-model="ruleForm.plus_price"
|
||
:disabled="operate.edit_price==2?true:false" placeholder="商品Plus会员价">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
<template v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<span>+</span>
|
||
<el-input clearable class="small-input" v-model="ruleForm.plus_mem_integral"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')" placeholder="请输入积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</template>
|
||
<el-switch v-model="ruleForm.plus_mem_status" inactive-value="2" active-value="1"
|
||
@change="verifyPrice($event,1,ruleForm.attribute_state==1,'plus_price')"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
:active-text="ruleForm.plus_mem_status?'开启':'关闭'">
|
||
</el-switch>
|
||
</el-form-item>
|
||
<el-form-item v-if="base_set.goods_integral_state==1" label="会员送积分" prop="integral"
|
||
class="el-form-item-long">
|
||
<el-input clearable class="small-input" placeholder="请输入积分"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')"
|
||
:disabled="operate.edit_price==2?true:false" v-model="ruleForm.integral">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
<el-switch v-model="ruleForm.integral_mem_status" inactive-value="2" active-value="1"
|
||
@change="verifyPrice($event,1,true,'integral')"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
:active-text="ruleForm.integral_mem_status?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="会员购买单个商品后获得的积分" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="线下折扣" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.vip_retail_state" inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.vip_retail_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="开启线下折扣则表示会员可以折扣购买该商品(店内)" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="线上折扣" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.vip_online_state" inactive-value="0" active-value="1"
|
||
:active-text="ruleForm.vip_online_state==1?'开启':'关闭'">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="开启线上折扣则表示会员可以折扣购买该商品(小程序商城)"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_7">
|
||
<el-divider content-position="left">多规格设置</el-divider>
|
||
<el-form ref="ruleForm_7" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="多规格状态" prop="attribute_state" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.attribute_state"
|
||
:disabled="ruleForm.id>0||ruleForm.pricing_method==2?true:false"
|
||
@change="getFormOffsetTop"
|
||
inactive-value="1" active-value="2"
|
||
:active-text="ruleForm.attribute_state==2?'开启':'关闭'">
|
||
</el-switch>
|
||
<div class="wrap-inline">
|
||
<i>规格商品以规格总库存为准,且不支持规格与称重同时开启,编辑商品不可修改规格基本属性或关闭、开启规格</i>
|
||
</div>
|
||
</el-form-item>
|
||
<template v-if="ruleForm.attribute_state==2">
|
||
<el-form-item label="自动编号" class="el-form-item-long">
|
||
<div class="nowrap-inline" style="height: 32px">
|
||
<el-switch v-model="auto_sku_number_state" @change="autoSkuNumber"
|
||
:active-text="auto_sku_number_state?'开启':'关闭'" :active-value="true"
|
||
:inactive-value="false">
|
||
</el-switch>
|
||
<div style="margin-left: 20px" v-if="auto_sku_number_state&&ruleForm.skuList.length">
|
||
<el-button type="primary" plain @click="doAutoSkuNumber">再次编号
|
||
<el-tooltip class="item" effect="dark"
|
||
content="再次编号只会对未设置编号的规格编号,如需重新编号,请清空规格货号再点击该按钮"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
<div class="wrap-inline">
|
||
<i>将根据商品货号来自动给规格商品生成货号(若不填写商品货号,则不会自动编号)</i>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="自动编码" class="el-form-item-long">
|
||
<div class="nowrap-inline" style="height: 32px">
|
||
<el-switch v-model="auto_sku_code_state" @change="autoCode"
|
||
:active-text="auto_sku_code_state?'开启':'关闭'" :active-value="true"
|
||
:inactive-value="false">
|
||
</el-switch>
|
||
<div style="margin-left: 20px" v-if="auto_sku_code_state&&ruleForm.skuList.length">
|
||
<el-button type="primary" plain @click="doAutoCode">再次编码
|
||
<el-tooltip class="item" effect="dark"
|
||
content="再次编码只会对未设置条码的规格编码,如需重新编码,请清空规格条码再点击该按钮"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
<div class="wrap-inline">
|
||
<i>将根据商品条码来自动给规格商品编码(若不填写商品条码,则不会自动编码)</i>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="自动生成Plu码" class="el-form-item-long">
|
||
<div class="nowrap-inline" style="height: 32px">
|
||
<el-switch v-model="ruleForm.sku_plu_switch" @change="getMaxPLU"
|
||
:active-text="ruleForm.sku_plu_switch == 1 ? '开启' : '关闭'" active-value="1"
|
||
inactive-value="2">
|
||
</el-switch>
|
||
<div style="margin-left: 20px"
|
||
v-if="ruleForm.sku_plu_switch == 1 && ruleForm.skuList.length">
|
||
<el-button type="primary" plain @click="doAutoPluCode">再次生成
|
||
<el-tooltip class="item" effect="dark"
|
||
content="再次生成只会对未设置Plu码的规格生成,如需重新生成,请清空规格Plu码再点击该按钮"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="规格设置" class="el-form-item-long">
|
||
<div class="sku-attr-box">
|
||
<template v-for="(attr,index) in skuAttr">
|
||
<div class="sku-attr-list">
|
||
<div class="sku-attr-title">
|
||
<el-select v-model="attr.id" placeholder="请选择规格" clearable filterable
|
||
allow-create :disabled="ruleForm.id>0?true:false"
|
||
default-first-option
|
||
@change="selectSkuAttr($event,index)">
|
||
<template v-for="item in skuAttrList">
|
||
<el-option :label="item.name" :value="item.id"
|
||
:disabled="judge(index,item.id)">
|
||
</el-option>
|
||
</template>
|
||
</el-select>
|
||
<div v-if="attr.id!=0" class="search-sku-list-con">
|
||
<el-input class="small-input" v-model="attr.searchSkuListName"
|
||
oninput="value=this.value.trim(' ')"
|
||
@keyup.enter.exact.native.prevent="sureSearchSkuList(index)"
|
||
placeholder="搜索或添加规格"></el-input>
|
||
<el-button :disabled="attr.searchSkuListName==''?true:false"
|
||
@click="sureSearchSkuList(index)">添加
|
||
</el-button>
|
||
</div>
|
||
<el-button type="text" @click="delSkuItem(index)"
|
||
:disabled="ruleForm.id>0?true:false" class="del-sku-attr"><i
|
||
class="el-icon-delete"></i></el-button>
|
||
</div>
|
||
<div class="sku-list-box">
|
||
<div class="sku-list-name-box" v-for="(item,i) in attr.list"
|
||
@click="checkSkuList(index,i)"
|
||
:class="item.checked?'check-sku-list':''">
|
||
<span>{{item.name}}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</template>
|
||
<div class="sku-attr-list">
|
||
<div class="sku-attr-title">
|
||
<el-button :disabled="skuAttr.length<4&&ruleForm.id==0?false:true"
|
||
@click="addSkuAttr">添加规格属性
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="批量设置值" prop="store_mem_price">
|
||
<div class="nowrap-inline">
|
||
<el-select v-model="batch_sku_type" placeholder="选择批量设置的字段" clearable>
|
||
<el-option value="13" label="重量"></el-option>
|
||
<el-option v-if="operate.show_purchase_price==1" value="1" label="进价"></el-option>
|
||
<template v-if="operate.edit_price==1">
|
||
<el-option value="2" label="零售价"></el-option>
|
||
<el-option value="3" label="店内会员价" v-if="ruleForm.store_mem_status"></el-option>
|
||
<el-option value="4" label="商城价" v-if="ruleForm.online_state"></el-option>
|
||
<el-option value="5" label="商城会员价" v-if="ruleForm.shop_mem_status"></el-option>
|
||
<el-option value="6" label="plus会员价" v-if="ruleForm.plus_mem_status">
|
||
</el-option>
|
||
</template>
|
||
<el-option value="7" label="线下导购提成"
|
||
v-if="ruleForm.guide_royalty_state==1&&ruleForm.guide_royalty_custom_state==1">
|
||
</el-option>
|
||
<el-option value="8" label="线上导购提成"
|
||
v-if="ruleForm.guide_royalty_state==1&&ruleForm.guide_royalty_custom_state==1">
|
||
</el-option>
|
||
<el-option value="10" label="库存"
|
||
:disabled="ruleForm.serial_number_state==1?true:false"></el-option>
|
||
<el-option value="11" label="超量"></el-option>
|
||
<el-option value="12" label="预警"></el-option>
|
||
</el-select>
|
||
<el-input class="small-input" clearable style="margin-left: 8px"
|
||
:disabled="batch_sku_type==''?true:false" v-model="batch_sku_num"
|
||
placeholder="批量设置的值"></el-input>
|
||
<el-button type="primary" plain :disabled="batch_sku_num==''?true:false"
|
||
@click="batch_sku_confirm">确定
|
||
</el-button>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="规格列表" class="el-form-item-long">
|
||
<el-table size="mini" border :data="ruleForm.skuList" class="sku-list"
|
||
style="width: calc(100% - 20px);" @header-dragend="skuHeaderDragend">
|
||
<el-table-column align="center" fixed type="index" label="序号" width="50">
|
||
</el-table-column>
|
||
<el-table-column align="center" fixed width="70px" label="状态">
|
||
<template slot-scope="scope" slot="header">
|
||
<div>状态
|
||
<el-tooltip class="item" effect="dark" content="可一键开启或关闭规格状态"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</div>
|
||
<template v-if="skuAttr.length">
|
||
<el-switch v-model="batchSkuStatus" @change="changeSkuStatus"
|
||
active-value="1" inactive-value="0">
|
||
</el-switch>
|
||
</template>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-switch v-model="scope.row.status" active-value="1" inactive-value="0">
|
||
</el-switch>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="规格名称" :width="skuTitleWidth" fixed="left">
|
||
<template v-for="(sku,index) in skuAttr">
|
||
<el-table-column align="center" column-key="sku-name" show-overflow-tooltip
|
||
:label="sku.name" class-name="sku-name" min-width="100px"
|
||
:key="sku.id"
|
||
v-if="sku.id">
|
||
<template slot-scope="scope">{{scope.row.name[index]}}</template>
|
||
</el-table-column>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="规格图片" min-width="70px">
|
||
<template slot-scope="scope">
|
||
<div
|
||
style="display: flex;flex-direction: column;align-items: center;justify-content: center;">
|
||
<div class="el-upload el-upload--picture-card el-upload-list--picture-card upload-img-micro-auto"
|
||
style="margin-right: 0"
|
||
@click="selectFileBefore(1,{name:'sku_img_'+scope.$index,index:scope.$index})">
|
||
<i v-if="!scope.row.goods_img" class="el-icon-plus"></i>
|
||
<img v-else class="el-upload-list__item-thumbnail img-auto"
|
||
:src="scope.row.goods_img">
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="规格货号" width="110px">
|
||
<template slot-scope="scope" slot="header">
|
||
<div>规格货号</div>
|
||
<template v-if="skuAttr.length">
|
||
<el-button @click="clearAllSkuNumber">清空货号</el-button>
|
||
</template>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.sku_goods_number'"
|
||
:rules="skuFormRules.sku_goods_number">
|
||
<el-input placeholder="货号" v-model="scope.row.sku_goods_number"></el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="Q3编码" width="120px" v-if="isWeili">
|
||
<template slot-scope="scope" slot="header">
|
||
<div>Q3编码</div>
|
||
<template v-if="skuAttr.length && ruleForm.id == 0">
|
||
<el-button @click="clearAllThirdGoodsCode">清空Q3编码</el-button>
|
||
</template>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.third_goods_code'"
|
||
:rules="skuFormRules.third_goods_code">
|
||
<el-input placeholder="Q3编码" :disabled="scope.row.old_id > 0"
|
||
v-model="scope.row.third_goods_code">
|
||
</el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="规格条码" width="160px">
|
||
<template slot-scope="scope" slot="header">
|
||
<div>规格条码</div>
|
||
<template v-if="skuAttr.length">
|
||
<el-button @click="clearAllSkuCode">清空条码</el-button>
|
||
</template>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.sku_code'"
|
||
:rules="skuFormRules.sku_code">
|
||
<el-input placeholder="条码" v-model="scope.row.sku_code"></el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="Plu码" width="160px">
|
||
<template slot-scope="scope" slot="header">
|
||
<div>Plu码</div>
|
||
<template v-if="skuAttr.length">
|
||
<el-button @click="clearAllPluCode">清空Plu码</el-button>
|
||
</template>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.plu_code'"
|
||
:rules="skuFormRules.plu_code">
|
||
<el-input placeholder="Plu码" v-model="scope.row.plu_code"></el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="进价" min-width="130px"
|
||
v-if="operate.show_purchase_price==1">
|
||
<template slot-scope="scope">
|
||
<template v-if="operate.edit_price==1">
|
||
<div v-if="scope.row.old_id">{{scope.row.purchase_price}}</div>
|
||
<el-form-item v-else :prop="'skuList.' + scope.$index + '.purchase_price'"
|
||
:rules="skuFormRules.purchase_price">
|
||
<el-input placeholder="进价" class="mini-input"
|
||
v-model="scope.row.purchase_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</template>
|
||
<template v-else>{{scope.row.purchase_price}}</template>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="零售价" min-width="130px"
|
||
v-if="ruleForm.retail_state==1">
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.retail_price'"
|
||
:rules="skuFormRules.retail_price">
|
||
<el-input placeholder="零售价" class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
@blur="changeMinPrice($event,'retail_price')"
|
||
v-model="scope.row.retail_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="商城价" min-width="130px"
|
||
v-if="ruleForm.online_state==1">
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.online_price'"
|
||
:rules="skuFormRules.online_price">
|
||
<el-input placeholder="商城价" class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
@blur="changeMinPrice($event,'online_price')"
|
||
v-model="scope.row.online_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="店内会员价" min-width="130px"
|
||
v-if="ruleForm.store_mem_status==1">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.store_mem_price'"
|
||
:rules="skuFormRules.store_mem_price">
|
||
<el-input placeholder="店内会员价" class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
@blur="changeMinPrice($event,'store_mem_price')"
|
||
v-model="scope.row.store_mem_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
<div
|
||
v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<el-form-item>
|
||
<el-input v-model="scope.row.store_mem_integral"
|
||
@blur="changeMinPrice($event,'store_mem_integral')"
|
||
class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')"
|
||
placeholder="积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="商城会员价" min-width="130px"
|
||
v-if="ruleForm.online_state&&ruleForm.shop_mem_status==1">
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.shop_mem_price'"
|
||
:rules="skuFormRules.shop_mem_price">
|
||
<el-input placeholder="商城会员价" class="mini-input"
|
||
@blur="changeMinPrice($event,'shop_mem_price')"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
v-model="scope.row.shop_mem_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
<div
|
||
v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<el-form-item>
|
||
<el-input v-model="scope.row.shop_mem_integral"
|
||
@blur="changeMinPrice($event,'shop_mem_integral')"
|
||
class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')"
|
||
placeholder="积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="PLUS会员价" min-width="130px"
|
||
v-if="ruleForm.plus_mem_status==1">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.plus_price'"
|
||
:rules="skuFormRules.plus_price">
|
||
<el-input placeholder="PLUS会员价" class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
@blur="changeMinPrice($event,'plus_price')"
|
||
v-model="scope.row.plus_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
<div
|
||
v-if="base_set.integral_arrive_cash == 1 && base_set.marketing_methods == 2">
|
||
<el-form-item>
|
||
<el-input v-model="scope.row.plus_mem_integral"
|
||
@blur="changeMinPrice($event,'plus_mem_integral')"
|
||
class="mini-input"
|
||
:disabled="operate.edit_price==2?true:false"
|
||
oninput="value=this.value.replace(/^[0]|\D/,'')"
|
||
placeholder="积分">
|
||
<template slot="prepend"><i class="el-icon-coin"></i></template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="导购提成" min-width="130px"
|
||
v-if="ruleForm.guide_royalty_state==1&&ruleForm.guide_royalty_custom_state==1">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.guide_royalty_price'"
|
||
@blur="changeMinPrice($event,'guide_royalty_price')"
|
||
:rules="skuFormRules.guide_royalty_price">
|
||
<el-input placeholder="线下" class="mini-input"
|
||
v-model="scope.row.guide_royalty_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
<div>
|
||
<el-form-item
|
||
:prop="'skuList.' + scope.$index + '.guide_royalty_online_price'"
|
||
@blur="changeMinPrice($event,'guide_royalty_online_price')"
|
||
:rules="skuFormRules.guide_royalty_online_price">
|
||
<el-input placeholder="线上" class="mini-input"
|
||
v-model="scope.row.guide_royalty_online_price">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="库存" min-width="130px">
|
||
<template slot-scope="scope">
|
||
<div v-if="scope.row.old_id">{{scope.row.goods_num}}</div>
|
||
<div v-else-if="base_set.supplier_type == 2"></div>
|
||
<el-input-number v-else v-model="scope.row.goods_num" placeholder="库存"
|
||
:disabled="ruleForm.serial_number_state==1?true:false"
|
||
:precision="0"
|
||
:step="1" :max="1000000" :min="0"></el-input-number>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="超量" min-width="130px">
|
||
<template slot-scope="scope">
|
||
<el-input-number v-model="scope.row.more_num" placeholder="超量" :precision="0"
|
||
:step="1" :max="1000000" :min="0"></el-input-number>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="预警" min-width="130px">
|
||
<template slot-scope="scope">
|
||
<el-input-number v-model="scope.row.less_num" placeholder="预警" :precision="0"
|
||
:step="1" :max="1000000" :min="0"></el-input-number>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column align="center" label="重量(kg)" width="130px">
|
||
<template slot-scope="scope" slot="header">
|
||
<el-tooltip class="item" effect="dark" content="该设置是为了快递发货时非称重商品能按重量计费,且都是按kg计重"
|
||
placement="top-start">
|
||
<span>重量(kg)<i class="el-icon-question"></i></span>
|
||
</el-tooltip>
|
||
</template>
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="'skuList.' + scope.$index + '.weight_value'"
|
||
:rules="skuFormRules.weight_value">
|
||
<el-input placeholder="重量" class="mini-input"
|
||
v-model="scope.row.weight_value">
|
||
<template slot="append">kg</template>
|
||
</el-input>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
|
||
<el-table-column align="center" fixed="right" label="操作" width="56"
|
||
style="border-right: none;">
|
||
<template slot-scope="scope">
|
||
<el-button @click="delSku(scope.$index)" type="text">删除</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-form-item>
|
||
</template>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_8">
|
||
<el-divider content-position="left">导购提成</el-divider>
|
||
<el-form ref="ruleForm_8" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="导购员提成" prop="guide_royalty_state" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.guide_royalty_state"
|
||
:active-text="ruleForm.guide_royalty_state==1?'开启':'关闭'" @change="getFormOffsetTop"
|
||
inactive-value="0" active-value="1">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="导购员在线下、线上推广该商品时的提成" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<template v-if="ruleForm.guide_royalty_state==1">
|
||
<el-form-item label="自定义金额" prop="guide_royalty_custom_state" class="el-form-item-long">
|
||
<el-switch v-model="ruleForm.guide_royalty_custom_state"
|
||
:active-text="ruleForm.guide_royalty_custom_state==1?'开启':'关闭'"
|
||
@change="getFormOffsetTop" inactive-value="0" active-value="1">
|
||
</el-switch>
|
||
<el-tooltip class="item" effect="dark" content="关闭则按照导购员佣金比计算佣金" placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<template v-if="ruleForm.guide_royalty_custom_state==1">
|
||
<el-form-item label="线下提成"
|
||
:required="ruleForm.guide_royalty_custom_state==1&&ruleForm.attribute_state==1?true:false"
|
||
prop="guide_royalty_price">
|
||
<el-input clearable class="small-input" v-model="ruleForm.guide_royalty_price"
|
||
placeholder="请输入金额">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
<el-tooltip class="item" effect="dark" content="在线下推广单个商品,导购员获得的提成金额"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
<el-form-item label="线上提成"
|
||
:required="ruleForm.guide_royalty_custom_state==1&&ruleForm.attribute_state==1?true:false"
|
||
prop="guide_royalty_online_price">
|
||
<el-input clearable class="small-input" v-model="ruleForm.guide_royalty_online_price"
|
||
placeholder="请输入金额">
|
||
<template slot="prepend">¥</template>
|
||
</el-input>
|
||
<el-tooltip class="item" effect="dark" content="在线上推广单个商品,导购员获得的提成金额"
|
||
placement="top-start">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</el-form-item>
|
||
</template>
|
||
</template>
|
||
</el-form>
|
||
</div>
|
||
<div class="edit-goods-content-box" ref="form_9">
|
||
<el-divider content-position="left">图片设置</el-divider>
|
||
<el-form ref="ruleForm_9" :model="ruleForm" :rules="rules" label-width="110px" size="mini">
|
||
<el-form-item label="商品封面图" prop="goods_img_id" class="el-form-item-long">
|
||
<div class="nowrap-inline">
|
||
<div class="el-upload el-upload--picture-card el-upload-list--picture-card upload-img-small-auto"
|
||
@click="selectFileBefore(3)">
|
||
<i v-if="!ruleForm.goods_img" class="el-icon-plus"></i>
|
||
<img v-else class="el-upload-list__item-thumbnail img-auto" :src="ruleForm.goods_img">
|
||
</div>
|
||
<el-button size="small" v-if="ruleForm.goods_img" style="margin-left: 10px"
|
||
@click="selectFileBefore(3)">更换图片
|
||
</el-button>
|
||
</div>
|
||
<div class="wrap-inline"><i>建议图片大小 190 x 190(或者更大尺寸的等比例图片)</i></div>
|
||
</el-form-item>
|
||
<el-form-item label="视频简介" prop="video_id" class="el-form-item-long">
|
||
<div class="nowrap-inline">
|
||
<div class="el-upload el-upload--picture-card el-upload-list--picture-card upload-img-small-auto"
|
||
@click="selectFileBefore(4)">
|
||
<i v-if="!ruleForm.goods_video" class="el-icon-plus"></i>
|
||
<video v-else class="el-upload-list__item-thumbnail img-auto"
|
||
:src="ruleForm.goods_video"></video>
|
||
</div>
|
||
<el-button size="small" v-if="ruleForm.goods_video" style="margin-left: 10px"
|
||
@click="selectFileBefore(4)">更换视频
|
||
</el-button>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="商品轮播图" class="el-form-item-long">
|
||
<div class="wrap-inline">
|
||
<template v-for="(item,index) in bannerList">
|
||
<div
|
||
class="swiper-box el-upload el-upload--picture-card el-upload-list--picture-card upload-img-small-auto">
|
||
<img class="el-upload-list__item-thumbnail img-auto" :src="item.image"
|
||
:style="item.image?'':'width:50px'">
|
||
<div class="del-swiper">
|
||
<i @click="delSwiperImage(index)" class="el-icon-delete"></i>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
<div class="el-upload el-upload--picture-card el-upload-list--picture-card upload-img-small-auto"
|
||
@click="selectFileBefore(2)">
|
||
<i class="el-icon-plus"></i>
|
||
</div>
|
||
</div>
|
||
<div class="wrap-inline">
|
||
<i>建议图片大小 414 x 414(或者更大尺寸的等比例图片)</i>
|
||
</div>
|
||
</el-form-item>
|
||
<el-form-item label="图文详情">
|
||
<div class="wrap-inline">
|
||
<i>图片可手动调整大小,若是想要撑满手机屏幕,建议宽度为750px</i>
|
||
</div>
|
||
<div style="margin-top: 10px">
|
||
<textarea id="editor" type="text/plain"
|
||
style="width:600px;height: 400px;z-index: 0;position: relative;"></textarea>
|
||
</div>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
</el-scrollbar>
|
||
</div>
|
||
|
||
<div class="footer-button-box">
|
||
<el-button size="small" plain type="primary" @click="submitGoods(1,1)">提交并关闭</el-button>
|
||
<el-button type="primary" v-if="ruleForm.id==0" size="small" @click="submitGoods(1,2)">提交并继续添加</el-button>
|
||
</div>
|
||
|
||
<el-dialog title="选择图片" :append-to-body="true" :visible.sync="showSelectImage"
|
||
custom-class="select-image-el-dialog" :top="'10px'" :close-on-click-modal="false">
|
||
<template-select-image :can-select-num="canSelectNum" :used-image-list="propImageList"
|
||
:select-file-type="selectFileType" @selectfile="selectFile"></template-select-image>
|
||
</el-dialog>
|
||
<el-dialog title="云库商品信息" :append-to-body="true" :visible.sync="showCheckGoods"
|
||
custom-class="select-image-el-dialog" width="400px">
|
||
<el-form :model="cloudLibrary" label-width="80px">
|
||
<el-form-item label="商品名称">
|
||
<el-input size="small" v-model="cloudLibrary.goods_name" auto-complete="off" readonly></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品规格">
|
||
<el-input size="small" v-model="cloudLibrary.specification" auto-complete="off" readonly></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品单位">
|
||
<el-input size="small" v-model="cloudLibrary.unit" auto-complete="off" readonly></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品产地">
|
||
<el-input size="small" v-model="cloudLibrary.origin" auto-complete="off" readonly></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="商品品牌">
|
||
<el-input size="small" v-model="cloudLibrary.trademark" auto-complete="off" readonly></el-input>
|
||
</el-form-item>
|
||
<el-form-item v-if="cloudLibrary.image" label="商品封面">
|
||
<img class="cloud-img" :src="cloudLibrary.image">
|
||
</el-form-item>
|
||
</el-form>
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button @click="showCheckGoods = false">取 消</el-button>
|
||
<el-button type="primary" @click="useThisCloudLibrary">使用</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
</div>
|
||
<script src="__PUBLIC__/Retail/js/goods-unit/select-goods-unit.js?v=1.0.1"></script>
|
||
<script src="__PUBLIC__/Retail/js/goods-label/select-goods-label.js?v=1.0.1"></script>
|
||
<script src="__PUBLIC__/Retail/common/js/select-supplier.js"></script>
|
||
<script src="__PUBLIC__/Retail/js/select-goods-brand.js"></script>
|
||
<script src="__PUBLIC__/Retail/js/select-goods-yieldly.js"></script>
|
||
<script type="text/javascript">
|
||
var goodsSet = new Vue({
|
||
el: '#goodsSet',
|
||
data: function () {
|
||
let _this = this;
|
||
return {
|
||
categoryLimitIndustryId: '',//分类限制的行业ID
|
||
labelLimitIndustryId: '',//标签限制的行业ID
|
||
new_goods_brand_name: '',//使用商品云库的品牌名称
|
||
new_goods_yieldly_name: '',//使用商品云库的品牌名称
|
||
skuTitleWidth: 100,
|
||
menuLen: 8,//菜单长度
|
||
formActIndex: '1',//当前展示的form
|
||
formOffsetTopList: [],//页面排版top值列表
|
||
operate: {
|
||
show_purchase_price: '2',//是否有查看进价权限
|
||
edit_price: '2',//是否有改价权限
|
||
},
|
||
store_id: localStorage.store_id,
|
||
industry_id: localStorage.industry_id,
|
||
labelList: [],//标签列表
|
||
pageLoaded: false,//页面是否准备完毕
|
||
temp_class_id: [],//临时存储编辑的商品分类ID列表
|
||
base_set: {
|
||
supplier_type: "2", //2寄售供货商门店
|
||
marketing_methods: "1", //营销方式 1基于订单 2基于商品
|
||
integral_arrive_cash: "0", //是否开启积分抵现 1开启 0关闭
|
||
goods_integral_state: '2',//是否能开启指定商品送积分 1开启 2关闭
|
||
},//基本权限配置信息
|
||
deliveryTemplateList: [], //配送模板
|
||
ruleForm: {
|
||
id: 0,//商品ID
|
||
|
||
goods_name: '',//商品名称
|
||
subheading: '',//副标题
|
||
goods_number: '',//货号
|
||
goods_code: '',//条码
|
||
third_goods_code: '', //微礼编码(Q3)
|
||
goods_class_id: '',//分类id
|
||
purchase_price: '',//进价
|
||
label_id: '',//商品标签
|
||
retail_price: '',//店内零售价
|
||
goods_brand_id: '',//品牌id
|
||
online_price: '',//商城零售价
|
||
goods_order: '',//商城排序
|
||
supplier_id: '',//供货商
|
||
goods_yieldly_id: '',//产地id
|
||
more_num: '',//库存超量
|
||
less_num: '',//库存预警
|
||
company: '',//商品单位
|
||
weight_value: '',//商品重量
|
||
goods_num: '',//商品库存
|
||
fictitious_num: '',//虚拟销量
|
||
specifications: '',//商品规格
|
||
|
||
serial_number_state: '0',//串号状态 0关闭 1开启
|
||
|
||
pricing_method: '1',//是否开启称重
|
||
plu_code: '',//PLU码
|
||
|
||
status: '0',//商品状态 0上架 1下架
|
||
retail_state: '1',//店内出售状态 1开启 0关闭
|
||
online_state: '0',//商城出售状态 1开启 0关闭
|
||
advance_sale_status: '0',//商城预售状态 1开启 0关闭
|
||
split_state: '0',//是否拆分 1开启 0关闭
|
||
refund_state: '0',//是否允许退货退款 1开启 0关闭
|
||
exchange_state: '0',//是否允许换货 1开启 0关闭
|
||
|
||
delivery_type: [1, 2],//配送方式 1自提 2同城配送 3快递发货
|
||
delivery_template_id: '',//3快递发货模板
|
||
|
||
store_mem_status: '2',//店内会员价状态 1开启 2关闭
|
||
store_mem_price: '',//店内会员价
|
||
store_mem_integral: '',//店内会员价+积分
|
||
shop_mem_status: '2',//商城会员价状态 1开启 2关闭
|
||
shop_mem_price: '',//商城会员价
|
||
shop_mem_integral: '',//商城会员价+积分
|
||
plus_mem_status: '2',//PLUS会员价状态 1开启 2关闭
|
||
plus_price: '',//PLUS会员价
|
||
plus_mem_integral: '',//PLUS会员价+积分
|
||
vip_retail_state: '0',//会员价线下折扣状态
|
||
vip_online_state: '0',//会员价线上折扣状态
|
||
integral_mem_status: '2',//会员购买送积分状态 1开启 2关闭
|
||
integral: '',//会员购买送积分
|
||
|
||
guide_royalty_state: '0',//是否开启导购提成
|
||
guide_royalty_custom_state: '0',//是否开启导购提成自定义金额
|
||
guide_royalty_price: '',//导购线下提成自定义金额
|
||
guide_royalty_online_price: '',//导购线上提成自定义金额
|
||
|
||
goods_img: '',//封面图
|
||
goods_img_id: '',//封面图ID
|
||
video_id: '',//视频简介ID
|
||
goods_video: '',//视频地址
|
||
details: '',//商品详情
|
||
|
||
attribute_state: '1',//多规格状态 1关闭 2开启
|
||
skuList: [],//规格表单列表
|
||
sku_plu_switch: '2', //是否自动生成Plu码,1开启, 2关闭
|
||
},//表单数据
|
||
rules: {
|
||
goods_name: [{message: '请输入商品名称', required: true, trigger: 'blur'}, {
|
||
min: 1,
|
||
max: 50,
|
||
message: '限制长度 1 到 50',
|
||
}],
|
||
subheading: [{message: '请输入商品副标题', required: false, trigger: 'blur'}, {
|
||
min: 1,
|
||
max: 50,
|
||
message: '限制长度 1 到 50',
|
||
}],
|
||
goods_number: [{message: '请输入商品货号', required: true, trigger: 'blur'}, {
|
||
pattern: /^[0-9A-z\-_]{1,17}$/, message: '长度 1~17,英文字母、数字或-_ 组合',
|
||
}],
|
||
goods_code: [{message: '请输入商品条码', required: false, trigger: 'blur'}, {
|
||
pattern: /^[0-9A-z\-_]{1,17}$/, message: '长度 1~17,英文字母、数字或-_ 组合',
|
||
}],
|
||
third_goods_code: [
|
||
{required: true, message: '请输入Q3编码', trigger: 'blur'},
|
||
],
|
||
goods_class_id: [{message: '请完善商品分类', required: true, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
if (!value || value == '') {
|
||
callback(new Error("请完善商品分类"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
purchase_price: [{message: '请输入商品的进价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.operate.show_purchase_price;
|
||
let b = _this.ruleForm.id;
|
||
let c = _this.ruleForm.goods_num;
|
||
let d = _this.ruleForm.attribute_state;
|
||
if (a == 1 && d == 1 && b == 0 && c > 0 && !value) {
|
||
callback(new Error("请输入进价"));
|
||
} else if ((a == 1 && b == 0 && c > 0 || value) && reg.test(value) == false) {
|
||
callback(new Error("请输入正确的进价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
retail_price: [{message: '请输入商品的店内零售价', required: true, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.ruleForm.retail_state;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请输入店内零售价"));
|
||
} else if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请输入正确的店内零售价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
online_price: [{message: '请输入商品的商城零售价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.ruleForm.online_state;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请输入商城零售价"));
|
||
} else if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请输入正确的商城零售价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
more_num: [{message: '请输入正确的库存超量值', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
if (_this.ruleForm.pricing_method == 2) {
|
||
var reg = /^[+-]?\d*\.?\d{0,3}$/;
|
||
} else {
|
||
var reg = /^-?([1-9]\d*|[0]{1,1})$/;
|
||
}
|
||
if (reg.test(value) == false && value != '') {
|
||
callback(new Error("请输入正确的库存超量值"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
less_num: [{message: '请输入正确的库存预警值', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
if (_this.ruleForm.pricing_method == 2) {
|
||
var reg = /^[+-]?\d*\.?\d{0,3}$/;
|
||
} else {
|
||
var reg = /^-?([1-9]\d*|[0]{1,1})$/;
|
||
}
|
||
if (reg.test(value) == false && value != '') {
|
||
callback(new Error("请输入正确的库存预警值"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
company: [{message: '请选择商品单位', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.pricing_method;
|
||
let b = _this.ruleForm.company;
|
||
if (a == 2 && b == '') {
|
||
callback(new Error("称重商品必须选择商品单位"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
weight_value: [{message: '请输入商品的重量', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]?\d*\.?\d{0,3}$/;
|
||
if (value && reg.test(value) == false) {
|
||
callback(new Error("商品重量只能为正数,且最多保留三位小数"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
goods_num: [{message: '请输入商品的库存', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.pricing_method;
|
||
let b = _this.ruleForm.id;
|
||
let reg = a == 2 ? (/^-?\d*\.?\d{0,3}$/) : (/^-?([1-9]\d*|[0]{1,1})$/);
|
||
if (value && b == 0 && !reg.test(value)) {
|
||
return callback(new Error("请输入正确的库存"));
|
||
}
|
||
callback();
|
||
}, trigger: 'blur'
|
||
}],
|
||
plu_code: [{message: '请输入商品PLU码', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
if ((/^[0-9]{1,4}$/).test(value) == false && value != '' && value != undefined && value != null) {
|
||
callback(new Error("PLU码只能 1~4 位整数"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
delivery_type: [{
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.online_state;
|
||
if (a == 1 && (!value || !value.length)) {
|
||
callback(new Error("请选择配送方式"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: ['change', 'blur']
|
||
}],
|
||
delivery_template_id: [{
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.delivery_type;
|
||
if (a && a.indexOf(3) >= 0 && !value) {
|
||
callback(new Error("请选择快递模板"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: ['change', 'blur']
|
||
}],
|
||
store_mem_price: [{message: '请设置店内会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
console.log(1);
|
||
let a = _this.ruleForm.store_mem_status;
|
||
let b = _this.ruleForm.retail_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请输入店内会员价"));
|
||
} else if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请设置正确的店内会员价"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
callback(new Error("店内会员价不得大于店内零售价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
shop_mem_price: [{message: '请设置商城会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.shop_mem_status;
|
||
let b = _this.ruleForm.online_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请输入商城会员价"));
|
||
} else if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请设置正确的商城会员价"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
callback(new Error("商城会员价不得大于商城零售价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
plus_price: [{message: '请设置PLUS会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.plus_mem_status;
|
||
let b = _this.ruleForm.retail_price;
|
||
let c = _this.ruleForm.online_price;
|
||
let d = _this.ruleForm.store_mem_price;
|
||
let e = _this.ruleForm.shop_mem_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请输入PLUS会员价"));
|
||
} else if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请设置正确的PLUS会员价"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
callback(new Error("PLUS会员价不能大于店内零售价"));
|
||
} else if (c && c * 1 < value * 1) {
|
||
callback(new Error("PLUS会员价不能大于商城零售价"));
|
||
} else if (d && d * 1 < value * 1) {
|
||
callback(new Error("PLUS会员价不能大于店内会员价"));
|
||
} else if (e && e * 1 < value * 1) {
|
||
callback(new Error("PLUS会员价不能大于商城会员价"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
integral: [{message: '请设置会员购买送的积分', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.integral_mem_status;
|
||
if (a == 1 && !value) {
|
||
callback(new Error("请设置正确的会员购买送的积分"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
guide_royalty_price: [{message: '请设置导购线下单品提成', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.guide_royalty_custom_state;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请设置正确的导购线下单品提成"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
guide_royalty_online_price: [{message: '请设置导购线上单品提成', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.guide_royalty_custom_state;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("请设置正确的导购线上单品提成"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
},//普通表单验证
|
||
skuFormRules: {
|
||
sku_goods_number: [{message: '请输入规格货号', required: true, trigger: 'blur'}, {
|
||
pattern: /^[0-9A-z\-_]{1,17}$/, message: '长度 1~17,英文字母、数字或-_ 组合',
|
||
}],
|
||
third_goods_code: [
|
||
{required: true, message: '请输入Q3编码', trigger: 'blur'},
|
||
],
|
||
purchase_price: [{message: '请输入规格的进价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.operate.show_purchase_price;
|
||
let b = _this.ruleForm.id;
|
||
let i = parseInt(rule.field.split('.')[1]);
|
||
let c = _this.ruleForm.skuList[i].goods_num;
|
||
if (a == 1 && !b && c > 0 && !value) {
|
||
callback(new Error("请输入进价"));
|
||
} else if ((a == 1 && b != 0 && c > 0 || value) && reg.test(value) == false) {
|
||
callback(new Error("进价不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
sku_code: [{message: '请输入条码', required: false, trigger: 'blur'}, {
|
||
pattern: /^[0-9A-z\-_]{1,17}$/, message: '1~17位字母、数字或-_',
|
||
}],
|
||
weight_value: [{message: '请输入规格重量', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]?\d*\.?\d{0,3}$/;
|
||
if (value && reg.test(value) == false) {
|
||
callback(new Error("重量不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
retail_price: [{message: '请输入规格的店内零售价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.ruleForm.retail_state;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
online_price: [{message: '请输入规格的商城零售价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
let a = _this.ruleForm.online_state;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
store_mem_price: [{message: '请设置规格的店内会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let i = parseInt(rule.field.split('.')[1]);
|
||
let a = _this.ruleForm.store_mem_status;
|
||
let b = _this.ruleForm.skuList[i].retail_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
_this.$message({
|
||
message: '店内会员价不得大于店内零售价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
shop_mem_price: [{message: '请设置规格的商城会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let i = parseInt(rule.field.split('.')[1]);
|
||
let a = _this.ruleForm.shop_mem_status;
|
||
let b = _this.ruleForm.skuList[i].online_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
_this.$message({
|
||
message: '商城会员价不得大于商城零售价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
plus_price: [{message: '请设置规格的PLUS会员价', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let i = parseInt(rule.field.split('.')[1]);
|
||
let a = _this.ruleForm.plus_mem_status;
|
||
let b = _this.ruleForm.skuList[i].retail_price;
|
||
let c = _this.ruleForm.skuList[i].online_price;
|
||
let d = _this.ruleForm.skuList[i].store_mem_price;
|
||
let e = _this.ruleForm.skuList[i].shop_mem_price;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else if (b && b * 1 < value * 1) {
|
||
_this.$message({
|
||
message: 'PLUS会员价不能大于店内零售价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else if (c && c * 1 < value * 1) {
|
||
_this.$message({
|
||
message: 'PLUS会员价不能大于商城零售价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else if (d && d * 1 < value * 1) {
|
||
_this.$message({
|
||
message: 'PLUS会员价不能大于店内会员价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else if (e && e * 1 < value * 1) {
|
||
_this.$message({
|
||
message: 'PLUS会员价不能大于商城会员价',
|
||
type: 'warning'
|
||
});
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
guide_royalty_price: [{message: '请设置导购线下单品提成', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.guide_royalty_custom_state;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
guide_royalty_online_price: [{message: '请设置导购线上单品提成', required: false, trigger: 'blur'}, {
|
||
validator: function (rule, value, callback) {
|
||
let a = _this.ruleForm.guide_royalty_custom_state;
|
||
var reg = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
if ((a == 1 || value) && reg.test(value) == false) {
|
||
callback(new Error("价格不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}, trigger: 'blur'
|
||
}],
|
||
},//规格表单验证
|
||
bannerList: [],//商品轮播图
|
||
ue: null,//百度编辑器
|
||
showCheckGoods: false, //是否显示检测商品云库
|
||
cloudLibrary: {
|
||
goods_name: '',
|
||
specification: '',
|
||
unit: '',
|
||
origin: '',
|
||
trademark: '',
|
||
image: '',
|
||
image_id: '',
|
||
},//云库检测信息
|
||
goods_image_url: '',//商品云库图片
|
||
showSelectImage: false, //是否显示选择图片弹框
|
||
selectImageType: 1, //选择类型 1规格图片 2轮播图 3商品封面图 4视频简介
|
||
selectFileType: 1, //选择文件类型 1图片 2视频
|
||
canSelectNum: 1, //从图库可选图片数量
|
||
propImageList: [], //传输给图库的已选图片ID列表、防止重复选择
|
||
swiperImageIdList: [], //轮播图已经选择的图片id列表
|
||
|
||
batch_sku_type: "", //批量规格设置类型
|
||
batch_sku_num: "", //批量规格设置数量
|
||
auto_sku_number_state: false, //是否自动生成货号
|
||
auto_sku_code_state: false, //是否自动编码
|
||
batchSkuStatus: '1', //批量设置规格上下架状态
|
||
skuAttrObject: {}, //规格属性列表对象
|
||
skuAttrListObject: {}, //已选生成的规格列表对象
|
||
skuAttr: [], //已选规格属性列表
|
||
skuNumberList: [0], //规格货号列表
|
||
skuCodeList: [0], //规格条码列表
|
||
|
||
skuAttrList: [], //所有规格属性列表
|
||
selectSKUImageIndex: -1,//选择规格图片下标
|
||
formErrorTopList: [],//表单报错数组top值列表
|
||
isWeili: false, //是否为微礼平台
|
||
maxPlu: 0 //当前最大PLU码
|
||
}
|
||
},
|
||
methods: {
|
||
//修改串码功能状态
|
||
changeSerial(val) {
|
||
if (val == 1) {
|
||
this.ruleForm.goods_num = '';
|
||
this.ruleForm.split_state = 0;
|
||
let skuList = [...this.ruleForm.skuList];
|
||
let len = skuList.length;
|
||
for (let i = 0; i < len; i++) {
|
||
skuList[i].goods_num = '';
|
||
}
|
||
}
|
||
},
|
||
//使用云库信息
|
||
useThisCloudLibrary() {
|
||
var cloudLibrary = JSON.parse(JSON.stringify(this.cloudLibrary));
|
||
this.ruleForm.goods_name = cloudLibrary.goods_name;
|
||
this.ruleForm.specifications = cloudLibrary.specification;
|
||
this.ruleForm.company = cloudLibrary.unit;
|
||
this.new_goods_yieldly_name = cloudLibrary.origin;
|
||
this.new_goods_brand_name = cloudLibrary.trademark;
|
||
if (!this.ruleForm.goods_img_id || this.ruleForm.goods_img_id == 0) {
|
||
this.ruleForm.goods_img_id = cloudLibrary.image_id;
|
||
this.ruleForm.goods_img = cloudLibrary.image;
|
||
}
|
||
this.showCheckGoods = false;
|
||
this.cloudLibrary = {
|
||
goods_name: '',
|
||
specification: '',
|
||
unit: '',
|
||
origin: '',
|
||
trademark: '',
|
||
image: '',
|
||
image_id: '',
|
||
};
|
||
},
|
||
//检测商品条码
|
||
checkGoodsCode() {
|
||
if (!this.ruleForm.goods_code) {
|
||
this.$message({message: '请先输入商品条码', type: 'error', duration: 1000});
|
||
} else {
|
||
$.ajax({
|
||
url: "{:U('checkgoods')}",
|
||
data: {
|
||
code: this.ruleForm.goods_code
|
||
},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.showCheckGoods = true;
|
||
this.cloudLibrary = {};
|
||
this.cloudLibrary = {
|
||
goods_name: res.data.name,
|
||
specification: res.data.specification,
|
||
unit: res.data.unit,
|
||
origin: res.data.origin,
|
||
trademark: res.data.trademark,
|
||
image: res.data.image,
|
||
image_id: res.data.image_id,
|
||
};
|
||
} else {
|
||
this.$message({message: res.msg, type: 'warning', duration: 1000});
|
||
}
|
||
}
|
||
});
|
||
}
|
||
},
|
||
//选择规格属性
|
||
selectSkuAttr(val, index) {
|
||
var skuAttr = JSON.parse(JSON.stringify(this.skuAttr));
|
||
if (val.length) {
|
||
var skuAttrObject = JSON.parse(JSON.stringify(this.skuAttrObject));
|
||
if (skuAttrObject[skuAttr[index].id]) {
|
||
skuAttr[index].name = skuAttrObject[skuAttr[index].id].name;
|
||
skuAttr[index].list = skuAttrObject[skuAttr[index].id].list;
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.changeSkuList();
|
||
})
|
||
} else {
|
||
this.$confirm("该规格属性不存在,是否添加至规格属性库", "温馨提示", {
|
||
confirmButtonText: '添加',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
$.ajax({
|
||
url: "{:U('Attributes/addSkuAttr_forAddMGoods')}",
|
||
data: {
|
||
name: val
|
||
},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
var skuAttrObject = JSON.parse(JSON.stringify(this.skuAttrObject));
|
||
var obj = {
|
||
id: res.id,
|
||
name: val,
|
||
list: [],
|
||
searchSkuListName: ''
|
||
};
|
||
skuAttrObject[res.id] = {
|
||
id: res.id,
|
||
name: val,
|
||
list: [],
|
||
};
|
||
this.skuAttrObject = {};
|
||
this.skuAttrObject = skuAttrObject;
|
||
|
||
this.skuAttrList.unshift(obj);
|
||
this.$nextTick(() => {
|
||
skuAttr[index] = {
|
||
id: res.id,
|
||
name: val,
|
||
list: [],
|
||
};
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.changeSkuList();
|
||
})
|
||
})
|
||
} else {
|
||
this.$message({message: res.msg, type: 'error', duration: 1000});
|
||
}
|
||
}
|
||
})
|
||
}).catch(() => {
|
||
})
|
||
}
|
||
} else {
|
||
skuAttr[index].name = '';
|
||
skuAttr[index].list = [];
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.changeSkuList();
|
||
})
|
||
}
|
||
},
|
||
//判断规格是否可选
|
||
judge(index, id) {
|
||
var flag = false;
|
||
for (var i = 0; i < this.skuAttr.length; i++) {
|
||
if (this.skuAttr[i].id == id && index != i) {
|
||
flag = true;
|
||
}
|
||
}
|
||
return flag;
|
||
},
|
||
//清空规格商品货号
|
||
clearAllSkuNumber() {
|
||
if (!this.ruleForm.skuList.length) {
|
||
return;
|
||
}
|
||
this.$confirm("确认清空所有规格货号吗?", "温馨提示", {
|
||
confirmButtonText: '继续',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.$loading({
|
||
lock: true,
|
||
text: '清除中,请等待',
|
||
spinner: 'el-icon-loading',
|
||
background: 'rgba(255, 255, 255, 0.7)'
|
||
});
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
skuList[i].sku_goods_number = '';
|
||
count++;
|
||
}
|
||
if (count > 0) {
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
this.skuNumberList = [0];
|
||
this.$nextTick(() => {
|
||
this.$loading().close();
|
||
this.$message({message: '清除成功', type: 'success', duration: 1000});
|
||
})
|
||
} else {
|
||
this.$message({message: '暂无可清除条码', type: 'error', duration: 1500});
|
||
}
|
||
}).catch(() => {
|
||
});
|
||
},
|
||
//清空Q3编码
|
||
clearAllThirdGoodsCode() {
|
||
if (!this.ruleForm.skuList.length) {
|
||
return;
|
||
}
|
||
this.$confirm("确认清空所有Q3编码吗?", "温馨提示", {
|
||
confirmButtonText: '继续',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.$loading({
|
||
lock: true,
|
||
text: '清除中,请等待',
|
||
spinner: 'el-icon-loading',
|
||
background: 'rgba(255, 255, 255, 0.7)'
|
||
});
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
skuList[i].third_goods_code = '';
|
||
count++;
|
||
}
|
||
if (count > 0) {
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
this.skuNumberList = [0];
|
||
this.$nextTick(() => {
|
||
this.$loading().close();
|
||
this.$message({message: '清除成功', type: 'success', duration: 1000});
|
||
})
|
||
} else {
|
||
this.$message({message: '暂无可清除Q3编码', type: 'error', duration: 1500});
|
||
}
|
||
}).catch(() => {
|
||
});
|
||
},
|
||
//清空规格商品条码
|
||
clearAllSkuCode() {
|
||
if (!this.ruleForm.skuList.length) {
|
||
return;
|
||
}
|
||
this.$confirm("确认清空所有规格条码吗?", "温馨提示", {
|
||
confirmButtonText: '继续',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.$loading({
|
||
lock: true,
|
||
text: '清除中,请等待',
|
||
spinner: 'el-icon-loading',
|
||
background: 'rgba(255, 255, 255, 0.7)'
|
||
});
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
skuList[i].sku_code = '';
|
||
count++;
|
||
}
|
||
if (count > 0) {
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
this.skuCodeList = [0];
|
||
this.$nextTick(() => {
|
||
this.$loading().close();
|
||
this.$message({message: '清除成功', type: 'success', duration: 1000});
|
||
})
|
||
} else {
|
||
this.$message({message: '暂无可清除条码', type: 'error', duration: 1500});
|
||
}
|
||
}).catch(() => {
|
||
});
|
||
},
|
||
//清空规格商品Plu码
|
||
clearAllPluCode() {
|
||
if (!this.ruleForm.skuList.length) {
|
||
return;
|
||
}
|
||
this.$confirm("确认清空所有规格Plu码吗?", "温馨提示", {
|
||
confirmButtonText: '继续',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.$loading({
|
||
lock: true,
|
||
text: '清除中,请等待',
|
||
spinner: 'el-icon-loading',
|
||
background: 'rgba(255, 255, 255, 0.7)'
|
||
});
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
skuList[i].plu_code = '';
|
||
count++;
|
||
}
|
||
if (count > 0) {
|
||
this.ruleForm.skuList = skuList;
|
||
this.skuCodeList = [0];
|
||
this.$nextTick(() => {
|
||
this.$loading().close();
|
||
this.$message({message: '清除成功', type: 'success', duration: 1000});
|
||
})
|
||
} else {
|
||
this.$message({message: '暂无可清除Plu码', type: 'error', duration: 1500});
|
||
}
|
||
}).catch(() => {
|
||
});
|
||
},
|
||
//自动生成规格货号
|
||
doAutoSkuNumber() {
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
if (!skuList[i].sku_goods_number) {
|
||
skuList[i].sku_goods_number = this.ruleForm.goods_number + '-' + (this.skuNumberList[this.skuNumberList.length - 1] + 1);
|
||
this.skuNumberList.push(this.skuNumberList[this.skuNumberList.length - 1] + 1);
|
||
count++;
|
||
}
|
||
}
|
||
if (count > 0) {
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
this.$message({message: '编号成功', type: 'success', duration: 1000});
|
||
}
|
||
},
|
||
//给规格自动编号
|
||
doAutoCode() {
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
var count = 0;
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
if (skuList[i].sku_code == '') {
|
||
skuList[i].sku_code = this.ruleForm.goods_code + '-' + (this.skuCodeList[this.skuCodeList.length - 1] + 1);
|
||
this.skuCodeList.push(this.skuCodeList[this.skuCodeList.length - 1] + 1);
|
||
count++;
|
||
}
|
||
}
|
||
if (count > 0) {
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
this.$message({message: '编号成功', type: 'success', duration: 1000});
|
||
}
|
||
},
|
||
/**
|
||
* @description 重新自动生成规格Plu
|
||
*/
|
||
async doAutoPluCode() {
|
||
this.maxPlu = 0
|
||
await this.getMaxPLU()
|
||
if (this.maxPlu > 0) {
|
||
var skuList = this.ruleForm.skuList
|
||
var count = 0
|
||
|
||
//重新获取的最大PLU码,肯定是系统里最大的,如果还比规格中某个小,说明是用户手填数字或未清除的大数字
|
||
//为保证稳定性,采用最大的+1。
|
||
skuList.map(sku => {
|
||
if (sku.plu_code && sku.plu_code >= this.maxPlu) this.maxPlu = parseInt(sku.plu_code) + 1
|
||
})
|
||
|
||
for (var i = 0; i < skuList.length; i++) {
|
||
if (!skuList[i].plu_code) {
|
||
const pluCode = this.maxPlu + count
|
||
if (pluCode > 9999) {
|
||
return
|
||
}
|
||
skuList[i].plu_code = pluCode
|
||
count++
|
||
}
|
||
}
|
||
if (count > 0) {
|
||
this.ruleForm.skuList = JSON.parse(JSON.stringify(skuList));
|
||
this.maxPlu += count
|
||
this.$message({message: 'Plu码生成成功', type: 'success', duration: 1000});
|
||
}
|
||
}
|
||
},
|
||
//打开关闭自动生成规格货号
|
||
autoSkuNumber() {
|
||
if (!String(this.ruleForm.goods_number).length) {
|
||
this.$confirm("设置商品货号后才能自动生成规格货号,是否生成商品货号", "温馨提示", {
|
||
confirmButtonText: '生成',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.getAutoGoodsNumber();
|
||
}).catch(() => {
|
||
this.auto_sku_number_state = !this.auto_sku_number_state;
|
||
})
|
||
}
|
||
},
|
||
//打开关闭自动规格编号
|
||
autoCode() {
|
||
if (!String(this.ruleForm.goods_code).length) {
|
||
this.$confirm("设置商品条码后才能自动生成规格条码,是否生成商品条码", "温馨提示", {
|
||
confirmButtonText: '生成',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.getAutoGoodsCode();
|
||
}).catch(() => {
|
||
this.auto_sku_code_state = !this.auto_sku_code_state;
|
||
})
|
||
}
|
||
},
|
||
//增加规格属性
|
||
addSkuAttr() {
|
||
var obj = {
|
||
list: [],
|
||
name: '',
|
||
id: '',
|
||
searchSkuListName: '',//新建规格值
|
||
};
|
||
var skuAttr = JSON.parse(JSON.stringify(this.skuAttr));
|
||
skuAttr.push(obj);
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.changeSkuList();
|
||
});
|
||
},
|
||
//选择或取消规格值
|
||
checkSkuList(index, i) {
|
||
var skuAttr = JSON.parse(JSON.stringify(this.skuAttr));
|
||
skuAttr[index].list[i].checked = !skuAttr[index].list[i].checked;
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.addOrDelSkuAttrList(index, i);
|
||
});
|
||
},
|
||
//搜索选择添加规格属性
|
||
sureSearchSkuList(index) {
|
||
if (this.skuAttr[index].searchSkuListName.length) {
|
||
var skuAttr = JSON.parse(JSON.stringify(this.skuAttr));
|
||
var flag = true;
|
||
for (var i = 0; i < skuAttr[index].list.length; i++) {
|
||
if (skuAttr[index].searchSkuListName == skuAttr[index].list[i].name && !skuAttr[index].list[i].checked) {
|
||
skuAttr[index].list[i].checked = true;
|
||
skuAttr[index].searchSkuListName = '';
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.$nextTick(() => {
|
||
this.addOrDelSkuAttrList(index, i);
|
||
});
|
||
flag = false;
|
||
break;
|
||
} else if (skuAttr[index].searchSkuListName == skuAttr[index].list[i].name) {
|
||
this.$message({message: '已选择同名的规格', type: 'error', duration: 800});
|
||
flag = false;
|
||
break;
|
||
}
|
||
}
|
||
if (flag) {
|
||
//需要重新添加
|
||
this.$confirm("该规格不存在,是否添加至规格库", "温馨提示", {
|
||
confirmButtonText: '添加',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
$.ajax({
|
||
url: "{:U('Attributes/addSkuList_forAddMGoods')}",
|
||
data: {
|
||
name: skuAttr[index].searchSkuListName,
|
||
id: skuAttr[index].id
|
||
},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
var obj = {
|
||
id: res.id,
|
||
name: skuAttr[index].searchSkuListName,
|
||
checked: true
|
||
};
|
||
var obj2 = {
|
||
id: res.id,
|
||
name: skuAttr[index].searchSkuListName,
|
||
checked: false
|
||
};
|
||
skuAttr[index].list.push(obj);
|
||
skuAttr[index].searchSkuListName = '';
|
||
this.skuAttr = [];
|
||
this.skuAttr = skuAttr;
|
||
this.skuAttrObject[skuAttr[index].id].list.push(JSON.parse(JSON.stringify(obj2)));
|
||
this.$nextTick(() => {
|
||
this.addOrDelSkuAttrList(index, skuAttr[index].list.length - 1);
|
||
});
|
||
} else {
|
||
this.$message({message: res.msg, type: 'error', duration: 800});
|
||
}
|
||
}
|
||
})
|
||
}).catch(() => {
|
||
})
|
||
}
|
||
}
|
||
},
|
||
//删除整个规格
|
||
delSkuItem(index) {
|
||
this.skuAttr.splice(index, 1);
|
||
this.$nextTick(() => {
|
||
this.changeSkuList();
|
||
});
|
||
},
|
||
//删除整条规格
|
||
delSku(index) {
|
||
let key = this.ruleForm.skuList[index].id.join(',');
|
||
delete this.skuAttrListObject[key];//规格列表对象删除
|
||
let skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
skuList.splice(index, 1);//规格列表删除
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = skuList;
|
||
},
|
||
//新增或删除某种规格值
|
||
addOrDelSkuAttrList(index, index_1) {
|
||
var skuAttr = this.skuAttr;
|
||
if (skuAttr[index].list[index_1].checked) {
|
||
//选中规格
|
||
this.combinationSku(0);//生成新规格
|
||
} else {
|
||
//取消规格选择
|
||
let id = skuAttr[index].list[index_1].id;
|
||
var skuList = this.ruleForm.skuList;
|
||
for (let i = skuList.length - 1; i >= 0; i--) {
|
||
console.log('skuList[i].id.indexOf(id) >= 0');
|
||
if (skuList[i].id.indexOf(id) >= 0) {
|
||
this.delSku(i);//只要选择了该值的规格就删除
|
||
}
|
||
}
|
||
}
|
||
},
|
||
//规格属性发生变动时修改规格数据存储
|
||
changeSkuList() {
|
||
this.skuCodeList = [0];
|
||
this.skuNumberList = [0];
|
||
this.ruleForm.skuList = [];//重置规格列表
|
||
this.skuAttrListObject = {};//重置规格对象列表
|
||
if (this.skuAttr.length) {
|
||
this.combinationSku(0);
|
||
}
|
||
},
|
||
//组合规格字段 index下标 result组合、存储被选中的值
|
||
combinationSku(index, result = []) {
|
||
let arr = [];
|
||
this.skuAttr[index].list.forEach(item => {
|
||
if (item.checked) {
|
||
if (result.length) {
|
||
result.forEach(item1 => {
|
||
let id = [...item1.id];
|
||
let name = [...item1.name];
|
||
id.push(item.id);
|
||
name.push(item.name);
|
||
arr.push({id: id, name: name});
|
||
})
|
||
} else {
|
||
arr.push({id: [item.id], name: [item.name]});
|
||
}
|
||
}
|
||
});
|
||
if (index < this.skuAttr.length - 1) {
|
||
this.combinationSku(index + 1, arr);
|
||
} else if (arr.length && arr[0].id.length == this.skuAttr.length) {
|
||
arr.forEach(item => {
|
||
this.createdSkuList(item); //生成规格
|
||
});
|
||
}
|
||
},
|
||
//生成新规格组合
|
||
createdSkuList(data) {
|
||
//获取规格数据模板
|
||
let tempObj = this.getSkuListModel();
|
||
//插入规格名称与id
|
||
tempObj.id = data.id;
|
||
tempObj.name = data.name;
|
||
let key = data.id.join(',');
|
||
if (!this.skuAttrListObject[key]) {
|
||
//规格不存在,新增规格
|
||
this.ruleForm.skuList.push(JSON.parse(JSON.stringify(tempObj)));
|
||
this.skuAttrListObject[key] = JSON.parse(JSON.stringify(tempObj));
|
||
|
||
if (this.ruleForm.sku_plu_switch == '1') {
|
||
this.maxPlu++
|
||
}
|
||
}
|
||
},
|
||
//获取规格数据模板
|
||
getSkuListModel() {
|
||
let tempObj = {
|
||
goods_img: '',
|
||
goods_img_id: '',
|
||
weight_value: 0,
|
||
purchase_price: this.ruleForm.purchase_price,
|
||
online_price: this.ruleForm.online_price,
|
||
retail_price: this.ruleForm.retail_price,
|
||
shop_mem_price: this.ruleForm.shop_mem_price,
|
||
store_mem_price: this.ruleForm.store_mem_price,
|
||
plus_price: this.ruleForm.plus_price,
|
||
shop_mem_integral: this.ruleForm.shop_mem_integral,
|
||
plus_mem_integral: this.ruleForm.plus_mem_integral,
|
||
store_mem_integral: this.ruleForm.store_mem_integral,
|
||
guide_royalty_price: this.ruleForm.guide_royalty_price,
|
||
guide_royalty_online_price: this.ruleForm.guide_royalty_online_price,
|
||
goods_num: '',
|
||
sku_num: 1,
|
||
more_num: '',
|
||
status: '1',
|
||
less_num: '',
|
||
sku_goods_number: '',
|
||
sku_code: '',
|
||
id: [],
|
||
name: [],
|
||
};
|
||
//货号自动生成
|
||
if (this.auto_sku_number_state) {
|
||
tempObj.sku_goods_number = this.ruleForm.goods_number + '-' + (this.skuNumberList[this.skuNumberList.length - 1] + 1);
|
||
this.skuNumberList.push(this.skuNumberList[this.skuNumberList.length - 1] + 1);
|
||
}
|
||
//条码自动生成
|
||
if (this.auto_sku_code_state) {
|
||
tempObj.sku_code = this.ruleForm.goods_code + '-' + (this.skuCodeList[this.skuCodeList.length - 1] + 1);
|
||
this.skuCodeList.push(this.skuCodeList[this.skuCodeList.length - 1] + 1);
|
||
}
|
||
//Plu码自动生成
|
||
if (this.ruleForm.sku_plu_switch == '1' && this.maxPlu <= 9999) {
|
||
tempObj.plu_code = this.maxPlu
|
||
}
|
||
|
||
return JSON.parse(JSON.stringify(tempObj))
|
||
},
|
||
//选择文件回调
|
||
selectFile(item) {
|
||
console.log(item);
|
||
this.showSelectImage = false;
|
||
if (item.length) {
|
||
switch (this.selectImageType) {
|
||
case 1:
|
||
//规格
|
||
var skuList = JSON.parse(JSON.stringify(this.ruleForm.skuList));
|
||
skuList[this.selectSKUImageIndex].goods_img = item[0].path;
|
||
skuList[this.selectSKUImageIndex].goods_img_id = item[0].id;
|
||
this.ruleForm.skuList = skuList;
|
||
break;
|
||
case 2:
|
||
//轮播图
|
||
var bannerList = JSON.parse(JSON.stringify(this.bannerList));
|
||
for (var i = 0; i < item.length; i++) {
|
||
var obj = {id: 0, image_id: item[i].id, image: item[i].path};
|
||
bannerList.push(obj);
|
||
}
|
||
this.bannerList = bannerList;
|
||
break;
|
||
case 3:
|
||
//封面图
|
||
this.ruleForm.goods_img = item[0].path;
|
||
this.ruleForm.goods_img_id = item[0].id;
|
||
this.goods_image_url = '';
|
||
break;
|
||
case 4:
|
||
//视频简介
|
||
if (item[0].type != 2) {
|
||
return this.$message.warning('请选择视频')
|
||
}
|
||
this.ruleForm.goods_video = item[0].path;
|
||
this.ruleForm.video_id = item[0].id;
|
||
break;
|
||
}
|
||
}
|
||
},
|
||
//准备选择文件之前
|
||
selectFileBefore(type, option = {}) {
|
||
this.selectImageType = type;
|
||
this.propImageList = [];
|
||
this.canSelectNum = 1;
|
||
this.selectFileType = 1;
|
||
switch (type) {
|
||
case 1:
|
||
//准备选择规格图片
|
||
this.actFileName = option.name;
|
||
this.selectSKUImageIndex = option.index;
|
||
break;
|
||
case 2:
|
||
//准备选择轮播图
|
||
this.propImageList = JSON.parse(JSON.stringify(this.swiperImageIdList));
|
||
this.canSelectNum = 10;
|
||
break;
|
||
case 3:
|
||
//准备封面图
|
||
this.actFileName = 'goods_image';
|
||
break;
|
||
case 4:
|
||
//准备选择视频
|
||
this.actFileName = 'goods_video';
|
||
this.selectFileType = 2;
|
||
break;
|
||
}
|
||
this.$nextTick(() => {
|
||
this.showSelectImage = true;
|
||
});
|
||
},
|
||
//删除已选轮播图
|
||
delSwiperImage(index) {
|
||
var bannerList = JSON.parse(JSON.stringify(this.bannerList));
|
||
bannerList.splice(index, 1);
|
||
this.bannerList = bannerList;
|
||
},
|
||
//提交
|
||
submitGoods(index, type) {
|
||
//提交数据
|
||
this.formErrorTopList = [];
|
||
this.$refs['ruleForm_' + index].validate((valid) => {
|
||
console.log(valid);
|
||
if (!valid) {
|
||
this.$nextTick(() => {
|
||
this.getElementDistance();
|
||
});
|
||
return false;
|
||
}
|
||
if (index < this.menuLen) {
|
||
this.submitGoods(index + 1, type)
|
||
} else {
|
||
console.log('表单验证通过');
|
||
|
||
//验证规格
|
||
if (this.ruleForm.attribute_state == 2 && !this.ruleForm.skuList.length) {
|
||
this.$message({message: '请设置商品规格', type: 'warning'});
|
||
return false;
|
||
}
|
||
let data = JSON.parse(JSON.stringify(this.ruleForm));
|
||
//只有开启了规格才上传规格数据
|
||
data.skuList = this.ruleForm.attribute_state == 2 ? JSON.stringify(this.ruleForm.skuList) : '';
|
||
//合并商品详情
|
||
data.details = this.ue.getContent();
|
||
|
||
//商品云库图片
|
||
data.goods_image_url = this.ruleForm.goods_image_url;
|
||
|
||
//合并轮播图
|
||
data.bannerList = this.bannerList;
|
||
|
||
this.$confirm("商品变动,收银端请注意刷新数据", "温馨提示", {
|
||
confirmButtonText: '继续',
|
||
cancelButtonText: '取消',
|
||
type: 'info'
|
||
}).then(() => {
|
||
this.$loading({
|
||
lock: true,
|
||
text: '保存中,请等待',
|
||
spinner: 'el-icon-loading',
|
||
background: 'rgba(255, 255, 255, 0.7)'
|
||
});
|
||
$.ajax({
|
||
url: "{:U('doGoodsSet_v1')}", //图片上传出来的url,返回的是图片上传后的路径,http格式
|
||
data: data,
|
||
type: "POST",
|
||
success: (res) => {
|
||
this.$loading().close();
|
||
if (res.status == 1) {
|
||
this.$message({
|
||
message: res.message,
|
||
type: 'success',
|
||
duration: 1000,
|
||
onClose: () => {
|
||
this.$refs.goodsLabel.submitLabel(res.data.goods_id, () => {
|
||
if (type == 1) {
|
||
MenuApp.backPreview();
|
||
} else {
|
||
this.resetForm();
|
||
this.$refs.goodsLabel.clearLabel();
|
||
this.scrollToFixedHeight(0);
|
||
}
|
||
})
|
||
}
|
||
});
|
||
} else {
|
||
this.$message({message: res.message, type: 'error'});
|
||
}
|
||
}, error: () => {
|
||
this.$loading().close();
|
||
this.$message({message: '系统发生错误', type: 'error'});
|
||
}
|
||
});
|
||
}).catch(() => {
|
||
})
|
||
}
|
||
});
|
||
},
|
||
//重置表单
|
||
resetForm() {
|
||
for (let i = 0; i < this.menuLen; i++) {
|
||
this.$refs['ruleForm_' + (i + 1)].resetFields();
|
||
}
|
||
this.$set(this.ruleForm, 'skuList', []); //resetFields不会重置数组
|
||
this.swiperImageIdList = []; //轮播图已经选择的图片id列表
|
||
this.ruleForm.third_goods_code = ''; //Q3编码
|
||
this.batch_sku_type = ''; //批量规格设置类型
|
||
this.batch_sku_num = ''; //批量规格设置数量
|
||
this.goods_image_url = ''; //商品云库图片
|
||
this.auto_sku_number_state = false;//是否自动生成货号
|
||
this.auto_sku_code_state = false;//是否自动编码
|
||
this.batchSkuStatus = '1';
|
||
this.skuAttrListObject = {}; //已选生成的规格列表对象
|
||
this.skuAttr = []; //已选规格属性列表
|
||
this.skuNumberList = [0]; //规格货号列表
|
||
this.skuCodeList = [0]; //规格条码列表
|
||
this.bannerList = []; //轮播图
|
||
this.ue.setContent(''); //重置百度编辑器内容
|
||
this.categoryLimitIndustryId = '';//分类限制的行业
|
||
this.labelLimitIndustryId = ''; //标签限制的行业
|
||
this.$refs['category'].clearCategory();
|
||
this.$nextTick(() => {
|
||
this.ruleForm.supplier_id = '';
|
||
})
|
||
},
|
||
//恢复字段必填状态
|
||
normalRequired(key, field, required_value) {
|
||
this.verifyPrice(this.ruleForm[key], required_value, this.ruleForm[key] == required_value, field);
|
||
},
|
||
//规格批量设置
|
||
batch_sku_confirm() {
|
||
var type = this.batch_sku_type;
|
||
var sku = this.ruleForm.skuList;
|
||
var batch_sku_num = this.batch_sku_num;
|
||
var reg = /^-?([1-9]\d*|[0]{1,1})$/;
|
||
var regs = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d{0,2})$/;
|
||
var weight_reg = /^[+]?\d*\.?\d{0,3}$/;
|
||
if (!type) {
|
||
this.$message({message: "请选择设置类型", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
if (!batch_sku_num) {
|
||
this.$message({message: "请输入设置数", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
if (!sku.length) {
|
||
this.$message({message: "请先设置规格信息", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
if (type == 1 || type == 2 || type == 3 || type == 4 || type == 5 || type == 6 || type == 7 || type == 8) {
|
||
if (!regs.test(batch_sku_num)) {
|
||
this.$message({message: "请输入正确价格", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
}
|
||
if (type == 9 || type == 10 || type == 11 || type == 12) {
|
||
if (!reg.test(batch_sku_num)) {
|
||
this.$message({message: "请输入正确数量", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
}
|
||
if (!weight_reg.test(batch_sku_num) && type == 13) {
|
||
this.$message({message: "请输入正确重量", type: 'warning', duration: 1000});
|
||
return;
|
||
}
|
||
let key = ''
|
||
for (var i = 0; i < sku.length; i++) {
|
||
switch (type) {
|
||
case "1":
|
||
//进价
|
||
if (!sku[i].old_id) {
|
||
sku[i].purchase_price = batch_sku_num;
|
||
key = 'purchase_price';
|
||
}
|
||
break;
|
||
case "2":
|
||
//零售价
|
||
sku[i].retail_price = batch_sku_num;
|
||
key = 'retail_price';
|
||
break;
|
||
case "3":
|
||
//店内会员价
|
||
sku[i].store_mem_price = batch_sku_num;
|
||
key = 'store_mem_price';
|
||
break;
|
||
case "4":
|
||
//商城价
|
||
sku[i].online_price = batch_sku_num;
|
||
key = 'online_price';
|
||
break;
|
||
case "5":
|
||
//商城会员价
|
||
sku[i].shop_mem_price = batch_sku_num;
|
||
key = 'shop_mem_price';
|
||
break;
|
||
case "6":
|
||
//plus会员价
|
||
sku[i].plus_price = batch_sku_num;
|
||
key = 'plus_price';
|
||
break;
|
||
case "7":
|
||
//线下导购提成
|
||
sku[i].guide_royalty_price = batch_sku_num;
|
||
key = 'guide_royalty_price';
|
||
break;
|
||
case "8":
|
||
//线上导购提成
|
||
sku[i].guide_royalty_online_price = batch_sku_num;
|
||
key = 'guide_royalty_online_price';
|
||
break;
|
||
// case "9":
|
||
// sku[i].sku_num = batch_sku_num;
|
||
// break;
|
||
case "10":
|
||
if (!sku[i].old_id) {
|
||
sku[i].goods_num = batch_sku_num;
|
||
}
|
||
break;
|
||
case "11":
|
||
sku[i].more_num = batch_sku_num;
|
||
key = 'more_num';
|
||
break;
|
||
case "12":
|
||
sku[i].less_num = batch_sku_num;
|
||
key = 'less_num';
|
||
break;
|
||
case "13":
|
||
sku[i].weight_value = batch_sku_num;
|
||
key = 'weight_value';
|
||
break;
|
||
}
|
||
}
|
||
this.changeMinPrice({
|
||
target: {
|
||
value: batch_sku_num
|
||
}
|
||
}, key)
|
||
this.ruleForm.skuList = sku;
|
||
},
|
||
//批量修改规格上下架状态
|
||
changeSkuStatus() {
|
||
var sku = this.ruleForm.skuList;
|
||
for (var i = 0; i < sku.length; i++) {
|
||
sku[i].status = this.batchSkuStatus;
|
||
}
|
||
// this.ruleForm.skuList = [];
|
||
this.ruleForm.skuList = sku;
|
||
|
||
},
|
||
//自动生成条码
|
||
getAutoGoodsCode() {
|
||
$.ajax({
|
||
url: "{:U('Mgoods/getAutoGoodsCode')}",
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.ruleForm.goods_code = res.code;
|
||
this.$message({
|
||
type: 'success',
|
||
message: res.msg,
|
||
duration: 1000
|
||
});
|
||
} else {
|
||
this.$message({type: 'error', message: res.msg, duration: 1000});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//自动生成货号
|
||
getAutoGoodsNumber() {
|
||
$.ajax({
|
||
url: "{:U('auto_number')}",
|
||
type: "POST",
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.ruleForm.goods_number = res.info;
|
||
this.$message({message: res.msg, type: 'success', duration: 1000});
|
||
} else {
|
||
this.$message({message: res.msg, type: 'error', duration: 1000});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//修改菜单指定位置
|
||
changeMenu(val, ref = null) {
|
||
this.formActIndex = String(val);
|
||
let h = $(this.$refs['form_' + this.formActIndex])[0].offsetTop;
|
||
this.scrollToFixedHeight(h - 24, ref, true);
|
||
},
|
||
//获取报错规格距离大框的滚动距离
|
||
getElementDistance() {
|
||
let elem = $('.edit-goods-content').find('.el-form-item__error')[0];
|
||
var elemDis = elem.offsetTop;//获得elem元素距相对定位的父元素的top left
|
||
let parent = $(elem.offsetParent)[0];//获取相对定位的父元素
|
||
while (parent.className != 'edit-goods-content el-scrollbar') {
|
||
elemDis += parent.offsetTop;
|
||
parent = $(parent.offsetParent)[0];
|
||
}
|
||
this.scrollToFixedHeight(elemDis - 30);
|
||
},
|
||
//滚动至固定位置,某个输入框聚焦
|
||
scrollToFixedHeight(h, ref = null, bol = false) {
|
||
let _height = $('.edit-goods-content')[0].offsetHeight;
|
||
let scrollbarEl = this.$refs.scrollbar.wrap;
|
||
let _top = scrollbarEl.scrollTop;
|
||
// console.log(h, _top, _height);
|
||
if (_top + _height - 50 < h || h < _top || bol) {
|
||
scrollbarEl.scrollTop = h;
|
||
}
|
||
if (ref) {
|
||
$(this.$refs[ref]).focus();
|
||
}
|
||
},
|
||
//监听滚动
|
||
handleScroll() {
|
||
let scrollbarEl = this.$refs.scrollbar.wrap;
|
||
scrollbarEl.onscroll = () => {
|
||
// console.log(scrollbarEl.scrollTop);
|
||
for (let i = 0; i < this.menuLen; i++) {
|
||
if (this.formOffsetTopList[i][0] <= scrollbarEl.scrollTop && this.formOffsetTopList[i][1] >= scrollbarEl.scrollTop) {
|
||
this.formActIndex = String(i + 1);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
//获取各个位置的top值
|
||
getFormOffsetTop() {
|
||
let formOffsetTopList = [];
|
||
for (let i = 1; i <= this.menuLen; i++) {
|
||
let h = $(this.$refs['form_' + i])[0].offsetTop - 30;
|
||
formOffsetTopList.push([h]);
|
||
if (i != 1) {
|
||
formOffsetTopList[i - 2][1] = h;
|
||
}
|
||
if (i == this.menuLen) {
|
||
formOffsetTopList[i - 1][1] = 999999;
|
||
}
|
||
}
|
||
this.formOffsetTopList = formOffsetTopList;
|
||
},
|
||
//获取新增、编辑商品所需的基本设置
|
||
getEditGoodsBaseSet() {
|
||
$.ajax({
|
||
url: "{:U('getEditGoodsBaseSet')}",
|
||
data: {},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.operate = {
|
||
show_purchase_price: res.data.show_purchase_price,
|
||
edit_price: res.data.edit_price,
|
||
};
|
||
this.base_set = {
|
||
supplier_type: res.data.supplier_type,
|
||
marketing_methods: res.data.marketing_methods,
|
||
integral_arrive_cash: res.data.integral_arrive_cash,
|
||
goods_integral_state: res.data.goods_integral_state,
|
||
}
|
||
} else {
|
||
this.$alert(res.msg ? res.msg : '请求发生错误,请稍后重试!', '错误提示', {
|
||
confirmButtonText: '确定',
|
||
callback: action => {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//获取商品详情
|
||
getGoodsDetails(callback) {
|
||
$.ajax({
|
||
url: "{:U('goodsSet')}",
|
||
data: {
|
||
id: this.ruleForm.id,
|
||
},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
let obj = res.data.goods;
|
||
obj.skuList = [];
|
||
this.ruleForm = obj;
|
||
this.temp_class_id = res.data.goods_class;
|
||
this.bannerList = res.data.bannerList;
|
||
this.$nextTick(() => {
|
||
this.pageLoaded = true;
|
||
if (this.ruleForm.details) {
|
||
this.ue.ready(() => {
|
||
this.ue.setContent(this.ruleForm.details);
|
||
});
|
||
}
|
||
if (this.ruleForm.attribute_state == 2) {
|
||
this.getAttribute();//获取规格信息
|
||
}
|
||
this.verifyPrice(this.ruleForm.retail_state, 1, this.ruleForm.retail_state == 1, 'retail_price')
|
||
this.verifyPrice(this.ruleForm.online_state, 1, this.ruleForm.online_state == 1, 'online_price')
|
||
})
|
||
if (typeof callback == "function") {
|
||
callback();
|
||
}
|
||
} else {
|
||
this.$alert(res.msg ? res.msg : '请求发生错误,请稍后重试!', '错误提示', {
|
||
confirmButtonText: '确定',
|
||
callback: action => {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//获取供选择的规格
|
||
getAttribute() {
|
||
$.ajax({
|
||
url: "{:U('Attributes/getSkuAttr')}",
|
||
data: {},
|
||
type: 'post',
|
||
success: (res) => {
|
||
var skuAttrList = res.data;
|
||
this.skuAttrList = skuAttrList;
|
||
var skuAttrObject = {};
|
||
for (var i = 0; i < skuAttrList.length; i++) {
|
||
skuAttrObject[skuAttrList[i].id] = skuAttrList[i];
|
||
}
|
||
this.skuAttrObject = skuAttrObject;
|
||
if (this.ruleForm.id > 0) {
|
||
this.getGoodsSkuList();//获取商品规格信息
|
||
}
|
||
}
|
||
});
|
||
},
|
||
//获取商品的规格
|
||
getGoodsSkuList() {
|
||
$.ajax({
|
||
url: "{:U('getGoodsSkuAttr')}",
|
||
data: {
|
||
id: this.ruleForm.id,
|
||
},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.skuAttr = res.data.attr;
|
||
this.ruleForm.skuList = res.data.list;
|
||
this.skuCodeList = res.data.skuCodeList;
|
||
this.skuNumberList = res.data.skuNumberList;
|
||
|
||
for (let i in res.data.list) {
|
||
let key = res.data.list[i].id.join(',');
|
||
this.skuAttrListObject[key] = res.data.list[i];
|
||
}
|
||
this.auto_sku_number_state = true; //是否自动生成货号
|
||
if (this.ruleForm.goods_code) {
|
||
this.auto_sku_code_state = false; //是否自动编码
|
||
}
|
||
} else {
|
||
this.$message({
|
||
message: res.message,
|
||
type: 'error',
|
||
})
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//获取商品标签列表
|
||
getGoodsLabelList() {
|
||
$.ajax({
|
||
url: "/index.php/Retail/GoodsLabel/getGoodsLabelList",
|
||
data: {},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.status == 1) {
|
||
this.labelList = res.data;
|
||
} else {
|
||
this.$alert(res.msg ? res.msg : '请求发生错误,请稍后重试!', '错误提示', {
|
||
confirmButtonText: '确定',
|
||
callback: action => {
|
||
|
||
}
|
||
});
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//获取配送模板列表供选择
|
||
getDeliveryTemplateList() {
|
||
$.ajax({
|
||
url: "/index.php/Retail/SystemDelivery/getStoreFreightTem",
|
||
data: {},
|
||
type: 'post',
|
||
success: (res) => {
|
||
if (res.code == 0) {
|
||
this.deliveryTemplateList = res.data;
|
||
}
|
||
}
|
||
})
|
||
},
|
||
//修改change按钮的表单验证状态
|
||
verifyPrice(event, val, bol, key) {
|
||
this.rules[key][0].required = event == val && bol;
|
||
},
|
||
//修改规格价格后设置普通价格为最低价
|
||
changeMinPrice(event, key) {
|
||
let value = event.target.value;
|
||
if (value && this.ruleForm[key] && value * 1 < this.ruleForm[key] * 1 || value && !this.ruleForm[key]) {
|
||
this.ruleForm[key] = value;
|
||
}
|
||
},
|
||
/**
|
||
* @description 获取商户是否为微礼平台类型
|
||
*/
|
||
getPlatformType() {
|
||
this.sendRequest('Retail/Goods/getPlatformType', {
|
||
success: (response) => {
|
||
if (response.status == 1) {
|
||
if (response.platform_type == '2') {
|
||
this.isWeili = true
|
||
}
|
||
}
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* @description 规格表格头部尺寸拖动事件
|
||
*/
|
||
skuHeaderDragend(newWidth, oldWidth, column) {
|
||
if (column.columnKey && column.columnKey == 'sku-name') {
|
||
const element = document.querySelector('.sku-list .el-table__fixed')
|
||
element.style.width = `${element.clientWidth + newWidth - oldWidth}px`
|
||
}
|
||
},
|
||
/**
|
||
* @description 获取并赋值Plu码
|
||
*/
|
||
async getPluCode() {
|
||
await this.getMaxPLU()
|
||
if (this.maxPlu > 0) {
|
||
this.ruleForm.plu_code = this.maxPlu
|
||
}
|
||
},
|
||
/**
|
||
* @description 获取最大的PLU码
|
||
*/
|
||
async getMaxPLU() {
|
||
return new Promise(resolve => {
|
||
if (this.maxPlu > 0) {
|
||
resolve(1)
|
||
return
|
||
}
|
||
this.sendRequest('Retail/Goods/generateStorePlu', {
|
||
success: (response) => {
|
||
if (response.status == 1) {
|
||
const plu = response.data
|
||
if (plu == "9999") {
|
||
this.$message.error('Plu码已达到最大值,已无法自动生成Plu码!')
|
||
} else {
|
||
this.maxPlu = parseInt(plu) + 1
|
||
}
|
||
} else {
|
||
this.$message.error(response.message)
|
||
}
|
||
resolve(1)
|
||
}
|
||
});
|
||
})
|
||
}
|
||
},
|
||
watch: {
|
||
//监听轮播图变化
|
||
bannerList(n, o) {
|
||
this.swiperImageIdList = [];
|
||
for (let i = 0; i < n.length; i++) {
|
||
this.swiperImageIdList.push(n.image_id)
|
||
}
|
||
},
|
||
//监听分类切换
|
||
'ruleForm.goods_class_id'(n, o) {
|
||
if (n != '') this.$refs['ruleForm_1'].validateField('goods_class_id');
|
||
},
|
||
'ruleForm.delivery_type'(n) {
|
||
if (n.indexOf(3) >= 0 && !this.deliveryTemplateList.length) this.getDeliveryTemplateList();//获取发货模板列表
|
||
},
|
||
'ruleForm.pricing_method'(n) {
|
||
if (n == 2) this.ruleForm.weight_value = '';//称重商品重量特殊处理
|
||
},
|
||
'ruleForm.attribute_state'(n) {
|
||
this.getFormOffsetTop();//规格发生变化,重新计算各个form高度
|
||
n == 2 && (this.ruleForm.third_goods_code == '')
|
||
},
|
||
'ruleForm.skuList'(n, o) {
|
||
if (n.length != o.length) this.getFormOffsetTop();//规格发生变化,重新计算各个form高度
|
||
},
|
||
//监听规格属性数量、修改固定表格宽度
|
||
skuAttr(n, o) {
|
||
if (n.length) {
|
||
setTimeout(() => {
|
||
this.$nextTick(() => {
|
||
const skuNameElements = document.querySelectorAll('.sku-list .el-table__header-wrapper .sku-name')
|
||
let elementWidthCount = 0
|
||
skuNameElements.forEach(element => {
|
||
elementWidthCount += element.offsetWidth
|
||
})
|
||
this.skuTitleWidth = elementWidthCount || 100
|
||
})
|
||
})
|
||
} else {
|
||
this.skuTitleWidth = 100
|
||
}
|
||
},
|
||
},
|
||
mounted() {
|
||
try {
|
||
UE.delEditor('editor');
|
||
} catch (e) {
|
||
|
||
}
|
||
this.ue = UE.getEditor('editor');
|
||
|
||
this.getFormOffsetTop();
|
||
this.handleScroll();
|
||
},
|
||
computed: {
|
||
disabledChangeWeight() {
|
||
return this.ruleForm.attribute == 2
|
||
|| this.ruleForm.serial_number_state == 1
|
||
|| this.ruleForm.pricing_method == 2
|
||
&& (String(this.ruleForm.goods_num).indexOf('.') >= 0
|
||
|| String(this.ruleForm.less_num).indexOf('.') >= 0
|
||
|| String(this.ruleForm.more_num).indexOf('.') >= 0) ? true : false
|
||
}
|
||
},
|
||
created() {
|
||
let id = MenuApp.getQueryVariable('id');
|
||
if (id) {
|
||
//编辑商品
|
||
this.ruleForm.id = id;
|
||
//获取商品详情
|
||
this.getGoodsDetails();
|
||
} else {
|
||
this.pageLoaded = true;
|
||
this.getAttribute();//获取规格信息
|
||
}
|
||
this.getEditGoodsBaseSet();//获取基本配置
|
||
this.getGoodsLabelList();//获取标签信息
|
||
this.getPlatformType()
|
||
}
|
||
})
|
||
|
||
</script> |