// 服务区人员管理 import { connect } from "umi"; import type { CurrentUser } from "umi"; import type { ConnectState } from "@/models/connect"; import React, { useRef, useState } from "react"; import ProCard from "@ant-design/pro-card"; import { MenuFoldOutlined, PlusOutlined } from "@ant-design/icons"; import { Col, Divider, FormInstance, Modal, Row } from "antd"; import { Button, message, Space, Spin, Tree } from "antd"; import useRequest from "@ahooksjs/use-request"; import { getFieldEnum, getServerpartTree } from "@/services/options"; import type { ActionType } from "@ant-design/pro-table"; import ProTable from "@ant-design/pro-table"; import ReactHTMLTableToExcel from "react-html-table-to-excel"; import LeftSelectTree from "@/pages/reports/settlementAccount/component/leftSelectTree"; import ProForm, { ProFormCheckbox, ProFormRadio, ProFormSelect, ProFormText } from "@ant-design/pro-form"; import { handleGetCASHWORKERDetail, handleGetCASHWORKERList, handleGetServerpartShopList, handleSynchroCASHWORKER } from "./service"; import PageTitleBox from "@/components/PageTitleBox"; import session from "@/utils/session"; import { handleNewGetSERVERPARTDetail } from "../service"; const serviceAreaPersonnel: React.FC<{ currentUser: CurrentUser }> = (props) => { const { currentUser } = props const downloadBtnRef = useRef() const actionRef = useRef(); const realteActionRef = useRef(); const formRef = useRef(); const editFormRef = useRef(); const [reqDetailList, setReqDetailList] = useState(); // 合计项数据源 const [printOut, setPrintOut] = useState(); // 打印数据的内容 const [collapsible, setCollapsible] = useState(false) const [treeView, setTreeView] = useState() const [printIndex, setPrintIndex] = useState(new Date().getTime()) // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() // 导出的加载效果 const [showLoading, setShowLoading] = useState(false) // 是否显示打印的表格 const [showExportTable, setShowExportTable] = useState(false) // 查询的条件 const [searchParams, setSearchParams] = useState() // 编辑悬浮框 const [editModal, setEditModal] = useState(false) // 点击行的数据 const [currentRow, setCurrentRow] = useState() // 员工详情 const [personDetail, setPersonDetail] = useState() // 关联门店悬浮框 const [relatedShop, setRelatedShop] = useState() // 选择的门店id数组 const [selectShop, setSelectShop] = useState() // 显示的人员权限可以选择的内容 const [showPROWERSETList, setShowPROWERSETList] = useState() const { loading: PROWERSETLoading, data: PROWERSET } = useRequest(async () => { const data = await getFieldEnum({ FieldExplainField: 'PROWERSET' }) console.log('data', data); return data }) const addQuotesToNumbers = (value: any) => { return /^-?\d+(\.\d+)?$/.test(value) ? `'${value}` : value; }; const columns: any = [ { title:
服务区名称
, dataIndex: 'ServerPart_Name', align: 'center', hideInSearch: true, }, { title:
人员类别
, dataIndex: 'CASHWORKER_TYPE', valueType: 'select', align: 'center', fieldProps: { options: [ { label: "全部", value: '0' }, { label: "收银员", value: '1' }, { label: "管理员", value: '2' }, { label: "店长", value: '20' }, { label: "稽核人员", value: '25' }, ] }, // valueEnum: { // '0': '全部', // '1': '收银员', // '2': '管理员', // '20': '店长', // '25': "稽核人员" // }, initialValue: '0' }, { title:
人员名称
, dataIndex: 'CASHWORKER_NAME', align: 'center', hideInSearch: true, render: (_, record) => { return { setCurrentRow(record) setEditModal(true) }}> {record?.CASHWORKER_NAME || ''} } }, { title:
人员账号
, dataIndex: 'CASHWORKER_LOGINNAME', align: 'center', valueType: 'text', hideInSearch: true }, { title:
人员密码
, dataIndex: 'CASHWORKER_LOGINPWD', align: 'center', valueType: 'text', hideInSearch: true, }, { title:
人员状态
, dataIndex: 'WORKER_VALID', align: 'center', valueType: 'select', fieldProps: { options: [ { label: "全部", value: 'all' }, { label: "有效", value: '1' }, { label: "无效", value: '0' }, ] }, // valueEnum: { // 'all': '全部', // '1': '有效', // '0': '无效' // }, initialValue: '1' }, { title: '查询内容', dataIndex: 'searchValue', hideInTable: true, fieldProps: { placeholder: '请输入人员名称' } } ] const relateColumns: any = [ { title: '门店名称', dataIndex: 'SHOPNAME', hideInSearch: true }, { title: '服务区', dataIndex: 'SERVERPART_NAME', hideInSearch: true }, { title: '经营状态', dataIndex: 'ISVALID', hideInSearch: true, valueType: 'select', valueEnum: { '1': { text: '有效', status: 'processing' }, '0': { text: '无效', status: 'error' } } } ] const exportTable = (e) => { e.stopPropagation(); // 防止Collapse组件收起 const main = document.getElementsByClassName(`saleReportHideBox${printIndex}`)[0] const thead = main.querySelector('thead').cloneNode(true); // 深克隆DOM节点 const tbody = main.querySelector('tbody').cloneNode(true); // 深克隆DOM节点 const container = document.querySelector('#hiddenBox'); const tempTable = document.createElement('table'); tempTable.appendChild(thead); tempTable.appendChild(tbody); tempTable.setAttribute('id', 'table-to-xls-serviceAreaPersonnel'); // 给table添加id,值与按钮上的table字段对应 container.appendChild(tempTable); // 把创建的节点添加到页面容器中 setShowLoading(false) downloadBtnRef.current.handleDownload(); setShowExportTable(false) tempTable.remove() // 防止重复打印一个内容 } return (
{ // 打印报表 if (!reqDetailList || reqDetailList.length === 0) return; setPrintOut(el); }} > { showLoading ?
数据导出中...
: '' }
{ showExportTable && reqDetailList && reqDetailList.length > 0 ? : '' }
} search={{ span: 6 }} request={async (params) => { if (!selectedId) { return } setSearchParams(params) const req: any = { SearchParameter: { SERVERPART_IDS: selectedId, Worker_ValId: params?.Worker_ValId === '1' ? 1 : params?.Worker_ValId === '0' ? 0 : '',// 有效状态 // Post: params?.CASHWORKER_TYPE === '0' ? '' : Number(params?.CASHWORKER_TYPE),// 人员类别 CASHWORKER_TYPE: params?.CASHWORKER_TYPE === '0' ? '' : params.CASHWORKER_TYPE || "" }, keyWord: { Key: 'CASHWORKER_NAME', Value: params?.searchValue || '' }, PageIndex: 1, PageSize: 999999 } const data = await handleGetCASHWORKERList(req) if (data && data.length > 0) { console.log('data', data); let res = JSON.parse(JSON.stringify(data)) let list: any = [] data.forEach((item: any) => { item.CASHWORKER_LOGINNAME = `"${item.CASHWORKER_LOGINNAME}"` item.CASHWORKER_LOGINPWD = `"${item.CASHWORKER_LOGINPWD}"` list.push(item) }) setReqDetailList(list) return { data: res, success: true } } setReqDetailList([]) return { data: [], success: true } }} toolbar={{ actions: [ , , ] }} />
{/* 编辑悬浮框 */} { setEditModal(false) setCurrentRow(undefined) setPersonDetail(undefined) }} footer={
{/* */}
} > { console.log('currentRow', currentRow); if (currentRow?.CASHWORKER_ID) { const req: any = { CASHWORKERId: currentRow?.CASHWORKER_ID } const data = await handleGetCASHWORKERDetail(req) console.log('data', data); let author: string[] = [] if (PROWERSET && PROWERSET.length > 0) { let str: string = data.WORKER_OTHER.toString() PROWERSET.forEach((item: any) => { if (str[item.value - 1] === '1') { if (author) { author.push(item.value.toString()) } } }) } console.log('author', author); setPersonDetail({ ...data, WORKER_OTHER: author }) return { ...data, WORKER_OTHER: author } } else { return { WORKER_VALID: 1 } } }} submitter={{ render: (props, doms) => { return [] } }} > { const list: any = [ { label: '收银员', value: 1 }, { label: '管理员', value: 2 }, { label: '店长', value: 20 }, ] return list }} rules={[ { required: true, message: '请选择人员类别', }, ]} fieldProps={{ onChange: (e: any) => { console.log('e', e); // WORKER_OTHER: [''] let list: any = [] let nowValueList: any = [] if (e === 1) { editFormRef.current?.setFieldsValue({ WORKER_OTHER: ['1', '5', '8', '13', '15', '47', '52', '53'] }) nowValueList = ['1', '2', '4', '5', '6', '8', '9', '10', '13', '15', '35', '47', '52', '53'] } else if (e === 2) { editFormRef.current?.setFieldsValue({ WORKER_OTHER: ['2', '3', '4', '6', '18', '35', '36', '51'] }) nowValueList = ['1', '2', '3', '4', '5', '6', '8', '9', '10', '13', '15', '18', '35', '36', '47', '50', '51', '52', '53', '120'] } else if (e === 20) { editFormRef.current?.setFieldsValue({ WORKER_OTHER: ['2', '3', '4', '6', '8', '18', '35', '47', '51'] }) nowValueList = ['2', '3', '4', '6', '8', '9', '10', '18', '35', '47', '51'] } if (PROWERSET && PROWERSET.length > 0) { PROWERSET.forEach((item: any) => { if (nowValueList.indexOf(item.value.toString()) !== -1) { list.push(item) } }) } console.log('PROWERSETPROWERSETPROWERSETPROWERSET', PROWERSET); console.log('listlistlistlistlist', list); setShowPROWERSETList(list) } }} /> { let serverpartList = session.get('ServerpartIdsTree') return serverpartList }} rules={[ { required: true, message: '请选择服务区', }, ]} /> { const list: any = [ { label: '有效', value: 1 }, { label: '无效', value: 0 }, ] return list }} rules={[ { required: true, message: '请选择人员状态', }, ]} /> 人员权限 { // if (PROWERSET && PROWERSET.length > 0) { // PROWERSET.forEach((item: any) => { // item.value = item.value.toString() // }) // } // console.log('PROWERSET', PROWERSET); // return PROWERSET // }} // options={[ // { label: '销售', value: 1 }, // { label: '退货', value: 2 }, // { label: '优惠', value: 4 }, // { label: '单清', value: 5 }, // { label: '改价', value: 6 }, // { label: '开钱箱', value: 8 }, // { label: '支付通道切换', value: 9 }, // { label: '套餐销售配置', value: 10 }, // { label: '挂单取单', value: 13 }, // { label: '修改数量', value: 15 }, // { label: '小票复制', value: 35 }, // { label: '开箱口令', value: 47 }, // { label: '总清', value: 52 }, // { label: '拼音码销售', value: 53 }, // ]} >
{/* 关联门店悬浮框 */} { setRelatedShop(false) setSelectShop(undefined) }} footer={
} > { return `${record?.SERVERPARTSHOP_ID}` }} request={async () => { let id: string = '' if (!currentRow?.CASHWORKER_ID) { let formRef: any = editFormRef.current?.getFieldsValue() console.log('formRefformRefformRef', formRef); id = formRef.SERVERPART_ID } const req: any = { SearchParameter: { ISVALID: 1, SERVERPART_IDS: id || currentRow?.SERVERPART_ID, SortStr: "BUSINESS_STATE,SHOPTRADE,SHOPSHORTNAME,SHOPREGION" }, SortStr: "BUSINESS_STATE,SHOPTRADE,SHOPSHORTNAME,SHOPREGION", pagesize: 999999 } const data = await handleGetServerpartShopList(req) if (data && data.length > 0) { return { data, success: true } } return { data: [], success: true } }} headerTitle={`当前收银员为【${currentRow?.CASHWORKER_NAME || ""}】`} pagination={false} scroll={{ y: 400 }} rowSelection={{ onChange: (selectedRowKeys, selectedRows) => { // 选中行时 存储选中的行数据 console.log('selectedRowKeys', selectedRowKeys); console.log('selectedRows', selectedRows); setSelectShop(selectedRowKeys) }, defaultSelectedRowKeys: selectShop }} />
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(serviceAreaPersonnel);