|
|
<template> <view class="pageBgImg"> <topNavbar title="我要咨询"></topNavbar> <view class="pad"> <!-- 投诉类别 --> <view class="card"> <view class="row"> <view class="label">投诉类别</view> <view class="rightSelect"> <u-radio-group v-model="form.userType" > <u-radio :customStyle="{marginRight: '24rpx'}" v-for="(item, index) in radiolist1" :key="index" :label="item.name" :name="item.id" > </u-radio> </u-radio-group> </view> </view> </view> <!-- 驾校名称 教练名称 --> <view class="card"> <view class="row"> <view class="label">驾校名称</view> <view @click="showSchool=true" class="select_row my" > <input v-model="form.schoolName" placeholder="请选择" @click="showSchool=true" disabled style="pointer-events: none;"/></input> <u-icon name="arrow-right" size="14" color="#686B73" style="margin-left: 12rpx;" ></u-icon> </view> </view> <view class="row"> <view class="label">教练名称</view> <view @click="goCoach" class="select_row" > <input v-model="form.coachName" placeholder="请选择" @click="goCoach" style="pointer-events: none;" disabled/></input> <u-icon name="arrow-right" size="14" color="#686B73" style="margin-left: 12rpx;" ></u-icon> </view> </view> </view> <!-- 投诉类型 --> <view class="card"> <view class="row"> <view class="label">投诉类型</view> <view @click="showComplainType=true" class="select_row" > <input v-model="form.complainTypeName" placeholder="请选择" @click="showComplainType=true" style="pointer-events: none;" disabled/></input> <u-icon name="arrow-right" size="14" color="#686B73" style="margin-left: 12rpx;" ></u-icon> </view> </view> </view> <!-- 咨询内容 --> <view class="card" style="padding: 0 24rpx 24rpx 24rpx ;"> <view class="h2">咨询内容</view> <view class="textareaBg"> <view class="flex"> <view class="icon"> <image src="@/static/images/index/edit.png" mode=""></image> </view> <view class="inputBox"> <u-textarea v-model.trim="form.content" ref="textarea" placeholder="详细说明问题,以便获得更好的回答~"></u-textarea> </view> </view> <view class="phoneBox"> <view class="imgBox"> <view class="img" v-for="(item,index) in imgArr" :key="item"> <view class="minusCircle" @click="deleteImg(item)"> <u-icon name="close-circle-fill" size="20" color="#b9061d"></u-icon> </view> <image :src="item" mode=""></image> </view> </view> <view class="phone" @click="chooseImages" v-if="imgArr.length<3"> <view class="phoneIcon"> <image src="@/static/images/index/btn_tupian.png" mode=""></image> </view> <view class="lab">添加图片</view> </view> </view> </view> </view> <view class="card"> <view class="phone_row"> <view class="label">联系电话</view> <view class="uInput my">{{ this.vuex_userInfo.mobile }}</view> </view> </view> <view class="btn" :class="{active: btnActive}" @click="submintFn">提交</view> </view> <u-picker :show="showComplainType" :columns="complainTypeArr" keyName="label" @confirm="confirmComplainType" @cancel="showComplainType=false"></u-picker> <u-popup :show="showSchool" mode="bottom" :round="8" @close="showSchool=false"> <searchSchool @chooseSchool="chooseSchool"/> </u-popup> <!-- <u-picker :show="show" :columns="shoolArr" keyName="lab"></u-picker> --> </view> </template>
<script> import { createcomplain, consultationType } from '@/config/api.js' import { WX_API, H5_API, prefix } from '@/config/site.config.js'; import searchSchool from '@/pages/indexEntry/enroll/registInfo/comp/searchSchool.vue' var _url = H5_API+ WX_API export default { components: { searchSchool }, data() { return { showSchool: false, value: '', imgArr: [], showComplainType: false, // 1、服务态度,2、教学质量、3、退费问题,4、学时问题,5、考试预约,6、转校问题,示例值(1)
complainTypeArr: [], form: { value: '投诉驾校', complainType: '', complainTypeName: '', userType: 1, coachName: '', schoolName: '', schoolId: '', content: '', type: 2 }, radiolist1: [{ name: '投诉驾校', id: 1, disabled: false }, { name: '投诉教练', id: 2, disabled: false }, ], } }, computed: { btnActive() { if(this.form.schoolId&&this.form.complainType&&this.form.content) { return true }else { return false } } }, onLoad() { uni.$on('upDateCoachItem',(item)=>{ console.log(item) this.form.coachId = item.id this.form.coachName = item.name }) this.consultationTypeFn() }, methods: { // 投诉类型
async consultationTypeFn() { const {data: res} = await consultationType() this.complainTypeArr = [res] }, // 选择投诉类型
confirmComplainType(val) { console.log(val) let item = val.value[0] this.form.complainType = item.value this.form.complainTypeName = item.label this.showComplainType = false }, // 选择驾校
chooseSchool(item) { this.form.schoolName = item.name this.form.schoolId = item.id console.log(this.columnsCar) this.showSchool = false }, // 跳转到选择教练
goCoach() { if(!this.form.schoolId) return this.$u.toast('请先选择驾校') this.$goPage('/pages/indexEntry/enroll/registInfo/chooseCoach/chooseCoach?schoolId=' + this.form.schoolId) }, deleteImg(item) { let index = this.imgArr.findIndex(val=>val==item) this.imgArr.splice(index, 1) }, //选择图片
chooseImages(type) { let imgNum = 3 - (this.imgArr.length) uni.chooseImage({ count: imgNum, //允许选择的数量
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], //从相册选择
success: res => { uni.showLoading({ title: '图片上传中...' }); console.log(res) res.tempFiles.forEach( (item,index)=>{ this.uploadImgApi(item.path, item.name) }) } }) }, uploadImgApi(filePath, imgName) { console.log(filePath) let token = 'Bearer '+ this.$store.state.user.vuex_loginInfo.accessToken let _this = this let timer = new Date() * 1 // 上传图片到服务器
uni.uploadFile({ url: _url + 'app-api/infra/file/upload',//接口
filePath: filePath,//要上传的图片的本地路径
name: 'file', formData: { path: 'complain/'+ uni.$u.date(name, 'yyyy-mm-dd')+'/'+timer + '-'+ imgName, type: 1, fileSuffix: "png" }, header: { Authorization: token, 'tenant-id': 1 }, success(res) { console.log('上传成功') let res2 = JSON.parse(res.data) _this.imgArr.push(res2.data) console.log(res2) uni.hideLoading(); }, complete: (err)=> { console.log(err) } }) }, async submintFn() { if(!this.btnActive) return if(!this.form.content) return this.$u.toast('请输入内容') this.form.images = this.imgArr.join(',') let obj = Object.assign({}, this.form) delete obj.value delete obj.complainTypeName const {data: res} = await createcomplain(this.form) this.$u.toast('发布成功') setTimeout(()=>{ this.$goPage('/pages/indexEntry/consult/record/record?tab=2') },1500) }, } } </script>
<style lang="scss" scoped> .pageBgImg { .card { margin-bottom: 20rpx; .h2 { font-size: 28rpx; font-weight: 600; line-height: 96rpx; } .textareaBg { min-height: 364rpx; background: #F8F8F8; border-radius: 16rpx; border: 2rpx solid #E8E9EC; display: flex; flex-direction: column; justify-content: space-between; .flex { padding: 20rpx; align-items: flex-start; .icon { width: 24rpx; height: 24rpx; margin: 0 14rpx 0 24rpx; } .inputBox { flex: 1; } /deep/ .inputBox .u-textarea { padding: 0 !important; border: none !important; background: none !important; } } .phoneBox { display: flex; padding: 0 10rpx 20rpx 20rpx; .imgBox { display: flex; .img { margin-right: 14rpx; position: relative; width: 160rpx; height: 160rpx; image { width: 160rpx; height: 160rpx; border-radius: 8rpx; overflow: hidden; } .minusCircle { position: absolute; right: -14rpx; top: -20rpx; z-index: 9; } } } .phone { border: 2rpx dashed #CDCED0; width: 160rpx; height: 160rpx; background: #F8F8F8; border-radius: 8rpx; overflow: hidden; display: flex; align-items: center; justify-content: center; flex-direction: column; .phoneIcon { width: 60rpx; height: 60rpx; } .lab { font-size: 20rpx; color: #686B73; margin-top: 8rpx; } } } } } .phone_row { display: flex; height: 104rpx; padding: 0 28rpx; line-height: 104rpx; .label { font-size: 28rpx; font-weight: 600; margin-right: 50rpx; } .uInput { flex: 1; } } .btn { width: 396rpx; height: 72rpx; background: #D1E7FE; border-radius: 8rpx; font-size: 28rpx; text-align: center; line-height: 72rpx; margin: 100rpx auto 114rpx auto; color: #fff; &.active { background: $themC; } } } .row { height: 120rpx; display: flex; align-items: center; padding-right: 30rpx; .label { font-size: 28rpx; font-weight: 600; width: 184rpx; text-align: center; } .select_row { display: flex; align-items: center; justify-content: space-between; flex: 1; input { font-size: 28rpx; color: #333; } } } </style>
|