houseManage.jsx 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import Taro, { useDidShow } from '@tarojs/taro'
  2. import { View, Image } from '@tarojs/components';
  3. import see from '@/assets/icons/landlord/lookPerson.png'
  4. import share from '@/assets/icons/landlord/shareLink.png'
  5. import del from '@/assets/icons/landlord/delete.png'
  6. import addImg from '@/assets/icons/landlord/add.png'
  7. import copyRoom from '@/assets/icons/landlord/copyroom.png'
  8. import React, { useState, useEffect, useRef, useImperativeHandle, useMemo } from 'react'
  9. import { getRoomList, saveRoom, deleteRoom } from '@/services/landlord'
  10. import cutoverUser from '@/assets/icons/UserCenter/cutoverUser.png'
  11. import ToggleRole from '@/components/toggleRole/ToggleRole'
  12. import List from '@/components/List';
  13. import Picker from '@/components/Picker'
  14. import SearchBar from '@/components/SearchBar'
  15. import ShareRoom from '../shareRoom/ShareRoom.jsx'
  16. import ShareCard from '../shareCard/shareCard'
  17. import './houseManage.less'
  18. export default React.forwardRef((props, ref) => {
  19. const { hotel, hotelList, onHotelChange } = props
  20. const [detail, setDetail] = useState([])
  21. const fetchAPI = useMemo(() => hotel.hotelId ? () => getRoomList({ hotelId: hotel.hotelId }) : undefined, [hotel?.hotelId])
  22. const queryParams = useMemo(() => ({}), [])
  23. const shareDataRef = useRef()
  24. // 判断是否首次加载
  25. const mounted = useRef(false)
  26. const handelClick = () => {
  27. Taro.navigateTo({ url: `/hotel/pages/landlord/addRoom/addRoom?hotelId=${hotel.hotelId}&hotelName=${hotel.hotelName}` });
  28. }
  29. const handelDelete = (val) => {
  30. Taro.showModal({
  31. title: '提示',
  32. content: `确认删除${val.roomName}?`,
  33. success: function (res) {
  34. if (res.confirm) {
  35. deleteRoom(val.roomId).then(() => {
  36. Taro.showToast({
  37. title: '删除房源成功',
  38. icon: 'none',
  39. })
  40. getRoomList({ hotelId: hotel.hotelId }).then((res) => {
  41. setDetail(res.records || [])
  42. })
  43. })
  44. }
  45. }
  46. })
  47. }
  48. const handelDetail = (val) => {
  49. Taro.navigateTo({ url: `/hotel/pages/landlord/addRoom/addRoom?hotelId=${hotel.hotelId}&hotelName=${hotel.hotelName}&roomId=${val.roomId}` });
  50. }
  51. const [showCutover, setShowCutover] = useState(false)
  52. const [showCard, setShowCard] = useState(false)
  53. const [room, setRoom] = useState({})
  54. const ShowMoldeOn = (room) => {
  55. setRoom(room)
  56. setShowCutover(true)
  57. }
  58. const onClose = () => {
  59. setShowCutover(false)
  60. }
  61. const onClose2 = () => {
  62. setShowCard(false)
  63. }
  64. //切换民宿
  65. const handleHotelChange = (hotelId, current) => {
  66. onHotelChange(current)
  67. }
  68. useEffect(() => {
  69. //首次加载页面时
  70. if (!mounted.current && hotel.hotelId) {
  71. getRoomList({ hotelId: hotel.hotelId }).then((res) => {
  72. setDetail(res.records || [])
  73. mounted.current = true
  74. })
  75. }
  76. }, [hotel?.hotelId])
  77. //当前页面切换到前台时
  78. useDidShow(() => {
  79. if (mounted.current) {
  80. getRoomList({ hotelId: hotel.hotelId }).then((res) => {
  81. setDetail(res.records || [])
  82. })
  83. }
  84. })
  85. //分享房源
  86. useImperativeHandle(ref, () => ({
  87. getShareMessage: () => {
  88. const { shareImage, roomOrderId } = shareDataRef.current
  89. setShowCard(false)
  90. console.log(`/pages/index/index?tab=1&roomId=${room.roomId}&roomOrderId=${roomOrderId}&fromType=hotel&recommender=${hotel.hotelId}`)
  91. return {
  92. title: room.roomName,
  93. path: `/pages/index/index?tab=1&roomId=${room.roomId}&roomOrderId=${roomOrderId}&fromType=hotel&recommender=${hotel.hotelId}`,
  94. imageUrl: shareImage,
  95. }
  96. }
  97. }))
  98. const handleFinish = (val) => {
  99. shareDataRef.current = val
  100. setShowCutover(false)
  101. // 打开分享弹窗
  102. setShowCard(true)
  103. }
  104. //查看入住人
  105. const handelOrder = (val) => {
  106. Taro.navigateTo({ url: `/hotel/pages/landlord/roomOrder/roomOrder?roomId=${val.roomId}&roomName=${val.roomName}&hotelId=${hotel.hotelId}` });
  107. }
  108. const onSearch = (e) => {
  109. if (e.detail.value == '') {
  110. getRoomList({ hotelId: hotel.hotelId }).then((res) => {
  111. setDetail(res.records || [])
  112. })
  113. }
  114. else {
  115. getRoomList({ hotelId: hotel.hotelId, roomName: e.detail.value }).then((res) => {
  116. setDetail(res.records || [])
  117. })
  118. }
  119. }
  120. const handelCopy = (e, val) => {
  121. //阻止冒泡不允许执行父元素的点击事件
  122. e.stopPropagation()
  123. // detail.map((item,index)=>{
  124. // if (item.roomId==val.roomId) {
  125. // console.log(index)
  126. // }
  127. // })
  128. saveRoom({ ...val, roomId: null, roomName: val.roomName + '复制' }).then((res) => {
  129. getRoomList({ hotelId: hotel.hotelId }).then((res) => {
  130. setDetail(res.records || [])
  131. })
  132. })
  133. }
  134. const [showCutover3, setShowCutover3] = useState(false)
  135. const ShowMoldeOn3 = () => {
  136. setShowCutover3(true)
  137. }
  138. const onClose3 = () => {
  139. setShowCutover3(false)
  140. }
  141. return (
  142. <view>
  143. <view style={{ padding: '0 30rpx', height: '100%' }}>
  144. <ToggleRole role='hotel' showCutover={showCutover3} maskClosable={showCutover3} onClose={onClose3} />
  145. <View>
  146. <view className='storeName'>店名:<Picker style={{ display: 'inline-block' }} placeholder="请选择民宿" value={hotel?.hotelId} kv={['hotelName', 'hotelId']} dicts={hotelList} onChange={handleHotelChange} /></view>
  147. <view onClick={ShowMoldeOn3} className='User-info-cutover'>
  148. <image className='User-info-cutover-image' src={cutoverUser} />
  149. </view>
  150. </View>
  151. <SearchBar placeholder='请输入房源名搜索' onBlur={onSearch} />
  152. <ShareRoom showCutover={showCutover} onClose={onClose} room={room} onFinish={handleFinish} />
  153. <ShareCard showCutover={showCard} onClose={onClose2} />
  154. <List
  155. style={{ height: 'calc(100vh - 290px)' }}
  156. request={fetchAPI}
  157. params={queryParams}
  158. onDataChange={setDetail}
  159. noData="暂无房源信息"
  160. >
  161. <view className='waterfall'>
  162. {
  163. detail.map((item, index) =>
  164. <view className='houseCard' key={index}>
  165. <View className='houseName' onClick={() => handelDetail(item)}>{item.roomName || ''}<Image src={copyRoom} onClick={(e) => handelCopy(e, item)} /></View>
  166. <view className='operation'>
  167. <view onClick={() => handelOrder(item)}><image src={see} />查看入住人</view>
  168. <view onClick={() => ShowMoldeOn(item)}><image src={share} />分享链接</view>
  169. <view onClick={() => handelDelete(item)}><image src={del} />删除房源</view>
  170. </view>
  171. </view>)
  172. }
  173. </view>
  174. </List>
  175. </view>
  176. <view className='addHouse' onClick={handelClick}>
  177. <image className='addImg' src={addImg} />添加房源
  178. </view>
  179. </view>
  180. )
  181. })