Commit 3d91e9e7 by crushh

Merge branch 'feature/十月迭代' into dev

parents cce0e8c8 934e3cd4
......@@ -19,7 +19,7 @@
<el-option label="按导购" value="1"></el-option>
<!-- <el-option label="按会员" value="2"></el-option> -->
</el-select> </el-input
><el-date-picker class="m-l-10 w-330" style="width: 330px" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker><el-button :disabled="!tableData.length ? true : false" class="m-l-10 export-btn" type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出核销记录</el-button>
><el-date-picker class="m-l-10 w-330" style="width: 330px" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker><el-button :disabled="!tableData.length ? true : false" class="m-l-10 export-btn" type="primary" :loading="loadingBtn" @click="exportExcel">导出核销记录</el-button>
</div>
</div>
<div>
......
......@@ -27,7 +27,7 @@
<el-option label="按导购" value="1"></el-option>
<!-- <el-option label="按会员" value="2"></el-option> -->
</el-select> </el-input
><el-date-picker class="m-l-10" style="width: 272px;" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker><el-button :disabled="!tableData.length ? true : false" class="m-l-10 export-btn" type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出发送记录</el-button>
><el-date-picker class="m-l-10" style="width: 272px;" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"> </el-date-picker><el-button :disabled="!tableData.length ? true : false" class="m-l-10 export-btn" type="primary" :loading="loadingBtn" @click="exportExcel">导出发送记录</el-button>
</div>
</div>
<div>
......
......@@ -31,7 +31,8 @@
<span style="font-size:14px;" class="m-l-10">创建时间:</span><el-date-picker class="m-l-10" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker>
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button><el-button :loading="loadingBtn" type="primary" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="danger" @click="multDel">批量删除</el-button>
<el-button :loading="loadingBtn" type="primary" @click="exportExcel">导出</el-button>
</div>
</div>
<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">
......@@ -371,7 +372,7 @@ export default {
*/
toDetail(index, row) {
let that = this;
that.$router.push(`taskViewDetail?ecmId=${row.ecmId}`);
that.$router.push(`taskViewDetail?ecmId=${row.ecmId}&ecmName=${row.ecmName}`);
},
/**
......
......@@ -16,6 +16,7 @@
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane :label="`${tab.label}(${countList[tab.type]})`" :name="tab.name" v-for="tab in tabsList" :key="tab.name"></el-tab-pane>
</el-tabs>
<el-button :loading="loadingBtn" type="primary" class="btn" @click="beforeExportExcel">导出</el-button>
<el-table :data="tableData" style="width: 100%" height="200" v-loading="loading">
<el-table-column prop="memberName" label="会员姓名" show-overflow-tooltip> </el-table-column>
<el-table-column prop="sendStatus" label="发送状态" width="176">
......@@ -25,10 +26,12 @@
</el-table>
<el-pagination background layout="prev, pager, next" :total="total" :page-size="pageParams.pageSize" style="text-align:right;" @current-change="handlePageChange"> </el-pagination>
</div>
<export-dialog :dialogVisible="exportDialog" @export="exportExcel" @update:dialogVisible="changeExportDialog" />
</el-dialog>
</template>
<script>
import { getRequest } from '@/api/api';
import { getRequest, postExcel } from '@/api/api';
import exportDialog from '@/components/common/export-dialog.vue';
import errMsg from '@/common/js/error';
export default {
props: {
......@@ -37,9 +40,17 @@ export default {
default() {
return {};
}
},
enableDownloadCompleteData: {
type: [Number, String],
default() {
return 0;
}
}
},
components: {},
components: {
exportDialog
},
data() {
return {
loading: false,
......@@ -87,10 +98,58 @@ export default {
tableData: [],
// 0未发送 1已发送 2发送失败
statusClassName: ['bg-C0C4CC', 'bg-33AF4A', 'bg-F5222D'],
statusLabel: ['未发送', '已发送', '发送失败']
statusLabel: ['未发送', '已发送', '发送失败'],
loadingBtn: false
};
},
methods: {
beforeExportExcel() {
if (this.enableDownloadCompleteData == 1) {
this.exportDialog = true;
} else {
this.exportExcel(0);
}
},
changeExportDialog() {
this.exportDialog = false;
this.multipleSelection = [];
},
/**
* 导出
*/
exportExcel(type) {
this.loadingBtn = true;
let para = {};
postExcel('/haoban-app-tel-task-three-web/task/export-task-view-store-list', para)
.then(res => {
this.loadingBtn = false;
if (!res.data) {
errMsg.errorMsg('暂无数据');
return false;
}
// let resData = res.data;
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
});
const fileName = `话务任务视图详情门店报表.csv`;
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
// errMsg.errorMsg(resData);
})
.catch(function(error) {
this.loadingBtn = false;
this.$message.error({
duration: 1000,
message: error.message
});
});
},
close() {
this.$emit('close');
},
......@@ -190,4 +249,9 @@ export default {
>>> .el-table__empty-block {
min-height: 150px;
}
.btn {
height: 32px;
margin-bottom: 20px;
float: right;
}
</style>
......@@ -99,6 +99,21 @@ const timeStampToYmd = function(data) {
};
/**
* 时间戳---> 年-月-日
* @param timestamp
*/
const timeStampToYmd2 = function(data) {
if (!data) {
return;
}
let date = new Date(data - 1000 * 60 * 60 * 24);
let month = date.getMonth() + 1;
let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
let newMonth = month < 10 ? '0' + month : month;
return `${date.getFullYear()}-${newMonth}-${day}`;
};
/**
* 时间戳---> 时:分:秒
* @param timestamp
*/
......@@ -193,6 +208,7 @@ export default {
timeStampToHms,
formatTimeYmdHms,
formatPhoneNum,
timeStampToYmd2,
formatName,
timeStampSpace,
formatTime
......
......@@ -21,6 +21,9 @@
<el-input placeholder="请输入卡券名称" maxlength="50" v-model="searchInput" class="w-264" style="width: 264px;" @keyup.native="value => toInput(value, searchInput)" clearable @clear="clearInput"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
<span style="font-size:14px;" class="m-l-10">卡券创建时间:</span>
<el-date-picker v-model="dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker>
<el-select class="m-l-10" v-model="cardStatus" placeholder="卡券状态" @change="changeCardStatus">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</div>
<el-table class="select-table" ref="multipleTable" v-loading="loading" :data="tableData" tooltip-effect="dark" style="width: calc(100% - 3px);">
<el-table-column prop="" label="卡券名称" show-overflow-tooltip>
......@@ -29,7 +32,7 @@
</template>
</el-table-column>
<el-table-column prop="" label="" width="96">
<template slot="header" slot-scope="scope">
<template #header>
<el-tooltip class="item" effect="dark" content="发送卡券数量,包含扫码发券数" placement="right">
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">发送数量</span>
</el-tooltip>
......@@ -60,7 +63,7 @@
</template>
</el-table-column>
<el-table-column width="150">
<template slot="header" slot-scope="scope">
<template #header>
<el-tooltip class="item" effect="dark" content="发送卡券的导购总人数,次日刷新" placement="right">
<span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">导购人数</span>
</el-tooltip>
......@@ -74,6 +77,16 @@
{{ scope.row.createTime | formatTimeStamp }}
</template>
</el-table-column>
<el-table-column width="200" label="卡券模板有效期">
<template slot-scope="scope">
{{ scope.row.templateValidity }}
</template>
</el-table-column>
<el-table-column width="100" label="卡券状态">
<template slot-scope="scope">
<span :style="scope.row.statusCode == 2 ? 'color:#F5222D' : ''"> {{ scope.row.statusCode | formatStatusCode }}</span>
</template>
</el-table-column>
<el-table-column prop="" width="200" label="操作" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="showSendRecord(scope.$index, scope.row, '1')">发送记录</el-button>
......@@ -113,6 +126,7 @@ export default {
dateRange: '',
searchInput: '',
tableData: [],
cardStatus: '',
loading: false,
// 分页参数
currentPage: 1,
......@@ -121,12 +135,29 @@ export default {
getRecordShow: false,
sendRecordShow: false,
coupCardId: '',
cardName: ''
cardName: '',
options: [
{ label: '全部', value: '' },
{ label: '已过期', value: 2 },
{ label: '正常', value: 1 }
]
};
},
filters: {
percenteNum(val) {
return val > 0 ? Number(val * 100).toFixed(2) + '%' : Number(val).toFixed(2) + '%';
},
formatStatusCode(value) {
let val = '--';
switch (value) {
case 1:
val = '正常';
break;
case 2:
val = '已过期';
break;
}
return val;
}
},
watch: {
......@@ -147,6 +178,10 @@ export default {
this.currentPage = 1;
this.getTableList();
},
changeCardStatus() {
this.currentPage = 1;
this.getTableList();
},
showGetRecord(index, row) {
const that = this;
that.coupCardId = row.coupCardId;
......@@ -221,7 +256,8 @@ export default {
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
startDate: this.dateRange[0] || '',
endDate: this.dateRange[1] || ''
endDate: this.dateRange[1] || '',
cardStatus: this.cardStatus
};
postRequest('/haoban-app-customer-web/cardCoupon/find-card-log-page', para)
.then(res => {
......
......@@ -18,6 +18,15 @@
</div>
<div v-else class="card-add-btn text-center cursor-pointer" @click="showCard"><span class="el-icon-plus font-12 color-909399"></span><span class="font-14 color-909399 p-l-8">添加卡券</span></div>
</el-form-item>
<el-form-item prop="coupCardId">
<span slot="label">
<el-tooltip class="item" effect="dark" content="此领取次数表示导购将该卡券发送给顾客后可领取的总次数,顾客可将该卡券转发给他人,但领取次数受此控制" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">领取次数</span></el-tooltip>
</span>
<el-radio-group v-model="radio">
<el-radio :label="1">固定1次</el-radio>
<el-radio :label="0">不限次数</el-radio>
</el-radio-group>
</el-form-item>
<div class="el-form-item el-form-item--large">
<label for="name" class="el-form-item__label" style="width: 120px; cursor: pointer;">
<el-tooltip class="item" effect="dark" content="卡券的发送范围设置" placement="top-start"> <span style="cursor: pointer;padding-bottom: 2px; border-bottom: 1px dashed #2F54EB;">选择发送范围</span></el-tooltip>
......@@ -156,7 +165,8 @@ export default {
},
cardSelectShow: false,
addTag: true, // 默认是添加
loadingBtn: false
loadingBtn: false,
radio: 1
};
},
methods: {
......
......@@ -25,7 +25,7 @@
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel">导出</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">
......
......@@ -19,7 +19,7 @@
<el-date-picker style="width:310px" class="m-l-10" v-model="conditionObj.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM'" type="monthrange" align="right" unlink-panels range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"> </el-date-picker>
</div>
<div class="table-condition-right">
<el-button type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel">导出</el-button>
</div>
</div>
<el-table class="select-table" ref="multipleTable" v-loading="loading" :data="tableData" tooltip-effect="dark" :style="{ width: '100%', minHeight: tableH }">
......
......@@ -32,7 +32,7 @@
<div class="table-search m-t-20">
<div class="flex flex-space-between">
<div><gic-select-group-mult :selectData="groupIds" @checkGroupIds="checkGroupIds"> </gic-select-group-mult><span class="font-14 color-606266 p-l-10">筛选条件下,昨日人员名单如下:</span></div>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel">导出</el-button>
</div>
</div>
<div class="m-t-20">
......
......@@ -34,7 +34,7 @@
<div>
<el-date-picker v-model="selectTableDay" :value-format="'yyyy-MM-dd'" type="date" placeholder="选择日期" :clearable="false" :picker-options="pickerOptions" @change="changeTableDate"> </el-date-picker><gic-select-group-mult class="m-l-10" :selectData="groupIds" @checkGroupIds="checkGroupIds"> </gic-select-group-mult><span class="font-14 color-606266 p-l-10">当日筛选区域下门店总计为 {{ total }} 家:</span>
</div>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel">导出</el-button>
</div>
</div>
<div class="m-t-20">
......
......@@ -55,7 +55,7 @@
<div>
<el-date-picker v-model="selectEndDay" :value-format="'yyyy-MM-dd'" type="date" placeholder="选择日期" :clearable="false" :picker-options="pickerOptions" @change="changeTableDate"> </el-date-picker><gic-select-group-mult class="m-l-10" :selectData="groupIds" @checkGroupIds="checkGroupIds"> </gic-select-group-mult><span class="font-14 color-606266 p-l-10">筛选条件下,{{ activeName == 'second' ? '未' : '' }}登录人员有 {{ total }} 人,名单如下:</span>
</div>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button type="primary" :loading="loadingBtn" @click="exportExcel">导出</el-button>
</div>
</div>
<div class="m-t-20">
......
......@@ -10,23 +10,28 @@
<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>
<span class="el-alert__title color-303133 font-13">筛选时间:{{ dateStart | timeStampToYmd2 }}{{ dateEnd | timeStampToYmd2 }}</span>
</div>
</div>
</div>
<div class="table-condition-search m-t-20 flex flex-align-center">
<span style="font-size:14px;margin-right:-4px;">创建时间:</span><el-date-picker 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-select class="w-103 m-l-10" 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-input placeholder="请输入任务标题" prefix-icon="el-icon-search" v-model="pageParams.taskTitle" class="w-260 m-l-10" @change="reFetch" clearable> </el-input>
<div class="table-condition-search flex flex-space-between m-t-20">
<div class="table-condition-left">
<span style="font-size:14px;margin-right:-4px;">创建时间:</span><el-date-picker 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-select class="w-103 m-l-10" 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-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="table-condition-right">
<el-button :loading="loadingBtn" type="primary" @click="exportExcel">导出</el-button>
</div>
</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 min-width="120">
<template slot-scope="scope">{{ scope.row.taskTitle || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="指派对象" min-width="200">
<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>
......@@ -83,7 +88,7 @@
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, postRequest } from '@/api/api';
import { getRequest, postRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
import detailPreview from '@/components/review/salesleads-detail-preview.vue';
......@@ -120,7 +125,8 @@ export default {
finishOverStatus: '0',
taskType: 2,
pageNum: 1,
pageSize: 20
pageSize: 20,
date: []
},
filterOpts: [],
overdueOpts: [
......@@ -153,14 +159,69 @@ export default {
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime() - 3600 * 1000 * 24;
}
}
},
loadingBtn: false
};
},
computed: {},
methods: {
/**
* 导出
*/
exportExcel(type) {
this.loadingBtn = true;
let para = {};
postExcel('/haoban-app-tel-task-three-web/task/export-task-view-store-list', para)
.then(res => {
this.loadingBtn = false;
if (!res.data) {
errMsg.errorMsg('暂无数据');
return false;
}
// let resData = res.data;
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
});
const fileName = `话务任务视图详情门店报表.csv`;
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
// errMsg.errorMsg(resData);
})
.catch(function(error) {
this.loadingBtn = false;
this.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 取得间隔三个月的日期
*/
initDataRange() {
let date = new Date(new Date().getTime() - 24 * 3600 * 1000);
let nowTime = date.getTime() - 90 * 24 * 3600 * 1000;
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
let newMonth = month < 10 ? '0' + month : month;
let startDate = new Date(nowTime);
let startYear = startDate.getFullYear();
let startMonth = startDate.getMonth() + 1;
let startDay = startDate.getDate() < 10 ? '0' + startDate.getDate() : startDate.getDate();
let startNewMonth = startMonth < 10 ? '0' + startMonth : startMonth;
return [`${startYear}-${startNewMonth}-${startDay}`, `${year}-${newMonth}-${day}`];
},
/**
* 路由跳转
*/
changeRoute(path) {
......@@ -298,6 +359,7 @@ export default {
},
mounted() {
const that = this;
this.pageParams.date = this.initDataRange();
that.getFilterOpts();
that.$nextTick(() => {
that.getTableList();
......@@ -418,14 +480,5 @@ export default {
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>
......@@ -9,7 +9,7 @@
<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>
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd2 }}{{ dateEnd | timeStampToYmd2 }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
......@@ -20,10 +20,15 @@
</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> </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 class="table-condition-search flex flex-space-between m-t-20">
<div class="table-condition-left">
<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="table-condition-right">
<el-button :loading="loadingBtn" type="primary" @click="exportExcel">导出</el-button>
</div>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;">
......@@ -33,6 +38,9 @@
<p style="color:#909399">{{ scope.row.storeCode }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="门店分组">
<template slot-scope="scope">{{ scope.row.storeGroupName || '--' }}</template>
</el-table-column>
<el-table-column prop="" label="任务总数">
<template slot-scope="scope">{{ scope.row.taskCnt || '--' }}</template>
</el-table-column>
......@@ -68,7 +76,7 @@
<script>
import gicSelectGroup from '@/components/common/gic-select-group.vue';
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import { getRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
......@@ -105,7 +113,8 @@ export default {
pageParams: {
pageNum: 1,
pageSize: 20,
storeGroup: []
storeGroup: [],
date: []
},
// 分页参数
total: 0,
......@@ -124,13 +133,68 @@ export default {
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime() - 3600 * 1000 * 24;
}
}
},
loadingBtn: false
};
},
computed: {},
methods: {
/**
* 取得间隔三个月的日期
*/
initDataRange() {
let date = new Date(new Date().getTime() - 24 * 3600 * 1000);
let nowTime = date.getTime() - 90 * 24 * 3600 * 1000;
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
let newMonth = month < 10 ? '0' + month : month;
let startDate = new Date(nowTime);
let startYear = startDate.getFullYear();
let startMonth = startDate.getMonth() + 1;
let startDay = startDate.getDate() < 10 ? '0' + startDate.getDate() : startDate.getDate();
let startNewMonth = startMonth < 10 ? '0' + startMonth : startMonth;
return [`${startYear}-${startNewMonth}-${startDay}`, `${year}-${newMonth}-${day}`];
},
/**
* 导出
*/
exportExcel(type) {
this.loadingBtn = true;
let para = {};
postExcel('/haoban-app-tel-task-three-web/task/export-task-view-store-list', para)
.then(res => {
this.loadingBtn = false;
if (!res.data) {
errMsg.errorMsg('暂无数据');
return false;
}
// let resData = res.data;
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
});
const fileName = `话务任务视图详情门店报表.csv`;
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
// errMsg.errorMsg(resData);
})
.catch(function(error) {
this.loadingBtn = false;
this.$message.error({
duration: 1000,
message: error.message
});
});
},
checkGroupIds: function(nodes) {
const that = this;
that.pageParams.storeGroup = nodes;
......@@ -237,6 +301,7 @@ export default {
},
mounted() {
const that = this;
this.pageParams.date = this.initDataRange();
that.getTableList();
if (this.$route.query.ecmPlanId) {
that.$emit('showTab', '212', '2121');
......
......@@ -18,7 +18,7 @@
<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>
<span class="el-alert__title color-303133 font-13">仅展示近一年数据,数据截取时间:{{ dateStart | timeStampToYmd2 }}{{ dateEnd | timeStampToYmd2 }}</span>
</div>
</div>
<el-popover placement="bottom-start" width="550" trigger="click" popper-class="salesleads-popover">
......@@ -29,9 +29,14 @@
</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 class="table-condition-search flex flex-space-between m-t-20">
<div class="table-condition-left">
<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="table-condition-right">
<el-button :loading="loadingBtn" type="primary" @click="exportExcel">导出</el-button>
</div>
</div>
<div class="m-t-20">
<el-table v-loading="loading" class="select-table" ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%;">
......@@ -73,7 +78,7 @@
</template>
<script>
import navCrumb from '@/components/nav/nav.vue';
import { getRequest } from '@/api/api';
import { getRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
......@@ -107,7 +112,8 @@ export default {
pageParams: {
pageNum: 1,
pageSize: 20,
taskType: 2
taskType: 2,
date: []
},
// 分页参数
total: 0,
......@@ -126,13 +132,65 @@ export default {
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime() - 3600 * 1000 * 24;
}
}
},
loadingBtn: false
};
},
computed: {},
methods: {
exportExcel(type) {
this.loadingBtn = true;
let para = {};
postExcel('/haoban-app-tel-task-three-web/task/export-task-view-store-list', para)
.then(res => {
this.loadingBtn = false;
if (!res.data) {
errMsg.errorMsg('暂无数据');
return false;
}
// let resData = res.data;
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
});
const fileName = `话务任务视图详情门店报表.csv`;
const elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
// errMsg.errorMsg(resData);
})
.catch(function(error) {
this.loadingBtn = false;
this.$message.error({
duration: 1000,
message: error.message
});
});
},
/**
* 取得间隔三个月的日期
*/
initDataRange() {
let date = new Date(new Date().getTime() - 24 * 3600 * 1000);
let nowTime = date.getTime() - 90 * 24 * 3600 * 1000;
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
let newMonth = month < 10 ? '0' + month : month;
let startDate = new Date(nowTime);
let startYear = startDate.getFullYear();
let startMonth = startDate.getMonth() + 1;
let startDay = startDate.getDate() < 10 ? '0' + startDate.getDate() : startDate.getDate();
let startNewMonth = startMonth < 10 ? '0' + startMonth : startMonth;
return [`${startYear}-${startNewMonth}-${startDay}`, `${year}-${newMonth}-${day}`];
},
/**
* 路由跳转
*/
......@@ -214,6 +272,7 @@ export default {
},
mounted() {
const that = this;
this.pageParams.date = this.initDataRange();
that.getTableList();
that.$emit('showTab', 212);
document.documentElement.style.backgroundColor = '#f0f2f5';
......
......@@ -14,7 +14,7 @@
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button>
<el-button class="m-l-10" type="primary" :loading="loadingBtn" @click="beforeExportExcel" plain><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button class="m-l-10" type="primary" :loading="loadingBtn" @click="beforeExportExcel" plain>导出</el-button>
<el-tooltip content="导出结果中会员姓名、手机号等敏感信息将进行加密,实现隐私保护" placement="top">
<i class="el-icon-warning-outline font-14 p-l-6" v-if="enableDownloadCompleteData == 0"></i>
</el-tooltip>
......@@ -35,7 +35,7 @@
<template>{{ ' ' }}</template>
</el-table-column>
<el-table-column prop="title" label="任务标题" show-overflow-tooltip></el-table-column>
<el-table-column label="指派对象" show-overflow-tooltip width="170">
<el-table-column label="导购" show-overflow-tooltip width="170">
<template slot-scope="scope">
<div class="flex flex-pack-center flex-start">
<el-popover placement="top-start" width="300" trigger="hover" @show="showSingleInfo(scope.row.clerkId)">
......@@ -140,7 +140,7 @@
</template>
</el-table-column>
<el-table-column label="逾期情况">
<template slot-scope="scope">{{ scope.row.isOverTime }}</template>
<template slot-scope="scope"> <span class="point" :style="'background:' + overdueStyle[scope.row.isOverTime] + ';'"></span>{{ scope.row.isOverTime }}</template>
</el-table-column>
<el-table-column label="完成情况">
<template #header>
......@@ -156,6 +156,7 @@
</el-tooltip>
</template>
<template slot-scope="scope">
<span class="point" :style="'background:' + taskStyle[scope.row.taskStatus] + ';'"></span>
{{ scope.row.isCompleted }}
</template>
</el-table-column>
......@@ -254,6 +255,17 @@ export default {
title: '',
taskType: '1'
},
overdueStyle: {
已逾期: '#F5222D',
未逾期: '#2F54EB'
},
taskStyle: {
2: '#33AF4A',
5: '#33AF4A',
1: '#F5222D',
3: '#F5222D',
4: '#F5222D'
},
completedOptions: [
{
label: '所有完成情况',
......
......@@ -21,7 +21,7 @@ import taskViewDetail from '@/components/app/taskViewDetail.vue';
</div>
<div class="table-condition-right">
<el-button type="danger" @click="multDel">批量删除</el-button>
<el-button :loading="loadingBtn" type="primary" @click="beforeExportExcel"><i class="iconfont icon-icon_yunxiazai p-r-6"></i>导出</el-button>
<el-button :loading="loadingBtn" type="primary" @click="beforeExportExcel">导出</el-button>
<el-tooltip content="导出结果中会员姓名、手机号等敏感信息将进行加密,实现隐私保护" placement="top">
<i class="el-icon-warning-outline font-14 p-l-6" v-if="enableDownloadCompleteData == 0"></i>
</el-tooltip>
......@@ -41,6 +41,9 @@ import taskViewDetail from '@/components/app/taskViewDetail.vue';
</template>
<template slot-scope="{ $index }"><p :key="$index"></p></template>
</el-table-column>
<el-table-column label="门店分组" width="120" show-overflow-tooltip>
<template slot-scope="scope">{{ scope.row.storeGroupName }}</template>
</el-table-column>
<el-table-column label="门店名称" width="120" show-overflow-tooltip>
<template slot-scope="scope">
<div style="width: 100%;white-space:nowrap;overflow:hidden;text-overflow: ellipsis;">{{ scope.row.storeName }}</div>
......@@ -187,6 +190,7 @@ export default {
startDate: that.conditionObj.dateRange[0] || '',
endDate: that.conditionObj.dateRange[1] || '',
ecmId: that.$route.query.ecmId,
ecmName: this.$route.query.ecmName,
storeIds: that.selectRadio == 1 ? '' : that.multipleSelection.map(ele => ele.storeId).join(','), // 门店分组,数组
gicEnterpriseId: that.activeBrand, // 品牌 id
selectType: that.selectRadio == 2 && that.multipleSelection.length ? 0 : this.selectRadio,
......
......@@ -11,9 +11,7 @@
<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"> <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>
<span class="set-line-item_title text-right"> <i style="cursor: pointer;font-style: normal;padding-bottom: 2px;" class="font-14 color-606266">话务任务拨打</i></span>
<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">
......
......@@ -425,3 +425,12 @@
.transfor-body .el-tree-node>.el-tree-node__children {
overflow: unset;
}
.point {
display: inline-block;
width: 6px;
height: 6px;
vertical-align: top;
margin-top: 8px;
border-radius: 100%;
margin-right: 5px;
}
\ No newline at end of file
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