浏览代码

意向楼盘

Baozhangchao 3 年前
父节点
当前提交
d5b33f784a
共有 3 个文件被更改,包括 92 次插入147 次删除
  1. 79
    122
      src/components/BottomMoadl/index.jsx
  2. 2
    0
      src/components/BottomMoadl/style.css
  3. 11
    25
      src/pages/mine/addCustomer/index.jsx

+ 79
- 122
src/components/BottomMoadl/index.jsx 查看文件

@@ -9,152 +9,109 @@ import { fetch } from '@/utils/request'
9 9
 import { useState, useEffect, useRef } from 'react'
10 10
 import './style.css'
11 11
 
12
+const wrapAnimate = 'wrap wrapAnimate'
13
+const frameAnimate = 'frame-wrapper'
12 14
 
13 15
 export default (props) => {
14
-  const { closeModal, setBuidName, onChange = () => { }, type = '', frameTitle, flag, } = props
16
+  const { value, onChange, role } = props
15 17
 
16
-
17
-  let wrapAnimate = 'wrap wrapAnimate'
18
-  let frameAnimate = 'frame-wrapper'
19
-  const [textNextSum, setTextNext] = useState(1)
20
-  const [recommendContent, setRecommendContent] = useState([])
21 18
   const city = useSelector(state => state.city)
22 19
 
23
-  const [loading, setLoading] = useState(false)
24 20
   const [dicts, setDicts] = useState([])
21
+  const [visible, setVisible] = useState(false)
22
+  const [loading, setLoading] = useState(false)
23
+  const [val, setVal] = useState({ buildingName: '意向楼盘' })
25 24
 
26
-  const hideFrame = (e) => {
27
-    console.log('关闭', e);
28
-    closeModal()//关闭
29
-
30
-  }
31
-
25
+  useEffect(() => {
26
+    if (dicts) {
27
+      const building = dicts.filter(x => x.buildingId === value)[0] || { buildingName: '意向楼盘' }
28
+      setVal(building)
29
+    }
30
+  }, [value, dicts])
32 31
 
33 32
   useEffect(() => {
34
-    if (type !== ROLE_CODE.CUSTOMER && type !== ROLE_CODE.DRIFT && type !== ROLE_CODE.CONSULTANT) {
33
+    setLoading(true)
34
+    if (role !== ROLE_CODE.CUSTOMER && role !== ROLE_CODE.DRIFT && role !== ROLE_CODE.CONSULTANT) {
35 35
       fetch({ url: API_GET_AGENT_BUILDINGS }).then((res) => {
36 36
         setDicts(res || [])
37
-      })
37
+        setLoading(false)
38
+      }).catch(() => setLoading(false))
38 39
     } else {
39 40
       fetch({ url: API_ITEMS_LIST, payload: { pageNumber: 1, pageSize: 1000, cityId: city.curCity.id } }).then((res) => {
40
-
41 41
         setDicts(res.records)
42
-      })
42
+        setLoading(false)
43
+      }).catch(() => setLoading(false))
43 44
     }
44
-  }, [])
45
-
46
-  const [darkMode, setDarkMode] = useState('light')
47
-
48
-  useEffect(() => {
49
-    Taro.getSystemInfo({
50
-      success: function (res) {
51
-        console.log(res.theme)
52
-        setDarkMode(res.theme)
53
-
54
-      }
55
-    })
56
-
57
-  }, [darkMode])
58
-
59
-  const [conTent, setConTent] = useState()
60
-
61
-  const buildingConten = (e) => {
62
-    console.log(e, 'eeeeeeeeeeeeeeee');
63
-    setConTent(e.detail.value)
64
-
45
+  }, [city.curCity.id, role])
65 46
 
47
+  const handleSelect = (e) => {
66 48
 
49
+    const buildingId = e.detail.value
50
+    const building = dicts.filter(x => x.buildingId === buildingId)[0] || { buildingName: '意向楼盘' }
67 51
 
52
+    setVal(building)
68 53
   }
