import React, { useEffect, useRef, useState, useMemo } from 'react'; import { connect } from 'react-redux'; import moment from 'moment' import { Select, Input, Button, Popconfirm, Radio, Tooltip, Table, Pagination, Skeleton } from '@douyinfe/semi-ui'; import SalesMemberModal from './salesMemberModal' import ImportSalersModal from './importSalersModal' import { IconSearch } from '@douyinfe/semi-icons'; import { SkeletonScreen } from "$components"; import '../../style.less' const PersonnelDistribution = (props) => { const { dispatch, actions } = props const { humanAffairs } = actions; const [keywordTarget, setKeywordTarget] = useState('dep'); const [keyword, setKeyword] = useState('');//搜索内容 const [limits, setLimits] = useState()//每页实际条数 const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息 const [modalV, setModalV] = useState(false); const [dataToEdit, setDataToEdit] = useState(null); const [tableData, setTableData] = useState([]); const [importModalV, setImportModalV] = useState(false); const page = useRef(query.page); function seachValueChange(value) { setKeyword(value) } useEffect(() => { dispatch(humanAffairs.getMemberList()) getMemberSearchList() }, []); useEffect(() => { getMemberSearchList()//查询人员列表 }, [query]) function getMemberSearchList() { let kt = keywordTarget == 'place' ? '' : keywordTarget; let k = keywordTarget == 'place' ? '' : keyword; let placeSearch = keywordTarget == 'place' ? keyword : ''; dispatch(humanAffairs.getSalesList({ keywordTarget: kt, keyword: k, placeSearch, ...query })).then(r => { if (r.success) { setTableData(r.payload?.data?.rows); setLimits(r.payload?.data?.count) } }) } function handleRow(record, index) {// 给偶数行设置斑马纹 if (index % 2 === 0) { return { style: { background: '#FAFCFF', } }; } else { return {}; } } const closeAndFetch = () => { setModalV(false) getMemberSearchList(); } const starHeader = (header) => { return
{header}
} const getMultis = (arrStr) => {//默认展示2个 return
{ arrStr.length ? arrStr.map((ite, idx) => { return (
{idx < 2 ?
{ite}
: '' } { arrStr.length > 2 && idx == 2 ?
+{arrStr.length - 2}
: '' }
) }) : '-' }
} const columns = [{ title: '序号', dataIndex: 'id', key: 'id', width: 60, render: (text, record, index) => index + 1 }, { title: starHeader('姓名'), dataIndex: 'name', key: 'name', width: 80 }, { title: starHeader('部门名称'), dataIndex: 'department', key: 'department', width: 200, render: (text, r, index) => { let arrStr = text.map(t => t.name); return getMultis(arrStr); } }, { title: '销售区域(省/直辖市)', dataIndex: 'provinces', key: 'provinces', width: 160, render: (text, record, index) => { return getMultis(text?.split('、') || []); } }, { title: '销售区域(市)', dataIndex: 'cities', key: 'cities', width: 160, render: (text, record, index) => { return text ? getMultis(text?.split('、') || []) : '-'; } }, { title: '业务线', dataIndex: 'businessLines', key: 'businessLines', width: 140, render: (text, record, index) => { return text ? getMultis(text?.split('、') || []) : '-'; } }, { title: starHeader('岗位'), dataIndex: 'post', key: 'post', width: 120, render: (text, record) => {text || '-'} }, { title: starHeader('入职时间'), dataIndex: 'hireDate', key: 'hireDate', width: 120, render: (text, record) => {text || '-'} }, { title: starHeader('转正时间'), dataIndex: 'regularDate', key: 'regularDate', width: 120, render: (text, record) => {text || '-'} }, { title: starHeader('工龄'), dataIndex: 'workYears', key: 'workYears', width: 120, render: (_, r, index) => { return (r.hireDate ? {String(moment(new Date()).diff(r.hireDate, 'years', true)).substring(0, 3) + '年'} : '-') }, }, { title: '操作', dataIndex: 'action', width: 120, render: (text, record) => { return
onEdit(record)}>编辑   confirmDelete(record.pepUserId)} style={{ width: 330 }} > 删除
} }]; const onEdit = (data) => { setModalV(true); setDataToEdit(data); } const confirmDelete = (pepUserId) => { dispatch(humanAffairs.delSalesMember({ pepUserId, msg: '删除销售人员信息' })).then(res => { if (res.success) { getMemberSearchList(); } }); } const scroll = useMemo(() => ({}), []); return (
招聘
/
销售统计
/
销售人员分布
销售人员分布
DISTRIBUTION OF SALES PERSONNEL
{ setModalV(true); setDataToEdit(null); }}> 新增
} showClear placeholder='请输入关键词搜索' value={keyword} style={{ width: 346 }} onChange={seachValueChange}>
{ setImportModalV(true); }}> 导入
{/*
导出
*/}
表格中带有认证标识" "信息的为系统基础数据,来源于项企PEP、钉钉等系统,其他数据均为导入或自定义数据
{ if (sorter.key == 'userCode') { if (sorter.sortOrder == 'descend') { setOrder({ orderBy: 'code', orderDirection: 'DESC' }) } else { setOrder({ orderBy: 'code', orderDirection: 'ASC' }) } } else if (sorter.key == 'age') { if (sorter.sortOrder == 'descend') { setOrder({ orderBy: 'age', orderDirection: 'DESC' }) } else { setOrder({ orderBy: 'age', orderDirection: 'ASC' }) } } else { if (sorter.sortOrder == 'descend') { setOrder({ orderBy: 'hiredate', orderDirection: 'DESC' }) } else { setOrder({ orderBy: 'hiredate', orderDirection: 'ASC' }) } } }} onRow={handleRow} scroll={scroll} />
共{limits}条信息 { setQuery({ limit: pageSize, page: currentPage - 1 }); page.current = currentPage - 1 }} />
{ modalV ? closeAndFetch()} onCancel={() => setModalV(false)} /> : '' } { importModalV ? { setImportModalV(false); getMemberSearchList(); }} /> : '' } ) } function mapStateToProps(state) { const { auth, global, SalesMemberList } = state; return { user: auth.user, actions: global.actions, salesMemberList: SalesMemberList.data }; } export default connect(mapStateToProps)(PersonnelDistribution);