Browse Source

new picker

张延森 3 years ago
parent
commit
ed516a61bd

+ 1
- 1
project.config.json View File

4
     "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
4
     "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
5
     "appid": "wxe44244d1a5ea3364",
5
     "appid": "wxe44244d1a5ea3364",
6
     "setting": {
6
     "setting": {
7
-        "urlCheck": true,
7
+        "urlCheck": false,
8
         "es6": false,
8
         "es6": false,
9
         "postcss": false,
9
         "postcss": false,
10
         "minified": false,
10
         "minified": false,

+ 0
- 61
src/components/Picker/index.jsx View File

1
-import Taro from '@tarojs/taro';
2
-import { Picker, View } from '@tarojs/components';
3
-import { useMemo, useState } from 'react';
4
-import PropTypes from 'prop-types';
5
-
6
-// 暂时只支持单列普通选择器
7
-const XPicker = (props) => {
8
-  const { bindchange, onChange, range, value : propValue, rangeKey, rangeValue, placeholder = '请选择', ...leftProps } = props
9
-
10
-  const [innerValue, setInnerValue] = useState()
11
-
12
-  const handleChange = (e) => {
13
-    const data = range[e.detail.value]
14
-    const val = data[rangeValue]
15
-    e.detail.value = val
16
-    setInnerValue(data)
17
-
18
-    console.log('-----bindchange----->', bindchange)
19
-    console.log('-----onChange----->', onChange)
20
-
21
-    if (bindchange) {
22
-      bindchange(e, data)
23
-    }
24
-    if (onChange) {
25
-      onChange(e, data)
26
-    }
27
-  }
28
-
29
-  const value = useMemo(() => {
30
-    if (propValue === undefined || propValue === null) {
31
-      return undefined
32
-    }
33
-
34
-    for (let i in range) {
35
-      if (range[i][rangeValue] === propValue) {
36
-        setInnerValue(range[i])
37
-        return i;
38
-      }
39
-    }
40
-
41
-    return undefined;
42
-  }, [propValue, range, rangeValue])
43
-
44
-  const childViewStyle = useMemo(() => {
45
-    return innerValue ? {} : { color: '#858585' }
46
-  }, [innerValue])
47
-
48
-  return (
49
-    <Picker {...leftProps} mode='selector' range={range} value={value} rangeKey={rangeKey} onChange={handleChange}>
50
-      <View style={childViewStyle}>{innerValue === undefined ? placeholder : innerValue[rangeKey]}</View>
51
-    </Picker>
52
-  )
53
-}
54
-
55
-XPicker.behaviors = ['wx://form-field']
56
-XPicker.propTypes = {
57
-  behaviors: PropTypes.array
58
-}
59
-
60
-
61
-export default XPicker

+ 48
- 0
src/components/s-picker/index.js View File

1
+Component({
2
+  behaviors: ['wx://form-field'],
3
+  options: {
4
+    addGlobalClass: true,
5
+  },
6
+  properties: {
7
+    name: {
8
+      type: String
9
+    },
10
+    value: {
11
+      type: undefined,
12
+    },
13
+    range: {
14
+      type: Array,
15
+    },
16
+    rangeKey: {
17
+      type: String,
18
+    },
19
+    rangeValue: {
20
+      type: String,
21
+    },
22
+    placeholder: {
23
+      type: String,
24
+      value: '请选择'
25
+    },
26
+  },
27
+  data: {
28
+    text: undefined,
29
+    index: undefined,
30
+  },
31
+  methods: {
32
+    bindChange: function(e) {
33
+
34
+      const index = e.detail.value
35
+      const data = this.data.range[index]
36
+      const value = data[this.data.rangeValue]
37
+      const text = data[this.data.rangeKey]
38
+
39
+      this.setData({
40
+        index,
41
+        text,
42
+        value,
43
+      })
44
+
45
+      this.triggerEvent('change', { value, data })
46
+    }
47
+  }
48
+})

+ 3
- 0
src/components/s-picker/index.json View File

1
+{
2
+  "component": true
3
+}

+ 4
- 0
src/components/s-picker/index.wxml View File

1
+<picker mode="selector" range="{{range}}" value="{{index}}" range-key="{{rangeKey}}" bindchange="bindChange" >
2
+  <view class="s-picker-placeholder" wx:if="{{index == undefined}}">{{placeholder}}</view>
3
+  <view wx:else>{{text}}</view>
4
+</picker>

+ 3
- 0
src/components/s-picker/index.wxss View File

1
+.s-picker-placeholder {
2
+  color: #858585
3
+}

+ 2
- 1
src/pages/setUser/index.config.js View File

8
     "mp-cells": "weui-miniprogram/cells/cells",
8
     "mp-cells": "weui-miniprogram/cells/cells",
9
     "mp-cell": "weui-miniprogram/cell/cell",
9
     "mp-cell": "weui-miniprogram/cell/cell",
10
     "mp-form-page": "weui-miniprogram/form-page/form-page",
10
     "mp-form-page": "weui-miniprogram/form-page/form-page",
11
-    "mp-form": "weui-miniprogram/form/form"
11
+    "mp-form": "weui-miniprogram/form/form",
12
+    "s-picker": "../../components/s-picker/index"
12
   }
13
   }
13
 
14
 
14
 }
15
 }

+ 1
- 2
src/pages/setUser/index.jsx View File

5
 import { useModel } from '@/store';
5
 import { useModel } from '@/store';
6
 import { uploadFile } from '@/utils/request';
6
 import { uploadFile } from '@/utils/request';
7
 import Form from '@/components/Form';
7
 import Form from '@/components/Form';
8
-import Picker from '@/components/Picker';
9
 
8
 
10
 import './style.less'
9
 import './style.less'
11
 
10
 
103
               </mp-cell>
102
               </mp-cell>
104
               <mp-cell title='性别' extClass=''>
103
               <mp-cell title='性别' extClass=''>
105
                 {/* <Input name='sex' placeholder='请输入卡号' /> */}
104
                 {/* <Input name='sex' placeholder='请输入卡号' /> */}
106
-                <Picker name='sex' rangeKey='text' rangeValue='value' range={userSex} />
105
+                <s-picker name='sex' rangeKey='text' rangeValue='value' range={userSex} />
107
               </mp-cell>
106
               </mp-cell>
108
               <mp-cell title='手机号' extClass=''>
107
               <mp-cell title='手机号' extClass=''>
109
                 <Input name='phone' type='number' placeholder='请输入手机号' maxlength={11} value={person?.phone} />
108
                 <Input name='phone' type='number' placeholder='请输入手机号' maxlength={11} value={person?.phone} />