Browse Source

民宿端修改房源搞定

李志伟 3 years ago
parent
commit
9d2fefd344

+ 1
- 4
src/components/Popup/index.jsx View File

@@ -2,10 +2,7 @@
2 2
 import './style.less'
3 3
 
4 4
 export default (props) => {
5
-  const { show, mask = true, onClose, maskClosable } = props
6
-  const onClose3 = () => {
7
-    console.log('3333333333333333333333')
8
-  }
5
+  const { show, mask = true, onClose, maskClosable } = props  
9 6
   return (
10 7
     <mp-dialog extClass='x-popup' buttons={[]} show={show} mask={mask} maskClosable={maskClosable} onClose={onClose}>
11 8
       {props.children}

+ 10
- 5
src/components/Star/Star.jsx View File

@@ -2,15 +2,20 @@
2 2
 import hongxin from '@/assets/icons/housemantj/已收藏.png'
3 3
 import baixin from '@/assets/icons/housemantj/收藏.png'
4 4
 import './Star.less'
5
+
6
+const Star = (props) => <image className='star' src={props.star >= props.index ? hongxin : baixin}></image>
7
+
8
+const starList = (new Array(5)).fill()
9
+
5 10
 export default (props) => {
6 11
   const {star}=props
12
+
13
+
7 14
   return (
8 15
     <>
9
-      <image className='star' src={star >= 1 ? hongxin : baixin}></image>
10
-      <image className='star' src={star >= 2 ? hongxin : baixin}></image>
11
-      <image className='star' src={star >= 3 ? hongxin : baixin}></image>
12
-      <image className='star' src={star >= 4 ? hongxin : baixin}></image>
13
-      <image className='star' src={star >= 5 ? hongxin : baixin}></image>
16
+    {
17
+      starList.map((_, index) => <Star key={index} star={star} index={index + 1} />)
18
+    }
14 19
     </>
15 20
   )
16 21
 }

+ 0
- 3
src/components/toggleRole/ToggleRole.jsx View File

@@ -25,9 +25,6 @@ export default (props) => {
25 25
   const goToShop = () => {
26 26
     getRole('shop')
27 27
   }
28
-  const onClose2 = () => {
29
-    // console.log('2222222222222222222')
30
-  }
31 28
   return (
32 29
     <Popup show={showCutover} maskClosable={maskClosable} onClose={onClose}>
33 30
       <view className='User-box-sths' >

+ 9
- 4
src/hotel/components/HouseManage/houseManage.jsx View File

@@ -40,8 +40,10 @@ export default React.forwardRef((props, ref) => {
40 40
           })       
41 41
         } 
42 42
       }
43
-    })
44
-   
43
+    })   
44
+  }
45
+  const handelDetail=(val)=>{
46
+    Taro.navigateTo({ url: `/hotel/pages/landlord/addRoom/addRoom?hotelId=${hotel.hotelId}&hotelName=${hotel.hotelName}&roomId=${val.roomId}` });
45 47
   }
46 48
 
47 49
   const [showCutover, setShowCutover] = useState(false)
