<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>