Commit daaff433 by 陈羽

update: 话务任务转移

parent 90f657c4
......@@ -22,11 +22,11 @@
<ul class="tab-left-list">
<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>
<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"-->
<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>
<ul class="third-tab-left-list" :key="'thirditem' + childIndex" v-if="childitem.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 }}<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" :style="{ height: !!childitem.collapsFlag && childitem.children ? 'auto' : 0 }">
<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>
</template>
......@@ -71,20 +71,21 @@ export default {
},
mounted() {
this.activeTab = this.activeSelTab;
this.tabListData.map(item => {
item.collapsFlag = false;
let tabListData = [].concat(this.tabListData);
tabListData.map(item => {
item.collapsFlag = true;
if (item.hasOwnProperty('children') && item.children.length) {
if (this.activeSelTab == item.tabId) {
item.collapsFlag = true;
this.activeTab = item.children[0].tabId;
} else {
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: {
/**
......@@ -99,7 +100,7 @@ export default {
*/
selectTab(item, flag, index) {
if (item.hasOwnProperty('children')) {
if (!flag && !!item.children.length) {
if (!!item.children.length) {
item.collapsFlag = !item.collapsFlag;
this.tabData = JSON.parse(JSON.stringify(this.tabData));
} else {
......@@ -111,6 +112,11 @@ export default {
this.$emit('setSelectTab', item);
}
}
},
watch: {
activeSelTab(newV) {
this.activeTab = newV;
}
}
};
</script>
......
......@@ -18,9 +18,8 @@
<i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content">
<span class="el-alert__title">
1.预计2021年1月功能更新后将仅保留近一年数据,历史数据将清除。如需保存超过一年历史数据,请于1月前导出保存;<br />
2.话务任务统计数据每日刷新一次;<br />
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
1.此处仅统计近一年内的数据<br />
2.门店下具体某条话务任务的完成状态每天更新一次;下方列表中任务完成数据统计也为每天统计更新一次,非实时刷新。
</span>
</div>
</div>
......@@ -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-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">
......@@ -46,7 +45,7 @@
</el-dropdown-menu>
</el-dropdown>
</template>
<template slot-scope="scope"> </template>
<template slot-scope="scope">{{ scope ? ' ' : ' ' }}</template>
</el-table-column>
<el-table-column label="任务名称" width="120" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.ecmName }}</template>
......
......@@ -117,6 +117,7 @@ export default {
} else {
that.$router.push(path);
}
that.$emit('changeRoute', path);
},
/**
* 选择品牌
......@@ -152,6 +153,7 @@ export default {
return false;
} else if (sessionStorage.getItem('userInfoBrandId')) {
that.activeBrand = sessionStorage.getItem('userInfoBrandId');
that.$emit('selectBrandId', sessionStorage.getItem('userInfoBrandId'));
that.brandListData.forEach(ele => {
if (ele.enterpriseId == that.activeBrand) {
that.selectBrand = ele;
......@@ -161,6 +163,7 @@ export default {
}
that.selectBrand = that.brandListData[0];
that.activeBrand = that.brandListData[0].enterpriseId;
sessionStorage.setItem('userInfoBrandId', that.activeBrand);
this.$store.commit('changeWxEntertype', that.brandListData[0].wxEnterpriseType);
// 由于门店选择组件中没有品牌id ,只有 groupId
that.$emit('selectBrandId', that.brandListData[0].enterpriseId, that.brandListData[0].enterpriseId);
......
......@@ -17,13 +17,19 @@
<el-form-item label="小程序名称" prop="miniprogramName">
<el-input show-word-limit placeholder="请输入小程序名称" type="text" v-model="ruleForm.miniprogramName" maxlength="20"></el-input>
</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-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-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>
<p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item>
......
......@@ -139,43 +139,47 @@ export const constantRouterMap = [{
{
path: '/salesleads',
name: '销售线索',
redirect: 'grStoreList',
redirect: 'trafficTaskSet',
component: _import('salesleads', 'index'),
children: [
// {
// path: '/storeList',
// name: '门店视图',
// component: _import('salesleads', 'storeList'),
// },
// {
// path: '/storeDetail/:id',
// name: '门店视图',
// component: _import('salesleads', 'storeDetail')
// },
// {
// path: '/salesTaskList',
// name: '计划视图',
// component: _import('salesleads', 'taskList'),
// },
// {
// path: '/salesleadsSet',
// name: '销售线索设置',
// component: _import('salesleads', 'salesleadsSet')
// },
children: [{
path: '/taskRecord',
name: '话务任务记录',
component: _import('salesleads/trafficTask', 'taskRecord')
},
{
path: '/taskView',
name: '话务任务记录',
component: _import('salesleads/trafficTask', 'taskView')
},
{
path: '/taskDetail',
name: '话务任务详情',
component: _import('salesleads/trafficTask', 'taskDetail')
},
{
path: '/taskViewDetail',
name: '话务任务详情',
component: _import('salesleads/trafficTask', 'taskViewDetail')
},
{
path: '/trafficTaskSet',
name: '话务任务设置',
component: _import('salesleads/trafficTask', 'trafficTaskSet')
},
{
path: '/grStoreList', // 群发任务-门店视图
name: '门店视图',
component: _import('salesleads', 'grStoreList')
component: _import('salesleads/groupSend', 'grStoreList')
},
{
path: '/grStoreDetail/:id', // 群发任务-门店视图-任务详情
name: '门店视图',
component: _import('salesleads', 'grStoreDetail')
component: _import('salesleads/groupSend', 'grStoreDetail')
},
{
path: '/grTaskList', // 群发任务-计划视图
name: '计划视图',
component: _import('salesleads', 'grTaskList')
component: _import('salesleads/groupSend', 'grTaskList')
}
]
},
......@@ -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',
name: '指标管理',
redirect: '/monthList',
......@@ -514,6 +466,10 @@ export const constantRouterMap = [{
path: '/evaluate-set',
name: '订单评价',
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({
},
clearTreeData(context, data) {
context.commit('clearData');
},
changeWxEntertypeData(context, data) {
context.commit('changeWxEntertype', data);
}
}
});
......@@ -41,8 +41,8 @@ export default {
return {
bgHeight: window.screen.availHeight - 380 + 'px',
activeSelTab: '1',
activeTab: '1',
activeSelTab: '11',
activeTab: '11',
// 面包屑参数
navpath: [
{
......@@ -51,7 +51,17 @@ export default {
},
{
name: '我的顾客',
path: ''
path: '/memberShowSet'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '我的顾客',
path: '/memberShowSet'
}
],
tabListData: [
......@@ -94,6 +104,26 @@ export default {
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
activeGroup: '', // 商户(品牌) groupId
expiredFlag: false
......@@ -171,87 +201,16 @@ export default {
* 各路由返回 tabId
*/
showTab(id) {
let ids = [...arguments];
let that = this;
that.activeTab = id;
that.activeSelTab = id;
that.tabListData.forEach(ele => {
if (ele.tabId == id) {
ele.onlyIconActive = false;
}
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;
}
});
}
});
}
});
},
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: ''
}
];
this.navpath = [...this.defaultNavpath];
if (ids.length) {
ids.map(tabId => {
this.navpath[this.navpath.length - 1].path = this.navFrontPath[tabId];
this.navpath.push({ name: this.navName[tabId], path: '' });
});
}
}
},
......@@ -263,19 +222,9 @@ export default {
activeGroup: function(newData, oldData) {
const that = this;
that.activeGroup = newData;
},
$route: {
handler: function(val, oldVal) {
const that = this;
that.changeNavShow(val);
},
// 深度观察监听
deep: true
}
},
mounted() {
let that = this;
that.changeNavShow(that.$route);
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
......
......@@ -29,8 +29,9 @@
</el-select>
</div>
<div>
<el-checkbox v-model="overTimeSeeFlag" @change="saveGroupSet"></el-checkbox>
<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-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;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>
<span v-if="syncDate" class="font-14 color-606266 p-r-10">最近一次同步时间:{{ syncDate | formatTimeStamp }}</span>
</div>
......
......@@ -15,14 +15,18 @@
<template>
<div class="app-detail-wrap member-tag">
<div class="top p-20">
<el-alert type="info" show-icon :closable="false">
<span class="alert-info">
1. 标签同步是将GIC标签同步至企微,并且可以在企业微信-客户详情里打GIC标签;<br />
2. GIC标签指的是导购手动标签维护,会员分组不包含在内;<br />
3. 如果需要同步标签,请选择开启某个标签组同步;如果GIC标签未在好办显示,可能存在更新问题,请选择手动刷新;<br />
4. 同步开启每个标签组每日最多两次。
</span>
</el-alert>
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning color-2f54eb"></i>
<div class="el-alert__content">
<p class="el-alert__title color-303133 font-13">
1. 下方的标签是从【GIC后台-会员标签-手工标签-导购标签】中获取而来,若不一致,可刷新页面获取GIC后台最新的导购标签库。<br />
2. 可选多个GIC导购标签批量同步至企微标签库。每天最多操作同步1次,每月最多4次,请酌情开启同步。<br />
3. 当尚有“同步中”状态的导购标签时,不可进行其他操作如勾选标签或关闭同步等。<br />
4. 同步完成后,系统会将所选GIC导购标签同步至企微标签库,且“会员”身上被打上的GIC导购标签结果也会同步至企微端,也即“会员”所对应的企微客户身上也会被打上对应的同步过去的导购标签。<br />
5.所选标签成功同步至企微侧后,标签名称会默认带有“GIC”前缀,便于和企微标签库中本身创建的标签区分;请勿在企微标签库中对GIC侧同步过去的标签进行修改。
</p>
</div>
</div>
</div>
<div class="bottom">
<ul class="tag-category">
......@@ -30,14 +34,19 @@
</ul>
<div class="tag-content">
<div class="tag-content-top p-20">
<el-input v-model="search" placeholder="请输入内容" style="width: 223px" prefix-icon="el-icon-search" />
<div class="slect-wrap">
<el-input v-model="search" placeholder="请输入内容" style="width: 223px" prefix-icon="el-icon-search" /><el-select class="w-168 m-l-10" v-model="conditionObj.statusFlag" placeholder="全部同步状态" clearable @change="changeCondition">
<el-option label="有效" value="1"></el-option>
<el-option label="失效" value="0"></el-option>
</el-select>
</div>
<div class="btn-group">
<el-button @click="$router.push('/syncHistory')">同步历史</el-button>
<el-button @click="handlePartSync">批量同步</el-button>
<el-button @click="handlePartSync" type="primary" :class="['sync-btn', isShake ? 'shake' : '']">待开启同步标签( {{ tagIds.length }}</el-button>
</div>
</div>
<div class="tag-content-bottom">
<el-table ref="table" :data="tableData" tooltip-effect="dark" row-key="tagId" style="width: 100%" @selection-change="handleSelectionChange">
<el-table ref="table" :data="tableData" tooltip-effect="dark" row-key="tagId" style="width: 100%" @selection-change="handleSelectionChange" @row-click="rowCheckChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="标签组" prop="tagName" show-overflow-tooltip>
<template slot-scope="{ row }">
......@@ -51,33 +60,23 @@
</el-table-column>
<el-table-column label="标签值" min-width="240">
<template slot-scope="{ row }">
<span class="tag-val" v-for="item in row.tagItems.slice(0, 4)" :key="item.tagItemId">{{ item.tagItemName }}</span>
<el-button class="expendBtn" type="text" v-if="row.tagItems.length > 4" @click="expendTag(row)">{{ row.expend ? '收起' : '展开' }}</el-button>
<div class="flex">
<p class="tag-val" v-for="item in row.tagItems.slice(0, 4)" :key="item.tagItemId">{{ item.tagItemName }}</p>
<el-button class="expendBtn" type="text" v-if="row.tagItems.length > 4" @click.stop="expendTag(row)">{{ row.expend ? '收起' : '展开' }}</el-button>
</div>
</template>
</el-table-column>
<el-table-column label="对应企微标签" prop="qywxTagName">
<el-table-column label="同步状态" prop="qywxTagName">
<template slot-scope="{ row }">
<span>{{ row.qywxTagName || '--' }}</span>
<span>{{ row.syncFlag || '--' }}</span>
</template>
</el-table-column>
<el-table-column label="同步" prop="syncFlag">
<el-table-column label="操作" prop="syncFlag">
<template slot-scope="{ row }">
<el-popover placement="top" width="300" v-model="row.popoverFlag" v-if="row.syncStatus != 1">
<p style="color: #303133;line-height: 22px;">{{ !row.syncFlag ? '开启后,将同步GIC导购标签到企微。' : '关闭后,GIC标签将不会同步到企微。?' }}</p>
<p style="color: #909399;line-height: 22px;">{{ !row.syncFlag ? '注:随意更改设置将会影响同步标签的使用' : '历史标签库及企业微信所打的标签将会删除' }}</p>
<div style="margin: 15px 0 0;display:flex;align-items:center;justify-content: space-between;">
<span class="use-num">{{ !row.syncFlag ? '每日可同步次数:2 次' : '' }}</span>
<div>
<el-button @click="row.popoverFlag = false" class="popover-btn">取消</el-button>
<el-button type="primary" class="popover-btn" @click="changeSync(row)">确定</el-button>
</div>
</div>
<el-switch slot="reference" :value="row.syncFlag" :active-value="1" :inactive-value="0" />
</el-popover>
<p v-else>
<el-switch disabled :value="row.syncFlag" :active-value="1" :inactive-value="0" />
<span class="syncLoading">同步中...</span>
<p v-if="row.syncFlag == 1">
<el-button type="text" @click="changeSync(row)">关闭同步</el-button>
</p>
<p v-else></p>
</template>
</el-table-column>
<el-table-column type="expand" width="1">
......@@ -91,6 +90,9 @@
<div class="block common-wrap__page text-right m-t-24">
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
<el-drawer title="我是标题" :visible.sync="drawer" :direction="direction" :before-close="handleClose">
<span>我来啦!</span>
</el-drawer>
</div>
</div>
</div>
......@@ -138,7 +140,9 @@ export default {
wxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
pageSize: 20,
currentPage: 1,
total: 0
total: 0,
drawer: false,
isShake: false
};
},
methods: {
......@@ -161,27 +165,24 @@ export default {
};
tagList(params).then(res => {
this.total = res.data.result.totalCount;
this.tableData = res.data.result.result;
this.tableData = this.tableData.map(el => {
this.$set(el, 'popoverFlag', false);
this.$set(el, 'expend', false);
return el;
// this.tableData = this.tableData.map(el => {
// this.$set(el, 'popoverFlag', false);
// this.$set(el, 'expend', false);
// return el;
// });
res.data.result.result.map(el => {
el.popoverFlag = false;
el.expend = false;
});
this.tableData = res.data.result.result;
});
},
// 开启同步接口
openSync(type, ids) {
let id;
let that = this;
// 单个同步时,参数为row对象
if (type == 'id') id = ids.tagId;
else {
id = ids.toString();
}
id = ids.toString();
let params = {
// enterpriseId: this.brandId,
// tagIds: id,
// wxEnterpriseId: this.wxEnterpriseId
wxEnterpriseId: 'ca66a01b79474c40b3e7c7f93daf1a3b',
tagIds: id,
enterpriseId: 'ff8080815dacd3a2015dacd3ef5c0000'
......@@ -193,8 +194,6 @@ export default {
if (type == 'part') {
if (that.tagIds.some(el => !el.tagItems || !el.tagItems.length)) that.$message.success('批量同步完成,没有标签值的标签将不会被同步');
else that.$message.success('批量同步完成');
} else {
that.$message.success(`${ids.tagName}标签,开启同步`);
}
that.getTableList();
} else {
......@@ -244,8 +243,7 @@ export default {
changeSync(row) {
row.popoverFlag = false;
if (!row.tagItems || !row.tagItems.length) return this.$message.warning('该标签没有标签值,无法同步');
if (row.syncFlag == 0) this.openSync('id', row);
else this.closeSync(row);
this.closeSync(row);
},
handleSizeChange(val) {
this.pageSize = val;
......@@ -263,7 +261,12 @@ export default {
},
// 选中的row
handleSelectionChange(row) {
this.isShake = true;
this.tagIds = row;
setTimeout(() => (this.isShake = false), 300);
},
rowCheckChange(row, column, event) {
this.$refs.table.toggleRowSelection(row);
},
// 处理批量同步
handlePartSync() {
......@@ -322,18 +325,31 @@ li {
.member-tag {
box-sizing: border-box;
.top {
width: 70%;
border-bottom: 1px solid #e4e7ed;
/deep/ .el-alert__icon {
font-size: 14px;
width: auto !important;
margin-top: -61px;
}
.alert-info {
.el-alert--info {
align-items: flex-start;
width: 1033px;
padding: 5px 16px 5px 17px;
margin-right: 17px;
font-size: 13px;
font-weight: 400;
color: #303133;
line-height: 22px;
background: #f0f5ff;
border-radius: 2px;
border: 1px solid #85a5ff;
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
.el-alert__content {
padding-left: 0;
.el-alert__title {
line-height: 22px;
}
}
.el-alert__icon {
margin-top: 5px;
margin-right: 9px;
font-size: 12px;
color: #2f54eb;
}
}
}
.bottom {
......@@ -370,29 +386,25 @@ li {
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #e4e7ed;
.btn-group {
/deep/ .el-button {
color: #606266;
&:hover span {
color: #2f54eb;
}
span {
font-family: Roboto-Regular, Roboto;
}
}
}
}
.tag-content-bottom {
padding: 20px 20px 14px;
.tag-val {
max-width: 133px;
padding: 2px 12px;
margin-right: 10px;
background: #f7f8fa;
border-radius: 2px;
font-size: 12px;
border: 1px solid #dcdfe6;
text-align: center;
// text-align: center;
line-height: 22px;
box-sizing: border-box;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.expendBtn {
font-size: 12px;
......@@ -414,4 +426,27 @@ li {
white-space: nowrap;
text-overflow: ellipsis;
}
@keyframes shake {
0% {
transform: rotateZ(2deg);
}
25% {
transform: rotateZ(-2deg);
}
50% {
transform: rotateZ(2deg);
}
75% {
transform: rotateZ(-2deg);
}
100% {
transform: rotateZ(0);
}
}
.sync-btn.shake {
animation-name: shake;
animation-duration: 0.3s;
animation-direction: alternate;
}
</style>
......@@ -132,6 +132,9 @@ export default {
dialogCurrentChange() {
console.log('1');
}
},
mounted() {
this.$emit('showTab', '15', '151');
}
};
</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 {
},
{
name: '订单评价',
path: ''
path: '/evaluate-set'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '订单评价',
path: '/evaluate-set'
}
],
tabListData: [
......@@ -59,8 +69,17 @@ export default {
tabId: '1',
tabName: '订单评价设置',
icon: 'iconshangpinshezhi'
},
{
tabId: '2',
tabName: '不良评价回访设置',
icon: 'icondingdan_pingjia'
}
],
navName: {
1: '订单评价设置',
2: '不良评价回访设置'
},
activeBrand: '', // 商户(品牌) id
activeGroup: '', // 商户(品牌) groupId
expiredFlag: false
......@@ -116,6 +135,9 @@ export default {
case '1':
that.changeRoute(`evaluate-set`);
break;
case '2':
that.changeRoute(`bad-evaluate`);
break;
}
},
......@@ -123,28 +145,16 @@ export default {
* 各路由返回 tabId
*/
showTab(id) {
let ids = [...arguments];
let that = this;
that.activeTab = id;
that.activeSelTab = id;
that.tabListData.forEach(ele => {
if (ele.tabId == id) {
ele.onlyIconActive = false;
}
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;
}
});
}
});
}
});
this.navpath = [...this.defaultNavpath];
if (ids.length) {
ids.map(tabId => {
this.navpath.push({ name: this.navName[tabId], path: '' });
});
}
}
},
watch: {
......
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-05-14 15:23:39
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<nav-crumb :navpath="navpath" @selectBrandId="selectBrandId"> </nav-crumb>
<div class="right-content border-box">
<div class="right-box" style="min-height: calc(100vh - 112px);">
<div class="apps-content flex" style="min-height: calc(100vh - 112px);">
<div class="apps-content-left w-157" style="min-height: calc(100vh - 112px);">
<common-detail-left :tabListData="tabListData" :activeSelTab="activeSelTab" @setSelectTab="setSelectTab"></common-detail-left>
</div>
<div class="apps-content-right border-box">
<transition name="fade" mode="out-in">
<router-view :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab"></router-view>
</transition>
</div>
</div>
</div>
</div>
<expired-dialog v-if="expiredFlag"></expired-dialog>
<!-- <vue-gic-footer></vue-gic-footer> -->
<!-- 公共组件 -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav-app.vue';
import commonDetailLeft from '@/components/app/app-detail-left.vue';
import expiredDialog from '@/components/company/expired-dialog.vue';
import errMsg from '@/common/js/error';
// import showMsg from '@/common/js/showmsg';
import { getRequest } from '@/api/api';
export default {
name: 'reviewed',
data() {
return {
bgHeight: window.screen.availHeight - 288 + 'px',
appName: '话务任务',
activeSelTab: '11',
activeTab: '11',
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '话务任务',
path: ''
}
],
tabListData: [
{
tabId: '1',
tabName: '话务任务记录',
icon: 'iconhuawushuju',
onlyIconActive: false,
children: [
{
tabId: '11',
tabName: '门店视图',
icon: ''
},
{
tabId: '12',
tabName: '话务任务视图',
icon: ''
}
]
},
{
tabId: '3',
tabName: '会话任务列表',
icon: 'iconhuihuajinglingicon-'
},
{
tabId: '2',
tabName: '任务设置',
icon: 'iconbuliangpingjiashezhi',
onlyIconActive: false,
children: [
{
tabId: '21',
tabName: '话务任务设置',
icon: ''
},
{
tabId: '22',
tabName: '会话任务设置',
icon: ''
},
{
tabId: '23',
tabName: '不良评价回访设置',
icon: ''
}
]
}
],
activeBrand: '', // 商户(品牌) id
activeGroup: '', // 商户(品牌) groupId
expiredFlag: false
};
},
computed: {},
methods: {
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
});
});
},
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 返回 的 brandId
*/
selectBrandId(id, groupId) {
let that = this;
that.activeBrand = id;
that.activeGroup = groupId;
that.getExpired(); // 到期通知
},
/**
* 选择后返回tabId,做各路由判断
*/
setSelectTab(item) {
let that = this;
that.activeTab = item.tabId;
switch (item.tabId) {
case '1':
case '11':
that.changeRoute(`taskRecord`);
break;
case '12':
that.changeRoute(`taskView`);
break;
case '2':
case '21':
that.changeRoute(`trafficTaskSet`);
break;
case '22':
that.changeRoute(`taskSessionSet`);
break;
case '23':
that.changeRoute(`badEvaluateSet`);
break;
case '3':
that.changeRoute(`taskList`);
break;
}
},
/**
* 各路由返回 tabId
*/
showTab(id) {
let that = this;
that.activeTab = id;
that.activeSelTab = id;
that.tabListData.forEach(ele => {
if (ele.tabId == id) {
ele.onlyIconActive = false;
}
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;
}
});
}
});
}
});
},
changeNavShow(val) {
const that = this;
if (val.path == '/taskViewDetail') {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '话务任务',
path: '/taskView'
},
{
name: '话务任务视图详情',
path: ''
}
];
} else if (val.path == '/newSession') {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '话务任务',
path: '/taskView'
},
{
name: '会话任务列表',
path: '/taskList'
},
{
name: that.$route.query.repairId ? '编辑会话任务' : '新建会话任务',
path: ''
}
];
} else {
that.navpath = [
{
name: '首页',
path: '/index'
},
{
name: '话务任务',
path: ''
}
];
}
}
},
watch: {
$route: {
handler: function(val, oldVal) {
const that = this;
that.changeNavShow(val);
},
// 深度观察监听
deep: true
},
activeBrand: function(newData, oldData) {
const that = this;
that.activeBrand = newData;
},
activeGroup: function(newData, oldData) {
const that = this;
that.activeGroup = newData;
}
},
mounted() {
const that = this;
that.changeNavShow(that.$route);
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb,
commonDetailLeft,
expiredDialog
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0 20px 20px 20px;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-left {
min-width: 157px;
height: 100%;
background: #fff;
overflow-x: hidden;
overflow-y: auto;
.apps-content-left__title {
height: 55px;
line-height: 55px;
padding: 0 0 0 18px;
}
.tab-left-list-cell {
position: relative;
text-align: left;
margin-top: 15px;
height: 30px;
line-height: 30px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
&:hover {
background: rgba(24, 144, 255, 0.06);
i {
color: #2f54eb;
}
}
&.active-tab {
background: rgba(24, 144, 255, 0.06);
&::before {
content: ' ';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: #2f54eb;
z-index: 1;
}
i {
color: #2f54eb;
}
}
.child-tab-left-list {
li {
position: relative;
text-align: left;
height: 30px;
line-height: 30px;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
&:hover {
background: rgba(24, 144, 255, 0.06);
i {
color: #2f54eb;
}
}
&.active-tab {
background: rgba(24, 144, 255, 0.06);
&::before {
content: ' ';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: #2f54eb;
z-index: 1;
}
i {
color: #2f54eb;
}
}
}
}
}
}
.apps-content-right {
width: calc(100% - 160px);
padding-left: 10px;
background: #f0f2f5;
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<!--
* @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-08-26 10:04:31
-->
<template>
<div class="daily-set-wrap ">
<div class="daily-set-content border-box">
<div class="table-condition flex flex-space-between m-b-20">
<div class="table-condition-left">
<el-input placeholder="请输入任务名称" maxlength="50" v-model="conditionObj.searchInput" class="w-264" style="width: 264px;" @keyup.native="value => toInput(value, conditionObj.searchInput)"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
</div>
<div class="table-condition-right">
<!--<el-button type="danger" @click="multDel">批量删除</el-button>-->
<el-button type="primary" @click="toNewSession">新建会话任务</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="35"> </el-table-column> -->
<!--<el-table-column width="25">
<template slot="header" slot-scope="scope">
<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">
<el-dropdown-item command="0"><span :style="{ color: selectRadio == 0 ? '#2f54eb' : '#606266' }">选择当页</span></el-dropdown-item>
<el-dropdown-item command="1"><span :style="{ color: selectRadio == 1 ? '#2f54eb' : '#606266' }">选择全部</span></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<template slot-scope="scope"> </template>
</el-table-column>-->
<el-table-column label="任务标题" width="120" show-overflow-tooltip>
<template slot-scope="scope"
><div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.taskTitle }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="任务内容" show-overflow-tooltip>
<template slot-scope="scope"
><div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.taskContent }}</div></template
>
</el-table-column>
<el-table-column prop="" label="创建时间" show-overflow-tooltip>
<template slot-scope="scope">
<div class="color-606266 line-18">{{ scope.row.createTime | timeStampToYmd }}</div>
<div class="color-606266 line-18">{{ scope.row.createTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="完成期限" show-overflow-tooltip>
<template slot-scope="scope">
<div class="color-606266 line-18">{{ scope.row.lastTime | timeStampToYmd }}</div>
<div class="color-606266 line-18">{{ scope.row.lastTime | timeStampToHms }}</div>
</template>
</el-table-column>
<el-table-column prop="" label="创建人" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.createName }}</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<!--<el-popover placement="top" width="160" v-model="scope.row.visible">
<p>是否下线该计划?</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="hidePop(scope.row)">取消</el-button>
<el-button type="primary" size="mini" @click="handleDelete(scope.row)">确定</el-button>
</div>
<el-button type="text" slot="reference">下线</el-button>
</el-popover>-->
<el-button type="text" @click="toDel(scope.$index, scope.row)">删除</el-button>
</template>
</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="currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
<multiple-del :showDialog="showDialog" :detailFlag="false" @hideDialog="hideDialog"> </multiple-del>
</div>
</template>
<script>
import multipleDel from '@/components/app/cloudDaily/multiple-del.vue';
import { getRequest, postRequest } from '@/api/api';
import { _debounce } from '@/common/js/public';
import showMsg from '@/common/js/showmsg';
import errMsg from '@/common/js/error';
export default {
props: {
brandId: {
type: String,
default() {
return '';
}
},
activeGroupId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
tableH: window.screen.availHeight - 464 - 126,
activeTab: '1',
activeBrand: this.brandId,
actictiveGroup: this.activeGroupId, // 商户(品牌) groupId
showDialog: false,
activeId: '1',
conditionObj: {
searchInput: ''
},
wxEnterpriseId: localStorage.getItem('userInfos') ? JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId : '',
loading: false,
selectRadio: 0, // 选择当页/选择全部
tableData: [],
multipleSelection: [],
// 分页参数
currentPage: 1,
pageSize: 20,
total: 0
};
},
computed: {},
methods: {
/**
* 删除
*/
toDel(index, row) {
const that = this;
that
.$confirm('是否要删除选中的任务?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
that.delCardList(row.sessionTaskId);
})
.catch(() => {});
},
/**
* 删除
*/
delCardList(sessionTaskId) {
const that = this;
let para = {
wxEnterpriseId: that.wxEnterpriseId,
sessionTaskId: sessionTaskId
};
postRequest('/haoban-app-tel-task-three-web/delete-session-task', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('删除成功', 'success');
that.getTableList();
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/* 下线 */
hidePop(row) {
row.visible = false;
},
handleDelete(row) {
const that = this;
let para = {
helpId: row.helpId
};
postRequest('/haoban-app-tel-task-three-web/del-help', para)
.then(res => {
if (res.data.errorCode === 1) {
that.$message.success(res.data.message);
that.currentPage = 1;
that.getTableList();
} else {
that.$message.warning(res.data.message);
}
})
.catch(err => {
// console.log(err);
});
},
/**
* 选择门店分组
*/
checkGroupIds: function(nodes) {
const that = this;
that.conditionObj.storeGroup = nodes;
that.currentPage = 1;
that.getTableList();
},
/** *
* 显示选择本页 / 全部 *
*/
handleCommand(command) {
this.selectRadio = command;
},
/**
* 输入
*/
toInput: _debounce(function(e, value) {
let that = this;
that.currentPage = 1;
that.getTableList();
}, 500),
/**
* 表格选择
*/
handleSelectionChange(val) {
this.multipleSelection = val;
},
/**
* 删除选的部门
*/
delDepart(index, item) {
const that = this;
item.splice(index, 1);
that.currentPage = 1;
that.getTableList();
},
/**
* 批量删除
*/
multDel() {
const that = this;
if (!that.multipleSelection.length) {
that.$message.error({
duration: 1000,
message: '请选择删除项'
});
return false;
}
that.showDialog = true;
},
/* *
* 批量删除---弹窗关闭
*/
hideDialog(obj) {
const that = this;
that.showDialog = false;
if (!Object.keys(obj).length) {
return false;
}
that.postMultDel(obj);
},
postMultDel(obj) {
const that = this;
let para = {
search: that.conditionObj.searchInput || '', // 搜索字段
enterpriseId: that.activeBrand, // 品牌 id
delTaskStatus: obj.delOptFlag, // 0:仅删除逾期任务,1:删除所有待完成任务
reason: obj.reason, // 备注
isAll: that.selectRadio // 0:当页,1:所有
// taskType: 1 //0不良评价,1话务任务
};
postRequest('/haoban-app-tel-task-three-web/batch-del-store-task-list', para)
.then(res => {
let resData = res.data;
if (resData.errorCode == 1) {
showMsg.showmsg('删除成功', 'success');
that.getTableList();
return;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.currentPage = 1;
that.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.currentPage = val;
// let fullPath = that.$route.fullPath;
that.getTableList();
},
/**
* 新建会话任务
*/
toNewSession(index, row) {
let that = this;
that.$router.push(`newSession`);
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
const para = {
search: that.conditionObj.searchInput || '', // 搜索字段
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
wxEnterpriseId: that.wxEnterpriseId
// taskType: 1 //0不良评价,1话务任务
};
getRequest('/haoban-app-tel-task-three-web/session-task-list', para)
.then(res => {
let resData = res.data;
that.loading = false;
if (resData.errorCode == 1) {
that.tableData = resData.result.list || [];
that.total = resData.result.pageInfo.total;
return false;
}
errMsg.errorMsg(resData);
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
}
},
watch: {
brandId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
that.getTableList();
}
},
activeGroupId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeGroup = newData;
}
}
},
mounted() {
const that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId;
that.$emit('showTab', '3');
if (!!this.brandId) {
that.$nextTick(() => {
that.getTableList();
});
}
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
multipleDel
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.color-c0c4cc {
display: inline-block;
line-height: 34px;
padding-left: 10px;
color: #c0c4cc;
}
.condition-tips {
display: inline-block;
vertical-align: middle;
line-height: 32px;
}
.table-condition {
// min-width: 1200px;
}
.daily-set-wrap {
height: 100%;
.daily-set-content {
padding: 20px;
.table-condition-left {
font-size: 0;
}
}
.depart-item-content {
width: 213px;
height: 32px;
overflow: hidden;
white-space: nowrap;
border-radius: 4px;
border: 1px solid #dcdfe6;
cursor: pointer;
}
.item-cell-select {
>>> .el-select__tags {
white-space: nowrap;
overflow: hidden;
}
}
.depart-cell {
position: relative;
margin: 0 24px 24px 0;
.el-icon-circle-close {
position: absolute;
top: -10px;
right: -10px;
font-size: 16px;
color: #808995;
cursor: pointer;
}
}
}
</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 @@
<el-table-column prop="" label="AppID" width="239">
<template slot="header">
<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>
</el-tooltip>
</template>
......
<!--
* @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> -->
......@@ -26,6 +18,8 @@
<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-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 class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;">
......@@ -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>
</el-table-column>
<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 label="完成详情" min-width="280">
<template slot-scope="scope"> 待发送:{{ scope.row.waitSendCount }},已发送:{{ scope.row.successCount }},发送失败:{{ scope.row.failCount }} </template>
......@@ -211,6 +205,11 @@ export default {
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
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) {
para.ecmPlanId = this.$route.query.ecmPlanId;
}
......@@ -304,9 +303,9 @@ export default {
that.getTableList();
});
if (that.$route.query.tab) {
that.$emit('showTab', 2);
that.$emit('showTab', '212', '2121', '21211');
} else {
that.$emit('showTab', 1);
that.$emit('showTab', '211', '2111');
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
......
......@@ -21,13 +21,17 @@
</el-popover>
</div>
<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>
</div>
<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-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 prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
......@@ -46,7 +50,7 @@
</el-table-column>
<el-table-column prop="" 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>
</template>
</el-table-column>
</el-table>
......@@ -62,6 +66,7 @@
</div>
</template>
<script>
import gicSelectGroup from '@/components/common/gic-select-group.vue';
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
......@@ -89,13 +94,18 @@ export default {
path: '/index'
},
{
name: '销售线索',
name: '营销任务',
path: '/trafficTaskSet'
},
{
name: '话务任务-话务任务设置',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20
pageSize: 20,
storeGroup: []
},
// 分页参数
total: 0,
......@@ -121,6 +131,11 @@ export default {
},
computed: {},
methods: {
checkGroupIds: function(nodes) {
const that = this;
that.pageParams.storeGroup = nodes;
that.reFetch();
},
/**
* 路由跳转
*/
......@@ -167,6 +182,14 @@ export default {
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId,
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) {
para.startTime = para.date[0];
para.endTime = para.date[1];
......@@ -214,11 +237,11 @@ export default {
},
mounted() {
const that = this;
if (this.brandId) that.getTableList();
that.getTableList();
if (this.$route.query.ecmPlanId) {
that.$emit('showTab', 2);
that.$emit('showTab', '212', '2121');
} else {
that.$emit('showTab', 1);
that.$emit('showTab', '211');
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
......@@ -226,7 +249,8 @@ export default {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
navCrumb,
gicSelectGroup
}
};
</script>
......
......@@ -215,7 +215,7 @@ export default {
mounted() {
const that = this;
that.getTableList();
that.$emit('showTab', 2);
that.$emit('showTab', 212);
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
......
......@@ -21,7 +21,7 @@
</div>
<div class="apps-content-right border-box">
<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>
</div>
</div>
......@@ -32,139 +32,213 @@
</div>
</div>
</div>
<expired-dialog v-if="expiredFlag"></expired-dialog>
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav-app.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 errMsg from '@/common/js/error';
import { getRequest } from '@/api/api';
export default {
name: 'salesleads',
data() {
return {
bgHeight: window.screen.availHeight - 288 + 'px',
activeSelTab: '0',
activeTab: '1',
activeSelTab: '11',
activeTab: '11',
activeBrand: '',
activeGroup: '',
expiredFlag: false,
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
name: '营销任务',
path: '/trafficTaskSet'
}
],
defaultNavpath: [
{
name: '首页',
path: '/index'
},
{
name: '营销任务',
path: '/trafficTaskSet'
}
],
tabListData: [
// {
// tabId: '0',
// tabName: '销售线索记录',
// icon: 'iconjichushezhi',
// children: [
// {
// tabId: '1',
// tabName: '门店视图'
// },
// {
// tabId: '2',
// tabName: '计划视图'
// }
// ]
// },
// {
// tabId: '3',
// tabName: '销售线索设置',
// icon: 'iconribaoshezhi'
// }
{
tabId: '0',
tabName: '群发任务记录',
tabId: '1',
tabName: '话务任务',
icon: 'iconjichushezhi',
children: [
{
tabId: '1',
tabName: '门店视图'
tabId: '11',
tabName: '话务任务设置',
icon: 'iconribaoshezhi'
},
{
tabId: '2',
tabName: '计划视图'
tabId: '12',
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: {},
methods: {
// 处理路由跳转
toRouterView(val) {
let that = this;
// 模拟检查数据
// //有两个参数
//{
// name:,
// path:
//}
that.$router.push({
path: val.path
});
},
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 选择后返回tabId,做各路由判断
*/
setSelectTab(item) {
let that = this;
that.activeTab = item.tabId;
this.navpath[2] = { name: this.navName[item.tabId], path: '' };
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`);
break;
case '1':
case '21':
that.changeRoute(`/grStoreList`);
break;
case '2':
case '211':
that.changeRoute(`/grStoreList`);
break;
case '212':
that.changeRoute(`/grTaskList`);
break;
}
},
selectBrandId(val) {
this.activeBrand = val;
sessionStorage.setItem('userInfoBrandId', val);
selectBrandId(id, groupId) {
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
*/
showTab(id) {
let ids = [...arguments];
let that = this;
that.activeTab = id;
that.activeSelTab = id;
that.tabListData.forEach(ele => {
if (ele.tabId == id) {
ele.onlyIconActive = false;
}
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;
}
});
}
});
}
});
this.navpath = [...this.defaultNavpath];
if (ids.length) {
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];
this.navpath.push({ name: this.navName[tabId], path: '' });
});
}
}
},
watch: {
......@@ -179,7 +253,8 @@ export default {
}
},
mounted() {
// const that = this;
this.activeBrand = sessionStorage.getItem('userInfoBrandId');
if (this.activeBrand) this.getExpired(); // 到期通知
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
......@@ -188,7 +263,9 @@ export default {
components: {
navCrumb,
commonDetailLeft,
vueOfficeHeader
vueOfficeHeader,
expiredDialog,
errMsg
}
};
</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-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 }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">筛选时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<div class="table-condition-search m-t-20">
<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>
</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">
<template slot-scope="scope">{{ scope.row.taskTitle || '--' }}</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.executeClerkClerkImgUrl || headDefault" fit="cover"></el-image>
<div>
<p class="color-303133 line-20">{{ scope.row.executeClerkName || '--' }}</p>
<p class="color-909399 line-20">{{ scope.row.executeClerkPhoneNum || '--' }}</p>
</div>
</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">
<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">
<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>
<el-table-column prop="" label="完成详情">
<template slot-scope="scope">
<el-button type="text" @click="showDetail(scope.row)">查看</el-button>
</template>
</el-table-column>
<!-- <el-table-column prop="" 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>
</template>
</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>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
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 errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'storeDetail',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
headDefault,
bgHeight: window.screen.availHeight - 298 + 'px',
loading: false,
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
storeId: this.$route.params.id,
finishOverStatus: '',
pageNum: 1,
pageSize: 20
},
filterOpts: [],
// 分页参数
total: 0,
tableData: [
// {
// taskId: '', // 任务id
// taskTitle: '', // 任务标题
// executeClerkId: '', // 指派导购id
// executeClerkName: '', // 指派导购名字
// executeClerkPhoneNum: '', // 指派导购手机号
// executeClerkClerkImgUrl: null, // 指派导购头像
// memberId: '', // 会员id
// memberName: '', // 会员名字
// memberImgUrl: '', // 会员头像
// memberCardNum: '', // 会员卡号
// createTime: null, // 创建时间
// overdueTime: null, // 逾期时间
// overdueStatus: null, // 逾期状态(1:逾期,2:未逾期)
// taskStatus: null // 完成状态(1:未完成,2:完成)
// }
],
overdueStyle: ['none', '#F5222D', '#2F54EB'],
taskStyle: ['none', '#F5222D', '#33AF4A'],
confirmDetailShow: false,
confirmDetail: {},
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
storeId: that.$route.params.id
};
if (this.$route.query.ecmPlanId) {
para.ecmPlanId = this.$route.query.ecmPlanId;
}
getRequest('/haoban-task-manage-web/market/clue/web/task-info-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.tableData = resData.result.list || [];
that.total = resData.result.pageInfo.total || 0;
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
getFilterOpts() {
const that = this;
getRequest('/haoban-task-manage-web/market/clue/web/query', {})
.then(res => {
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.filterOpts = resData.result;
that.pageParams.finishOverStatus = '0';
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
const that = this;
that.loading = true;
const para = {
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
taskId: item.taskId
};
getRequest('/haoban-task-manage-web/market/clue/web/task-finish-info', 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 = [];
}
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 = {};
}
},
watch: {
brandId(newV) {
this.getTableList();
}
},
mounted() {
const that = this;
that.getFilterOpts();
that.getTableList();
if (that.$route.query.tab) {
that.$emit('showTab', 2);
} else {
that.$emit('showTab', 1);
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb,
salesleadsTaskinfo
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 291px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
.personal-info {
.el-image {
width: 40px;
height: 40px;
margin-right: 10px;
}
}
.point {
display: inline-block;
width: 6px;
height: 6px;
vertical-align: top;
margin-top: 8px;
border-radius: 100%;
margin-right: 5px;
}
</style>
<style lang="sass"></style>
<!--
* @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 }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<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-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 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>
<template slot-scope="scope">{{ scope.row.storeName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="已完成">
<template slot-scope="scope">{{ scope.row.cplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="完成率">
<template slot-scope="scope">{{ (scope.row.completionRate * 100).toFixed(2) + '%' || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="待完成">
<template slot-scope="scope">{{ scope.row.waitFinishCount || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="逾期中">
<template slot-scope="scope">{{ scope.row.ovincplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" 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> -->
</template>
</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>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'storeList',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 298 + 'px',
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
loading: false,
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20
},
// 分页参数
total: 0,
tableData: [
// {
// storeId: '', // 门店id
// storeName: '', // 门店名称
// taskCnt: '', // 任务总数
// cplTaskCnt: '', // 任务完成数
// completionRate: '', // 任务完成率
// waitFinishCount: '', // 待完成数
// itincplTaskCnt: '', // 未逾期任务未完成数
// ovincplTaskCnt: '', // 逾期任务未完成数
// }
],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (para.date) {
para.startTime = para.date[0];
para.endTime = para.date[1];
delete para.date;
}
if (that.$route.query.ecmPlanId) {
para.ecmPlanId = that.$route.query.ecmPlanId;
}
getRequest('/haoban-task-manage-web/market/clue/web/store-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1) {
that.tableData = resData.result.list || [];
that.total = resData.result.total;
} else {
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
if (this.$route.query.ecmPlanId) {
this.$router.push(`storeDetail/${item.storeId}?tab=2&ecmPlanId=${this.$route.query.ecmPlanId}`);
} else {
this.$router.push(`storeDetail/${item.storeId}`);
}
}
},
watch: {
brandId(newV) {
this.getTableList();
},
$route(to, from) {
if (!this.$route.query.ecmPlanId) {
this.getTableList();
}
}
},
mounted() {
const that = this;
that.getTableList();
if (this.$route.query.ecmPlanId) {
that.$emit('showTab', 2);
} else {
that.$emit('showTab', 1);
}
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 444px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<!--
* @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 }">
<div class="apps-content-right">
<div class="overstore-body">
<div class="overstore-tip">
<div role="alert" class="el-alert el-alert--info flex flex-align-start ">
<i class="el-alert__icon el-icon-warning font-12 color-2f54eb"></i>
<div class="el-alert__content">
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd }}{{ dateEnd | timeStampToYmd }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
<div class="tips-content">
<p>展示所选期间内的导购线索,以线索为主体,不以时间为主体。</p>
<p class="temp">如 所选时间为 20210401~20210403,则显示期间相关的导购线索数据。</p>
<p class="m-b-14">导购线索:计划中触达到门店导购端的都归入导购线索,包括话务、企微任务。</p>
<p class="m-l--6">【 任务完成率 】:</p>
<p class="m-b-10">导购任务完成数 / 任务总数,任务完成数不含放弃数。</p>
<p class="m-l--6">【 触达转化收益 】:</p>
<p>
通过导购线索触达,且触达的会员在触达效益计算有效期内前来消费的人数。<br />
多个导购线索任务触达的,转化只记在首个触达任务上;收益只计销售单,<br />
不看退货单和换货单;金额是应付还是实付看ERP传入的值。数据更新频率:1天1次
</p>
</div>
<div slot="reference" role="tips" class="tips flex flex-align-center">
<i class="el-icon-warning-outline font-14 color-2f54eb"></i>
<div class="el-alert__content">查看指标说明</div>
</div>
</el-popover>
</div>
<div class="table-condition-search m-t-20">
<el-input placeholder="请输入计划名称" prefix-icon="el-icon-search" v-model="pageParams.ecmPlanName" class="w-260" @change="reFetch" clearable @clear="clearInput"> </el-input>
<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 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>
<template slot-scope="scope">{{ scope.row.ecmPlanName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="已完成">
<template slot-scope="scope">{{ scope.row.cplTaskCnt || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="完成率">
<template slot-scope="scope">{{ (scope.row.completionRate * 100).toFixed(2) + '%' || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="待完成">
<template slot-scope="scope">{{ scope.row.waitFinishCount || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="逾期中">
<template slot-scope="scope">{{ scope.row.ovincplTaskCnt || '--' }}</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>
</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="pageNum" :page-sizes="[20, 40, 60, 80]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </dm-pagination>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- <vue-gic-footer></vue-gic-footer> -->
</div>
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'taskList',
props: {
brandId: {
type: String,
default() {
return '';
}
}
},
data() {
return {
bgHeight: window.screen.availHeight - 298 + 'px',
dateStart: new Date().getTime() - 3600 * 1000 * 24 * 365,
dateEnd: new Date(),
loading: false,
// 面包屑参数
navpath: [
{
name: '首页',
path: '/index'
},
{
name: '销售线索',
path: ''
}
],
pageParams: {
pageNum: 1,
pageSize: 20
},
// 分页参数
total: 0,
tableData: [
// {
// enterpriseId: '', // 企业id
// ecmPlanId: '', // 计划id
// ecmPlanName: '', // 计划名称
// taskCnt: '', // 任务总数
// cplTaskCnt: '', // 任务完成数
// completionRate: '', // 任务完成率
// itincplTaskCnt: '', // 未逾期任务未完成数
// ovincplTaskCnt: '', // 逾期任务未完成数
// }
],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
}
}
};
},
computed: {},
methods: {
/**
* 路由跳转
*/
changeRoute(path) {
this.$router.push(path);
},
/**
* 筛选
*/
reFetch: _debounce(function(e, value) {
const that = this;
that.pageParams.pageNum = 1;
that.getTableList();
}, 500),
/**
* 分页---页码变化
* @param {Number} val
*/
handleSizeChange(val) {
const that = this;
that.pageParams.pageNum = 1;
that.pageParams.pageSize = val;
that.getTableList();
},
/**
* 分页---当前页变化
* @param {Number} val
*/
handleCurrentChange(val) {
const that = this;
that.pageParams.pageNum = val;
that.getTableList();
},
/**
* 获取列表数据
*/
getTableList(val) {
const that = this;
that.loading = true;
let para = {
...that.pageParams,
enterpriseId: sessionStorage.getItem('userInfoBrandId'),
qywxEnterpriseId: JSON.parse(localStorage.getItem('userInfos')).wxEnterpriseId
};
if (para.date) {
para.startTime = para.date[0];
para.endTime = para.date[1];
delete para.date;
}
getRequest('/haoban-task-manage-web/market/clue/web/plan-list', para)
.then(res => {
that.loading = false;
let resData = res.data;
if (resData.errorCode == 1 && resData.result) {
that.tableData = resData.result.list || [];
that.total = resData.result.total;
} else {
that.tableData = [];
errMsg.errorMsg(resData);
}
})
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
message: error.message
});
});
},
showDetail(item) {
this.$router.push(`storeList?ecmPlanId=${item.ecmPlanId}`);
}
},
watch: {
brandId(newV) {
this.getTableList();
}
},
mounted() {
const that = this;
that.getTableList();
that.$emit('showTab', 2);
document.documentElement.style.backgroundColor = '#f0f2f5';
},
destroyed() {
document.documentElement.style.backgroundColor = '#fff';
},
components: {
navCrumb
}
};
</script>
<style type="text/scss" lang="scss" scoped>
.bg-82C5FF {
background: #82c5ff;
}
.color-508CEE {
color: #508cee;
}
.color-FF585C {
color: #ff585c;
}
.line-h-18 {
line-height: 18px;
}
.tooltip-text {
width: 100%;
white-space: pre-wrap;
word-break: break-all;
}
.w-260 {
width: 260px;
}
.el-alert--info {
background: rgba(240, 245, 255, 1);
border-radius: 2px;
border: 1px solid rgba(133, 165, 255, 1);
-webkit-box-align: flex-start;
-webkit-align-items: flex-start;
-ms-flex-align: flex-start;
align-items: flex-start;
.el-alert__icon {
font-size: 12px;
}
}
.my-customer-wrap {
height: 100%;
}
.right-content {
/*width: 100%;*/
padding: 0;
min-height: calc(100% - 160px);
.right-box {
background: #fff;
min-height: 500px;
padding: 0px;
.apps-content {
.apps-content-right {
width: 100%;
padding: 20px;
background: #fff;
.overstore-body {
background: #fff;
.overstore-tip {
display: flex;
justify-content: flex-start;
align-items: center;
.el-alert--info {
align-items: center;
width: 444px;
height: 32px;
padding: 0 0 0 17px;
margin-right: 17px;
.el-alert__content {
padding-left: 0;
}
}
.tips {
cursor: pointer;
.el-alert__content {
font-size: 13px;
font-weight: 400;
color: #2f54eb;
line-height: 1;
}
}
}
}
.daily-set-wrap {
height: 100%;
background: #fff;
}
.app-detail-wrap {
height: 100%;
background: #fff;
}
.common-set-wrap {
height: 100%;
background: #fff;
}
}
}
}
}
</style>
<!--
* @Descripttion: 当前组件信息
* @version: 1.0.0
* @Author: 无尘
* @Date: 2019-03-20 14:36:37
* @LastEditors: 无尘
* @LastEditTime: 2020-09-21 18:25:20
-->
<template>
<div class="my-customer-wrap common-set-wrap">
<div class="daily-set-content boder-box">
......@@ -17,9 +9,8 @@
<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>
<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-input placeholder="请输入任务标题" prefix-icon="el-icon-search" v-model.trim="conditionObj.title" class="w-260 m-l-10" @change="changeSelect" clearable> </el-input>
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button>
......@@ -72,8 +63,12 @@
</div>
</el-popover>
<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-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.clerkPhone }}</p>
<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-909399" style="line-height: 18px;width: 100%; overflow:hidden;text-overflow: ellipsis;">
{{ scope.row.clerkPhone }}
</p>
</div>
</div>
</template>
......@@ -113,17 +108,21 @@
<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>
<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="任务类型">
<!-- <el-table-column label="任务类型">
<template slot-scope="scope">
<div>{{ scope.row.taskType == '0' ? '不良评价' : scope.row.taskType == '5' ? '会话任务' : '话务任务' }}</div>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="创建时间" width="107">
<template slot-scope="scope">
<div class="line-18">{{ scope.row.createTime | formatTimeYMD }}</div>
......@@ -240,7 +239,8 @@ export default {
conditionObj: {
completed: '',
overdue: '',
taskType: ''
title: '',
taskType: '1'
},
completedOptions: [
{
......@@ -278,24 +278,6 @@ export default {
value: '0'
}
],
typeOptions: [
{
label: '所有类型',
value: ''
},
{
label: 'ECM话务任务',
value: '1'
},
{
label: '不良评价',
value: '0'
},
{
label: '会话任务',
value: '5'
}
],
loading: false,
tableData: [],
multipleSelection: [],
......@@ -316,7 +298,13 @@ export default {
headImg: ''
},
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: {},
......@@ -390,7 +378,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function (error) {
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -420,7 +408,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function (error) {
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -433,15 +421,6 @@ export default {
handleCommand(command) {
this.selectRadio = command;
},
/**
* 选择条件
*/
changeSelect() {
let that = this;
that.currentPage = 1;
that.getTableList();
},
/**
* 表格选择
*/
......@@ -479,7 +458,6 @@ export default {
postMultDel(obj) {
let that = this;
let para = {
// taskType: 1, // 0 不良评价,1 话务任务
storeId: that.$route.query.storeId,
taskIds: that.selectRadio == 1 ? '' : that.multipleSelection.map(ele => ele.taskId).join(','), // 门店分组,数组
isOverTime: that.conditionObj.overdue || '', // 逾期
......@@ -499,7 +477,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function (error) {
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -527,6 +505,11 @@ export default {
that.currentPage = val;
that.getTableList();
},
changeSelect(val) {
const that = this;
that.currentPage = 1;
that.getTableList();
},
/**
* 删除
......@@ -572,7 +555,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function (error) {
.catch(function(error) {
that.$message.error({
duration: 1000,
message: error.message
......@@ -607,15 +590,18 @@ export default {
that.loading = true;
let para = {
ecmId: that.$route.query.ecmId || '',
taskType: that.conditionObj.taskType, // 0-不良评价回访 1-ecm话务任务
storeId: that.$route.query.storeId || '', // 门店
isOverTime: that.conditionObj.overdue || '', // 逾期
isCompleted: that.conditionObj.completed || '',
title: that.conditionObj.title || '', // 任务标题
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
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)
.then(res => {
let resData = res.data;
......@@ -634,7 +620,7 @@ export default {
}
errMsg.errorMsg(resData);
})
.catch(function (error) {
.catch(function(error) {
that.loading = false;
that.$message.error({
duration: 1000,
......@@ -643,7 +629,7 @@ export default {
});
},
getTaskDetail(item) {
this.taskDetail = {...item};
this.taskDetail = { ...item };
this.taskDetailVisible = true;
},
closeTaskDetail() {
......@@ -652,7 +638,7 @@ export default {
}
},
watch: {
brandId: function (newData, oldData) {
brandId: function(newData, oldData) {
const that = this;
if (!!newData) {
that.activeBrand = newData;
......@@ -662,7 +648,11 @@ export default {
},
mounted() {
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';
that.activeBrand = that.brandId;
that.conditionObj.storeId = that.$route.query.storeId;
......@@ -685,6 +675,14 @@ export default {
.w-135 {
width: 135px;
}
.w-260 {
width: 260px;
}
.table-condition-left {
display: flex;
justify-content: flex-start;
align-items: center;
}
.task-imgs {
display: inline-block;
vertical-align: middle;
......
......@@ -14,13 +14,8 @@
<i class="el-alert__icon el-icon-info"></i>
<div class="el-alert__content">
<span class="el-alert__title">
<!-- 话务任务应用下线通知:<br />
1.【话务任务】预计将于5月下旬下线,功能将由【销售线索】替代;<br />
2.【话务任务】下线后,【GIC后台-智能营销】中的“话务”事件也将下线,后续如需针对门店终端下发任务,请通过【GIC后台-智能营销】中的“企微任务”事件下发;<br />
3.【话务任务】下线后,该应用中原本的“会话任务”也会下线,“不良评价回访”任务将转移至其他应用,请知悉<br /> -->
1.仅统计近一年数据;<br />
2.话务任务统计数据每日刷新一次;<br />
3.需要注意:话务完成详情是实时展示;完成数据统计是每日刷新,可能出现任务详情显示已完成,但是已完成数量并没有+1。这属于统计的正常情况。
1.此处仅统计近一年内的数据<br />
2.门店下具体某条话务任务的完成状态每天更新一次;下方列表中任务完成数据统计也为每天统计更新一次,非实时刷新。
</span>
</div>
</div>
......@@ -37,10 +32,10 @@
</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 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">
......@@ -49,11 +44,12 @@
</el-dropdown-menu>
</el-dropdown>
</template>
<template slot-scope="scope"> </template>
<template slot-scope="scope">{{ scope ? ' ' : ' ' }}</template>
</el-table-column>
<el-table-column label="门店名称" width="120" show-overflow-tooltip>
<el-table-column label="门店名称" show-overflow-tooltip>
<template slot-scope="scope">
<div style="width: 100%; overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div>
<p style="color:#909399">{{ scope.row.storeCode }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
......@@ -128,7 +124,8 @@ export default {
currentPage: 1,
pageSize: 20,
total: 0,
loadingBtn: false
loadingBtn: false,
tableRefresh: false
};
},
computed: {},
......@@ -148,6 +145,7 @@ export default {
*/
handleCommand(command) {
this.selectRadio = command;
this.tableRefresh = !this.tableRefresh;
},
/**
......@@ -453,6 +451,7 @@ export default {
that.conditionObj.dateRange = that.initDataRange();
document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId;
that.$emit('showTab', 121);
if (!!this.brandId) {
that.$nextTick(() => {
that.getTableList();
......
......@@ -62,7 +62,7 @@ export default {
},
mounted() {
const that = this;
that.$emit('showTab', '12');
that.$emit('showTab', '122');
document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId;
},
......
......@@ -472,7 +472,7 @@ export default {
},
mounted() {
const that = this;
that.$emit('showTab', '12');
that.$emit('showTab', '122', '1221');
that.conditionObj.dateRange = that.initDataRange();
document.documentElement.style.backgroundColor = '#f0f2f5';
that.activeBrand = that.brandId;
......
......@@ -222,7 +222,7 @@ export default {
mounted() {
let that = this;
document.documentElement.style.backgroundColor = '#f0f2f5';
that.$emit('showTab', '21');
that.$emit('showTab', '11');
if (!!that.brandId) {
that.getData();
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
@font-face {
font-family: "iconfont";
/* 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');
font-family: "iconfont";
/* Project id 1628375 */
src: url('iconfont.woff2?t=1626682155511') format('woff2'), url('iconfont.woff?t=1626682155511') format('woff'), url('iconfont.ttf?t=1626682155511') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icondingdan_pingjia:before {
content: "\e654";
}
.iconxiaochengxu:before {
content: "\e625";
content: "\e625";
}
.iconpre:before {
content: "\e641";
content: "\e641";
}
.iconnext:before {
content: "\e640";
content: "\e640";
}
.iconhuanyingci:before {
content: "\e60d";
content: "\e60d";
}
.iconnew:before {
content: "\e61d";
content: "\e61d";
}
.iconmingxibeifen:before {
content: "\eae0";
content: "\eae0";
}
.iconshangpinshezhi:before {
content: "\e60b";
content: "\e60b";
}
.icongukeguanliicon:before {
content: "\e60a";
content: "\e60a";
}
.iconshuaxin1:before {
content: "\e613";
content: "\e613";
}
.icongou:before {
content: "\e606";
content: "\e606";
}
.iconshouquanyanzheng:before {
content: "\e687";
content: "\e687";
}
.iconhuaban:before {
content: "\e62a";
content: "\e62a";
}
.iconsucaiku:before {
content: "\eab6";
content: "\eab6";
}
.iconwenjian1:before {
content: "\eaae";
content: "\eaae";
}
.iconbofang1:before {
content: "\eaad";
content: "\eaad";
}
.iconbiaoqing:before {
content: "\e612";
content: "\e612";
}
.iconwenzi:before {
content: "\e611";
content: "\e611";
}
.icondaima:before {
content: "\e6bc";
content: "\e6bc";
}
.icontupian:before {
content: "\e73a";
content: "\e73a";
}
.iconwenjian:before {
content: "\e62d";
content: "\e62d";
}
.iconshipin:before {
content: "\e605";
content: "\e605";
}
.icontuozhuaiopen:before {
content: "\e61c";
content: "\e61c";
}
.icontoufang2:before {
content: "\e845";
content: "\e845";
}
.iconcelve:before {
content: "\eaa9";
content: "\eaa9";
}
.iconmoban:before {
content: "\e619";
content: "\e619";
}
.icontongxunlu:before {
content: "\e64e";
content: "\e64e";
}
.iconwodeqiaquan-:before {
content: "\e6bb";
content: "\e6bb";
}
.iconhuihuajinglingicon-:before {
content: "\e678";
content: "\e678";
}
.iconshibai:before {
content: "\e60e";
content: "\e60e";
}
.iconchenggong:before {
content: "\e63c";
content: "\e63c";
}
.iconqiyeweixin:before {
content: "\e628";
content: "\e628";
}
.iconnan:before {
content: "\e629";
content: "\e629";
}
.iconxingbienv:before {
content: "\e66b";
content: "\e66b";
}
.iconrenwuzhipai:before {
content: "\e7a5";
content: "\e7a5";
}
.iconwanchengrenwu:before {
content: "\ea6c";
content: "\ea6c";
}
.iconziyuan1:before {
content: "\e6a4";
content: "\e6a4";
}
.icondingwei:before {
content: "\e918";
content: "\e918";
}
.icongengduo2:before {
content: "\ea5b";
content: "\ea5b";
}
.iconqiyexinxi:before {
content: "\ea7a";
content: "\ea7a";
}
.iconjia:before {
content: "\ea79";
content: "\ea79";
}
.icondaishenhe_orange:before {
content: "\e604";
content: "\e604";
}
.iconrenwu1:before {
content: "\e607";
content: "\e607";
}
.iconshenhe:before {
content: "\e772";
content: "\e772";
}
.icongengduo1:before {
content: "\e68c";
content: "\e68c";
}
.iconjian:before {
content: "\e634";
content: "\e634";
}
.iconguanliyuanliebiao:before {
content: "\e609";
content: "\e609";
}
.iconbumen:before {
content: "\ea78";
content: "\ea78";
}
.iconxiafa:before {
content: "\e64a";
content: "\e64a";
}
.icongengduo:before {
content: "\e603";
content: "\e603";
}
.iconxitongguanlitubiao_mobanshezhi:before {
content: "\e618";
content: "\e618";
}
.iconribao:before {
content: "\e750";
content: "\e750";
}
.iconribaoshezhi:before {
content: "\e7f4";
content: "\e7f4";
}
.iconrenwu:before {
content: "\e77a";
content: "\e77a";
}
.iconzhibiao:before {
content: "\e610";
content: "\e610";
}
.iconhuawujinengzupeizhi:before {
content: "\e601";
content: "\e601";
}
.iconbuliangpingjiashezhi:before {
content: "\e7f6";
content: "\e7f6";
}
.iconhuawushuju:before {
content: "\e600";
content: "\e600";
}
.iconshuaxin:before {
content: "\e61b";
content: "\e61b";
}
.iconqiaquan:before {
content: "\e6b6";
content: "\e6b6";
}
.iconjichushezhi:before {
content: "\e65e";
content: "\e65e";
}
.icontianjiajiahaowubiankuang:before {
content: "\e81a";
content: "\e81a";
}
.iconchengyuan:before {
content: "\e61a";
content: "\e61a";
}
.iconnavigate_next:before {
content: "\e62f";
content: "\e62f";
}
.iconchangyongicon-:before {
content: "\e617";
content: "\e617";
}
.iconqiye-tianchong:before {
content: "\e730";
content: "\e730";
}
.iconzuzhijiagouguanli:before {
content: "\e635";
content: "\e635";
}
.icondianpu-kuai:before {
content: "\e602";
content: "\e602";
}
.iconxiala:before {
content: "\e608";
content: "\e608";
}
.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.
{
"id": "1628375",
"name": "好办后台3.0",
"font_family": "iconfont",
"css_prefix_text": "icon",
"description": "",
"glyphs": [{
"icon_id": "16514068",
"name": "小程序",
"font_class": "xiaochengxu",
"unicode": "e625",
"unicode_decimal": 58917
},
{
"icon_id": "21128396",
"name": "pre",
"font_class": "pre",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "21128379",
"name": "next",
"font_class": "next",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "9702150",
"name": "欢迎辞",
"font_class": "huanyingci",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "17853642",
"name": "new",
"font_class": "new",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "15674954",
"name": "明细备份",
"font_class": "mingxibeifen",
"unicode": "eae0",
"unicode_decimal": 60128
},
{
"icon_id": "9355504",
"name": "商品设置",
"font_class": "shangpinshezhi",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "8837045",
"name": "我的顾客 icon",
"font_class": "gukeguanliicon",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "5835478",
"name": "刷新",
"font_class": "shuaxin1",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "8527133",
"name": "勾",
"font_class": "gou",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "2957800",
"name": "授权验证",
"font_class": "shouquanyanzheng",
"unicode": "e687",
"unicode_decimal": 59015
},
{
"icon_id": "6030873",
"name": "手机",
"font_class": "huaban",
"unicode": "e62a",
"unicode_decimal": 58922
},
{
"icon_id": "14718929",
"name": "素材库",
"font_class": "sucaiku",
"unicode": "eab6",
"unicode_decimal": 60086
},
{
"icon_id": "14420516",
"name": "文件",
"font_class": "wenjian1",
"unicode": "eaae",
"unicode_decimal": 60078
},
{
"icon_id": "14418445",
"name": "播放",
"font_class": "bofang1",
"unicode": "eaad",
"unicode_decimal": 60077
},
{
"icon_id": "8500016",
"name": "表情",
"font_class": "biaoqing",
"unicode": "e612",
"unicode_decimal": 58898
},
{
"icon_id": "11468518",
"name": "文字",
"font_class": "wenzi",
"unicode": "e611",
"unicode_decimal": 58897
},
{
"icon_id": "2728991",
"name": "代码",
"font_class": "daima",
"unicode": "e6bc",
"unicode_decimal": 59068
},
{
"icon_id": "3592283",
"name": "图片",
"font_class": "tupian",
"unicode": "e73a",
"unicode_decimal": 59194
},
{
"icon_id": "11111600",
"name": "文件",
"font_class": "wenjian",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "12480765",
"name": "视频",
"font_class": "shipin",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "6310928",
"name": "拖拽open",
"font_class": "tuozhuaiopen",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "7784437",
"name": "投放",
"font_class": "toufang2",
"unicode": "e845",
"unicode_decimal": 59461
},
{
"icon_id": "14265997",
"name": "策略",
"font_class": "celve",
"unicode": "eaa9",
"unicode_decimal": 60073
},
{
"icon_id": "3355206",
"name": "模板",
"font_class": "moban",
"unicode": "e619",
"unicode_decimal": 58905
},
{
"icon_id": "6590542",
"name": "通讯录",
"font_class": "tongxunlu",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "4778446",
"name": "卡券记录",
"font_class": "wodeqiaquan-",
"unicode": "e6bb",
"unicode_decimal": 59067
},
{
"icon_id": "10328047",
"name": "会话精灵icon-166",
"font_class": "huihuajinglingicon-",
"unicode": "e678",
"unicode_decimal": 59000
},
{
"icon_id": "10600646",
"name": "失败",
"font_class": "shibai",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "9929338",
"name": "成功 (1)",
"font_class": "chenggong",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "12558975",
"name": "企业微信",
"font_class": "qiyeweixin",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "711192",
"name": "男",
"font_class": "nan",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "1170471",
"name": "性别女",
"font_class": "xingbienv",
"unicode": "e66b",
"unicode_decimal": 58987
},
{
"icon_id": "9893462",
"name": "任务指派",
"font_class": "renwuzhipai",
"unicode": "e7a5",
"unicode_decimal": 59301
},
{
"icon_id": "13038924",
"name": "完成任务",
"font_class": "wanchengrenwu",
"unicode": "ea6c",
"unicode_decimal": 60012
},
{
"icon_id": "3829037",
"name": "导购微商城",
"font_class": "ziyuan1",
"unicode": "e6a4",
"unicode_decimal": 59044
},
{
"icon_id": "11194337",
"name": "定位",
"font_class": "dingwei",
"unicode": "e918",
"unicode_decimal": 59672
},
{
"icon_id": "12941308",
"name": "更多",
"font_class": "gengduo2",
"unicode": "ea5b",
"unicode_decimal": 59995
},
{
"icon_id": "13503188",
"name": "企业信息",
"font_class": "qiyexinxi",
"unicode": "ea7a",
"unicode_decimal": 60026
},
{
"icon_id": "13491052",
"name": "加",
"font_class": "jia",
"unicode": "ea79",
"unicode_decimal": 60025
},
{
"icon_id": "3485141",
"name": "待审核",
"font_class": "daishenhe_orange",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "5836128",
"name": "审核",
"font_class": "renwu1",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "11698950",
"name": "审核",
"font_class": "shenhe",
"unicode": "e772",
"unicode_decimal": 59250
},
{
"icon_id": "12082911",
"name": "更多",
"font_class": "gengduo1",
"unicode": "e68c",
"unicode_decimal": 59020
},
{
"icon_id": "7394770",
"name": "减",
"font_class": "jian",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "11638604",
"name": "管理员列表",
"font_class": "guanliyuanliebiao",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "13399655",
"name": "部门",
"font_class": "bumen",
"unicode": "ea78",
"unicode_decimal": 60024
},
{
"icon_id": "5294661",
"name": "下发",
"font_class": "xiafa",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "5148246",
"name": "更多",
"font_class": "gengduo",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "12989784",
"name": "模板设置",
"font_class": "xitongguanlitubiao_mobanshezhi",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "3916374",
"name": "日报",
"font_class": "ribao",
"unicode": "e750",
"unicode_decimal": 59216
},
{
"icon_id": "7825126",
"name": "日报设置",
"font_class": "ribaoshezhi",
"unicode": "e7f4",
"unicode_decimal": 59380
},
{
"icon_id": "4129364",
"name": "任务",
"font_class": "renwu",
"unicode": "e77a",
"unicode_decimal": 59258
},
{
"icon_id": "7089057",
"name": "指标",
"font_class": "zhibiao",
"unicode": "e610",
"unicode_decimal": 58896
},
{
"icon_id": "4691084",
"name": "话务技能组配置",
"font_class": "huawujinengzupeizhi",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "7825502",
"name": "不良评价设置",
"font_class": "buliangpingjiashezhi",
"unicode": "e7f6",
"unicode_decimal": 59382
},
{
"icon_id": "4840616",
"name": "话务数据",
"font_class": "huawushuju",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "2667402",
"name": "刷新",
"font_class": "shuaxin",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "7629059",
"name": "卡券",
"font_class": "qiaquan",
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "7504755",
"name": "基础设置",
"font_class": "jichushezhi",
"unicode": "e65e",
"unicode_decimal": 58974
},
{
"icon_id": "689296",
"name": "添加 加号 无边框",
"font_class": "tianjiajiahaowubiankuang",
"unicode": "e81a",
"unicode_decimal": 59418
},
{
"icon_id": "12290473",
"name": "成员1",
"font_class": "chengyuan",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "12590456",
"name": "navigate_next",
"font_class": "navigate_next",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "9402957",
"name": "修改,笔",
"font_class": "changyongicon-",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "8349112",
"name": "企业-填充",
"font_class": "qiye-tianchong",
"unicode": "e730",
"unicode_decimal": 59184
},
{
"icon_id": "12820193",
"name": "组织架构管理",
"font_class": "zuzhijiagouguanli",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "7110127",
"name": "店铺-块",
"font_class": "dianpu-kuai",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "7289570",
"name": "下拉",
"font_class": "xiala",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "7101325",
"name": "日志服务",
"font_class": "rizhifuwu",
"unicode": "e65a",
"unicode_decimal": 58970
}
]
}
\ No newline at end of file
"id": "1628375",
"name": "好办后台3.0",
"font_family": "iconfont",
"css_prefix_text": "icon",
"description": "",
"glyphs": [
{
"icon_id": "8651336",
"name": "订单_评价",
"font_class": "dingdan_pingjia",
"unicode": "e654",
"unicode_decimal": 58964
},
{
"icon_id": "16514068",
"name": "小程序",
"font_class": "xiaochengxu",
"unicode": "e625",
"unicode_decimal": 58917
},
{
"icon_id": "21128396",
"name": "pre",
"font_class": "pre",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "21128379",
"name": "next",
"font_class": "next",
"unicode": "e640",
"unicode_decimal": 58944
},
{
"icon_id": "9702150",
"name": "欢迎辞",
"font_class": "huanyingci",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "17853642",
"name": "new",
"font_class": "new",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "15674954",
"name": "明细备份",
"font_class": "mingxibeifen",
"unicode": "eae0",
"unicode_decimal": 60128
},
{
"icon_id": "9355504",
"name": "商品设置",
"font_class": "shangpinshezhi",
"unicode": "e60b",
"unicode_decimal": 58891
},
{
"icon_id": "8837045",
"name": "我的顾客 icon",
"font_class": "gukeguanliicon",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "5835478",
"name": "刷新",
"font_class": "shuaxin1",
"unicode": "e613",
"unicode_decimal": 58899
},
{
"icon_id": "8527133",
"name": "勾",
"font_class": "gou",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "2957800",
"name": "授权验证",
"font_class": "shouquanyanzheng",
"unicode": "e687",
"unicode_decimal": 59015
},
{
"icon_id": "6030873",
"name": "手机",
"font_class": "huaban",
"unicode": "e62a",
"unicode_decimal": 58922
},
{
"icon_id": "14718929",
"name": "素材库",
"font_class": "sucaiku",
"unicode": "eab6",
"unicode_decimal": 60086
},
{
"icon_id": "14420516",
"name": "文件",
"font_class": "wenjian1",
"unicode": "eaae",
"unicode_decimal": 60078
},
{
"icon_id": "14418445",
"name": "播放",
"font_class": "bofang1",
"unicode": "eaad",
"unicode_decimal": 60077
},
{
"icon_id": "8500016",
"name": "表情",
"font_class": "biaoqing",
"unicode": "e612",
"unicode_decimal": 58898
},
{
"icon_id": "11468518",
"name": "文字",
"font_class": "wenzi",
"unicode": "e611",
"unicode_decimal": 58897
},
{
"icon_id": "2728991",
"name": "代码",
"font_class": "daima",
"unicode": "e6bc",
"unicode_decimal": 59068
},
{
"icon_id": "3592283",
"name": "图片",
"font_class": "tupian",
"unicode": "e73a",
"unicode_decimal": 59194
},
{
"icon_id": "11111600",
"name": "文件",
"font_class": "wenjian",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "12480765",
"name": "视频",
"font_class": "shipin",
"unicode": "e605",
"unicode_decimal": 58885
},
{
"icon_id": "6310928",
"name": "拖拽open",
"font_class": "tuozhuaiopen",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "7784437",
"name": "投放",
"font_class": "toufang2",
"unicode": "e845",
"unicode_decimal": 59461
},
{
"icon_id": "14265997",
"name": "策略",
"font_class": "celve",
"unicode": "eaa9",
"unicode_decimal": 60073
},
{
"icon_id": "3355206",
"name": "模板",
"font_class": "moban",
"unicode": "e619",
"unicode_decimal": 58905
},
{
"icon_id": "6590542",
"name": "通讯录",
"font_class": "tongxunlu",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "4778446",
"name": "卡券记录",
"font_class": "wodeqiaquan-",
"unicode": "e6bb",
"unicode_decimal": 59067
},
{
"icon_id": "10328047",
"name": "会话精灵icon-166",
"font_class": "huihuajinglingicon-",
"unicode": "e678",
"unicode_decimal": 59000
},
{
"icon_id": "10600646",
"name": "失败",
"font_class": "shibai",
"unicode": "e60e",
"unicode_decimal": 58894
},
{
"icon_id": "9929338",
"name": "成功 (1)",
"font_class": "chenggong",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "12558975",
"name": "企业微信",
"font_class": "qiyeweixin",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "711192",
"name": "男",
"font_class": "nan",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "1170471",
"name": "性别女",
"font_class": "xingbienv",
"unicode": "e66b",
"unicode_decimal": 58987
},
{
"icon_id": "9893462",
"name": "任务指派",
"font_class": "renwuzhipai",
"unicode": "e7a5",
"unicode_decimal": 59301
},
{
"icon_id": "13038924",
"name": "完成任务",
"font_class": "wanchengrenwu",
"unicode": "ea6c",
"unicode_decimal": 60012
},
{
"icon_id": "3829037",
"name": "导购微商城",
"font_class": "ziyuan1",
"unicode": "e6a4",
"unicode_decimal": 59044
},
{
"icon_id": "11194337",
"name": "定位",
"font_class": "dingwei",
"unicode": "e918",
"unicode_decimal": 59672
},
{
"icon_id": "12941308",
"name": "更多",
"font_class": "gengduo2",
"unicode": "ea5b",
"unicode_decimal": 59995
},
{
"icon_id": "13503188",
"name": "企业信息",
"font_class": "qiyexinxi",
"unicode": "ea7a",
"unicode_decimal": 60026
},
{
"icon_id": "13491052",
"name": "加",
"font_class": "jia",
"unicode": "ea79",
"unicode_decimal": 60025
},
{
"icon_id": "3485141",
"name": "待审核",
"font_class": "daishenhe_orange",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "5836128",
"name": "审核",
"font_class": "renwu1",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "11698950",
"name": "审核",
"font_class": "shenhe",
"unicode": "e772",
"unicode_decimal": 59250
},
{
"icon_id": "12082911",
"name": "更多",
"font_class": "gengduo1",
"unicode": "e68c",
"unicode_decimal": 59020
},
{
"icon_id": "7394770",
"name": "减",
"font_class": "jian",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "11638604",
"name": "管理员列表",
"font_class": "guanliyuanliebiao",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "13399655",
"name": "部门",
"font_class": "bumen",
"unicode": "ea78",
"unicode_decimal": 60024
},
{
"icon_id": "5294661",
"name": "下发",
"font_class": "xiafa",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "5148246",
"name": "更多",
"font_class": "gengduo",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "12989784",
"name": "模板设置",
"font_class": "xitongguanlitubiao_mobanshezhi",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "3916374",
"name": "日报",
"font_class": "ribao",
"unicode": "e750",
"unicode_decimal": 59216
},
{
"icon_id": "7825126",
"name": "日报设置",
"font_class": "ribaoshezhi",
"unicode": "e7f4",
"unicode_decimal": 59380
},
{
"icon_id": "4129364",
"name": "任务",
"font_class": "renwu",
"unicode": "e77a",
"unicode_decimal": 59258
},
{
"icon_id": "7089057",
"name": "指标",
"font_class": "zhibiao",
"unicode": "e610",
"unicode_decimal": 58896
},
{
"icon_id": "4691084",
"name": "话务技能组配置",
"font_class": "huawujinengzupeizhi",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "7825502",
"name": "不良评价设置",
"font_class": "buliangpingjiashezhi",
"unicode": "e7f6",
"unicode_decimal": 59382
},
{
"icon_id": "4840616",
"name": "话务数据",
"font_class": "huawushuju",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "2667402",
"name": "刷新",
"font_class": "shuaxin",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "7629059",
"name": "卡券",
"font_class": "qiaquan",
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "7504755",
"name": "基础设置",
"font_class": "jichushezhi",
"unicode": "e65e",
"unicode_decimal": 58974
},
{
"icon_id": "689296",
"name": "添加 加号 无边框",
"font_class": "tianjiajiahaowubiankuang",
"unicode": "e81a",
"unicode_decimal": 59418
},
{
"icon_id": "12290473",
"name": "成员1",
"font_class": "chengyuan",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "12590456",
"name": "navigate_next",
"font_class": "navigate_next",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "9402957",
"name": "修改,笔",
"font_class": "changyongicon-",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "8349112",
"name": "企业-填充",
"font_class": "qiye-tianchong",
"unicode": "e730",
"unicode_decimal": 59184
},
{
"icon_id": "12820193",
"name": "组织架构管理",
"font_class": "zuzhijiagouguanli",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "7110127",
"name": "店铺-块",
"font_class": "dianpu-kuai",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "7289570",
"name": "下拉",
"font_class": "xiala",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "7101325",
"name": "日志服务",
"font_class": "rizhifuwu",
"unicode": "e65a",
"unicode_decimal": 58970
}
]
}
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