import { Button, Form, Input, Modal, Tooltip } from 'antd'; import { useIntl } from '@@/plugin-locale/localeExports'; import { useCallback, useEffect, useState } from 'react'; import { service } from '@/pages/system/Menu'; import type { ProColumns } from '@jetlinks/pro-table'; import ProTable from '@jetlinks/pro-table'; import { DeleteOutlined, EditOutlined, PlusOutlined, SearchOutlined } from '@ant-design/icons'; import type { MenuButtonInfo, MenuItem } from '@/pages/system/Menu/typing'; import Permission from '@/pages/system/Menu/components/permission'; import { useRequest } from '@@/plugin-request/request'; import { PermissionButton } from '@/components'; import { onlyMessage } from '@/utils/util'; import { debounce } from 'lodash'; type ButtonsProps = { data: MenuItem; onLoad: () => void; }; export default (props: ButtonsProps) => { const intl = useIntl(); const [disabled, setDisabled] = useState(false); // 是否为查看 const [buttonItems, setButtonItems] = useState([]); // button Table数据源 const [visible, setVisible] = useState(false); // Modal显示影藏 const [id, setId] = useState(''); // 缓存ID const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const { permission } = PermissionButton.usePermission('system/Menu'); const { data: permissions, run: queryPermissions } = useRequest(service.queryPermission, { manual: true, formatResult: (response) => response.result, }); useEffect(() => { if (visible) { // 每次打开Modal获取最新权限 queryPermissions({ paging: false }); } /* eslint-disable */ }, [visible]); useEffect(() => { if (props.data) { setButtonItems(props.data.buttons || []); } }, [props.data]); const resetForm = () => { form.resetFields(); setId(''); setDisabled(false); }; const filterThree = (e: any) => { const _data: any = { paging: false, }; if (e.target.value) { _data.terms = [{ column: 'name$like', value: `%${e.target.value}%` }]; } queryPermissions(_data); }; /** * 更新菜单信息 * @param data */ const updateMenuInfo = useCallback( async (data: MenuButtonInfo[]) => { if (props.data.id) { setLoading(true); const response = await service.update({ ...props.data, buttons: data, }); setLoading(false); if (response.status === 200) { onlyMessage('操作成功!'); props.onLoad(); resetForm(); setVisible(false); } else { onlyMessage('操作失败!', 'error'); } } /* eslint-disable */ }, [props.data], ); /** * 删除单个按钮 */ const deleteItem = useCallback( (buttonId) => { const filterButtons = buttonItems.filter((item) => item.id !== buttonId); setButtonItems(filterButtons); updateMenuInfo(filterButtons); /* eslint-disable */ }, [buttonItems], ); /** * Model title处理,默认新增 * @default 'pages.data.option.add' */ const handleTitle = useCallback((): string => { let intlId = 'pages.data.option.add'; if (disabled && id) { // 查看 intlId = 'pages.data.option.view'; } else if (!disabled && id) { // 编辑 intlId = 'pages.data.option.edit'; } return intl.formatMessage({ id: intlId, }); /* eslint-disable */ }, [disabled, id]); /** * 获取表单数据 */ const saveData = useCallback(async () => { const formData = await form.validateFields(); if (formData) { if (buttonItems.some((item) => item.id === formData.id)) { // 编辑 updateMenuInfo(buttonItems.map((item) => (item.id === formData.id ? formData : item))); } else { updateMenuInfo([formData, ...buttonItems]); } } /* eslint-disable */ }, [buttonItems]); const columns: ProColumns[] = [ { title: intl.formatMessage({ id: 'page.system.menu.encoding', defaultMessage: '编码', }), width: 220, dataIndex: 'id', }, { title: intl.formatMessage({ id: 'page.system.menu.name', defaultMessage: '名称', }), width: 300, dataIndex: 'name', }, { title: intl.formatMessage({ id: 'page.system.menu.describe', defaultMessage: '说明', }), dataIndex: 'description', // render: (_, row) => () => { // console.log(row) // return (<> {row.describe || '-'}) // } }, { title: intl.formatMessage({ id: 'pages.data.option', defaultMessage: '操作', }), valueType: 'option', align: 'center', width: 240, render: (_, record) => [ { form.setFieldsValue(record); setId(record.id); setDisabled(false); setVisible(true); }} tooltip={{ title: intl.formatMessage({ id: 'pages.data.option.edit', defaultMessage: '编辑', }), }} isPermission={permission.update} > , , , ], }, ]; return ( <> columns={columns} dataSource={buttonItems} search={false} columnEmptyText={''} pagination={false} toolBarRender={() => [ { if (!props.data) { onlyMessage('请先新增菜单基本信息', 'warning'); return; } form.resetFields(); setVisible(true); }} key="button" icon={} type="primary" isPermission={permission.update} > {intl.formatMessage({ id: 'pages.data.option.add', defaultMessage: '新增', })} , ]} /> { if (!disabled) { saveData(); } else { resetForm(); setVisible(false); } }} onCancel={() => { resetForm(); setVisible(false); }} confirmLoading={loading} >
?]+$/, message: '请输入英文+数字+特殊字符(`!@#$%^&*()_+-={}|\\][;\':",./<>?)', }, { validator: (_, value, callback) => { if (!(!disabled && id) && buttonItems.some((item) => item.id === value)) { // 判断是否为新增 callback('重复编码'); } callback(); }, }, ]} >
); };