文件

3193 行
176 KiB
HTML
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<!--商品新增、编辑-->
<!--[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>