addRoom.jsx 10.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. import withLayout from '@/layouts'
  2. import Taro, { useDidShow } from '@tarojs/taro'
  3. import CustomNav from '@/components/CustomNav'
  4. import { View, Input, Button, Label, Textarea, Text, Image } from '@tarojs/components';
  5. import { useEffect, useState } from "react"
  6. import { saveRoom, getRoomDetail, updateRoom } from '@/services/landlord'
  7. import GPS from '@/assets/icons/GuideCheck/GPS.png'
  8. import { getExtendContent } from "@/services/home";
  9. import { saveExtend } from '@/services/landlord'
  10. //export default是导出模块的 export也是导出模块的 如果引用时不加{}就是引用默认模块加了就是引用相应的模块
  11. import { uploadFile } from '@/utils/request'
  12. import Popup from '@/components/Popup'
  13. import Extend from "../../components/Extend";
  14. import './addRoom.less'
  15. export default withLayout((props) => {
  16. const { hotelId, hotelName, roomId } = props.router.params
  17. const [roomModel, setRoomModel] = useState({
  18. hotelId,
  19. roomName: '',
  20. address: '',
  21. location: '',
  22. parkingAddress: '',
  23. parkingLocation: '',
  24. wifiName: '',
  25. wifiPassword: '',
  26. weight: '',
  27. locName: '',
  28. pkLocName: ''
  29. })
  30. const [paddress, setpAddress] = useState()
  31. const [wifiName, setwifiName] = useState()
  32. const onRoomMap = () => {
  33. Taro.chooseLocation().then((res) => {
  34. setRoomModel({ ...roomModel, location: res.longitude + ',' + res.latitude, locName: res.name, address: res.address })
  35. })
  36. }
  37. const onParkMap = () => {
  38. Taro.chooseLocation().then((res) => {
  39. setRoomModel({ ...roomModel, parkingLocation: res.longitude + ',' + res.latitude, pkLocName: res.name, parkingAddress: res.address })
  40. })
  41. }
  42. const sumbit = () => {
  43. if (
  44. roomModel.roomName != null &&
  45. roomModel.roomName != '' &&
  46. roomModel.address != null &&
  47. roomModel.address != '' &&
  48. roomModel.location != null &&
  49. roomModel.location != '' &&
  50. roomModel.weight != null &&
  51. roomModel.weight != ''
  52. ) {
  53. const seveices = roomId ? updateRoom : saveRoom
  54. seveices(roomModel, roomId).then(() => {
  55. Taro.showModal({
  56. title: roomId ? '修改成功' : '保存成功',
  57. showCancel: false
  58. }).then(() => {
  59. Taro.navigateBack()
  60. })
  61. })
  62. } else {
  63. Taro.showToast({
  64. title: '有必填项未填哦',
  65. icon: 'none',
  66. })
  67. }
  68. }
  69. const [extend, setExtend] = useState([]);
  70. useEffect(() => {
  71. if (roomId) {
  72. getRoomDetail(roomId).then((res) => {
  73. setRoomModel(res)
  74. setpAddress(res.parkingAddress)
  75. setwifiName(res.wifiName)
  76. })
  77. }
  78. }, [roomId])//这个地方写这个单词的目的是 因为编辑时roomId有可能还没加载成功
  79. const [reset, setReset] = useState(false)
  80. useEffect(() => {
  81. if (roomId) {
  82. getExtendContent('room', roomId, { pageSize: 999 }).then((res) => {
  83. setExtend(res.records || []);
  84. })
  85. setReset(false)
  86. }
  87. }, [reset])
  88. //新增文字
  89. const [showCutover, setShowCutover] = useState(false)
  90. const [cont, setcont] = useState('')
  91. const onClose = () => {
  92. setShowCutover(false)
  93. }
  94. //判断是否只有空 空格 回车
  95. const javaTrim = (str) => {
  96. for (var i = 0; (str.charAt(i) == ' ') && i < str.length; i++);
  97. if (i == str.length) return ''; //whole string is space
  98. var newstr = str.substr(i);
  99. for (var i = newstr.length - 1; newstr.charAt(i) == ' ' && i >= 0; i--);
  100. newstr = newstr.substr(0, i + 1);
  101. return newstr;
  102. }
  103. const handelAdd = () => {
  104. var content = document.getElementById('cont').value
  105. content = content.replace(/\n/g, '');
  106. if (javaTrim(content) == '') {
  107. Taro.showToast({
  108. title: '您还没有添加文字哦',
  109. icon: 'none'
  110. })
  111. return;
  112. }
  113. const date = {
  114. targetId: roomId,
  115. targetType: 'room',
  116. content,
  117. contentType: 'text'
  118. }
  119. saveExtend(date)
  120. setcont('')
  121. onClose()
  122. setReset(!reset)
  123. }
  124. const showText = () => {
  125. setShowCutover(true)
  126. setcont('')
  127. }
  128. const addImage = () => {
  129. Taro.chooseImage({
  130. count: 1,
  131. success: function (res) {
  132. uploadFile(res.tempFilePaths[0]).then((res2) => {
  133. const date = {
  134. targetId: roomId,
  135. targetType: 'room',
  136. content: res2,
  137. contentType: 'image'
  138. }
  139. saveExtend(date)
  140. setReset(!reset)
  141. })
  142. }
  143. })
  144. }
  145. const isError = (s) => {
  146. if (!s) { return true }
  147. else {
  148. // 根据,(逗号)进行分割
  149. let split = s.split(",");
  150. if (split.length != 2) {
  151. return true
  152. } else {
  153. if (!split[0] || !split[1]) {
  154. return true
  155. }
  156. }
  157. }
  158. return false
  159. }
  160. return (
  161. <view className='page-index'>
  162. <view className='index-navbar'>
  163. <CustomNav title={hotelName} />
  164. </view>
  165. <view className='roomDetail' style={{ height: '100%', overflow: "hidden", }} >
  166. <scroll-view scrollY style={{ height: '100%' }}>
  167. <View id='det'>
  168. <Popup show={showCutover} onClose={onClose}>
  169. <View className='editword'>
  170. <View style={{ marginBottom: '25px' }}>
  171. <View className='rzline' /><Label className='srl mg'>新增文字</Label><View className='rzline' />
  172. </View>
  173. <View>
  174. <Textarea className='storezn' id='cont' value={cont} placeholder='请输入准备新增的文字' />
  175. </View>
  176. <View>
  177. <Button className='cancel' onClick={onClose}>取消</Button>
  178. <Button className='btn' onClick={handelAdd}>确认增加</Button>
  179. </View>
  180. </View>
  181. </Popup>
  182. </View>
  183. <mp-form models={roomModel} >
  184. <mp-cells title='房屋名称' footer='' ext-class='cells' >
  185. <mp-cell>
  186. <Input style={{ fontWeight: 'bold' }} onInput={(e) => setRoomModel({ ...roomModel, roomName: e.detail.value })} value={roomModel.roomName} placeholder='请输入房屋名称(必填)' />
  187. </mp-cell>
  188. </mp-cells>
  189. <mp-cells title='房屋位置'>
  190. <mp-cell>
  191. <View className='roomloc'>
  192. <Label style={{ color: '#666', lineHeight: '30px' }} onClick={onRoomMap} >{roomModel.locName || '请选择定位'}</Label>
  193. <Textarea style={{ height: '60px', width: '100%' }} onInput={(e) => setRoomModel({ ...roomModel, address: e.detail.value })} value={roomModel.address} placeholder='请输入房屋位置(必填)' />
  194. <Label style={{ display: 'none' }} >{isError(roomModel.location) ? '房间定位(必填)' : roomModel.location}</Label>
  195. <Image className='location' src={GPS} onClick={onRoomMap} />
  196. </View>
  197. </mp-cell>
  198. </mp-cells>
  199. {
  200. paddress != '' ?
  201. <mp-cells title='停车场位置'>
  202. <mp-cell>
  203. <View className='roomloc'>
  204. <Label style={{ color: '#666', lineHeight: '30px' }} onClick={onParkMap}>{roomModel.pkLocName || '请选择定位'}</Label>
  205. <Textarea style={{ height: '60px', width: '100%' }} onInput={(e) => setRoomModel({ ...roomModel, parkingAddress: e.detail.value })} value={roomModel.parkingAddress} placeholder='请输入停车场位置' />
  206. <Label style={{ display: 'none' }}>{isError(roomModel.parkingLocation) ? '停车场定位' : roomModel.parkingLocation}</Label>
  207. <Image className='location' src={GPS} onClick={onParkMap} />
  208. </View>
  209. </mp-cell>
  210. </mp-cells> : null
  211. }
  212. {
  213. wifiName != '' ?
  214. <mp-cells title='WiFi信息'>
  215. <mp-cell>
  216. <View style={{ color: '#666' }}>
  217. <Input style={{ display: 'inline-block', background: '#fff', width: '20%' }} value='名称:' disabled /><Input style={{ display: 'inline-block', width: '80%' }} onInput={(e) => setRoomModel({ ...roomModel, wifiName: e.detail.value })} value={roomModel.wifiName} placeholder='请输入wifi名称' />
  218. <Input style={{ display: 'inline-block', background: '#fff', width: '20%' }} value='密码:' disabled /><Input style={{ display: 'inline-block', width: '80%' }} onInput={(e) => setRoomModel({ ...roomModel, wifiPassword: e.detail.value })} value={roomModel.wifiPassword} placeholder='请输入wifi密码' />
  219. </View>
  220. </mp-cell>
  221. </mp-cells> : null
  222. }
  223. <mp-cells title='权重'>
  224. <mp-cell>
  225. <input type='number' value={roomModel.weight} onInput={(e) => setRoomModel({ ...roomModel, weight: e.detail.value })} placeholder='请输入权重(必填)' />
  226. </mp-cell>
  227. </mp-cells>
  228. {roomId ? <>
  229. <view className='weui-cells__title'>其他指引</view>
  230. {
  231. extend == '' ? null :
  232. <>
  233. {extend.map((item) => (
  234. <Extend key={item.extId} item={item} setReset={setReset} />
  235. ))}
  236. </>
  237. }
  238. </> : null
  239. }
  240. </mp-form>
  241. {roomId ? <>
  242. <View className='adds' >
  243. <Text className='zuobian'>增加文字</Text>
  244. <View className='add' onClick={showText}><Text className='jiahao'>+</Text><Text className='zengjia'>添加</Text></View>
  245. </View>
  246. <View className='adds' >
  247. <Text className='zuobian'>增加图片</Text>
  248. <View className='add' onClick={addImage}><Text className='jiahao'>+</Text><Text className='zengjia'>添加</Text></View>
  249. </View>
  250. </> : null
  251. }
  252. <Button className='button-OK' onClick={sumbit}>确定</Button>
  253. </scroll-view>
  254. </view>
  255. </view>
  256. )
  257. })