houseManage.jsx 5.9KB

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