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 { FileSearchOutlined, MenuFoldOutlined, PlusOutlined } from "@ant-design/icons"; import type { FormInstance } from "antd"; import { Popconfirm } from "antd"; import { Button, message, Modal, Space, Spin, Tree } from "antd"; import useRequest from "@ahooksjs/use-request"; import { getFieldEnumTree, 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 { ModalForm, ProFormRadio, ProFormSelect, ProFormText, ProFormTreeSelect } from "@ant-design/pro-form"; import { handleDeleteAPPROVALROUTE, handleDeleteBUSINESSAPPROVAL, handleGetAPPROVALROUTEList, handleGetUSERList, handleSynchroAPPROVALROUTE } from "@/pages/Setting/serviceConfig/service"; import moment from "moment"; import { getUserList, getUserTypeTree } from "@/pages/Setting/Users/service"; import ChosePlayers from "@/pages/Setting/serviceConfig/component/ChosePlayers"; import Draggable from "react-draggable"; import session from "@/utils/session"; const ServiceConfig: React.FC<{ currentUser: CurrentUser }> = (props) => { const { currentUser } = props // 选择参与人的 const choseDetail = useRef() const downloadBtnRef = useRef() const actionRef = useRef(); const formRef = useRef(); const addFormRef = useRef(); const [reqDetailList, setReqDetailList] = useState(); // 合计项数据源 const [printOut, setPrintOut] = useState(); // 打印数据的内容 const [collapsible, setCollapsible] = useState(false) // const [treeView,setTreeView] = useState() // 业务类型的选择器内容 // const [serviceType,setServiceType] = useState() // 业务类型的obj格式 // const [serviceTypeObj,setServiceTypeObj] = useState() const serviceTypeObj = session.get('PROCESS_TYPEObj') const serviceType = session.get('PROCESS_TYPEList') const treeView = session.get('PROCESS_TYPETree') // 选择的角色类型 const [selectRoleType, setSelectRoleType] = useState(0) // 选择的角色类别id const [selectRoleTypeId, setSelectRoleTypeId] = useState() // 加载服务区树 // const { loading: treeLoading, data: treeViews } = useRequest(async () => { // const data = await getFieldEnumTree({ FieldExplainField: 'PROCESS_TYPE', sessionName: 'PROCESS_TYPE' }) // setTreeView(data) // const list: any = [] // const obj: any = {} // if (data && data.length>0){ // data.forEach((item: any)=>{ // list.push({label:item.label,value: item.value}) // obj[item.value] = item.label // }) // } // setServiceType(list) // setServiceTypeObj(obj) // // return data // }) // 显示悬浮抽屉 const [modalVisible, setModalVisible] = useState(false) // 树相关的属性和方法 const [selectedId, setSelectedId] = useState() // 导出的加载效果 const [showLoading, setShowLoading] = useState(false) // 是否显示打印的表格 const [showExportTable, setShowExportTable] = useState(false) // 业务状态选择 const [businessTypeState, setBussinessTypeState] = useState([ // 1000,2000,2010,2020,2030,2040,2050,2060,2070,2080,2090 { label: '1000', value: 1000 }, { label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, // {label:'商户确认审核',value:2000}, // {label:'服务区经理审核',value:2010}, // {label:'片区中心审核',value:2020}, // {label:'经发部审核',value:2030}, // {label:'财务部审核',value:2040}, ]) const [nextBusinessTypeState, setNextBusinessTypeState] = useState([ // 2000,2010,2020,2030,2040,2050,2060,2070,2080,2090,9000 { label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }, // {label:'商户确认审核',value:2000}, // {label:'服务区经理审核',value:2010}, // {label:'片区中心审核',value:2020}, // {label:'经发部审核',value:2030}, // {label:'财务部审核',value:2040}, ]) // 显示参与人的悬浮框 const [showChosePlayer, setShowChosePlayer] = useState(false) // 参与人列表 const [playerList, setPlayerList] = useState() const [playDefaulterList, setPlayDefaulterList] = useState() // 点击的行的详情数据 const [currentRow, setCurrentRow] = useState() // 默认的人 const [defaultPerson, setDefaultPerson] = useState() const draggleRef = React.createRef() const [disabled, setDraggleDisabled] = useState() // 是否拖动 const [bounds, setBounds] = useState<{ left: number, right: number, top: number, bottom: number }>() // 移动的位置 const onDraggaleStart = (event, uiData) => { const { clientWidth, clientHeight } = window.document.documentElement; const targetRect = draggleRef.current?.getBoundingClientRect(); if (!targetRect) { return; } setBounds({ left: -targetRect.left + uiData.x, right: clientWidth - (targetRect.right - uiData.x), top: -targetRect.top + uiData.y, bottom: clientHeight - (targetRect.bottom - uiData.y), }); }; const columns: any = [ { title: '环节名称', dataIndex: 'APPROVALROUTE_NAME', hideInSearch: true }, { title: '业务状态', dataIndex: 'APPROVALROUTE_STATE', sorter: (a, b) => a.APPROVALROUTE_STATE - b.APPROVALROUTE_STATE, defaultSortOrder: 'ascend', // valueType: 'select', // 暂时只支持业务类型为11的商户对账审批 // valueEnum:{ // 2000:'商户确认审核', // 2010:'服务区经理审核', // 2020:'片区中心审核', // 2030:'经发部审核', // 2040:'财务部审核', // } }, { title: '业务类型', dataIndex: 'OPERATION_TYPE', valueType: 'select', hideInSearch: true, valueEnum: serviceTypeObj }, { title: '下一业务状态', dataIndex: 'NEXT_STATE', // valueType: 'select', hideInSearch: true, // valueEnum:{ // 2000:'商户确认审核', // 2010:'服务区经理审核', // 2020:'片区中心审核', // 2030:'经发部审核', // 2040:'财务部审核', // } }, { title: '参与人', dataIndex: 'APPROVALSTAFF_NAME', width: 200, ellipsis: true, hideInSearch: true, }, { title: '生成时间', dataIndex: 'RECORD_DATE', hideInSearch: true, render: (_, record) => { return record?.RECORD_DATE ? moment(record?.RECORD_DATE).format('YYYY-MM-DD') : '' } }, { title: '业主单位', width: 120, dataIndex: 'PROVINCE_CODE', hideInSearch: true, }, { dataIndex: 'option', title: '操作', width: 120, valueType: 'option', align: 'center', fixed: 'right', hideInSearch: true, render: (_, record) => { return ( { console.log('record', record) setSelectRoleType(record?.USER_PATTERN) setCurrentRow(record) setModalVisible(true) }}>编辑 { const req: any = { APPROVALROUTEId: record?.APPROVALROUTE_ID } const data = await handleDeleteAPPROVALROUTE(req) if (data.Result_Code === 100) { message.success('删除成功') actionRef.current?.reload() } else { message.error(data.Result_Desc) } }} > 删除 ) } } ] const exportTable = (e) => { e.stopPropagation(); // 防止Collapse组件收起 const main = document.getElementsByClassName('saleReportHideBox')[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-saleRankReport'); // 给table添加id,值与按钮上的table字段对应 container.appendChild(tempTable); // 把创建的节点添加到页面容器中 setShowLoading(false) downloadBtnRef.current.handleDownload(); setShowExportTable(false) tempTable.remove() // 防止重复打印一个内容 } // 查询的条件 const [searchParams, setSearchParams] = useState() return (
{ // 打印报表 if (!reqDetailList || reqDetailList.length === 0) return; setPrintOut(el); }} > { showLoading ?
数据导出中...
: '' }
{ showExportTable && reqDetailList && reqDetailList.length > 0 ? : '' }
{ setCollapsible(!collapsible) }} />} colSpan={!collapsible ? "300px" : "60px"} title={!collapsible ? "请选择业务类型" : ""} headerBordered collapsed={collapsible} > {treeView && treeView.length > 0 ? { const selectedIds = info.checkedNodes.filter(n => n?.type === 2) setSelectedId(selectedIds.map(n => n?.value)?.toString() || '') // actionRef?.current?.reload() // getData(selectedIds.map(n => n?.value)?.toString() || '') }} // switcherIcon={} /> : ''}
{ if (!selectedId) { return } const req: any = { SearchParameter: { OPERATION_TYPES: selectedId || '11', APPROVALROUTE_VALID: 1, APPROVALROUTE_STATES: params?.APPROVALROUTE_STATE || '', }, PageIndex: 1, PageSize: 999999 } setSearchParams(params) const data = await handleGetAPPROVALROUTEList(req) if (data && data.length > 0) { return { data, success: true } } return { data: [], success: true } }} toolbar={{ actions: [ ] }} />
{ if (!value) { addFormRef.current?.resetFields(); setSelectRoleType(0) setPlayerList([]) setDefaultPerson([]) setCurrentRow(undefined) setNextBusinessTypeState([ { label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }, ]) } else { if (currentRow) { setSelectRoleTypeId(currentRow.SYSTEMROLEIDS) if (currentRow?.APPROVALROUTE_STATE) { const list: any = [{ label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }] list.forEach((item: any) => { if (item.value <= Number(currentRow?.APPROVALROUTE_STATE)) { item.disabled = true } }) setNextBusinessTypeState(list) } else { const list: any = [{ label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }] list.forEach((item: any) => { item.disabled = false }) setNextBusinessTypeState(list) } addFormRef.current?.setFieldsValue({ ...currentRow, APPROVALSTAFF_ID: currentRow?.APPROVALSTAFF_ID.split(',') }) const req: any = { SearchParameter: { USER_IDS: currentRow?.APPROVALSTAFF_ID }, PageIndex: 1, PageSize: 999999 } const data = await handleGetUSERList(req) if (data && data.length > 0) { const list: any = [] data.forEach((item: any) => { list.push({ label: item.USER_NAME, value: item.USER_ID.toString() }) }) setPlayerList(list) setPlayDefaulterList(list) } } } }} onFinish={() => { addFormRef.current.validateFields().then(async (res: any) => { if (res) { let req: any = {} if (currentRow) { req = { APPROVALROUTE_ID: currentRow?.APPROVALROUTE_ID, APPROVALROUTE_NAME: res?.APPROVALROUTE_NAME || '', APPROVALROUTE_STATE: res?.APPROVALROUTE_STATE || '', OPERATION_TYPE: res?.OPERATION_TYPE || '', USER_PATTERN: res?.USER_PATTERN, APPROVALSTAFF_ID: res?.APPROVALSTAFF_ID ? res?.APPROVALSTAFF_ID.toString() : null, APPROVALROUTE_VALID: 1, // RECORD_DATE:moment().format('YYYY-MM-DD'), NEXT_STATE: res?.NEXT_STATE } } else { req = { APPROVALROUTE_NAME: res?.APPROVALROUTE_NAME || '', APPROVALROUTE_STATE: res?.APPROVALROUTE_STATE || '', OPERATION_TYPE: res?.OPERATION_TYPE || '', USER_PATTERN: res?.USER_PATTERN, APPROVALSTAFF_ID: res?.APPROVALSTAFF_ID ? res?.APPROVALSTAFF_ID.toString() : null, APPROVALROUTE_VALID: 1, // RECORD_DATE:moment().format('YYYY-MM-DD'), NEXT_STATE: res?.NEXT_STATE } } const data = await handleSynchroAPPROVALROUTE(req) if (data.Result_Code === 100) { message.success('新增成功') addFormRef.current?.resetFields(); setCurrentRow(undefined) actionRef.current?.reload() setModalVisible(false) return true } message.error(data.Result_Desc) } }) }} modalProps={{ modalRender: (modal) => { return onDraggaleStart(event, uiData)} >
{modal}
}, onCancel: () => { setModalVisible(false) }, }} > { if (treeView && treeView.length > 0) { treeView.forEach((item: any) => { item.disabled = true }) } return treeView }} fieldProps={{ treeDefaultExpandAll: true // options: treeView || [] }} rules={[ { required: true, message: '请选择业务类型', }, ]} /> { if (e) { const list: any = [{ label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }] list.forEach((item: any) => { if (item.value <= e) { // if (item.value===e){ item.disabled = true } }) setNextBusinessTypeState(list) } else { const list: any = [{ label: '2000', value: 2000 }, { label: '2010', value: 2010 }, { label: '2020', value: 2020 }, { label: '2030', value: 2030 }, { label: '2040', value: 2040 }, { label: '2050', value: 2050 }, { label: '2060', value: 2060 }, { label: '2070', value: 2070 }, { label: '2080', value: 2080 }, { label: '2090', value: 2090 }, { label: '9000', value: 9000 }] list.forEach((item: any) => { item.disabled = false }) setNextBusinessTypeState(list) } } }} rules={[ { required: true, message: '请选择业务状态', }, ]} /> { setSelectRoleType(Number(e.target.value)) } }} rules={[ { required: true, message: '请选择业务状态', }, ]} > { selectRoleType === 2000 ? '' : } onClick={() => { const res = addFormRef.current?.getFieldValue('APPROVALSTAFF_ID') if (res && res.length > 0) { const list: any = [] res.forEach((item: any) => { list.push(Number(item)) }) setDefaultPerson(list) } else { setDefaultPerson([]) setPlayerList([]) } setShowChosePlayer(true) }}> 选择 } /> }
{ }} onCancel={() => { setShowChosePlayer(false) setDefaultPerson([]) }} onOk={async () => { const rowDetailList = choseDetail.current?.selectModalRowList const rowList = choseDetail.current?.selectedModalOrderRowKeys const chosePlaySelectId = choseDetail.current?.selectedId setSelectRoleTypeId(chosePlaySelectId) addFormRef.current?.setFieldsValue({ APPROVALSTAFF_ID: rowList }) setDefaultPerson([]) if (rowDetailList && rowDetailList.length > 0) { console.log('rowDetailList', rowDetailList) // 去重 const indexList: any = [] // 去重后的list const deduplicationList: any = [] rowDetailList.forEach((item: any) => { if (indexList && indexList.length > 0) { if (indexList.indexOf(item.value) === -1) { indexList.push(item.value) deduplicationList.push(item) } } else { indexList.push(item.value) deduplicationList.push(item) } }) console.log('deduplicationList', deduplicationList) setPlayerList(deduplicationList) } else { const req: any = { SearchParameter: { USER_IDS: rowList && rowList.length > 0 ? rowList.toString() : '' }, PageIndex: 1, PageSize: 999999 } const data = await handleGetUSERList(req) if (data && data.length > 0) { const list: any = [] data.forEach((item: any) => { list.push({ label: item.USER_NAME, value: Number(item.USER_ID) }) }) setPlayerList(list) setPlayDefaulterList(list) } } setShowChosePlayer(false) setDefaultPerson([]) // // 去重 // const newList: any = [] // if (rowDetailList && rowDetailList.length>0){ // const indexList: any = [] // rowDetailList.forEach((item: any)=>{ // if (indexList.indexOf(Number(item.value))===-1){ // newList.push(item) // indexList.push(Number(item.value)) // } // }) // } // setPlayerList(newList) // addFormRef.current?.setFieldsValue({ // APPROVALSTAFF_ID: rowList // }) // setShowChosePlayer(false) // setDefaultPerson([]) }} >
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(ServiceConfig);