@@ -54,6 +56,9 @@ export default React.forwardRef((props, ref) => {
54 56
   const onClose = () => {
55 57
     setShowCutover(false)
56 58
   }
59
+  const onClose2 = () => {
60
+    setShowCard(false)
61
+  }
57 62
   useEffect(() => {
58 63
     //首次加载页面时
59 64
     if (!mounted.current && hotel.hotelId) {
@@ -112,11 +117,11 @@ export default React.forwardRef((props, ref) => {
112 117
       <view style={{ padding: '0 30rpx', height: '100%' }}>
113 118
         <SearchBar placeholder='请输入房源名搜索' onBlur={onSearch}/>
114 119
         <ShareRoom showCutover={showCutover} onClose={onClose} room={room} onFinish={handleFinish} />
115
-        <ShareCard showCutover={showCard} onClose={onClose} />
120
+        <ShareCard showCutover={showCard} onClose={onClose2} />
116 121
         <scroll-view scroll-y="true" scroll-view='true' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" style={{ height: 'calc(100vh - 244px)' }}>
117 122
           {
118 123
             (detail || []).map((item) =>
119
-              <view className='houseCard'>
124
+              <view className='houseCard' onClick={()=>{handelDetail(item)}}>
120 125
                 <view className='houseName'>{item.roomName||''}</view>
121 126
                 <view className='operation'>
122 127
                   <view onClick={() => handelOrder(item)}><image src={see} />查看入住人</view>

+ 36
- 34
src/hotel/components/Income/income.jsx View File

@@ -1,5 +1,4 @@
1 1
 import { useState } from 'react'
2
-import './income.less'
3 2
 import eyes from '@/assets/icons/shopKeeper/小眼睛.png'
4 3
 import ceyes from '@/assets/icons/shopKeeper/小眼睛-闭上.png'
5 4
 import sImg from '@/assets/icons/landlord/我的收入2.png'
@@ -7,6 +6,9 @@ import cutoverUser from '@/assets/icons/UserCenter/cutoverUser.png'
7 6
 import ToggleRole from '@/components/toggleRole/ToggleRole'
8 7
 import Picker from '@/components/Picker'
9 8
 import formatTime from "@/utils/formatTime";
9
+import List from '@/components/List';
10
+import './income.less'
11
+
10 12
 
11 13
 
12 14
 export default (props) => {
@@ -29,50 +31,50 @@ export default (props) => {
29 31
     setShowCutover(true)
30 32
   }
31 33
   const onClose = () => {
32
-    console.log('11111111')
33 34
     setShowCutover(false)
34 35
   }
35 36
   return (
36 37
     <view>
37
-      <ToggleRole role='hotel' showCutover={showCutover} onClose={onClose} />
38
+      <ToggleRole role='hotel' showCutover={showCutover} maskClosable={showCutover} onClose={onClose} />
38 39
       <view style={{ padding: '30rpx', height: '100%' }}>
39
-        <scroll-view scroll-y="true" scroll-view='true' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" style={{ height: 'calc(100vh - 120px)' }}>
40
-          <view className='storexx'>
41
-            <view className='storeName'>店名:<Picker style={{ display: 'inline-block' }} placeholder="请选择民宿" value={hotel?.hotelId} kv={['hotelName', 'hotelId']} dicts={hotelList} onChange={handleHotelChange} /></view>
42
-            <view onClick={ShowMoldeOn} className='User-info-cutover'>
43
-              <image className='User-info-cutover-image' src={cutoverUser} />
44
-            </view>
45
-            <view className='money'>
46
-              <view className='sleft'>
47
-                <view className='lword'>全年收入(税前)</view>
48
-                <view className='yearMoney'>
49
-                  <text>{isyear ? account?.amounts : '******'}</text>元
50
-                  <image className='micon' src={isyear ? eyes : ceyes} onClick={handleYear} />
51
-                </view>
40
+        <view className='storexx'>
41
+          <view className='storeName'>店名:<Picker style={{ display: 'inline-block' }} placeholder="请选择民宿" value={hotel?.hotelId} kv={['hotelName', 'hotelId']} dicts={hotelList} onChange={handleHotelChange} /></view>
42
+          <view onClick={ShowMoldeOn} className='User-info-cutover'>
43
+            <image className='User-info-cutover-image' src={cutoverUser} />
44
+          </view>
45
+          <view className='money'>
46
+            <view className='sleft'>
47
+              <view className='lword'>全年收入(税前)</view>
48
+              <view className='yearMoney'>
49
+                <text>{isyear ? account?.amounts : '******'}</text>元
50
+                <image className='micon' src={isyear ? eyes : ceyes} onClick={handleYear} />
52 51
               </view>
53
-              <view className='line' />
54
-              <view className='sright'>
55
-                <view className='rword'>当月收入(税前)</view>
56
-                <view className='monthMoney'>
57
-                  <text>{isMomth ? account?.currentCharges : '******'}</text>元
58
-                  <image className='micon2' src={isMomth ? eyes : ceyes} onClick={handleMonth}></image>
59
-                </view></view>
60 52
             </view>
53
+            <view className='line' />
54
+            <view className='sright'>
55
+              <view className='rword'>当月收入(税前)</view>
56
+              <view className='monthMoney'>
57
+                <text>{isMomth ? account?.currentCharges : '******'}</text>元
58
+                <image className='micon2' src={isMomth ? eyes : ceyes} onClick={handleMonth}></image>
59
+              </view></view>
61 60
           </view>
62
-          
63
-          <view className='title' >{accountlog.length!=''?'推广收入记录':'暂无推广收入'}</view>
64
-            {
65
-              (accountlog || []).map((item) => 
66
-                <view className='spreadCard'>
67
-                  <view className='card'>
68
-                    <view className='spreadTime'>时&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;间:<text>{formatTime(item.createDate,'yyyy/MM/dd hh:mm:ss')}</text></view>
69
-                    <view className='spreadMoney'>收入金额:<text>{parseFloat((item.amount/100).toFixed(2))}</text>元</view>
70
-                    <image className='spreadImg' src={sImg} />
71
-                  </view>
61
+        </view>
62
+
63
+        <view className='title' >{accountlog.length != '' ? '推广收入记录' : '暂无推广收入'}</view>
64
+        <scroll-view scroll-y="true" scroll-view='true' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" style={{ height: '50vh' }}>
65
+
66
+          {
67
+            (accountlog || []).map((item) =>
68
+              <view className='spreadCard'>
69
+                <view className='card'>
70
+                  <view className='spreadTime'>时&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;间:<text>{formatTime(item.createDate, 'yyyy/MM/dd hh:mm:ss')}</text></view>
71
+                  <view className='spreadMoney'>收入金额:<text>{parseFloat((item.amount / 100).toFixed(2))}</text>元</view>
72
+                  <image className='spreadImg' src={sImg} />
72 73
                 </view>
74
+              </view>
73 75
             )
74 76
           }
75
-          {accountlog.length != '' ? <view className='botton'>已经到底了~</view> : ''}
77
+        <view className='botton' >已经到底了~</view>
76 78
         </scroll-view>
77 79
       </view>
78 80
     </view>

+ 30
- 4
src/hotel/components/shareRoom/ShareRoom.jsx View File

@@ -30,8 +30,35 @@ export default (props) => {
30 30
   }
31 31
   return (
32 32
     <Popup show={showCutover} onClose={onClose}>
33
-      <View className='from-room'>
34
-      <mp-form  >
33
+      <View className='from-room srl'>
34
+        <View style={{marginBottom:'25px'}}>
35
+          <View className='rzline' /><Label className='srl mg'>请输入入住人信息</Label><View className='rzline' />
36
+        </View>
37
+        <View className='srleft'>
38
+          <Label>入住人数:</Label>
39
+          <Input onInput={(e) => setRoomNum(e.detail.value)} value={roomNum} type='number' placeholder='请输入入住人数' />
40
+        </View>
41
+        <View className='srleft'>
42
+          <Label >入住开始时间:</Label>
43
+          <Picker className='picker' mode='date' onChange={handelStartDate}>
44
+            {startDate == '' ? '请选择入住开始时间' : startDate}
45
+          </Picker>
46
+        </View>
47
+        <View className='srleft'>
48
+          <Label>入住结束时间:</Label>
49
+          <Picker className='picker' mode='date' onChange={handelEndDate}>
50
+            {endDate == '' ? '请选择入住结束时间' : endDate}
51
+          </Picker>
52
+        </View>
53
+        <View>
54
+          <Button className='cancel' onClick={onClose}>取消</Button>
55
+          <Button className='btn' onClick={handelShare}>分享</Button>
56
+        </View>
57
+
58
+
59
+
60
+
61
+        {/* <mp-form  >
35 62
         <Label style={{color:'black'}}>请输入入住人信息</Label>
36 63
         <mp-cells    footer='  ' >
37 64
           <mp-cell title='入住人数:' extClass='font'>
@@ -49,10 +76,9 @@ export default (props) => {
49 76
           </mp-cell>
50 77
           <mp-cell>
51 78
             <Button className='cancel' onClick={onClose}>取消</Button><Button className='btn' onClick={handelShare}>分享</Button>
52
-            {/* <button className='button-OK' onClick={sumbit}>确定</button> */}
53 79
           </mp-cell>
54 80
         </mp-cells>
55
-      </mp-form>
81
+      </mp-form> */}
56 82
       </View>
57 83
 
58 84
 

+ 46
- 15
src/hotel/components/shareRoom/ShareRoom.less View File

@@ -1,28 +1,59 @@
1 1
 .from-room{
2
-  padding-top: 30px;
3
-  .font{
4
-    font-size: 28px;
5
-    color: #202020;
2
+  padding-top: 60px;
3
+}
4
+.srl{
5
+  font-size: 30px;
6
+  font-weight: bold;
7
+  color: #202020;  
8
+  .mg{
9
+    font-size: 38px;
10
+    margin: 0 20px 50px 20px;
11
+  }
12
+  .rzline{
13
+    border-top: 2px #999 dashed;
14
+    height: 2px;
15
+    width: 80px;
16
+    display: inline-block;
17
+    margin-bottom: 8px;
6 18
   }
19
+  .srleft{
20
+    text-align: left;
21
+    Input{
22
+      height: 92px;
23
+      font-size: 28px;
24
+      color: #999;
25
+      background: #FEFEFE;
26
+      box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.08);
27
+      margin-bottom: 40px;
28
+    }
29
+    .picker{
30
+      font-size: 28px;
31
+      color: #999;
32
+      line-height: 92px;
33
+      height: 92px;
34
+      background: #FEFEFE;
35
+      margin-bottom: 40px;
36
+      box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.08);
37
+    }
38
+  }  
7 39
   .cancel{
8
-    width: 150px;
9
-    height: 70px;
40
+    color: #274290;
10 41
     display: inline-block;
11
-    line-height: 70px;
42
+    margin: 20px 20px 0 0;
43
+    width: 236px;
44
+    height: 78px;
45
+    border: 2px solid #274190;
12 46
     border-radius: 12px;
13
-    font-size: 36px;
14
-    margin-right: 20px;
15 47
   }
16 48
   .btn {
17
-    width: 150px;
18
-    height: 70px;
19
-    background: #1A3B83;
20
-    display: inline-block;
21
-    line-height: 70px;
49
+    width: 236px;
50
+    height: 78px;
51
+    background: #274291;
22 52
     border-radius: 12px;
23
-    font-size: 36px;
53
+    display: inline-block;
24 54
     color: #fff;
25 55
   }
26 56
 }
57
+
27 58
   
28 59
   

+ 45
- 35
src/hotel/pages/landlord/addRoom/addRoom.jsx View File

@@ -3,11 +3,11 @@ import Taro from '@tarojs/taro'
3 3
 import CustomNav from '@/components/CustomNav'
4 4
 import { useEffect, useState } from "react"
5 5
 import './addRoom.less'
6
-import { saveRoom, getHotelDetail } from '@/services/landlord'
6
+import { saveRoom, getRoomDetail, updateRoom } from '@/services/landlord'
7 7
 
8 8
 
9 9
 export default withLayout((props) => {
10
-  const { hotelId, hotelName } = props.router.params
10
+  const { hotelId, hotelName, roomId } = props.router.params
11 11
   const [roomModel, setRoomModel] = useState({
12 12
     hotelId,
13 13
     roomName: '',
@@ -32,58 +32,68 @@ export default withLayout((props) => {
32 32
     })
33 33
   }
34 34
   const sumbit = () => {
35
-    if(
36
-    roomModel.roomName!=''&&
37
-    roomModel.address!=''&&
38
-    roomModel.location!=''&&
39
-    roomModel.weight!=''
40
-    )
41
-     { 
42
-      saveRoom(roomModel).then(() => {       
43
-          Taro.showModal({
44
-            title: '保存成功',
45
-            showCancel:false
46
-          }).then(() => {
47
-            Taro.navigateBack()
48
-          })
49
-      })       
50
-     } else{
51
-       Taro.showToast({
35
+    if (
36
+      roomModel.roomName != '' &&
37
+      roomModel.address != '' &&
38
+      roomModel.location != '' &&
39
+      roomModel.weight != ''
40
+    ) {
41
+      const seveices = roomId ? updateRoom : saveRoom
42
+      seveices(roomModel, roomId).then(() => {
43
+        Taro.showModal({
44
+          title: roomId ? '修改成功' : '保存成功',
45
+          showCancel: false
46
+        }).then(() => {
47
+          Taro.navigateBack()
48
+        })
49
+      })
50
+    } else {
51
+      Taro.showToast({
52 52
         title: '有必填项未填哦',
53 53
         icon: 'none',
54 54
       })
55
-     }
56
-      
55
+    }
57 56
   }
57
+
58
+  useEffect(() => {
59
+    if (roomId) {
60
+      getRoomDetail(roomId).then((res) => {
61
+        setRoomModel(res)
62
+      })
63
+    }
64
+  }, [])
65
+
66
+
67
+
58 68
   return (
59 69
     <view className='page-index'>
60 70
       <CustomNav title={hotelName} />
61 71
       <view className='from-room'  >
62 72
         <mp-form models={roomModel} >
63 73
           <mp-cells title='请填写新增的房源信息' footer='  ' >
64
-            <mp-cell prop='roomName' title='房屋名称:' extClass='font'>
65
-              <input focus dataField='roomName' onInput={(e) => setRoomModel({ ...roomModel, roomName: e.detail.value })} value={roomModel.roomName}  placeholder='请输入房屋名称(必填)' />
74
+            <mp-cell title='房屋名称:' extClass='font'>
75
+              <input onInput={(e) => setRoomModel({ ...roomModel, roomName: e.detail.value })} value={roomModel.roomName} placeholder='请输入房屋名称(必填)' />
66 76
             </mp-cell>
67
-            <mp-cell prop='address' title='位置信息:' extClass='font'>
68
-              <input dataField='address' onInput={(e) => setRoomModel({ ...roomModel, address: e.detail.value })} value={roomModel.address}  placeholder='请输入房屋位置(必填)' />
77
+            <mp-cell title='位置信息:' extClass='font'>
78
+              <input onInput={(e) => setRoomModel({ ...roomModel, address: e.detail.value })} value={roomModel.address} placeholder='请输入房屋位置(必填)' />
69 79
             </mp-cell>
70
-            <mp-cell prop='location' title='定位经纬度:' extClass='font'>
80
+            <mp-cell title='定位经纬度:' extClass='font'>
71 81
               <label onClick={onRoomMap}>{roomModel.location == '' ? '房间定位(必填)' : roomModel.location}</label>
72 82
             </mp-cell>
73
-            <mp-cell prop='parkingAddress' title='停车场位置:' extClass='font'>
74
-              <input dataField='parkingAddress' onInput={(e) => setRoomModel({ ...roomModel, parkingAddress: e.detail.value })} value={roomModel.parkingAddress}  placeholder='请输入停车场位置' />
83
+            <mp-cell title='停车场位置:' extClass='font'>
84
+              <input onInput={(e) => setRoomModel({ ...roomModel, parkingAddress: e.detail.value })} value={roomModel.parkingAddress} placeholder='请输入停车场位置' />
75 85
             </mp-cell>
76
-            <mp-cell prop='parkingLocation' title='定位经纬度:' extClass='font'>
86
+            <mp-cell title='定位经纬度:' extClass='font'>
77 87
               <label onClick={onParkMap}>{roomModel.parkingLocation == '' ? '停车场定位' : roomModel.parkingLocation}</label>
78 88
             </mp-cell>
79
-            <mp-cell prop='wifiName' title='Wi-Fi名称:' extClass='font'>
80
-              <input dataField='wifiName' onInput={(e) => setRoomModel({ ...roomModel, wifiName: e.detail.value })} value={roomModel.wifiName}  placeholder='请输入wifi名称' />
89
+            <mp-cell title='Wi-Fi名称:' extClass='font'>
90
+              <input onInput={(e) => setRoomModel({ ...roomModel, wifiName: e.detail.value })} value={roomModel.wifiName} placeholder='请输入wifi名称' />
81 91
             </mp-cell>
82
-            <mp-cell prop='wifiPassword' title='Wi-Fi密码:' extClass='font'>
83
-              <input dataField='wifiPassword' onInput={(e) => setRoomModel({ ...roomModel, wifiPassword: e.detail.value })} value={roomModel.wifiPassword}  placeholder='请输入wifi密码' />
92
+            <mp-cell title='Wi-Fi密码:' extClass='font'>
93
+              <input onInput={(e) => setRoomModel({ ...roomModel, wifiPassword: e.detail.value })} value={roomModel.wifiPassword} placeholder='请输入wifi密码' />
84 94
             </mp-cell>
85
-            <mp-cell prop='weight' title='权重:' extClass='font'>
86
-              <input type='number' dataField='weight'  onInput={(e) => setRoomModel({ ...roomModel, weight: e.detail.value })} placeholder='请输入权重(必填)' />
95
+            <mp-cell title='权重:' extClass='font'>
96
+              <input type='number' value={roomModel.weight} onInput={(e) => setRoomModel({ ...roomModel, weight: e.detail.value })} placeholder='请输入权重(必填)' />
87 97
             </mp-cell>
88 98
             <mp-cell>
89 99
               <button className='button-OK' onClick={sumbit}>确定</button>

+ 1
- 2
src/hotel/pages/landlord/landlord.jsx View File

@@ -10,7 +10,6 @@ import onhouseImg from '@/assets/icons/landlord/房源管理按下.png'
10 10
 import withLayout from '@/layouts'
11 11
 import { getHotelManage, getAccountLogList, getNowHotelManage } from '@/services/landlord'
12 12
 import CustomNav from '@/components/CustomNav'
13
-
14 13
 import './landlord.less'
15 14
 
16 15
 export default withLayout((props) => {
@@ -20,7 +19,7 @@ export default withLayout((props) => {
20 19
 
21 20
   const [hotelList, setHotelList] = useState([])
22 21
   const [hotel, setHotel] = useState()
23
-  const [account, setAccount] = useState()
22
+  const [account, setAccount] = useState({})
24 23
   const [accountlog, setAccountLog] = useState([])
25 24
 
26 25
   const houseRef = useRef()

+ 15
- 1
src/services/landlord.js View File

@@ -28,7 +28,7 @@ import request from '@/utils/request'
28 28
  * @param {*} params 
29 29
  * @returns 
30 30
  */
31
- export const getAccountLogList = (id) => request(`/hotel/account/${id}/log`)
31
+ export const getAccountLogList = (id,params) => request(`/hotel/account/${id}/log`, { params })
32 32
 
33 33
 /**
34 34
  * 房源列表
@@ -51,6 +51,20 @@ import request from '@/utils/request'
51 51
  */
52 52
   export const deleteRoom = (id) => request(`/taRoom/${id}`, { method: 'delete'})
53 53
 
54
+  /**
55
+ * 房源详情
56
+ * @param {*} id 
57
+ * @returns 
58
+ */
59
+ export const getRoomDetail = (id) => request(`/taRoom/${id}`)
60
+
61
+/**
62
+ * 更新房源
63
+ * @param {*} data 
64
+ * @returns 
65
+ */
66
+ export const updateRoom = (data, id) => request(`/taRoom/${id}`, { method: 'put', data })
67
+
54 68
 
55 69
 /**
56 70
  * 分享房源

+ 1
- 1
src/shop/components/ShopKeeper/shopKeeper.jsx View File

@@ -126,7 +126,7 @@ export default (props) => {
126 126
     <view>
127 127
       <view>
128 128
       </view>
129
-      <ToggleRole showCutover={showCutover} onClose={onClose} role='shop' />
129
+      <ToggleRole showCutover={showCutover} maskClosable={showCutover} onClose={onClose} role='shop' />
130 130
       <view style={{ padding: '30rpx', height: '100%' }}>
131 131
         <scroll-view scroll-y scroll-view='true' bindscrolltoupper='upper' bindscrolltolower='lower' bindscroll='scroll' style={{ height: 'calc(100vh - 120px)' }}>
132 132
           <view className='storexx'>

+ 1
- 1
src/shop/components/Sparead/spreadMoney.jsx View File

@@ -72,7 +72,7 @@ export default (props) => {
72 72
     <view>
73 73
       <view>
74 74
       </view>
75
-      <ToggleRole showCutover={showCutover} onClose={onClose} role='shop' />
75
+      <ToggleRole showCutover={showCutover} maskClosable={showCutover} onClose={onClose} role='shop' />
76 76
       <view style={{ padding: '30rpx', height: '100%' }}>
77 77
         <scroll-view scroll-y="true" scroll-view='true' bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" style={{ height: 'calc(100vh - 120px)' }}>
78 78
           <view className='storexx'>