Pārlūkot izejas kodu

feat(Modal): 新增Modal组件,添加权限属性

xieyonghong 3 gadi atpakaļ
vecāks
revīzija
a8300ada47

+ 47 - 0
src/components/Modal/index.tsx

@@ -0,0 +1,47 @@
+import { Button, Modal } from 'antd';
+import type { ModalProps } from 'antd/lib/modal';
+import { getButtonPermission } from '@/utils/menu';
+import { BUTTON_PERMISSION, MENUS_CODE_TYPE } from '@/utils/menu/router';
+import * as React from 'react';
+
+export interface ModalPlusProps extends ModalProps {
+  permissionCode?: MENUS_CODE_TYPE;
+  permission?: BUTTON_PERMISSION | BUTTON_PERMISSION[];
+}
+
+const ModalPlus: React.FC<ModalPlusProps> = (props) => {
+  const {
+    confirmLoading,
+    onOk,
+    okText,
+    cancelText,
+    permissionCode,
+    permission,
+    children,
+    ...extraProps
+  } = props;
+
+  return (
+    <Modal
+      {...extraProps}
+      footer={[
+        <Button key={'cancel'} onClick={props.onCancel}>
+          {cancelText || '取消'}
+        </Button>,
+        <Button
+          key={'submit'}
+          type={'primary'}
+          loading={confirmLoading}
+          onClick={onOk}
+          disabled={permissionCode ? getButtonPermission(permissionCode, permission!) : false}
+        >
+          {okText || '确定'}
+        </Button>,
+      ]}
+    >
+      {children}
+    </Modal>
+  );
+};
+
+export default ModalPlus;

+ 1 - 0
src/components/index.ts

@@ -5,3 +5,4 @@ export { default as TableCard } from './ProTableCard/TableCard';
 export { default as BadgeStatus } from './BadgeStatus';
 export { default as Player } from './Player';
 export { default as ScreenPlayer } from './Player/ScreenPlayer';
+export { default as Modal } from './Modal';

+ 4 - 2
src/pages/device/Instance/Save/index.tsx

@@ -1,9 +1,9 @@
-import { Col, Form, Input, message, Modal, Row, Select } from 'antd';
+import { Col, Form, Input, message, Row, Select } from 'antd';
 import { service } from '@/pages/device/Instance';
 import type { DeviceInstance } from '../typings';
 import { useEffect, useState } from 'react';
 import { useIntl } from '@@/plugin-locale/localeExports';
-import { UploadImage } from '@/components';
+import { UploadImage, Modal } from '@/components';
 import { debounce } from 'lodash';
 
 interface Props {
@@ -119,6 +119,8 @@ const Save = (props: Props) => {
       })}
       confirmLoading={loading}
       onOk={handleSave}
+      permissionCode={'device/Instance'}
+      permission={'add'}
     >
       <Form
         form={form}

+ 8 - 1
src/utils/menu/index.ts

@@ -224,6 +224,10 @@ export const getButtonPermission = (
   code: MENUS_CODE_TYPE,
   permission: BUTTON_PERMISSION | BUTTON_PERMISSION[],
 ): boolean => {
+  if (!code) {
+    return false;
+  }
+
   let buttons = {};
   try {
     const buttonString = localStorage.getItem(MENUS_BUTTONS_CACHE);
@@ -232,8 +236,11 @@ export const getButtonPermission = (
     console.warn(e);
   }
 
-  if (!!Object.keys(buttons).length) {
+  if (!!Object.keys(buttons).length && permission) {
     const _buttonArray = buttons[code];
+    if (!_buttonArray) {
+      return true;
+    }
     return !_buttonArray.some((btnId: string) => {
       if (typeof permission === 'string') {
         return permission === btnId;