<template> <view class="container"> <view class="page"> <view class="complaints"> <view class="form"> <uni-forms> <view class="form-item"> <view class="form-item-fl"> <view class="asterisk">*</view>投诉主题 </view> <view class="form-item-fr"> <input class="form-item-tit" v-model="formData.complaintTheme" focus placeholder="请输入投诉主题" /> </view> </view> <view class="form-item"> <view class="form-item-fl"> <view class="asterisk">*</view>投诉人姓名 </view> <view class="form-item-fr"> <input class="form-item-tit" v-model="formData.userName" focus placeholder="请输入投诉人姓名" /> </view> </view> <view class="form-item"> <view class="form-item-fl"> <view class="asterisk">*</view>手机号码 </view> <view class="form-item-fr"> <input class="form-item-tit" v-model="formData.userPhone" focus placeholder="请输入手机号码" /> </view> </view> <view class="form-item-text"> <view class="title">问题描述</view> <view class="textarea"> <uni-easyinput type="textarea" v-model="formData.problemDesc" placeholder="请输入问题描述" /> </view> </view> <view class="form-item-text"> <view class="title">问题图片(最多传三张)</view> <view class="picker"> <uni-file-picker file-mediatype="image" limit="3" @select="onSelectImage"></uni-file-picker> </view> </view> </uni-forms> </view> <view class="form-submit" @click="toAudit()">提交</view> </view> </view> </view> </template> <script> import { uploadFile, addCommunityComplaintApi } from '@/config/api.js' import serverConfig from "@/config/server_config.js"; export default { data() { return { formData: { complaintTheme: '', userName: '', userPhone: '', problemDesc: '', complaintImg: [] } } }, methods: { async toAudit() { if(!this.formData.complaintTheme) { uni.showToast({ title: '请输入投诉主题', icon: 'none' }) return } if(!this.formData.userName) { uni.showToast({ title: '请输入投诉人姓名', icon: 'none' }) return } if(!this.formData.userPhone) { uni.showToast({ title: '请输入手机号码', icon: 'none' }) return } let reg = /^1(3|4|5|7|8)\d{9}$/ if(!reg.test(this.formData.userPhone)) { uni.showToast({ title: '请输入正确的手机号码', icon: 'none' }) return } let complaintImg = this.formData.complaintImg.map(item=>item.url).join(',') let data = await addCommunityComplaintApi({ ...this.formData, complaintImg }) getApp().globalData.complaintInfo = { ...this.formData, complaintImg, repairStatus: 'waitAudit' } setTimeout(()=> { uni.showToast({ title: '提交成功!', icon: 'none' }); setTimeout(()=> { uni.redirectTo({ url: '/pages/complaintsDetail/index', }); }, 1500) }, 30) }, uploadImage(path) { return new Promise((resolve, reject)=> { uploadFile({ filePath: path, name: 'file', formData: { //其他需要携带的参数 'biz': 'scott/pic' } }).then(({message})=> { resolve(message) }).catch(err=> { reject(err) }) }) }, onSelectImage(e) { let serveList = [] e.tempFilePaths.forEach(url=> { serveList.push(this.uploadImage(url)) }) Promise.all(serveList).then(data=> { let list = data.map(url=> { let chunk = url.split('.') return { url: serverConfig.baseURL + '/sys/common/static/' + url, name: chunk[0], extname: chunk[1] } }) this.formData.complaintImg = this.formData.complaintImg.concat(list) }).catch(err=> { setTimeout(()=> { uni.showToast({ title: '上传失败,请重试!', icon: 'none' }); }, 30) console.log(err) }) } } } </script> <style> page { background-color: #F8F6F9; } </style> <style lang="scss" scoped> .page { padding: 30rpx; } .complaints { .form { background-color: #ffffff; border-radius: 16rpx; padding: 30rpx; margin-bottom: 30rpx; .form-item { display: flex; align-items: center; justify-content: space-between; height: 84rpx; line-height: 84rpx; border-bottom: 1px solid #F8F6F9; overflow: hidden; } .form-item-fl { font-size: 28rpx; color: #373737; display: flex; .asterisk { color: #F42E2E; width: 10rpx; margin-right: 6rpx; } } .form-item-fr { display: flex; flex: 2; align-items: center; justify-content: flex-end; margin-left: 20rpx; text-align: right; } .form-item-tit { font-size: 28rpx; color: #666; margin-right: 20rpx; text-align: right; } .form-item-text{ .title{ height: 84rpx; line-height: 84rpx; font-size: 28rpx; color: #373737; margin-left: 10rpx; } .textarea{ background-color: #F8F8F8; } } } } .form-submit { height: 80rpx; line-height: 80rpx; background-color: #6A59F2; border-radius: 80rpx; width: 100%; text-align: center; font-size: 28rpx; color: #FFFFFF; } </style>