public-opinion/pagesA/opinion-submit/opinion-submit.vue

182 lines
5.9 KiB
Vue

<template>
<view>
<view class="pad-zy20">
<view class="" v-if="ifAnonymous">
<view class="disjbac bbot pad-sx20">
<view class="fon30 colb bold flexs">真实姓名</view>
<input class="fon30 col9 tright width100" type="text" maxlength="16" placeholder="请输入姓名">
</view>
<view class="disjbac bbot pad-sx20">
<view class="fon30 colb bold flexs">联系方式</view>
<input class="fon30 col9 tright width100" type="text" maxlength="11" placeholder="请填写手机号码">
</view>
</view>
<view class="disjbac fon30 bbot pad-sx30">
<view class="colb bold flexs">社区</view>
<view class="disac col9 width100 fe">
<view class="mar-y10">请选择社区</view>
<i class="icon icon-next fon24" style="margin-top: 6rpx;"></i>
</view>
</view>
<view class="disjbac fon30 bbot pad-sx30">
<view class="colb bold flexs"></view>
<view class="disac col9 width100 fe">
<view class="mar-y10">请选择村</view>
<i class="icon icon-next fon24" style="margin-top: 6rpx;"></i>
</view>
</view>
<view class="dis fon30 bbot pad-sx30">
<view class="colb bold flexs">图片上传</view>
<view class="disac col9 width100 fe fw">
<view v-for="(item,index) in imgArr" :key="index" class="col9 radius30 disjcac fc posir mar-y20 item-box width155">
<image :src="item" mode="aspectFill" class="width155 radius30"></image>
<view @tap="imgArr.splice(index,1)" class="posia disjcac del-btn">
<i class="icon icon-del-white fon24 colf" style="transform: scale(.8);"></i>
</view>
</view>
<view v-if="imgArr.length!=3" @tap="chooseImg" class="col9 radius30 disjcac fc width155" style="border: 1px solid #d9d9d9;">
<i class="icon icon-add04 fon72" style="color: #d9d9d9;"></i>
<view class="fon24">图片添加</view>
</view>
</view>
</view>
<view class="dis fon30 bbot pad-sx30">
<view class="colb bold flexs">视频上传</view>
<view class="disac col9 width100 fe">
<view v-for="(item,index) in vedioArr" :key="index" class="col9 radius30 disjcac fc posir mar-y20 item-box width155">
<image :src="item" mode="aspectFill" class="width155 radius30"></image>
<view @tap="vedioArr.splice(index,1)" class="posia disjcac del-btn">
<i class="icon icon-del-white fon24 colf" style="transform: scale(.8);"></i>
</view>
</view>
<view v-if="vedioArr.length!=3" @tap="chooseVedio" class="col9 radius30 disjcac fc width155" style="border: 1px solid #d9d9d9;">
<i class="icon icon-add04 fon72" style="color: #d9d9d9;"></i>
<view class="fon24">视频添加</view>
</view>
</view>
</view>
<view class="disjbac bbot pad-sx20">
<view class="fon30 colb bold flexs">描述文案</view>
<input class="fon30 col9 tright width100" type="text" placeholder="请输入描述文案">
</view>
<view class="dis fon30 bbot pad-sx30">
<view class="colb bold flexs">语音上传</view>
<view class="disac col9 width100 fe">
<view v-if="audioText" @tap="playVoice" class="col9 radius30 disjcac fc posir mar-y20 item-box width155" style="border: 1px solid #d9d9d9;">
<image src="/static/icon/icon-audio.png" mode="aspectFill" style="width: 74rpx;height: 85rpx;"></image>
<view @tap.stop="clearAudio" class="posia disjcac del-btn">
<i class="icon icon-del-white fon24 colf" style="transform: scale(.8);"></i>
</view>
</view>
<view @tap="audioEv" @longpress="startRecord" @touchend="endRecord" class="col9 radius30 disjcac fc width155" style="border: 1px solid #d9d9d9;">
<i class="icon icon-add04 fon72" style="color: #d9d9d9;"></i>
<view class="fon24">添加语音</view>
</view>
</view>
</view>
<view class="disjbac fon30 bbot pad-sx30">
<view class="colb bold flexs">类别</view>
<view class="disac col9 width100 fe">
<view class="mar-y10">请选择类别</view>
<i class="icon icon-next fon24" style="margin-top: 6rpx;"></i>
</view>
</view>
</view>
<view class="disjcac pad-sx50">
<view class="disjcac enter-btn" style="margin: 0;" @tap="submitEv"></view>
</view>
</view>
</template>
<script>
const recorderManager = uni.getRecorderManager();
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
export default {
data() {
return {
ifAnonymous:false,//是否是匿名提交
imgArr:[],
vedioArr:[],
audioText:''
}
},
onLoad(op) {
this.ifAnonymous = op.flag;
},
methods: {
// 提交事件
submitEv(){
uni.reLaunch({
url:'/pagesA/my-opinion-list/my-opinion-list'
})
},
// 图片选择
chooseImg(){
uni.chooseImage({
count:1,
success: (tempFile) => {
this.imgArr = [...this.imgArr,...tempFile.tempFilePaths]
}
})
},
// 选择视频
chooseVedio(){
uni.chooseVideo({
sourceType:['album','camera'],
success: (tempFile) => {
this.vedioArr.push(tempFile.tempFilePath);
}
})
},
audioEv(){
uni.showToast({
title:'长按进行录音',
icon:'none'
})
},
// 开始录音
startRecord() {
this.audioText = '';
uni.showToast({
title:'录音中...',
icon:'none',
duration:1000*120
})
recorderManager.start();
},
// 结束录音
endRecord() {
recorderManager.stop();
recorderManager.onStop((res)=> {
this.audioText = res.tempFilePath;
});
uni.hideToast();
},
// 播放录音
playVoice() {
if (this.audioText) {
innerAudioContext.src = this.audioText;
innerAudioContext.play();
}
},
// 删除录音
clearAudio(){
this.audioText = '';
recorderManager.stop();
}
}
}
</script>
<style>
.del-btn{
background-color: #39d091;width: 45rpx;height: 45rpx;border-radius: 100%;top: -20rpx;right: -20rpx;
}
.width155{
width: 155rpx;
height: 150rpx;
}
.item-box{border: 1px solid #FFFFFF;}
</style>