Commit f39d536d by chenxin

fix:build 追评联调

parent 70a60743
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=/marketing/static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=/marketing/static/fonts/iconfont.css><link rel=stylesheet type=text/css href=/marketing/static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.82355436053be1589f5ff12130dbfa65.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.33.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.02.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.38.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.1.95.js></script><script type=text/javascript src=/marketing/static/js/manifest.5cd98fe2a578164dca04.js></script><script type=text/javascript src=/marketing/static/js/vendor.810e43468685c3e36778.js></script><script type=text/javascript src=/marketing/static/js/main.f2ab219d464b694e3ba1.js></script></body></html> <!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=/marketing/static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=/marketing/static/fonts/iconfont.css><link rel=stylesheet type=text/css href=/marketing/static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.148c1ed03e4f81230d64bd53e089e79e.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.33.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.02.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.38.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.1.95.js></script><script type=text/javascript src=/marketing/static/js/manifest.be55e17c8339bf7384c3.js></script><script type=text/javascript src=/marketing/static/js/vendor.810e43468685c3e36778.js></script><script type=text/javascript src=/marketing/static/js/main.f2ab219d464b694e3ba1.js></script></body></html>
\ No newline at end of file \ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(n,c,a){for(var i,u,f,s=0,d=[];s<n.length;s++)u=n[s],t[u]&&d.push(t[u][0]),t[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(n,c,a);d.length;)d.shift()();if(a)for(s=0;s<a.length;s++)f=o(o.s=a[s]);return f};var n={},t={12:0};function o(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var r=t[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var n=new Promise(function(n,o){r=t[e]=[n,o]});r[2]=n;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+({0:"game",1:"card",2:"wechat",3:"ewash",4:"evaluation",5:"message",6:"ecm",7:"recharge",8:"msg",9:"calllog"}[e]||e)+"."+{0:"347395db295402bd360f",1:"95592c71f3c0b229937e",2:"e04323d416b97e80951a",3:"376f2ae95c81dd1b94e0",4:"a0ccc17424d46200910c",5:"73ec2f1707504c4de588",6:"6d471386e2e38425c8ab",7:"7800a1645705a6640145",8:"4b4e327d76f3e16d4b51",9:"fecc3d1064e01cef69e9"}[e]+".js";var i=setTimeout(u,12e4);function u(){a.onerror=a.onload=null,clearTimeout(i);var r=t[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=u,c.appendChild(a),n},o.m=e,o.c=n,o.d=function(e,r,n){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]); !function(e){var r=window.webpackJsonp;window.webpackJsonp=function(n,c,a){for(var i,u,f,s=0,d=[];s<n.length;s++)u=n[s],t[u]&&d.push(t[u][0]),t[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(n,c,a);d.length;)d.shift()();if(a)for(s=0;s<a.length;s++)f=o(o.s=a[s]);return f};var n={},t={12:0};function o(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var r=t[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var n=new Promise(function(n,o){r=t[e]=[n,o]});r[2]=n;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+({0:"game",1:"card",2:"wechat",3:"ewash",4:"evaluation",5:"message",6:"ecm",7:"recharge",8:"msg",9:"calllog"}[e]||e)+"."+{0:"347395db295402bd360f",1:"95592c71f3c0b229937e",2:"e04323d416b97e80951a",3:"376f2ae95c81dd1b94e0",4:"7b63c99a1cd9351db04a",5:"73ec2f1707504c4de588",6:"6d471386e2e38425c8ab",7:"7800a1645705a6640145",8:"4b4e327d76f3e16d4b51",9:"fecc3d1064e01cef69e9"}[e]+".js";var i=setTimeout(u,12e4);function u(){a.onerror=a.onload=null,clearTimeout(i);var r=t[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=u,c.appendChild(a),n},o.m=e,o.c=n,o.d=function(e,r,n){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file \ No newline at end of file
...@@ -10,7 +10,7 @@ export const latestEvaluationList = params => requests(PREFIX + 'latest-evaluati ...@@ -10,7 +10,7 @@ export const latestEvaluationList = params => requests(PREFIX + 'latest-evaluati
export const changeShowStatus = params => requests(PREFIX + 'change-show-status', params); export const changeShowStatus = params => requests(PREFIX + 'change-show-status', params);
//服务监制--评价管理--列表 立即回复 //服务监制--评价管理--列表 立即回复
export const evaluationReply = params => requests(PREFIX + 'evaluation-reply', params); // export const evaluationReply = params => requests(PREFIX + 'evaluation-reply', params);
//服务监制--评价管理--列表 先判断门店是否存在 //服务监制--评价管理--列表 先判断门店是否存在
export const evaluationStoreExists = params => requests(PREFIX + 'evaluation-store-exists', params); export const evaluationStoreExists = params => requests(PREFIX + 'evaluation-store-exists', params);
...@@ -47,5 +47,14 @@ export const getEvaluateSetting = params => requests(PREFIX + 'evaluate-setting' ...@@ -47,5 +47,14 @@ export const getEvaluateSetting = params => requests(PREFIX + 'evaluate-setting'
//投诉与建议-启用不良评价话务回访自动分配功能--启用/不启用 //投诉与建议-启用不良评价话务回访自动分配功能--启用/不启用
export const setEvaluateSetting = params => requests(PREFIX + 'set-evaluate-setting', params); export const setEvaluateSetting = params => requests(PREFIX + 'set-evaluate-setting', params);
//投诉与建议-追评列表
export const getEvaluateReplyList = params => requests(PREFIX + 'evaluate-detail-list', params);
//投诉与建议-添加追评
export const addEvaluateReply = params => requests(PREFIX + 'reply-evaluation', params);
//投诉与建议-删除回复
export const delEvaluateReply = params => requests(PREFIX + 'delete-evaluate-reply', params);
//投诉与建议-分页列表信息-导出csv //投诉与建议-分页列表信息-导出csv
export const exportProblemsCsv = config.api + PREFIX + 'export-problems-csv'; export const exportProblemsCsv = config.api + PREFIX + 'export-problems-csv';
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
</el-select> </el-select>
<el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.isBad" @change="refresh">不良评价</el-checkbox> <el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.isBad" @change="refresh">不良评价</el-checkbox>
<el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.isContent" @change="refresh">有评语</el-checkbox> <el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.isContent" @change="refresh">有评语</el-checkbox>
<el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.isContent" @change="refresh">有追评</el-checkbox> <el-checkbox class="vertical-middle" size="small" border v-if="$route.meta.type !== 'bad'" :true-label="1" :false-label="0" v-model="listParams.hasReply" @change="refresh">有追评</el-checkbox>
</div> </div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading" element-loading-text="拼命加载中"> <el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading" element-loading-text="拼命加载中">
<el-table-column :show-overflow-tooltip="false" width="90" align="left" prop="showStatus" fixed="left" label="服务号显示"> <el-table-column :show-overflow-tooltip="false" width="90" align="left" prop="showStatus" fixed="left" label="服务号显示">
...@@ -139,7 +139,7 @@ export default { ...@@ -139,7 +139,7 @@ export default {
loading: false, loading: false,
dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()], dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
tableList: [], tableList: [],
listParams: { searchName: '', currentPage: 1, pageSize: 20, isBad: 0, isContent: 0, currentStoreGroupId: '', visiteStatus: -1, beginTime: '', endTime: '' }, listParams: { searchName: '', currentPage: 1, pageSize: 20, isBad: 0, isContent: 0, hasReply: 0, currentStoreGroupId: '', visiteStatus: -1, beginTime: '', endTime: '' },
visiteStatusOptions: [{ value: -1, label: '所有' }, { value: 0, label: '待分配' }, { value: 1, label: '已分配' }, { value: 2, label: '回访结束' }, { value: 3, label: '回访逾期' }, { value: 5, label: '无需回访' }, { value: 6, label: '回访取消' }], // eslint-disable-line visiteStatusOptions: [{ value: -1, label: '所有' }, { value: 0, label: '待分配' }, { value: 1, label: '已分配' }, { value: 2, label: '回访结束' }, { value: 3, label: '回访逾期' }, { value: 5, label: '无需回访' }, { value: 6, label: '回访取消' }], // eslint-disable-line
total: 0, total: 0,
replyShow: false, replyShow: false,
......
<template> <template>
<el-dialog title="查看详情" :visible.sync="show" width="670px" :before-close="close"> <el-dialog title="查看详情" :visible.sync="show" width="670px" :before-close="close">
<div style="pading-left: 15px;"> <div style="pading-left: 15px;" v-loading="loading">
<div class="rpList"> <div class="rpList">
<div v-for="(item, idx) in replyList" :key="idx"> <div v-for="(item, idx) in replyList" :key="idx">
<i class="iconfont sign" :class="`${item.sign ? 'icon-huiyuan-copy blue' : 'icon-kefu1 warning-color'}`"></i> <!-- "replyType": 0, // 回复类型 (0:会员,1:商家) -->
<i class="iconfont sign" :class="`${item.replyType ? 'icon-kefu1 warning-color' : 'icon-huiyuan-copy blue'}`"></i>
<div class="head"> <div class="head">
<p class="name">{{ item.name }}</p> <p class="name">{{ item.replyType ? item.clerkName : item.memberName }}</p>
<p>{{ item.time }}</p> <p>{{ formatDateTimeByType(item.replyTime, 'yyyy-MM-dd-HH-mm') }}</p>
<el-button class="del" type="text">删除</el-button> <div class="del">
<dm-delete @confirm="del(item)" tips="是否删除?" v-if="!['firstEvaluate', 'firstReply'].includes(item.evaluateReplyId)">
<el-button type="text">删除</el-button>
</dm-delete>
</div>
</div> </div>
<div class="content"> <div class="content">
<div class="text">{{ item.text }}</div> <div class="text">{{ item.replyContent }}</div>
<div class="imgl" v-if="item.imgList && item.imgList.length"> <!-- <div class="imgl" v-if="item.imgList && item.imgList.length">
<img v-for="(img, idx) in item.imgList" :key="idx" style="width: 52px; height: 52px;cursor: pointer;" title="点击查看大图" class="mr10" :src="img" preview-title-enable="true" preview-nav-enable="true" @click="showImage(img)" /> <img v-for="(img, idx) in item.imgList" :key="idx" style="width: 52px; height: 52px;cursor: pointer;" title="点击查看大图" class="mr10" :src="img" preview-title-enable="true" preview-nav-enable="true" @click="showImage(img)" />
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>
<div class="empty" v-show="!replyList.length">暂无回复</div>
<el-form :model="form" :rules="rules" ref="form" label-width="0" class="demo-ruleForm"> <el-form :model="form" :rules="rules" ref="form" label-width="0" class="demo-ruleForm">
<p class="mb5 regular-font-color">添加回复:</p> <p class="mb5 regular-font-color">添加回复:</p>
<el-form-item prop="content"> <el-form-item prop="content">
...@@ -32,7 +38,8 @@ ...@@ -32,7 +38,8 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import { evaluationReply } from '@/service/api/evaluationApi.js'; import { formatDateTimeByType } from '@/utils/index.js';
import { addEvaluateReply, getEvaluateReplyList, delEvaluateReply } from '@/service/api/evaluationApi.js';
export default { export default {
props: { props: {
show: { show: {
...@@ -49,20 +56,13 @@ export default { ...@@ -49,20 +56,13 @@ export default {
form: { form: {
content: '' content: ''
}, },
shouldRefresh: false,
loading: false,
rules: { rules: {
content: [{ required: true, message: '请输入回复内容', trigger: 'blur' }, { max: 200, message: '字数不能大于200', trigger: 'blur' }] // eslint-disable-line content: [{ required: true, message: '请输入回复内容', trigger: 'blur' }, { max: 200, message: '字数不能大于200', trigger: 'blur' }] // eslint-disable-line
}, },
srcList: [], srcList: [],
replyList: [ replyList: [],
{ id: 1, name: '管理员', text: '11', time: '11', sign: 0 },
{ id: 2, name: 'ss', text: '22', time: '11', sign: 1, imgList: ['http://image.biaobaiju.com/uploads/20180801/23/1533136201-VtUkzgfLxA.jpg', 'http://www.17qq.com/img_qqtouxiang/77853183.jpeg', 'http://image.biaobaiju.com/uploads/20181004/16/1538640094-ZSrlkKGWcX.jpg'] },
{ id: 3, name: '管理员', text: '33', time: '11', sign: 0 },
{ id: 4, name: 'ss', text: '44', time: '11', sign: 1 },
{ id: 5, name: 'ss', text: '55', time: '11', sign: 0 },
{ id: 6, name: '管理员', text: '66', time: '11', sign: 1 },
{ id: 7, name: 'ss', text: '77', time: '11', sign: 0 },
{ id: 8, name: '管理员', text: '88', time: '11', sign: 1, imgList: ['http://img.qqzhi.com/uploads/2019-02-27/045131967.jpg'] }
],
imgShowFlag: false, imgShowFlag: false,
imgUrl: '' imgUrl: ''
}; };
...@@ -70,19 +70,47 @@ export default { ...@@ -70,19 +70,47 @@ export default {
watch: { watch: {
show(val) { show(val) {
if (val) { if (val) {
let arr = []; // 追评商户和用户评论暂无图片
this.replyList.forEach(v => { // let arr = [];
if (v.sign && v.imgList && v.imgList.length) { // this.replyList.forEach(v => {
arr = arr.concat(v.imgList); // if (v.sign && v.imgList && v.imgList.length) {
} // arr = arr.concat(v.imgList);
}); // }
this.srcList = arr; // });
// this.srcList = arr;
this.getEvaluateReplyList();
} }
} }
}, },
methods: { methods: {
formatDateTimeByType,
del({ evaluateReplyId }) {
this.loading = true;
delEvaluateReply({ evaluateReplyId }).then(res => {
this.loading = false;
if (res.errorCode === 0) {
this.getEvaluateReplyList();
this.$tips({ type: 'success', message: '删除成功' });
} else {
this.$tips({ type: 'warning', message: res.message || '删除失败' });
}
});
},
getEvaluateReplyList() {
this.loading = true;
getEvaluateReplyList({ evaluateId: this.id }).then(res => {
this.loading = false;
this.replyList = res.result || [];
});
},
close() { close() {
if (this.shouldRefresh) {
this.$emit('refresh');
}
this.$refs.form.resetFields(); this.$refs.form.resetFields();
this.replyList = [];
this.srcList = [];
this.shouldRefresh = false;
this.$emit('update:show', false); this.$emit('update:show', false);
}, },
showImage(src) { showImage(src) {
...@@ -98,10 +126,11 @@ export default { ...@@ -98,10 +126,11 @@ export default {
submit(formName) { submit(formName) {
this.$refs[formName].validate(valid => { this.$refs[formName].validate(valid => {
if (valid) { if (valid) {
evaluationReply({ evaluateId: this.id, replyContent: this.form.content }).then(res => { addEvaluateReply({ evaluateId: this.id, replyContent: this.form.content }).then(res => {
if (res.errorCode === 0) { if (res.errorCode === 0) {
this.close(); this.getEvaluateReplyList();
this.$emit('refresh'); this.form.content = '';
this.shouldRefresh = true;
this.$tips({ type: 'success', message: '回复成功' }); this.$tips({ type: 'success', message: '回复成功' });
} else { } else {
this.$tips({ type: 'warning', message: res.message || '回复失败' }); this.$tips({ type: 'warning', message: res.message || '回复失败' });
...@@ -118,7 +147,7 @@ export default { ...@@ -118,7 +147,7 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
.rpList { .rpList {
height: 400px; max-height: 400px;
overflow-y: auto; overflow-y: auto;
> div { > div {
position: relative; position: relative;
...@@ -150,6 +179,7 @@ export default { ...@@ -150,6 +179,7 @@ export default {
overflow: hidden; overflow: hidden;
position: relative; position: relative;
.del { .del {
// float: right;
position: absolute; position: absolute;
right: 0px; right: 0px;
top: 0px; top: 0px;
...@@ -181,4 +211,10 @@ export default { ...@@ -181,4 +211,10 @@ export default {
margin-top: 25px; margin-top: 25px;
padding-left: 40px; padding-left: 40px;
} }
.empty {
text-align: center;
color: #909399;
height: 80px;
line-height: 80px;
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment