Commit daaff433 by 陈羽

update: 话务任务转移

parent 90f657c4
...@@ -22,11 +22,11 @@ ...@@ -22,11 +22,11 @@
<ul class="tab-left-list"> <ul class="tab-left-list">
<template v-for="(item, index) in tabData"> <template v-for="(item, index) in tabData">
<li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-14', item.tabId == activeTab ? 'active-tab' : '']" :key="index" @click="selectTab(item, false, index)"><i :class="['p-r-10 color-303133 iconfont', item.icon]"></i>{{ item.tabName }}<i v-if="!!item.children && !!item.children.length" :class="[!!item.collapsFlag ? 'el-icon-arrow-up' : 'el-icon-arrow-down']"></i></li> <li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-14', item.tabId == activeTab ? 'active-tab' : '']" :key="index" @click="selectTab(item, false, index)"><i :class="['p-r-10 color-303133 iconfont', item.icon]"></i>{{ item.tabName }}<i v-if="!!item.children && !!item.children.length" :class="[!!item.collapsFlag ? 'el-icon-arrow-up' : 'el-icon-arrow-down']"></i></li>
<ul class="child-tab-left-list" :key="'childitem' + index" :style="{ height: !!item.collapsFlag && item.children ? item.children.length * 40 + 'px' : 0 }"> <ul class="child-tab-left-list" :key="'childitem' + index" :style="{ height: !!item.collapsFlag && item.children ? 'auto' : 0 }">
<!-- v-if="!!item.collapsFlag"--> <!-- v-if="!!item.collapsFlag"-->
<template v-for="(childitem, childIndex) in item.children"> <template v-for="(childitem, childIndex) in item.children">
<li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-40', childitem.tabId == activeTab ? 'active-tab' : '']" :key="childIndex" @click="selectTab(childitem, 'child', index)">{{ childitem.tabName }}</li> <li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-40', childitem.tabId == activeTab ? 'active-tab' : '']" :key="childIndex" @click="selectTab(childitem, 'child', index)">{{ childitem.tabName }}<i v-if="!!childitem.children && !!childitem.children.length" :class="[!!childitem.collapsFlag ? 'el-icon-arrow-up' : 'el-icon-arrow-down']"></i></li>
<ul class="third-tab-left-list" :key="'thirditem' + childIndex" v-if="childitem.children"> <ul class="third-tab-left-list" :key="'thirditem' + childIndex" v-if="childitem.children" :style="{ height: !!childitem.collapsFlag && childitem.children ? 'auto' : 0 }">
<template v-for="(thirditem, thirdIndex) in childitem.children"> <template v-for="(thirditem, thirdIndex) in childitem.children">
<li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-60', thirditem.tabId == activeTab ? 'active-tab' : '']" :key="thirdIndex" @click="selectTab(thirditem, 'child', index)">{{ thirditem.tabName }}</li> <li :class="['tab-left-list-cell color-303133 font-14 border-box p-l-60', thirditem.tabId == activeTab ? 'active-tab' : '']" :key="thirdIndex" @click="selectTab(thirditem, 'child', index)">{{ thirditem.tabName }}</li>
</template> </template>
...@@ -71,20 +71,21 @@ export default { ...@@ -71,20 +71,21 @@ export default {
}, },
mounted() { mounted() {
this.activeTab = this.activeSelTab; this.activeTab = this.activeSelTab;
this.tabListData.map(item => { let tabListData = [].concat(this.tabListData);
item.collapsFlag = false; tabListData.map(item => {
item.collapsFlag = true;
if (item.hasOwnProperty('children') && item.children.length) { if (item.hasOwnProperty('children') && item.children.length) {
if (this.activeSelTab == item.tabId) { if (this.activeSelTab == item.tabId) {
item.collapsFlag = true;
this.activeTab = item.children[0].tabId; this.activeTab = item.children[0].tabId;
} else { } else {
item.children.map(child => { item.children.map(child => {
if (this.activeSelTab == child.tabId) item.collapsFlag = true; child.collapsFlag = true;
if (child.hasOwnProperty('children') && child.children.length && this.activeSelTab == child.tabId) this.activeTab = child.children[0].tabId;
}); });
} }
} }
}); });
this.tabData = [].concat(this.tabListData); this.$nextTick(_ => (this.tabData = [].concat(tabListData)));
}, },
methods: { methods: {
/** /**
...@@ -99,7 +100,7 @@ export default { ...@@ -99,7 +100,7 @@ export default {
*/ */
selectTab(item, flag, index) { selectTab(item, flag, index) {
if (item.hasOwnProperty('children')) { if (item.hasOwnProperty('children')) {
if (!flag && !!item.children.length) { if (!!item.children.length) {
item.collapsFlag = !item.collapsFlag; item.collapsFlag = !item.collapsFlag;
this.tabData = JSON.parse(JSON.stringify(this.tabData)); this.tabData = JSON.parse(JSON.stringify(this.tabData));
} else { } else {
...@@ -111,6 +112,11 @@ export default { ...@@ -111,6 +112,11 @@ export default {
this.$emit('setSelectTab', item); this.$emit('setSelectTab', item);
} }
} }
},
watch: {
activeSelTab(newV) {
this.activeTab = newV;
}
} }
}; };
</script> </script>
......
...@@ -18,9 +18,8 @@ ...@@ -18,9 +18,8 @@
<i class="el-alert__icon el-icon-info"></i> <i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title"> <span class="el-alert__title">
1.预计2021年1月功能更新后将仅保留近一年数据,历史数据将清除。如需保存超过一年历史数据,请于1月前导出保存;<br /> 1.此处仅统计近一年内的数据<br />
2.话务任务统计数据每日刷新一次;<br /> 2.门店下具体某条话务任务的完成状态每天更新一次;下方列表中任务完成数据统计也为每天统计更新一次,非实时刷新。
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
</span> </span>
</div> </div>
</div> </div>
...@@ -37,7 +36,7 @@ ...@@ -37,7 +36,7 @@
<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 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 type="selection" width="45"> </el-table-column>
<el-table-column width="25"> <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"> <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> <span class="el-dropdown-link"><i class="iconfont icongengduo"></i> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
...@@ -46,7 +45,7 @@ ...@@ -46,7 +45,7 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
<template slot-scope="scope"> </template> <template slot-scope="scope">{{ scope ? ' ' : ' ' }}</template>
</el-table-column> </el-table-column>
<el-table-column label="任务名称" width="120" show-overflow-tooltip> <el-table-column label="任务名称" width="120" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.ecmName }}</template> <template slot-scope="scope">{{ scope.row.ecmName }}</template>
......
...@@ -117,6 +117,7 @@ export default { ...@@ -117,6 +117,7 @@ export default {
} else { } else {
that.$router.push(path); that.$router.push(path);
} }
that.$emit('changeRoute', path);
}, },
/** /**
* 选择品牌 * 选择品牌
...@@ -152,6 +153,7 @@ export default { ...@@ -152,6 +153,7 @@ export default {
return false; return false;
} else if (sessionStorage.getItem('userInfoBrandId')) { } else if (sessionStorage.getItem('userInfoBrandId')) {
that.activeBrand = sessionStorage.getItem('userInfoBrandId'); that.activeBrand = sessionStorage.getItem('userInfoBrandId');
that.$emit('selectBrandId', sessionStorage.getItem('userInfoBrandId'));
that.brandListData.forEach(ele => { that.brandListData.forEach(ele => {
if (ele.enterpriseId == that.activeBrand) { if (ele.enterpriseId == that.activeBrand) {
that.selectBrand = ele; that.selectBrand = ele;
...@@ -161,6 +163,7 @@ export default { ...@@ -161,6 +163,7 @@ export default {
} }
that.selectBrand = that.brandListData[0]; that.selectBrand = that.brandListData[0];
that.activeBrand = that.brandListData[0].enterpriseId; that.activeBrand = that.brandListData[0].enterpriseId;
sessionStorage.setItem('userInfoBrandId', that.activeBrand);
this.$store.commit('changeWxEntertype', that.brandListData[0].wxEnterpriseType); this.$store.commit('changeWxEntertype', that.brandListData[0].wxEnterpriseType);
// 由于门店选择组件中没有品牌id ,只有 groupId // 由于门店选择组件中没有品牌id ,只有 groupId
that.$emit('selectBrandId', that.brandListData[0].enterpriseId, that.brandListData[0].enterpriseId); that.$emit('selectBrandId', that.brandListData[0].enterpriseId, that.brandListData[0].enterpriseId);
......
...@@ -17,13 +17,19 @@ ...@@ -17,13 +17,19 @@
<el-form-item label="小程序名称" prop="miniprogramName"> <el-form-item label="小程序名称" prop="miniprogramName">
<el-input show-word-limit placeholder="请输入小程序名称" type="text" v-model="ruleForm.miniprogramName" maxlength="20"></el-input> <el-input show-word-limit placeholder="请输入小程序名称" type="text" v-model="ruleForm.miniprogramName" maxlength="20"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="AppID:" prop="appId"> <el-form-item prop="appId">
<span slot="label"
><el-tooltip class="item" effect="dark" placement="top">
<div slot="content">如何查看AppId:<a href="https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html" target="blank">https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html</a></div>
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">AppId</span>
</el-tooltip></span
>
<el-input show-word-limit placeholder="请输入AppId" type="text" v-model="ruleForm.appId" maxlength="80"></el-input> <el-input show-word-limit placeholder="请输入AppId" type="text" v-model="ruleForm.appId" maxlength="80"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input> <el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item> </el-form-item>
<el-form-item label=" 封面" prop="pic"> <el-form-item label=" 封面" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload> <single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload>
<p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p> <p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item> </el-form-item>
......
...@@ -139,43 +139,47 @@ export const constantRouterMap = [{ ...@@ -139,43 +139,47 @@ export const constantRouterMap = [{
{ {
path: '/salesleads', path: '/salesleads',
name: '销售线索', name: '销售线索',
redirect: 'grStoreList', redirect: 'trafficTaskSet',
component: _import('salesleads', 'index'), component: _import('salesleads', 'index'),
children: [ children: [{
// { path: '/taskRecord',
// path: '/storeList', name: '话务任务记录',
// name: '门店视图', component: _import('salesleads/trafficTask', 'taskRecord')
// component: _import('salesleads', 'storeList'), },
// }, {
// { path: '/taskView',
// path: '/storeDetail/:id', name: '话务任务记录',
// name: '门店视图', component: _import('salesleads/trafficTask', 'taskView')
// component: _import('salesleads', 'storeDetail') },
// }, {
// { path: '/taskDetail',
// path: '/salesTaskList', name: '话务任务详情',
// name: '计划视图', component: _import('salesleads/trafficTask', 'taskDetail')
// component: _import('salesleads', 'taskList'), },
// }, {
// { path: '/taskViewDetail',
// path: '/salesleadsSet', name: '话务任务详情',
// name: '销售线索设置', component: _import('salesleads/trafficTask', 'taskViewDetail')
// component: _import('salesleads', 'salesleadsSet') },
// }, {
path: '/trafficTaskSet',
name: '话务任务设置',
component: _import('salesleads/trafficTask', 'trafficTaskSet')
},
{ {
path: '/grStoreList', // 群发任务-门店视图 path: '/grStoreList', // 群发任务-门店视图
name: '门店视图', name: '门店视图',
component: _import('salesleads', 'grStoreList') component: _import('salesleads/groupSend', 'grStoreList')
}, },
{ {
path: '/grStoreDetail/:id', // 群发任务-门店视图-任务详情 path: '/grStoreDetail/:id', // 群发任务-门店视图-任务详情
name: '门店视图', name: '门店视图',
component: _import('salesleads', 'grStoreDetail') component: _import('salesleads/groupSend', 'grStoreDetail')
}, },
{ {
path: '/grTaskList', // 群发任务-计划视图 path: '/grTaskList', // 群发任务-计划视图
name: '计划视图', name: '计划视图',
component: _import('salesleads', 'grTaskList') component: _import('salesleads/groupSend', 'grTaskList')
} }
] ]
}, },
...@@ -329,58 +333,6 @@ export const constantRouterMap = [{ ...@@ -329,58 +333,6 @@ export const constantRouterMap = [{
] ]
}, },
{ {
path: '/trafficTask',
name: '话务任务',
redirect: '/taskRecord',
component: _import('apps/trafficTask', 'index'),
children: [{
path: '/taskRecord',
name: '话务任务记录',
component: _import('apps/trafficTask', 'taskRecord')
},
{
path: '/taskView',
name: '话务任务记录',
component: _import('apps/trafficTask', 'taskView')
},
{
path: '/taskDetail',
name: '话务任务详情',
component: _import('apps/trafficTask', 'taskDetail')
},
{
path: '/taskViewDetail',
name: '话务任务详情',
component: _import('apps/trafficTask', 'taskViewDetail')
},
{
path: '/trafficTaskSet',
name: '话务任务设置',
component: _import('apps/trafficTask', 'trafficTaskSet')
},
{
path: '/badEvaluateSet',
name: '不良评价设置',
component: _import('apps/badEvaluate', 'badEvaluateSet')
},
{
path: '/taskList',
name: '会话任务列表',
component: _import('apps/trafficTask', 'taskList')
},
{
path: '/newSession',
name: '新建会话任务',
component: _import('apps/trafficTask', 'newSession')
},
{
path: '/taskSessionSet',
name: '会话任务设置',
component: _import('apps/trafficTask', 'taskSessionSet')
}
]
},
{
path: '/quota', path: '/quota',
name: '指标管理', name: '指标管理',
redirect: '/monthList', redirect: '/monthList',
...@@ -514,6 +466,10 @@ export const constantRouterMap = [{ ...@@ -514,6 +466,10 @@ export const constantRouterMap = [{
path: '/evaluate-set', path: '/evaluate-set',
name: '订单评价', name: '订单评价',
component: _import('apps/order-evaluate', 'evaluate-set') component: _import('apps/order-evaluate', 'evaluate-set')
},{
path: '/bad-evaluate',
name: '不良评价回访设置',
component: _import('apps/order-evaluate', 'bad-evaluate-set')
}] }]
} }
] ]
......
...@@ -80,6 +80,9 @@ export default new Vuex.Store({ ...@@ -80,6 +80,9 @@ export default new Vuex.Store({
}, },
clearTreeData(context, data) { clearTreeData(context, data) {
context.commit('clearData'); context.commit('clearData');
},
changeWxEntertypeData(context, data) {
context.commit('changeWxEntertype', data);
} }
} }
}); });
...@@ -41,8 +41,8 @@ export default { ...@@ -41,8 +41,8 @@ export default {
return { return {
bgHeight: window.screen.availHeight - 380 + 'px', bgHeight: window.screen.availHeight - 380 + 'px',
activeSelTab: '1', activeSelTab: '11',
activeTab: '1', activeTab: '11',
// 面包屑参数 // 面包屑参数
navpath: [ navpath: [
{ {
...@@ -51,7 +51,17 @@ export default { ...@@ -51,7 +51,17 @@ export default {
}, },
{ {
name: '我的顾客', name: '我的顾客',
path: '' path: '/memberShowSet'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: '/memberShowSet'
} }
], ],
tabListData: [ tabListData: [
...@@ -94,6 +104,26 @@ export default { ...@@ -94,6 +104,26 @@ export default {
icon: 'icongukeguanliicon' icon: 'icongukeguanliicon'
} }
], ],
navName: {
1: '会员基础设置',
11: '会员展示设置',
12: '会员分组设置',
13: '会员搜索设置',
14: '会员详情设置',
15: '会员标签设置',
151: '同步记录',
2: '我的顾客列表'
},
navFrontPath: {
11: '/memberShowSet',
12: '/memberShowSet',
13: '/memberShowSet',
14: '/memberShowSet',
15: '/memberShowSet',
151: '/memberTagSet',
2: '/memberShowSet',
21: '/myCustomerList'
},
activeBrand: '', // 商户(品牌) id activeBrand: '', // 商户(品牌) id
activeGroup: '', // 商户(品牌) groupId activeGroup: '', // 商户(品牌) groupId
expiredFlag: false expiredFlag: false
...@@ -171,87 +201,16 @@ export default { ...@@ -171,87 +201,16 @@ export default {
* 各路由返回 tabId * 各路由返回 tabId
*/ */
showTab(id) { showTab(id) {
let ids = [...arguments];
let that = this; let that = this;
that.activeTab = id; that.activeTab = id;
that.activeSelTab = id; that.activeSelTab = id;
that.tabListData.forEach(ele => { this.navpath = [...this.defaultNavpath];
if (ele.tabId == id) { if (ids.length) {
ele.onlyIconActive = false; ids.map(tabId => {
} this.navpath[this.navpath.length - 1].path = this.navFrontPath[tabId];
if (!!ele.children) { this.navpath.push({ name: this.navName[tabId], path: '' });
ele.children.forEach(el => { });
if (el.tabId == id) {
ele.onlyIconActive = true;
}
if (!!el.children) {
el.children.forEach(item => {
if (item.tabId == id) {
ele.onlyIconActive = true;
}
});
}
});
}
});
},
changeNavShow(val) {
const that = this;
if (val.path == '/addGroupTemplate') {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: '/memberShowSet'
},
{
name: that.$route.query.templateId ? '编辑模板' : '新建模板',
path: ''
}
];
} else if (val.path == '/storeRangeSet') {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: '/memberShowSet'
},
{
name: '门店范围设置',
path: ''
}
];
} else if (val.path == '/syncHistory') {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: '/memberShowSet'
},
{
name: '同步历史',
path: ''
}
];
} else {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: ''
}
];
} }
} }
}, },
...@@ -263,19 +222,9 @@ export default { ...@@ -263,19 +222,9 @@ export default {
activeGroup: function(newData, oldData) { activeGroup: function(newData, oldData) {
const that = this; const that = this;
that.activeGroup = newData; that.activeGroup = newData;
},
$route: {
handler: function(val, oldVal) {
const that = this;
that.changeNavShow(val);
},
// 深度观察监听
deep: true
} }
}, },
mounted() { mounted() {
let that = this;
that.changeNavShow(that.$route);
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
}, },
destroyed() { destroyed() {
......
...@@ -29,8 +29,9 @@ ...@@ -29,8 +29,9 @@
</el-select> </el-select>
</div> </div>
<div> <div>
<el-checkbox v-model="overTimeSeeFlag" @change="saveGroupSet"></el-checkbox> <el-checkbox v-model="overTimeSeeFlag" @change="saveGroupSet" :disabled="$store.state.wxEnterpriseType">
<el-tooltip class="item" effect="dark" content="开启后,GIC中设置的好办端会员分组失效后,即使在GIC开启好办展示,好办移动端也不再展示该条分组" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;" class="font-14 color-606266 m-r-20">会员分组失效后不展示</span></el-tooltip> <el-tooltip class="item" effect="dark" content="开启后,GIC中设置的好办端会员分组失效后,即使在GIC开启好办展示,好办移动端也不再展示该条分组" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;margin-left:-4px;" class="font-14 color-606266 m-r-20">会员分组失效后不展示</span></el-tooltip>
</el-checkbox>
<el-button type="primary" :loading="loadingBtn" @click="toSync" :disabled="$store.state.wxEnterpriseType">立即同步</el-button> <el-button type="primary" :loading="loadingBtn" @click="toSync" :disabled="$store.state.wxEnterpriseType">立即同步</el-button>
<span v-if="syncDate" class="font-14 color-606266 p-r-10">最近一次同步时间:{{ syncDate | formatTimeStamp }}</span> <span v-if="syncDate" class="font-14 color-606266 p-r-10">最近一次同步时间:{{ syncDate | formatTimeStamp }}</span>
</div> </div>
......
...@@ -132,6 +132,9 @@ export default { ...@@ -132,6 +132,9 @@ export default {
dialogCurrentChange() { dialogCurrentChange() {
console.log('1'); console.log('1');
} }
},
mounted() {
this.$emit('showTab', '15', '151');
} }
}; };
</script> </script>
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-09-24 13:52:54
-->
<template>
<div class="app-detail-wrap">
<div class="task-set-content boder-box">
<div class="task-set-cell">
<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 m-r-4"> <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-checkbox-group v-model="setObj.taskCallTypes"
><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', setObj.taskCallTypes.includes(item.value) ? 'color-303133' : 'color-606266']">{{ 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-radio style="margin-right: 5px;" v-model="setObj.distributeCustomerJudge" :label="1">{{ '' }}</el-radio
><el-tooltip class="item" effect="dark" content="勾选此项,不良评价回访任务将分配给产生该笔消费订单的所在门店店长" placement="top-start">
<span :class="['font-14 color-606266', setObj.distributeCustomerJudge == 1 ? 'color-303133' : 'color-606266']" style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">分配给消费门店店长</span>
</el-tooltip>
<el-radio style="margin-right: 5px;" class="p-l-40" v-model="setObj.distributeCustomerJudge" :label="2">{{ '' }}</el-radio
><el-tooltip class="item" effect="dark" content="勾选此项,不良评价回访任务将分配给产生该笔消费订单的会员的专属导购" placement="top-start">
<span :class="['font-14 ', setObj.distributeCustomerJudge == 2 ? 'color-303133' : 'color-606266']" style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">分配给专属导购</span>
</el-tooltip>
</div>
<div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">逾期设置:</span>
<span class=" font-14 color-303133">不良评价回访下发后</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 v-if="setObj.taskCallTypes == 2" class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">放弃任务条件:</span><span class="font-14 color-606266">不良评价下发后 </span><el-input-number controls-position="right" class="w-100" v-model="setObj.giveUpJudge" 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-606266">呼叫后无响应,导购可放弃该条任务</span>
</div>-->
<!-- <div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">不良评价释放:</span><el-checkbox v-model="setObj.relaxTaskJudge"></el-checkbox
><el-tooltip class="item" effect="dark" content="开启后,导购换绑导购code后,原导购code任务将被释放给门店店长" placement="top-start">
<span :class="['font-14 color-606266 m-l-10']" style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">释放未绑定/解绑导购任务</span>
</el-tooltip>
</div> -->
<div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right"></span>
<el-button type="primary" :loading="loadingBtn" @click="saveSet" :disabled="$store.state.wxEnterpriseType">保存</el-button>
</div>
</div>
<div class="task-set-save m-t-30"></div>
</div>
</div>
</template>
<script>
import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error';
import showMsg from '@/common/js/showmsg';
import { postRequest } from '@/api/api';
export default {
name: 'reviewed',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
activeTab: '1',
activeBrand: this.brandId, // 商户(品牌) id
options: [
{
label: '企业电话',
value: '1',
tooltips: ['1.对接第三方呼叫中心,外呼显示第三方号码,可监控通话状态。费用结算及通话记录存储于GIC计费中心;', '2.若任务创建时无双向呼叫权限,此项设置勾选也不生效']
},
{
label: '私人电话',
value: '2',
tooltips: ['导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费']
},
{
label: '企微会话',
value: '3',
tooltips: ['通过企微会话完成任务,无法监控通话状态。不产生通话费用']
}
],
activeId: '1',
setObj: {
taskCallTypes: [],
taskType: 0,
overDayJudge: '3',
distributeTypeJudge: '',
distributeCustomerJudge: 1,
giveUpJudge: ''
},
loadingBtn: false
};
},
computed: {},
methods: {
/**
* 保存
*/
saveSet: _debounce(function() {
const that = this;
that.loadingBtn = true;
that.postSave();
}, 500),
postSave() {
const that = this;
let para = {
enterpriseId: that.activeBrand,
taskCallTypes: that.setObj.taskCallTypes.join(','),
taskType: 0,
overDayJudge: that.setObj.overDayJudge,
giveUpJudge: that.setObj.giveUpJudge,
distributeTypeJudge: that.setObj.distributeTypeJudge,
distributeCustomerJudge: that.setObj.distributeCustomerJudge,
relaxTaskJudge: that.setObj.relaxTaskJudge ? 1 : 0
};
postRequest('/haoban-app-tel-task-three-web/setting/save-task-setting', para)
.then(res => {
let resData = res.data;
that.loadingBtn = false;
if (resData.errorCode == 1) {
showMsg.showmsg('保存成功', 'success');
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loadingBtn = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 获取设置数据
*/
getData() {
let that = this;
let para = {
enterpriseId: that.activeBrand,
taskType: 0
};
postRequest('/haoban-app-tel-task-three-web/setting/find-task-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
resData.result.relaxTaskJudge = resData.result.relaxTaskJudge == 1 ? true : false;
console.log(resData.result);
const taskCallTypes = typeof resData.result.taskCallTypes === 'string' ? resData.result.taskCallTypes.split(',') : [];
that.setObj = Object.assign({}, resData.result, { taskCallTypes });
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
that.getData();
}
}
},
mounted() {
let that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
that.$emit('showTab', '2');
if (!!that.brandId) {
that.getData();
}
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {}
};
</script>
<style type="text/scss" lang="scss" scoped>
.w-100 {
width: 100px;
}
.w-240 {
width: 240px;
}
.p-l-3 {
padding-left: 3px;
}
.m-r-4 {
margin-right: 4px;
}
.p-l-40 {
padding-left: 40px;
}
.task-set-content {
padding: 30px;
.task-set-cell {
/* padding: 30px 0; */
.el-date-editor.el-input {
width: 118px;
}
}
.set-line-item {
margin-bottom: 20px;
.set-line-item_title {
display: inline-block;
width: 110px;
}
}
.set-long-tip {
display: inline-block;
vertical-align: middle;
max-width: 600px;
line-height: 16px;
white-space: pre-wrap;
}
}
.tooltips {
cursor: pointer;
font-style: normal;
padding-bottom: 2px;
border-bottom: 1px dashed rgb(47, 84, 235);
font-size: 14px;
}
</style>
...@@ -51,7 +51,17 @@ export default { ...@@ -51,7 +51,17 @@ export default {
}, },
{ {
name: '订单评价', name: '订单评价',
path: '' path: '/evaluate-set'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '订单评价',
path: '/evaluate-set'
} }
], ],
tabListData: [ tabListData: [
...@@ -59,8 +69,17 @@ export default { ...@@ -59,8 +69,17 @@ export default {
tabId: '1', tabId: '1',
tabName: '订单评价设置', tabName: '订单评价设置',
icon: 'iconshangpinshezhi' icon: 'iconshangpinshezhi'
},
{
tabId: '2',
tabName: '不良评价回访设置',
icon: 'icondingdan_pingjia'
} }
], ],
navName: {
1: '订单评价设置',
2: '不良评价回访设置'
},
activeBrand: '', // 商户(品牌) id activeBrand: '', // 商户(品牌) id
activeGroup: '', // 商户(品牌) groupId activeGroup: '', // 商户(品牌) groupId
expiredFlag: false expiredFlag: false
...@@ -116,6 +135,9 @@ export default { ...@@ -116,6 +135,9 @@ export default {
case '1': case '1':
that.changeRoute(`evaluate-set`); that.changeRoute(`evaluate-set`);
break; break;
case '2':
that.changeRoute(`bad-evaluate`);
break;
} }
}, },
...@@ -123,28 +145,16 @@ export default { ...@@ -123,28 +145,16 @@ export default {
* 各路由返回 tabId * 各路由返回 tabId
*/ */
showTab(id) { showTab(id) {
let ids = [...arguments];
let that = this; let that = this;
that.activeTab = id; that.activeTab = id;
that.activeSelTab = id; that.activeSelTab = id;
that.tabListData.forEach(ele => { this.navpath = [...this.defaultNavpath];
if (ele.tabId == id) { if (ids.length) {
ele.onlyIconActive = false; ids.map(tabId => {
} this.navpath.push({ name: this.navName[tabId], path: '' });
if (!!ele.children) { });
ele.children.forEach(el => { }
if (el.tabId == id) {
ele.onlyIconActive = true;
}
if (!!el.children) {
el.children.forEach(item => {
if (item.tabId == id) {
ele.onlyIconActive = true;
}
});
}
});
}
});
} }
}, },
watch: { watch: {
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-05-11 10:44:48
-->
<template>
<div class="app-detail-wrap">
<div class="task-set-content boder-box">
<el-form :model="formData" :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm">
<el-form-item label="任务标题" prop="taskTitle">
<limitInput :inputWidth="372" :disflag="$route.query.sessionTaskId ? true : false" :inputValue.sync="formData.taskTitle" :getByType="'word'" :holder="'请输入任务标题'" :maxLength="20"> </limitInput>
</el-form-item>
<el-form-item label="任务内容" prop="taskContent">
<limit-textarea :inputWidth="372" :inputValue.sync="formData.taskContent" :holder="'请输入任务内容'" :getByType="'word'" :maxLength="200"></limit-textarea>
</el-form-item>
<!--<el-form-item label="使用说明" prop="useDescript">
<el-radio v-model="formData.radio" label="1">所有好友会员</el-radio>
<el-radio v-model="formData.radio" label="2">非会员好友</el-radio>
</el-form-item>-->
<el-form-item label="添加好友时间" prop="addTimeType">
<el-radio v-model="formData.addTimeType" label="1">近一个月</el-radio>
<el-radio v-model="formData.addTimeType" label="2">近一周</el-radio>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">确认{{ $route.query.sessionTaskId ? '编辑' : '新建' }}</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import limitInput from '@/components/limit-input.vue';
import limitTextarea from '@/components/limit-textarea.vue';
import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error';
import showMsg from '@/common/js/showmsg';
import { postRequest } from '@/api/api';
export default {
name: 'reviewed',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
activeTab: '1',
activeId: '1',
activeBrand: this.brandId, // 商户(品牌) id
wxEnterpriseId: localStorage.getItem('userInfos') ? JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId : '',
createName: !!localStorage.getItem('userInfos') && !!JSON.parse(localStorage.getItem('userInfos')).staffDTO ? JSON.parse(localStorage.getItem('userInfos')).staffDTO.staffName : '',
formData: {
taskTitle: '',
taskContent: '',
addTimeType: '1'
},
rules: {
taskTitle: [{ required: true, message: '请输入任务标题', trigger: 'blur' }],
taskContent: [{ required: true, message: '请输入任务内容', trigger: 'blur' }]
}
};
},
computed: {},
methods: {
/**
* 保存
*/
submitForm: _debounce(function(formName) {
let that = this;
that.$refs[formName].validate(valid => {
if (valid) {
that.postSave();
}
});
}, 500),
postSave() {
let that = this;
let para = {
taskTitle: that.formData.taskTitle,
taskContent: that.formData.taskContent,
addTimeType: that.formData.addTimeType,
wxEnterpriseId: that.wxEnterpriseId,
createName: that.createName
};
postRequest('/haoban-app-tel-task-three-web/create-session-task', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('保存成功', 'success');
that.$router.push('/taskList');
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 获取设置数据
*/
getData() {
let that = this;
let para = {
enterpriseId: that.activeBrand,
taskType: 1
};
postRequest('/haoban-app-tel-task-three-web/find-task-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
resData.result.relaxTaskJudge = resData.result.relaxTaskJudge == 1 ? true : false;
that.setObj = resData.result;
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
}
}
},
mounted() {
let that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
that.$emit('showTab', '3');
if (!!that.brandId) {
// that.getData();
}
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: { limitInput, limitTextarea }
};
</script>
<style type="text/scss" lang="scss" scoped>
.w-100 {
width: 100px;
}
.vertical-top {
vertical-align: top;
}
.task-set-content {
padding: 30px;
.task-set-cell {
/* padding: 30px 0; */
.el-date-editor.el-input {
width: 118px;
}
}
.set-line-item {
margin-bottom: 20px;
table {
tr {
td {
padding: 17px 30px;
border: 1px solid #ebeef5;
}
}
}
.set-line-item_title {
display: inline-block;
width: 120px;
&.w-320 {
width: 320px;
i {
font-style: normal;
padding-left: 10px;
}
}
}
}
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-06-08 13:40:59
-->
<template>
<div class="app-detail-wrap">
<div class="task-set-content boder-box">
<div class="task-set-cell">
<div class="set-line-item"><span class="set-line-item_title font-14 color-606266 text-right">任务归属:</span><el-radio v-model="setObj.taskBelong" label="1">成员所属专属导购 > 协管导购,若无专属导购,则随机分配给一名协管导购</el-radio></div>
<div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right">逾期设置:</span><span class="font-14 color-606266">话务任务下发后 </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-606266">注:0天即为当天下发,当天完成,1天即为当天下发,次日24:00之前完成</span>
</div>
<div class="set-line-item">
<span class="set-line-item_title font-14 color-606266 text-right"></span>
<el-button type="primary" :loading="loadingBtn" @click="saveSet">保存并用于全部商户</el-button>
</div>
</div>
<div class="task-set-save m-t-30">
<!-- <el-button type="primary" @click="saveSet">保 存</el-button> -->
</div>
</div>
</div>
</template>
<script>
import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error';
import showMsg from '@/common/js/showmsg';
import { postRequest } from '@/api/api';
export default {
name: 'reviewed',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
activeTab: '1',
activeId: '1',
activeBrand: this.brandId, // 商户(品牌) id
wxEnterpriseId: localStorage.getItem('userInfos') ? JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId : '',
setObj: {
taskBelong: '1',
overDayJudge: ''
},
loadingBtn: false
};
},
computed: {},
methods: {
/**
* 保存
*/
saveSet: _debounce(function() {
let that = this;
that.loadingBtn = true;
that.postSave();
}, 500),
postSave() {
let that = this;
let para = {
taskBelong: that.setObj.taskBelong,
overDayJudge: that.setObj.overDayJudge,
wxEnterpriseId: that.wxEnterpriseId
};
postRequest('/haoban-app-tel-task-three-web/setting/save-session-task-setting', para)
.then(res => {
let resData = res.data;
that.loadingBtn = false;
if (resData.errorCode == 1) {
showMsg.showmsg('保存成功', 'success');
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loadingBtn = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 获取设置数据
*/
getData() {
let that = this;
let para = {
wxEnterpriseId: that.wxEnterpriseId
};
postRequest('/haoban-app-tel-task-three-web/setting/find-session-task-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
if (!!resData.result) {
resData.result.taskBelong = String(resData.result.taskBelong);
} else {
resData.result = {};
resData.result.taskBelong = '1';
resData.result.overDayJudge = '';
}
that.setObj = resData.result;
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
that.getData();
}
}
},
mounted() {
let that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
that.$emit('showTab', '22');
that.getData();
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {}
};
</script>
<style type="text/scss" lang="scss" scoped>
.w-100 {
width: 100px;
}
.vertical-top {
vertical-align: top;
}
.task-set-content {
padding: 30px;
.task-set-cell {
/* padding: 30px 0; */
.el-date-editor.el-input {
width: 118px;
}
}
.set-line-item {
margin-bottom: 20px;
table {
tr {
td {
padding: 17px 30px;
border: 1px solid #ebeef5;
}
}
}
.set-line-item_title {
display: inline-block;
width: 120px;
&.w-320 {
width: 320px;
i {
font-style: normal;
padding-left: 10px;
}
}
}
}
}
</style>
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
<el-table-column prop="" label="AppID" width="239"> <el-table-column prop="" label="AppID" width="239">
<template slot="header"> <template slot="header">
<el-tooltip class="item" effect="dark" placement="top"> <el-tooltip class="item" effect="dark" placement="top">
<div slot="content">如何查看AppId:<a href="https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html">https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html</a></div> <div slot="content">如何查看AppId:<a href="https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html" target="blank">https://jingyan.baidu.com/article/95c9d20d0545f9ec4e75612d.html</a></div>
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">AppId</span> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">AppId</span>
</el-tooltip> </el-tooltip>
</template> </template>
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-08-26 10:05:42
-->
<template> <template>
<div class="my-customer-wrap common-set-wrap"> <div class="my-customer-wrap common-set-wrap">
<!-- <nav-crumb :navpath="navpath"> </nav-crumb> --> <!-- <nav-crumb :navpath="navpath"> </nav-crumb> -->
...@@ -26,6 +18,8 @@ ...@@ -26,6 +18,8 @@
<el-select class="w-103" v-model="pageParams.finishOverStatus" slot="prepend" placeholder="所有完成情况" @change="reFetch"> <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-option :label="item.text" :value="item.id" v-for="item in filterOpts" :key="'filter' + item.id"></el-option>
</el-select> </el-select>
<el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="pageParams.date" @change="reFetch" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker>
<el-input placeholder="请输入任务标题" prefix-icon="el-icon-search" v-model="pageParams.taskTitle" class="w-260 m-l-10" @change="reFetch" clearable> </el-input>
</div> </div>
<div class="m-t-20"> <div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;"> <el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;">
...@@ -59,7 +53,7 @@ ...@@ -59,7 +53,7 @@
<template slot-scope="scope"><span class="point" :style="'background:' + overdueStyle[scope.row.overdueStatus] + ';'"></span>{{ scope.row.overdueStatus === 1 ? '已逾期' : scope.row.overdueStatus === 2 ? '未逾期' : '' }}</template> <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>
<el-table-column label="完成情况" min-width="90"> <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> <template slot-scope="scope"><span v-if="scope.row.taskStatus" class="point" :style="'background:' + taskStyle[scope.row.taskStatus] + ';'"></span>{{ scope.row.taskStatus === 1 ? '未完成' : scope.row.taskStatus === 2 ? '已完成' : '' }}</template>
</el-table-column> </el-table-column>
<el-table-column label="完成详情" min-width="280"> <el-table-column label="完成详情" min-width="280">
<template slot-scope="scope"> 待发送:{{ scope.row.waitSendCount }},已发送:{{ scope.row.successCount }},发送失败:{{ scope.row.failCount }} </template> <template slot-scope="scope"> 待发送:{{ scope.row.waitSendCount }},已发送:{{ scope.row.successCount }},发送失败:{{ scope.row.failCount }} </template>
...@@ -211,6 +205,11 @@ export default { ...@@ -211,6 +205,11 @@ export default {
enterpriseId: sessionStorage.getItem('userInfoBrandId'), enterpriseId: sessionStorage.getItem('userInfoBrandId'),
storeId: that.$route.params.id storeId: that.$route.params.id
}; };
if (Array.isArray(para.date) && para.date.length === 2) {
para.startTime = para.date[0];
para.endTime = para.date[1];
delete para.date;
}
if (this.$route.query.ecmPlanId) { if (this.$route.query.ecmPlanId) {
para.ecmPlanId = this.$route.query.ecmPlanId; para.ecmPlanId = this.$route.query.ecmPlanId;
} }
...@@ -304,9 +303,9 @@ export default { ...@@ -304,9 +303,9 @@ export default {
that.getTableList(); that.getTableList();
}); });
if (that.$route.query.tab) { if (that.$route.query.tab) {
that.$emit('showTab', 2); that.$emit('showTab', '212', '2121', '21211');
} else { } else {
that.$emit('showTab', 1); that.$emit('showTab', '211', '2111');
} }
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
}, },
......
...@@ -21,13 +21,17 @@ ...@@ -21,13 +21,17 @@
</el-popover> </el-popover>
</div> </div>
<div class="table-condition-search m-t-20"> <div class="table-condition-search m-t-20">
<el-input placeholder="请输入门店名称" prefix-icon="el-icon-search" v-model="pageParams.storeName" class="w-260" @change="reFetch" clearable @clear="clearInput"> </el-input> <el-input placeholder="请输入门店名称" prefix-icon="el-icon-search" v-model="pageParams.storeName" class="w-260" @change="reFetch" clearable> </el-input>
<gic-select-group :brandId="brandId" class="m-l-10" :width="213" :selectData="pageParams.storeGroup" @checkGroupIds="checkGroupIds"> </gic-select-group>
<el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="pageParams.date" @change="reFetch" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker> <el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="pageParams.date" @change="reFetch" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker>
</div> </div>
<div class="m-t-20"> <div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;"> <el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;">
<el-table-column label="门店名称" show-overflow-tooltip> <el-table-column label="门店名称" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.storeName || '--' }}</template> <template slot-scope="scope"
>{{ scope.row.storeName || '--' }}
<p style="color:#909399">{{ scope.row.storeCode }}</p>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="任务总数"> <el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template> <template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
...@@ -46,7 +50,7 @@ ...@@ -46,7 +50,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="" label="操作" width="150"> <el-table-column prop="" label="操作" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">任务详情</el-button> <el-button type="text" @click="showDetail(scope.row)">查看详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -62,6 +66,7 @@ ...@@ -62,6 +66,7 @@
</div> </div>
</template> </template>
<script> <script>
import gicSelectGroup from '@/components/common/gic-select-group.vue';
import navCrumb from '@/components/nav/nav.vue'; import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api'; import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
...@@ -89,13 +94,18 @@ export default { ...@@ -89,13 +94,18 @@ export default {
path: '/index' path: '/index'
}, },
{ {
name: '销售线索', name: '营销任务',
path: '/trafficTaskSet'
},
{
name: '话务任务-话务任务设置',
path: '' path: ''
} }
], ],
pageParams: { pageParams: {
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20,
storeGroup: []
}, },
// 分页参数 // 分页参数
total: 0, total: 0,
...@@ -121,6 +131,11 @@ export default { ...@@ -121,6 +131,11 @@ export default {
}, },
computed: {}, computed: {},
methods: { methods: {
checkGroupIds: function(nodes) {
const that = this;
that.pageParams.storeGroup = nodes;
that.reFetch();
},
/** /**
* 路由跳转 * 路由跳转
*/ */
...@@ -167,6 +182,14 @@ export default { ...@@ -167,6 +182,14 @@ export default {
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId, qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
taskType: 2 taskType: 2
}; };
if (that.pageParams.storeGroup) {
let storeGroups = [];
that.pageParams.storeGroup.forEach(ele => {
storeGroups.push(ele.storeGroupId);
});
delete para.storeGroup;
para.storeGroupIds = storeGroups.join(',') || '';
}
if (para.date) { if (para.date) {
para.startTime = para.date[0]; para.startTime = para.date[0];
para.endTime = para.date[1]; para.endTime = para.date[1];
...@@ -214,11 +237,11 @@ export default { ...@@ -214,11 +237,11 @@ export default {
}, },
mounted() { mounted() {
const that = this; const that = this;
if (this.brandId) that.getTableList(); that.getTableList();
if (this.$route.query.ecmPlanId) { if (this.$route.query.ecmPlanId) {
that.$emit('showTab', 2); that.$emit('showTab', '212', '2121');
} else { } else {
that.$emit('showTab', 1); that.$emit('showTab', '211');
} }
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
}, },
...@@ -226,7 +249,8 @@ export default { ...@@ -226,7 +249,8 @@ export default {
document.documentElement.style.backgroundColor = '#fff'; document.documentElement.style.backgroundColor = '#fff';
}, },
components: { components: {
navCrumb navCrumb,
gicSelectGroup
} }
}; };
</script> </script>
......
...@@ -215,7 +215,7 @@ export default { ...@@ -215,7 +215,7 @@ export default {
mounted() { mounted() {
const that = this; const that = this;
that.getTableList(); that.getTableList();
that.$emit('showTab', 2); that.$emit('showTab', 212);
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
}, },
destroyed() { destroyed() {
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</div> </div>
<div class="apps-content-right border-box"> <div class="apps-content-right border-box">
<transition name="fade" mode="out-in"> <transition name="fade" mode="out-in">
<router-view :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab"></router-view> <router-view :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab" @reNav="reNav"></router-view>
</transition> </transition>
</div> </div>
</div> </div>
...@@ -32,139 +32,213 @@ ...@@ -32,139 +32,213 @@
</div> </div>
</div> </div>
</div> </div>
<expired-dialog v-if="expiredFlag"></expired-dialog>
</div> </div>
</template> </template>
<script> <script>
import navCrumb from '@/components/nav/nav-app.vue'; import navCrumb from '@/components/nav/nav-app.vue';
import commonDetailLeft from '@/components/app/app-detail-left.vue'; import commonDetailLeft from '@/components/app/app-detail-left.vue';
import expiredDialog from '@/components/company/expired-dialog.vue';
import vueOfficeHeader from '@/components/vue-office-header'; import vueOfficeHeader from '@/components/vue-office-header';
import errMsg from '@/common/js/error';
import { getRequest } from '@/api/api';
export default { export default {
name: 'salesleads', name: 'salesleads',
data() { data() {
return { return {
bgHeight: window.screen.availHeight - 288 + 'px', bgHeight: window.screen.availHeight - 288 + 'px',
activeSelTab: '0', activeSelTab: '11',
activeTab: '1', activeTab: '11',
activeBrand: '', activeBrand: '',
activeGroup: '',
expiredFlag: false,
navpath: [ navpath: [
{ {
name: '首页', name: '首页',
path: '/index' path: '/index'
}, },
{ {
name: '销售线索', name: '营销任务',
path: '' path: '/trafficTaskSet'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '营销任务',
path: '/trafficTaskSet'
} }
], ],
tabListData: [ tabListData: [
// {
// tabId: '0',
// tabName: '销售线索记录',
// icon: 'iconjichushezhi',
// children: [
// {
// tabId: '1',
// tabName: '门店视图'
// },
// {
// tabId: '2',
// tabName: '计划视图'
// }
// ]
// },
// {
// tabId: '3',
// tabName: '销售线索设置',
// icon: 'iconribaoshezhi'
// }
{ {
tabId: '0', tabId: '1',
tabName: '群发任务记录', tabName: '话务任务',
icon: 'iconjichushezhi', icon: 'iconjichushezhi',
children: [ children: [
{ {
tabId: '1', tabId: '11',
tabName: '门店视图' tabName: '话务任务设置',
icon: 'iconribaoshezhi'
}, },
{ {
tabId: '2', tabId: '12',
tabName: '计划视图' tabName: '话务任务记录',
icon: 'iconribaoshezhi',
// collapsFlag: true, // 三级菜单手动设置默认展开
children: [
{
tabId: '121',
tabName: '门店视图'
},
{
tabId: '122',
tabName: '任务视图'
}
]
}
]
},
{
tabId: '2',
tabName: '群发任务',
icon: 'iconjichushezhi',
children: [
{
tabId: '21',
tabName: '群发任务记录',
icon: 'iconjichushezhi',
children: [
{
tabId: '211',
tabName: '门店视图'
},
{
tabId: '212',
tabName: '计划视图'
}
]
} }
] ]
} }
] ],
navName: {
11: '话务任务-话务任务设置',
121: '话务任务-话务任务记录-门店视图',
1211: '任务详情',
122: '话务任务-话务任务记录-任务视图',
1221: '任务门店详情',
12211: '任务详情',
211: '群发任务-群发任务记录-门店视图',
2111: '任务详情',
212: '群发任务-群发任务记录-计划视图',
2121: '任务门店详情',
21211: '任务详情'
},
navFrontPath: {
11: '/trafficTaskSet',
121: '/trafficTaskSet',
1211: '/taskRecord',
122: '/trafficTaskSet',
1221: '/taskView',
211: '/trafficTaskSet',
2111: '/grStoreList',
212: '/trafficTaskSet',
2121: '/grTaskList'
}
}; };
}, },
computed: {}, computed: {},
methods: { methods: {
// 处理路由跳转
toRouterView(val) { toRouterView(val) {
let that = this; let that = this;
// 模拟检查数据
// //有两个参数
//{
// name:,
// path:
//}
that.$router.push({ that.$router.push({
path: val.path path: val.path
}); });
}, },
/**
* 路由跳转
*/
changeRoute(path) { changeRoute(path) {
this.$router.push(path); this.$router.push(path);
}, },
/**
* 选择后返回tabId,做各路由判断
*/
setSelectTab(item) { setSelectTab(item) {
let that = this; let that = this;
that.activeTab = item.tabId; that.activeTab = item.tabId;
this.navpath[2] = { name: this.navName[item.tabId], path: '' };
switch (item.tabId) { switch (item.tabId) {
case '0': case '1':
that.changeRoute(`/trafficTaskSet`);
break;
case '11':
that.changeRoute(`/trafficTaskSet`);
break;
case '12':
that.changeRoute(`/taskRecord`);
break;
case '121':
that.changeRoute(`/taskRecord`);
break;
case '122':
that.changeRoute(`/taskView`);
break;
case '2':
that.changeRoute(`/grStoreList`); that.changeRoute(`/grStoreList`);
break; break;
case '1': case '21':
that.changeRoute(`/grStoreList`); that.changeRoute(`/grStoreList`);
break; break;
case '2': case '211':
that.changeRoute(`/grStoreList`);
break;
case '212':
that.changeRoute(`/grTaskList`); that.changeRoute(`/grTaskList`);
break; break;
} }
}, },
selectBrandId(val) {
this.activeBrand = val; selectBrandId(id, groupId) {
sessionStorage.setItem('userInfoBrandId', val); let that = this;
that.activeBrand = id;
that.activeGroup = groupId;
sessionStorage.setItem('userInfoBrandId', id);
that.getExpired(); // 到期通知
},
getExpired() {
const that = this;
let para = {
enterpriseId: that.activeBrand
};
getRequest('/haoban-manage3-web/enterprise-is-over', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.expiredFlag = resData.result;
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}, },
/** /**
* 各路由返回 tabId * 各路由返回 tabId
*/ */
showTab(id) { showTab(id) {
let ids = [...arguments];
let that = this; let that = this;
that.activeTab = id; that.activeTab = id;
that.activeSelTab = id; that.activeSelTab = id;
that.tabListData.forEach(ele => { this.navpath = [...this.defaultNavpath];
if (ele.tabId == id) { if (ids.length) {
ele.onlyIconActive = false; ids.map(tabId => {
} this.navpath[this.navpath.length - 1].path = tabId === '21211' ? `/grStoreList?ecmPlanId=${this.$route.query.ecmPlanId}` : tabId === '12211' ? `/taskViewDetail?ecmId=${this.$route.query.ecmId}` : this.navFrontPath[tabId];
if (!!ele.children) { this.navpath.push({ name: this.navName[tabId], path: '' });
ele.children.forEach(el => { });
if (el.tabId == id) { }
ele.onlyIconActive = true;
}
if (!!el.children) {
el.children.forEach(item => {
if (item.tabId == id) {
ele.onlyIconActive = true;
}
});
}
});
}
});
} }
}, },
watch: { watch: {
...@@ -179,7 +253,8 @@ export default { ...@@ -179,7 +253,8 @@ export default {
} }
}, },
mounted() { mounted() {
// const that = this; this.activeBrand = sessionStorage.getItem('userInfoBrandId');
if (this.activeBrand) this.getExpired(); // 到期通知
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
}, },
destroyed() { destroyed() {
...@@ -188,7 +263,9 @@ export default { ...@@ -188,7 +263,9 @@ export default {
components: { components: {
navCrumb, navCrumb,
commonDetailLeft, commonDetailLeft,
vueOfficeHeader vueOfficeHeader,
expiredDialog,
errMsg
} }
}; };
</script> </script>
......
<template>
<div class="my-customer-wrap common-set-wrap">
<div class="right-content">
<div class="flex">
<p class="m-r-11 font-14 color-606266">电话方式选择:</p>
<div>
<el-checkbox-group v-model="callType">
<el-checkbox label="1">
<div class="m-b-21" style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5">公司电话</p>
<p class="tip">1.对接第三方呼叫中心,外呼显示第三方号码,可监控通话状态。费用结算及通话记录存储于GIC计费中心</p>
<p class="tip">2.若任务创建时无双向呼叫权限,此项设置勾选也不生效</p>
</div>
</el-checkbox>
<el-checkbox label="2" class="m-b-24">
<div class="m-b-21" style="display:inline-block;vertical-align:top;">
<p class="l-h-1 m-b-5">私人电话</p>
<p class="tip">导购手机呼叫,无法监控通话状态。呼叫结算费用由导购手机自费</p>
</div>
</el-checkbox>
</el-checkbox-group>
<p><el-button type="primary" @click="submitForm" :loading="loading">保存</el-button><span class="font-14 color-909399 m-l-12">保存后立即生效,历史数据不变,后续下达的任务按新设置运行</span></p>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { postRequest } from '@/api/api';
import errMsg from '@/common/js/error';
export default {
name: 'authMerchant',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 104 + 'px',
callType: [], // 0 : 未设置, 1 : 公司电话(双向呼叫), 2 : 私人电话, 多个请用逗号拼接
loading: false
};
},
computed: {},
methods: {
/**
* 路由跳转
* @param {path} path
*/
changeRoute(path) {
this.$router.push(path);
},
submitForm() {
const that = this;
if (that.loading === true) {
return false;
}
that.loading = true;
that
.$confirm('是否确认保存该设置?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
let para = {
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (that.callType.length) {
para.callType = that.callType.join(',');
} else {
para.callType = '0';
}
postRequest('/haoban-task-manage-web/market/clue/web/setting-update', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
that.$message.success({
duration: 1000,
message: '保存成功!'
});
that.loading = false;
that.getDeatil();
return false;
}
that.loading = false;
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
})
.catch(() => {
that.loading = false;
});
},
getDeatil() {
const that = this;
let para = {
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
postRequest('/haoban-task-manage-web/market/clue/web/get-setting', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
if (resData.result && resData.result.callType !== '0') {
that.callType = resData.result.callType.split(',');
} else {
that.callType = [];
}
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId(newV, oldV) {
this.getDeatil();
}
},
mounted() {
this.$emit('showTab', 3);
this.getDeatil();
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.right-content {
padding: 33px 0 0 50px;
}
.el-checkbox {
display: flex;
min-height: 22px;
>>> .el-checkbox__label {
padding-top: 1px;
}
}
.el-checkbox + .el-checkbox {
margin-left: 0;
}
.m-l-12 {
margin-left: 12px;
}
.m-r-11 {
margin-right: 11px;
}
.m-b-5 {
margin-bottom: 5px;
}
.m-b-21 {
margin-bottom: 21px;
}
.m-b-24 {
margin-bottom: 24px;
}
.font-14 {
font-size: 14px;
}
.l-h-1 {
line-height: 1;
}
.tip {
font-size: 12px;
color: #909399;
line-height: 22px;
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-09-21 18:25:20
-->
<template> <template>
<div class="my-customer-wrap common-set-wrap"> <div class="my-customer-wrap common-set-wrap">
<div class="daily-set-content boder-box"> <div class="daily-set-content boder-box">
...@@ -17,9 +9,8 @@ ...@@ -17,9 +9,8 @@
<el-select v-model="conditionObj.overdue" placeholder="请选择" class="w-135 m-l-10" @change="changeSelect"> <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-option v-for="item in overOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select> </el-select>
<el-select v-if="!$route.query.ecmId" v-model="conditionObj.taskType" placeholder="请选择" class="w-105 m-l-10" @change="changeSelect"> <el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="conditionObj.date" @change="changeSelect" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker>
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option> <el-input placeholder="请输入任务标题" prefix-icon="el-icon-search" v-model.trim="conditionObj.title" class="w-260 m-l-10" @change="changeSelect" clearable> </el-input>
</el-select>
</div> </div>
<div class="table-condition-right"> <div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button> <el-button type="danger" @click="multDel">批量删除</el-button>
...@@ -72,8 +63,12 @@ ...@@ -72,8 +63,12 @@
</div> </div>
</el-popover> </el-popover>
<div class="clerk-info flex flex-column flex-space-between m-l-16" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> <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.clerkName }}</p> <p class="font-14 color-303133" style="line-height: 18px;overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<p class="font-14 color-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.clerkPhone }}</p> {{ scope.row.clerkName }}
</p>
<p class="font-14 color-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">
{{ scope.row.clerkPhone }}
</p>
</div> </div>
</div> </div>
</template> </template>
...@@ -113,17 +108,21 @@ ...@@ -113,17 +108,21 @@
<img v-else :src="scope.row.memberHeadUrl" alt="img" /> <img v-else :src="scope.row.memberHeadUrl" alt="img" />
</div> </div>
<div class="clerk-info flex flex-column flex-space-between m-l-16" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"> <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-303133" style="line-height: 18px;overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<p class="font-14 color-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.memberCardNo }}</p> {{ 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>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="任务类型"> <!-- <el-table-column label="任务类型">
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.taskType == '0' ? '不良评价' : scope.row.taskType == '5' ? '会话任务' : '话务任务' }}</div> <div>{{ scope.row.taskType == '0' ? '不良评价' : scope.row.taskType == '5' ? '会话任务' : '话务任务' }}</div>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column label="创建时间" width="107"> <el-table-column label="创建时间" width="107">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="line-18">{{ scope.row.createTime | formatTimeYMD }}</div> <div class="line-18">{{ scope.row.createTime | formatTimeYMD }}</div>
...@@ -240,7 +239,8 @@ export default { ...@@ -240,7 +239,8 @@ export default {
conditionObj: { conditionObj: {
completed: '', completed: '',
overdue: '', overdue: '',
taskType: '' title: '',
taskType: '1'
}, },
completedOptions: [ completedOptions: [
{ {
...@@ -278,24 +278,6 @@ export default { ...@@ -278,24 +278,6 @@ export default {
value: '0' value: '0'
} }
], ],
typeOptions: [
{
label: '所有类型',
value: ''
},
{
label: 'ECM话务任务',
value: '1'
},
{
label: '不良评价',
value: '0'
},
{
label: '会话任务',
value: '5'
}
],
loading: false, loading: false,
tableData: [], tableData: [],
multipleSelection: [], multipleSelection: [],
...@@ -316,7 +298,13 @@ export default { ...@@ -316,7 +298,13 @@ export default {
headImg: '' headImg: ''
}, },
taskDetailVisible: false, taskDetailVisible: false,
taskDetail: {} taskDetail: {},
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
}; };
}, },
computed: {}, computed: {},
...@@ -390,7 +378,7 @@ export default { ...@@ -390,7 +378,7 @@ export default {
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function (error) { .catch(function(error) {
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
message: error.message message: error.message
...@@ -420,7 +408,7 @@ export default { ...@@ -420,7 +408,7 @@ export default {
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function (error) { .catch(function(error) {
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
message: error.message message: error.message
...@@ -433,15 +421,6 @@ export default { ...@@ -433,15 +421,6 @@ export default {
handleCommand(command) { handleCommand(command) {
this.selectRadio = command; this.selectRadio = command;
}, },
/**
* 选择条件
*/
changeSelect() {
let that = this;
that.currentPage = 1;
that.getTableList();
},
/** /**
* 表格选择 * 表格选择
*/ */
...@@ -479,7 +458,6 @@ export default { ...@@ -479,7 +458,6 @@ export default {
postMultDel(obj) { postMultDel(obj) {
let that = this; let that = this;
let para = { let para = {
// taskType: 1, // 0 不良评价,1 话务任务
storeId: that.$route.query.storeId, storeId: that.$route.query.storeId,
taskIds: that.selectRadio == 1 ? '' : that.multipleSelection.map(ele => ele.taskId).join(','), // 门店分组,数组 taskIds: that.selectRadio == 1 ? '' : that.multipleSelection.map(ele => ele.taskId).join(','), // 门店分组,数组
isOverTime: that.conditionObj.overdue || '', // 逾期 isOverTime: that.conditionObj.overdue || '', // 逾期
...@@ -499,7 +477,7 @@ export default { ...@@ -499,7 +477,7 @@ export default {
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function (error) { .catch(function(error) {
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
message: error.message message: error.message
...@@ -527,6 +505,11 @@ export default { ...@@ -527,6 +505,11 @@ export default {
that.currentPage = val; that.currentPage = val;
that.getTableList(); that.getTableList();
}, },
changeSelect(val) {
const that = this;
that.currentPage = 1;
that.getTableList();
},
/** /**
* 删除 * 删除
...@@ -572,7 +555,7 @@ export default { ...@@ -572,7 +555,7 @@ export default {
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function (error) { .catch(function(error) {
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
message: error.message message: error.message
...@@ -607,15 +590,18 @@ export default { ...@@ -607,15 +590,18 @@ export default {
that.loading = true; that.loading = true;
let para = { let para = {
ecmId: that.$route.query.ecmId || '', ecmId: that.$route.query.ecmId || '',
taskType: that.conditionObj.taskType, // 0-不良评价回访 1-ecm话务任务
storeId: that.$route.query.storeId || '', // 门店 storeId: that.$route.query.storeId || '', // 门店
isOverTime: that.conditionObj.overdue || '', // 逾期 isOverTime: that.conditionObj.overdue || '', // 逾期
isCompleted: that.conditionObj.completed || '', isCompleted: that.conditionObj.completed || '',
title: that.conditionObj.title || '', // 任务标题
pageNum: that.currentPage, // 当前页 pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数 pageSize: that.pageSize, // 一页显示个数
gicEnterpriseId: that.activeBrand gicEnterpriseId: that.activeBrand
// taskType: 1
}; };
if (Array.isArray(that.conditionObj.date) && that.conditionObj.date.length === 2) {
para.createTimeStart=that.conditionObj.date[0];
para.createTimeEnd=that.conditionObj.date[1];
}
getRequest('/haoban-app-tel-task-three-web/task/clerk-task-list', para) getRequest('/haoban-app-tel-task-three-web/task/clerk-task-list', para)
.then(res => { .then(res => {
let resData = res.data; let resData = res.data;
...@@ -634,7 +620,7 @@ export default { ...@@ -634,7 +620,7 @@ export default {
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
}) })
.catch(function (error) { .catch(function(error) {
that.loading = false; that.loading = false;
that.$message.error({ that.$message.error({
duration: 1000, duration: 1000,
...@@ -643,7 +629,7 @@ export default { ...@@ -643,7 +629,7 @@ export default {
}); });
}, },
getTaskDetail(item) { getTaskDetail(item) {
this.taskDetail = {...item}; this.taskDetail = { ...item };
this.taskDetailVisible = true; this.taskDetailVisible = true;
}, },
closeTaskDetail() { closeTaskDetail() {
...@@ -652,7 +638,7 @@ export default { ...@@ -652,7 +638,7 @@ export default {
} }
}, },
watch: { watch: {
brandId: function (newData, oldData) { brandId: function(newData, oldData) {
const that = this; const that = this;
if (!!newData) { if (!!newData) {
that.activeBrand = newData; that.activeBrand = newData;
...@@ -662,7 +648,11 @@ export default { ...@@ -662,7 +648,11 @@ export default {
}, },
mounted() { mounted() {
let that = this; let that = this;
that.$emit('showTab', '11'); if (!!this.$route.query.ecmId) {
that.$emit('showTab', '122', '1221', '12211');
} else {
that.$emit('showTab', '121', '1211');
}
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId; that.activeBrand = that.brandId;
that.conditionObj.storeId = that.$route.query.storeId; that.conditionObj.storeId = that.$route.query.storeId;
...@@ -685,6 +675,14 @@ export default { ...@@ -685,6 +675,14 @@ export default {
.w-135 { .w-135 {
width: 135px; width: 135px;
} }
.w-260 {
width: 260px;
}
.table-condition-left {
display: flex;
justify-content: flex-start;
align-items: center;
}
.task-imgs { .task-imgs {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
......
...@@ -14,13 +14,8 @@ ...@@ -14,13 +14,8 @@
<i class="el-alert__icon el-icon-info"></i> <i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title"> <span class="el-alert__title">
<!-- 话务任务应用下线通知:<br /> 1.此处仅统计近一年内的数据<br />
1.【话务任务】预计将于5月下旬下线,功能将由【销售线索】替代;<br /> 2.门店下具体某条话务任务的完成状态每天更新一次;下方列表中任务完成数据统计也为每天统计更新一次,非实时刷新。
2.【话务任务】下线后,【GIC后台-智能营销】中的“话务”事件也将下线,后续如需针对门店终端下发任务,请通过【GIC后台-智能营销】中的“企微任务”事件下发;<br />
3.【话务任务】下线后,该应用中原本的“会话任务”也会下线,“不良评价回访”任务将转移至其他应用,请知悉<br /> -->
1.仅统计近一年数据;<br />
2.话务任务统计数据每日刷新一次;<br />
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
</span> </span>
</div> </div>
</div> </div>
...@@ -37,10 +32,10 @@ ...@@ -37,10 +32,10 @@
</div> </div>
</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 class="select-table" ref="multipleTable" :key="tableRefresh" 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 type="selection" width="45"> </el-table-column>
<el-table-column width="25"> <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"> <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> <span class="el-dropdown-link"><i class="iconfont icongengduo"></i> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
...@@ -49,11 +44,12 @@ ...@@ -49,11 +44,12 @@
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
<template slot-scope="scope"> </template> <template slot-scope="scope">{{ scope ? ' ' : ' ' }}</template>
</el-table-column> </el-table-column>
<el-table-column label="门店名称" width="120" show-overflow-tooltip> <el-table-column label="门店名称" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div> <div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div>
<p style="color:#909399">{{ scope.row.storeCode }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="任务总数"> <el-table-column prop="" label="任务总数">
...@@ -128,7 +124,8 @@ export default { ...@@ -128,7 +124,8 @@ export default {
currentPage: 1, currentPage: 1,
pageSize: 20, pageSize: 20,
total: 0, total: 0,
loadingBtn: false loadingBtn: false,
tableRefresh: false
}; };
}, },
computed: {}, computed: {},
...@@ -148,6 +145,7 @@ export default { ...@@ -148,6 +145,7 @@ export default {
*/ */
handleCommand(command) { handleCommand(command) {
this.selectRadio = command; this.selectRadio = command;
this.tableRefresh = !this.tableRefresh;
}, },
/** /**
...@@ -453,6 +451,7 @@ export default { ...@@ -453,6 +451,7 @@ export default {
that.conditionObj.dateRange = that.initDataRange(); that.conditionObj.dateRange = that.initDataRange();
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId; that.activeBrand = that.brandId;
that.$emit('showTab', 121);
if (!!this.brandId) { if (!!this.brandId) {
that.$nextTick(() => { that.$nextTick(() => {
that.getTableList(); that.getTableList();
......
...@@ -62,7 +62,7 @@ export default { ...@@ -62,7 +62,7 @@ export default {
}, },
mounted() { mounted() {
const that = this; const that = this;
that.$emit('showTab', '12'); that.$emit('showTab', '122');
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId; that.activeBrand = that.brandId;
}, },
......
...@@ -472,7 +472,7 @@ export default { ...@@ -472,7 +472,7 @@ export default {
}, },
mounted() { mounted() {
const that = this; const that = this;
that.$emit('showTab', '12'); that.$emit('showTab', '122', '1221');
that.conditionObj.dateRange = that.initDataRange(); that.conditionObj.dateRange = that.initDataRange();
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId; that.activeBrand = that.brandId;
......
...@@ -222,7 +222,7 @@ export default { ...@@ -222,7 +222,7 @@ export default {
mounted() { mounted() {
let that = this; let that = this;
document.documentElement.style.backgroundColor = '#f0f2f5'; document.documentElement.style.backgroundColor = '#f0f2f5';
that.$emit('showTab', '21'); that.$emit('showTab', '11');
if (!!that.brandId) { if (!!that.brandId) {
that.getData(); that.getData();
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
@font-face { @font-face {
font-family: "iconfont"; font-family: "iconfont";
/* Project id 1628375 */ /* Project id 1628375 */
src: url('iconfont.woff2?t=1621413599446') format('woff2'), url('iconfont.woff?t=1621413599446') format('woff'), url('iconfont.ttf?t=1621413599446') format('truetype'); src: url('iconfont.woff2?t=1626682155511') format('woff2'), url('iconfont.woff?t=1626682155511') format('woff'), url('iconfont.ttf?t=1626682155511') format('truetype');
} }
.iconfont { .iconfont {
font-family: "iconfont" !important; font-family: "iconfont" !important;
font-size: 16px; font-size: 16px;
font-style: normal; font-style: normal;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
}
.icondingdan_pingjia:before {
content: "\e654";
} }
.iconxiaochengxu:before { .iconxiaochengxu:before {
content: "\e625"; content: "\e625";
} }
.iconpre:before { .iconpre:before {
content: "\e641"; content: "\e641";
} }
.iconnext:before { .iconnext:before {
content: "\e640"; content: "\e640";
} }
.iconhuanyingci:before { .iconhuanyingci:before {
content: "\e60d"; content: "\e60d";
} }
.iconnew:before { .iconnew:before {
content: "\e61d"; content: "\e61d";
} }
.iconmingxibeifen:before { .iconmingxibeifen:before {
content: "\eae0"; content: "\eae0";
} }
.iconshangpinshezhi:before { .iconshangpinshezhi:before {
content: "\e60b"; content: "\e60b";
} }
.icongukeguanliicon:before { .icongukeguanliicon:before {
content: "\e60a"; content: "\e60a";
} }
.iconshuaxin1:before { .iconshuaxin1:before {
content: "\e613"; content: "\e613";
} }
.icongou:before { .icongou:before {
content: "\e606"; content: "\e606";
} }
.iconshouquanyanzheng:before { .iconshouquanyanzheng:before {
content: "\e687"; content: "\e687";
} }
.iconhuaban:before { .iconhuaban:before {
content: "\e62a"; content: "\e62a";
} }
.iconsucaiku:before { .iconsucaiku:before {
content: "\eab6"; content: "\eab6";
} }
.iconwenjian1:before { .iconwenjian1:before {
content: "\eaae"; content: "\eaae";
} }
.iconbofang1:before { .iconbofang1:before {
content: "\eaad"; content: "\eaad";
} }
.iconbiaoqing:before { .iconbiaoqing:before {
content: "\e612"; content: "\e612";
} }
.iconwenzi:before { .iconwenzi:before {
content: "\e611"; content: "\e611";
} }
.icondaima:before { .icondaima:before {
content: "\e6bc"; content: "\e6bc";
} }
.icontupian:before { .icontupian:before {
content: "\e73a"; content: "\e73a";
} }
.iconwenjian:before { .iconwenjian:before {
content: "\e62d"; content: "\e62d";
} }
.iconshipin:before { .iconshipin:before {
content: "\e605"; content: "\e605";
} }
.icontuozhuaiopen:before { .icontuozhuaiopen:before {
content: "\e61c"; content: "\e61c";
} }
.icontoufang2:before { .icontoufang2:before {
content: "\e845"; content: "\e845";
} }
.iconcelve:before { .iconcelve:before {
content: "\eaa9"; content: "\eaa9";
} }
.iconmoban:before { .iconmoban:before {
content: "\e619"; content: "\e619";
} }
.icontongxunlu:before { .icontongxunlu:before {
content: "\e64e"; content: "\e64e";
} }
.iconwodeqiaquan-:before { .iconwodeqiaquan-:before {
content: "\e6bb"; content: "\e6bb";
} }
.iconhuihuajinglingicon-:before { .iconhuihuajinglingicon-:before {
content: "\e678"; content: "\e678";
} }
.iconshibai:before { .iconshibai:before {
content: "\e60e"; content: "\e60e";
} }
.iconchenggong:before { .iconchenggong:before {
content: "\e63c"; content: "\e63c";
} }
.iconqiyeweixin:before { .iconqiyeweixin:before {
content: "\e628"; content: "\e628";
} }
.iconnan:before { .iconnan:before {
content: "\e629"; content: "\e629";
} }
.iconxingbienv:before { .iconxingbienv:before {
content: "\e66b"; content: "\e66b";
} }
.iconrenwuzhipai:before { .iconrenwuzhipai:before {
content: "\e7a5"; content: "\e7a5";
} }
.iconwanchengrenwu:before { .iconwanchengrenwu:before {
content: "\ea6c"; content: "\ea6c";
} }
.iconziyuan1:before { .iconziyuan1:before {
content: "\e6a4"; content: "\e6a4";
} }
.icondingwei:before { .icondingwei:before {
content: "\e918"; content: "\e918";
} }
.icongengduo2:before { .icongengduo2:before {
content: "\ea5b"; content: "\ea5b";
} }
.iconqiyexinxi:before { .iconqiyexinxi:before {
content: "\ea7a"; content: "\ea7a";
} }
.iconjia:before { .iconjia:before {
content: "\ea79"; content: "\ea79";
} }
.icondaishenhe_orange:before { .icondaishenhe_orange:before {
content: "\e604"; content: "\e604";
} }
.iconrenwu1:before { .iconrenwu1:before {
content: "\e607"; content: "\e607";
} }
.iconshenhe:before { .iconshenhe:before {
content: "\e772"; content: "\e772";
} }
.icongengduo1:before { .icongengduo1:before {
content: "\e68c"; content: "\e68c";
} }
.iconjian:before { .iconjian:before {
content: "\e634"; content: "\e634";
} }
.iconguanliyuanliebiao:before { .iconguanliyuanliebiao:before {
content: "\e609"; content: "\e609";
} }
.iconbumen:before { .iconbumen:before {
content: "\ea78"; content: "\ea78";
} }
.iconxiafa:before { .iconxiafa:before {
content: "\e64a"; content: "\e64a";
} }
.icongengduo:before { .icongengduo:before {
content: "\e603"; content: "\e603";
} }
.iconxitongguanlitubiao_mobanshezhi:before { .iconxitongguanlitubiao_mobanshezhi:before {
content: "\e618"; content: "\e618";
} }
.iconribao:before { .iconribao:before {
content: "\e750"; content: "\e750";
} }
.iconribaoshezhi:before { .iconribaoshezhi:before {
content: "\e7f4"; content: "\e7f4";
} }
.iconrenwu:before { .iconrenwu:before {
content: "\e77a"; content: "\e77a";
} }
.iconzhibiao:before { .iconzhibiao:before {
content: "\e610"; content: "\e610";
} }
.iconhuawujinengzupeizhi:before { .iconhuawujinengzupeizhi:before {
content: "\e601"; content: "\e601";
} }
.iconbuliangpingjiashezhi:before { .iconbuliangpingjiashezhi:before {
content: "\e7f6"; content: "\e7f6";
} }
.iconhuawushuju:before { .iconhuawushuju:before {
content: "\e600"; content: "\e600";
} }
.iconshuaxin:before { .iconshuaxin:before {
content: "\e61b"; content: "\e61b";
} }
.iconqiaquan:before { .iconqiaquan:before {
content: "\e6b6"; content: "\e6b6";
} }
.iconjichushezhi:before { .iconjichushezhi:before {
content: "\e65e"; content: "\e65e";
} }
.icontianjiajiahaowubiankuang:before { .icontianjiajiahaowubiankuang:before {
content: "\e81a"; content: "\e81a";
} }
.iconchengyuan:before { .iconchengyuan:before {
content: "\e61a"; content: "\e61a";
} }
.iconnavigate_next:before { .iconnavigate_next:before {
content: "\e62f"; content: "\e62f";
} }
.iconchangyongicon-:before { .iconchangyongicon-:before {
content: "\e617"; content: "\e617";
} }
.iconqiye-tianchong:before { .iconqiye-tianchong:before {
content: "\e730"; content: "\e730";
} }
.iconzuzhijiagouguanli:before { .iconzuzhijiagouguanli:before {
content: "\e635"; content: "\e635";
} }
.icondianpu-kuai:before { .icondianpu-kuai:before {
content: "\e602"; content: "\e602";
} }
.iconxiala:before { .iconxiala:before {
content: "\e608"; content: "\e608";
} }
.iconrizhifuwu:before { .iconrizhifuwu:before {
content: "\e65a"; content: "\e65a";
} }
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
No preview for this file type
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