news.jsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import Taro, { Component } from '@tarojs/taro'
  2. import { View, Image } from '@tarojs/components'
  3. import ListMore from '@/c/pageDataList/listMore'
  4. import './news.scss'
  5. class Index extends Component {
  6. onShareAppMessage() {
  7. const {id, name} = this.$router.params
  8. return {
  9. title: `${name}-楼盘动态`,
  10. path: `/pagesHouse/indexDtl?id=${id}&name=${name}`,
  11. }
  12. }
  13. onShareTimeline () {
  14. const {id, name} = this.$router.params
  15. return {
  16. title: `${name}-楼盘动态`,
  17. path: `/pagesHouse/indexDtl?id=${id}&name=${name}`,
  18. }
  19. }
  20. constructor (props) {
  21. super(props)
  22. this.state = {
  23. page_size: 10,
  24. page: 1,
  25. isListEnd: false,
  26. isListLoading: false,
  27. isListEmpty: false,
  28. dataList: [],
  29. }
  30. }
  31. config = {
  32. navigationBarTitleText: '楼盘动态',
  33. }
  34. componentWillMount () {
  35. this.getDataList()
  36. }
  37. componentDidShow () { }
  38. componentDidHide () { }
  39. getDataList () {
  40. const {id: estate_id} = this.$router.params
  41. let { page_size, page, dataList, isListEmpty } = this.state
  42. Taro.api.house.apiestatenewslist({
  43. page,
  44. page_size,
  45. estate_id
  46. }).then(res => {
  47. const curData = res.list || []
  48. let isListEnd = false
  49. if (curData.length > 0) {
  50. if (page === 1) {
  51. dataList = curData
  52. } else {
  53. dataList = dataList.concat(curData)
  54. }
  55. if (curData.length === page_size && res.total !== curData.length) {
  56. isListEnd = false
  57. } else {
  58. isListEnd = true
  59. }
  60. }
  61. if (curData.length === 0 && page === 1) {
  62. isListEmpty = true
  63. dataList = []
  64. } else {
  65. isListEmpty = false
  66. }
  67. this.setState({
  68. dataList,
  69. isListEnd,
  70. isListEmpty,
  71. isListLoading: false
  72. })
  73. })
  74. }
  75. onScrollToLower (e) {
  76. let { isListEnd, isListLoading, page } = this.state
  77. if (!isListEnd && !isListLoading) {
  78. page++
  79. this.setState({
  80. page,
  81. isListLoading: true
  82. }, () => {
  83. this.getDataList()
  84. })
  85. }
  86. }
  87. renderTop () {
  88. const { name } = this.$router.params
  89. const bg = require('@img/images/bg_house.jpg')
  90. return (
  91. <View className="scoped-bg-top">
  92. <View className="sbt-wrap" onClick={this.urlDtlLink.bind(this)}>
  93. <View className="t">{name}</View>
  94. <Image src={bg} className="bg"></Image>
  95. </View>
  96. </View>
  97. )
  98. }
  99. urlDtlLink () {
  100. const { id } = this.$router.params
  101. Taro.navigateTo({url: '/pagesHouse/indexDtl?id=' + id})
  102. }
  103. renderList () {
  104. const exImg = require('@img/images/ex_banner.jpg')
  105. const { dataList, isListEnd, isListLoading, isListEmpty } = this.state
  106. const itemsList = dataList.map((item, index) => {
  107. const imgArr = (item.images || '').split(',')
  108. return (
  109. <View className="sl-item" key={index}>
  110. <View className="sl-info">
  111. <View className="sl-p1">{item.news_at}</View>
  112. <View className="sl-p2">{item.title}</View>
  113. <View className={item.isMoreAllShow ? 'sl-p3' : 'sl-p3s'}>{item.trends_cont}</View>
  114. {
  115. item.trends_cont.length > 50
  116. ?
  117. item.isMoreAllShow
  118. ?
  119. <View className="sl-more t2" onClick={this.changeMoreHandle.bind(this, index)}>收起
  120. <View className="sign"></View>
  121. </View>
  122. :
  123. <View className="sl-more" onClick={this.changeMoreHandle.bind(this, index)}>全文
  124. <View className="sign"></View>
  125. </View>
  126. : ''
  127. }
  128. {
  129. item.images
  130. &&
  131. <View className="sl-img">
  132. {
  133. imgArr.map((img, imgIndex) => {
  134. return (
  135. <Image className="img" src={img + '_xs'} key={imgIndex} onClick={this.previewImageHandle.bind(this, img, imgArr)} />
  136. )
  137. })
  138. }
  139. </View>
  140. }
  141. </View>
  142. <View className="sl-footer">
  143. <Image className="img" src={item.avatar} />
  144. <View className="t">洪楼Plus</View>
  145. </View>
  146. </View>
  147. )
  148. })
  149. return (
  150. <ScrollView
  151. className='l-scroll-view'
  152. scrollY
  153. scrollWithAnimation
  154. scrollTop="0"
  155. lowerThreshold="30"
  156. onScrollToLower={this.onScrollToLower.bind(this)}
  157. >
  158. <View className="scoped-list">
  159. {itemsList}
  160. </View>
  161. <ListMore isListEnd={isListEnd} isListLoading={isListLoading} isListEmpty={isListEmpty} />
  162. </ScrollView>
  163. )
  164. }
  165. previewImageHandle (cur, arr) {
  166. const current = `${cur}_plus`
  167. const urls = arr.map(item => {
  168. return `${item}_plus`
  169. })
  170. Taro.previewImage({
  171. current,
  172. urls
  173. })
  174. }
  175. changeMoreHandle (index) {
  176. const { dataList } = this.state
  177. let mList = dataList || []
  178. mList.map((item, i) => {
  179. if (index === i) item.isMoreAllShow = !item.isMoreAllShow
  180. })
  181. this.setState({
  182. dataList: [...mList]
  183. })
  184. }
  185. render () {
  186. return (
  187. <View className="l-box">
  188. {this.renderTop()}
  189. {this.renderList()}
  190. </View>
  191. )
  192. }
  193. }
  194. export default Index