230320a303 2 years ago
parent
commit
359f2360a9

+ 7 - 1
src/api/room.js

@@ -63,6 +63,9 @@ export default {
   apieshouselist: params => { // 二手房 房源列表
     return request('/api/eshouse/list', params, 'loading')
   },
+  apieshousesoldlist: params => { // 二手房 房源列表 已售
+    return request('/api/eshouse/sold/list', params, 'loading')
+  },
   apieshousedetail: params => { // 二手房 房源详情
     return request('/api/eshouse/detail', params, 'loading')
   },
@@ -72,6 +75,9 @@ export default {
   apieshouseedit: params => { // 二手房 房源编辑
     return request('/api/eshouse/edit', params, 'loading')
   },
+  apieshousesold: params => { // 二手房 房源 设置已出售
+    return request('/api/eshouse/sold', params, 'loading')
+  },
   apirenthouselist: params => { // 二手房 出租 列表
     return request('/api/rent/house/list', params, 'loading')
   },
@@ -84,4 +90,4 @@ export default {
   apirenthouseedit: params => { // 二手房 出租 编辑
     return request('/api/rent/house/edit', params, 'loading')
   },
-}
+}

+ 1 - 0
src/app.jsx

@@ -134,6 +134,7 @@ class App extends Component {
         pages: [
           'estate',
           'list',
+          'listed',
           'rentlist',
           'rentdtl',
           'rentUpload',

+ 7 - 0
src/pagesMore/center/index.jsx

@@ -213,6 +213,13 @@ class Index extends Component {
                 <Image src={iconSign} className="sign"></Image>
               </View>
             </Navigator>
+            <Navigator url="/pagesRoom/listed" className="entry-op">
+              <Image src={icon4} className="entry-icon"></Image>
+              <View className="entry-text">洪楼已售房源</View>
+              <View className="entry-right">
+                <Image src={iconSign} className="sign"></Image>
+              </View>
+            </Navigator>
             <Navigator url="/pagesRoom/rentUpload" className="entry-op">
               <Image src={icon4} className="entry-icon"></Image>
               <View className="entry-text">添加租房</View>

+ 27 - 2
src/pagesMore/center/uploadRoom2.jsx

@@ -103,8 +103,21 @@ class Index extends Component {
   }
 
 
+  saleedHandle () {
+    const {id} = this.$router.params
+    Taro.$msgConfirm(`确定是洪楼内部卖出的吗?`, () => {
+      // Taro.api.room.apieshousesold({
+      //   is_sold: 1,
+      //   id
+      // }).then(() => {
+      //   Taro.$msg('已标记')
+      // })
+      this.saveHandle('is_sold')
+    }, () => {})
+  }
+
 
-  saveHandle () {
+  saveHandle (pStr) {
     const { formObj, imgArr, addr1, addr2, addr3, hType1, hType2, hType3, sRate1, sRate2 } = this.state
     let house_no = ''
     if (addr1 && addr2 && addr3) {
@@ -139,7 +152,7 @@ class Index extends Component {
       is_dec: formObj.is_dec,
       is_elevator: formObj.is_elevator,
       owner: formObj.owner,
-      custom_tag: formObj.custom_tag,
+      custom_tag: formObj.custom_tag.replace(/,|、|\/|\\/g, ','),
       owner_phone: formObj.owner_phone,
       introduce: formObj.introduce,
       remarked: formObj.remarked,
@@ -150,6 +163,9 @@ class Index extends Component {
       floor_price: formObj.floor_price,
       images: imgArr.join(','),
     }
+    if (pStr === 'is_sold') {
+      params.is_sold = 1
+    }
     if (formObj.id) {
       apiStr = 'apieshouseedit'
       params.id = formObj.id
@@ -401,6 +417,7 @@ class Index extends Component {
 
 
   render () {
+    const {id} = this.$router.params
     const { formObj, imgArr } = this.state
     const dictData = Taro.getStorageSync('dictData')
     const roomDecMoreOptions = {arr: dictData.room_dec}
@@ -719,6 +736,14 @@ class Index extends Component {
           <View className="lff-flex">
             <View className="lff-btn full" onClick={this.saveHandle.bind(this)}>提交</View>
           </View>
+          {
+            id 
+            ?
+            <View style="padding-top: 10px;" className="lff-flex">
+              <View className="lff-btn full t4" onClick={this.saleedHandle.bind(this)}>洪楼已成交</View>
+            </View>
+            : ''
+          }
         </View>
       </View>
     )

+ 20 - 2
src/pagesRoom/dtl.jsx

@@ -26,6 +26,7 @@ class Index extends Component {
     super(props)
     const {id: curId} = this.$router.params
     this.state = {
+      saleUserObj: {},
       curId,
       curObj: {},
       curImgIndex: 0,
@@ -56,6 +57,23 @@ class Index extends Component {
       }, () =>{
         if (this.subRooms) this.subRooms.getData(res.es_house_list || [])
         if (this.subAround) this.subAround.getData(res.estate_id)
+        if (res.sale_user.sale_phone === '18907904022') {
+          Taro.api.room.apisalelist({
+            show_status: 1,
+            page_size: 99
+          }).then(res => {
+            const list = res.list || []
+            const arrIndex = Math.floor(Math.random() * list.length)
+            this.setState({
+              saleUserObj: list[arrIndex],
+            })
+            Taro.setStorageSync('APP_cur_sale', {curObj: list[arrIndex]})
+          })
+        } else {
+          this.setState({
+            saleUserObj: res.sale_user
+          })
+        }
       })
     })
   }
@@ -392,8 +410,8 @@ class Index extends Component {
   }
 
   renderSale () {
-    const { curObj } = this.state
-    const saleObj = curObj.sale_user || {}
+    const { curObj, saleUserObj } = this.state
+    let saleObj = saleUserObj || {}
     const tagStr = saleObj.custom_tag ? saleObj.custom_tag.substring(0, 8) : ''
     return (
       <View className="scoped-sale">

+ 649 - 0
src/pagesRoom/listed.jsx

@@ -0,0 +1,649 @@
+import Taro, { Component } from '@tarojs/taro'
+import { View, Image, Text, Navigator } from '@tarojs/components'
+
+import { AtSearchBar } from 'taro-ui'
+import ListMore from '@/c/pageDataList/listMore'
+import MultiSelect from '@/c/lform/MultiSelect'
+import './listed.scss'
+import { arrToObj } from '@utils'
+
+class Index extends Component {
+
+  onShareAppMessage() {
+    return {
+      title: '来看看南昌的这些优质房源',
+    }
+  }
+  onShareTimeline () {
+    return {
+      title: '洪楼Plus,专注南昌本地房地产市场,让买房,更省心!',
+    }
+  }
+
+  constructor (props) {
+    super(props)
+    const { estate_id } = this.$router.params
+    let estateIdCur = []
+    if (estate_id) estateIdCur = [estate_id]
+    this.state = {
+      searchKey: '',
+      page_size: 10,
+      page: 1,
+      isListEnd: false,
+      isListLoading: false,
+      isListEmpty: false,
+      dataList: [],
+      curNav: 1,
+      isDShow: false,
+      curObj: {},
+      searchIndex: -1,
+      searchText1: '',
+      searchText5: '',
+      searchText3: '',
+      searchText4: '',
+      searchText5: '',
+      curPos: 'area_type',
+      curAreaType: [],
+      curProductTypeName: [],
+      curHouseTypeRange: [],
+      houseAreaCur: [],
+      productTypeCur: [],
+      isEstateShow: false,
+      estateIdCur,
+    }
+  }
+
+  config = {
+    navigationBarTitleText: '优质房源',
+  }
+
+  componentWillMount () {
+    Taro.$AHU(this)
+    const { estate_id } = this.$router.params
+    if (estate_id) {
+      this.getDataList()
+    }
+  }
+
+  componentDidShow () { }
+
+  componentDidHide () { }
+
+  renderSearch () {
+    const { searchKey } = this.state
+    return (
+      <AtSearchBar
+        value={searchKey}
+        fixed={true}
+        placeholder="请输入房源关键字"
+        onChange={this.onSeachChange.bind(this)}
+        onActionClick={this.onSelectActionClick.bind(this)}
+        onClear={this.onClearHandle.bind(this)}
+      />
+    )
+  }
+  onSeachChange (value) {
+    this.setState({
+      searchKey: value
+    })
+  }
+  onClearHandle () {
+    this.setState({
+      searchKey: '',
+      page: 1
+    }, () => {
+      this.getDataList()
+    })
+  }
+  onSelectActionClick () {
+    this.setState({
+      page: 1,
+    }, () => {
+      this.getDataList()
+    })
+  }
+
+  searchIndex1Render () {
+    const { curPos, curAreaType } = this.state
+    const dictData = Taro.getStorageSync('dictData')
+    const areaTypeViews = dictData.area_type.map(item =>{
+      let curClassName = "op"
+      curAreaType.forEach(curVal =>{
+        if (curVal === item.val) {
+          curClassName = "op cur"
+        }
+      })
+      return (
+        <View className={curClassName} key={item.val} onClick={this.areaTypeHandle.bind(this, item)}>{item.key}</View>
+      )
+    })
+    let areaTypeAllClassName = curAreaType.length === 0 ? 'op cur' : 'op'
+    return (
+      <View className="stc-wrap">
+        {/* <View className="stc-item">
+          <View className={curPos === 'area_type' ? 'stc-op cur' : 'stc-op'}  onClick={this.posHandle.bind(this, 'area_type')}>区域</View>
+        </View> */}
+        {
+          curPos === 'area_type'
+          &&
+          <View className="stc-pane">
+            <View className={areaTypeAllClassName} onClick={this.areaTypeHandle.bind(this, 'all')}>不限</View>
+            {areaTypeViews}
+          </View>
+        }
+      </View>
+    )
+  }
+  posHandle (str) {
+    this.setState({
+      curPos: str,
+      curAreaType: [],
+    })
+  }
+  areaTypeHandle (curOp) {
+    if (curOp === 'all') {
+      this.setState({
+        curAreaType: []
+      })
+    } else {
+      let { curAreaType } = this.state
+      let ed = false
+      let curI = 0
+      curAreaType.forEach((item, index) => {
+        if (curOp.val === item) {
+          ed = true
+          curI = index
+        }
+      })
+      if (ed) {
+        curAreaType.splice(curI, 1)
+      } else {
+        curAreaType.push(curOp.val)
+      }
+      this.setState({
+        curAreaType
+      })
+    }
+  }
+
+
+
+  searchIndex3Render () {
+    const { curHouseTypeRange } = this.state
+    const dictData = Taro.getStorageSync('dictData')
+    const edIcon = require('@img/images/icon_g_ed.png')
+    const rangeViews = dictData.house_type.map(item =>{
+      let curClassName = "stc-op"
+      curHouseTypeRange.forEach(curVal =>{
+        if (curVal === item.val) {
+          curClassName = "stc-op cur"
+        }
+      })
+      return (
+        <View className={curClassName} key={item.val} onClick={this.houseTypeRangeHandle.bind(this, item)}>{item.key}
+          <Image className="img" src={edIcon} />
+        </View>
+      )
+    })
+    let allClassName = curHouseTypeRange.length === 0 ? 'stc-op cur' : 'stc-op'
+    return (
+      <View className="stc-wrap">
+        <View className="stc-item">
+          <View className={allClassName} onClick={this.houseTypeRangeHandle.bind(this, 'all')}>不限</View>
+          {rangeViews}
+        </View>
+      </View>
+    )
+  }
+  houseTypeRangeHandle (curOp) {
+    if (curOp === 'all') {
+      this.setState({
+        curHouseTypeRange: []
+      })
+    } else {
+      let { curHouseTypeRange } = this.state
+      let ed = false
+      let curI = 0
+      curHouseTypeRange.forEach((item, index) => {
+        if (curOp.val === item) {
+          ed = true
+          curI = index
+        }
+      })
+      if (ed) {
+        curHouseTypeRange.splice(curI, 1)
+      } else {
+        curHouseTypeRange.push(curOp.val)
+      }
+      this.setState({
+        curHouseTypeRange
+      })
+    }
+  }
+
+
+  searchIndex4Render () {
+    const dictData = Taro.getStorageSync('dictData')
+    // 房屋面积
+    const { houseAreaCur } = this.state
+    const house_area = dictData.house_area || []
+    const houseAreaViews = house_area.map(item =>{
+      let curClassName = "mp-op"
+      houseAreaCur.forEach(curVal =>{
+        if (curVal === item.val) {
+          curClassName = "mp-op cur"
+        }
+      })
+      return (
+        <View className={curClassName} key={item.val} onClick={this.comSelectHandle.bind(this, item, 'houseAreaCur')}>{item.key}</View>
+      )
+    })
+    const houseAreaAllClassName = houseAreaCur.length === 0 ? 'mp-op cur' : 'mp-op'
+    // 产品类型
+    const { productTypeCur } = this.state
+    const product_type = dictData.product_type || []
+    const productTypeViews = product_type.map(item =>{
+      let curClassName = "mp-op"
+      productTypeCur.forEach(curVal =>{
+        if (curVal === item.val) {
+          curClassName = "mp-op cur"
+        }
+      })
+      return (
+        <View className={curClassName} key={item.val} onClick={this.comSelectHandle.bind(this, item, 'productTypeCur')}>{item.key}</View>
+      )
+    })
+    const productTypeAllClassName = productTypeCur.length === 0 ? 'mp-op cur' : 'mp-op'
+    return (
+      <View className="more-pane">
+        <View className="mp-item">
+          <View className="mp-title">房源面积</View>
+          <View className="mp-content">
+            <View className={houseAreaAllClassName} onClick={this.comSelectHandle.bind(this, 'all', 'houseAreaCur')}>不限</View>
+            {houseAreaViews}
+          </View>
+        </View>
+        <View className="mp-item">
+          <View className="mp-title">产品类型</View>
+          <View className="mp-content">
+            <View className={productTypeAllClassName} onClick={this.comSelectHandle.bind(this, 'all', 'productTypeCur')}>不限</View>
+            {productTypeViews}
+          </View>
+        </View>
+      </View>
+    )
+  }
+  comSelectHandle (curOp, str) {
+    if (curOp === 'all') {
+      this.setState({
+        [str]: []
+      })
+    } else {
+      const state = this.state
+      let curStr = state[str]
+      let ed = false
+      let curI = 0
+      curStr.forEach((item, index) => {
+        if (curOp.val === item) {
+          ed = true
+          curI = index
+        }
+      })
+      if (ed) {
+        curStr.splice(curI, 1)
+      } else {
+        curStr.push(curOp.val)
+      }
+      this.setState({
+        [str]: curStr
+      })
+    }
+  }
+
+
+  renderTop () {
+    const { searchIndex, searchText1, searchText5, searchText3, searchText4 } = this.state
+    const { estate_name } = this.$router.params
+    return (
+      <View className="l-search-top t2">
+        <View className="st-nav">
+          {
+            estate_name
+            ?
+            <View className="stn-op col-3 cur">
+              <View className="stn-label t2">{estate_name}</View>
+            </View>
+            :
+            <View className={(searchIndex === 5 || searchText5) ? 'stn-op col-4 cur' : 'stn-op col-4'} onClick={this.searchNavHandle.bind(this, 5)}>
+              <View className="stn-label">{searchText5 || '楼盘'}</View>
+              <View className="stn-sign"></View>
+            </View>
+          }
+          <View className={(searchIndex === 1 || searchText1) ? 'stn-op col-4 cur' : 'stn-op col-4'} onClick={this.searchNavHandle.bind(this, 1)}>
+            <View className="stn-label">{searchText1 || '区域'}</View>
+            <View className="stn-sign"></View>
+          </View>
+          <View className={(searchIndex === 3 || searchText3) ? 'stn-op col-4 cur' : 'stn-op col-4'} onClick={this.searchNavHandle.bind(this, 3)}>
+            <View className="stn-label">{searchText3 || '户型'}</View>
+            <View className="stn-sign"></View>
+          </View>
+          <View className={(searchIndex === 4 || searchText4) ? 'stn-op col-4 cur' : 'stn-op col-4'} onClick={this.searchNavHandle.bind(this, 4)}>
+            <View className="stn-label">{searchText4 || '更多'}</View>
+            <View className="stn-sign"></View>
+          </View>
+        </View>
+        <View className={searchIndex > 0 ? searchIndex === 4 ? 'st-content show more' : 'st-content show' : 'st-content'}>
+          {
+            searchIndex === 1
+            &&
+            this.searchIndex1Render()
+          }
+          {
+            searchIndex === 3
+            &&
+            this.searchIndex3Render()
+          }
+          {
+            searchIndex === 4
+            &&
+            this.searchIndex4Render()
+          }
+          <View className="l-floor-footer t2">
+            <View className="lff-flex">
+              <View className="lff-btn t3" onClick={this.resetHandle.bind(this)} >重置</View>
+              <View className="lff-btn" onClick={this.saveHandle.bind(this)}>搜索</View>
+            </View>
+          </View>
+        </View>
+      </View>
+    )
+  }
+  searchNavHandle (index) {
+    if (index === 5) {
+      this.openMSPopup()
+      return
+    }
+    let { searchIndex } = this.state
+    searchIndex = index === searchIndex ? -1 : index
+    this.setState({
+      searchIndex
+    })
+  }
+  resetHandle () {
+    const { searchIndex } = this.state
+    if (searchIndex === 1) {
+      this.setState({
+        searchText1: '',
+        curPos: 'area_type',
+      })
+    }
+    if (searchIndex === 3) {
+      this.setState({
+        searchText3: '',
+        curHouseTypeRange: [],
+      })
+    }
+    if (searchIndex === 4) {
+      this.setState({
+        searchText4: '',
+        houseAreaCur: [],
+        productTypeCur: [],
+      })
+    }
+  }
+  saveHandle () {
+    const dictData = Taro.getStorageSync('dictData')
+    const {
+      searchIndex,
+      curAreaType,
+      curHouseTypeRange,
+      houseAreaCur,
+      productTypeCur,
+    } = this.state
+    if (searchIndex === 1) {
+      let tagArr = []
+      curAreaType.forEach(v => {
+        tagArr.push(arrToObj(dictData.area_type)[v])
+      })
+      if (tagArr) {
+        this.setState({
+          searchText1: tagArr.join(',')
+        })
+      }
+    }
+    if (searchIndex === 3) {
+      let tagArr = []
+      curHouseTypeRange.forEach(v => {
+        tagArr.push(arrToObj(dictData.house_type)[v])
+      })
+      if (tagArr) {
+        this.setState({
+          searchText3: tagArr.join(',')
+        })
+      }
+    }
+    if (searchIndex === 4) {
+      let tagArr = []
+      houseAreaCur.forEach(v => {
+        tagArr.push(arrToObj(dictData.house_area)[v])
+      })
+      productTypeCur.forEach(v => {
+        tagArr.push(arrToObj(dictData.product_type)[v])
+      })
+      if (tagArr) {
+        this.setState({
+          searchText4: tagArr.join(',')
+        })
+      }
+    }
+    this.setState({
+      page: 1,
+      searchIndex: -1,
+    }, () => {
+      this.getDataList()
+    })
+  }
+
+
+
+
+
+  openMSPopup (e) {
+    this.setState({
+      isEstateShow: true,
+      searchIndex: -1,
+    })
+  }
+  dealMSPopup (curVal, curCheckedArr) {
+    this.closeMSPopup()
+    if (curVal && curCheckedArr) {
+      const nameArr = curCheckedArr.map(item =>{
+        return item.estate_name
+      })
+      this.setState({
+        estateIdCur: curVal,
+        searchText5: nameArr.join(','),
+        page: 1,
+      }, () => {
+        this.getDataList()
+      })
+    } else {
+      this.setState({
+        estateIdCur: [],
+        searchText5: '',
+      })
+    }
+  }
+  closeMSPopup () {
+    this.setState({
+      isEstateShow: false,
+    })
+  }
+
+
+
+
+
+
+
+  getDataList () {
+    let { page_size, page, dataList, isListEmpty } = this.state
+    const { searchKey } = this.state
+    const {
+      curAreaType,
+      curHouseTypeRange,
+      houseAreaCur,
+      productTypeCur,
+      estateIdCur,
+    } = this.state
+    let apiStr = 'apieshousesoldlist'
+    let params = {
+      page,
+      page_size,
+      title: searchKey,
+      area_type: curAreaType.join(','),
+      house_type: curHouseTypeRange.join(','),
+      house_area: houseAreaCur.join(','),
+      product_type: productTypeCur.join(','),
+      estate_id: estateIdCur.join(','),
+      is_sold: 1,
+    }
+    Taro.api.room[apiStr](params).then(res => {
+      const curData = res.list || []
+      let isListEnd = false
+      if (curData.length > 0) {
+        if (page === 1) {
+          dataList = curData
+        } else {
+          dataList = dataList.concat(curData)
+        }
+        if (curData.length === page_size && res.total !== curData.length) {
+          isListEnd = false
+        } else {
+          isListEnd = true
+        }
+      }
+      if (curData.length === 0 && page === 1) {
+        isListEmpty = true
+        dataList = []
+      } else {
+        isListEmpty = false
+      }
+      this.setState({
+        dataList,
+        isListEnd,
+        isListEmpty,
+        isListLoading: false
+      })
+    })
+  }
+  onScrollToLower (e) {
+    let { isListEnd, isListLoading, page } = this.state
+    if (!isListEnd && !isListLoading) {
+      page++
+      this.setState({
+        page,
+        isListLoading: true
+      }, () => {
+        this.getDataList()
+      })
+    }
+  }
+
+  renderList () {
+    const { dataList, isListEnd, isListLoading, isListEmpty } = this.state
+    const itemsList = dataList.map((item, index) => {
+      let FHstr = '未知楼层'
+      if (item.floor) {
+        const FH = Number(item.floor) || 1
+        const H = Number(item.storeys) || 1
+        if (FH > H * 0.6666) {
+          FHstr = '中高层'
+        } else if (FH > H * 0.33333) {
+          FHstr = '中楼层'
+        } else {
+          FHstr = '中低层'
+        }
+        if (FH === 1) FHstr = '一楼'
+        if (FH === H) FHstr = '顶楼'
+      }
+      const cTagStr = item.custom_tag || ''
+      const tagViews = cTagStr.split(',').map((tag, tagIndex) => {
+        return (
+          <View className="s" key={tagIndex}>{tag}</View>
+        )
+      })
+      return (
+        <View className="lhl-item col-1" key={index} onClick={this.linkHandle.bind(this, item)}>
+          <View className="lhl-img">
+            <Image src={item.pri_image + '_xs'} className="img" />
+          </View>
+          <View className="lhl-info">
+            <View className="lhl-p1">{item.title}</View>
+            <View className="lhl-p2">{item.price}万
+              <View className="sub">单价:{parseInt(item.price * 10000 / item.area)}元/平</View>
+            </View>
+            <View className="lhl-p3">{FHstr}-{item.estate_name}</View>
+            <View className="lhl-sign">
+              {tagViews}
+            </View>
+          </View>
+        </View>
+      )
+    })
+    return (
+      <ScrollView
+        className='l-scroll-view'
+        scrollY
+        scrollWithAnimation
+        scrollTop="0"
+        lowerThreshold="30"
+        onScrollToLower={this.onScrollToLower.bind(this)}
+      >
+        <View className="l-house-list">
+          {itemsList}
+        </View>
+        <ListMore isListEnd={isListEnd} isListLoading={isListLoading} isListEmpty={isListEmpty} />
+      </ScrollView>
+    )
+  }
+
+
+  linkHandle (item) {
+    Taro.navigateTo({
+      url: `/pagesRoom/dtl?id=${item.id}`
+    })
+    // const appUserInfo = Taro.getStorageSync('APP_userInfo')
+    // if (appUserInfo.is_sale == 1) {
+    //   Taro.navigateTo({
+    //     url: `/pagesMore/center/uploadRoom2?id=${item.id}`
+    //   })
+    // } else {
+    //   Taro.navigateTo({
+    //     url: `/pagesRoom/dtl?id=${item.id}`
+    //   })
+    // }
+  }
+
+  render () {
+    const { estateIdCur, isEstateShow } = this.state
+    const { estate_id } = this.$router.params
+    const estateMoreOptions = {skey: 'estate_name', api: `room.apiestatehouselist`, opKey: 'estate_name', opVal: 'estate_id'}
+    return (
+      <View className="l-box">
+        {this.renderSearch()}
+        {this.renderTop()}
+        {this.renderList()}
+        {
+          estate_id
+          ?
+          ''
+          :
+          <MultiSelect val={estateIdCur} moreOptions={estateMoreOptions} isShow={isEstateShow} initUpdate="no" bc={this.dealMSPopup.bind(this)} close={this.closeMSPopup.bind(this)}/>
+        }
+      </View>
+    )
+  }
+}
+
+export default Index

+ 24 - 0
src/pagesRoom/listed.scss

@@ -0,0 +1,24 @@
+@import '@css/mixin.scss';
+@import '@css/house-list.scss';
+@import '@css/search-top.scss';
+.l-box {
+  padding-top: calc(84px + 90px);
+}
+.l-scroll-view {
+  height: calc(100vh - 84px - 90px);
+  box-sizing: border-box;
+}
+.scoped-fixed {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  z-index: 99;
+  background-color: #fff;
+}
+
+
+.lhl-info {
+  width: 300px;
+}
+