210 lines
5.5 KiB
Vue
210 lines
5.5 KiB
Vue
<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">
|
||
<upload @upload="imgUpload" :imagelist="param.images" imgtype="images" @del="imgUpload" text="上传图片"
|
||
:imgsize="3"></upload>
|
||
</view>
|
||
<view class="box-item mt-md">
|
||
<upload @upload="imgUpload" @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>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
mapState,
|
||
mapActions,
|
||
mapMutations
|
||
} from "vuex"
|
||
export default {
|
||
data() {
|
||
return {
|
||
param: {
|
||
content: '',
|
||
type_name: '', //反馈类型
|
||
order_code: '', //订单号
|
||
images: [],
|
||
video_url: []
|
||
},
|
||
navList: [{
|
||
title: '订单问题'
|
||
},
|
||
{
|
||
title: '功能问题'
|
||
},
|
||
{
|
||
title: '账号问题'
|
||
},
|
||
{
|
||
title: '操作问题'
|
||
},
|
||
{
|
||
title: 'BUG反馈'
|
||
},
|
||
{
|
||
title: '其他'
|
||
},
|
||
],
|
||
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()
|
||
},
|
||
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;
|
||
})
|
||
},
|
||
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;
|
||
}
|
||
}
|
||
</style>
|