import React, { Fragment, useEffect, useRef, useState } from 'react'; import { FormattedMessage, useAccess } from '@umijs/max'; import { Button, FormInstance, message, Modal, Tag } from 'antd'; import { ActionType, ProColumns, ProTable } from '@ant-design/pro-components'; import { DeleteOutlined, FormOutlined, PlusOutlined, AlignLeftOutlined, AuditOutlined } from '@ant-design/icons'; import EditCompanyListRow, { CompanyDetailView } from './edit'; import { addCmsCompanyList, delCmsCompanyList, exportCmsCompanyList, getCmsCompanyList, getCmsCompanyDetail, parseCmsCompanyDetailResponse, putCmsCompanyList, } from '@/services/company/list'; import { getDictValueEnum } from '@/services/system/dict'; import { getCmsIndustryTreeList } from '@/services/classify/industry'; import DictTag, { DictValueEnumObj } from '@/components/DictTag'; import { postCompanyApproval } from '@/services/company/review'; const buildListSearchParams = (values: Record): API.CompanyList.Params => { const { dateRange, ...rest } = values || {}; const params = { ...rest } as API.CompanyList.Params; if (dateRange?.[0] && dateRange?.[1]) { params.startDate = dateRange[0]; params.endDate = dateRange[1]; } return params; }; const loadCompanyDetail = async (record: API.CompanyList.Company) => { const resp = await getCmsCompanyDetail(record.companyId); const detail = parseCmsCompanyDetailResponse(resp); if (!detail) { return { ...record }; } return { ...record, ...detail }; }; /** 将行业树数据展平为 DictValueEnumObj */ const flattenIndustryTree = (tree: { id: number; label: string; children?: any[] }[]): DictValueEnumObj => { const map: DictValueEnumObj = {}; const walk = (nodes: { id: number; label: string; children?: any[] }[]) => { nodes?.forEach((node) => { map[node.id] = { text: node.label, label: node.label, value: node.id, }; if (node.children?.length) { walk(node.children); } }); }; walk(tree); return map; }; function ManagementList() { const access = useAccess(); const formTableRef = useRef(); const actionRef = useRef(); const [currentRow, setCurrentRow] = useState(); const [modalVisible, setModalVisible] = useState(false); const [detailVisible, setDetailVisible] = useState(false); const [detailLoading, setDetailLoading] = useState(false); const [detailData, setDetailData] = useState(); const [scaleEnum, setScaleEnum] = useState>({}); const [companyNatureEnum, setCompanyNatureEnum] = useState({}); const [industryEnum, setIndustryEnum] = useState({}); const [approvalVisible, setApprovalVisible] = useState(false); const [approvalStatus, setApprovalStatus] = useState<1 | 2>(1); const [approvalReason, setApprovalReason] = useState(''); const handleRemoveOne = async (jobId: string) => { const hide = message.loading('正在删除'); if (!jobId) return true; try { const resp = await delCmsCompanyList(jobId); hide(); if (resp.code === 200) { message.success('删除成功,即将刷新'); } else { message.error(resp.msg); } return true; } catch (error) { hide(); message.error('删除失败,请重试'); return false; } }; const handleExport = async (values: API.CompanyList.Params) => { const hide = message.loading('正在导出'); try { await exportCmsCompanyList(values); hide(); message.success('导出成功'); return true; } catch (error) { hide(); message.error('导出失败,请重试'); return false; } }; useEffect(() => { getDictValueEnum('scale', true, true).then((data) => { setScaleEnum(data); }); getDictValueEnum('company_nature', false, true).then((data) => { setCompanyNatureEnum(data); }); getCmsIndustryTreeList().then((res) => { if (res?.data) { setIndustryEnum(flattenIndustryTree(res.data)); } }); }, []); const columns: ProColumns[] = [ { title: '时间范围', dataIndex: 'dateRange', hideInTable: true, valueType: 'dateRange', fieldProps: { format: 'YYYY-MM-DD', }, search: { transform: (value) => ({ startDate: value[0], endDate: value[1], }), }, }, { title: '公司名称', dataIndex: 'name', valueType: 'text', align: 'center', }, { title: '公司行业', dataIndex: 'industry', valueType: 'text', align: 'center', render: (_, record) => { return ; }, }, { title: '公司规模', dataIndex: 'scale', valueType: 'select', align: 'center', valueEnum: scaleEnum, render: (_, record) => { return ; }, }, { title: '企业性质', dataIndex: 'companyNature', valueType: 'select', align: 'center', valueEnum: companyNatureEnum, render: (_, record) => , }, { title: '公司位置', dataIndex: 'location', valueType: 'text', hideInSearch: true, align: 'center', }, { title: '状态', dataIndex: 'status', valueType: 'select', align: 'center', valueEnum: { 0: { text: '待审核', status: 'Processing' }, 1: { text: '通过', status: 'Success' }, 2: { text: '驳回', status: 'Error' }, }, render: (_, record) => { if (record.status === 1) { return 通过; } else if (record.status === 2) { return 驳回; } return 待审核; }, }, { title: '驳回原因', dataIndex: 'notPassReason', valueType: 'text', hideInSearch: true, align: 'center', render: (_, record) => { return record.notPassReason || '-'; }, }, { title: '驳回时间', dataIndex: 'rejectTime', valueType: 'dateTime', hideInSearch: true, align: 'center', render: (_, record) => { return record.updateTime || '-'; }, }, { title: '操作', hideInSearch: true, align: 'center', dataIndex: 'companyId', width: 300, render: (companyId, record) => [ , , , , ], }, ]; return (
actionRef={actionRef} formRef={formTableRef} rowKey="companyId" key="index" columns={columns} request={(params) => getCmsCompanyList({ ...params } as API.CompanyList.Params).then((res) => { return { data: res.rows, total: res.total, success: true, }; }) } toolBarRender={() => [ , , ]} />
{ let resData; if (values.companyId) { resData = await putCmsCompanyList({ ...values, companyNature: values.companyNature || '', }); } else { resData = await addCmsCompanyList({ ...values, companyNature: values.companyNature || '', }); } if (resData.code === 200) { setModalVisible(false); setCurrentRow(undefined); message.success(values.companyId ? '修改成功' : '新增成功'); actionRef.current?.reload(); } }} onCancel={() => { setModalVisible(false); setCurrentRow(undefined); }} values={currentRow} scaleEnum={scaleEnum} companyNatureEnum={companyNatureEnum} /> { setDetailVisible(false); setDetailData(undefined); }} record={detailData} scaleEnum={scaleEnum} companyNatureEnum={companyNatureEnum} industryEnum={industryEnum} /> { setApprovalVisible(false); setApprovalReason(''); }} footer={null} >
审核结果:
{approvalStatus === 2 && (
驳回原因(必填):