imgSelect.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React, { useState } from 'react';
  2. import { Button, Modal, List, Image, Card, Tabs } from 'antd';
  3. const { TabPane } = Tabs;
  4. interface IImg {
  5. type: string;
  6. list?: Array<any>;
  7. }
  8. interface IProps {
  9. value?: string;
  10. imgList?: Array<IImg>;
  11. onChange?: (value: any) => void;
  12. }
  13. const imgSelect: React.FC<IProps> = (props) => {
  14. const { value, imgList, onChange } = props;
  15. const [isModalVisible, setIsModalVisible] = useState(false);
  16. const showModal = () => {
  17. setIsModalVisible(true);
  18. };
  19. const handleOk = () => {
  20. setIsModalVisible(false);
  21. };
  22. const handleCancel = () => {
  23. setIsModalVisible(false);
  24. };
  25. return (
  26. <div className="group">
  27. <Image src={value} />
  28. <br />
  29. <Button type="primary" onClick={showModal}>
  30. 替换
  31. </Button>
  32. <Modal
  33. title="设备列表"
  34. visible={isModalVisible}
  35. footer={false}
  36. onOk={handleOk}
  37. onCancel={handleCancel}
  38. >
  39. <Tabs defaultActiveKey={imgList?.[0].type}>
  40. {imgList?.map((img) => (
  41. <TabPane tab={img.type} key={img.type}>
  42. <List
  43. dataSource={img.list}
  44. grid={{
  45. gutter: 16,
  46. md: 4,
  47. }}
  48. renderItem={(item: any) => {
  49. let data: any;
  50. if (typeof item == 'object') {
  51. data = item;
  52. } else {
  53. data = {
  54. src: item,
  55. };
  56. }
  57. return (
  58. <List.Item>
  59. <Card>
  60. <div
  61. style={{
  62. width: 80,
  63. height: 80,
  64. background: `url(${data.src}) no-repeat center`,
  65. backgroundSize: 'contain',
  66. cursor: 'pointer',
  67. }}
  68. onClick={() => {
  69. onChange?.(data);
  70. handleCancel();
  71. }}
  72. ></div>
  73. </Card>
  74. </List.Item>
  75. );
  76. }}
  77. />
  78. </TabPane>
  79. ))}
  80. </Tabs>
  81. </Modal>
  82. </div>
  83. );
  84. };
  85. export default imgSelect;