318 lines
11 KiB
Vue
318 lines
11 KiB
Vue
<template>
|
|
<view>
|
|
<!-- 顶部操作条 -->
|
|
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
|
<block slot="backText">返回</block>
|
|
<block slot="content">服务上架</block>
|
|
</cu-custom>
|
|
<!-- 表单内容 -->
|
|
<form @submit="submit">
|
|
<view class="cu-form-group">
|
|
<view class="title">服务名称</view>
|
|
<input name="servName" :value="formData.servName" :v-model="formData.servName" placeholder="请编辑上架标题(供客户搜索)"></input>
|
|
</view>
|
|
<view class="cu-form-group">
|
|
<view class="title">服务描述</view>
|
|
<input name="servDesc" :value="formData.servDesc" :v-model="formData.servDesc" placeholder="让客户更清晰的上架内容描述"></input>
|
|
</view>
|
|
<view class="solid-top">
|
|
<view class="cu-form-group">
|
|
<view class="title">选择类目</view>
|
|
<picker :mode="'multiSelector'" @change="categoryChange" :value="categoryMultiIndex" :range-key="'name'" :range="categoryList">
|
|
<input class="line-input radius-input" :value="formData.category && formData.category.length ? formData.category[0].name + '-' + formData.category[1].name + '-' + formData.category[2].name : ''"
|
|
placeholder="请选择类目"></input>
|
|
</picker>
|
|
</view>
|
|
<view v-if="formData.specsList && formData.specsList.length > 0">
|
|
<checkbox-group class="padding-lr bg-white" @change="checkSpecs" :class="isShowAllSpecs ? '' : 'certern-height'">
|
|
<view v-for="(item, index) in formData.specsList" class="padding-tb-sm">
|
|
<view class="flex">
|
|
<view class="flex-sub">
|
|
<checkbox style="transform:scale(1)" class="main-color margin-right-xs" :value="index" :checked="item.checked"></checkbox>
|
|
<text>{{item.name}}</text>
|
|
</view>
|
|
<view class="flex-sub">
|
|
<input class="radius-input" @input="inputSpecs($event, index, 'title')" :value="item.title" placeholder="自编辑购买标题"></input>
|
|
</view>
|
|
</view>
|
|
<view class="flex margin-top-xs">
|
|
<view class="flex-sub">
|
|
<input class="radius-input" @input="inputSpecs($event, index, 'price')" :value="item.price" placeholder="价格(平6%+¥5销10%+¥18)"></input>
|
|
</view>
|
|
</view>
|
|
<view class="flex margin-top-xs">
|
|
<view class="flex-sub">
|
|
<input class="radius-input" @input="inputSpecs($event, index, 'deduct')" :value="item.deduct" placeholder="追加提成额"></input>
|
|
</view>
|
|
<view class="flex-sub flex margin-left-xs">
|
|
<view class="flex-sub">
|
|
<input class="radius-input" @input="inputSpecs($event, index, 'groupPrice')" :value="item.groupPrice" placeholder="团购价"></input>
|
|
</view>
|
|
<view class="flex-sub margin-left-xs">
|
|
<input class="radius-input" @input="inputSpecs($event, index, 'unit')" :value="item.unit" placeholder="单位"></input>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</checkbox-group>
|
|
<view class="text-bold text-gray text-lg text-center bg-white padding-tb-sm" @click="showAllSpecs()"><text
|
|
:class="'cuIcon-' + (isShowAllSpecs ? 'fold' : 'unfold')"></text></view>
|
|
</view>
|
|
<view class="bg-white">
|
|
<view class="padding-lr flex align-center">
|
|
<view class="flex-twice flex justify-start align-center">
|
|
<view style="width: 20%;">单位</view>
|
|
<my-uni-combox :candidates="productUnits" placeholder="请选择" v-model="formData.productUnit"></my-uni-combox>
|
|
</view>
|
|
<view class="flex-sub margin-left">
|
|
优惠券+
|
|
</view>
|
|
</view>
|
|
<view class="padding-lr flex align-center padding-tb-xs">
|
|
<view class="flex-sub">
|
|
<checkbox style="transform:scale(1)" class="main-color margin-right-xs" :value="true" :v-model="formData.isGoldenServ" :checked="formData.isGoldenServ"></checkbox>
|
|
<text>金牌服务</text>
|
|
</view>
|
|
<view class="flex-twice flex justify-start align-center">
|
|
<view style="width: 25%;">质保期</view>
|
|
<my-uni-combox :candidates="productProtectTimes" placeholder="请选择" v-model="formData.productProtectTime"></my-uni-combox>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="solid-top">
|
|
<view class="cu-form-group">
|
|
<view class="title">上架区域</view>
|
|
<picker :mode="'multiSelector'" @change="regionChange" :value="regionMultiIndex" :range-key="'name'" :range="regionList">
|
|
<input class="line-input radius-input" :value="formData.region && formData.region.length ? formData.region[0].name + '-' + formData.region[1].name : ''"
|
|
placeholder="请选择区域"></input>
|
|
</picker>
|
|
</view>
|
|
<view class="padding-lr bg-white">
|
|
<checkbox-group @change="checkDistirct" class="grid col-3">
|
|
<view v-for="(item, index) in formData.districtList" class="margin-tb-xs">
|
|
<checkbox style="transform:scale(1)" class="main-color margin-right-xs" :value="index" :checked="item.checked"></checkbox>
|
|
<text>{{item.name}}</text>
|
|
</view>
|
|
</checkbox-group>
|
|
</view>
|
|
</view>
|
|
<view class="cu-form-group">
|
|
<view class="title">区域描述</view>
|
|
<input name="areaDesc" :value="formData.areaDesc" :v-model="formData.areaDesc" placeholder="请输入区域描述"></input>
|
|
</view>
|
|
<view class="cu-form-group">
|
|
<view class="title">上门费</view>
|
|
<input name="doorPrice" :value="formData.doorPrice" :v-model="formData.doorPrice" placeholder="单位:元/次"></input>
|
|
</view>
|
|
<view class="cu-bar bg-white solid-top">
|
|
<view class="action text-black">
|
|
轮播图上传
|
|
</view>
|
|
</view>
|
|
<view class="cu-form-group">
|
|
<view class="grid col-4 grid-square flex-sub">
|
|
<view class="bg-img" v-for="(item,index) in formData.imgList" :key="index" @tap="viewImage($event, formData.imgList)"
|
|
:data-url="item">
|
|
<image :src="item" mode="aspectFill"></image>
|
|
<view class="cu-tag bg-red" @tap.stop="delImg($event, formData.imgList)" :data-index="index">
|
|
<text class='cuIcon-close'></text>
|
|
</view>
|
|
</view>
|
|
<view class="solids" @tap="chooseImgList" v-if="formData.imgList.length<9">
|
|
<text class='cuIcon-cameraadd'></text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="cu-bar bg-white solid-top">
|
|
<view class="action text-black">
|
|
视频上传
|
|
</view>
|
|
</view>
|
|
<view class="bg-white padding-lr padding-bottom-sm">
|
|
<uni-file-picker limit="1" file-mediatype="video" return-type="object" @select="selectVideo">
|
|
<button class="cu-btn bg-main-color shadow-blur">选择文件</button>
|
|
</uni-file-picker>
|
|
</view>
|
|
<view class="padding-sm bg-white solid-top">
|
|
<textarea style="width: 100%;" class="solid radius text-left padding-sm" v-model="formData.detailDesc" maxlength="-1" placeholder="请输入详情介绍"></textarea>
|
|
</view>
|
|
|
|
<view class="padding-bottom-lg padding-top bg-white text-center">
|
|
<button class="cu-btn bg-main-color shadow-blur long-btn" @click="submit">确定</button>
|
|
</view>
|
|
</form>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import myUniCombox from '@/components/uni-combox/my-uni-combox.vue';
|
|
|
|
export default {
|
|
components: {
|
|
myUniCombox
|
|
},
|
|
data() {
|
|
return {
|
|
formData: {
|
|
servName: '',
|
|
servDesc: '',
|
|
specsList: [],
|
|
category: [],
|
|
productUnit: '',
|
|
isGoldenServ: false,
|
|
region: [],
|
|
districtList: [],
|
|
areaDesc: '',
|
|
doorPrice: '',
|
|
imgList: [],
|
|
detailDesc: '',
|
|
video: {}
|
|
},
|
|
categoryList: [],
|
|
categoryMultiIndex: [0, 0, 0],
|
|
regionList: [],
|
|
regionMultiIndex: [0, 0],
|
|
isShowAllSpecs: false,
|
|
productUnits: [{
|
|
code: 1,
|
|
name: '台'
|
|
}, {
|
|
code: 2,
|
|
name: '件'
|
|
}, {
|
|
code: 3,
|
|
name: '套'
|
|
}, {
|
|
code: 4,
|
|
name: '个'
|
|
}, {
|
|
code: 5,
|
|
name: '平方'
|
|
}],
|
|
productProtectTimes: [{
|
|
code: 1,
|
|
name: '15天'
|
|
}, {
|
|
code: 2,
|
|
name: '30天'
|
|
}, {
|
|
code: 3,
|
|
name: '45天'
|
|
}]
|
|
}
|
|
},
|
|
onLoad() {
|
|
this.loadData();
|
|
},
|
|
methods: {
|
|
async loadData() {
|
|
this.categoryList = await this.$api.data('categoryList');
|
|
this.regionList = await this.$api.data('regionList');
|
|
},
|
|
async categoryChange(e) {
|
|
this.categoryMultiIndex = e.detail.value;
|
|
let chosenCategory = [];
|
|
for(let i = 0; i < this.categoryList.length; i++) {
|
|
chosenCategory.push(this.categoryList[i][this.categoryMultiIndex[i]]);
|
|
}
|
|
this.formData.category = chosenCategory;
|
|
|
|
this.formData.specsList = await this.$api.data('specsList');
|
|
},
|
|
async regionChange(e) {
|
|
this.regionMultiIndex = e.detail.value;
|
|
let chosenRegion = [];
|
|
for(let i = 0; i < this.regionList.length; i++) {
|
|
chosenRegion.push(this.regionList[i][this.regionMultiIndex[i]]);
|
|
}
|
|
this.formData.region = chosenRegion;
|
|
|
|
this.formData.districtList = await this.$api.data('districtList');
|
|
},
|
|
checkSpecs(e) {
|
|
let checkedIndexArr = e.detail.value;
|
|
for(let i = 0; i < this.formData.specsList.length; i++) {
|
|
if (checkedIndexArr.indexOf(String(i)) !== -1) {
|
|
this.formData.specsList[i].checked = true;
|
|
} else {
|
|
this.formData.specsList[i].checked = false;
|
|
}
|
|
}
|
|
},
|
|
inputSpecs(e, index, field) {
|
|
this.formData.specsList[index][field] = e.detail.value;
|
|
},
|
|
showAllSpecs() {
|
|
this.isShowAllSpecs = !this.isShowAllSpecs;
|
|
},
|
|
checkDistirct(e) {
|
|
let checkedIndexArr = e.detail.value;
|
|
for(let i = 0; i < this.formData.districtList.length; i++) {
|
|
if (checkedIndexArr.indexOf(String(i)) !== -1) {
|
|
this.formData.districtList[i].checked = true;
|
|
} else {
|
|
this.formData.districtList[i].checked = false;
|
|
}
|
|
}
|
|
console.log(this.formData)
|
|
},
|
|
chooseImgList(e) {
|
|
uni.chooseImage({
|
|
count: 9, //默认9
|
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
|
sourceType: ['album'], //从相册选择
|
|
success: (res) => {
|
|
if (this.formData.imgList.length != 0) {
|
|
this.formData.imgList = this.formData.imgList.concat(res.tempFilePaths)
|
|
} else {
|
|
this.formData.imgList = res.tempFilePaths
|
|
}
|
|
}
|
|
});
|
|
},
|
|
viewImage(e, imgList) {
|
|
uni.previewImage({
|
|
urls: imgList,
|
|
current: e.currentTarget.dataset.url
|
|
});
|
|
},
|
|
delImg(e, imgList) {
|
|
uni.showModal({
|
|
title: '',
|
|
content: '确定要删除这张图片吗?',
|
|
cancelText: '取消',
|
|
confirmText: '确定',
|
|
success: res => {
|
|
if (res.confirm) {
|
|
imgList.splice(e.currentTarget.dataset.index, 1)
|
|
}
|
|
}
|
|
})
|
|
},
|
|
async selectVideo(e) {
|
|
let res = await this.$request.uploadFile(e.tempFilePaths[0]);
|
|
if (res.code === 0) {
|
|
this.formData.video = res.url;
|
|
}
|
|
},
|
|
submit() {
|
|
console.log(this.formData)
|
|
}
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.cu-form-group picker::after {
|
|
display: none;
|
|
}
|
|
.certern-height {
|
|
height: 520rpx;
|
|
overflow: hidden;
|
|
}
|
|
.long-btn{
|
|
width: 95%;
|
|
}
|
|
</style>
|