对接烟台app的h5页面
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.

582 lines
13 KiB

<template>
<view>
<view class="report">
<view class="report-time">
{{ myReportDetail.happenTime }}
</view>
<view class="report-content">
{{ myReportDetail.eventContent }}
</view>
<view>
<!-- <topic-audio
v-if="voiceList.length > 0"
:url="voiceList[0].attachmentUrl"
:duration="voiceList[0].duration"
onAudioDel="handleAudioDel"
:show-del="false"
:disabled="true"
/> -->
<audio v-if="voiceList.length > 0" id="audio1" :src="voiceList[0].attachmentUrl" type="audio/webm"
controls></audio>
</view>
<view class="report-image">
<image :src="item" :data-value="index" @click="previewImage"
v-for="(item, index) in myReportDetail.imageList" :key="index"></image>
</view>
<view class="report-address">
<text>地址</text>
<text>{{ myReportDetail.address }}</text>
</view>
</view>
<view class="reply" v-if="replyList && replyList.length > 0">
<view class="reply-input" v-if="myReportDetail.replyFlag">
<textarea placeholder="请输入补充内容" onInput="handleReply" maxlength="200" :value="reply"></textarea>
<view @click="replyBtn">确定</view>
</view>
<view class="reply-block" v-for="(item, index) in replyList" :key="index">
<view class="reply-title">{{ epmetUserId == item.createdBy ? '我' : item.userShowName }}回复:</view>
<view class="reply-time">
{{ item.createdTime }}
</view>
<view class="reply-content">
{{ item.content }}
</view>
</view>
</view>
<view class="handle item" v-if="processData">
<view class="item-title">处理状态</view>
<view class="handle-content">
<view class="handle-left">
<text></text>
<text></text>
</view>
<view v-if="processData.type == 'demand'" class="handle-right">
<view class="handle-right-title">{{ processData.processName }}</view>
<view class="handle-right-time">
{{ processData.processTime }}
</view>
<view class="handle-right-item" v-if="processData.processName == '转服务'">
<view>
<text></text>
<text></text>
<text></text>
<text></text>
</view>
<text>:</text>
<text>{{ processData.serviceTime }}</text>
</view>
<view class="handle-right-item" v-if="processData.processName == '需求完成'">
<view>
<text></text>
<text></text>
<text></text>
</view>
<text>:</text>
<text>{{ processData.serviceParty }}</text>
</view>
<view class="handle-right-item" v-if="processData.processName == '需求完成'">
<view style="width: 200rpx">
<text></text>
<text></text>
<text></text>
<text></text>
<text></text>
<text></text>
</view>
<text>:</text>
<text style="width: 60%">{{ processData.actualServiceTime }}</text>
</view>
</view>
<view v-else class="handle-right">
<view class="handle-right-title">{{ processData.processName }}</view>
<view class="handle-right-time">
{{ processData.processTime }}
</view>
<view class="handle-right-item">
<view>
<text></text>
<text></text>
<text></text>
<text></text>
</view>
<text>:</text>
<text>{{ processData.departmentName }}</text>
</view>
<view class="handle-right-item">
<view>
<text></text>
<text></text>
</view>
<text>:</text>
<text>{{ processData.publicReply }}</text>
</view>
</view>
</view>
</view>
<view class="satisfaction item" v-if="myReportDetail.status == 'closed_case'">
<view class="item-title">满意度评价</view>
<!--<view class="satisfaction-content"><view class="{{satisfaction == 'bad'?'check-block':''}}" @click="common" data-value="bad"><image src="../../data/images/report/satisfied_1.jpg" a:if="{{satisfaction == 'bad'}}" /><image src="../../data/images/report/satisfied_1_no.png" a:else /><view>
不满意</view></view><view class="{{satisfaction == 'good'?'check-block':''}}" @click="common" data-value="good"><image src="../../data/images/report/satisfied_2.jpg" a:if="{{satisfaction == 'good'}}" /><image src="../../data/images/report/satisfied_2_no.png" a:else /><view>
基本满意</view></view><view class="{{satisfaction == 'perfect'?'check-block':''}}" @click="common" data-value="perfect"><image src="../../data/images/report/satisfied_3.png" a:if="{{satisfaction == 'perfect'}}" /><image src="../../data/images/report/satisfied_3_no.jpg" a:else /><view>
非常满意</view></view></view> -->
<view>
<view class="stars">
<view class="stars-click">
<image class="shop-score-star"
:src="item.id > starId ? '../../data/images/report/no_star.png' : '../../data/images/report/star.png'"
@click="score_xing" :data-index="index" v-for="(item, index) in stars" :key="index"></image>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import topicAudio from '../../components/topic-audio/topic-audio';
// import { ddSdk } from './dingtalk-jsapi/lib/ddSdk';
import {
myreportdetail,
replylist,
process,
comment,
resiReply
} from '../../utils/api/customerApi.js';
import {formatYYMMDDDate} from '../../utils/date';
import * as userTools from '../../utils/user';
const app = getApp();
export default {
components: {
topicAudio
},
data() {
return {
icEventId: null,
gridId: null,
myReportDetail: {},
replyList: [],
processData: null,
reply: '',
satisfaction: null,
voiceList: [],
epmetUserId: null,
stars: [{
id: 1
},
{
id: 2
},
{
id: 3
},
{
id: 4
},
{
id: 5
}
],
starId: 0,
attachmentUrl: '',
duration: ''
};
},
async onLoad(option) {
let userInfo = userTools.getStoreUserInfo();
this.setData({
icEventId: option.id,
gridId: option.gridId,
epmetUserId: userInfo.epmetUserId
});
this.reportDetailFun();
this.replyFun();
this.processFun();
},
methods: {
score_xing(e) {
if (this.starId != 0) {
return;
}
let starId = e.currentTarget.dataset.index + 1;
this.setData({
starId: starId
});
uni.confirm({
title: '温馨提示',
content: '提交当前评价?',
confirmButtonText: '确定',
cancelButtonText: '取消',
success: async (result) => {
if (result.confirm) {
const {
code
} = await comment({
satisfaction: this.starId,
icEventId: this.icEventId
});
if (code == 0) {
uni.showToast({
type: 'success',
content: '评价成功'
});
this.reportDetailFun();
}
} else {
this.setData({
starId: 0
});
}
}
});
},
// 详情
async reportDetailFun() {
const {
data
} = await myreportdetail({
icEventId: this.icEventId
});
console.log('data::', data);
this.setData({
myReportDetail: data,
starId: data.satisfaction ? data.satisfaction : 0,
voiceList: data.voiceList
});
},
// 回复列表
async replyFun() {
const {
data
} = await replylist({
icEventId: this.icEventId
});
this.setData({
replyList: data
});
},
// 处理事件
async processFun() {
const {
data
} = await process({
icEventId: this.icEventId
});
if (Array.isArray(data) && data.length > 0) {
this.setData({
processData: data[0]
});
let time = formatYYMMDDDate(this.processData.processTime);
this.setData({
['processData.processTime']: time
});
} else {
this.setData({
processData: null
});
}
},
// 回复
handleReply(e) {
this.setData({
reply: e.detail.value
});
},
async replyBtn() {
let data = {
content: this.reply,
icEventId: this.icEventId
};
const {
code
} = await resiReply(data);
if (code == 0) {
uni.showToast({
type: 'success',
content: '回复成功'
});
this.setData({
reply: ''
});
this.reportDetailFun();
this.replyFun();
}
},
// 评价
common(e) {
if (this.satisfaction != '') {
return;
}
const {
value
} = e.currentTarget.dataset;
this.setData({
satisfaction: value
});
uni.confirm({
title: '温馨提示',
content: '提交当前评价?',
confirmButtonText: '确定',
cancelButtonText: '取消',
success: async (result) => {
if (result.confirm) {
const {
code
} = await comment({
satisfaction: this.satisfaction,
icEventId: this.icEventId
});
if (code == 0) {
uni.showToast({
type: 'success',
content: '评价成功'
});
this.reportDetailFun();
}
} else {
this.setData({
satisfaction: ''
});
}
}
});
},
// 预览图片
previewImage(e) {
const {
value
} = e.currentTarget.dataset;
uni.previewImage({
current: value,
urls: this.myReportDetail.imageList
});
}
}
};
</script>
<style>
.report {
background-color: #fff;
width: 100vw;
padding: 30rpx;
box-sizing: border-box;
}
.report-time {
font-size: 26rpx;
color: #999999;
margin: 20rpx 0;
}
.report-content {
font-size: 34rpx;
margin: 20rpx 0 30rpx;
}
.report-image {
width: 100%;
box-sizing: border-box;
}
.report-image image {
width: 30%;
height: 200rpx;
margin: 0 10rpx;
}
.report-address {
color: #666666;
font-size: 26rpx;
margin: 30rpx 0;
}
.reply {
margin: 20rpx 0;
padding: 30rpx;
background-color: #fff;
}
.reply-input {
padding: 0 0 80rpx;
position: relative;
}
.reply-input textarea {
background: #f7f7f7;
font-size: 26rpx;
padding: 10rpx 10rpx 30rpx;
margin: 10rpx 0;
height: 240rpx;
}
.reply-input view {
width: 110rpx;
height: 48rpx;
border-radius: 48rpx;
background: #22BDF0;
color: #fff;
text-align: center;
position: absolute;
bottom: 20rpx;
right: 20rpx;
font-size: 26rpx;
line-height: 48rpx;
}
.reply-title {
font-size: 26rpx;
}
.reply-time {
font-size: 26rpx;
color: #999999;
margin-top: 6rpx;
}
.reply-content {
font-size: 34rpx;
margin: 20rpx 0;
}
.item {
padding: 30rpx;
background-color: #fff;
}
.item .item-title {
font-size: 34rpx;
font-weight: bold;
padding: 0 0 20rpx;
border-bottom: 2rpx solid #e7eeee;
}
.handle-content {
display: flex;
}
.handle-left {
margin-top: 30rpx;
margin-right: 20rpx;
text-align: center;
position: relative;
width: 30rpx;
}
.handle-left text:first-child {
display: inline-block;
width: 20rpx;
height: 20rpx;
background-color: #e60000;
border-radius: 20rpx;
position: absolute;
top: 10rpx;
z-index: 2;
}
.handle-left text:last-child {
display: inline-block;
width: 2rpx;
height: 95%;
background-color: #e7eeee;
position: absolute;
left: 25rpx;
top: 10rpx;
}
.handle-right {
margin-top: 20rpx;
width: 100%;
}
.handle-right-title {
font-weight: bold;
margin: 10rpx 0;
}
.handle-right-time {
font-size: 26rpx;
color: #999999;
margin-bottom: 20rpx;
}
.handle-right-item {
margin: 14rpx 0;
}
.handle-right-item view {
width: 150rpx;
display: inline-block;
color: #999999;
margin-right: 10rpx;
display: flex;
align-items: center;
justify-content: space-between;
float: left;
}
.handle-right-item>text:nth-child(2) {
float: left;
}
.handle-right-item text {
font-size: 34rpx;
}
.handle-right-item>text:last-child {
width: 70%;
display: inline-block;
margin-left: 10rpx;
}
.satisfaction {
margin-top: 20rpx;
width: 100vw;
box-sizing: border-box;
}
.satisfaction-content {
width: 100%;
display: flex;
align-items: center;
justify-content: space-around;
margin-top: 30rpx;
}
.satisfaction-content>view {
text-align: center;
color: #999999;
}
.satisfaction-content image {
width: 60rpx;
height: 60rpx;
margin-bottom: 10rpx;
}
.satisfaction-content .check-block {
color: #333;
}
.stars-click {
display: flex;
align-items: center;
justify-content: center;
margin: 40rpx 0;
}
.shop-score-star {
width: 40rpx;
height: 40rpx;
margin: 0 30rpx;
}
</style>