You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
5.8 KiB
275 lines
5.8 KiB
12 months ago
|
<template>
|
||
|
<view class="container">
|
||
|
<view class="content_input">
|
||
|
<view>规格名称</view>
|
||
|
<view><input type="text" v-model="formData.template_name" placeholder="填写规格名称" placeholder-class="placeholderClass" /></view>
|
||
|
</view>
|
||
|
<view class="content_add" @click="addSingleSpecification">
|
||
|
<text class="iconfont icon-tianjia1"></text>
|
||
|
<span>添加规格属性</span>
|
||
|
</view>
|
||
|
<view v-if="formData.template_value.length > 0">
|
||
|
<view v-for="(item, index) in formData.template_value" :key="index" class="content_message">
|
||
|
<view class="content_message_title">
|
||
|
<view class="title line1">{{item.value}}</view>
|
||
|
<view>
|
||
|
<span class="btn btn_del" @click="formData.template_value.splice(index,1)">删除</span>
|
||
|
<span class="btn btn_edit" @click="editAttr(item,index)">编辑</span>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="content_message_content">
|
||
|
<view v-for="(val, i) in item.detail" :key="i">
|
||
|
{{val}}
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="handle">
|
||
|
<view class="handle_button" @click="submit">
|
||
|
保存
|
||
|
</view>
|
||
|
</view>
|
||
|
<specification-attr ref="increaseSpec" :specData="specData" @changeClose="close" @getData="getAttr"></specification-attr>
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import { navigateTo } from '../../../libs/uniApi.js';
|
||
|
import specificationAttr from '../components/specificationAttr.vue';
|
||
|
import { specificationAdd, specificationDetail, specificationUpdate } from "@/api/product";
|
||
|
export default {
|
||
|
components: {
|
||
|
specificationAttr
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
mer_id: '',
|
||
|
template_id: '',
|
||
|
specData: {
|
||
|
showpopup: false,
|
||
|
name: '',
|
||
|
detail: ''
|
||
|
},
|
||
|
formData: {
|
||
|
template_name: '',
|
||
|
template_value: []
|
||
|
},
|
||
|
index: '',
|
||
|
};
|
||
|
},
|
||
|
onLoad(options) {
|
||
|
this.mer_id = options.mer_id
|
||
|
this.template_id = options.template_id
|
||
|
if(this.template_id)this.getSpecData()
|
||
|
},
|
||
|
methods: {
|
||
|
// 添加规格属性
|
||
|
addSingleSpecification() {
|
||
|
this.$set(this, 'index', "");
|
||
|
this.$set(this.specData, 'showpopup', true);
|
||
|
this.$refs.increaseSpec.resetData();
|
||
|
},
|
||
|
getAttr(data){
|
||
|
if(this.index == ""){
|
||
|
this.formData.template_value.push(data);
|
||
|
}else{
|
||
|
this.$set(this.formData.template_value, this.index-1, data);
|
||
|
}
|
||
|
|
||
|
this.$set(this.specData, 'showpopup', false);
|
||
|
},
|
||
|
close() {
|
||
|
this.$set(this.specData, 'showpopup', false);
|
||
|
},
|
||
|
/*获取属性规格值*/
|
||
|
getSpecData(){
|
||
|
let that = this
|
||
|
uni.showLoading({
|
||
|
title: '',
|
||
|
mask: true
|
||
|
});
|
||
|
specificationDetail(that.mer_id, that.template_id).then(res=>{
|
||
|
uni.hideLoading();
|
||
|
that.formData = res.data
|
||
|
}).catch(err => {
|
||
|
return that.$util.Tips({
|
||
|
title: err
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
submit(){
|
||
|
let that = this
|
||
|
if (!that.formData.template_name) return that.$util.Tips({
|
||
|
title: '请输入规格名称'
|
||
|
});
|
||
|
if (that.formData.template_value.length == 0) return that.$util.Tips({
|
||
|
title: '请添加规格属性'
|
||
|
});
|
||
|
that.template_id ? specificationUpdate(that.mer_id,that.template_id,that.formData)
|
||
|
.then(res=>{
|
||
|
that.$util.Tips({
|
||
|
title: res.message,
|
||
|
icon: 'success'
|
||
|
});
|
||
|
uni.redirectTo({
|
||
|
url: `/pages/product/addGoods/mulSpecification?mer_id=${that.mer_id}`
|
||
|
})
|
||
|
}).catch(err => {
|
||
|
return that.$util.Tips({
|
||
|
title: err
|
||
|
});
|
||
|
}) :
|
||
|
specificationAdd(that.mer_id,that.formData).then(res=>{
|
||
|
that.$util.Tips({
|
||
|
title: res.message,
|
||
|
icon: 'success'
|
||
|
});
|
||
|
uni.redirectTo({
|
||
|
url: `/pages/product/addGoods/mulSpecification?mer_id=${that.mer_id}`
|
||
|
})
|
||
|
}).catch(err => {
|
||
|
return that.$util.Tips({
|
||
|
title: err
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
/*编辑*/
|
||
|
editAttr(item,index){
|
||
|
this.index = index+1
|
||
|
this.$set(this.specData, 'showpopup', true);
|
||
|
this.$set(this.specData, 'name', item.value);
|
||
|
let str = "";
|
||
|
for(var i=0; i<item.detail.length;i++){
|
||
|
str+=item.detail[i]+"\n"
|
||
|
}
|
||
|
this.$set(this.specData, 'detail', str);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
.container {
|
||
|
padding-top: 20rpx;
|
||
|
padding-bottom: 130rpx;
|
||
|
}
|
||
|
.content_input {
|
||
|
padding: 32rpx 30rpx;
|
||
|
box-sizing: border-box;
|
||
|
margin: auto;
|
||
|
width: 710rpx;
|
||
|
height: 106rpx;
|
||
|
background: #ffffff;
|
||
|
border-radius: 10px;
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
> view:nth-child(1) {
|
||
|
font-size: 30rpx;
|
||
|
color: #333333;
|
||
|
}
|
||
|
> view:nth-child(2) {
|
||
|
text-align: right;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.content_add {
|
||
|
margin: auto;
|
||
|
margin-top: 30rpx;
|
||
|
width: 710rpx;
|
||
|
height: 106rpx;
|
||
|
background: #ffffff;
|
||
|
border-radius: 10px;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
.iconfont {
|
||
|
font-size: 35rpx;
|
||
|
margin-right: 10rpx;
|
||
|
color: #e93323;
|
||
|
}
|
||
|
span {
|
||
|
color: #e93323;
|
||
|
font-size: 30rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.content_message {
|
||
|
background: #ffffff;
|
||
|
padding: 32rpx 20rpx 30rpx 20rpx;
|
||
|
width: 710rpx;
|
||
|
margin: auto;
|
||
|
margin-top: 30rpx;
|
||
|
border-radius: 10rpx;
|
||
|
&_title {
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
border-bottom: 1px solid #EEEEEE;
|
||
|
padding-bottom: 32rpx;
|
||
|
>view:nth-child(1) {
|
||
|
padding-left: 10rpx;
|
||
|
}
|
||
|
>view:nth-child(2) {
|
||
|
padding-right: 10rpx;
|
||
|
}
|
||
|
.title{
|
||
|
max-width: 460rpx;
|
||
|
}
|
||
|
}
|
||
|
&_content {
|
||
|
padding-top: 30rpx;
|
||
|
|
||
|
}
|
||
|
.btn {
|
||
|
font-size: 26rpx;
|
||
|
margin: 0 20rpx;
|
||
|
position: relative;
|
||
|
}
|
||
|
.btn_del{
|
||
|
color: #999999;
|
||
|
&:after{
|
||
|
content: "";
|
||
|
display: inline-block;
|
||
|
width: 1rpx;
|
||
|
height: 18rpx;
|
||
|
background-color: #BBBBBB;
|
||
|
position: absolute;
|
||
|
top: 11rpx;
|
||
|
right: -20rpx;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
.btn_edit{
|
||
|
margin-right: 10rpx;
|
||
|
color: #E93323;
|
||
|
}
|
||
|
}
|
||
|
.handle {
|
||
|
position: fixed;
|
||
|
left: 0;
|
||
|
bottom: 0;
|
||
|
width: 100%;
|
||
|
height: 126rpx;
|
||
|
background: #FFFFFF;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
&_button {
|
||
|
width: 690rpx;
|
||
|
height: 86rpx;
|
||
|
background: #E93323;
|
||
|
border-radius: 43rpx;
|
||
|
font-size: 32rpx;
|
||
|
color: #fff;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
}
|
||
|
}
|
||
|
.placeholderClass {
|
||
|
color: #bbbbbb;
|
||
|
font-size: 30rpx;
|
||
|
}
|
||
|
</style>
|