index.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 id = new URLSearchParams(location.search).get('id') || undefined;
  23. service.getProviders().then((resp) => {
  24. if (resp.status === 200) {
  25. setDataSource(resp.result);
  26. if (new URLSearchParams(location.search).get('id')) {
  27. setVisible(false);
  28. service.detail(id || '').then((response) => {
  29. setData(response.result);
  30. const dt = resp.result.find((item: any) => item?.id === response.result?.provider);
  31. setProvider(dt);
  32. if (
  33. response.result?.provider === 'fixed-media' ||
  34. response.result?.provider === 'gb28181-2016'
  35. ) {
  36. setType('media');
  37. } else {
  38. setType('network');
  39. }
  40. });
  41. } else {
  42. setVisible(true);
  43. }
  44. setLoading(false);
  45. }
  46. });
  47. }, []);
  48. const componentRender = () => {
  49. switch (type) {
  50. case 'network':
  51. return (
  52. <Access
  53. data={data}
  54. provider={provider}
  55. change={() => {
  56. setVisible(true);
  57. }}
  58. />
  59. );
  60. case 'media':
  61. return (
  62. <Media
  63. data={data}
  64. provider={provider}
  65. change={() => {
  66. setVisible(true);
  67. }}
  68. />
  69. );
  70. default:
  71. return null;
  72. }
  73. };
  74. return (
  75. <Spin spinning={loading}>
  76. <PageContainer>
  77. {visible ? (
  78. <Provider
  79. data={dataSource}
  80. change={(param: any, typings: 'media' | 'network') => {
  81. setType(typings);
  82. setProvider(param);
  83. setData({});
  84. setVisible(false);
  85. }}
  86. />
  87. ) : (
  88. componentRender()
  89. )}
  90. </PageContainer>
  91. </Spin>
  92. );
  93. };
  94. export default Detail;