|  |  | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const handleSave = async (val, intl) => { | 
 |  |  |     const hide = message.loading('正在添加'); | 
 |  |  |     const hide = message.loading(intl.formatMessage({ id: 'page.adding', defaultMessage: '正在添加' })); | 
 |  |  |     try { | 
 |  |  |         const resp = await Http.doPost('api/menu/save', val); | 
 |  |  |         if (resp.code === 200) { | 
 |  |  |             message.success('添加成功'); | 
 |  |  |             message.success(intl.formatMessage({ id: 'page.add.success', defaultMessage: '添加成功' })); | 
 |  |  |             return true; | 
 |  |  |         } else { | 
 |  |  |             message.error(resp.msg); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } catch (error) { | 
 |  |  |         message.error('添加失败请重试!'); | 
 |  |  |         message.error(intl.formatMessage({ id: 'page.add.fail', defaultMessage: '添加失败请重试!' })); | 
 |  |  |         return false; | 
 |  |  |     } finally { | 
 |  |  |         hide(); | 
 |  |  | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const handleUpdate = async (val, intl) => { | 
 |  |  |     const hide = message.loading('正在更新'); | 
 |  |  |     const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '正在更新' })); | 
 |  |  |     try { | 
 |  |  |         const resp = await Http.doPost('api/menu/update', val); | 
 |  |  |         if (resp.code === 200) { | 
 |  |  |             message.success('更新成功'); | 
 |  |  |             message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '更新成功' })); | 
 |  |  |             return true; | 
 |  |  |         } else { | 
 |  |  |             message.error(resp.msg); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } catch (error) { | 
 |  |  |         message.error('配置失败请重试!'); | 
 |  |  |         message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '更新失败请重试!' })); | 
 |  |  |         return false; | 
 |  |  |     } finally { | 
 |  |  |         hide(); | 
 |  |  | 
 |  |  |  | 
 |  |  | const handleRemove = async (rows, intl) => { | 
 |  |  |     if (!rows) return true; | 
 |  |  |     const hide = message.loading('正在删除'); | 
 |  |  |     const hide = message.loading(intl.formatMessage({ id: 'page.deleting', defaultMessage: '正在删除' })); | 
 |  |  |     try { | 
 |  |  |         const resp = await Http.doPost('api/menu/remove/' + rows.map((row) => row.id).join(',')); | 
 |  |  |         if (resp.code === 200) { | 
 |  |  |             message.success('删除成功'); | 
 |  |  |             message.success(intl.formatMessage({ id: 'page.delete.success', defaultMessage: '删除成功' })); | 
 |  |  |             return true; | 
 |  |  |         } else { | 
 |  |  |             message.error(resp.msg); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } catch (error) { | 
 |  |  |         message.error('删除失败,请重试'); | 
 |  |  |         message.error(intl.formatMessage({ id: 'page.delete.fail', defaultMessage: '删除失败,请重试!' })); | 
 |  |  |         return false; | 
 |  |  |     } finally { | 
 |  |  |         hide(); | 
 |  |  | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | const handleExport = async (intl) => { | 
 |  |  |     const hide = message.loading('正在导出'); | 
 |  |  |     const hide = message.loading(intl.formatMessage({ id: 'page.exporting', defaultMessage: '正在导出' })); | 
 |  |  |     try { | 
 |  |  |         const resp = await Http.doPostBlob('api/menu/export'); | 
 |  |  |         const blob = new Blob([resp], { type: 'application/vnd.ms-excel' }); | 
 |  |  |         window.location.href = window.URL.createObjectURL(blob); | 
 |  |  |         message.success('导出成功'); | 
 |  |  |         message.success(intl.formatMessage({ id: 'page.export.success', defaultMessage: '导出成功' })); | 
 |  |  |         return true; | 
 |  |  |     } catch (error) { | 
 |  |  |         message.error('导出失败,请重试'); | 
 |  |  |         message.error(intl.formatMessage({ id: 'page.export.fail', defaultMessage: '导出失败,请重试' })); | 
 |  |  |         return false; | 
 |  |  |     } finally { | 
 |  |  |         hide(); | 
 |  |  | 
 |  |  |                         setCurrentRow(record); | 
 |  |  |                     }} | 
 |  |  |                 > | 
 |  |  |                     编辑 | 
 |  |  |                     <FormattedMessage id='page.edit' defaultMessage='编辑' /> | 
 |  |  |                 </Button>, | 
 |  |  |                 <Button | 
 |  |  |                     type="link" | 
 |  |  | 
 |  |  |                     key="batchRemove" | 
 |  |  |                     onClick={async () => { | 
 |  |  |                         Modal.confirm({ | 
 |  |  |                             title: '删除', | 
 |  |  |                             content: '确定删除该项吗?', | 
 |  |  |                             title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), | 
 |  |  |                             content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), | 
 |  |  |                             onOk: async () => { | 
 |  |  |                                 const success = await handleRemove([record], intl); | 
 |  |  |                                 if (success) { | 
 |  |  | 
 |  |  |                         }); | 
 |  |  |                     }} | 
 |  |  |                 > | 
 |  |  |                     删除 | 
 |  |  |                     <FormattedMessage id='page.delete' defaultMessage='删除' /> | 
 |  |  |                 </Button>, | 
 |  |  |             ], | 
 |  |  |         }, | 
 |  |  | 
 |  |  |                                 }} | 
 |  |  |                             > | 
 |  |  |                                 <PlusOutlined /> | 
 |  |  |                                 添加 | 
 |  |  |                                 <FormattedMessage id='page.add' defaultMessage='添加' /> | 
 |  |  |                             </Button>, | 
 |  |  |                             <Button | 
 |  |  |                                 key="export" | 
 |  |  | 
 |  |  |                                 }} | 
 |  |  |                             > | 
 |  |  |                                 <ExportOutlined /> | 
 |  |  |                                 导出 | 
 |  |  |                                 <FormattedMessage id='page.export' defaultMessage='导出' /> | 
 |  |  |                             </Button>, | 
 |  |  |                         ], | 
 |  |  |                     }} | 
 |  |  | 
 |  |  |                 <FooterToolbar | 
 |  |  |                     extra={ | 
 |  |  |                         <div> | 
 |  |  |                             已选择 | 
 |  |  |                             <a style={{ fontWeight: 600 }}>{selectedRows.length}</a> | 
 |  |  |                             项 | 
 |  |  |                             <FormattedMessage id='page.selected' defaultMessage=' 项已选择' /> | 
 |  |  |                         </div> | 
 |  |  |                     } | 
 |  |  |                 > | 
 |  |  | 
 |  |  |                         danger | 
 |  |  |                         onClick={async () => { | 
 |  |  |                             Modal.confirm({ | 
 |  |  |                                 title: '删除', | 
 |  |  |                                 content: '确定删除该项吗?', | 
 |  |  |                                 title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), | 
 |  |  |                                 content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), | 
 |  |  |                                 onOk: async () => { | 
 |  |  |                                     const success = await handleRemove(selectedRows, intl); | 
 |  |  |                                     if (success) { | 
 |  |  | 
 |  |  |                             }); | 
 |  |  |                         }} | 
 |  |  |                     > | 
 |  |  |                         批量删除 | 
 |  |  |                         <FormattedMessage id='page.delete.batch' defaultMessage='批量删除' /> | 
 |  |  |                     </Button> | 
 |  |  |                 </FooterToolbar> | 
 |  |  |             )} |