index.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import { Checkbox, InputNumber, DatePicker, Input, Select } from 'antd';
  2. import moment from 'moment';
  3. import { useEffect, useState } from 'react';
  4. interface Props {
  5. value: any;
  6. type: any;
  7. enum: any;
  8. onChange: (value: any) => void;
  9. }
  10. const FIndicators = (props: Props) => {
  11. const { value, onChange, type } = props;
  12. const DatePicker1: any = DatePicker;
  13. const [list, setList] = useState<any[]>([]);
  14. useEffect(() => {
  15. const arr = [];
  16. if (!!props.enum?.falseText && props.enum?.falseValue !== undefined) {
  17. arr.push({ text: props.enum?.falseText, value: props.enum?.falseValue });
  18. }
  19. if (!!props.enum?.trueText && props.enum?.trueValue !== undefined) {
  20. arr.push({ text: props.enum?.trueText, value: props.enum?.trueValue });
  21. }
  22. setList(arr);
  23. }, [props.enum]);
  24. const renderComponent = () => {
  25. if (['int', 'long', 'double', 'float'].includes(type)) {
  26. return (
  27. <>
  28. <InputNumber
  29. value={value?.value ? value?.value[0] : ''}
  30. onChange={(val) => {
  31. if (value?.range) {
  32. onChange({
  33. ...value,
  34. value: [val > value?.value[1] ? value?.value[0] : val, value?.value[1] || ''],
  35. });
  36. } else {
  37. onChange({
  38. ...value,
  39. value: [val],
  40. });
  41. }
  42. }}
  43. />
  44. {value.range && (
  45. <>
  46. ~
  47. <InputNumber
  48. value={value?.value ? value?.value[1] : ''}
  49. onChange={(val) => {
  50. onChange({
  51. ...value,
  52. value: [value?.value[0], val > value?.value[0] ? val : value?.value[1]],
  53. });
  54. }}
  55. />
  56. </>
  57. )}
  58. </>
  59. );
  60. } else if (type === 'date') {
  61. if (value.range) {
  62. return (
  63. <DatePicker1.RangePicker
  64. allowClear={false}
  65. showTime
  66. value={
  67. value?.value && [
  68. !!value?.value[0] && moment(value.value[0], 'YYYY-MM-DD HH:mm:ss'),
  69. !!value?.value[1] && moment(value.value[1], 'YYYY-MM-DD HH:mm:ss'),
  70. ]
  71. }
  72. onChange={(_: any, date: string[]) => {
  73. onChange({
  74. ...value,
  75. value: [...date],
  76. });
  77. }}
  78. />
  79. );
  80. } else {
  81. return (
  82. <DatePicker1
  83. showTime
  84. allowClear={false}
  85. value={
  86. value?.value && value.value?.[0]
  87. ? moment(value.value[0], 'YYYY-MM-DD HH:mm:ss')
  88. : undefined
  89. }
  90. onChange={(_: any, date: string) => {
  91. onChange({
  92. ...value,
  93. value: [date],
  94. });
  95. }}
  96. />
  97. );
  98. }
  99. } else if (type === 'boolean') {
  100. return (
  101. <Select
  102. style={{ width: '100%' }}
  103. placeholder={'请选择'}
  104. value={value?.value}
  105. onChange={(val) => {
  106. const obj = {
  107. ...value,
  108. value: [val],
  109. };
  110. onChange(obj);
  111. }}
  112. >
  113. {list.map((item) => (
  114. <Select.Option value={item.value}>{item.text}</Select.Option>
  115. ))}
  116. </Select>
  117. );
  118. } else {
  119. return (
  120. <>
  121. <Input
  122. value={value?.value ? value?.value[0] : ''}
  123. onChange={(e) => {
  124. onChange({
  125. ...value,
  126. value: [e.target.value, value?.value && value?.value[1]],
  127. });
  128. }}
  129. />
  130. {value.range && (
  131. <>
  132. ~
  133. <Input
  134. value={value?.value ? value?.value[1] : ''}
  135. onChange={(e) => {
  136. onChange({
  137. ...value,
  138. value: [value?.value && value?.value[0], e.target.value],
  139. });
  140. }}
  141. />
  142. </>
  143. )}
  144. </>
  145. );
  146. }
  147. };
  148. return (
  149. <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
  150. {renderComponent()}
  151. {type !== 'boolean' && (
  152. <Checkbox
  153. style={{ minWidth: 60, marginLeft: 5 }}
  154. checked={value?.range}
  155. onChange={(e) => {
  156. onChange({
  157. ...value,
  158. value: e.target.checked ? [undefined, undefined] : [undefined],
  159. range: e.target.checked,
  160. });
  161. }}
  162. >
  163. 范围
  164. </Checkbox>
  165. )}
  166. </div>
  167. );
  168. };
  169. export default FIndicators;