From ed5d47ad987f2a20f33fbd5cc64dbcdb208f5e15 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期一, 26 八月 2024 11:31:53 +0800 Subject: [PATCH] add 意见反馈 --- sub_pages/customer/self/feedback.vue | 214 +++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 174 insertions(+), 40 deletions(-) diff --git a/sub_pages/customer/self/feedback.vue b/sub_pages/customer/self/feedback.vue index 87060aa..ee79494 100644 --- a/sub_pages/customer/self/feedback.vue +++ b/sub_pages/customer/self/feedback.vue @@ -13,6 +13,10 @@ <view class="name">回复内容:{{ item.reply || '-'}}</view> <view class="name">回复时间:{{ item.replyTime || '-' }}</view> </view> + <view class="line-gray"></view> + <view class="component-buttons"> + <view class="button-1" @click="toDetail(item)">查看详情</view> + </view> </view> </view> <footer-msg :more="page.total>0&&page.total>page.current*page.size&&list.length>0"></footer-msg> @@ -25,30 +29,65 @@ </view> - <!-- <uni-popup ref="popup" type="bottom"> + <uni-popup ref="popup" type="bottom"> <view class="component-popup_input_all"> - <view class="text-center m-b-40" style="font-size: 48rpx;font-weight: 600;">填写投诉/反馈内容</view> - <view v-for="(item,i) in level_columns" :key="i" class="m-t-20"> - <view class="m-t-12 flex value-items"> - <view class="value-item" @click="()=>{ - if(each.value!==query.value){ - query.level = each.value - query.levelStr = each.label - refreshList() - $refs.popup.close() - } - }" :class="[query.level==each.value?'cur':'']" v-for="(each, j) in item" :key="j"> - {{ each.label || '-' }} + + + <view class="close-parent"> + 填写投诉/反馈内容 + <uni-icons class="close" type="closeempty" @click="$refs.popup.close()"></uni-icons> + </view> + + <view class="submit form"> + <view class="form-item" style="height: unset;"> + <view class="form-item-label require" style="min-width: 120rpx;margin-right: 10rpx;"> + 类型 + </view> + <view class="form-item-value flex value-items"> + <view class="value-item" @click="()=>{ + if(submitForm.type!==each.value){ + submitForm.type = each.value + } + }" :class="[submitForm.type==each.value?'cur':'']" v-for="(each, j) in type_columns" :key="j"> + {{ each.label || '-' }} + </view> + </view> + </view> + + <view class="form-item"> + <view class="form-item-label require"> + 内容 + </view> + <view class="form-item-value"> + <input v-model="submitForm.feedBack" placeholder="填写投诉/反馈内容" class="form-input"></input> + </view> + </view> + <view class="form-item"> + <view class="form-item-label require"> + 图片 + </view> + <view class="form-item-value m-l-a m-r-0"> + <view class="t-red" @click="uploadCheckImage()">上传</view> + </view> + </view> + <view class="flex p20" v-if="submitForm.pictures&&submitForm.pictures.length>0"> + <view class="m-t-12 m-r-10 " v-for="(timg,index) of submitForm.pictures" :key="index"> + <image class="check-img" :src="timg" @click.stop="previewImg(timg)"> + </image> + <view class="t-red text-center" @click.stop="deleteCheckImage(index)">删除</view> </view> </view> </view> - <view class="button-space"></view> - <view> - <view class="button-green" @click="$refs.popup.close()">关闭 - </view> + + <!-- <view class="line-gray"></view> --> + + <view class="component-buttons m-t-20" style="width: unset;"> + <view class="button-1 m-auto" @click="$refs.popup.close()">关闭</view> + <view class="button-0 m-auto" @click="submit">提交</view> </view> </view> - </uni-popup> --> + + </uni-popup> </view> </template> @@ -56,7 +95,10 @@ <script> export default { data() { - return {} + return { + submitForm: {}, + type_columns: [], + } }, async onPullDownRefresh() { await this.refreshList() @@ -68,36 +110,120 @@ async onLoad() { this.listApi = '/api/feedback/my/feedback/list' this.getList() + this.$http.request('get', '/api/code/value', { + params: { + type: 'feedback_type' + } + }).then(res => { + var data = res.data + this.type_columns = data || [] + + }) }, methods: { - async addFeedback() { - const res = await this.$message.confirm('', { - editable: true, - title: '请填写投诉/反馈内容' + toDetail(item) { + uni.navigateTo({ + url: `/sub_pages/customer/self/feedback-detail?id=${item.id}` }) - if (res.content && res.confirm) { - // 发送请求 - if (!res.content) { - this.$message.showToast('未填写内容') - } else { - this.$message.showLoading() - const { - code - } = await this.$http.request('post', '', { - data: { - feedBack: res.content + }, + async deleteCheckImage(index) { + await this.$message.confirm('确定删除吗') + this.submitForm.pictures.splice(index, 1) + }, + uploadCheckImage() { + let that = this + uni.chooseImage({ + count: 1, // 最多可以选择的图片张数,默认9 + sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 + sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 + success: function(res) { + let errMsg = res.errMsg + let tempFiles = res.tempFiles + if (errMsg === 'chooseImage:ok') { + if (tempFiles[0].size > 1024 * 1024 * 5) { + that.$message.confirm('图片最多支持5M大小,超出大小限制') + return } - }) - this.$message.hideLoading() - if (code == 0) { - await this.refreshList() - this.$message.showToast('提交成功') + that.$message.showLoading() + that.$http.upload(tempFiles[0].path).then(async res => { + console.log('res1', res) + var pic = res.data && res.data.length > 0 && res.data[ + 0] + .url || '' + that.$message.hideLoading() + that.submitForm.pictures.push(pic) + that.$forceUpdate() + }).catch(res => { + that.$message.hideLoading() + console.error(res) + }) } } + }) + }, + async addFeedback() { + this.submitForm = { + feedBack: '', + type: '', + pictures: [], + } + this.$refs.popup.open() + + // const res = await this.$message.confirm('', { + // editable: true, + // title: '请填写投诉/反馈内容' + // }) + // if (res.content && res.confirm) { + // // 发送请求 + // if (!res.content) { + // this.$message.showToast('未填写内容') + // } else { + // this.$message.showLoading() + // const { + // code + // } = await this.$http.request('post', '', { + // data: { + // feedBack: res.content + // } + // }) + // this.$message.hideLoading() + // if (code == 0) { + // await this.refreshList() + // this.$message.showToast('提交成功') + // } + // } - } else { + // } else { + // } + }, + + async submit() { + console.log('submitForm',this.submitForm) + if (!this.submitForm.type) { + this.$message.showToast('未选择类型') + return + } + if (!this.submitForm.feedBack) { + this.$message.showToast('未填写内容') + return + } + this.$message.showLoading() + const { + code + } = await this.$http.request('post', '/api/feedback/page/new', { + data: { + feedBack: this.submitForm.feedBack, + type: this.submitForm.type, + pictures: JSON.stringify(this.submitForm.pictures) + } + }) + this.$message.hideLoading() + if (code == 0) { + this.$refs.popup.close() + await this.refreshList() + this.$message.showToast('提交成功') } } @@ -163,4 +289,12 @@ } } } + .component-popup_input_all{ + .check-img { + width: 96rpx; + height: 96rpx; + border-radius: 4rpx; + border: 2rpx dashed #CECECE; + } + } </style> \ No newline at end of file -- Gitblit v1.9.3