幼教产品B2B生态平台小程序端
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.
 
 
 
 

264 lines
6.7 KiB

<template>
<view class="page">
<view class="block">
<view class="form-list edit-form">
<view class="line">
<view class="name">商品名称</view>
<input type="text" placeholder="请输入商品名称" v-model="form.prodName" />
</view>
<view class="line">
<view class="name">产品分类</view>
<view class="inline">
<uni-data-picker class="picker-input" :clear-icon="false" placeholder="请选择产品分类" popup-title="请选择产品分类" preload :localdata="provinces" :map="{text: 'provinceName', value: 'provinceName'}" v-model="form.categoryId"></uni-data-picker>
</view>
</view>
<view class="py">
<uni-file-picker v-model="pic" limit="5" title="请上传封面图片,至少一张" :auto-upload="false" @select="uploadDes"></uni-file-picker>
</view>
</view>
</view>
<view class="block">
<view class="form-list edit-form">
<view class="line textarea-line no-bd">
<textarea placeholder="描述一下宝贝的品牌型号、货品来源..." v-model="form.brief"></textarea>
</view>
<view class="py">
<uni-file-picker v-model="pic" limit="10" title="添加优质图片" :auto-upload="false" @select="uploadDes"></uni-file-picker>
</view>
</view>
</view>
<view class="title">产品规格</view>
<view v-for="(item, i) in form.skuList" :key="i" class="block">
<view class="form-list edit-form">
<view class="line">
<view class="name">规格名称</view>
<input type="text" placeholder="请输入规格名称" v-model="item.skuName" />
</view>
<view class="line">
<view class="name">价格</view>
<view class="price-select" @click="showPrice">请选择</view>
</view>
<view class="line">
<view class="name">库存</view>
<uni-number-box v-model="item.stocks" :max="100" :min="1"></uni-number-box>
</view>
</view>
</view>
<view class="plus-sku">
<uni-icons class="icon" type="plus" size="30" color="#007eff" @click="addSku"></uni-icons>
</view>
<view class="btns">
<view class="btn" @click="submit(3)">存草稿</view>
<view class="btn publish" @click="submit(0)">发布</view>
</view>
<uni-popup ref="popup" background-color="#fff" type="bottom">
<view class="block">
<view class="form-list edit-form">
<view class="line">
<view class="name">售价</view>
<input type="text" placeholder="请输入售价" v-model="form.prodName" />
</view>
<view class="line">
<view class="name">优惠价:</view>
<input type="text" placeholder="请输入优惠价" v-model="form.prodName" />
</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import { queryProvince, queryCity, queryTeamInfo, updateTeamInfo, enterpriseCertificationStatus } from '@/apis/modules/user.js'
import { save, update, info, categoryList } from '@/apis/modules/goods.js'
import OSS from '@/libs/Oss/upload'
export default {
data() {
return {
openId: uni.getStorageSync('openId'),
info: {},
form: {
brief: '',
categoryId: '',
content: '',
oriPrice: '',
pic: '',
price: '',
prodName: '',
skuList: [
{
actualStocks: '',
oriPrice: '',
price: '',
skuName: '',
stocks: '',
}
],
totalStocks: ''
},
originSku: {},
pic: [],
submiting: false,
uploading: false,
classifications: [],
}
},
computed: {
// 平台名字
platformName() {
return this.info.platformSource === '6' ? '供应商' : this.info.platformSource === '5' ? '幼儿园' : ''
},
},
onLoad() {
this.originSku = JSON.parse(JSON.stringify(this.form.skuList[0]))
this.getCategory()
// this.getProvince()
},
methods: {
// 企业认证信息
async getEnterInfo() {
const { data } = await enterpriseCertificationStatus(this.openId)
if (data) {
this.info = data
data.platformSource === '6' && this.getClassification()
}
},
// 供应商分类
async getCategory() {
const { data } = await categoryList()
this.classifications = data
},
// 获取省份
async getProvince() {
const { list } = await queryProvince()
this.provinces = list
this.getInfo()
},
// 获取城市
async getCity() {
const { list } = await queryCity({
provinceId: this.provinces.find(e => e.provinceName == this.form.province).provinceId
})
this.cities = list
this.cityId = ''
},
// 上传logo
uploadLogo() {
const that = this
uni.chooseImage({
success: (res) => {
const file = res.tempFilePaths[0];
OSS(file, ({ url }) => {
that.form.logoUrl = url
})
}
});
},
// 上传描述图片
uploadDes(e){
OSS(e.tempFilePaths[0], (res) => {
this.pic.push({
name: res.name,
extname: res.ext,
url: res.url,
})
})
},
// 显示价格弹框
showPrice() {
this.$refs.popup.open()
},
// 新增sku
addSku() {
this.form.skuList.push(this.originSku)
},
// 提交
async submit(status) {
if (this.submiting) return false
const { form } = this
if (!form.prodName) return this.$util.errMsg(`请输入商品名称!`)
if (!this.pic.length) return this.$util.errMsg(`请上传封面图片!`)
if (!form.brief) return this.$util.errMsg(`请输入商品描述!`)
if (!form.skuList.length) return this.$util.errMsg(`请输入产品规格!`)
this.submiting = true
form.pic = this.pic.map(e => e.url).join()
form.status = status
try {
if (this.id) {
await update(form)
this.$util.sucMsg('保存成功!')
} else {
await save(form)
this.$util.sucMsg('发布成功!')
}
setTimeout(() => {
uni.navigateBack()
}, 1500)
} catch(e) {
this.submiting = false
}
}
}
}
</script>
<style scoped lang="scss">
.page {
padding-bottom: 170rpx;
-webkit-overflow-scrolling: touch;
}
/deep/.picker-input {
.arrow-area {
display: none;
}
.input-value, .selected-list {
padding: 0;
}
}
.price-select {
font-size: 24rpx;
color: #333;
}
.title {
margin: 40rpx 24rpx 24rpx;
font-size: 30rpx;
font-weight: 600;
color: #333;
}
.plus-sku {
text-align: center;
}
.btns {
z-index: 10;
position: fixed;
bottom: env(safe-area-inset-bottom);
bottom: 0;
width: 100%;
padding: 20rpx;
display: flex;
justify-content: center;
box-sizing: border-box;
background-color: #fff;
box-shadow: 0px 0px 7rpx 0px rgba(203, 203, 203, 0.55);
.btn {
padding: 16rpx 60rpx;
margin-left: 20rpx;
font-size: 28rpx;
color: #333;
background-color: #d8d8d8;
border-radius: 20px;
}
.publish {
color: #fff;
background-color: $uni-primary;
}
}
</style>