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.
404 lines
9.8 KiB
404 lines
9.8 KiB
4 months ago
|
<template>
|
||
|
<view class="container">
|
||
|
<template v-if="!isSubmit">
|
||
|
<view class="form">
|
||
|
<view class="form-item">
|
||
|
<view class="form-item-label">
|
||
|
<text class="label-flag">*</text>问题类型
|
||
|
</view>
|
||
|
<view class="form-item-content">
|
||
|
<view v-for="(item, index) in typeList" :key="index" class="type" @click="form.type = index + 1">
|
||
|
<image v-if="form.type !== index + 1" src="/static/feedback/circle.png" mode="aspectFill"></image>
|
||
|
<image v-else src="/static/feedback/circle-choose.png" mode="aspectFill"></image>
|
||
|
{{ item }}
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="form-item">
|
||
|
<view class="form-item-label">
|
||
|
<text class="label-flag">*</text>反馈与建议
|
||
|
</view>
|
||
|
<view class="form-item-content">
|
||
|
<view class="textarea-box">
|
||
|
<textarea v-model="form.suggest" placeholder="您填写的信息越全,越有利于问题得到快速解决~" placeholder-class="textarea-placeholer" maxlength="299" />
|
||
|
<view class="text-num">已写<text>{{ form.suggest.length }}</text>/299个字</view>
|
||
|
</view>
|
||
|
<view class="image-list">
|
||
|
<view v-for="(item, index) in form.images" :key="index" class="image">
|
||
|
<image :src="item" mode="aspectFill" @click="previewImage(item)"></image>
|
||
|
<image src="/static/delete.png" mode="aspectFill" class="delete" @click.stop="deleteImage(index)"></image>
|
||
|
</view>
|
||
|
<view v-if="form.images.length < 5" class="upload-btn" @click="addImage">
|
||
|
<image src="/static/feedback/photo.png" mode="aspectFill"></image>
|
||
|
<view class="tip">添加照片</view>
|
||
|
<view class="sub-tip">最多5张</view>
|
||
|
</view>
|
||
|
<view class="image-num"><text>{{ form.images.length }}</text>/5</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="form-item">
|
||
|
<view class="form-item-content" style="padding: 0 30rpx;">
|
||
|
<view class="content-info">
|
||
|
<view class="info-name">您的姓名</view>
|
||
|
<input type="text" v-model="form.name" placeholder="请填写您的名字" placeholder-class="input-placeholder" />
|
||
|
</view>
|
||
|
<view class="content-info">
|
||
|
<view class="info-name">您的电话</view>
|
||
|
<input type="number" v-model="form.phone" placeholder="请填写可以联系到您的手机号码" placeholder-class="input-placeholder" />
|
||
|
</view>
|
||
|
<view class="content-info">
|
||
|
<view class="info-name">您的单位</view>
|
||
|
<input type="text" v-model="form.unit" placeholder="请填写您商城认证的营业执照名称" placeholder-class="input-placeholder" />
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="submit" @click="submit">提交</view>
|
||
|
</template>
|
||
|
<template v-else>
|
||
|
<view class="success">
|
||
|
<image :src="$picUrl+ '/static/feedbackSuccess.png'" mode="aspectFill"></image>
|
||
|
<view class="success-tip">提交成功</view>
|
||
|
<text>您的反馈意见已经提交成功,</text>
|
||
|
<text>预计1-2个工作日内与您联系。</text>
|
||
|
</view>
|
||
|
<view class="submit back" @click="back">完成</view>
|
||
|
</template>
|
||
|
<addShuiyin />
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import * as UploadApi from '@/api/upload'
|
||
|
import * as Api from '@/api/feedback/index.js'
|
||
|
export default {
|
||
|
data() {
|
||
|
return {
|
||
|
typeList: [
|
||
|
'功能异常:系统功能异常或不可用',
|
||
|
'系统建议:用的不爽,我有建议',
|
||
|
'功能新增:我想用的功能,希望能开发新增',
|
||
|
'服务建议:服务商服务不到位,我有建议',
|
||
|
],
|
||
|
form: {
|
||
|
type: '',
|
||
|
suggest: '',
|
||
|
images: [],
|
||
|
uploadImages: [],
|
||
|
name: '',
|
||
|
phone: '',
|
||
|
unit: '',
|
||
|
},
|
||
|
loading: false,
|
||
|
isSubmit: false,
|
||
|
};
|
||
|
},
|
||
|
methods: {
|
||
|
addImage() {
|
||
|
const that = this;
|
||
|
uni.chooseImage({
|
||
|
count: 1,
|
||
|
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
|
||
|
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
|
||
|
success({
|
||
|
tempFiles
|
||
|
}) {
|
||
|
console.log(that.form.images);
|
||
|
that.form.images.push(tempFiles[0].path)
|
||
|
that.upload(tempFiles[0])
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
async upload(path) {
|
||
|
const that = this;
|
||
|
// 批量上传
|
||
|
return new Promise((resolve, reject) => {
|
||
|
if (path) {
|
||
|
UploadApi.image([path])
|
||
|
.then(fileIds => {
|
||
|
console.log(fileIds);
|
||
|
that.form.uploadImages.push(fileIds[0]);
|
||
|
resolve(fileIds)
|
||
|
})
|
||
|
.catch(reject)
|
||
|
} else {
|
||
|
resolve()
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
deleteImage(index) {
|
||
|
this.form.images.splice(index, 1);
|
||
|
this.form.uploadImages.splice(index, 1);
|
||
|
},
|
||
|
previewImage(item) {
|
||
|
uni.previewImage({
|
||
|
urls:this.form.images,
|
||
|
});
|
||
|
},
|
||
|
submit() {
|
||
|
if (!this.form.type) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请选择问题类型',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (!this.form.suggest) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请填写反馈与建议',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (this.form.uploadImages.length === 0) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请上传图片',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (!this.form.name) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请填写您的姓名',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (!this.form.phone) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请填写您的手机号码',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
} else if (!/^1[3-9]\d{9}$/.test(this.form.phone)) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请填写正确格式的手机号码',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (!this.form.unit) {
|
||
|
uni.showModal({
|
||
|
title: '提示',
|
||
|
content: '请填写您的单位',
|
||
|
showCancel: false,
|
||
|
});
|
||
|
return false;
|
||
|
}
|
||
|
if (!this.loading) {
|
||
|
this.loading = true;
|
||
|
Api.addFeedback({
|
||
|
imgs: this.form.uploadImages.join(','),
|
||
|
type: this.form.type,
|
||
|
suggest: this.form.suggest,
|
||
|
name: this.form.name,
|
||
|
phone: this.form.phone,
|
||
|
unit: this.form.unit,
|
||
|
})
|
||
|
.then(res => {
|
||
|
console.log(res);
|
||
|
this.loading = false;
|
||
|
this.isSubmit = true;
|
||
|
})
|
||
|
.catch(() => {
|
||
|
this.loading = false;
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
|
||
|
back() {
|
||
|
uni.navigateBack();
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
.container {
|
||
|
padding: 24rpx 24rpx 42rpx;
|
||
|
.form {
|
||
|
&-item {
|
||
|
margin-bottom: 40rpx;
|
||
|
&:last-child {
|
||
|
margin-bottom: 0;
|
||
|
}
|
||
|
&-label {
|
||
|
font-size: 30rpx;
|
||
|
color: #333;
|
||
|
margin-bottom: 30rpx;
|
||
|
.label-flag {
|
||
|
color: #F34A40;
|
||
|
}
|
||
|
}
|
||
|
&-content {
|
||
|
background: #fff;
|
||
|
border-radius: 20rpx;
|
||
|
padding: 40rpx 30rpx;
|
||
|
font-size: 30rpx;
|
||
|
color: #333;
|
||
|
.textarea-box {
|
||
|
position: relative;
|
||
|
width: fit-content;
|
||
|
.text-num {
|
||
|
position: absolute;
|
||
|
right: 31rpx;
|
||
|
bottom: 29rpx;
|
||
|
font-size: 24rpx;
|
||
|
line-height: 24rpx;
|
||
|
color: #999;
|
||
|
text {
|
||
|
color: #F34A40;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
textarea {
|
||
|
height: 215rpx;
|
||
|
background: #F7F8FA;
|
||
|
border-radius: 10rpx;
|
||
|
padding: 20rpx;
|
||
|
}
|
||
|
.textarea-placeholer {
|
||
|
color: #ccc;
|
||
|
font-size: 24rpx;
|
||
|
}
|
||
|
.type {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
margin-bottom: 40rpx;
|
||
|
&:last-child {
|
||
|
margin-bottom: 0;
|
||
|
}
|
||
|
>image {
|
||
|
width: 36rpx;
|
||
|
height: 36rpx;
|
||
|
margin-right: 20rpx;
|
||
|
}
|
||
|
}
|
||
|
.image-list {
|
||
|
display: flex;
|
||
|
flex-wrap: wrap;
|
||
|
position: relative;
|
||
|
margin-top: 20rpx;
|
||
|
.image {
|
||
|
width: 140rpx;
|
||
|
height: 140rpx;
|
||
|
background: #FFFFFF;
|
||
|
border-radius: 10rpx;
|
||
|
border: 1px solid #CCCCCC;
|
||
|
margin-right: 15rpx;
|
||
|
margin-bottom: 20rpx;
|
||
|
position: relative;
|
||
|
.delete {
|
||
|
width: 30rpx;
|
||
|
height: 30rpx;
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
right: 0;
|
||
|
}
|
||
|
>image {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
}
|
||
|
.upload-btn {
|
||
|
width: 140rpx;
|
||
|
height: 140rpx;
|
||
|
background: #FFFFFF;
|
||
|
border-radius: 10rpx;
|
||
|
border: 1px solid #CCCCCC;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
align-items: center;
|
||
|
padding-top: 20rpx;
|
||
|
>image {
|
||
|
width: 45rpx;
|
||
|
height: 37rpx;
|
||
|
}
|
||
|
.tip {
|
||
|
font-size: 24rpx;
|
||
|
line-height: 24rpx;
|
||
|
margin: 13rpx;
|
||
|
}
|
||
|
.sub-tip {
|
||
|
font-size: 22rpx;
|
||
|
line-height: 22rpx;
|
||
|
color: #999999;
|
||
|
}
|
||
|
}
|
||
|
.image-num {
|
||
|
position: absolute;
|
||
|
right: 0rpx;
|
||
|
bottom: 20rpx;
|
||
|
font-size: 24rpx;
|
||
|
line-height: 24rpx;
|
||
|
color: #999;
|
||
|
text {
|
||
|
color: #F34A40;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
.content-info {
|
||
|
border-bottom: 1rpx solid #EAEAEA;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
height: 98rpx;
|
||
|
.info-name {
|
||
|
margin-right: 40rpx;
|
||
|
}
|
||
|
input {
|
||
|
flex: 1;
|
||
|
}
|
||
|
.input-placeholder {
|
||
|
color: #CCCCCC;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
.submit {
|
||
|
height: 98rpx;
|
||
|
background: #F34A40;
|
||
|
border-radius: 49rpx;
|
||
|
color: #FFFFFF;
|
||
|
font-size: 30rpx;
|
||
|
line-height: 98rpx;
|
||
|
text-align: center;
|
||
|
margin-top: 30rpx;
|
||
|
}
|
||
|
|
||
|
.success {
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
align-items: center;
|
||
|
padding-top: 140rpx;
|
||
|
>image {
|
||
|
width: 189rpx;
|
||
|
height: 166rpx;
|
||
|
}
|
||
|
.success-tip {
|
||
|
margin: 34rpx 0 28rpx;
|
||
|
color: #222222;
|
||
|
font-size: 36rpx;
|
||
|
line-height: 36rpx;
|
||
|
}
|
||
|
uni-text {
|
||
|
color: #666666;
|
||
|
font-size: 28rpx;
|
||
|
line-height: 40rpx;
|
||
|
}
|
||
|
}
|
||
|
.back {
|
||
|
position: fixed;
|
||
|
left: 24rpx;
|
||
|
width: 702rpx;
|
||
|
bottom: 43rpx;
|
||
|
}
|
||
|
}
|
||
|
</style>
|