1027 lines
28 KiB
Vue
1027 lines
28 KiB
Vue
<template>
|
||
<div class="components-container main-cont">
|
||
<div style="position: relative;">
|
||
<div style="display: inline-block;font-size:18px;margin-bottom: 15px;">
|
||
<a href="#" @click="prev" style="text-decoration:none;font-size: 14px;">
|
||
<icon-svg name="jiantou" style="width: 1.2em;height: 1.2em;position: relative;top: 0.3em;"></icon-svg>
|
||
返回
|
||
</a>
|
||
<span style="display: inline-block;margin: 0 15px;color: #D9D9D9;">|</span>
|
||
<span>积分商品添加</span>
|
||
</div>
|
||
<el-row>
|
||
<el-col :span="6" >
|
||
<span>商品标题:</span>
|
||
<el-input style="width: 200px;" class="margin15" placeholder="请输入商品标题" v-model="title" autosize></el-input>
|
||
</el-col>
|
||
<el-col :span="6" >
|
||
<span>商品积分:</span>
|
||
<el-input style="width:200px;" @keyup.native="proving" class="margin15" placeholder="请输入商品积分" type="number" :min="1" :controls="false" v-model="price" autosize></el-input>
|
||
<p style="color: #F56C6C;font-size: 13px;margin-left:80px;margin-top: 4px;">注:积分等于商品加邮费</p>
|
||
</el-col>
|
||
<el-col :span="6" >
|
||
<span>商品销量:</span>
|
||
<el-input style="width:200px;" @keyup.native="proving" class="margin15" placeholder="请输入商品销量" type="number" :min="1" :controls="false" v-model="sales" autosize></el-input>
|
||
</el-col>
|
||
<el-col :span="6" >
|
||
<span>商品状态:</span>
|
||
<el-select v-model="status" class="margin15" placeholder="请选择商品状态" style="width:200px;">
|
||
<el-option v-for="(item,index) in statusmain2" :key="item.index" :label="item.label" :value="item.value">
|
||
</el-option>
|
||
</el-select>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="6">
|
||
<span>商品参数:</span>
|
||
<el-input style="width:200px;" class="margin15" placeholder="请输入商品参数" v-model="buyReason" autosize></el-input>
|
||
</el-col>
|
||
<el-col :span="6">
|
||
<span>是否发货:</span>
|
||
<el-select v-model="isExpress" class="margin15" placeholder="请选择商品是否发货" style="width:200px;">
|
||
<el-option v-for="(item,index) in isExpressmain" :key="item.index" :label="item.label" :value="item.value">
|
||
</el-option>
|
||
</el-select>
|
||
</el-col>
|
||
</el-row>
|
||
<div style="display: flex;align-items: center;margin: 2% 0;">
|
||
<span style="display: inline-block;text-align: right;">商品封面图:</span>
|
||
<div style=" width:148px;height:148px;background-color: #fbfdff; border: 1px dashed #c0ccda;border-radius: 6px;text-align: center;line-height: 148px;">
|
||
<el-upload
|
||
class="avatar-uploader"
|
||
v-model="coverImg"
|
||
:action="uploadUrl"
|
||
:show-file-list="false"
|
||
:on-success="handleAvatarSuccess1"
|
||
>
|
||
<img v-if="coverImg" :src="coverImg" class="avatar" style="width: 148px;height: 148px;"/>
|
||
<i v-else class="el-icon-plus avatar-uploader-icon" style="font-size: 28px;color: #8c939d"></i>
|
||
</el-upload>
|
||
</div>
|
||
</div>
|
||
<div style="display: flex;align-items: center;margin: 2% 0;flex-flow: wrap;">
|
||
<span style="display: inline-block;text-align: right;">商品轮播图:</span>
|
||
<div>
|
||
<el-upload
|
||
:action="uploadUrl"
|
||
list-type="picture-card"
|
||
:on-success="handleUploadSuccess"
|
||
:on-change="handleChange"
|
||
:on-remove="handleRemove">
|
||
<i class="el-icon-plus"></i>
|
||
</el-upload>
|
||
</div>
|
||
</div>
|
||
<div style="display: flex;align-items: center;margin: 2% 0;">
|
||
<span style="display: inline-block;text-align: right;">商品规格:</span>
|
||
<el-radio-group v-model="guige" @change="guigeChange">
|
||
<el-radio :label="0">单规格</el-radio>
|
||
<el-radio :label="1">多规格</el-radio>
|
||
</el-radio-group>
|
||
<div v-if="guigeshow" style="margin-left: 20px;">
|
||
<el-select v-model="ruleId" placeholder="请选择商品规格" style="width:200px;" @change="selectTrigger(ruleId)">
|
||
<el-option v-for="(item,index) in specifdata" :key="item.index" :label="item.ruleName" :value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</div>
|
||
|
||
</div>
|
||
<div v-if="ruleValue" style="margin-left: 70px;">
|
||
<div class="ruleitem" v-for="(item,index) in ruleValue" :key="index">
|
||
<div>{{item.value}} <span @click="deleterule(index)"><icon-svg name="schu" class="ruleicon"></icon-svg></span></div>
|
||
<div>
|
||
<el-tag
|
||
:key="tag"
|
||
v-for="(tag,j) in item.detail.split(',')"
|
||
closable
|
||
:disable-transitions="false"
|
||
@close="handleClose(tag,j,item)">
|
||
{{tag}}
|
||
</el-tag>
|
||
<el-input
|
||
class="input-new-tag"
|
||
v-model="inputValues[index]"
|
||
ref="saveTagInput"
|
||
size="small"
|
||
style="width:120px;"
|
||
placeholder="请输入属性名"
|
||
@keyup.enter.native="handleInputConfirm(index,item)"
|
||
>
|
||
</el-input>
|
||
<el-button class="button-new-tag" size="small" @click="handleInputConfirm(index,item)">添加</el-button>
|
||
</div>
|
||
</div>
|
||
<div style="margin-top:20px;" v-if="ruleshow">
|
||
<div v-if="isshow" class="btn_specif">
|
||
<el-button type="primary" @click="btnToclick()">添加新规格</el-button>
|
||
<el-button type="success" @click="create()">立即生成</el-button>
|
||
</div>
|
||
</div>
|
||
<div style="margin-top:10px;">
|
||
<div v-if="!isshow" style="margin-top: 20px;">
|
||
<div style="display: inline-block;">
|
||
<span style="width:80px;display: inline-block;text-align: right;">规格:</span>
|
||
<el-input style="width:50%;" v-model="releobject.value" placeholder="例:颜色"></el-input>
|
||
</div>
|
||
<div style="display: inline-block;">
|
||
<span style="width:80px;display: inline-block;text-align: right;">规格值:</span>
|
||
<el-input style="width:50%;" v-model="releobject.detail" placeholder="例:黑色"></el-input>
|
||
</div>
|
||
<div style="display: inline-block;">
|
||
<el-button type="primary" @click="speciTo()">确 定</el-button>
|
||
<el-button @click="speciTotwo()">取 消</el-button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="display: flex;margin-top: 20px;" v-if="propshow">
|
||
<span>商品属性:</span>
|
||
<div class="property_table">
|
||
<table style="width: 100%;">
|
||
<tr style="display:flex;">
|
||
<th style="width:120px;text-align: left;" v-for="item in headerData">{{item}}</th>
|
||
</tr>
|
||
</table>
|
||
<el-table
|
||
:data="valueData">
|
||
<el-table-column
|
||
v-if="detailJson.length == 1"
|
||
prop="value0"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 2"
|
||
prop="value0"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 2"
|
||
prop="value1"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 3"
|
||
prop="value0"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 3"
|
||
prop="value1"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 3"
|
||
prop="value2"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 4"
|
||
prop="value0"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 4"
|
||
prop="value1"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 4"
|
||
prop="value2"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 4"
|
||
prop="value3"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 5"
|
||
prop="value0"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 5"
|
||
prop="value1"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 5"
|
||
prop="value2"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 5"
|
||
prop="value3"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
v-if="detailJson.length == 5"
|
||
prop="value4"
|
||
width="120">
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="skuImg"
|
||
width="100">
|
||
<template slot-scope="scope">
|
||
<div class="imgWrap" style=" width:60px;height:60px;background-color: #fbfdff; border: 1px dashed #c0ccda;border-radius: 6px;text-align: center;line-height: 60px;">
|
||
<el-upload
|
||
style="width: 60px;height: 60px;"
|
||
class="avatar-uploader"
|
||
v-model="scope.row.skuImg"
|
||
:action="uploadUrl"
|
||
:show-file-list="false"
|
||
:on-success="handleAvatarSuccess"
|
||
>
|
||
<img v-if="scope.row.skuImg" :src="scope.row.skuImg" class="avatar" style="border-radius: 6px;width:60px;height: 60px;"/>
|
||
<i v-else class="el-icon-plus avatar-uploader-icon" @click="curRowIndex=scope.$index"></i>
|
||
</el-upload>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column
|
||
prop="skuOriginalPrice"
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.skuOriginalPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column
|
||
prop="skuPrice"
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.skuPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column
|
||
prop="memberPrice"
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.memberPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column
|
||
prop="stock"
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.stock" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="sales"
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.sales" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
width="120">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
:disabled="!isAuth('userList:delete')"
|
||
size="mini"
|
||
type="danger"
|
||
@click="deleter(scope.$index)">删除
|
||
</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</div>
|
||
</div>
|
||
<div style="display: flex;margin-top: 20px;" v-if="propshow1">
|
||
<span>商品属性:</span>
|
||
<div class="property_table">
|
||
<table style="width: 100%;">
|
||
<tr style="display:flex;">
|
||
<th style="width:150px;text-align: left;" v-for="item in headerData2">{{item}}</th>
|
||
</tr>
|
||
</table>
|
||
<el-table
|
||
:data="valueData2">
|
||
<el-table-column
|
||
prop="skuImg"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div class="imgWrap" style=" width:60px;height:60px;background-color: #fbfdff; border: 1px dashed #c0ccda;border-radius: 6px;text-align: center;line-height: 60px;">
|
||
<el-upload
|
||
style="width: 60px;height: 60px;"
|
||
class="avatar-uploader"
|
||
v-model="scope.row.skuImg"
|
||
:action="uploadUrl"
|
||
:show-file-list="false"
|
||
:on-success="handleAvatarSuccess3"
|
||
>
|
||
<img v-if="scope.row.skuImg" :src="scope.row.skuImg" class="avatar" style="border-radius: 6px;width:60px;height: 60px;"/>
|
||
<i v-else class="el-icon-plus avatar-uploader-icon" @click="curRowIndex=scope.$index"></i>
|
||
</el-upload>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column
|
||
prop="skuOriginalPrice"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.skuOriginalPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column
|
||
prop="skuPrice"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.skuPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column
|
||
prop="memberPrice"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.memberPrice" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column
|
||
prop="stock"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.stock" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column
|
||
prop="sales"
|
||
width="150">
|
||
<template slot-scope="scope">
|
||
<div>
|
||
<el-input type="text" v-model="scope.row.sales" style="width:80px;font-size:14px;">
|
||
</el-input>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</div>
|
||
</div>
|
||
<div style="height: 38px;line-height: 38px;margin:20px 0;">
|
||
<span>是否包邮:</span>
|
||
<el-radio-group v-model="positage" @change="agreeChange">
|
||
<el-radio :label="0">是</el-radio>
|
||
<!-- <el-radio :label="1">否</el-radio>
|
||
<el-input v-if="priceshow" style="width:200px;margin-left: 10px;" placeholder="请输入邮费" type="number" v-model="postagePrice" autosize></el-input> -->
|
||
</el-radio-group>
|
||
</div>
|
||
</div>
|
||
<div class="tinymce-content" style="display: flex;">
|
||
<div style="width:90px;">商品详情:</div>
|
||
<!-- <textarea id="tinymceId" :value="descrition" class="tinymce-textarea"/> -->
|
||
<quill-editor ref="myTextEditor" v-model="descrition" :options="quillOption"
|
||
style="padding-bottom: 50px;height: 300px;width: 72%;display: inline-table;margin-bottom: 60px;">
|
||
</quill-editor>
|
||
</div>
|
||
<div style="text-align: center;margin-top:30px;">
|
||
<el-button style='margin:0 20px 0 0;' size="mini" type="primary" icon="document" @click="prev">返回上一页
|
||
</el-button>
|
||
<el-button size="mini" type="primary" icon="document" @click="artiReleass">发布商品
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { quillEditor }
|
||
from 'vue-quill-editor'
|
||
import 'quill/dist/quill.core.css'
|
||
import 'quill/dist/quill.snow.css'
|
||
import 'quill/dist/quill.bubble.css'
|
||
import quillConfig from '../mission/quill-config.js'
|
||
import { serverPaths } from '@/utils/enumData'
|
||
export default {
|
||
name: 'news',
|
||
components: {
|
||
quillEditor
|
||
},
|
||
data() {
|
||
return {
|
||
uploadUrl: serverPaths.uploadUrl,
|
||
quillOption: quillConfig,
|
||
specif:'',
|
||
typeId: '',
|
||
title: '',
|
||
merchants: '',
|
||
originalPrice:'',
|
||
price:'',
|
||
memberPrice:'',
|
||
positage:0,
|
||
guige:1,
|
||
skuImg:'',
|
||
ruleId:'',
|
||
postagePrice:0,
|
||
priceshow:true,
|
||
isshow:true,
|
||
commissionPrice:'',
|
||
buyReason:'',
|
||
ruleshow:false,
|
||
propshow:false,
|
||
guigeshow:true,
|
||
propshow1:false,
|
||
ruleValue:[],
|
||
attr:[],
|
||
attrs:[],
|
||
headerData:[],
|
||
valueData:[],
|
||
detailJson:[],
|
||
inputValues:{
|
||
inputValue0:'',
|
||
inputValue1:'',
|
||
inputValue2:'',
|
||
inputValue3:'',
|
||
inputValue4:'',
|
||
inputValue5:''
|
||
},
|
||
sku:[],
|
||
img:'',
|
||
sales:'',
|
||
status:'',
|
||
photos:'',
|
||
typeDatas:[],
|
||
value:[],
|
||
isSelect:'',
|
||
homeGoods:'',
|
||
isRecommend:'',
|
||
isExpress:'',
|
||
coverImg:'',
|
||
valueData2:[],
|
||
headerData2:[],
|
||
statusmain2:[
|
||
{
|
||
value:1,
|
||
label:'上架'
|
||
},
|
||
{
|
||
value:2,
|
||
label:'下架'
|
||
}
|
||
],
|
||
isExpressmain:[
|
||
{
|
||
value:1,
|
||
label:'普通商品需要发货'
|
||
},
|
||
{
|
||
value:2,
|
||
label:'虚拟商品无需发货'
|
||
},
|
||
{
|
||
value:3,
|
||
label:'门店核销无需发货'
|
||
}
|
||
],
|
||
attrName:'',
|
||
ruleName:'',
|
||
attrValue:[],
|
||
releobject:{
|
||
value:'',
|
||
detail:''
|
||
},
|
||
brandId:'',
|
||
brandIds:[],
|
||
isJiFenGoods:1,
|
||
specifdata:[],
|
||
dialogVisible: false,
|
||
isShow: false,
|
||
hideUpload: false,
|
||
limit:1,
|
||
id:'',
|
||
hasChange: false,
|
||
hasInit: false,
|
||
tinymceId: 'tinymceId',
|
||
height: 435,
|
||
toolbar: [],
|
||
menubar: 'file edit insert view format table',
|
||
languageTypeList: {
|
||
'en': 'en',
|
||
'zh': 'zh_CN'
|
||
},
|
||
artiCletypes: [],
|
||
// 富文本内容
|
||
descrition: ''
|
||
}
|
||
},
|
||
|
||
methods: {
|
||
// 验证input只能输入正整数
|
||
proving() {
|
||
this.price = this.price.replace(/[^\.\d]/g,'');
|
||
this.price = this.price.replace('.','');
|
||
this.sales = this.sales.replace(/[^\.\d]/g,'');
|
||
this.sales = this.sales.replace('.','');
|
||
},
|
||
// 图标上传
|
||
handleAvatarSuccess(file) {
|
||
if(this.curRowIndex == 0){
|
||
this.skuImg = file.data;
|
||
this.valueData[0].skuImg = this.skuImg
|
||
return
|
||
}else{
|
||
this.skuImg = file.data;
|
||
this.valueData[this.curRowIndex].skuImg = this.skuImg
|
||
}
|
||
},
|
||
// 图标上传
|
||
handleAvatarSuccess3(file) {
|
||
this.skuImg = file.data;
|
||
this.valueData2[0].skuImg = this.skuImg
|
||
},
|
||
// 是否包邮
|
||
agreeChange(val){
|
||
if(val == 1){
|
||
this.priceshow = true
|
||
this.postagePrice = ''
|
||
}else{
|
||
this.priceshow = false
|
||
this.postagePrice = 0
|
||
}
|
||
},
|
||
// 是否多规格
|
||
guigeChange(val){
|
||
if(val == 1){
|
||
this.ruleId = ''
|
||
this.guigeshow = true
|
||
this.propshow1 = false
|
||
}else{
|
||
this.ruleId = 0
|
||
this.guigeshow = false
|
||
this.propshow1 = true
|
||
this.propshow = false
|
||
this.ruleshow = false
|
||
this.attr = []
|
||
this.ruleValue = []
|
||
this.guigeclect()
|
||
}
|
||
},
|
||
// 单规格
|
||
guigeclect(){
|
||
if(this.price == ''){
|
||
this.price = '0'
|
||
}
|
||
this.$http({
|
||
url: this.$http.adornUrl('goods/onlyFormatAttr'),
|
||
method: 'get',
|
||
params: this.$http.adornParams({
|
||
'price':this.price,
|
||
'coverImg':this.coverImg,
|
||
})
|
||
}).then(({data}) => {
|
||
let returnData = data.data;
|
||
this.headerData2 = returnData.header
|
||
this.valueData2 = returnData.value
|
||
this.propshow = false
|
||
this.propshow1 = true
|
||
this.sku = returnData.value
|
||
})
|
||
},
|
||
handleChange1(value) {
|
||
this.value.forEach(element => {
|
||
this.typeId = element;
|
||
});
|
||
},
|
||
handleChange(file, fileList){
|
||
this.hideUpload = fileList.length >= this.limit;
|
||
},
|
||
handleRemove(file, fileList) {
|
||
this.hideUpload = fileList.length >= this.limit;
|
||
},
|
||
handleAvatarSuccess1(file,fileList) {
|
||
this.coverImg = file.data
|
||
},
|
||
//上传成功
|
||
handleUploadSuccess(file,fileList) {
|
||
this.photos+=file.data+','
|
||
},
|
||
// 返回上一级
|
||
prev(){
|
||
this.$router.back()
|
||
},
|
||
// 发布商品
|
||
artiReleass(){
|
||
let photost=this.photos;
|
||
photost = photost.substr(0,photost.length-1)
|
||
if (this.title == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入商品标题',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.price == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入商品积分',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.price < 1) {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '商品积分不能小于1',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.status == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请选择商品状态',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.sales == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入商品销量',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.buyReason == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入产品参数',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.isExpress == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请选择商品是否发货',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.coverImg == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请选择商品封面图',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.descrition == '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入商品详情',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.sku.length == 0) {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请选择商品规格',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if (this.postagePrice === '') {
|
||
this.$notify({
|
||
title: '提示',
|
||
duration: 1800,
|
||
message: '请输入邮费',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
this.$http({
|
||
url: this.$http.adornUrl('goods/save'),
|
||
method: 'post',
|
||
data: this.$http.adornData({
|
||
'img':photost,
|
||
'title':this.title,
|
||
'merchants':this.merchants,
|
||
'originalPrice':this.originalPrice,
|
||
'price':this.price,
|
||
'memberPrice':this.memberPrice,
|
||
'sales':this.sales,
|
||
'status':this.status,
|
||
'coverImg':this.coverImg,
|
||
'descrition':this.descrition,
|
||
'commissionPrice':this.commissionPrice,
|
||
'isSelect':this.isSelect,
|
||
'homeGoods':this.homeGoods,
|
||
'buyReason':this.buyReason,
|
||
'isRecommend':this.isRecommend,
|
||
'isExpress':this.isExpress,
|
||
'postagePrice':this.postagePrice,
|
||
'sku':this.sku,
|
||
'attr':this.attr,
|
||
'brandId':this.brandId,
|
||
'isJiFenGoods':this.isJiFenGoods
|
||
})
|
||
}).then(({data}) => {
|
||
this.$message({
|
||
message: '操作成功',
|
||
type: 'success',
|
||
duration: 1500,
|
||
onClose: () => {
|
||
this.title = ''
|
||
this.type = ''
|
||
this.merchants = ''
|
||
this.price = ''
|
||
this.memberPrice = ''
|
||
this.originalPrice = ''
|
||
this.sales = ''
|
||
this.descrition = ''
|
||
this.postagePrice = ''
|
||
this.status = ''
|
||
this.buyReason = ''
|
||
this.brandId = ''
|
||
this.$router.push({path: '/integralist'})
|
||
}
|
||
})
|
||
})
|
||
},
|
||
|
||
// 商品分类
|
||
dataSelect () {
|
||
this.tableDataLoading = true
|
||
this.$http({
|
||
url: this.$http.adornUrl('goodsType/result'),
|
||
method: 'get',
|
||
params: this.$http.adornParams({
|
||
})
|
||
}).then(({data}) => {
|
||
this.tableDataLoading = false
|
||
let returnData = data.data;
|
||
this.typeDatas = returnData
|
||
})
|
||
},
|
||
// 商品规格
|
||
specifSelect () {
|
||
this.$http({
|
||
url: this.$http.adornUrl('goods/info'),
|
||
method: 'get',
|
||
params: this.$http.adornParams({
|
||
})
|
||
}).then(({data}) => {
|
||
let returnData = data.data;
|
||
this.specifdata = returnData;
|
||
})
|
||
},
|
||
// 删除商品属性
|
||
deleter(index){
|
||
let length = this.sku.length
|
||
if(length == 1){
|
||
this.$message({
|
||
title: '提示',
|
||
type: 'error',
|
||
duration: 1800,
|
||
message: '属性至少要有一个',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}else{
|
||
this.sku.splice(index, 1);
|
||
}
|
||
},
|
||
// 查询商品规格
|
||
selectTrigger(val){
|
||
this.$http({
|
||
url: this.$http.adornUrl('selfGoodsRule/find'),
|
||
method: 'get',
|
||
params: this.$http.adornParams({
|
||
'id':val
|
||
})
|
||
}).then(({data}) => {
|
||
let returnData = data.data;
|
||
this.ruleValue = returnData.ruleValue
|
||
this.attrName = returnData.ruleName
|
||
this.ruleshow = true
|
||
this.ruleId = returnData.id
|
||
this.create()
|
||
})
|
||
},
|
||
deleterule(index){
|
||
this.ruleValue.splice(index, 1);
|
||
},
|
||
btnToclick(){
|
||
this.isshow = false
|
||
this.releobject.value = ''
|
||
this.releobject.detail = ''
|
||
},
|
||
speciTotwo(){
|
||
this.isshow = true
|
||
this.releobject.value = ''
|
||
this.releobject.detail = ''
|
||
},
|
||
speciTo(){
|
||
if(this.releobject.value == ''){
|
||
this.$message({
|
||
title: '提示',
|
||
type: 'error',
|
||
duration: 1800,
|
||
message: '请输入规格',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
if(this.releobject.detail == ''){
|
||
this.$message({
|
||
title: '提示',
|
||
duration: 1800,
|
||
type: 'error',
|
||
message: '请输入规格值',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}
|
||
this.ruleValue.push({
|
||
value: this.releobject.value,
|
||
detail:this.releobject.detail
|
||
});
|
||
this.isshow = true
|
||
this.releobject.value = ''
|
||
this.releobject.detail = ''
|
||
},
|
||
handleClose(tag,j,item) {
|
||
var detailarr = item.detail.split(',')
|
||
detailarr.splice(detailarr.indexOf('tag'),1);
|
||
if(detailarr.length < 1){
|
||
this.$message({
|
||
title: '提示',
|
||
type: 'error',
|
||
duration: 1800,
|
||
message: '规格值至少要有一个',
|
||
type: 'warning'
|
||
});
|
||
return
|
||
}else{
|
||
item.detail = String(detailarr)
|
||
}
|
||
},
|
||
handleInputConfirm(index,item) {
|
||
let inputValue = this.inputValues[index];
|
||
if (inputValue) {
|
||
var detailarr = item.detail.split(',')
|
||
detailarr.push(inputValue)
|
||
for(var i=0;i<detailarr.length;i++){
|
||
for(var j=0;j<detailarr.length;j++){
|
||
if(detailarr[i] == detailarr[j] && i !=j){
|
||
detailarr.splice(j,1);
|
||
}
|
||
}
|
||
}
|
||
item.detail = String(detailarr)
|
||
this.inputValues[index] = '';
|
||
}
|
||
this.inputVisible = false;
|
||
},
|
||
// 获取品牌
|
||
brandSelect () {
|
||
let page = this.page-1
|
||
this.tableDataLoading = true
|
||
this.$http({
|
||
url: this.$http.adornUrl('selfGoodsBrand/result'),
|
||
method: 'get',
|
||
params: this.$http.adornParams({
|
||
})
|
||
}).then(({data}) => {
|
||
this.tableDataLoading = false
|
||
let returnData = data.data;
|
||
this.brandIds = returnData
|
||
})
|
||
},
|
||
// 立即生成
|
||
create(){
|
||
this.attr = []
|
||
this.attr.push({
|
||
attrName:this.attrName,
|
||
attrValue:this.ruleValue,
|
||
ruleId:this.ruleId
|
||
})
|
||
if(this.price == ''){
|
||
this.price = '0'
|
||
}
|
||
|
||
this.$http({
|
||
url: this.$http.adornUrl(`goods/isFormatAttr?coverImg=${this.coverImg}&price=${this.price}`),
|
||
method: 'post',
|
||
data: this.attr[0]
|
||
}).then(({data}) => {
|
||
let returnData = data.data;
|
||
this.headerData = returnData.header
|
||
this.valueData = returnData.value
|
||
this.propshow = true
|
||
this.propshow1 = false
|
||
this.sku = returnData.value
|
||
this.detailJson = returnData.value[0].detailJson.split(',')
|
||
})
|
||
}
|
||
},
|
||
mounted() {
|
||
this.specifSelect()
|
||
},
|
||
|
||
}
|
||
</script>
|
||
|
||
<style scoped="scoped">
|
||
.main-cont {
|
||
max-width: 100%;
|
||
min-width: 80%;
|
||
padding-bottom:5%;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.tinymce-container {
|
||
position: relative;
|
||
line-height: normal;
|
||
}
|
||
|
||
.tinymce-container >>> .mce-fullscreen {
|
||
z-index: 10000;
|
||
}
|
||
|
||
.tinymce-textarea {
|
||
visibility: hidden;
|
||
z-index: -1;
|
||
}
|
||
.hide .el-upload--picture-card {
|
||
display: none;
|
||
}
|
||
.margin15{margin-right: 15px;margin-top: 10px;}
|
||
.ruleitem {padding-left:10px;margin-top: 15px;}
|
||
.ruleitem .ruleicon{position: relative;top: 3px; left:2px;width:1.2em;height:1.2em;}
|
||
.el-tag + .el-tag {
|
||
margin-left: 10px;
|
||
}
|
||
.button-new-tag{
|
||
height: 32px;
|
||
line-height: 31px;
|
||
padding-top: 0;
|
||
padding-bottom: 0;
|
||
border-radius: 4px;
|
||
border-top-left-radius: 0;
|
||
border-bottom-left-radius: 0;
|
||
background-color: #f5f7fa;
|
||
position: relative;
|
||
left: -5px;
|
||
border-color: #dcdfe6;
|
||
border: 1px solid #dcdfe6;
|
||
}
|
||
.input-new-tag {
|
||
width: 90px;
|
||
margin-left: 10px;
|
||
vertical-align: bottom;
|
||
}
|
||
.el-input--small .el-input__inner{
|
||
border-top-right-radius: 0;
|
||
border-bottom-right-radius: 0;
|
||
}
|
||
.el-table--enable-row-transition .el-table__body td{
|
||
text-align: center;
|
||
}
|
||
.imgWrap .avatar-uploader .el-upload{
|
||
width: 60px;
|
||
}
|
||
.el-table .cell{
|
||
text-align: center!important;
|
||
}
|
||
.el-tag--medium{margin-right: 10px;}
|
||
</style>
|