租房小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

444 lines
14 KiB

9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
  1. <template>
  2. <view>
  3. <view class="se-w-vw-100 se-h-500">
  4. <uv-swiper :radius="0" :list="list" :height="250" keyName="url" :autoplay="false"></uv-swiper>
  5. </view>
  6. <view class="se-py-20 se-flex se-bgc-white">
  7. <view class="se-w-vw-90 se-pl-30">
  8. <view class=" se-c-black se-fw-6 se-fs-32">
  9. {{detail.title}}
  10. </view>
  11. <view class="se-display-ib se-c-white se-bgc-orange se-fs-22 se-br-8 se-px-10 se-py-5">
  12. {{detail.iconTitle}}
  13. </view>
  14. </view>
  15. <view class="se-pr-30 se-flex se-flex-v-c">
  16. <!-- <uv-icon name="photo"></uv-icon> -->
  17. <button class="se-w-140 se-h-60 se-lh-60 se-fs-22 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">分享</button>
  18. <!-- <text class="se-c-black se-fs-20">分享</text> -->
  19. </view>
  20. </view>
  21. <view class="se-mt-30 se-bgc-white se-py-30 se-flex se-flex-h-fs">
  22. <view class="se-flex-1 se-flex-v-sa">
  23. <text class="se-c-66 se-fw-5">价格</text>
  24. <text class="se-c-red se-fw-6 se-mt-20">{{detail.price}}/</text>
  25. </view>
  26. <view class="se-flex-1 se-flex-v-sa">
  27. <text class="se-c-66 se-fw-5">户型</text>
  28. <text class="se-c-red se-fw-6 se-mt-20">{{detail.homeType}}</text>
  29. </view>
  30. <view class="se-flex-1 se-flex-v-sa">
  31. <text class="se-c-66 se-fw-5">面积</text>
  32. <text class="se-c-red se-fw-6 se-mt-20">{{detail.homeMi}}平方米</text>
  33. </view>
  34. </view>
  35. <view class="se-mt-30 se-p-40 se-bgc-white">
  36. <view class="se-flex se-flex-ai-c se-pb-10">
  37. <view class="line-green"></view>
  38. <view class="se-ml-10 se-fs-32 se-c-black se-fw-6">
  39. 房源信息
  40. </view>
  41. </view>
  42. <view class="se-flex se-fs-24">
  43. <view class="se-flex-1 se-py-20">
  44. <text class="se-c-66 se-mr-20">编号</text>
  45. <text class="se-c-black">{{detail.classId}}</text>
  46. </view>
  47. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  48. <text class="se-c-66 se-mr-20">房屋结构</text>
  49. <text class="se-c-black">{{detail.homeJg}}</text>
  50. </view>
  51. </view>
  52. <view class="se-flex se-fs-24">
  53. <view class="se-flex-2 se-py-20">
  54. <text class="se-c-66 se-mr-20">房屋地址</text>
  55. <text class="se-c-black se-fw-6">{{detail.address}}</text>
  56. </view>
  57. </view>
  58. <!-- <view class="se-flex bgc-active-lg se-py-20 se-br-10">
  59. <view class="se-w-p-85 se-pl-30">
  60. <view class=" se-c-black se-fw-6 se-fs-24">
  61. 具体地址{{detail.address}}
  62. </view>
  63. <view class="se-fs-22 se-py-5">
  64. 距离你1.4km 骑行9分钟 步行18分钟
  65. </view>
  66. </view>
  67. <view class="se-w-p-15 se-pr-30 se-flex se-flex-v-c">
  68. <uv-icon name="photo"></uv-icon>
  69. <text class="se-c-black se-fs-20 se-mt-10">导航</text>
  70. </view>
  71. </view> -->
  72. <view class="se-flex se-fs-24">
  73. <view class="se-flex-2 se-py-20">
  74. <text class="se-c-66 se-mr-20">房屋周边</text>
  75. <text class="se-c-black se-fw-6">{{detail.homeBian}}</text>
  76. </view>
  77. </view>
  78. <view class="se-flex se-fs-24">
  79. <view class="se-flex-1 se-py-20">
  80. <text class="se-c-66 se-mr-20">房间数量</text>
  81. <text class="se-c-black">{{detail.homeNum}}</text>
  82. </view>
  83. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  84. <text class="se-c-66 se-mr-20">菜地</text>
  85. <text class="se-c-black">{{detail.homeCai}}</text>
  86. </view>
  87. </view>
  88. <view class="se-flex se-fs-24">
  89. <view class="se-flex-1 se-py-20">
  90. <text class="se-c-66 se-mr-20">距离场镇距离</text>
  91. <text class="se-c-black">{{detail.homeJl}}km</text>
  92. </view>
  93. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  94. <text class="se-c-66 se-mr-20">距离成都西三环</text>
  95. <text class="se-c-black">{{detail.homeShjl}}km</text>
  96. </view>
  97. </view>
  98. <view class="se-flex se-fs-24">
  99. <view class="se-flex-1 se-py-20">
  100. <text class="se-c-66 se-mr-20">房屋主体是否改造</text>
  101. <text class="se-c-black">{{detail.homeGz}}</text>
  102. </view>
  103. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  104. <text class="se-c-66 se-mr-20">房屋面积</text>
  105. <text class="se-c-black">{{detail.homeMj}}</text>
  106. </view>
  107. </view>
  108. <view class="se-flex se-fs-24">
  109. <view class="se-flex-1 se-py-20">
  110. <text class="se-c-66 se-mr-20">院子总面积</text>
  111. <text class="se-c-black">{{detail.homeYzmj}}</text>
  112. </view>
  113. <view class="se-flex-2 se-py-20 se-flex se-flex-h-fe">
  114. <text class="se-c-66 se-mr-20">房屋朝向及海拔</text>
  115. <text class="se-c-black">{{detail.homeHb}}</text>
  116. </view>
  117. </view>
  118. <view class="se-flex se-fs-24">
  119. <view class="se-flex-1 se-py-20">
  120. <text class="se-c-66 se-mr-20">是否经过安置</text>
  121. <text class="se-c-black">{{detail.homeAz}}</text>
  122. </view>
  123. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  124. <text class="se-c-66 se-mr-20">交通</text>
  125. <text class="se-c-black">{{detail.homeJt}}</text>
  126. </view>
  127. </view>
  128. <view class="se-flex se-fs-24">
  129. <view class="se-flex-1 se-py-20">
  130. <text class="se-c-66 se-mr-20">坟包及电塔 工厂噪音</text>
  131. <text class="se-c-black">{{detail.homeZy}}</text>
  132. </view>
  133. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  134. <text class="se-c-66 se-mr-20">水电气网</text>
  135. <text class="se-c-black">{{detail.homeSd}}</text>
  136. </view>
  137. </view>
  138. <view class="se-flex se-fs-24">
  139. <view class="se-flex-1 se-py-20">
  140. <text class="se-c-66 se-mr-20">停车</text>
  141. <text class="se-c-black">{{detail.homeCat}}</text>
  142. </view>
  143. <view class="se-flex-2 se-py-20 se-flex se-flex-h-fe">
  144. <text class="se-c-66 se-mr-20">付款方式及押金</text>
  145. <text class="se-c-black">{{detail.homePay}}</text>
  146. </view>
  147. </view>
  148. <view class="se-flex se-fs-24">
  149. <view class="se-flex-1 se-py-20">
  150. <text class="se-c-66 se-mr-20">租期</text>
  151. <text class="se-c-black">{{detail.homeTime}}</text>
  152. </view>
  153. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  154. <text class="se-c-66 se-mr-20">非正常死亡</text>
  155. <text class="se-c-black">{{detail.homeSw}}</text>
  156. </view>
  157. </view>
  158. <view class="se-flex se-fs-24">
  159. <view class="se-flex-1 se-py-20">
  160. <text class="se-c-66 se-mr-20">邻居对房东评价</text>
  161. <text class="se-c-black">{{detail.homePj}}</text>
  162. </view>
  163. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  164. <text class="se-c-66 se-mr-20">佣金</text>
  165. <text class="se-c-black">{{detail.homeMoney}}</text>
  166. </view>
  167. </view>
  168. <view class="se-flex se-fs-24">
  169. <view class="se-flex-1 se-py-20">
  170. <text class="se-c-66 se-mr-20">钥匙</text>
  171. <text class="se-c-black">{{detail.homeYs}}</text>
  172. </view>
  173. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  174. <text class="se-c-66 se-mr-20">户主家庭职业</text>
  175. <text class="se-c-black">{{detail.homeJtzy}}</text>
  176. </view>
  177. </view>
  178. <view class="se-flex se-fs-24">
  179. <view class="se-flex-1 se-py-20">
  180. <text class="se-c-66 se-mr-20">报建手续</text>
  181. <text class="se-c-black">{{detail.homeBjsx}}</text>
  182. </view>
  183. <view class="se-flex-1 se-py-20 se-flex se-flex-h-fe">
  184. <text class="se-c-66 se-mr-20">户主年龄</text>
  185. <text class="se-c-black">{{detail.homeAge}}</text>
  186. </view>
  187. </view>
  188. </view>
  189. <view class="se-mt-30 se-p-40 se-bgc-white">
  190. <view class="se-flex se-flex-ai-c se-pb-10">
  191. <view class="line-green"></view>
  192. <view class="se-ml-10 se-fs-32 se-c-black se-fw-6">
  193. 产权证照片
  194. </view>
  195. </view>
  196. <view class="se-flex se-mt-20">
  197. <image class="se-w-320 se-h-180 se-br-5" :src="detail.homeTf" mode=""></image>
  198. <image class="se-w-320 se-h-180 se-br-5 se-ml-10" :src="detail.image" mode=""></image>
  199. </view>
  200. </view>
  201. <view class="se-mt-30 se-p-40 se-bgc-white">
  202. <view class="se-flex se-flex-ai-c se-pb-10">
  203. <view class="line-green"></view>
  204. <view class="se-ml-10 se-fs-32 se-c-black se-fw-6">
  205. 房东评价
  206. </view>
  207. </view>
  208. <view v-if="rateList.length>0">
  209. <view class="se-mt-30" v-for="(items,indexs) in rateList" :key="indexs">
  210. <view class="se-flex se-w-p-100">
  211. <view class="se-flex se-flex-1">
  212. <image class="se-a-80 se-br-p-50 se-bgc-f5" style="min-width: 80rpx;" :src="items.userHead" mode=""></image>
  213. <view class="se-flex se-flex-v-sa se-flex-ai-fs se-ml-10">
  214. <text class="se-c-33 se-fs-26">{{items.userName}}</text>
  215. <text class="se-c-66 se-fs-22">{{items.createTime}}</text>
  216. </view>
  217. </view>
  218. <view class="se-flex se-flex-h-fe">
  219. <uv-rate :count="5" :readonly="true" activeColor="#FCD618" v-model="items.num"></uv-rate>
  220. </view>
  221. </view>
  222. <view class="se-lh-40 se-mt-10 se-fs-24 se-c-33">
  223. {{items.userValue}}
  224. </view>
  225. <view class="se-mt-10 se-flex">
  226. <image @click="previewImage(items.userImages, item)" v-for="(item,index) in items.userImages" :key="index" class="se-a-200 se-br-10 se-mr-10" :src="item" mode=""></image>
  227. </view>
  228. </view>
  229. </view>
  230. <view v-else class="se-py-30">
  231. <uv-empty mode="list" text="快来留言哦"></uv-empty>
  232. </view>
  233. </view>
  234. <view class="se-pb-160"></view>
  235. <view class="content-box">
  236. <view class="se-flex se-w-p-90 se-px-20" @click="show=true">
  237. <uv-input :disabled="true" class="se-br-p-50" placeholder="请输入评论信息" v-model="content"></uv-input>
  238. </view>
  239. </view>
  240. <view v-if="show" @click="show=false" style="z-index: 98;width: 750rpx;height:100vh; position: fixed;top: 0rpx;left:0rpx;background-color: rgba(0,0,0,0.4);"></view>
  241. <view v-if="show" class="se-b-t se-b-ts" style="z-index: 99;width: 750rpx;padding: 20rpx 0rpx 120rpx 0rpx; position: fixed;bottom: 0rpx;left:0rpx;background-color: #fff;">
  242. <view class="se-bgc-white se-px-40">
  243. <view class="se-flex se-flex-v se-fs-26 se-mt-20">
  244. <text class="se-pb-20">评论评分</text>
  245. <uv-rate :count="5" activeColor="#FCD618" v-model="rate"></uv-rate>
  246. </view>
  247. <view class="se-flex se-flex-v se-fs-26 se-mt-20">
  248. <text class="se-pb-20">评论内容</text>
  249. <uv-textarea v-model="userValue" placeholder="请输入评论内容"></uv-textarea>
  250. </view>
  251. <view class="se-lh-40 se-mt-20 se-fs-24 se-c-99">
  252. <text class="se-pb-20">评论图片</text>
  253. <uv-upload customStyle="margin-top:20rpx;" :fileList="userImages" @afterRead="afterImageRead" @delete="deleteImagePic" name="1"
  254. multiple :maxCount="10"></uv-upload>
  255. </view>
  256. <view class="se-flex se-flex-h-sb se-mt-40">
  257. <view @click="onSubmit" class="se-br-20 se-ml-20 se-flex-1 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-32 se-c-white se-bgc-green">
  258. <text class="se-ml-10">发布</text>
  259. </view>
  260. </view>
  261. </view>
  262. </view>
  263. </view>
  264. </template>
  265. <script>
  266. import { houseDetail,saveComment,commentPageList } from "@/common/api.js"
  267. export default{
  268. data(){
  269. return{
  270. show:false,
  271. content:"",
  272. id:null,
  273. detail:{},
  274. list:[],
  275. rate:0,
  276. userImages:[],
  277. userImage:"",
  278. userValue:"",
  279. pageNo:1,
  280. pageSize:10,
  281. rateList:[]
  282. }
  283. },
  284. onLoad(options) {
  285. //#ifdef MP-WEIXIN
  286. wx.showShareMenu({
  287. withShareTicket: true,
  288. menus: ['shareAppMessage', 'shareTimeline']
  289. });
  290. //#endif
  291. this.id = options.id;
  292. if(options.userId){
  293. uni.setStorageSync('userId',options.userId)
  294. }
  295. this.onHouseDetail()
  296. this.onCommentPageList()
  297. },
  298. onShareAppMessage() {
  299. let share = {
  300. title:"首页分享",
  301. path:"/pages_subpack/detail/index?id="+this.id+"&userId="+uni.getStorageSync('userInfo').id,
  302. success:(res) => {
  303. console.info(res)
  304. },
  305. fail:(err)=>{
  306. console.info(err)
  307. }
  308. }
  309. console.info(share)
  310. return share
  311. },
  312. methods:{
  313. previewImage(urls, current) {
  314. uni.previewImage({
  315. urls: urls, // 需要预览的图片 HTTP 链接列表
  316. current: current // 当前显示图片的链接,不填则默认为 urls 的第一张
  317. });
  318. },
  319. onCommentPageList(){
  320. let that = this
  321. let params ={
  322. houseId:that.id,
  323. pageNo:that.pageNo,
  324. pageSize:that.pageSize
  325. }
  326. commentPageList(params).then(response=>{
  327. console.info('response',response)
  328. response.result.records.forEach(items=>{
  329. if(items.userImage){
  330. items.userImages=items.userImage.split(',')
  331. }
  332. console.info(items.userImages)
  333. // items.userImages=items.userImage.split(',')
  334. })
  335. that.rateList = that.rateList.concat(response.result.records)
  336. }).catch(error=>{
  337. })
  338. },
  339. onSubmit(){
  340. let that = this
  341. if(that.userValue&&that.rate){
  342. let params={
  343. title:that.detail.title,
  344. num:that.rate,
  345. homeId:that.detail.id,
  346. userId:uni.getStorageSync('userInfo').id,
  347. userHead:uni.getStorageSync('userInfo').headImage,
  348. userName:uni.getStorageSync('userInfo').nickName,
  349. userValue: that.userValue,
  350. userImage:that.userImages.map(item => item.url).join(','),
  351. }
  352. saveComment(params).then(response=>{
  353. that.show = false
  354. that.pageNo=1
  355. that.rate = 0
  356. that.userImages = []
  357. that.userValue =''
  358. that.rateList=[]
  359. that.onCommentPageList()
  360. }).catch(error=>{
  361. })
  362. }else{
  363. return uni.showToast({
  364. icon:"none",
  365. title:"评分和内容不能为空!"
  366. })
  367. }
  368. },
  369. deleteImagePic(event) {
  370. this.userImages.splice(event.index, 1)
  371. },
  372. async afterImageRead(e) {
  373. let self = this
  374. e.file.forEach(file => {
  375. self.$Oss.ossUpload(file.url).then(url => {
  376. self.userImages.push({
  377. url
  378. })
  379. })
  380. })
  381. },
  382. onHouseDetail(){
  383. let that = this
  384. houseDetail({houseId:that.id}).then(response=>{
  385. let items = response.result
  386. console.info('response',response.result)
  387. if(items.image){
  388. console.info('items.image.split()',items.image.split(','))
  389. items.image.split(',').forEach(items=>{
  390. that.list.push({
  391. url: items
  392. })
  393. })
  394. }
  395. that.detail = items
  396. }).catch(error=>{
  397. })
  398. }
  399. }
  400. }
  401. </script>
  402. <style>
  403. .default-btn{
  404. background-color: #fff;
  405. }
  406. .default-btn::after{
  407. content: "";
  408. border: none;
  409. }
  410. page{
  411. background-color: #f5f5f5;
  412. }
  413. .line-green {
  414. width: 8rpx;
  415. height: 32rpx;
  416. background: #20CD7D;
  417. border-radius: 4rpx;
  418. }
  419. .bgc-active-lg{
  420. background-color: #F1FFF9;
  421. }
  422. .content-box{
  423. position: fixed;
  424. bottom: 0;
  425. height: 120rpx;
  426. background: #fff;
  427. width: 100%;
  428. padding: 20rpx 0rpx;
  429. border-top: 1px solid #ddd;
  430. }
  431. </style>