index.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { PageContainer } from '@ant-design/pro-layout';
  2. import { useEffect, useState } from 'react';
  3. import { useLocation } from 'umi';
  4. import Access from './Access';
  5. import Provider from './Provider';
  6. import Media from './Media';
  7. import { service } from '@/pages/link/AccessConfig';
  8. import { Spin } from 'antd';
  9. type LocationType = {
  10. id?: string;
  11. };
  12. const Detail = () => {
  13. const location = useLocation<LocationType>();
  14. const [visible, setVisible] = useState<boolean>(false);
  15. const [loading, setLoading] = useState<boolean>(true);
  16. const [data, setData] = useState<any>({});
  17. const [provider, setProvider] = useState<any>({});
  18. const [type, setType] = useState<'media' | 'network' | undefined>(undefined);
  19. const [dataSource, setDataSource] = useState<any[]>([]);
  20. useEffect(() => {
  21. setLoading(true);
  22. const _params = new URLSearchParams(location.search);
  23. const id = _params.get('id') || undefined;
  24. const paramsType = _params.get('type');
  25. service.getProviders().then((resp) => {
  26. if (resp.status === 200) {
  27. setDataSource(resp.result);
  28. if (new URLSearchParams(location.search).get('id')) {
  29. setVisible(false);
  30. service.detail(id || '').then((response) => {
  31. setData(response.result);
  32. const dt = resp.result.find((item: any) => item?.id === response.result?.provider);
  33. setProvider(dt);
  34. if (
  35. response.result?.provider === 'fixed-media' ||
  36. response.result?.provider === 'gb28181-2016'
  37. ) {
  38. setType('media');
  39. } else {
  40. setType('network');
  41. }
  42. });
  43. } else if (paramsType) {
  44. setType('media');
  45. setProvider(resp.result.find((item: any) => item.id === paramsType));
  46. setData({});
  47. setVisible(false);
  48. } else {
  49. setVisible(true);
  50. }
  51. setLoading(false);
  52. }
  53. });
  54. }, []);
  55. const componentRender = () => {
  56. switch (type) {
  57. case 'network':
  58. return (
  59. <Access
  60. data={data}
  61. provider={provider}
  62. change={() => {
  63. setVisible(true);
  64. }}
  65. />
  66. );
  67. case 'media':
  68. return (
  69. <Media
  70. data={data}
  71. provider={provider}
  72. change={() => {
  73. setVisible(true);
  74. }}
  75. />
  76. );
  77. default:
  78. return null;
  79. }
  80. };
  81. return (
  82. <Spin spinning={loading}>
  83. <PageContainer>
  84. {visible ? (
  85. <Provider
  86. data={dataSource}
  87. change={(param: any, typings: 'media' | 'network') => {
  88. setType(typings);
  89. setProvider(param);
  90. setData({});
  91. setVisible(false);
  92. }}
  93. />
  94. ) : (
  95. componentRender()
  96. )}
  97. </PageContainer>
  98. </Spin>
  99. );
  100. };
  101. export default Detail;