index.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { observer } from '@formily/react';
  2. import { message, 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, service as instanceService } from '@/pages/device/Instance';
  13. import { PermissionButton } from '@/components';
  14. import { Store } from 'jetlinks-store';
  15. import SystemConst from '@/utils/const';
  16. import { useParams } from 'umi';
  17. interface Props {
  18. tabAction?: ReactNode;
  19. type: 'product' | 'device';
  20. independentMetadata?: boolean;
  21. }
  22. export const service = new Service();
  23. const Metadata = observer((props: Props) => {
  24. const intl = useIntl();
  25. const [visible, setVisible] = useState<boolean>(false);
  26. const [cat, setCat] = useState<boolean>(false);
  27. const { permission } = PermissionButton.usePermission(
  28. props.type === 'device' ? 'device/Instance' : 'device/Product',
  29. );
  30. const params = useParams<{ id: string }>();
  31. const resetMetadata = async () => {
  32. const resp = await instanceService.deleteMetadata(params.id);
  33. if (resp.status === 200) {
  34. message.success('操作成功');
  35. Store.set(SystemConst.REFRESH_DEVICE, true);
  36. setTimeout(() => {
  37. Store.set(SystemConst.REFRESH_METADATA_TABLE, true);
  38. }, 400);
  39. }
  40. };
  41. return (
  42. <div style={{ position: 'relative' }}>
  43. <div className={styles.tips}>
  44. <InfoCircleOutlined style={{ marginRight: '3px' }} />
  45. {InstanceModel.detail?.independentMetadata
  46. ? '该设备已脱离产品物模型,修改产品物模型对该设备无影响'
  47. : '设备会默认继承产品的物模型,修改设备物模型后将脱离产品物模型'}
  48. </div>
  49. <Tabs
  50. className={styles.metadataNav}
  51. tabBarExtraContent={
  52. <Space>
  53. {props.type === 'device' && (
  54. <PermissionButton
  55. isPermission={permission.update}
  56. popConfirm={{
  57. title: '确认重置?',
  58. onConfirm: resetMetadata,
  59. }}
  60. tooltip={{
  61. title: '重置后将使用产品的物模型配置',
  62. }}
  63. key={'reload'}
  64. >
  65. 重置操作
  66. </PermissionButton>
  67. )}
  68. <PermissionButton isPermission={permission.update} onClick={() => setVisible(true)}>
  69. {intl.formatMessage({
  70. id: 'pages.device.productDetail.metadata.quickImport',
  71. defaultMessage: '快速导入',
  72. })}
  73. </PermissionButton>
  74. <PermissionButton isPermission={permission.update} onClick={() => setCat(true)}>
  75. {intl.formatMessage({
  76. id: 'pages.device.productDetail.metadata',
  77. defaultMessage: '物模型',
  78. })}
  79. TSL
  80. </PermissionButton>
  81. </Space>
  82. }
  83. destroyInactiveTabPane
  84. >
  85. <Tabs.TabPane
  86. tab={intl.formatMessage({
  87. id: 'pages.device.productDetail.metadata.propertyDefinition',
  88. defaultMessage: '属性定义',
  89. })}
  90. key="properties"
  91. >
  92. <BaseMetadata target={props.type} type={'properties'} permission={permission} />
  93. </Tabs.TabPane>
  94. <Tabs.TabPane
  95. tab={intl.formatMessage({
  96. id: 'pages.device.productDetail.metadata.functionDefinition',
  97. defaultMessage: '功能定义',
  98. })}
  99. key="functions"
  100. >
  101. <BaseMetadata target={props.type} type={'functions'} permission={permission} />
  102. </Tabs.TabPane>
  103. <Tabs.TabPane
  104. tab={intl.formatMessage({
  105. id: 'pages.device.productDetail.metadata.eventDefinition',
  106. defaultMessage: '事件定义',
  107. })}
  108. key="events"
  109. >
  110. <BaseMetadata target={props.type} type={'events'} permission={permission} />
  111. </Tabs.TabPane>
  112. <Tabs.TabPane
  113. tab={intl.formatMessage({
  114. id: 'pages.device.productDetail.metadata.tagDefinition',
  115. defaultMessage: '标签定义',
  116. })}
  117. key="tags"
  118. >
  119. <BaseMetadata target={props.type} type={'tags'} permission={permission} />
  120. </Tabs.TabPane>
  121. </Tabs>
  122. <Import visible={visible} close={() => setVisible(false)} />
  123. <Cat visible={cat} close={() => setCat(false)} type={props.type} />
  124. </div>
  125. );
  126. });
  127. export default Metadata;