wangzimeng 984c79350a 1、收藏两个一行展示列表的css调整
2、食堂招租列表的列表改为scroll-view的内部,新增加载更多和下来刷新的方法
3、平台学院列表改为scroll-view的内部,新增加载更多和下来刷新的方法
4、食堂详情页面:详情静态+数据对接
2025-07-25 18:05:25 +08:00

473 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<s-layout title="招租详情">
<view class="container">
<!-- 顶部banner -->
<view class="swiper-box">
<view class="swiper_s">
<swiper class="swiper_s" :circular="true" :autoplay="true" indicator-active-color="#0DAE11"
indicator-color="#ffffff" :indicator-dots="false" :current="currentImgIndex"
@animationfinish="swiperChange">
<!-- v-for="(item, index) in swiperList" :key="index" @click="openSwiper(item)"-->
<swiper-item style="margin: 0 auto;">
<view style="position: relative;width: 100%;height: 100%;"
v-for="(item,index) in detailRent.images" :key="index">
<image class="swiper-image" :src="item" mode="scaleToFill" />
</view>
</swiper-item>
<!-- <swiper-item style="margin: 0 auto;">
<view style="position: relative;width: 100%;height: 100%">
<image class="swiper-image" src="/static/cart-empty.png" mode="scaleToFill" />
</view>
</swiper-item> -->
</swiper>
<view class="bannerNum">
{{currentImgIndex}}/{{imagesNum}}
</view>
</view>
</view>
<!-- 招租基本信息 -->
<view class="listItem-contents">
<view class="title2" style="margin-bottom: 20rpx;">{{detailRent.platform_title}}</view>
<scroll-view class="score-box">
<view class="fs11 flex cate">
<view class="cate-e" v-for="(e,i) in detailRent.cate" :key="i">
<view v-show="e" class="status-tag " style="margin-right: 20rpx;">{{e}}
</view>
</view>
<!-- <text v-show="item.cate[1]"
class="status-tag" style="margin-right: 20rpx;">{{item.cate[1]}}</text>
<text v-show="item.cate[2]"
class="status-tag">{{item.cate[2]}}</text> -->
</view>
</scroll-view>
<view class="cons-third">
<view style="display: flex;align-items: center;justify-content: flex-start;">
<image style="width: 36rpx;height: 36rpx;" :src="detailRent.user?.avatar"></image>
<view class="title1" style="margin-left: 10rpx;">{{detailRent.user?.nickname}}
</view>
<view class="title5" style="margin-left: 30rpx;">项目类型: {{detailRent.type_text}}</view>
</view>
<view style="display: flex;">
<image style="width: 26rpx;height: 20rpx;" src="https://jiangxiaoxian.0rui.cn/eye.png"></image>
<view class="title3" style="margin-left: 10rpx;">{{detailRent.views}}</view>
</view>
</view>
</view>
<view class="phoneNumBox">
<view style="display: flex;justify-content: flex-start;align-items: center;">
<image style="width: 32rpx;height: 32rpx;" src="https://jiangxiaoxian.0rui.cn/rentDetailTime.png">
</image>
<view class="title4" style="margin-left: 20rpx;">{{detailRent.release_time_text}}</view>
</view>
<view class="line-row" style="margin: 40rpx 0;"></view>
<view style="display: flex;justify-content: flex-start;align-items: center;">
<image style="width: 32rpx;height: 32rpx;" src="https://jiangxiaoxian.0rui.cn/rentAddress.png">
</image>
<view class="title4" style="margin-left: 20rpx;">{{detailRent.address_detail}}</view>
</view>
</view>
<view class="description">
<view class="desTi">
<view style="width: 6rpx;height: 36rpx;background-color: #fcc74e;margin-right: 20rpx;"></view>
<view class="cs bold" style="font-size: 36rpx;line-height: 38rpx;">详细介绍</view>
</view>
<view class="desCon">
{{detailRent.content}}
</view>
</view>
<view style="width: 100%;height: 180rpx;"></view>
<!-- 底部按钮 -->
<view class="footer-box">
<view class="icon-box flex ml40">
<view>
<image class="btnIcon" src="https://jiangxiaoxian.0rui.cn/backHome.png" mode=""></image>
<view class="btnText" style="margin-top: 10rpx;">首页</view>
</view>
<view style="margin-left: 40rpx;">
<image class="btnIcon" src="https://jiangxiaoxian.0rui.cn/rentShare.png" mode=""></image>
<view class="btnText" style="margin-top: 10rpx;">分享</view>
</view>
<view style="margin-left: 40rpx;">
<image v-if="detailRent.is_collect == 0" class="btnIcon"
src="https://jiangxiaoxian.0rui.cn/unCollect.png" mode=""></image>
<image v-else class="btnIcon" src="https://jiangxiaoxian.0rui.cn/collected.png" mode=""></image>
<view class="btnText" style="margin-top: 10rpx;">收藏</view>
</view>
<view style="margin-left: 40rpx;">
<image class="btnIcon" src="https://jiangxiaoxian.0rui.cn/service.png" mode=""></image>
<view class="btnText" style="margin-top: 10rpx;">客服</view>
</view>
</view>
<view class="button-box" @click="handleJuage">立即联系
</view>
</view>
</view>
<su-popup :show="showContacted == true" type="center" round="10" :isMaskClick="false">
<view class="popupContacted">
<view class="contactedBox">
<image style="width: 120rpx;height: 120rpx;"></image>
<view style="font-size: 36rpx;line-height: 50rpx;font-weight: 900;color: #3d3d3d;margin: 30rpx 0;">确认拨号</view>
<view style="font-size: 30rpx;line-height: 44rpx;font-weight: 400;color: #3d3d3d;">剩余联系次数detailRent.all_mobile_num</view>
</view>
</view>
</su-popup>
<su-popup :show="showContactNo == true" type="center" round="10" :isMaskClick="false">
<view class="popupContactNo">
</view>
</su-popup>
</s-layout>
</template>
<script setup>
import {
computed,
ref,
reactive,
} from 'vue';
import {
onLoad,
onShow,
onPageScroll,
onPullDownRefresh,
onReachBottom
} from '@dcloudio/uni-app';
import {
consignee,
mobile,
address,
region
} from '@/sheep/validate/form';
import rent from '../../sheep/api/rent';
import sheep from '@/sheep';
const rentId = ref('');
const detailRent = ref('')
const imagesNum = ref(0);
const currentImgIndex = ref(1)
const showContacted = ref(false)
const showContactNo = ref(false)
onLoad((options) => {
console.log('onload', options.id);
rentId.value = options.id
if (options.id) {
getDetail();
}
})
async function getDetail() {
const res = await sheep.$api.rent.rentInfo(rentId.value)
console.log('获取招租详情', res);
if (res.code == 1) {
detailRent.value = res.data.detail
detailRent.value.release_time_text = detailRent.value.release_time_text.substring(0, 10);
const imageList = res.data.detail.images
console.log('imageList:',imageList.length);
imagesNum.value = imageList.length
console.log('imagesNum:',imagesNum.value);
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
}
//是否拨打电话的次数
function handleJuage() {
console.log('拨打电话次数:',detailRent.value.all_mobile_num);
if(detailRent.value.all_mobile_num > 0){
showContacted.value = true
}else {
showContactNo.value = true
}
}
</script>
<style lang="scss" scoped>
.btnIcon {
width: 40rpx;
height: 40rpx;
}
.btnText {
font-size: 20rpx;
font-weight: 400;
line-height: 20rpx;
color: #3d3d3d;
}
.title1 {
font-size: 24rpx;
font-weight: 400;
color: #9c9c9c;
line-height: 26rpx;
}
.title2 {
color: #3d3d3d;
font-size: 30rpx;
font-weight: 800;
line-height: 42rpx;
}
.title3 {
font-size: 24rpx;
font-weight: 400;
color: #999999;
line-height: 26rpx;
}
.title4 {
font-size: 26rpx;
font-weight: 400;
color: #9b9b9b;
line-height: 36rpx;
}
.title5 {
font-size: 24rpx;
font-weight: 400;
color: #333333;
line-height: 26rpx;
}
.flex {
display: flex;
}
.flex-start {
align-items: flex-start;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.fs24 {
font-size: 24rpx;
}
.Regular {
font-weight: 400;
}
.bold {
font-weight: bold;
}
.c3 {
color: #333333;
}
.c9 {
color: #999999;
}
.container {
width: 100%;
.swiper-box {
width: 100%;
// padding: 0 30rpx;
// display: grid;
// justify-content: center;
height: 750rpx;
position: relative;
.swiper_s {
width: 100%;
height: 100%;
// display: grid;
// justify-content: center;
.bannerNum {
z-index: 100;
width: 85rpx;
height: 40rpx;
background-color: rgba(0, 0, 0, 0.5);
color: #ffffff;
font-weight: 400;
font-size: 26rpx;
line-height: 20rpx;
border-radius: 30rpx;
position: relative;
left: 628rpx;
bottom: 64rpx;
display: flex;
justify-content: center;
align-items: center;
}
.swiper-image {
width: 100%;
height: 100%;
// border-radius: 36rpx;
object-fit: contain;
}
}
}
.listItem-contents {
background-color: #ffffff;
// margin-left: 20rpx;
// padding: 30rpx;
.score-box {
display: flex;
.cate {
display: flex;
justify-content: flex-start;
align-items: center;
.cate-e {
.status-tag {
padding: 5rpx 15rpx;
border-radius: 5rpx;
font-size: 22rpx;
font-weight: 400;
line-height: 22rpx;
background-color: rgba(247, 97, 0, 0.2);
// opacity: 0.2;
color: #F76100;
//flex-shrink: 0
}
}
}
}
.cons-third {
margin-top: 20rpx;
padding: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
}
.phoneNumBox {
margin-top: 10rpx;
background-color: #ffffff;
padding: 40rpx 30rpx;
.line-row {
width: 100%;
height: 1rpx;
background: #F0F0F0;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
}
.description {
background-color: #ffffff;
padding: 40rpx 30rpx;
margin-top: 10rpx;
.desTi {
display: flex;
justify-content: flex-start;
align-items: center;
}
.desCon {
margin-top: 30rpx;
color: #3d3d3d;
font-weight: 400;
line-height: 42rpx;
font-size: 28rpx;
}
}
.footer-box {
width: 100%;
height: 98rpx;
padding-bottom: 0rpx;
box-sizing: border-box;
position: fixed;
bottom: 0;
display: flex;
align-items: center;
justify-content: space-between;
// box-shadow: 0 -4rpx 6rpx 6rpx #f6f6f6;
background-color: #fff;
// padding-left: 30rpx;
.icon-box {
width: 50%;
height: 98rpx;
display: flex;
justify-content: space-around;
align-items: center;
padding: 14rpx 30rpx;
}
.button-box {
background-color: #fcc74e;
color: #333333;
width: 50%;
height: 98rpx;
display: flex;
align-items: center;
justify-content: center;
}
}
}
.popupContacted {
width: 660rpx;
height: 477rpx;
background-color: #fff;
.contactedBox {
width: 100%;
height: 100%;
display: grid;
justify-content: center;
align-items: center;
padding-top: 40rpx;
}
}
</style>