张延森 3 年之前
父節點
當前提交
4ee1ebc665
共有 2 個檔案被更改,包括 58 行新增0 行删除
  1. 58
    0
      src/components/Picker/index.jsx
  2. 0
    0
      src/components/Picker/style.less

+ 58
- 0
src/components/Picker/index.jsx 查看文件

@@ -0,0 +1,58 @@
1
+import { useEffect, useState } from 'react'
2
+import { Picker, View } from '@tarojs/components'
3
+import './style.less'
4
+
5
+export default (props) => {
6
+  const { kv, value, onChange, dicts, placeholder, mode, ...leftProps } = props
7
+  const [rangeKey, rangeVal] = kv || ['label', 'value']
8
+
9
+  const [inx, setInx] = useState()
10
+  const [text, setText] = useState()
11
+
12
+  const handleChange = (e) => {
13
+    if (mode && mode !== 'selector') {
14
+      onChange(e.detail.value)
15
+      return
16
+    }
17
+
18
+    const index = e.detail.value - 0
19
+    const item = dicts[index]
20
+    if (onChange) {
21
+      onChange(item[rangeVal], item)
22
+    }
23
+  }
24
+
25
+  useEffect(() => {
26
+    if (dicts && dicts.length > 0) {
27
+      if (value !== undefined && value !== null) {
28
+        for(let i = 0; i < dicts.length; i += 1) {
29
+          if (dicts[i][rangeVal] === value) {
30
+            setInx(i)
31
+            setText(dicts[i][rangeKey])
32
+            break;
33
+          }
34
+        }
35
+      }
36
+    }
37
+  }, [dicts, rangeKey, rangeVal, value])
38
+
39
+  useEffect(() => {
40
+    if (mode && mode !== 'selector') {
41
+      setText(value)
42
+    }
43
+  }, [mode, value])
44
+
45
+  return (
46
+    <Picker
47
+      className='g-picker'
48
+      rangeKey={rangeKey}
49
+      onChange={handleChange}
50
+      value={inx}
51
+      range={dicts}
52
+      mode={mode||'selector'}
53
+      {...leftProps}
54
+    >
55
+      <View>{text || placeholder || '请选择'}</View>
56
+    </Picker>
57
+  )
58
+}

+ 0
- 0
src/components/Picker/style.less 查看文件