69
-
70
-  const buliClick = (e) => {
54
+  const handleSubmit = (e) => {
71 55
     e.stopPropagation()
72
-
73
-    if (conTent === '' || conTent === null || conTent === undefined) {
74
-      Taro.showToast({
75
-        title: '未正确选择楼盘',
76
-        icon: 'error',
77
-        duration: 2000
78
-      })
79
-
80
-    } else {
81
-      onChange(conTent)
82
-      return dicts.map((item, inx) => {
83
-
84
-
85
-        if (item.buildingId === conTent) {
86
-
87
-
88
-          const findIndex = inx
89
-          const name = dicts[findIndex].buildingName
90
-          //  item.buildingName
91
-          setBuidName(name)
92
-          console.log(name);
93
-
94
-          closeModal()
95
-
96
-          console.log('选中', conTent);
97
-          // const newArr = dicts.filter(function (obj) {
98
-          //   return obj.buildingId == e.detail.value;
99
-          // });
100
-          // console.log(newArr);
101
-
102
-
103
-
104
-        }
105
-        return item
106
-
107
-      })
108
-
109
-
110
-    }
111
-
56
+    setVisible(false)
57
+    onChange(val.buildingId, val)
112 58
   }
113 59
 
114
-
115 60
   return (
116
-    flag && <view   >
117
-      <view className={wrapAnimate} style='background:rgba(0,0,0,0);'></view>
118
-      <view onClick={hideFrame} className={frameAnimate} catchMove>
119
-        <view className={darkMode == 'dark' ? 'frame-dark' : 'frame'}>
120
-          {/* 标题  */}
121
-          <view className={darkMode == 'dark' ? 'title-wrapper-dark' : 'title-wrapper'}>
122
-            <view style={{ marginLeft: '-8vw' }}>{frameTitle}</view>
123
-          </view>
124
-          {/* 内容 */}
125
-          <view style='overflow-x: hidden;'>
126
-            <View className='page-section'>
127
-              <View className='radio-list' >
128
-                <scroll-view
129
-                  scrollY
130
-                  style={{ height: '40vh', overflow: 'hidden' }}
131
-                  catchMove
132
-                >
133
-                  <RadioGroup className='radio-list__RadioGroup' onChange={buildingConten} onClick={e => e.stopPropagation()}>
134
-                    {dicts.map((item, i) => {
135
-                      return (
136
-                        <Label catchMove className='radio-list__label' for={i} key={i}>
137
-                          <view className={darkMode == 'dark' ? 'radio-list__text-dark' : 'radio-list__text'}>{item.buildingName}</view>
138
-
139
-                          <Radio catchMove className='radio-list__radio' value={item.buildingId} checked={item.buildingId === conTent ? true : false}></Radio>
140
-
141
-                        </Label>
142
-                      )
143
-                    })}
144
-                  </RadioGroup>
145
-                </scroll-view>
146
-              </View>
147
-            </View>
148
-
149
-            {/* <view className='bottom-text' onClick={handleTextNext}> */}
150
-            <view style={{ display: 'flex', margin: '2em auto' }}>
151
-              <Button className='checkBtn' onClick={() => closeModal()}  >取消</Button>
152
-              <Button className='okBtn' onClick={buliClick}> 确定</Button>
61
+    <view>
62
+      {
63
+        visible ? (
64
+          <>
65
+            <view onClick={() => setVisible(false)} className={wrapAnimate}></view>
66
+            <view className={frameAnimate} catchMove>
67
+              <view className='frame'>
68
+                {/* 标题  */}
69
+                <view className='title-wrapper'>
70
+                  <view>{val.buildingName}</view>
71
+                </view>
72
+                {/* 内容 */}
73
+                <view style='overflow-x: hidden;'>
74
+                  <View className='page-section'>
75
+                    <View className='radio-list' >
76
+                      <scroll-view
77
+                        scrollY
78
+                        style={{ height: '40vh', overflow: 'hidden' }}
79
+                        catchMove
80
+                      >
81
+                        {loading && '加载中...'}
82
+                        {
83
+                          !loading && (
84
+                            <RadioGroup className='radio-list__RadioGroup' onChange={handleSelect} onClick={e => e.stopPropagation()}>
85
+                              {dicts.map((item, i) => {
86
+                                return (
87
+                                  <Label catchMove className='radio-list__label' for={`rdo-${i}`} key={i}>
88
+                                    <view className='radio-list__text'>{item.buildingName}</view>
89
+
90
+                                    <Radio id={`rdo-${i}`} catchMove className='radio-list__radio' value={item.buildingId} checked={item.buildingId === val.buildingId}></Radio>
91
+
92
+                                  </Label>
93
+                                )
94
+                              })}
95
+                            </RadioGroup>
96
+                          )
97
+                        }
98
+                      </scroll-view>
99
+                    </View>
100
+                  </View>
101
+
102
+                  {/* <view className='bottom-text' onClick={handleTextNext}> */}
103
+                  <view style={{ display: 'flex', margin: '2em auto' }}>
104
+                    <Button className='checkBtn' onClick={() => setVisible(false)}  >取消</Button>
105
+                    <Button className='okBtn' disabled={!val.buildingId} onClick={handleSubmit}> 确定</Button>
106
+                  </view>
107
+
108
+                </view>
109
+              </view>
153 110
             </view>
154
-
155
-          </view>
156
-        </view>
157
-      </view>
111
+          </>
112
+        ) :
113
+          <View onClick={() => setVisible(true)}>{val.buildingName}</View>
114
+      }
158 115
     </view>
159 116
 
160 117
   )

+ 2
- 0
src/components/BottomMoadl/style.css 查看文件

@@ -14,6 +14,8 @@
14 14
   height: 100vh;
15 15
   width: 100vw;
16 16
   z-index: 80;
17
+  top: 0;
18
+  left: 0;
17 19
 }
