You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bsdgy-front/src/pages/recruit/PromoterList.vue

496 lines
14 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<Row class="search-row">
<i-col span="24"
class="search-col">
<Row class="row-style">
<i-input placeholder="请输入推广员姓名或手机号"
class="search-select"
v-model="searchShop" />
<span class="search-span">选择日期</span>
<DatePicker :value="selectDate"
type="daterange"
split-panels
placeholder="请选择日期"
@on-change="onChangeDateLister"
class="date-picker"></DatePicker>
<span class="search-span">零售公司</span>
<Select v-model="companyId"
filterable
class="search-select"
@on-change="companySelect">
<Option v-for="(item,index) in companyList"
:value="item.id"
:key="index + item.id">{{ item.name }}</Option>
</Select>
<span class="search-span">店铺</span>
<Select v-model="selectedStore"
filterable
class="search-select">
<Option v-for="(item,index) in shopList"
:value="item.id"
:key="index + item.id">{{ item.name }}</Option>
</Select>
<Button type="primary"
@click="searchCustomerDataBtnClick"
class="search-btn">查询</Button>
</Row>
</i-col>
</Row>
<Table ref="table"
:loading="loading"
:columns="columns1"
:data="data1"
class="table-store"
size="small">
<template slot="action"
slot-scope="{row}">
<i-col span="12">
<Button type="success"
class="router-btn"
@click="() => {show(row)}">升级</Button>
</i-col>
<i-col span="12">
<Button type="text"
class="router-btn"
style="color:2DBCF0!important"
@click="() => {doShow(true,row)}">查看上下级</Button>
</i-col>
</template>
</Table>
<!-- 升级 -->
<Modal v-model="isShow"
:title="showStoreName"
:footer-hide="true"
width="600"
class-name="vertical-center-modal"
@on-ok="ok">
<div slot="header">
<p style="text-align: center;">确认升级</p>
</div>
<div style="text-align:center;min-height:100px">
<span style="line-height:100px">{{upgradeStr}}</span>
</div>
<div style="margin-top:20px;text-align: center;">
<Button @click="cancel(rowData)">取消升级</Button>
<Button style="margin-left:20px"
type="primary"
@click="confirm(rowData)">确定升级</Button>
</div>
</Modal>
<recruitTable ref="recruitTable"
@doShow="doShow"
:show="showrecruit"
:schedule="recruitSchedule">
</recruitTable>
<Page :total="total"
:current="pageNum"
:page-size="pageSize"
show-elevator
show-total
placement="top"
@on-change="handlePage"
class-name="ks-page"></Page>
</div>
</template>
<script>
import recruitTable from "./recruitTable";
import zeroExtend from "../../services/customer/zeroExtend";
import staff from "../../services/staff/staff";
import { formatDate } from "../../utils/Common";
import bulletinService from '../../services/recruit/Bulletin'
export default {
name: "",
components: {
recruitTable,
},
data () {
return {
tabIndex: 0,
userId: JSON.parse(sessionStorage.getItem("loginInfo")).userId,
searchShop: null,
date: "",
companyId: null,
isShow: false,
showStoreName: '',
showrecruit: false,
recruitSchedule: {},
rowData: {},
upgradeStr: "",
//零售公司list
companyList: [],
selectedStore: null,
shopList: [],
loading: false,
//所有组织list
organizationalList: [],
total: 0,
pageSize: 10,
pageNum: 1,
columns1: [
{
title: '序号',
key: 'number',
width: 60,
render: (h, params) => {
return h('span', params.index + (this.pageNum - 1) * this.pageSize + 1);
}
},
{
title: '推广员姓名',
key: 'shopName',
width: 120,
render: (h, params) => {
return h('span', params.row.promoterInfo.name);
}
},
{
title: '推广员手机号',
key: 'shopPhone',
width: 120,
render: (h, params) => {
return h('span', params.row.promoterInfo.phone);
}
},
{
title: '等级',
width: 80,
render: (h, params) => {
let str = "";
switch (params.row.level) {
case 1:
str = "一般推广员";
break;
case 2:
str = "客户经理";
break;
case 3:
str = "服务经理";
break;
default:
str = "一般推广员";
}
return h('span', str);
}
},
{
title: '客户经理数',
key: 'customerManagerCount',
width: 120
},
{
title: '推广员数',
key: 'extensionCount',
width: 120
},
{
title: '客户数',
key: 'customerCount',
width: 80
},
{
title: '业绩',
key: 'achievement',
width: 80
},
{
title: '零售公司',
key: 'companyName',
width: 150,
render: (h, params) => {
return h('span', params.row.organizational.name);
}
},
{
title: '店铺',
key: 'storeName',
width: 160,
render: (h, params) => {
return h('span', params.row.store.name);
}
},
{
title: '店铺编号',
key: 'storeNO',
width: 80,
render: (h, params) => {
return h('span', params.row.store.code);
}
},
{
title: '发展人',
key: 'fissionNum',
width: 80,
render: (h, params) => {
return h('span', params.row.fissionUser.name);
}
},
{
title: '加入时间',
key: 'submitDate',
width: 120,
render: (h, params) => {
return h('span', formatDate(params.row.joinTime));
}
},
{
title: '操作',
slot: 'operation',
width: 250,
render: (h, params) => {
let that = this;
let color = "#3496EB"
if (parseInt(params.row.level) >= 3) {
color = "#999"
}
return h('div', [
h('span', {
style: {
background: 'white',
border: '0',
color: color,
marginRight: '15px',
cursor: 'pointer'
},
on: {
click: () => {
if (parseInt(params.row.level) < 3) {
that.show(params.row)
}
}
}
}, '升级'),
h('span', {
style: {
background: 'white',
border: '0',
color: '#3496EB',
marginRight: '15px',
cursor: 'pointer'
},
on: {
click: () => {
that.doShow(true, params.row)
}
}
}, '查看上下级'),
])
}
}
],
data1: [
],
selectDate: [],
}
},
mounted: function () {
this.getSelectList();
this.downShopData();
this.getPromoterList();
},
methods: {
onChangeDateLister (date) {
console.log(date)
this.selectDate = date;
},
/**基础数据区域list、零售公司list、客户list*/
getSelectList: function () {
let that = this;
let request = {
userId: this.userId,
};
zeroExtend.getSelectListRequest(request, function (data) {
if (data.data.code !== "0000") {
that.$Message.error("系统异常");
}
data = data.data.results;
if (data) {
that.organizationalList = data;
that.companyList = that.organizationalList.filter(item => item.level === 2);
}
//插入全部选项
that.insertAllOption();
});
},
//插入全部选项
insertAllOption: function () {
if (this.companyList.length === 0 || this.companyList[0].id !== 0) {
this.companyList.splice(0, 0, { "id": 0, "name": "全部" });
}
if (this.shopList.length === 0 || this.shopList[0].id !== 0) {
this.shopList.splice(0, 0, { "id": 0, "name": "全部" });
}
},
//店铺
downShopData: function (selected) {
let that = this;
let companyId = selected;
if (!selected) {
companyId = that.companyId;
}
let customerIds = [];
this.customerList = [];
if (companyId === 0) {
//
} else {
this.customerList = this.organizationalList.filter(item => item.parentId === companyId && item.level === 3);
this.insertAllOption();
}
customerIds = this.customerList.map(item => item.id);
let request =
{ userId: that.userId, customerIds: JSON.stringify(customerIds) };
staff.downShopData(request, function (data) {
data = data.data.results;
if (data) {
that.shopList = [{ "id": 0, "name": "全部" }];
for (let i = 0; i < data.length; i++) {
let entity = data[i];
if (entity) {
that.shopList.push(entity);
}
}
}
})
},
//零售公司选择
companySelect: function () {
//加载店铺
this.downShopData(this.companyId);
this.selectedStore = 0;
},
downCompanyChange: function (formValidate) {
this.downShopData(formValidate.departIds);
},
searchCustomerDataBtnClick: function () {
this.pageNum = 1;
this.getPromoterList();
},
// 双击row跳转详情页面
onDblClickRowLister: function (row) {
this.$router.push({ path: '/shop/increase/manager/staff', query: { storeId: row.id } });
},
//切页处理
handlePage: function (value) {
this.pageNum = value;
this.getPromoterList();
},
getPromoterList () {
let that = this;
this.loading = true;
let request = {
pageNum: that.pageNum,
storeId: that.selectedStore,
companyId: that.companyId,
store: that.searchShop,
start: that.selectDate[0] === "" || that.selectDate.length == 0 ? null : that.selectDate[0],
end: that.selectDate[1] === "" || that.selectDate.length == 0 ? null : that.selectDate[1],
};
if (request.storeId <= 0) {
request.storeId = undefined
}
if (request.companyId <= 0) {
request.companyId = undefined
}
bulletinService.promoterList(request, function (data) {
that.loading = false;
if (data.data.code == "0000") {
that.data1 = [];
let datas = data.data.results;
//总页数
if (datas.total == null) {
that.total = 0;
} else {
that.total = datas.total;
}
if (datas.list == null) {
datas.list = [];
}
that.data1 = datas.records;
}
}, function (error) {
that.loading = false;
});
},
onTabClick (e) {
this.tabIndex = e;
console.log('tabIndex', this.tabIndex);
},
ok () {
this.isShow = false;
},
cancel () {
this.isShow = false;
},
// 升级
confirm (rData) {
let request = {
promoterId: rData.id
}
let that = this;
bulletinService.promoterUpgrade(request, function (data) {
that.loading = false;
if (data.data.code == "0000") {
that.$Message.info("升级成功");
that.getPromoterList();
} else {
that.$Message.error("系统异常");
}
}, function (error) {
that.loading = false;
});
this.isShow = false;
},
show (index) {
if (index.level >= 3) {
this.$Message.error(`${index.name}的等级已是最高`);
return false;
}
this.isShow = true;
this.rowData = index;
let str = "";
let next = "";
switch (index.level) {
case 1:
str = "一般推广员";
next = "客户经理";
break;
case 2:
str = "客户经理";
next = "服务经理";
break;
case 3:
str = "服务经理";
next = "服务经理";
break;
default:
str = "一般推广员";
}
this.upgradeStr = `确认将${index.name}${str}升级成${next}吗?`;
},
doShow (ishow, currData) {
this.showrecruit = ishow;
if (ishow) {
this.recruitSchedule = currData;
}
},
}
}
</script>
<style scoped>
.table-store {
margin-top: 20px;
}
.search-btn {
margin-left: 40px;
}
</style>