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.

1508 lines
46 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 class="dataStatisticsContainer">
<!-- <div class="pb16 bb1 mb16 f20" style="color:#1890ff">团队数据</div> -->
<a-breadcrumb class="newBreadcrumb mt0 mb16">
<a-breadcrumb-item href>
<router-link :to="{name:'merchantBack'}">
<a-icon type="home" />
</router-link>
</a-breadcrumb-item>
<a-breadcrumb-item>团队数据</a-breadcrumb-item>
</a-breadcrumb>
<div class="bodyContainer contentbody">
<div class="leftContainer pb24">
<div class="searchbox pb12 ml12 mr12">
<div class="searchinput">
<a-input-search placeholder="搜索成员" v-model.trim="contentListSearchForm.keys" allowClear @search="onDataSearch" @keyup.enter="onDataSearch" @input="resetsearch">
<!-- <a-icon slot="prefix" type="search" class="cccc" />
<a-button slot="enterButton" class="cblue">搜索</a-button>-->
</a-input-search>
</div>
<!-- <i class="iconfont icon-fangda ml12 c6 curp" @click="[addGroupShow = true,isEdit = false]" style="line-height:32px"></i> -->
</div>
<a-radio-group v-model="menuType" class="pl12 pr12 tac" style="width:100%" :style="{ marginBottom: '8px' }">
<a-radio-button value="role" class="changeGroup" style="width:50%">个人排序</a-radio-button>
<a-radio-button value="group" class="changeGroup" style="width:50%">团队排序</a-radio-button>
</a-radio-group>
<div v-if="menuType == 'role'">
<a-menu :selectedKeys="selectedKeys" class="bgf" mode="inline" :class="'leftMenu'" style="overflow-y:scroll;height:calc(100%);overflow-x:hidden;">
<a-menu-item key="all" class="fsa showdot bb_after fw500" @click="selectGroup('all')">
全部成员
<span>{{totalDataList.length}}</span>
</a-menu-item>
</a-menu>
<!-- <div class="bb1 ml12 mr12 mt4 mb8" style="wdith:calc(100% - 24px)"></div> -->
<!-- <div class="f12 c9 ml24 mb8">默认角色11人</div> -->
<a-menu :selectedKeys="selectedKeys" class="bgf" mode="inline" :class="'leftMenu'" style="overflow-y:scroll;height:calc(100%);overflow-x:hidden;">
<template v-for="(item, index) in groupDataList">
<a-menu-item :key="item.agencyTeamName" class="fsa showdot" @click="selectGroup(item)">
<span>{{item.agencyTeamName}}</span>
<i class="the_num" @click.stop>{{item.users.length}}</i>
</a-menu-item>
</template>
</a-menu>
</div>
<div v-else>
<a-menu :selectedKeys="selectedKeys" class="bgf" mode="inline" :class="'leftMenu'" style="overflow-y:scroll;height:calc(100%);overflow-x:hidden;">
<a-menu-item key="all" class="fsa showdot bb_after fw500" @click="selectGroup('all')">
全部部门
<span>{{totalDataList.length}}</span>
</a-menu-item>
</a-menu>
<!-- <a-menu :selectedKeys="selectedKeys" class="bgf" mode="inline" :class="'leftMenu'" style="overflow-y:scroll;height:calc(100%);overflow-x:hidden;">
<a-menu-item key="all" class="fsa showdot bb_after" @click="selectGroup('all')">全部角色</a-menu-item>
</a-menu>
<div class="bb1 ml12 mr12 mt4 mb8" style="wdith:calc(100% - 24px)"></div>
<a-menu :selectedKeys="selectedKeys" class="bgf" mode="inline" :class="'leftMenu'" style="overflow-y:scroll;height:calc(100%);overflow-x:hidden;">
<template v-for="(item, index) in groupList">
<a-menu-item :key="item.teamName" class="fsa showdot" @click="selectGroup(item)">
{{item.teamName}}
</a-menu-item>
</template>
</a-menu>-->
</div>
</div>
<div class="rightContainer mb24" id="rightContainer">
<div class="navTitle">
<div class="dateSelect fsa">
<div class="fsa">
<a-range-picker style="width:274px" @change="dateChange" class />
<div class="ml16">
<a-checkable-tag class="f14" v-model="checked6" @change="handleChange(6, checked6)">今日</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked7" @change="handleChange(7, checked7)">昨日</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked2" @change="handleChange(2, checked2)">本周</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked3" @change="handleChange(3, checked3)">上周</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked0" @change="handleChange(0, checked0)">近7日</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked1" @change="handleChange(1, checked1)">近30日</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked4" @change="handleChange(4, checked4)">本月</a-checkable-tag>
<a-checkable-tag class="f14" v-model="checked5" @change="handleChange(5, checked5)">上月</a-checkable-tag>
</div>
</div>
<a-select :disabled="true" style="width: 124px" @change="handleChange">
<div slot="placeholder" class="c9">渠道运营</div>
<a-select-option value="jack">Jack</a-select-option>
<a-select-option value="lucy">Lucy</a-select-option>
<a-select-option value="Yiminghe">yiminghe</a-select-option>
</a-select>
<!-- <div class="pagechange">
<button @click="changepage(-1)">上一页</button>
<button @click="changepage(1)">下一页</button>
</div>-->
</div>
<div class="total">
<!-- <div class="fsa">
<div style="width:50px"></div>
<div style="width:100px">总计</div>
</div>-->
<!-- <div class="fsa"> -->
<div>
<span class="fwb">{{totalObj.signUps}}</span>
<div>报名</div>
</div>
<div>
<span class="fwb">{{totalObj.arrived}}</span>
<div>到面</div>
</div>
<div>
<span class="fwb">{{totalObj.passed}}</span>
<div>通过</div>
</div>
<div>
<span class="fwb">{{totalObj.entry}}</span>
<div>入职</div>
</div>
<div class="table_left">
<span class="fwb">{{totalObj.obJob}}</span>
<div>在职人数</div>
</div>
<div class="table_left">
<span class="fwb">{{toFixed(totalObj.entryGPA)}}</span>
<div>入职绩点</div>
</div>
<div>
<span class="fwb">{{toFixed(totalObj.finshedGPA)}}</span>
<div>交付绩点</div>
</div>
<!-- </div> -->
</div>
</div>
<div class="content">
<!-- :expanded-row-keys.sync="expandedRowKeys" childrenColumnName="users" -->
<!-- :scroll="{ y: tableHeight }" -->
<!-- :style="{width:screenWidth + 'px !important'}" -->
<!-- :scroll="{x:currWidth}" -->
<a-table :columns="columns" class="dataTable" :data-source="dataList" :style="{minWidth:1250 + 'px !important'}" :pagination="false" @change="onChange" :loading="{ spinning: isspinning, tip: '加载中', wrapperClassName: 'spinstyle', }" :rowKey="(record) => record.index">
<span slot="custom_objob">
<span class="fw500">在职人数</span>
</span>
<span slot="title_index">
<span class="pl8">序号</span>
</span>
<a @click="getBillInfo(text1,10)" style="color:#576B95;text-decoration:underline" slot="signUps" slot-scope="text, text1">{{text}}</a>
<a @click="getBillInfo(text1,20)" style="color:#576B95;text-decoration:underline" slot="arrived" slot-scope="text, text1">{{text}}</a>
<a @click="getBillInfo(text1,30)" style="color:#576B95;text-decoration:underline" slot="passed" slot-scope="text, text1">{{text}}</a>
<a @click="getBillInfo(text1,40)" style="color:#576B95;text-decoration:underline" slot="entry" slot-scope="text, text1">{{text}}</a>
<a @click="getBillInfo(text1,50)" style="color:#576B95;text-decoration:underline" slot="obJob" slot-scope="text, text1">{{text}}</a>
<a @click="getBillInfo(text1,60)" style="color:#576B95;text-decoration:underline" slot="entryGPA" slot-scope="text, text1">{{toFixed(text)}}</a>
<a @click="getBillInfo(text1,70)" style="color:#576B95;text-decoration:underline" slot="finshedGPA" slot-scope="text, text1">{{toFixed(text)}}</a>
<a @click="getBillInfo(text1,60)" style="color:#576B95;text-decoration:underline" slot="packageIdx" slot-scope="text, text1">{{toFixed(text)}}</a>
<a @click="getBillInfo(text1,60)" style="color:#576B95;text-decoration:underline" slot="funnel" slot-scope="text, text1">{{toFixed(text)}}</a>
</a-table>
</div>
<!-- <div class="pagecontainer mt16" v-if="dataList.length > 0">
<a-pagination :current="contentListSearchForm.pageNum" :page-size-options="pagination.pageSizeOptions" :default-current="1" :defaultPageSize="10" :total="contentListSearchForm.total" @change="onChange" size="small" show-size-changer show-quick-jumper />
<div class="ant-pagination-options-quick-jumper ml12 f14">
<span>共{{ contentListSearchForm.total }}条,</span>跳至
<input ref="pageinput" type="text" style="height:28px" @keyup.enter="inputpageChange" @blur="inputpageChange" />页
</div>
</div>-->
</div>
</div>
<a-modal class="townsmanDetailModal" centered v-model="townsmanDetailVisible" width="1200px" @cancel="townsmanDetailModalClose" :footer="null" destroyOnClose>
<div slot="title" destoryOnClose>明细</div>
<div class="searchinput mb16">
<a-input-search placeholder="请输入老乡姓名" v-model.trim="billPagination.keys" allowClear @search="onSearch" @keyup.enter="onSearch" @input="resetsearch">
<!-- <a-icon slot="prefix" type="search" class="cccc" />
<a-button slot="enterButton" class="cblue">搜索</a-button>-->
</a-input-search>
<!-- <a-input placeholder="请输入老乡姓名/身份证号" @keyup.enter="onSearch" @input="resetsearch" v-model.trim="billPagination.keys">
<i slot="prefix" class="iconfont icon-sousuo"></i>
<button slot="suffix" @click="onSearch">搜索</button>
</a-input>-->
</div>
<a-table :columns="billColumns" :data-source="billList" class="detailTable" :pagination="false" @change="onChange" :loading="{ spinning: isspinning, tip: '加载中', wrapperClassName: 'spinstyle', }" :rowKey="(record) => record.index">
<span slot="storeJobName" slot-scope="text">{{text}}</span>
<span slot="userName" slot-scope="text">{{text}}1</span>
<span slot="billDate">{{dateType}}</span>
</a-table>
<div class="pagecontainer mt16" v-if="billList.length > 0">
<!-- <a-pagination :current="billPagination.pageNum" :default-current="1" :defaultPageSize="10" :total="billPagination.total" @change="onChange" /> -->
<a-pagination :current="billPagination.pageNum" :default-current="1" :defaultPageSize="20" :show-total="total => `共${total}条`" :total="billPagination.total" @change="onChange" size="small" show-size-changer show-quick-jumper />
<!-- <div class="ant-pagination-options-quick-jumper ml12">
<span>共{{ billPagination.total }}条,</span>跳至
<input ref="pageinput" type="text" @keyup.enter="inputpageChange" @blur="inputpageChange" />页
</div>-->
</div>
</a-modal>
</div>
</template>
<script>
import { getMemberGroupApi, dataStatisticsTeamDetailApi, dataStatisticsListApi } from '../../../../api/merchantConfig'
import moment from 'moment'
import { getDateYMD, formatDateYMD, formatDateYMDHM, getUserApplyOrderStatusById, toFixed, tableWidth, fullCopy, setReturnFee } from '../../../../utils/commonUtil'
const rowSelection = {
onChange: (selectedRowKeys, selectedRows) => {
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
},
onSelect: (record, selected, selectedRows) => {
console.log(record, selected, selectedRows)
},
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows)
},
}
export default {
// 组件名称
name: 'dataStatistics',
// 局部注册的组件
components: {},
// 组件参数 接收来自父组件的数据
props: {},
// 组件状态值
data() {
return {
screenWidth: 0,
checked0: false,
checked1: false,
checked2: false,
checked3: false,
checked4: false,
checked5: false,
checked6: true,
checked7: false,
sortedInfo: null,
dataList: [],
expandedRowKeys: [],
rowSelection,
menuType: 'role',
currentData: {},
selectedKeys: ['all'],
groupList: [],
billPagination: {
pageNum: 1,
pageSize: 20,
total: null, //分页配置
status: 0,
keys: null,
// searchTag: 1,
},
billList: [],
contentListSearchForm: { pageNum: 1, pageSize: 10, keys: '' },
townsmanDetailVisible: false,
isspinning: false,
totalObj: {
// 数据总计
arrived: 0,
entry: 0,
obJob: 0,
passed: 0,
signUps: 0,
entryGPA: 0,
finshedGPA: 0,
},
pagination: {
hideOnSinglePage: false,
showQuickJumper: true,
pageSize: 100,
total: 0,
size: 'small',
showTotal: function (total, range) {
return `共${total}条`
},
pageSizeOptions: ['25', '50', '100'],
showSizeChanger: true,
// showSizeChange:function(current, pageSize){
// this.pageSize = pageSize;
// }
},
dateType: '',
dateVal: '',
tableHeight: 300,
totalDataList: [],
groupDataList: [],
totalGroupNum: 0,
currentGroup: {},
}
},
// 计算属性
computed: {
columns() {
const columns = [
{
// title: ' 序号',
dataIndex: 'index',
key: 'index',
slots: { title: 'title_index' },
customRender: (text, row, index) => {
// if (row.users) {
// return ''
// } else {
return index + 1
// }
},
width: 50,
},
{
title: '姓名',
dataIndex: 'aliasName',
key: 'aliasName',
customRender: (text, row, index) => {
// if (row.users) {
// return row.agencyTeamName
// } else {
return row.aliasName
// }
},
ellipsis: true,
// width: 100,
},
{
title: '报名',
dataIndex: 'signUps',
key: 'signUps',
scopedSlots: { customRender: 'signUps' },
sorter: (a, b) => a.signUps - b.signUps,
ellipsis: true,
width: 120,
},
{
title: '到面',
dataIndex: 'arrived',
key: 'arrived',
scopedSlots: { customRender: 'arrived' },
sorter: (a, b) => a.arrived - b.arrived,
width: 120,
ellipsis: true,
},
{
title: '通过',
dataIndex: 'passed',
key: 'passed',
sorter: (a, b) => a.passed - b.passed,
scopedSlots: { customRender: 'passed' },
ellipsis: true,
width: 120,
},
{
title: '入职',
dataIndex: 'entry',
key: 'entry',
sorter: (a, b) => a.entry - b.entry,
scopedSlots: { customRender: 'entry' },
ellipsis: true,
width: 120,
},
{
// title: '在职',
dataIndex: 'obJob',
key: 'obJob',
slots: { title: 'custom_objob' },
sorter: (a, b) => a.obJob - b.obJob,
scopedSlots: { customRender: 'obJob' },
ellipsis: true,
width: 120,
},
{
title: '入职绩点',
dataIndex: 'entryGPA',
key: 'entryGPA',
sorter: (a, b) => a.entryGPA - b.entryGPA,
scopedSlots: { customRender: 'entryGPA' },
ellipsis: true,
width: 120,
},
{
title: '交付绩点',
dataIndex: 'finshedGPA',
key: 'finshedGPA',
// customRender: (text, row, index) => {
// return toFixed(text)
// },
sorter: (a, b) => a.finshedGPA - b.finshedGPA,
scopedSlots: { customRender: 'finshedGPA' },
ellipsis: true,
width: 120,
},
{
title: '背包指数',
dataIndex: 'packageIdx',
key: 'packageIdx',
// customRender: (text, row, index) => {
// return '*'
// },
sorter: (a, b) => a.packageIdx - b.packageIdx,
scopedSlots: { customRender: 'packageIdx' },
ellipsis: true,
width: 120,
},
{
title: '漏斗指数',
dataIndex: 'funnel',
key: 'funnel',
// customRender: (text, row, index) => {
// return toFixed(text)
// },
sorter: (a, b) => a.funnel - b.funnel,
scopedSlots: { customRender: 'funnel' },
ellipsis: true,
width: 120,
},
]
return columns
},
billColumns() {
let { sortedInfo } = this
console.log(sortedInfo)
sortedInfo = sortedInfo || {}
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
customRender: (text, row, index) => {
return index + 1
},
width: 50,
},
{
title: '姓名',
dataIndex: 'userName',
key: 'userName',
ellipsis: true,
width: 180,
// scopedSlots: { customRender: 'userName' },
customRender: (text, row, index) => {
let sex
if (row.sex == '1') {
sex = '男'
} else if (row.sex == '2') {
sex = '女'
} else {
sex = '未知'
}
// switch (row.sex) {
// case '0':
// sex = '男女不限'
// case '1':
// sex = '男'
// case '2':
// sex = '女'
// default:
// break
// }
return text.trim() + (sex ? '/' + sex : '') + (row.age ? '/' + row.age : '') + (row.nation ? '/' + row.nation : '')
},
},
// {
// title: '年龄',
// dataIndex: 'age',
// key: 'age',
// ellipsis: true,
// width: 60,
// },
// {
// title: '性别',
// dataIndex: 'sex',
// key: 'sex',
// ellipsis: true,
// customRender: (text, row, index) => {
// switch (text) {
// case 0:
// return '男女不限'
// case 1:
// return '男'
// case 2:
// return '女'
// default:
// break
// }
// },
// width: 60,
// },
// {
// title: '民族',
// dataIndex: 'nation',
// key: 'nation',
// ellipsis: true,
// width: 90,
// },
// {
// title: '电话',
// dataIndex: 'tel',
// key: 'tel',
// ellipsis: true,
// width: 120,
// },
// {
// title: '身份证',
// dataIndex: 'idCard',
// key: 'idCard',
// ellipsis: true,
// width: 180,
// },
{
title: '报名岗位',
dataIndex: 'storeJobName',
key: 'storeJobName',
ellipsis: true,
// width: 180,
// width: 60,
},
{
// title: '报名时间',
dataIndex: this.dateVal,
key: this.dateVal,
ellipsis: true,
width: 160,
slots: { title: 'billDate' },
customRender: (text, row, index) => {
return formatDateYMDHM(text)
},
},
{
title: '当前状态',
dataIndex: 'status',
key: 'status',
ellipsis: true,
width: 120,
customRender: (text, row, index) => {
switch (text) {
case 10:
return '报名审核中'
case 20:
return '审核通过'
case 21:
return '审核未通过'
case 25:
return '已接到'
case 26:
return '未接到'
case 30:
return '面试通过'
case 35:
return '面试未通过'
case 40:
return '已入职'
case 45:
return '通过未入职'
case 50:
return '已离职'
default:
break
}
},
},
{
title: '报名人',
dataIndex: 'applyUserName',
key: 'applyUserName',
ellipsis: true,
width: 180,
slots: { title: 'applyUserName' },
customRender: (text, row, index) => {
return row.applyUserName
},
},
{
title: '服务费',
dataIndex: 'returnFee',
key: 'returnFee',
ellipsis: true,
width: 80,
// slots: { title: 'applyUserName' },
customRender: (text, row, index) => {
// console.log(row);
return setReturnFee(row.returnFee, row.returnFeeType)
},
},
{
title: '入职绩点',
dataIndex: 'entryGPA',
key: 'entryGPA',
ellipsis: true,
width: 80,
slots: { title: 'entryGPA' },
customRender: (text, row, index) => {
return toFixed(text)
},
},
{
title: '交付绩点',
dataIndex: 'finshedGPA',
key: 'finshedGPA',
ellipsis: true,
width: 80,
slots: { title: 'finshedGPA' },
customRender: (text, row, index) => {
return toFixed(text)
},
},
]
return columns
},
},
// 侦听器
watch: {
menuType: {
handler(value) {
let that = this
console.log(value)
if (value == 'group') {
console.log(this.columns)
that
.getDataStatisticsList()
.then(() => {
console.log(1313123131231232)
// this.dataList = this.groupDataList
that.columns.splice(1, 1, {
title: '部门',
dataIndex: 'agencyTeamName',
key: 'agencyTeamName',
ellipsis: true,
// width: 120,
slots: { title: 'agencyTeamName' },
})
tableWidth(that, that.columns, 120)
this.$forceUpdate()
})
.catch((err) => {
console.log(err)
})
//
} else {
console.log(that.columns.slice(1, 2)[0].title)
if (that.columns.slice(1, 2)[0].title == '部门') {
that.getDataStatisticsList().then(() => {
console.log(1313123131231232)
that.dataList = fullCopy(that.totalDataList)
that.columns.splice(1, 1, {
title: '姓名',
dataIndex: 'aliasName',
key: 'aliasName',
customRender: (text, row, index) => {
return row.aliasName
},
ellipsis: true,
})
this.$forceUpdate()
})
}
}
that.selectedKeys = ['all']
this.selectGroup('all')
// if (that.contentListSearchForm.start == that.contentListSearchForm.end) {
// console.log(123123)
// that.dataList.sort((a, b) => {
// return b.funnel - a.funnel
// })
// } else {
// console.log(321312)
// that.dataList.sort((a, b) => {
// return b.entryGPA - a.entryGPA
// })
// }
// that.$forceUpdate()
},
immediate: true,
// setTimeout(()=>{
// },200)
},
},
// 生命周期钩子 注:没用到的钩子请自行删除
/**
* 组件实例创建完成属性已绑定但DOM还未生成$ el属性还不存在
*/
created() {
this.contentListSearchForm.start = moment().add(-0, 'd').format('YYYY-MM-DD')
this.contentListSearchForm.end = moment().format('YYYY-MM-DD')
// this.billList = [...this.billList, ...this.billList, ...this.billList]
tableWidth(this, this.columns, 120)
console.log(this.currWidth)
this.$emit('setTitle', '团队数据')
this.getDataStatisticsList()
this.getMemberGroup()
},
/**
* el 被新创建的 vm.el 替换,并挂载到实例上去之后调用该钩子。
* 如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.el 也在文档内。
*/
mounted() {
let that = this
console.log(document.documentElement.clientHeight)
console.log(document.getElementsByClassName('content')[0].offsetTop)
this.tableHeight = document.documentElement.clientHeight - document.getElementsByClassName('content')[0].offsetTop - 160
// let tableContent
// tableContent = document.querySelector('#rightContainer')
// console.dir(tableContent)
// console.log(tableContent.scrollWidth)
// let width = window.innerWidth
// console.log(width)
// that.screenWidth = tableContent.scrollWidth - 20
// window.onresize = function (e) {
// console.log(e)
// tableContent = document.querySelector('#rightContainer')
// console.dir(tableContent)
// console.log(tableContent.scrollWidth)
// let width = window.innerWidth
// console.log(width)
// that.screenWidth = (tableContent.scrollWidth < 852 ? tableContent.scrollWidth : that.screenWidth)
// console.log(that.screenWidth)
// // setRem(640);
// }
},
// 组件方法
methods: {
/**
* 请求日期切换
*
*
*/
handleChange(tag, checked) {
let that = this
this.checked0 = false
this.checked1 = false
this.checked2 = false
this.checked3 = false
this.checked4 = false
this.checked5 = false
this.checked6 = false
this.checked7 = false
var start = getDateYMD()
var end = getDateYMD()
if (tag == 0) {
that.checked0 = true
start = moment().add(-6, 'd').format('YYYY-MM-DD')
end = moment().format('YYYY-MM-DD')
} else if (tag == 1) {
that.checked1 = true
start = moment().add(-29, 'd').format('YYYY-MM-DD')
end = moment().format('YYYY-MM-DD')
} else if (tag == 2) {
that.checked2 = true
start = moment().startOf('week').weekday(-1).format('YYYY-MM-DD')
end = moment().format('YYYY-MM-DD')
} else if (tag == 3) {
that.checked3 = true
// console.log(moment().week(moment().week() - 1).weekday(-1).format('YYYY-MM-DD'));
// console.log(moment().week(moment().week() - 1).weekday(5).format('YYYY-MM-DD'));
// start = moment()
// .week(moment().week() - 1)
// .startOf('week')
// .format('YYYY-MM-DD')
// end = moment()
// .week(moment().week() - 1)
// .endOf('week')
// .format('YYYY-MM-DD')
start = moment()
.week(moment().week() - 1)
.weekday(-1)
.format('YYYY-MM-DD')
end = moment()
.week(moment().week() - 1)
.weekday(5)
.format('YYYY-MM-DD')
console.log(start)
console.log(end)
// return
} else if (tag == 4) {
that.checked4 = true
start = moment().startOf('month').format('YYYY-MM-DD')
end = moment().format('YYYY-MM-DD')
} else if (tag == 5) {
that.checked5 = true
start = moment().subtract('month', 1).format('YYYY-MM') + '-01'
end = moment().subtract(1, 'month').endOf('month').format('YYYY-MM-DD')
} else if (tag == 6) {
that.checked6 = true
start = moment().add(-0, 'd').format('YYYY-MM-DD')
end = moment().format('YYYY-MM-DD')
} else if (tag == 7) {
that.checked7 = true
start = moment().add(-1, 'd').format('YYYY-MM-DD')
end = moment().add(-1, 'd').format('YYYY-MM-DD')
}
that.contentListSearchForm.start = start
that.contentListSearchForm.end = end
// this.selDate = [moment(that.contentListSearchForm.start, 'YYYY-MM-DD'), moment(that.contentListSearchForm.end, 'YYYY-MM-DD')]
that.contentListSearchForm.pageNum = 1
this.pagination.current = 1
this.getDataStatisticsList()
},
async getDataStatisticsList() {
this.isspinning = true
let { data } = await dataStatisticsListApi(this.contentListSearchForm)
console.log(data)
if (data.status == 200) {
this.totalObj = {
arrived: null,
entry: null,
obJob: null,
passed: null,
signUps: null,
finshedGPA: null,
entryGPA: null,
}
data.data.list.forEach((item, index) => {
this.totalObj.arrived += item.arrived
this.totalObj.entry += item.entry
this.totalObj.obJob += item.obJob
this.totalObj.passed += item.passed
this.totalObj.signUps += item.signUps
this.totalObj.finshedGPA += item.finshedGPA
this.totalObj.entryGPA += item.entryGPA
this.totalObj.index = index + 2
})
let newList = []
data.data.list.forEach((item, index) => {
newList = newList.concat(item.users)
console.log(item)
console.log(index)
})
console.log(newList)
if (this.menuType == 'group') {
console.log('isgroup')
this.dataList = fullCopy(data.data.list)
} else {
console.log('isrole')
this.dataList = fullCopy(newList)
}
if (this.contentListSearchForm.start == this.contentListSearchForm.end) {
this.dataList.sort((a, b) => {
return b.funnel - a.funnel
})
} else {
this.dataList.sort((a, b) => {
return b.entryGPA - a.entryGPA
})
}
this.groupDataList = fullCopy(data.data.list)
this.totalDataList = fullCopy(newList)
if (this.currentGroup) {
this.selectGroup(this.currentGroup)
}
this.isspinning = false
}
},
toFixed(value) {
return toFixed(value)
},
inputpageChange(e) {
const pagenumcount = this.billPagination.total / this.billPagination.pageSize
console.log(pagenumcount)
if (e.target.value) {
if (e.target.value > pagenumcount) {
this.billPagination.pageNum = Math.ceil(pagenumcount)
} else {
this.billPagination.pageNum = e.target.value
}
} else {
this.billPagination.pageNum = 1
}
this.gitBillList()
// this.getJobList();
// this.getTownsman()
console.log(e)
},
dateChange(data) {
console.log(data)
var that = this
if (data.length == 2) {
that.contentListSearchForm.start = data[0].format('YYYY-MM-DD')
that.contentListSearchForm.end = data[1].format('YYYY-MM-DD')
that.checked0 = false
that.checked1 = false
that.checked2 = false
that.checked3 = false
that.checked4 = false
that.checked5 = false
that.checked6 = false
that.checked7 = false
} else {
that.checked0 = false
that.checked1 = false
that.checked2 = false
that.checked3 = false
that.checked4 = false
that.checked5 = false
that.checked6 = true
that.checked7 = false
that.contentListSearchForm.start = moment().add(-0, 'd').format('YYYY-MM-DD')
that.contentListSearchForm.end = moment().format('YYYY-MM-DD')
}
that.getDataStatisticsList()
},
townsmanDetailModalClose() {
this.townsmanDetailVisible = false
this.billPagination = {
pageNum: 1,
pageSize: 20,
total: null, //分页配置
status: 0,
keys: null,
// searchTag: 1,
}
},
onSearch() {
if (this.billPagination.keys != null && this.billPagination.keys.length != 0) {
this.gitBillList()
// this.getTownsman()
// this.gettownsManCount()
}
},
resetsearch(e) {
console.log(e)
if (e.target.value.length === 0) {
this.billPagination.keys = ''
this.gitBillList()
// this.gettownsManCount()
// this.getTownsman()
}
},
onChange(e, e1, e2) {
console.log(e)
console.log(e1)
console.log(e2)
if (typeof e == 'number') {
this.billPagination.pageNum = e
this.gitBillList()
}
},
getMemberGroup() {
getMemberGroupApi().then(({ data }) => {
if (data.status == 200) {
console.log(data)
this.groupList = data.data.list
this.groupList.forEach((item, index) => {
console.log(item)
if (index > 0) {
item.checked = false
} else {
item.checked = true
}
console.log(item)
})
}
})
},
/**
* 点击获取数据统计详情
*
*
*/
getBillInfo(e, type) {
console.log(e)
if (e.users) {
if (e.agencyTeamId == '') {
}
}
this.currentData = { ...e, type }
switch (type) {
case 10:
this.dateType = '报名时间'
this.dateVal = 'createTime'
break
case 20:
this.dateType = '面试时间'
this.dateVal = 'status25OperateTime'
break
case 30:
this.dateType = '通过时间'
this.dateVal = 'status30OperateTime'
break
case 40:
this.dateType = '入职时间'
this.dateVal = 'entryTime'
break
case 50:
this.dateType = '入职时间'
this.dateVal = 'status40OperateTime'
break
case 60:
this.dateType = '入职时间'
this.dateVal = 'status40OperateTime'
break
case 70:
this.dateType = '交付时间'
this.dateVal = 'finishedTime'
break
default:
break
}
this.gitBillList()
},
async gitBillList() {
this.isspinning = true
console.log(this.billPagination.keys)
console.log(this.currentData)
let data = {
pageNum: this.billPagination.pageNum,
pageSize: this.billPagination.pageSize,
start: this.contentListSearchForm.start,
end: this.contentListSearchForm.end,
keys: this.billPagination.keys,
userId: this.currentData.id ? this.currentData.id : '',
agencyTeamId: this.currentData.agencyTeamId,
type: this.currentData.type,
}
console.log(data);
let res = await dataStatisticsTeamDetailApi(data)
console.log(res)
let pageBean = res.data.data.pageBean
if (res.data.status == 200) {
this.billList = pageBean.recordList
this.billPagination = { ...this.billPagination, total: pageBean.recordCount, pageNum: pageBean.currentPage }
this.townsmanDetailVisible = true
}
this.isspinning = false
},
selectGroup(val) {
console.log(val)
this.selectedKeys = [val.agencyTeamName || 'all']
if (typeof val == 'object') {
this.currentGroup = val
this.groupDataList.forEach((item) => {
console.log(item)
console.log()
if (item.agencyTeamId == val.agencyTeamId) {
this.dataList = item.users
this.totalObj.arrived = 0
this.totalObj.entry = 0
this.totalObj.obJob = 0
this.totalObj.passed = 0
this.totalObj.signUps = 0
this.totalObj.finshedGPA = 0
this.totalObj.entryGPA = 0
this.dataList.forEach((item1) => {
this.totalObj.arrived += item1.arrived
this.totalObj.entry += item1.entry
this.totalObj.obJob += item1.obJob
this.totalObj.passed += item1.passed
this.totalObj.signUps += item1.signUps
this.totalObj.finshedGPA += item1.finshedGPA
this.totalObj.entryGPA += item1.entryGPA
})
}
})
if (this.contentListSearchForm.start == this.contentListSearchForm.end) {
this.dataList.sort((a, b) => {
return b.funnel - a.funnel
})
} else {
this.dataList.sort((a, b) => {
return b.entryGPA - a.entryGPA
})
}
console.log(this.dataList)
} else {
this.currentGroup = {}
this.getDataStatisticsList()
}
// this.getDataStatisticsList()
},
onDataSearch() {
this.getDataStatisticsList()
},
},
}
</script>
<style scoped lang="less">
table {
font-size: 14px;
}
.dataStatisticsContainer {
height: 100%;
// padding: 16px;
// min-height: 780px;
}
.contentbody {
overflow: hidden;
padding-right: 16px;
display: flex;
justify-content: space-between;
padding-left: 0;
padding-bottom: 0px;
// overflow: hidden;
min-height: calc(100vh - 105px);
// height: calc(100vh - 105px);
.leftContainer {
width: 260px;
min-width: 220px;
height: 100%;
overflow: hidden;
/deep/ .searchbox {
display: flex;
justify-content: space-between;
.searchinput {
width: 100%;
}
// padding-bottom: 14px;
}
.leftMenu {
max-width: calc(100% - 1px);
margin-right: 1px;
border-right-color: transparent;
&::-webkit-scrollbar {
width: 0;
}
}
.thedot {
display: none;
}
.showdot:hover .thedot {
display: block;
}
}
.rightContainer {
flex: 1;
padding-left: 16px;
overflow-x: auto;
position: relative;
min-width: 274px;
&::before {
position: absolute;
content: '';
width: 1px;
height: calc(100% - 16px);
left: 0;
top: 0;
background: #eee;
}
.addmemeber {
border: 0;
padding: 0 12px;
height: 32px;
line-height: 32px;
color: #fff;
background: #1890ff;
border-radius: 4px;
i {
font-size: 12px;
}
}
.addRole {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
color: #1890ff;
i {
// transform: translateY(4px);
margin-right: 4px;
font-weight: 400;
color: #1890ff;
}
}
.addItem {
width: 404px;
}
}
/deep/ .ant-table-placeholder {
min-height: 300px;
> div {
position: relative;
height: 131px;
top: 30px;
// transform: translateY(-50%);
}
}
}
.pagechange {
button {
width: 66px;
height: 24px;
border: 1px solid rgba(77, 87, 94, 0.3);
// border-radius: 4px;
font-size: 14px;
color: #4d575e;
background-color: #fff;
&:hover {
border-color: #1890ff;
color: #1890ff;
}
&:first-child {
margin-right: 12px;
}
}
}
.townsmanDetailModal {
/deep/ .ant-modal-header {
// background-color: #f5f5f5;
> div {
height: 44px;
line-height: 44px;
font-weight: bold;
}
padding: 0 20px;
border-bottom: 1px solid #ddd;
}
/deep/ .ant-modal-content {
.ant-modal-body {
min-height: 730px;
max-height: 730px;
padding-bottom: 50px;
overflow: auto;
}
}
}
td:empty:before {
content: '-';
}
/deep/ .ant-table.ant-table-fixed-header .ant-table-scroll .ant-table-header {
overflow: auto !important;
margin-bottom: -20px !important;
padding-bottom: 20px !important;
}
/deep/ .ant-table {
table {
font-size: 14px;
}
.ant-table-pagination.ant-pagination {
float: unset;
text-align: center;
}
.ant-table-thead {
> tr {
> th {
font-weight: bold !important;
}
}
}
// .ant-table-body::-webkit-scrollbar {
// width: 0 !important;
// }
.ant-table-hide-scrollbar {
// padding-right: 0 !important;
}
}
.navTitle {
// margin: 16px 0;
width: 100%;
min-width: 856px;
}
.content {
position: relative;
min-width: 1250px;
// overflow: auto;
// max-height: 700px;
}
.total {
// background-color: #fafafa;
// width: 100%;
// width: 460px;
display: flex;
justify-content: center;
align-items: center;
font-size: 22px;
margin-top: 48px;
padding-bottom: 32px;
border-bottom: 1px solid #eee;
// padding-right: 10px;
> div {
text-align: center;
// font-weight: bold;
flex: 1;
&:last-child {
// margin-left: 420px;
> div {
// padding-right: 26px;
text-align: center;
}
}
> div {
// padding: 16px;
font-size: 14px;
text-align: center;
color: #999;
}
}
}
/deep/.searchinput {
width: 320px;
// margin-bottom: 16px;
position: relative;
}
.pagecontainer {
// position: absolute;
// bottom: 0;
// left: 50%;
width: 100%;
// transform: translateX(-50%);
display: flex;
// justify-content: center;
}
/deep/.ant-btn-primary:hover {
border-color: #40a9ff;
background-color: #40a9ff;
color: #fff;
}
/deep/.detailTable {
.ant-table-thead {
& > tr > th {
padding: 12px 8px !important;
}
.ant-table-row-cell-break-word {
padding: 12px 8px;
// text-align: center;
}
}
.ant-table-body {
.ant-table-tbody {
> tr > td {
font-size: 14px;
padding: 12px 8px;
// height: 20px;
// display: inline-block;
// padding: 0px 16px;
}
.ant-table-row-indent {
display: none;
}
.ant-table-column-title {
overflow: unset !important;
}
.ant-table-row-cell-break-word {
}
}
}
}
.dataTable {
/deep/ .ant-table-content {
.ant-table-body {
.ant-table-thead {
th {
padding: 12px 0;
div {
// padding: 0px 8px;
}
&:not(:first-child) {
> span {
// line-height: 22px;
> div {
// line-height: 1;
border-left: 1px solid #ddd;
padding-left: 12px;
}
}
}
}
.ant-table-row-cell-break-word {
font-weight: bold;
}
.ant-table-row-cell-ellipsis {
font-weight: bold;
}
}
.ant-table-tbody {
.ant-table-row-cell-ellipsis {
padding: 12px 12px;
}
.ant-table-row-expand-icon {
// color: #000;
padding: 0;
}
.ant-table-row-indent {
display: none !important;
}
}
}
}
/deep/.ant-table-tbody {
> tr > td {
font-size: 14px;
// height: 20px;
// display: inline-block;
padding: 0px 16px;
}
.ant-table-row-indent {
display: none;
}
.ant-table-column-title {
overflow: unset !important;
}
.ant-table-row-cell-break-word {
// height: 54px;
// text-align: right;
// padding-right: 26px !important;
overflow: hidden;
.ant-table-row-spaced {
display: none !important;
}
}
}
}
/deep/ .ant-select-dropdown-menu-item-active,
.ant-select-dropdown-menu-item-selected {
color: #1890ff !important;
font-weight: normal;
background-color: #e6f7ff !important;
}
.table_left {
position: relative;
}
.table_left:before {
content: '';
width: 1px;
height: 20px;
top: 50%;
transform: translateY(-50%);
background-color: #ccc;
position: absolute;
left: 0px;
}
/deep/.spinstyle {
.ant-spin-dot-item {
background-color: #1890ff !important;
}
.ant-spin-text {
color: #1890ff !important;
}
}
/deep/.ant-calendar-panel {
.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month {
background: #1890ff !important;
}
.ant-calendar-date:hover {
border-color: #1890ff !important;
background-color: #fff;
color: #1890ff !important;
}
.ant-calendar-today .ant-calendar-date {
background-color: #1890ff !important;
border-color: #1890ff !important;
color: #fff;
}
.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date,
.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date {
background-color: #1890ff !important;
border-color: #1890ff !important;
color: #fff;
}
.ant-calendar-range .ant-calendar-in-range-cell::before {
background: #e6f7ff !important;
}
.ant-calendar-range .ant-calendar-selected-start-date .ant-calendar-date:hover,
.ant-calendar-range .ant-calendar-selected-end-date .ant-calendar-date:hover {
background: #1890ff !important;
}
.ant-calendar-header a:hover {
color: #1890ff !important;
}
.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover,
.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year,
.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade,
.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover,
.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover {
background: #1890ff !important;
}
.ant-calendar-month-panel-month:hover,
.ant-calendar-year-panel-year:hover,
.ant-calendar-decade-panel-decade:hover {
background: #e6f7ff !important;
}
}
// /deep/.ant-popover .ant-popover-content .ant-popover-inner-content {
// width: 200px !important;
// }
</style>
<style>
.ant-modal-close-x {
width: 44px;
height: 44px;
line-height: 44px;
}
.ant-empty-description {
font-size: 14px;
color: rgba(0, 0, 0, 0.25);
}
.ant-table-placeholder {
margin-bottom: 16px;
}
</style>