18 20
 .frame {
19 21
   background: #fff;

+ 11
- 25
src/pages/mine/addCustomer/index.jsx 查看文件

@@ -1,17 +1,17 @@
1 1
 import { useState, useEffect } from 'react'
2 2
 import withLayout from '@/layout'
3
-import { ScrollView, Input, Image, Block, View } from '@tarojs/components'
3
+import { ScrollView, Input, Image, Block, View, Button } from '@tarojs/components'
4 4
 import '@/assets/css/iconfont.css'
5 5
 import { fetch } from '@/utils/request'
6 6
 import BottomMoadl from '@/components/BottomMoadl/index'
7 7
 
8
-import { API_REPORT_CUETOMER, API_GET_AGENT_BUILDINGS, API_ITEMS_LIST, API_USER_ADD_CUSTOMER, API_CHANNEL_REPORT } from '@/constants/api'
8
+import { API_USER_ADD_CUSTOMER, API_CHANNEL_REPORT } from '@/constants/api'
9 9
 import { ROLE_CODE } from '@/constants/user'
10 10
 import Taro from '@tarojs/taro'
11 11
 import Picker from '@/components/Picker'
12
-import BuildingPicker from './components/BuildingPicker'
12
+// import BuildingPicker from './components/BuildingPicker'
13 13
 import ConsultantPicker from './components/ConsultantPicker'
14
-import getSubmitor from './getSubmitor'
14
+
15 15
 import './index.scss'
16 16
 
17 17
 
@@ -27,9 +27,6 @@ export default withLayout((props) => {
27 27
   const { personId, personType } = person
28 28
   const { buildingId: originBuiding } = router.params
29 29
 
30
-  const [showFrame, setShowFrame] = useState(false)
31
-  const [buidName, setBuidName] = useState('请选择意向楼盘')
32
-
33 30
   const [loading, setLoading] = useState(false)
34 31
   const [buildingId, setBuildingId] = useState(null)
35 32
   const [CardId, setCardId] = useState(null)
@@ -43,8 +40,6 @@ export default withLayout((props) => {
43 40
     remark: '', // 描述
44 41
   })
45 42
 
46
-  const postSubmit = getSubmitor(person)
47
-
48 43
   useEffect(() => {
49 44
     console.log('------originBuiding------>', originBuiding)
50 45
     if (originBuiding) {
@@ -81,12 +76,6 @@ export default withLayout((props) => {
81 76
     return true
82 77
   }
83 78
 
84
-  const closeModal = (e) => {
85
-
86
-    setShowFrame(!showFrame)
87
-
88
-  }
89
-
90 79
   const onSubmit = () => {
91 80
     const payload = personType === ROLE_CODE.CONSULTANT ?
92 81
       {
@@ -136,16 +125,13 @@ export default withLayout((props) => {
136 125
     setFormData(Data)
137 126
   }
138 127
 
139
-  const BuildingChange = (e) => {
140
-    setBuildingId(e)
141
-    console.log("🚀 ~ file: index父组件接收的 e", e, originBuiding)
142
-
143
-
128
+  const handleBuildingSelect = (bid, building) => {
129
+    setBuildingId(bid)
144 130
   }
145 131
 
146 132
   return (
147 133
     <view className='Page addCustomer'>
148
-      <BottomMoadl setBuidName={setBuidName} closeModal={closeModal} onChange={BuildingChange} frameTitle='意向楼盘' value={buildingId} type={personType} flag={showFrame} />
134
+
149 135
 
150 136
       <ScrollView scroll-y refresher-enabled={false} refresher-background='#fff'>
151 137
         <view className='PageContent'>
@@ -176,8 +162,8 @@ export default withLayout((props) => {
176 162
           <view className='FormLine flex-h'>
177 163
             <view className='flex-item'>
178 164
               {/* <BuildingPicker change={BuildingChange} value={buildingId} type={personType} /> */}
179
-              <View onClick={closeModal} >{buidName}</View>
180
-
165
+              {/* <View onClick={() => setShowFrame(true)} >{buildingName}</View> */}
166
+              <BottomMoadl onChange={handleBuildingSelect} role={personType} />
181 167
             </view>
182 168
           </view>
183 169
 
@@ -198,14 +184,14 @@ export default withLayout((props) => {
198 184
                   <view className='flex-item'>
199 185
                     {
200 186
                       //解决事件穿透
201
-                      !showFrame && <Input placeholder='补充说明(选填)' dataType='remark' onInput={FormInput.bind(this)}></Input>
187
+                      <Input placeholder='补充说明(选填)' dataType='remark' onInput={FormInput.bind(this)}></Input>
202 188
                     }
203 189
                   </view>
204 190
                 </view>
205 191
               </Block> : ''
206 192
           }
207 193
           <view className='Btn'>
208
-            <button loading={loading} onClick={onSubmit}>提交</button>
194
+            <Button loading={loading} onClick={onSubmit}>提交</Button>
209 195
           </view>
210 196
 
211 197
         </view>