index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { forwardRef, useImperativeHandle, useState } from 'react';
  2. import { service } from '../../index';
  3. import Save from './save';
  4. const Data = forwardRef((_, ref) => {
  5. const [flag, setFlag] = useState<boolean>(false);
  6. const [visible, setVisible] = useState<boolean>(false);
  7. const [values, setValues] = useState<any>({});
  8. const handleChange = () => {
  9. return new Promise(async (resolve) => {
  10. if (!Object.keys(values).length) {
  11. return resolve(true);
  12. }
  13. try {
  14. // 新增网络组件
  15. const network = await service.saveNetwork({
  16. type: 'MQTT_SERVER',
  17. shareCluster: true,
  18. name: 'MQTT网络组件',
  19. configuration: {
  20. host: '0.0.0.0',
  21. secure: false,
  22. port: values.port,
  23. publicHost: values.publicHost,
  24. publicPort: values.publicPort,
  25. },
  26. });
  27. // 保存协议
  28. const protocol = await service.saveProtocol();
  29. let protocolItem: any = undefined;
  30. if (protocol.status === 200) {
  31. const proid = await service.getProtocol();
  32. if (proid.status === 200) {
  33. protocolItem = (proid?.result || []).find((it: any) => it.name === 'JetLinks官方协议');
  34. }
  35. }
  36. // 新增设备接入网关
  37. const accessConfig = await service.saveAccessConfig({
  38. name: 'MQTT类型设备接入网关',
  39. provider: 'mqtt-server-gateway',
  40. protocol: protocolItem?.id,
  41. transport: 'MQTT',
  42. channel: 'network',
  43. channelId: network?.result?.id,
  44. });
  45. // 新增产品
  46. const product = await service.saveProduct({
  47. name: 'MQTT产品',
  48. messageProtocol: protocolItem?.id,
  49. protocolName: protocolItem?.name,
  50. transportProtocol: 'MQTT',
  51. deviceType: 'device',
  52. accessId: accessConfig.result?.id,
  53. accessName: accessConfig.result?.name,
  54. accessProvider: 'mqtt-server-gateway',
  55. });
  56. // 新增设备
  57. const device = await service.saveDevice({
  58. name: 'MQTT设备',
  59. productId: product?.result?.id,
  60. productName: product?.result?.name,
  61. });
  62. resolve(device.status === 200);
  63. } catch (e) {
  64. console.log(e);
  65. resolve(false);
  66. }
  67. });
  68. };
  69. useImperativeHandle(ref, () => ({
  70. save: handleChange,
  71. }));
  72. return (
  73. <div>
  74. <img
  75. style={{ width: 300 }}
  76. onClick={() => {
  77. setVisible(true);
  78. }}
  79. src={
  80. flag
  81. ? require('/public/images/init-home/data-enabled.png')
  82. : require('/public/images/init-home/data-disabled.png')
  83. }
  84. />
  85. {visible && (
  86. <Save
  87. close={() => {
  88. setVisible(false);
  89. }}
  90. data={values}
  91. save={(data: any) => {
  92. setVisible(false);
  93. setFlag(true);
  94. setValues(data);
  95. }}
  96. />
  97. )}
  98. </div>
  99. );
  100. });
  101. export default Data;