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.
 
 
 

315 lines
8.9 KiB

<template>
<view class="box">
<view class="pl-lg pr-lg pb-lg fill-base">
<view class="box-item">
<view class="box-item-title f-paragraph pb-md text-bold flex">
<text class="c-warning f-sm-title">*</text>
<text>反馈类型</text>
</view>
<view class="radius-16 flex-warp">
<block v-for="(item,index) in navList" :key="index">
<view class="nav-item text-center f-desc c-paragraph mb-md fill-body" @tap="getNavIndex(index)"
:class="(index % 3 > 0)&& 'ml-md'"
:style="{backgroundColor: index == navIndex ? primaryColor : '' , color:index == navIndex ? '#fff' : ''}">
{{item.title}}
</view>
</block>
</view>
</view>
<view class="box-item">
<view class="box-item-title">
<view class="text-bold f-paragraph">订单编号</view>
<view class="c-caption f-caption pt-md pb-lg">若涉及订单, 填入订单号有助解决问题(订单详情页可复制)</view>
</view>
<view class="pr-lg pl-lg fill-body radius-16 f-paragraph flex-between box-item-cont">
<input type="number" placeholder="请输入订单号" @input="getInput" v-model="param.order_code" />
</view>
</view>
<view class="box-item pt-md">
<view class="box-item-title f-paragraph pb-sm text-bold flex">
<text class="c-warning f-sm-title">*</text>
<text>反馈内容</text>
</view>
<view class="pd-lg radius-16 fill-body" style="overflow: hidden;">
<textarea style="width: 100%;" class="c-paragraph" cols="30" rows="10"
placeholder="您宝贵的建议,是我们不断进步的动力!请详细描述遇到的问题" :value="param.content" maxlength="1000"
@input="bindInput"></textarea>
<view class="pt-md text-right c-5A677E f-paragraph">
{{param.content.length > 1000 ? 1000 : param.content.length}} / 1000
</view>
</view>
</view>
<view class="box-item mt-md" @click="checkquanxian">
<view class="flex-warp" v-if="xianshi==2">
<view class="radius-16 flex-center flex-column item-child upload-item fill-body radius-16 margin" style="width: 216rpx;height: 216rpx;background: #F7F7F7;">
<view class="upload-icon flex-center c-title radius-10" style="display: contents;width:41px;height:39px;background:#FFFFFF;align-items:center;justify-content:center;">
<view class="iconfont icon-camera _i">
</view>
<view class="f-caption c-caption mt-sm">
上传图片
</view>
<view class="cur-imgsize f-caption c-caption">
0/3
</view>
</view>
</view>
</view>
<upload @upload="imgUpload" v-if="xianshi==1" :imagelist="param.images" imgtype="images" @del="imgUpload" text="上传图片"
:imgsize="3"></upload>
</view>
<view class="box-item mt-md" @click="checkquanxian">
<view class="flex-warp" v-if="xianshi==2">
<view class="radius-16 flex-center flex-column item-child upload-item fill-body radius-16 margin" style="width: 216rpx;height: 216rpx;background: #F7F7F7;">
<view class="upload-icon flex-center c-title radius-10" style="display: contents;width:41px;height:39px;background:#FFFFFF;align-items:center;justify-content:center;">
<view class="iconfont icon-camera _i">
</view>
<view class="f-caption c-caption mt-sm">
上传视频
</view>
<view class="cur-imgsize f-caption c-caption">
0/3
</view>
</view>
</view>
</view>
<upload @upload="imgUpload" v-if="xianshi==1" @del="imgUpload" :imagelist="param.video_url" filetype="video"
imgtype="video_url" text="上传视频" :imgsize="1" :videoSize="30">
</upload>
</view>
<view class="f-desc c-caption pb-sm">*最多只能上传3张图片、1个视频(视频只支持30兆以内)</view>
</view>
<view class="f-caption c-warning pd-lg">注: 您反馈的意见问题,平台不会透露给他人,保护您的隐私</view>
<view class="space-max-footer"></view>
<fix-bottom-button @cancel="$util.goUrl({url:`/user/pages/feedback/list`})" @confirm="confirm"
:text="[{text:'反馈记录',type:'cancel'},{text:'提交反馈',type:'confirm',isAuth:true}]" bgColor="#fff"
:classType="2">
</fix-bottom-button>
<uni-popup ref="perpopup" type="top" :mask-click='false'>
<view class="permissions_box">
当您使用APP时为了提供图片上传的功能我们需要申请相机/存储权限
</view>
</uni-popup>
</view>
</template>
<script>
import {
mapState,
mapActions,
mapMutations
} from "vuex"
import permision from '@/utils/permission.js'
export default {
data() {
return {
param: {
content: '',
type_name: '', //反馈类型
order_code: '', //订单号
images: [],
video_url: []
},
navList: [{
title: '订单问题'
},
{
title: '功能问题'
},
{
title: '账号问题'
},
{
title: '操作问题'
},
{
title: 'BUG反馈'
},
{
title: '其他'
},
],
xianshi:2,
navIndex: -1
}
},
computed: mapState({
primaryColor: state => state.config.configInfo.primaryColor,
subColor: state => state.config.configInfo.subColor,
configInfo: state => state.config.configInfo,
userInfo: state => state.user.userInfo,
}),
onLoad() {
this.$util.setNavigationBarColor({
bg: this.primaryColor
})
this.initIndex()
},
onShow(){
plus.android.checkPermission('android.permission.WRITE_EXTERNAL_STORAGE',
granted => {
if (granted.checkResult==-1){
this.xianshi=2
}else{
this.xianshi=1
}
},
error => {
console.error('Error checking permission:', error.message);
}
);
},
methods: {
async initIndex(refresh = false) {
// #ifdef H5
if (!refresh && this.$jweixin.isWechat()) {
await this.$jweixin.initJssdk();
this.$jweixin.wxReady(() => {
this.$jweixin.hideOptionMenu()
})
}
// #endif
},
bindInput(e) {
this.$nextTick(function() {
this.param.content = e.detail.value;
})
},
async checkquanxian(){
let that = this;
if(uni.getSystemInfoSync().platform == 'android') {
plus.android.checkPermission('android.permission.WRITE_EXTERNAL_STORAGE',
granted => {
console.log(1,granted.checkResult)
if (granted.checkResult==-1){
that.$refs.perpopup.open('top')
}else{
that.xianshi=1
}
},
error => {
console.error('Error checking permission:', error.message);
}
);
that.requestAndroidPermission('android.permission.WRITE_EXTERNAL_STORAGE')
}
},
async requestAndroidPermission(permisionID) {
let that = this;
console.log(permision)
var result = await permision.requestAndroidPermission(permisionID);
if(result != 1){
this.recorderAuthModal();
}else{
this.$refs.perpopup.close()
if(that.open_update_info == 0){
return;
}
}
},
recorderAuthModal: function () {
const that = this;
uni.showModal({
title: '温馨提示',
content: '为了提供图片上传的功能,我们需要申请相机/存储权限,请您确认授权,否则无法使用该功能~',
cancelText: '关闭',
confirmText: '去授权',
success(res) {
if (res.confirm) {
that.$refs.perpopup.close();
permision.gotoAppPermissionSetting()
}else{
that.$refs.perpopup.close();
}
}
})
},
imgUpload(e) {
let {
imagelist,
imgtype
} = e;
this.param[imgtype] = imagelist;
},
confirm() {
let {
content,
images,
video_url
} = this.param
let param = this.$util.deepCopy(this.param)
param.type_name = this.navIndex >= 0 && this.navList[this.navIndex].title
if (images.length) {
param.images = images.map(item => {
return item.path
})
}
if (video_url.length) {
param.video_url = video_url[0].path
}
if (!param.type_name) {
return this.$util.showToast({
title: '请选择反馈类型'
})
}
if (!content.trim()) {
return this.$util.showToast({
title: '请输入反馈内容'
})
}
this.$util.showLoading()
this.$api.mine.addFeedback(param).then(res => {
this.$util.hideAll()
this.$util.goUrl({
url: `/user/pages/feedback/success`,
openType: 'redirectTo'
})
})
},
getNavIndex(index) {
this.navIndex = index
},
getInput(e) {
this.$nextTick(function() {
this.param.order_code = e.detail.value.replace(/\D/g, '')
})
}
}
}
</script>
<style lang="scss">
.box-item {
.box-item-title {
padding-top: 40rpx;
}
.box-item-cont {
height: 110rpx;
input {
width: 100%;
height: 100%;
}
}
.c-5A677E {
color: #5A677E;
}
.nav-item {
width: calc((100% - 40rpx) / 3);
height: 68rpx;
line-height: 68rpx;
border-radius: 68rpx;
}
}
.permissions_box{
padding: 100rpx 30rpx;
font-size: 30rpx;
line-height: 50rpx;
background-color: #fff;
}
</style>