index.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { observer } from '@formily/react';
  2. import { Space, Tabs } from 'antd';
  3. import BaseMetadata from './Base';
  4. import { useIntl } from '@@/plugin-locale/localeExports';
  5. import Import from './Import';
  6. import type { ReactNode } from 'react';
  7. import { useState } from 'react';
  8. import Cat from './Cat';
  9. import Service from '@/pages/device/components/Metadata/service';
  10. import { InfoCircleOutlined } from '@ant-design/icons';
  11. import styles from './index.less';
  12. import { InstanceModel } from '@/pages/device/Instance';
  13. import { PermissionButton } from '@/components';
  14. interface Props {
  15. tabAction?: ReactNode;
  16. type: 'product' | 'device';
  17. independentMetadata?: boolean;
  18. }
  19. export const service = new Service();
  20. const Metadata = observer((props: Props) => {
  21. const intl = useIntl();
  22. const [visible, setVisible] = useState<boolean>(false);
  23. const [cat, setCat] = useState<boolean>(false);
  24. const { permission } = PermissionButton.usePermission(
  25. props.type === 'device' ? 'device/Instance' : 'device/Product',
  26. );
  27. return (
  28. <div style={{ position: 'relative' }}>
  29. <div className={styles.tips}>
  30. <InfoCircleOutlined style={{ marginRight: '3px' }} />
  31. {InstanceModel.detail?.independentMetadata
  32. ? '该设备已脱离产品物模型,修改产品物模型对该设备无影响'
  33. : '设备会默认继承产品的物模型,修改设备物模型后将脱离产品物模型'}
  34. </div>
  35. <Tabs
  36. className={styles.metadataNav}
  37. tabBarExtraContent={
  38. <Space>
  39. {props?.tabAction}
  40. <PermissionButton isPermission={permission.update} onClick={() => setVisible(true)}>
  41. {intl.formatMessage({
  42. id: 'pages.device.productDetail.metadata.quickImport',
  43. defaultMessage: '快速导入',
  44. })}
  45. </PermissionButton>
  46. <PermissionButton isPermission={permission.update} onClick={() => setCat(true)}>
  47. {intl.formatMessage({
  48. id: 'pages.device.productDetail.metadata',
  49. defaultMessage: '物模型',
  50. })}
  51. TSL
  52. </PermissionButton>
  53. </Space>
  54. }
  55. destroyInactiveTabPane
  56. >
  57. <Tabs.TabPane
  58. tab={intl.formatMessage({
  59. id: 'pages.device.productDetail.metadata.propertyDefinition',
  60. defaultMessage: '属性定义',
  61. })}
  62. key="properties"
  63. >
  64. <BaseMetadata target={props.type} type={'properties'} permission={permission} />
  65. </Tabs.TabPane>
  66. <Tabs.TabPane
  67. tab={intl.formatMessage({
  68. id: 'pages.device.productDetail.metadata.functionDefinition',
  69. defaultMessage: '功能定义',
  70. })}
  71. key="functions"
  72. >
  73. <BaseMetadata target={props.type} type={'functions'} permission={permission} />
  74. </Tabs.TabPane>
  75. <Tabs.TabPane
  76. tab={intl.formatMessage({
  77. id: 'pages.device.productDetail.metadata.eventDefinition',
  78. defaultMessage: '事件定义',
  79. })}
  80. key="events"
  81. >
  82. <BaseMetadata target={props.type} type={'events'} permission={permission} />
  83. </Tabs.TabPane>
  84. <Tabs.TabPane
  85. tab={intl.formatMessage({
  86. id: 'pages.device.productDetail.metadata.tagDefinition',
  87. defaultMessage: '标签定义',
  88. })}
  89. key="tags"
  90. >
  91. <BaseMetadata target={props.type} type={'tags'} permission={permission} />
  92. </Tabs.TabPane>
  93. </Tabs>
  94. <Import visible={visible} close={() => setVisible(false)} />
  95. <Cat visible={cat} close={() => setCat(false)} type={props.type} />
  96. </div>
  97. );
  98. });
  99. export default Metadata;