import React, { useRef, useState } from 'react'; import { connect } from 'umi'; import type { ConnectState } from "@/models/connect"; import type { CurrentUser } from "umi"; import ProTable, { ActionType, ProColumns } from "@ant-design/pro-table"; import { Tag, message, Modal, Space } from "antd"; import { handleGetMEMBERSHIPList, handeGetSynchroMEMBERSHIP, handleGetServerpartTree } from "../service"; import session from "@/utils/session"; import PageTitleBox from "@/components/PageTitleBox"; import type { FormInstance } from "antd"; import ProForm, { ProFormSelect, ProFormTreeSelect } from '@ant-design/pro-form'; const OwnWaterManager: React.FC<{ currentUser: CurrentUser, isComponent?: boolean, searchReq?: any }> = (props) => { const { currentUser } = props; const actionRef = useRef(); const formRef = useRef(); const modalFormRef = useRef(); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [selectedRows, setSelectedRows] = useState([]); const [stationModalVisible, setStationModalVisible] = useState(false); const [currentRow, setCurrentRow] = useState(null); const MEMBERSHIPLEVELYNObj = session.get('MEMBERSHIPLEVELYNObj') || {}; const [treeData, setTreeData] = useState([]); // 表单加载效果 const [confirmLoading, setConfirmLoading] = useState(false); // 辅助函数:处理标签字符串 (Logic B) const updateTargetTags = (currentTags: string | undefined, targetTag: string, action: 'add' | 'remove') => { let tagList = (currentTags || '').split(',').filter(Boolean); if (action === 'add') { if (!tagList.includes(targetTag)) { tagList.push(targetTag); } } else { tagList = tagList.filter(t => t !== targetTag); } return tagList.join(','); }; // 批量操作通用逻辑 (Logic B) const handleBatchAction = (action: 'add' | 'remove') => { if (selectedRowKeys.length === 0) { message.warning('请先选择会员'); return; } const title = action === 'add' ? '确认批量开通权限' : '确认批量取消权限'; const content = action === 'add' ? `确定为选中的 ${selectedRowKeys.length} 名会员开通自有水权限吗?` : `确定为选中的 ${selectedRowKeys.length} 名会员取消自有水权限吗?`; Modal.confirm({ title, content, onOk: async () => { const hide = message.loading('正在处理中...'); try { const promises = selectedRows.map((row) => { const newTags = updateTargetTags(row.MEMBERSHIP_TARGET, '2803', action); return handeGetSynchroMEMBERSHIP({ ...row, MEMBERSHIP_TARGET: newTags || "#", // 若标签为空,传 # 占位 }); }); const results = await Promise.all(promises); const allSuccess = results.every((res: any) => res.Result_Code === 100); if (allSuccess) { message.success('操作成功!'); setSelectedRowKeys([]); setSelectedRows([]); actionRef.current?.reload(); } else { const failedCount = results.filter((res: any) => res.Result_Code !== 100).length; message.error(`部分操作失败,失败条目数:${failedCount}`); actionRef.current?.reload(); } } catch (error) { console.error('Batch action error:', error); message.error('操作异常'); } finally { hide(); } }, }); }; const handleBatchOpen = () => handleBatchAction('add'); const handleBatchCancel = () => handleBatchAction('remove'); const columns: ProColumns[] = [ { title: '用户昵称', dataIndex: 'MEMBERSHIP_NAME', width: 150, ellipsis: true, align: 'center', fieldProps: { placeholder: '搜索用户昵称/电话', }, }, { title: '联系电话', dataIndex: 'MEMBERSHIP_MOBILEPHONE', width: 150, align: 'center', hideInSearch: true, }, { title: '会员等级', dataIndex: 'MEMBERSHIP_LEVEL', width: 120, align: 'center', valueType: 'select', valueEnum: MEMBERSHIPLEVELYNObj, hideInSearch: true, }, { title: '自有水权限', dataIndex: 'MEMBERSHIP_TARGET', width: 120, align: 'center', valueType: 'select', valueEnum: { '': { text: '全部' }, '2803': { text: '已开通' }, '-2803': { text: '未开通' }, }, hideInTable: true, initialValue: '', }, { title: '权限状态', dataIndex: 'MEMBERSHIP_TARGET_STATUS', width: 120, align: 'center', hideInSearch: true, render: (_, record) => { const isAuth = record.MEMBERSHIP_TARGET === '2803' || record.MEMBERSHIP_TARGET?.toString().includes('2803'); return ( {isAuth ? '已开通' : '未开通'} ); }, }, { title: '操作', dataIndex: 'option', valueType: 'option', width: 120, align: 'center', render: (_, record) => { const isAuth = record.MEMBERSHIP_TARGET === '2803' || record.MEMBERSHIP_TARGET?.toString().includes('2803'); if (!isAuth) return null; return ( { console.log('recordrecord', record); setCurrentRow(record); setStationModalVisible(true); }} > 站点权限 ); }, }, ]; // 拿到站点信息 const handleGetStationList = async (stationType: any) => { const params = { ProvinceCode: '530000', ShowWholePower: true, ShowRoyalty: false, ShowCompactCount: false, StatisticsType: '1000', ServerpartType: stationType || '1010', }; const res = await handleGetServerpartTree(params); console.log('dasdasdas', res); setTreeData(res); return res; } // 更新用户权限 const handleUpdateStationList = async (res: any) => { let req: any = { ...currentRow, SERVERPART_AUTHORITY: res.stationIds && res.stationIds.length > 0 ? res.stationIds.toString() : "#" } setConfirmLoading(true); const data = await handeGetSynchroMEMBERSHIP(req); console.log('dashdlasjdaslk', data); setConfirmLoading(false); if (data.Result_Code = 100) { message.success(data.Result_Desc) setStationModalVisible(false); actionRef.current?.reload(); } else { message.error(data.Result_Desc) } } return (
} bordered scroll={{ y: 'calc(100vh - 500px)' }} search={{ labelWidth: 'auto', defaultCollapsed: false, span: 6, }} request={async (params, sorter) => { const sortstr = Object.keys(sorter).map(n => { const value = sorter[n] return value ? `${n} ${value.replace('end', '')}` : '' }).filter(Boolean).toString(); const req = { SearchParameter: { OWNERUNIT_ID: currentUser?.OwnerUnitId || 911, MEMBERSHIP_TARGET: params?.MEMBERSHIP_TARGET || "", MEMBERSHIP_STATES: 1000, }, keyWord: { Key: "MEMBERSHIP_NAME,MEMBERSHIP_MOBILEPHONE", value: params?.MEMBERSHIP_NAME || "" }, PageIndex: params.current || 1, PageSize: params?.pageSize || 20, sortstr: sortstr, }; const data = await handleGetMEMBERSHIPList(req); return { data: data?.List || [], success: true, total: data?.TotalCount || 0, }; }} rowSelection={{ selectedRowKeys, onChange: (keys, rows) => { setSelectedRowKeys(keys); setSelectedRows(rows); }, }} tableAlertOptionRender={() => ( 批量开通权限 批量取消权限 )} /> { modalFormRef.current?.validateFields().then((res) => { console.log('dsakdasldjaslkdjaslkdj', res); modalFormRef.current?.submit() }) }} onCancel={() => { setCurrentRow(undefined); setStationModalVisible(false); }} > { await handleGetStationList(1010) if (currentRow) { let res: any = {} if (currentRow?.SERVERPART_AUTHORITY) { res = { ...res, stationIds: currentRow?.SERVERPART_AUTHORITY.split(',').map((item: any) => Number(item)) } } return res; } return {}; }} onFinish={async (value) => { await handleUpdateStationList(value) }} > { setTreeData([]); await handleGetStationList(e) modalFormRef.current?.setFieldsValue({ stationIds: [] }) } }} initialValue={'1010'} /> { treeData && treeData.length > 0 ? : "" }
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.currentUser }))(OwnWaterManager);