230320a303 1 year ago
parent
commit
2eb3420925

+ 3 - 0
src/api/room.js

@@ -78,6 +78,9 @@ export default {
   apieshousesold: params => { // 二手房 房源 设置已出售
     return request('/api/eshouse/sold', params, 'loading')
   },
+  apieshouserecordlist: params => { // 二手房 房源 房源跟进列表
+    return request('/api/eshouse/record/list', params, 'loading')
+  },
   apirenthouselist: params => { // 二手房 出租 列表
     return request('/api/rent/house/list', params, 'loading')
   },

+ 1 - 0
src/app.jsx

@@ -153,6 +153,7 @@ class App extends Component {
           // 'card/index',
           'follow/list',
           'follow/user',
+          'follow/room',
           'follow/add',
           'follow/history',
           'follow/lineup',

+ 22 - 7
src/pagesMore/center/uploadRoom2.jsx

@@ -37,6 +37,7 @@ class Index extends Component {
       formObj: {
         hide_status: '1',
       },
+      dtlObj: {},
       imgArr: [],
       cutImgTempUrl: '',
       cutImgShow: false,
@@ -63,6 +64,7 @@ class Index extends Component {
           title: cObj.sale_user.sale_name + '-编辑房源'
         })
         this.setState({
+          dtlObj: cObj,
           formObj: {
             id: cObj.id,
             hide_status: cObj.hide_status || '1',
@@ -83,6 +85,7 @@ class Index extends Component {
             owner_phone: cObj.owner_phone || '',
             introduce: cObj.introduce || '',
             remarked: cObj.remarked || '',
+            record: cObj.record || '',
             pri_image: cObj.pri_image || '',
             house_img: cObj.house_img || '',
             position: cObj.position || '',
@@ -119,7 +122,7 @@ class Index extends Component {
 
 
   saveHandle (pStr) {
-    const { formObj, imgArr, addr1, addr2, addr3, hType1, hType2, hType3, sRate1, sRate2 } = this.state
+    const { formObj, imgArr, addr1, addr2, addr3, hType1, hType2, hType3, sRate1, sRate2, dtlObj } = this.state
     let house_no = ''
     if (addr1 && addr2 && addr3) {
       house_no = `${addr1}-${addr2}-${addr3}`
@@ -157,6 +160,7 @@ class Index extends Component {
       owner_phone: formObj.owner_phone,
       introduce: formObj.introduce,
       remarked: formObj.remarked,
+      record: formObj.record,
       hide_status: formObj.hide_status,
       pri_image: formObj.pri_image,
       house_img: formObj.house_img,
@@ -171,8 +175,9 @@ class Index extends Component {
     if (formObj.id) {
       apiStr = 'apieshouseedit'
       params.id = formObj.id
+      params.estate_id = dtlObj.estate_id
     }
-    if (formObj.estate_id && formObj.title && formObj.pri_image) {
+    if (params.estate_id && params.title && params.pri_image) {
       Taro.api.room[apiStr](params).then(res => {
         Taro.$msgConfirm('操作成功', () => {
           Taro.navigateBack({
@@ -185,9 +190,9 @@ class Index extends Component {
         })
       })
     } else {
-      if (!formObj.estate_id) Taro.$msg('楼盘必填')
-      if (!formObj.title) Taro.$msg('标题必填')
-      if (!formObj.pri_image) Taro.$msg('封面图必填')
+      if (!params.estate_id) Taro.$msg('楼盘必填')
+      if (!params.title) Taro.$msg('标题必填')
+      if (!params.pri_image) Taro.$msg('封面图必填')
     }
   }
 
@@ -496,7 +501,7 @@ class Index extends Component {
 
   render () {
     const {id} = this.$router.params
-    const { formObj, imgArr } = this.state
+    const { formObj, imgArr, dtlObj } = this.state
     const dictData = Taro.getStorageSync('dictData')
     const roomDecMoreOptions = {arr: dictData.room_dec}
     const houseRoomYearMoreOptions = {arr: dictData.house_room_year}
@@ -528,7 +533,7 @@ class Index extends Component {
           formObj.estate_name
           ?
           <View className="l-floor-pos2">
-            <Navigator url={`/pagesHouse/indexDtl?id=${formObj.estate_id}`} className='scoped-estate-name'>{formObj.estate_name}{'>'}</Navigator>
+            <Navigator url={`/pagesHouse/indexDtl?id=${dtlObj.estate_id}`} className='scoped-estate-name'>{dtlObj.estate_name}{'>'}</Navigator>
             <LFormGroup
               val={formObj.estate_id}
               valStr="estate_id"
@@ -834,6 +839,16 @@ class Index extends Component {
             placeholder='仅编辑查看,房源内部备注信息(300字以内)'
           />
         </View>
+        <View className="scoped-box">
+          <View className="sb-title">跟进记录备注</View>
+          <AtTextarea
+            value={formObj.record}
+            onChange={this.baseFormChange.bind(this, 'record')}
+            maxLength={300}
+            height={200}
+            placeholder='单次业务员跟进的备注,跟进记录中展示'
+          />
+        </View>
         <View className="l-floor-footer t2">
           <View className="lff-flex">
             <View className="lff-btn full" onClick={this.saveHandle.bind(this)}>提交</View>

+ 8 - 1
src/pagesRoom/dtl.jsx

@@ -1,5 +1,5 @@
 import Taro, { Component } from '@tarojs/taro'
-import { View, Swiper, SwiperItem } from '@tarojs/components'
+import { View, Swiper, SwiperItem, Navigator } from '@tarojs/components'
 import { AtCurtain } from 'taro-ui'
 import { arrToObj } from '@utils'
 import Rooms from './components/dtl/rooms'
@@ -281,10 +281,17 @@ class Index extends Component {
       houseTypeStr = `${arr[0]}室${arr[1]}厅${arr[2]}卫`
     }
     const stairsRateArr = curObj.stairs_rate ? curObj.stairs_rate.split('-') : []
+
+    const appUserInfo = Taro.getStorageSync('APP_userInfo')
     return (
       <View className="scoped-main">
         {/* {this.renderQrcode()} */}
         <View className="sm-tags">
+          {
+            appUserInfo.is_sale == 1
+            ? <Navigator url={`/pagesRoom/follow/room?id=${curObj.id}`} className="s s2">跟进记录</Navigator>
+            : ''
+          }
           {
             tagArr.map((tag, tI) => {
               return (

+ 4 - 0
src/pagesRoom/dtl.scss

@@ -137,6 +137,10 @@ page {
       margin-right: 20px;
       margin-bottom: 10px;
       padding: 4px 6px;
+      &.s2 {
+        color: #fff;
+        background: #13CE66;
+      }
     }
   }
   .sm-title {

+ 198 - 0
src/pagesRoom/follow/room.jsx

@@ -0,0 +1,198 @@
+import Taro, { Component } from '@tarojs/taro'
+import { View, Image } from '@tarojs/components'
+import { AtTimeline } from 'taro-ui'
+
+import ListMore from '@/c/pageDataList/listMore'
+import './room.scss'
+import { arrToObj } from '@utils'
+
+class Index extends Component {
+
+  constructor (props) {
+    super(props)
+    const {id: curId} = this.$router.params
+    this.state = { 
+      curId,
+      roomObj: {},       
+      page_size: 10,
+      page: 1,
+      isListEnd: false,
+      isListLoading: false,
+      isListEmpty: false,
+      dataList: [],
+      curObj: {},
+      userInfoObj: {},
+    }
+  }
+
+  config = {
+    navigationBarTitleText: '房源跟进记录',
+  }
+
+  componentWillUnmount () {
+  }
+
+  componentWillMount () {
+    Taro.$AHU(this)
+    const { curId } = this.state
+    Taro.api.room.apieshousedetail({id: curId}).then(res => {
+      this.setState({ roomObj: res || '' })
+    })
+    this.getDataList()
+  }
+
+  componentDidShow () { }
+
+  componentDidHide () { }
+
+  resetData = () => {
+    this.setState({
+      page: 1
+    }, () => {
+      this.getDataList()
+    })
+  }
+
+  getDataList () {
+    let { page_size, page, dataList, isListEmpty } = this.state
+    let params = {
+      page,
+      page_size,
+    }
+    const { curId } = this.state
+    if (curId) {
+      params.es_house_id = curId
+    }
+    Taro.api.room.apieshouserecordlist(params).then(res => {
+      console.log(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.follow_list.total !== curData.length) {
+          isListEnd = false
+        } else {
+          isListEnd = true
+        }
+      }
+      if (curData.length === 0 && page === 1) {
+        isListEmpty = true
+        dataList = []
+      } else {
+        isListEmpty = false
+      }
+      dataList.map(dItem => {
+        dItem.title = `${dItem.sale_name}:${dItem.remark}`
+        dItem.content = [dItem.create_at]
+        dItem.icon = 'check-circle'
+      })
+      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
+    return (
+      <ScrollView
+        className='l-scroll-view'
+        scrollY
+        scrollWithAnimation
+        scrollTop="0"
+        lowerThreshold="30"
+        onScrollToLower={this.onScrollToLower.bind(this)}
+      >
+        <View className="scoped-list">
+          <AtTimeline 
+            pending 
+            items={dataList}
+          >
+          </AtTimeline>
+        </View>
+        <ListMore isListEnd={isListEnd} isListLoading={isListLoading} isListEmpty={isListEmpty} />
+      </ScrollView>
+    )
+  }
+
+
+  renderTop () {
+    const { roomObj } = this.state
+    const saleUser = roomObj.sale_user || {}
+    const bg = require('./img/bg_1.jpg')
+    const phoneIcon = require('./img/bg_tel.png')
+    return (
+      <View className="scoped-top">
+        <Image className="st-bg" src={bg}></Image>
+        <View className="st-wrap">
+          <View className="p1">{roomObj.title}</View>
+          <View className="p2" onClick={this.callHandle.bind(this, saleUser.sale_phone)}>
+           <Image className="i" src={phoneIcon}></Image>
+            {saleUser.sale_phone}[{saleUser.sale_name}]
+          </View>
+          <View className="p3">{saleUser.create_at}</View>
+          {/* <Image className="st-img" onClick={this.copyHandle.bind(this)} src={roomObj.avatar}></Image> */}
+        </View>
+      </View>
+    )
+  }
+
+ 
+  copyHandle () {
+    const { userInfoObj } = this.state
+    Taro.setClipboardData({
+      data: userInfoObj.phone,
+      success: function (res) {
+        Taro.getClipboardData({
+          success: function (res) {
+            console.log(res.data)
+          }
+        })
+      }
+    })
+  }
+
+  callHandle (phoneNumber) {
+    Taro.makePhoneCall({
+      phoneNumber
+    })
+  }
+
+  linkTo (url) {
+    const { userInfoObj } = this.state
+    const { uId } = this.$router.params
+    Taro.navigateTo({
+      url: `${url}?uId=${uId}&uName=${userInfoObj.nickname}&uPhone=${userInfoObj.phone}`
+    })
+  }
+
+  render () {
+    return (
+      <View className="l-box">
+        {this.renderTop()}
+        {this.renderList()}
+      </View>
+    )
+  }
+}
+
+export default Index

+ 81 - 0
src/pagesRoom/follow/room.scss

@@ -0,0 +1,81 @@
+@import '@css/mixin.scss';
+.l-box {
+  padding-top: calc(340px);
+}
+.l-scroll-view {
+  height: calc(100vh - 340px);
+  box-sizing: border-box;
+}
+.scoped-top {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 340px;
+  .st-bg {
+    width: 750px;
+    height: 240px;
+  }
+  .st-wrap {
+    position: absolute;
+    top: 90px;
+    left: 20px;
+    width: 710px;
+    height: 220px;
+    background: #fff;
+    z-index: 2;
+    border-radius: 20px;
+    box-shadow: 0 0 10px #ccc;
+    padding: 20px;
+    box-sizing: border-box;
+    .p1 {
+      font-size: 30px;
+      color: #313131;
+      padding-bottom: 10px;
+      font-weight: bold;
+    }
+    .p2 {
+      font-size: 28px;
+      font-weight: bold;
+      color: #369af7;
+      .i {
+        width: 26px;
+        height: 26px;
+        display: inline-block;
+        vertical-align: text-bottom;
+        margin-bottom: 4px;
+      }
+    }
+    .p3 {
+      font-size: 26px;
+      color: #999;
+    }
+    .st-img {
+      position: absolute;
+      top: 20px;
+      right: 20px;
+      width: 92px;
+      height: 92px;
+      border-radius: 50%;
+    }
+    .more {
+      margin-top: 20px;
+      border-top: 1PX solid #f7f7f7;
+      padding-top: 20px;
+      .b {
+        display: inline-block;
+        vertical-align: middle;
+        width: 164px;
+        height: 44px;
+        margin-right: 20px;
+        &.t2 {
+          width: 208px;
+        }
+      }
+    }
+  }
+}
+.scoped-list {
+  padding: 10px 30px;
+}
+