Commit b1536ead by 陈羽

update: 销售线索迭代2

parent cd2f9f06
......@@ -16,12 +16,12 @@
<template>
<div v-show="customDialog">
<el-dialog class="app-dialog" title="批量删除" :visible.sync="customDialog" width="600px" :before-close="handleClose">
<div v-if="showTip">
<div v-if="showTip" style="margin-bottom:20px;">
<div role="alert" class="el-alert el-alert--info flex flex-align-start">
<i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content">
<span class="el-alert__title">
删除任务后,会影响任务统计如已完成,完成率,待完成等,请知悉
删除任务后,会影响任务统计如已完成,完成率,待完成等以及销售线索收益,请知悉
</span>
</div>
</div>
......@@ -32,7 +32,7 @@
<span style="color:#2f54eb;font-size:10px;padding-left:10px;" v-if="showTip">删除任务后,会影响任务统计如已完成,完成率,待完成等,请知悉</span>
</div> -->
<el-form ref="form" :model="formData" :rules="rules" label-width="100px" @submit.native.prevent>
<el-form-item v-if="showTab" label="">
<el-form-item v-if="showTab" label="" label-width="0">
<el-radio v-model="formData.delOptFlag" label="0">仅删除逾期任务</el-radio>
<el-radio v-model="formData.delOptFlag" label="1">删除所有待完成任务</el-radio>
</el-form-item>
......
<!--
* @Descripttion: 销售线索-门店任务-任务详情-完成详细信息
* @version: 1.0.0
* @Author: 阿羽
* @Date: 2021-04-13 17:57:01
* @LastEditors: 阿羽
* @LastEditTime: 2021-04-13 17:57:01
-->
<!--
<salesleads-taskinfo :item="item"></salesleads-taskinfo>
import salesleadsTaskinfo from '@/components/review/salesleads-task-info.vue';
-->
<template>
<el-dialog title="完成详情" :visible.sync="dialogVisible" width="600px" @close="close">
<div class="">
<el-form :model="form" :rules="rules" ref="form" label-width="120px" class="demo-form">
<el-form-item label="完成时间" prop="overdueTime"> {{ form.finishTime | formatTimeStamp }}</el-form-item>
<el-form-item label="备注" prop="finishRemark"> {{ form.reason || '' }} </el-form-item>
<el-form-item label="图片" prop="imgUrl">
<template v-for="item in form.taskUrls">
<el-popover placement="right-start" :open-delay="200" width="300" trigger="hover" :key="item">
<img style="display:block;width:100%" :src="item" alt="" />
<el-image slot="reference" style="width: 40px; height: 40px" :src="item" fit="cover"></el-image>
</el-popover>
</template>
</el-form-item>
</el-form>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
taskData: {
type: Object,
default() {
return {};
}
}
},
components: {},
data() {
return {
dialogVisible: true,
form: {
finishTime: null,
reason: '',
taskUrls: []
}
};
},
methods: {
close() {
this.$emit('close');
}
},
watch: {
taskData(newData) {
const that = this;
if (Object.keys(newData).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(newData));
});
}
}
},
mounted() {
const that = this;
if (Object.keys(that.taskData).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(that.taskData));
});
}
}
};
</script>
<style lang="scss" scoped>
>>> .el-dialog__header {
padding: 19px 28px;
}
>>> .el-dialog__body {
padding-top: 10px;
}
>>> .el-form-item {
margin-bottom: 0;
.el-form-item__label {
line-height: 30px;
}
.el-form-item__content {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 30px;
}
.el-popover__reference {
margin-top: 10px;
margin-right: 10px;
border-radius: 4px;
}
}
</style>
......@@ -30,9 +30,9 @@
{{ scope.row.enterpriseName || '--' }}
</template>
</el-table-column>
<el-table-column prop="" label="关联门店" show-overflow-tooltip>
<el-table-column prop="" label="关联门店">
<template slot-scope="scope">
{{ scope.row.storeName || '--' }}
<p>{{ scope.row.storeName || '--' }}<el-tag type="danger" v-if="scope.row.mainStoreFlag">主门店</el-tag></p>
</template>
</el-table-column>
<el-table-column prop="" label="关联时间" show-overflow-tooltip>
......
<template>
<div class="qr-dialog-content" style="opacity: 1;" v-show="value">
<div class="qr-mask" @click.stop="closeDialog"></div>
<div class="qr-dialog border-box">
<div class="qr-dialog-body border-box">
<div class="detail-content border-box">
<div class="detail-content-card detail-content-top">
<div class="task-title">
<p class="font-16 color-242835 font-w-500 lh-23">{{ noticeData.groupSendTaskVO.taskDescription }}</p>
<p class="copyBtn">复制任务内容</p>
</div>
<p class="taskDescription">{{ noticeData.groupSendTaskVO.taskDescription }}</p>
<p class="implementor">执行人:{{ noticeData.groupSendTaskVO.executeClerkName }}</p>
<p class="remain-time">逾期剩余时长:{{ timeStampSpaces(noticeData.groupSendTaskVO.overdueTime) }}</p>
</div>
<div class="detail-content-card detail-content-bottom">
<div class="title">群发素材内容</div>
<ul class="source-material">
<li class="source-material-item" v-for="material in noticeData.materialDTOList" :key="material">
<p class="source-material-item-text" v-if="material.materialType === 1">{{ material.materialContent }}</p>
<template v-else>
<img :src="material.materialType === 5 ? file_icon : material.imgUrl" alt="" />
<p class="source-material-item-title">{{ material.materialTitle }}</p>
</template>
</li>
</ul>
</div>
</div>
<!-- 关闭 -->
<div class="qr-dialog__hd">
<i class="el-icon-plus" @click.stop="closeDialog"></i>
</div>
</div>
</div>
</div>
</template>
<script>
import file_icon from '../../assets/file_icon.png';
export default {
name: 'detail-preview',
props: {
value: {
type: Boolean,
default() {
return false;
}
},
previewData: {
type: Object,
default() {
return {
groupSendTaskVO: {
taskTitle: '', // 任务标题
taskDescription: '', // 任务描述
overdueTime: '', // 逾期期限
executeClerkName: '' // 执行人
},
materialDTOList: [
// {
// materialId: 'b28cb87aa4814e619dd9ac93fb302f8e',
// materialTitle: 12, // 素材标题
// materialType: 1, // 素材类型, 1 : 文本, 2 : 图片, 3 : 网页,4 : 视频, 5 : 文件
// categoryId: -1, // 素材分类
// materialContent: 123, // 素材内容
// staffName: '飞飞哥',
// imgUrl: null, // 图片地址
// wxImgUrl: null, // 微信图片链接
// }
]
};
}
}
},
data() {
return {
file_icon,
noticeData: {
groupSendTaskVO: {
taskTitle: '', // 任务标题
taskDescription: '', // 任务描述
overdueTime: '', // 逾期期限
executeClerkName: '' // 执行人
},
materialDTOList: [
// {
// materialId: 'b28cb87aa4814e619dd9ac93fb302f8e',
// materialTitle: 12, // 素材标题
// materialType: 1, // 素材类型, 1 : 文本, 2 : 图片, 3 : 网页,4 : 视频, 5 : 文件
// categoryId: -1, // 素材分类
// materialContent: 123, // 素材内容
// staffName: '飞飞哥',
// imgUrl: null, // 图片地址
// wxImgUrl: null, // 微信图片链接
// }
]
},
time: null
};
},
methods: {
timeStampSpaces(date) {
if (!date) {
return;
}
let date2 = new Date().getTime();
let date3 = Number(date) - date2; //时间差的毫秒数
if (date3 < 0) {
return '已逾期';
}
//计算出相差天数
let days = Math.floor(date3 / (24 * 3600 * 1000));
//计算出小时数
let leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000));
//计算相差分钟数
let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000));
//计算相差秒数
// let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
// let seconds = Math.round(leave3 / 1000);
return `${days}${hours}小时${minutes}分`;
},
/**
* 关闭预览窗口
*/
closeDialog() {
const that = this;
that.$emit('input', false);
that.$emit('closePreview');
that.noticeData = {
groupSendTaskVO: {
taskTitle: '', // 任务标题
taskDescription: '', // 任务描述
overdueTime: '', // 逾期期限
executeClerkName: '' // 执行人
},
materialDTOList: [
// {
// materialId: 'b28cb87aa4814e619dd9ac93fb302f8e',
// materialTitle: 12, // 素材标题
// materialType: 1, // 素材类型, 1 : 文本, 2 : 图片, 3 : 网页,4 : 视频, 5 : 文件, 6 : 小程序
// categoryId: -1, // 素材分类
// materialContent: 123, // 素材内容
// staffName: '飞飞哥',
// imgUrl: null, // 图片地址
// }
]
};
clearInterval(that.time);
}
},
watch: {
previewData(newData, oldData) {
const that = this;
if (Object.keys(newData).length) {
that.noticeData = JSON.parse(JSON.stringify(newData));
that.time = setInterval(function() {
that.timeStampSpaces(that.previewData.groupSendTaskVO.overdueTime);
}, 60000);
}
}
},
mounted() {
const that = this;
if (Object.keys(that.previewData).length) {
that.noticeData = JSON.parse(JSON.stringify(that.previewData));
that.time = setInterval(function() {
that.timeStampSpaces(that.previewData.groupSendTaskVO.overdueTime);
}, 60000);
}
},
beforeDestroy() {
const that = this;
clearInterval(that.time);
that.time = null;
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.color-242835 {
color: #242835;
}
.lh-20 {
line-height: 20px;
}
.lh-23 {
line-height: 23px;
}
.mb-13 {
margin-bottom: 13px;
}
.qr-mask {
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
cursor: pointer;
}
.detail-content {
width: 100%;
.detail-content-card {
width: 100%;
padding: 15px;
margin-bottom: 10px;
background: #fff;
border-radius: 24px;
box-sizing: border-box;
}
.detail-content-top {
// height: 175px;
.task-title {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
.copyBtn {
width: 96px;
height: 23px;
color: #2c3038;
font-size: 12px;
line-height: 23px;
text-align: center;
border-radius: 12px;
border: 1px solid #cacaca;
}
}
.taskDescription {
height: 60px;
margin-bottom: 13px;
font-size: 14px;
font-weight: 400;
color: #242835;
line-height: 20px;
word-break: break-all;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
text-overflow: ellipsis;
}
.implementor {
margin-bottom: 4px;
font-size: 12px;
font-weight: 400;
color: #7f818a;
line-height: 17px;
}
.remain-time {
font-size: 12px;
font-weight: 400;
color: #fd6b6d;
line-height: 17px;
}
}
.detail-content-bottom {
.title {
font-size: 15px;
font-weight: 500;
color: #242835;
line-height: 21px;
margin-bottom: 15px;
}
.source-material {
width: 100%;
max-height: 470px;
overflow: scroll;
.source-material-item {
display: flex;
justify-content: flex-start;
align-items: center;
min-height: 70px;
padding: 10px;
margin-bottom: 8px;
background: #f4f4f9;
box-sizing: border-box;
img {
width: 50px;
height: 50px;
margin-right: 10px;
}
.source-material-item-title {
font-size: 16px;
font-weight: 500;
color: #242835;
line-height: 23px;
}
.source-material-item-text {
font-size: 16px;
font-weight: 400;
color: #242835;
line-height: 23px;
}
}
}
}
}
.qr-dialog {
position: fixed;
z-index: 5000;
width: 387px;
height: 792px;
padding: 58px 12px 55px 12px;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background-color: #fff;
text-align: center;
border-radius: 3px;
background: url('../../assets/iphone.png') no-repeat;
background-size: 100%;
.qr-dialog-body {
position: relative;
width: 100%;
height: 100%;
padding: 10px;
text-align: left;
// background: #ccc;
background: rgba(241, 242, 247, 1);
overflow-y: auto;
.notice-body {
padding: 20px 0;
font-size: 12px;
white-space: pre-wrap;
word-break: break-all;
>>> video {
width: 100%;
height: auto;
}
>>> img {
width: 100%;
height: auto;
}
>>> p {
iframe {
width: 100%;
height: auto;
}
}
}
}
}
.qr-dialog__hd {
position: fixed;
width: 45px;
height: 45px;
border: 1px solid rgba(255, 255, 255, 1);
border-radius: 50%;
bottom: -85px;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
z-index: 5001;
i {
position: absolute;
top: 0;
right: 0;
display: block;
width: 45px;
height: 45px;
line-height: 45px;
text-align: center;
color: #fff;
font-size: 20px;
cursor: pointer;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
}
</style>
......@@ -12,24 +12,24 @@
-->
<template>
<el-dialog title="完成详情" :visible.sync="dialogVisible" width="600px" @close="close">
<div class="">
<el-form :model="form" :rules="rules" ref="form" label-width="120px" class="demo-form">
<el-form-item label="完成时间" prop="overdueTime"> {{ form.finishTime | formatTimeStamp }}</el-form-item>
<el-form-item label="完成方式" prop="touchTypes"> {{ form.touchFinishTypeName }}</el-form-item>
<el-form-item label="备注" prop="finishRemark"> {{ form.finishRemark || '' }} </el-form-item>
<el-form-item label="图片" prop="imgUrl">
<template v-for="item in form.remarkImgUrl">
<el-popover placement="right-start" :open-delay="200" width="300" trigger="hover" :key="item">
<img style="display:block;width:100%" :src="item" alt="" />
<el-image slot="reference" style="width: 40px; height: 40px" :src="item" fit="cover"></el-image>
</el-popover>
</template>
</el-form-item>
</el-form>
<div>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane :label="`${tab.label}(${countList[tab.type]})`" :name="tab.name" v-for="tab in tabsList" :key="tab.name"></el-tab-pane>
</el-tabs>
<el-table :data="tableData" style="width: 100%" height="200" v-loading="loading">
<el-table-column prop="memberName" label="会员姓名" show-overflow-tooltip> </el-table-column>
<el-table-column prop="sendStatus" label="发送状态" width="176">
<template slot-scope="scope"><i :class="['dot', statusClassName[scope.row.sendStatus]]"></i>{{ statusLabel[scope.row.sendStatus] }}</template>
</el-table-column>
<el-table-column prop="failReasonDescription" label="原因" show-overflow-tooltip> </el-table-column>
</el-table>
<el-pagination background layout="prev, pager, next" :total="total" style="text-align:right;" @current-change="handlePageChange"> </el-pagination>
</div>
</el-dialog>
</template>
<script>
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
export default {
props: {
item: {
......@@ -42,18 +42,108 @@ export default {
components: {},
data() {
return {
loading: false,
dialogVisible: true,
form: {
finishTime: null,
finishRemark: '',
touchFinishTypeName: '',
remarkImgUrl: []
activeName: '0',
pageParams: {
pageNum: 1,
pageSize: 5,
enterpriseId: '',
taskId: ''
},
total: 0,
tabsList: [
{
label: '全部',
name: '0',
params: null,
type: 'totalCount'
},
{
label: '待发送',
name: '1',
params: 0,
type: 'waitSendCount'
},
{
label: '已发送',
name: '2',
params: 1,
type: 'successCount'
},
{
label: '发送失败',
name: '3',
params: 2,
type: 'failCount'
}
],
countList: {
totalCount: 0,
waitSendCount: 0,
successCount: 0,
failCount: 0
},
tableData: [],
// 0未发送 1已发送 2发送失败
statusClassName: ['bg-C0C4CC', 'bg-33AF4A', 'bg-F5222D'],
statusLabel: ['未发送', '已发送', '发送失败']
};
},
methods: {
close() {
this.$emit('close');
},
handleTabClick(tab, event) {
this.pageParams.pageNum = 1;
this.getTableList();
},
handlePageChange(pageNum) {
this.pageParams.pageNum = pageNum;
this.getTableList();
},
getNum() {
const that = this;
const para = { ...that.pageParams };
getRequest('/haoban-task-manage-web/market/clue/web/member-send-count', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
this.countList = Object.assign(this.countList, resData.result);
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getTableList() {
const that = this;
that.loading = true;
const para = Object.assign({}, that.pageParams, { sendStatus: that.tabsList[this.activeName].params });
getRequest('/haoban-task-manage-web/market/clue/web/task-member-list', para)
.then(res => {
let resData = res.data;
that.tableData = [];
if (resData.errorCode == 1 && resData.result) {
that.tableData = Array.isArray(resData.result.list) ? resData.result.list : [];
that.total = resData.result.pageInfo.total || 0;
} else {
errMsg.errorMsg(resData);
}
that.loading = false;
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
......@@ -61,7 +151,9 @@ export default {
const that = this;
if (Object.keys(newData).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(newData));
that.pageParams = Object.assign({}, that.pageParams, JSON.parse(JSON.stringify(newData)));
that.getNum();
that.getTableList();
});
}
}
......@@ -70,34 +162,32 @@ export default {
const that = this;
if (Object.keys(that.item).length) {
that.$nextTick(() => {
that.form = JSON.parse(JSON.stringify(that.item));
that.pageParams = Object.assign({}, that.pageParams, JSON.parse(JSON.stringify(that.item)));
that.getNum();
that.getTableList();
});
}
}
};
</script>
<style lang="scss" scoped>
.bg-C0C4CC {
background: #c0c4cc;
}
.bg-33AF4A {
background: #33af4a;
}
.bg-F5222D {
background: #f5222d;
}
>>> .el-dialog__header {
padding: 19px 28px;
}
>>> .el-dialog__body {
padding-top: 10px;
}
>>> .el-form-item {
margin-bottom: 0;
.el-form-item__label {
line-height: 30px;
}
.el-form-item__content {
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 30px;
}
.el-popover__reference {
margin-top: 10px;
margin-right: 10px;
border-radius: 4px;
}
>>> .el-table__empty-block {
min-height: 150px;
}
</style>
......@@ -25,7 +25,7 @@
</el-table-column>
<el-table-column prop="link" label="页面路径" show-overflow-tooltip></el-table-column>
<el-table-column prop="" label="关联小程序" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.link }}</template>
<template slot-scope="scope">{{ scope.row.materialDesc }}</template>
</el-table-column>
<el-table-column prop="" label="编辑人" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.staffName }}</template>
......
......@@ -128,7 +128,8 @@ export default {
}, 300),
postSave() {
const that = this;
let data = {
let data = {};
data = {
materialIds: that.editRow.materialId,
toWxEnterpriseIds: that.form.checkedList.join(',')
};
......
......@@ -11,19 +11,25 @@
<div class="daily-set-content boder-box">
<div class="table-condition flex flex-space-between m-b-23">
<div class="table-condition-left">
<el-select v-model="conditionObj.completed" placeholder="请选择" class="w-135" @change="changeSelect"> <el-option v-for="item in completedOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select><el-select v-model="conditionObj.overdue" placeholder="请选择" class="w-135 m-l-10" @change="changeSelect"> <el-option v-for="item in overOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select
><el-select v-if="!$route.query.ecmId" v-model="conditionObj.taskType" placeholder="请选择" class="w-105 m-l-10" @change="changeSelect">
<el-select v-model="conditionObj.completed" placeholder="请选择" class="w-135" @change="changeSelect">
<el-option v-for="item in completedOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-select v-model="conditionObj.overdue" placeholder="请选择" class="w-135 m-l-10" @change="changeSelect">
<el-option v-for="item in overOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-select v-if="!$route.query.ecmId" v-model="conditionObj.taskType" placeholder="请选择" class="w-105 m-l-10" @change="changeSelect">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button><el-button class="m-l-10" type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="danger" @click="multDel">批量删除</el-button>
<el-button class="m-l-10" type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
</div>
</div>
<el-table class="select-table" ref="multipleTable" v-loading="loading" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="45"> </el-table-column>
<el-table-column width="25">
<template slot="header" slot-scope="scope">
<template slot="header">
<el-dropdown style="line-height: 10px; padding: 0; margin-left: -15px; transform: translateY(4px); -webkit-transform: translateY(4px);" @command="handleCommand" placement="bottom-start">
<span class="el-dropdown-link"><i class="iconfont icongengduo"></i> </span>
<el-dropdown-menu slot="dropdown">
......@@ -32,15 +38,11 @@
</el-dropdown-menu>
</el-dropdown>
</template>
<template slot-scope="scope"> </template>
</el-table-column>
<el-table-column prop="title" label="任务标题" show-overflow-tooltip></el-table-column>
<el-table-column label="指派对象" show-overflow-tooltip width="170">
<template slot-scope="scope">
<div class="flex flex-pack-center flex-start">
<!-- <div :class="['image-wrap flex flex-align-center flex-pack-center', !!scope.row.headImgUrl ? 'bg-eceaeb' : 'bg-82c5ff']">
<img v-if="!!scope.row.headImgUrl" :src="scope.row.headImgUrl" alt="" />
<i v-else class="iconfont icon-yewuduanmorentouxian"></i>
</div> -->
<el-popover placement="top-start" width="300" trigger="hover" @show="showSingleInfo(scope.row.clerkId)">
<div class="apply-info-detail">
<div class="flex">
......@@ -76,6 +78,47 @@
</div>
</template>
</el-table-column>
<el-table-column label="会员" show-overflow-tooltip width="170">
<template slot-scope="scope">
<div class="flex flex-pack-center flex-start">
<!-- <el-popover placement="top-start" width="300" trigger="hover" @show="showSingleInfo(scope.row.clerkId)">
<div class="apply-info-detail">
<div class="flex">
<div class="apply-info-img flex-align-center flex-pack-center bg-82C5FF ">
<i v-if="!userData.headImg" class="iconfont icon-yewuduanmorentouxian"></i>
<img v-else :src="userData.headImg" alt="img" />
</div>
<div class="flex flex-column apply-info-right flex-space-between">
<div class="apply-info-name">
{{ userData.staffName || '--' }} ( {{ userData.position || '--' }})
</div>
<div class="apply-info-phone">
<span class="w-80">手机号:</span><span class="w-130">{{ userData.nationCode == '86' ? userData.phoneNumber : '+' + userData.nationCode + '-' + userData.phoneNumber }}</span>
</div>
<div class="apply-info-store">
<span class="w-80">所属部门:</span><span class="w-130">{{ userData.departmentName || '--' }}</span>
</div>
</div>
</div>
</div>
<div slot="reference">
<div class="flex flex-align-center flex-pack-center bg-82C5FF table-head-pic cursor-pointer">
<i v-if="!scope.row.headImgUrl" class="iconfont icon-yewuduanmorentouxian"></i>
<img v-else :src="scope.row.headImgUrl" alt="img" />
</div>
</div>
</el-popover> -->
<div class="flex flex-align-center flex-pack-center bg-82C5FF table-head-pic cursor-pointer">
<i v-if="!scope.row.memberHeadUrl" class="iconfont icon-yewuduanmorentouxian"></i>
<img v-else :src="scope.row.memberHeadUrl" alt="img" />
</div>
<div class="clerk-info flex flex-column flex-space-between m-l-16" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<p class="font-14 color-303133" style="line-height: 18px;overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">{{ scope.row.memberName }}</p>
<p class="font-14 color-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.memberCardNo }}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="任务类型">
<template slot-scope="scope">
<div>{{ scope.row.taskType == '0' ? '不良评价' : scope.row.taskType == '5' ? '会话任务' : '话务任务' }}</div>
......@@ -97,7 +140,7 @@
<template slot-scope="scope">{{ scope.row.isOverTime }}</template>
</el-table-column>
<el-table-column label="完成情况">
<template slot="header" slot-scope="scope">
<template slot="header">
<el-tooltip class="item" effect="light" placement="right">
<div slot="content">
完成情况包含3种<br />
......@@ -113,18 +156,18 @@
{{ scope.row.isCompleted }}
</template>
</el-table-column>
<el-table-column label="完成时间">
<!-- <el-table-column label="完成时间">
<template slot-scope="scope">
<div class="line-18">{{ scope.row.finishTime | formatTimeYMD }}</div>
<div class="line-18">{{ scope.row.finishTime | formatTimeHMS }}</div>
</template>
</el-table-column>
<el-table-column label="提交人">
</el-table-column> -->
<!-- <el-table-column label="提交人">
<template slot-scope="scope">
<div>{{ scope.row.operationStaffName || '--' }}</div>
</template>
</el-table-column>
<el-table-column label="备注">
</el-table-column> -->
<!-- <el-table-column label="备注">
<template slot-scope="scope">
<el-popover v-if="scope.row.reason" placement="top-start" title="" width="200" trigger="hover" :content="scope.row.reason">
<i slot="reference" class="el-icon-chat-dot-square cursor-pointer color-909399" style="font-size: 20px;"></i>
......@@ -140,11 +183,12 @@
<img slot="reference" :src="item" alt="" class="task-imgs" style="" />
</el-popover>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="操作" fixed="right" width="110">
<template slot-scope="scope">
<el-button type="text" @click="handleDel(scope.$index, scope.row)">删除</el-button>
<el-button type="text" @click="getPreviewData(scope.$index, scope.row)">预览</el-button>
<el-button type="text" @click="getTaskDetail(scope.row)">完成详情</el-button>
</template>
</el-table-column>
</el-table>
......@@ -155,12 +199,14 @@
<multiple-del :showDialog="showDialog" :detailFlag="true" @hideDialog="hideDialog" :showTip="true"> </multiple-del>
<qrcode-dialog ref="qrcodePreview" v-model="dialogVisible"></qrcode-dialog>
<detail-preview ref="detailPreview" :previewData="previewData" v-model="previewVisible" @closePreview="closePreview"></detail-preview>
<task-detail v-if="taskDetailVisible" @close="closeTaskDetail" :taskData="taskDetail"></task-detail>
</div>
</template>
<script>
import multipleDel from '@/components/app/cloudDaily/multiple-del.vue';
import qrcodeDialog from '@/components/app/qrcode-dialog.vue';
import detailPreview from '@/components/app/detail-preview.vue';
import taskDetail from '@/components/app/task-detail.vue';
import { getRequest, postRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error';
import showMsg from '@/common/js/showmsg';
......@@ -268,7 +314,9 @@ export default {
postion: '',
departmentName: '',
headImg: ''
}
},
taskDetailVisible: false,
taskDetail: {}
};
},
computed: {},
......@@ -342,7 +390,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
.catch(function (error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -372,7 +420,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
.catch(function (error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -451,7 +499,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
.catch(function (error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -485,7 +533,7 @@ export default {
*/
handleDel(index, row) {
const that = this;
this.$confirm('<div>确定要删除吗?</div><div>删除任务后,会影响任务统计如已完成,完成率,待完成等,请知悉</div>', '', {
this.$confirm('<div>确定要删除吗?</div><div>删除任务后,会影响任务统计如已完成,完成率,待完成等以及销售线索收益,请知悉</div>', '', {
customClass: 'top-icon',
closeOnClickModal: false,
dangerouslyUseHTMLString: true,
......@@ -495,7 +543,7 @@ export default {
.then(res => {
that.postDel(index, row);
})
.catch(() => {});
.catch(() => { });
// that
// .$confirm(`确认要删除吗?`, '提示', {
// confirmButtonText: '确定',
......@@ -524,7 +572,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
.catch(function (error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -586,17 +634,25 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
.catch(function (error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getTaskDetail(item) {
this.taskDetail = {...item};
this.taskDetailVisible = true;
},
closeTaskDetail() {
this.taskDetail = {};
this.taskDetailVisible = false;
}
},
watch: {
brandId: function(newData, oldData) {
brandId: function (newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
......@@ -620,7 +676,8 @@ export default {
components: {
multipleDel,
qrcodeDialog,
detailPreview
detailPreview,
taskDetail
}
};
</script>
......
......@@ -18,8 +18,8 @@
1.【话务任务】预计将于5月下旬下线,功能将由【销售线索】替代;<br />
2.【话务任务】下线后,【GIC后台-智能营销】中的“话务”事件也将下线,后续如需针对门店终端下发任务,请通过【GIC后台-智能营销】中的“企微任务”事件下发;<br />
3.【话务任务】下线后,该应用中原本的“会话任务”也会下线,“不良评价回访”任务将转移至其他应用,请知悉<br /> -->
1.预计2021年1月功能更新后将仅保留近一年数据,历史数据将清除。如需保存超过一年历史数据,请于1月前导出保存<br />
2.因任务数据量过大,门店视图统计数据改为每日刷新一次;<br />
1.仅统计近一年数据<br />
2.话务任务统计数据每日刷新一次;<br />
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
</span>
</div>
......
......@@ -10,18 +10,21 @@
<div class="app-detail-wrap">
<div class="task-set-content boder-box">
<div class="task-set-cell">
<div class="set-line-item">
<div class="set-line-item flex">
<el-tooltip class="item" effect="dark" content="代理商户默认关闭双向呼叫功能,如需开通请联系达摩运营或实施进行开通" placement="top-start" :open-delay="200">
<span class="set-line-item_title text-right"> <i style="cursor: pointer;font-style: normal;padding-bottom: 2px; border-bottom: 1px dashed rgb(47, 84, 235);" class="font-14 color-606266">话务任务拨打</i></span>
</el-tooltip>
<el-select v-model="setObj.taskCallType" placeholder="请选择" class="w-240" @change="changeSelect"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select><span v-if="setObj.taskCallType == 2" class="font-14 color-909399 p-l-10 set-long-tip">第三方双向呼叫及透传(透传功能暂无法使用,外呼显示号码为固定电话),可监控通话状态。呼叫结算及通话记录存储于GIC计费中心。</span>
<span v-if="setObj.taskCallType == 1" class="font-14 color-909399 p-l-10">导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费。</span>
<el-checkbox-group v-model="setObj.taskCallTypes" @change="taskCallTypeChange">
<el-checkbox :label="item.value" v-for="item in options" :key="item.value">
<el-tooltip class="item" effect="dark" placement="top-start" :open-delay="200">
<template slot="content">
<p v-for="tip in item.tooltips" :key="tip">{{ tip }}</p>
</template>
<i class="tooltips">{{ item.label }}</i>
</el-tooltip>
</el-checkbox>
</el-checkbox-group>
</div>
<!-- <div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">话务任务下发:</span>
<el-input-number controls-position="right" class="w-100" v-model="setObj.overDayJudge" placeholder="请输入内容" :step="1" :step-strictly="true" :min="0" :max="99999999"></el-input-number><span class="font-14 color-606266 p-l-10"></span>
<span class="font-14 color-909399 p-l-15">注:0天即为当天下发,当天完成,1天即为当天下发,次日24:00之前完成</span>
</div> -->
<div class="set-line-item font-0">
<span class="set-line-item_title font-14 color-606266 text-right">话务任务下发:</span>
<div class="inline-block vertical-top">
......@@ -112,16 +115,23 @@ export default {
activeBrand: this.brandId, // 商户(品牌) id
options: [
{
label: '普通电话',
value: 1
label: '企业电话',
value: '2',
tooltips: ['1.对接第三方呼叫中心,外呼显示第三方号码,可监控通话状态。费用结算及通话记录存储于GIC计费中心;', '2.若任务创建时无双向呼叫权限,此项设置勾选也不生效']
},
{
label: '双向透传',
value: 2
label: '私人电话',
value: '1',
tooltips: ['导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费']
},
{
label: '企微会话',
value: '4',
tooltips: ['通过企微会话完成任务,无法监控通话状态。不产生通话费用']
}
],
setObj: {
taskCallType: 1,
taskCallTypes: [],
taskType: 1,
overDayJudge: '',
distributeTypeJudge: '',
......@@ -134,6 +144,9 @@ export default {
},
computed: {},
methods: {
taskCallTypeChange(v) {
console.log(v);
},
/**
* 保存
*/
......@@ -145,7 +158,7 @@ export default {
postSave() {
const that = this;
let para = {
taskCallType: that.setObj.taskCallType,
taskCallTypes: that.setObj.taskCallTypes.join(','),
enterpriseId: that.activeBrand,
taskType: 1,
overDayJudge: that.setObj.overDayJudge,
......@@ -185,8 +198,9 @@ export default {
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
resData.result.relaxTaskJudge = resData.result.relaxTaskJudge == 1 ? true : false;
that.setObj = resData.result;
resData.result.relaxTaskJudge = resData.result.relaxTaskJudge == 1;
const taskCallTypes = typeof resData.result.taskCallTypes === 'string' ? resData.result.taskCallTypes.split(',') : [];
that.setObj = Object.assign({}, resData.result, { taskCallTypes });
return;
}
errMsg.errorMsg(resData);
......@@ -247,6 +261,11 @@ export default {
}
}
}
.flex {
display: flex;
justify-content: flex-start;
align-items: center;
}
.set-line-item_title {
display: inline-block;
width: 120px;
......@@ -267,4 +286,12 @@ export default {
white-space: pre-wrap;
}
}
.tooltips {
cursor: pointer;
font-style: normal;
padding-bottom: 2px;
border-bottom: 1px dashed rgb(47, 84, 235);
font-size: 14px;
color: #606266;
}
</style>
......@@ -30,7 +30,7 @@
</div>
<div class="m-t-20">
<el-table class="select-table" ref="multipleTable" v-loading="loading" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column prop="" label="审核事项" show-overflow-tooltip>
<el-table-column prop="" label="商户列表" show-overflow-tooltip min-width="200">
<template slot-scope="scope">
<div class="ul-li-cell flex">
<div class="cell-img">
......@@ -48,6 +48,21 @@
</div>
</template>
</el-table-column>
<el-table-column prop="" label="企业类型" show-overflow-tooltip>
<template slot-scope="scope"
><span class="color-606266">{{ scope.row.wxEnterpriseType | wxEnterpriseTypeFilter }}</span></template
>
</el-table-column>
<el-table-column prop="" label="开平类型" show-overflow-tooltip>
<template slot-scope="scope"
><span class="color-606266">{{ scope.row.memberOpenCardFlag ? '不同开平' : '同一开平' }}</span></template
>
</el-table-column>
<el-table-column prop="" label="导购编辑" show-overflow-tooltip>
<template slot-scope="scope">
<el-switch v-model="scope.row.clerkEditFlag" :active-value="1" :inactive-value="0" @change="clerkEditFlagChange(scope.row, scope.$index)"></el-switch>
</template>
</el-table-column>
<el-table-column prop="" label="提交人" show-overflow-tooltip>
<template slot-scope="scope"
><span class="color-606266">{{ scope.row.staffName || '--' }}</span></template
......@@ -59,7 +74,7 @@
<div class="line-18 color-606266">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="操作">
<el-table-column prop="" label="操作" min-width="200">
<template slot-scope="scope">
<el-button type="text" @click="AddAuthMerchant(scope.row)">编辑授权设置</el-button>
<el-button type="text" @click="toStoreList(scope.row)">绑定门店列表</el-button>
......@@ -114,6 +129,11 @@ export default {
};
},
computed: {},
filters: {
wxEnterpriseTypeFilter(v) {
return v == 0 ? '总部' : v == 1 ? '代理' : '';
}
},
methods: {
/**
* 新增企业
......@@ -222,6 +242,45 @@ export default {
});
})
.catch(() => {});
},
clerkEditFlagChange(item, index) {
const that = this;
that
.$confirm(`是否确认修改导购编辑权限?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.loading = true;
let para = { wxEnterprieseRelatedId: item.wxEnterpriseRelatedId, clerkEditFlag: that.tableData[index].clerkEditFlag ? 1 : 0 };
getRequest('/haoban-manage3-web/set-clerk-edit', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '修改成功'
});
this.getTableList();
return false;
}
this.getTableList();
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
this.getTableList();
});
})
.catch(() => {
that.tableData[index].clerkEditFlag = that.tableData[index].clerkEditFlag ? 0 : 1;
});
}
},
watch: {
......
......@@ -10,7 +10,10 @@
<div class="daily-set-wrap">
<div class="company-set-content border-box">
<div class="company-title m-b-20 flex flex-space-between">
<div class="line-h-32"><span class="color-303133 font-14 font-w-600">企业微信基本信息</span><el-button class="m-l-20" type="text" @click="refeshData">同步刷新 </el-button></div>
<div class="line-h-32">
<span class="color-303133 font-14 font-w-600">企业微信基本信息</span>
<el-button class="m-l-20" type="text" @click="refeshData">同步刷新 </el-button>
</div>
<div>
<set-tip v-if="!checkShow" :tipText="tipText"></set-tip>
</div>
......@@ -21,7 +24,8 @@
<span class="font-14 color-303133">{{ companyObj.smallVersion || '免费版' }}</span>
</el-form-item> -->
<el-form-item label="企业名称">
<span class="font-14 color-303133 p-r-10">{{ companyObj.corpName }}</span> <el-tag> {{ companyObj.contactFlag == 1 ? '已认证' : '未认证' }}</el-tag
<span class="font-14 color-303133 p-r-10">{{ companyObj.corpName }}</span>
<el-tag> {{ companyObj.contactFlag == 1 ? '已认证' : '未认证' }}</el-tag
><span v-if="companyObj.contactFlag == 1" class="p-l-10 font-12 color-909399">认证到期 {{ companyObj.verifiedEndTime | timeStampToYmd }}</span>
</el-form-item>
<el-form-item label="企业ID">
......@@ -43,9 +47,11 @@
<div class="company-title m-b-20 m-t-30"><span class="color-303133 font-14 font-w-600">客户密钥维护</span></div>
<div class="company-info-body secret-body">
<div class="m-b-20 secret-cell">
<span class="inline-block w-127"
><el-tooltip class="item" effect="dark" content="企业微信中【客户联系】API中若更新secret,请复制后更新至此处。首次使用好办请输入。" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">客户联系secret:</span></el-tooltip> </span
><el-input class="m-l-10 w-399" maxlength="200" v-model="wxObj.secretVal" placeholder="必填"></el-input><el-button class="m-l-20" type="text" @click="saveSecret('1')">保存</el-button><span v-if="wxObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ wxObj.updateTime | formatTimeStamp }}</span
<span class="inline-block w-127">
<el-tooltip class="item" effect="dark" content="企业微信中【客户联系】API中若更新secret,请复制后更新至此处。首次使用好办请输入。" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">客户联系secret:</span></el-tooltip>
</span>
<el-input class="m-l-10 w-399" maxlength="200" v-model="wxObj.secretVal" placeholder="必填"></el-input>
<el-button class="m-l-20" type="text" @click="saveSecret('1')">保存</el-button><span v-if="wxObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ wxObj.updateTime | formatTimeStamp }}</span
><span class="m-l-37 font-14 color-303133"
><span :class="['iconfont', wxObj.checkFlag ? 'color-49c958 iconchenggong' : 'color-f83431 iconshibai']"></span><span class="p-l-10">{{ wxObj.checkFlag ? '校验成功' : '校验失败' }}</span></span
>
......@@ -53,20 +59,24 @@
</div>
<div class="m-b-20 secret-cell">
<span class="inline-block w-127"
><el-tooltip class="item" effect="dark" placement="top-start">
<span class="inline-block w-127">
<el-tooltip class="item" effect="dark" placement="top-start">
<div slot="content">企业微信中通讯录同步若更新secret,请复制后更新至此处。<br />因获取Secret而获取通讯录的相关信息。首次使用好办请输入。<br />若发生相关变更,与企业微信无关,特此告知!</div>
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">通讯录secret:</span></el-tooltip
></span
><el-input class="m-l-10 w-399" maxlength="200" v-model="contactObj.secretVal" placeholder="非必填"></el-input><el-button class="m-l-20" type="text" @click="saveSecret('2')">保存</el-button><span v-if="contactObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ contactObj.updateTime | formatTimeStamp }}</span
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">通讯录secret:</span>
</el-tooltip>
</span>
<el-input class="m-l-10 w-399" maxlength="200" v-model="contactObj.secretVal" placeholder="非必填"></el-input>
<el-button class="m-l-20" type="text" @click="saveSecret('2')">保存</el-button><span v-if="contactObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ contactObj.updateTime | formatTimeStamp }}</span
><span class="m-l-37 font-14 color-303133"
><span :class="['iconfont', contactObj.checkFlag ? 'color-49c958 iconchenggong' : 'color-f83431 iconshibai']"></span><span class="p-l-10">{{ contactObj.checkFlag ? '校验成功' : '校验失败' }}</span></span
>
</div>
<div class="m-b-20 secret-cell">
<span class="inline-block w-127"
><el-tooltip class="item" effect="dark" content="用于获取登录小程序用户的手机号/姓名/部门信息" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">好办助手secret:</span></el-tooltip> </span
><el-input class="m-l-10 w-399" maxlength="200" v-model="haobanObj.secretVal" placeholder="必填"></el-input><el-button class="m-l-20" type="text" @click="saveSecret('3')">保存</el-button><span v-if="haobanObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ haobanObj.updateTime | formatTimeStamp }}</span
<span class="inline-block w-127">
<el-tooltip class="item" effect="dark" content="用于获取登录小程序用户的手机号/姓名/部门信息" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266">好办助手secret:</span></el-tooltip>
</span>
<el-input class="m-l-10 w-399" maxlength="200" v-model="haobanObj.secretVal" placeholder="必填"></el-input>
<el-button class="m-l-20" type="text" @click="saveSecret('3')">保存</el-button><span v-if="haobanObj.updateTime" class="m-l-20 font-12 color-909399">最后一次保存:{{ haobanObj.updateTime | formatTimeStamp }}</span
><span class="m-l-37 font-14 color-303133"
><span :class="['iconfont', haobanObj.checkFlag ? 'color-49c958 iconchenggong' : 'color-f83431 iconshibai']"></span><span class="p-l-10">{{ haobanObj.checkFlag ? '校验成功' : '校验失败' }}</span></span
>
......@@ -103,14 +113,20 @@
</template>
</el-table-column>
<el-table-column prop="" label="操作">
<template slot-scope="scope"> <el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button><el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button> </template>
<template slot-scope="scope">
<el-button type="text" @click="toEdit(scope.$index, scope.row)">编辑</el-button>
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div v-if="tableData.length < 10" class="text-center add-cell cursor-pointer" @click="addSecret"><span class="el-icon-plus font-14 color-2f54eb add-cell-txt"></span><span class="font-14 color-2f54eb p-l-5 add-cell-txt">新建</span><span class="font-12 color-c0c4cc p-l-20">最多添加10个</span></div>
</div>
</div>
</div>
<div v-if="wxShow" class="line-h-32 m-b-20"><span class="color-303133 font-14 font-w-600">企微好友</span><el-button v-if="wxShow" class="m-l-20" type="text" @click="refeshDataWx">同步刷新 </el-button></div>
<div v-if="wxShow" class="line-h-32 m-b-20">
<span class="color-303133 font-14 font-w-600">企微好友</span>
<el-button v-if="wxShow" class="m-l-20" type="text" @click="refeshDataWx">同步刷新 </el-button>
</div>
<div v-if="wxShow">
<el-form ref="wxForm" label-width="115px">
<el-form-item>
......@@ -690,9 +706,9 @@ export default {
}
}
}
.table-condition {
// min-width: 1200px;
}
// .table-condition {
// min-width: 1200px;
// }
.secret-body {
.el-input {
>>> .el-input__inner {
......
......@@ -45,13 +45,10 @@
<el-select class="w-103" v-model="pageParams.finishOverStatus" slot="prepend" placeholder="所有完成情况" @change="reFetch">
<el-option :label="item.text" :value="item.id" v-for="item in filterOpts" :key="'filter' + item.id"></el-option>
</el-select>
<el-select class="w-103" v-model="pageParams.overdueStatus" slot="prepend" placeholder="所有逾期情况" @change="reFetch">
<el-option :label="item.text" :value="item.id" v-for="item in overdueOpts" :key="'filter' + item.id"></el-option>
</el-select>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
<el-table-column label="任务标题" show-overflow-tooltip min-width="170">
<el-table-column label="任务标题" show-overflow-tooltip min-width="120">
<template slot-scope="scope">{{ scope.row.taskTitle || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="指派对象" min-width="200">
......@@ -65,52 +62,40 @@
</div>
</template>
</el-table-column>
<el-table-column prop="" label="会员" min-width="200">
<template slot-scope="scope">
<div class="flex flex-align-center personal-info">
<el-image :src="scope.row.memberImgUrl || headDefault" fit="cover"></el-image>
<div>
<p class="color-303133 line-20">{{ scope.row.memberName || '--' }}</p>
<p class="color-909399 line-20">{{ scope.row.memberCardNum || '--' }}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="" label="创建时间" min-width="122">
<template slot-scope="scope">
<div class="color-606266 line-20">{{ scope.row.createTime | timeStampToYmd }}</div>
<div class="color-606266 line-20">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="逾期期限" min-width="122">
<el-table-column prop="" label="完成期限" min-width="122">
<template slot-scope="scope">
<div class="color-606266 line-20">{{ scope.row.overdueTime | timeStampToYmd }}</div>
<div class="color-606266 line-20">{{ scope.row.overdueTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="逾期情况" min-width="122">
<el-table-column label="逾期情况" min-width="90">
<template slot-scope="scope"><span class="point" :style="'background:' + overdueStyle[scope.row.overdueStatus] + ';'"></span>{{ scope.row.overdueStatus === 1 ? '已逾期' : scope.row.overdueStatus === 2 ? '未逾期' : '' }}</template>
</el-table-column>
<el-table-column prop="" label="完成状态" min-width="122">
<template slot-scope="scope"><span class="point" :style="'background:' + taskStyle[scope.row.taskStatus] + ';'"></span>{{ scope.row.taskStatus === 1 ? '未完成' : scope.row.taskStatus === 2 ? '已完成' : '' }}</template>
<el-table-column label="完成情况" min-width="90">
<template slot-scope="scope"><span class="point" :style="'background:' + taskStyle[scope.row.taskStatus] + ';'"></span>{{ scope.row.taskStatus === 1 ? '未完成' : scope.row.overdueStatus === 2 ? '已完成' : '' }}</template>
</el-table-column>
<el-table-column prop="" label="完成详情">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">查看</el-button>
</template>
<el-table-column label="完成详情" min-width="280">
<template slot-scope="scope"> 待发送:{{ scope.row.waitSendCount }},已发送:{{ scope.row.successCount }},发送失败:{{ scope.row.failCount }} </template>
</el-table-column>
<!-- <el-table-column prop="" label="操作" width="150">
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">预览</el-button>
<el-button type="text" @click="showDetail(scope.row)">删除</el-button>
<el-button type="text" @click="showDetail(scope.row)">详情</el-button>
<el-button type="text" @click="showPreview(scope.row)">预览</el-button>
</template>
</el-table-column> -->
</el-table-column>
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length != 0">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParams.pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
<salesleads-taskinfo :item="confirmDetail" v-if="confirmDetailShow" @close="close"></salesleads-taskinfo>
<salesleads-taskinfo :item="finishDetail" v-if="finishDetailShow" @close="close"></salesleads-taskinfo>
<detail-preview ref="detailPreview" :previewData="previewData" v-model="previewVisible" @closePreview="closePreview"></detail-preview>
</div>
</div>
</div>
......@@ -123,9 +108,10 @@
import salesleadsTaskinfo from '@/components/review/salesleads-task-info.vue';
import headDefault from '@/assets/head_default.jpg';
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import { getRequest, postRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
import detailPreview from '@/components/review/salesleads-detail-preview.vue';
export default {
name: 'storeDetail',
props: {
......@@ -156,7 +142,7 @@ export default {
],
pageParams: {
storeId: this.$route.params.id,
finishOverStatus: '',
finishOverStatus: '0',
pageNum: 1,
pageSize: 20
},
......@@ -175,20 +161,19 @@ export default {
// executeClerkName: '', // 指派导购名字
// executeClerkPhoneNum: '', // 指派导购手机号
// executeClerkClerkImgUrl: null, // 指派导购头像
// memberId: '', // 会员id
// memberName: '', // 会员名字
// memberImgUrl: '', // 会员头像
// memberCardNum: '', // 会员卡号
// createTime: null, // 创建时间
// overdueTime: null, // 逾期时间
// overdueStatus: null, // 逾期状态(1:逾期,2:未逾期)
// taskStatus: null // 完成状态(1:未完成,2:完成)
// taskStatus: null // 完成情况(1:未完成,2:完成)
// taskDetail: // 待发送:1,已发送:2,发送失败:1
// }
],
overdueStyle: ['none', '#F5222D', '#2F54EB'],
taskStyle: ['none', '#F5222D', '#33AF4A'],
confirmDetailShow: false,
confirmDetail: {},
finishDetailShow: false,
finishDetail: {},
previewData: {},
previewVisible: false,
pickerOptions: {
disabledDate: time => {
const end = new Date();
......@@ -247,7 +232,7 @@ export default {
if (this.$route.query.ecmPlanId) {
para.ecmPlanId = this.$route.query.ecmPlanId;
}
getRequest('/haoban-task-manage-web/market/clue/web/task-info-list', para)
getRequest('/haoban-task-manage-web/market/clue/web/send-task-info-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
......@@ -287,38 +272,42 @@ export default {
},
showDetail(item) {
const that = this;
that.loading = true;
const para = {
that.finishDetail = {
enterpriseId: localStorage.getItem('userInfoBrandId'),
taskId: item.taskId
};
this.finishDetailShow = true;
},
close() {
this.finishDetailShow = false;
this.finishDetail = {};
},
showPreview(item) {
const that = this;
let para = {
enterpriseId: localStorage.getItem('userInfoBrandId'),
taskId: item.taskId
};
getRequest('/haoban-task-manage-web/market/clue/web/task-finish-info', para)
postRequest('/haoban-task-manage-web/market/clue/web/send-task-preview', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.confirmDetail = { ...resData.result };
if (resData.result.remarkImgUrl) {
that.confirmDetail.remarkImgUrl = resData.result.remarkImgUrl.split(',');
} else {
that.confirmDetail.remarkImgUrl = [];
if (resData.errorCode == 1) {
that.previewData = resData.result;
that.previewVisible = true;
return;
}
this.confirmDetailShow = true;
} else {
errMsg.errorMsg(resData);
}
that.loading = false;
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
close() {
this.confirmDetailShow = false;
this.confirmDetail = {};
closePreview() {
const that = this;
that.previewData = {};
}
},
watch: {
......@@ -329,7 +318,9 @@ export default {
mounted() {
const that = this;
that.getFilterOpts();
that.$nextTick(() => {
that.getTableList();
});
if (that.$route.query.tab) {
that.$emit('showTab', 2);
} else {
......@@ -342,7 +333,8 @@ export default {
},
components: {
navCrumb,
salesleadsTaskinfo
salesleadsTaskinfo,
detailPreview
}
};
</script>
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 10:05:42
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<!-- <nav-crumb :navpath="navpath"> </nav-crumb> -->
<div class="right-content">
<div class="right-box" :style="{ 'min-height': bgHeight }">
<div class="apps-content flex" :style="{ 'min-height': bgHeight }">
......@@ -185,7 +176,8 @@ export default {
let para = {
...that.pageParams,
enterpriseId: localStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
taskType: 2
};
if (para.date) {
para.startTime = para.date[0];
......@@ -216,9 +208,9 @@ export default {
},
showDetail(item) {
if (this.$route.query.ecmPlanId) {
this.$router.push(`storeDetail/${item.storeId}?tab=2&ecmPlanId=${this.$route.query.ecmPlanId}`);
this.$router.push(`grStoreDetail/${item.storeId}?tab=2&ecmPlanId=${this.$route.query.ecmPlanId}`);
} else {
this.$router.push(`storeDetail/${item.storeId}`);
this.$router.push(`grStoreDetail/${item.storeId}`);
}
}
},
......
......@@ -118,7 +118,8 @@ export default {
],
pageParams: {
pageNum: 1,
pageSize: 20
pageSize: 20,
taskType: 2
},
// 分页参数
total: 0,
......@@ -215,7 +216,7 @@ export default {
});
},
showDetail(item) {
this.$router.push(`storeList?ecmPlanId=${item.ecmPlanId}`);
this.$router.push(`grStoreList?ecmPlanId=${item.ecmPlanId}`);
}
},
watch: {
......
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