公寓详情进入学校距离

This commit is contained in:
A1300399510 2024-04-18 18:54:33 +08:00
parent 63c96b34c9
commit ab68eb1dae
16 changed files with 849 additions and 791 deletions

View File

@ -1,5 +1,4 @@
{
"recommendations": [
"zhengjiaqi.px-to-rpx"
]
}

View File

@ -4,7 +4,5 @@
"*.tpl": "html",
"*.vue": "vue",
"*.wxml": "html"
},
"px-to-rpx.baseWidth": 500,
"px-to-rpx.autoRemovePrefixZero": true
}
}

0
common/common.wxss Normal file
View File

View File

@ -614,7 +614,7 @@
<!-- v4 品牌公寓列表 的 item -->
<template name="apartment-item">
<view class="apartment-item apartment-list" bindtap="publicJumps" data-url="/pages/irentDetail/irentDetail?uniqid={{ item.uniqid }}">
<view class="apartment-item apartment-list" bindtap="publicJumps" data-url="/pages/irentDetail/irentDetail?uniqid={{ item.uniqid }}{{ schoolSidObj[school] ? '&school=' + schoolSidObj[school] : '' }}">
<view class="apartment-top flexflex">
<view class="apartment-top-collect flexcenter" catch:tap="bindCollect" data-index="{{ index }}">

View File

@ -5,6 +5,7 @@
"header-nav": "../../template/headerNav/index",
"go-login": "../../template/goLogin/goLogin",
"report": "../../template/report/report",
"head-swiper": "../../template/headSwiper/headSwiper"
"head-swiper": "../../template/headSwiper/headSwiper",
"nearby-school": "/template/nearbySchool/nearbySchool"
}
}

View File

@ -83,6 +83,7 @@
</view>
</map>
</view>
<nearby-school uniqid="{{ uniqid }}" options="{{ options }}" istype="{{ 2 }}"></nearby-school>
</view>
<view class="apartment-block" wx:if="{{ traffic }}">

View File

@ -58,6 +58,7 @@ Page({
schoolList: [],
school: '',
schoolObj: {},
schoolSidObj: {},
irenCouponReceive: null,
irentCouponBig: false,
hideCoupon: false,
@ -331,12 +332,15 @@ Page({
let schoolObj = {}
let schoolSidObj = {}
data.data.school.forEach(item => {
schoolObj[item.id] = item.name
schoolSidObj[item.id] = item.sid
})
that.setData({
schoolObj,
schoolSidObj,
schoolList: data.data.school,
brands: that.data.brands,
roomtype: that.data.roomtype,

View File

@ -39,7 +39,7 @@
</view>
<template wx:if="{{ data.length == 0 && !loading }}" data="{{ hint: '暂无数据' }}" is="empty-icon"></template>
<template wx:for="{{ data }}" wx:key="index" data="{{ item,index }}" is="apartment-item"></template>
<template wx:for="{{ data }}" wx:key="index" data="{{ item, index, schoolSidObj, school }}" is="apartment-item"></template>
</view>
<!-- 疑问 -->

View File

@ -109,7 +109,6 @@ Page({
annexSchoolList: [], // 附近院校数据
academyPitchIndex: 0, // 附近学校距离选中院校 下标
targetAcademyPitch: [], // 附近学校距离选中院校 数据
specialSchoolDistance: null, // 特殊的 用户带有school参数 则需要特殊显示 学校距离
isShowVideo: true, // 是否显示 视频
@ -200,7 +199,6 @@ Page({
title: '加载中',
})
this.get_content();
this.distanceSchool();
}
},
get_config() {
@ -219,7 +217,6 @@ Page({
this.headHeight = headHeight
this.get_content();
this.distanceSchool();
} else {
timer = setTimeout(() => {
this.get_config()
@ -1195,117 +1192,4 @@ Page({
}
})
},
// 获取 距离学校距离
distanceSchool() {
miucms.request(`${app.globalData.baseURL}/tenement/v2/api/details/distance`, {
uniqid: this.data.uniqid,
}).then(res => {
// console.log("res", res);
if (res.code != 200) return
let data = res.data
let specialSchoolDistance = null
let academyPitchIndex = 0
const school = this.data.options['school'] || ''
let annexSchoolOmit = []
data.forEach((element, index) => {
// if (element.alias.length > 2) element.alias = element.alias.slice(0, 3) + '...'
element['distanceText'] = this.metersToKilometers(element.distance)
element.list.forEach((ele, ii) => {
ele['durationText'] = this.secondsToHoursMinutes(ele.duration, 'chinese')
ele['durationText2'] = this.secondsToHoursMinutes(ele.duration)
ele['distanceText'] = this.metersToKilometers(ele.distance)
if (Object.prototype.toString.call(ele.publictransport) === '[object Object]') {
ele.publictransport['durationText'] = this.secondsToHoursMinutes(ele?.publictransport?.duration || 0, 'chinese')
ele.publictransport['durationText2'] = this.secondsToHoursMinutes(ele?.publictransport?.duration || 0)
const segments = ele.publictransport['segments']
if (Array.isArray(segments)) {
segments.forEach(e => {
// console.log("e", e);durationText
e['via_num'] = 1 + Math.floor(e.via_num)
e['durationText'] = this.secondsToHoursMinutes(e.duration)
e['distanceText'] = this.metersToKilometers(e.distance, 'chinese')
})
}
} else ele.publictransport = null
if (ii == 0) {
const obj = element.list[0] || {}
let toolText = "步行"
if (Object.prototype.toString.call(obj.publictransport) === '[object Object]') toolText = "公交地铁"
element['distanceText'] = obj['distanceText']
element['durationText'] = obj.publictransport?.durationText2 || obj['durationText2']
element['toolText'] = toolText
}
})
if (school == element.id) {
academyPitchIndex = index
specialSchoolDistance = element
} else annexSchoolOmit.push(element)
console.log("element", element);
})
if (specialSchoolDistance) annexSchoolOmit = annexSchoolOmit.slice(0, 5)
else annexSchoolOmit = annexSchoolOmit.slice(0, 4)
this.setData({
annexSchoolList: data,
targetAcademyPitch: data[academyPitchIndex],
annexSchoolOmit,
specialSchoolDistance,
academyPitchIndex,
})
})
},
// 切换附近学校弹窗
cutNearbySchools() {
this.setData({
academyState: true,
})
},
// 选择附近学校距离的学校下标
selectAcademyIndex(e) {
const academyPitchIndex = e.currentTarget.dataset.index || 0
const annexSchoolList = this.data.annexSchoolList
this.setData({
academyPitchIndex,
targetAcademyPitch: annexSchoolList[academyPitchIndex],
})
},
// 转换 秒数
secondsToHoursMinutes(seconds, type) {
// 计算小时数
const hours = Math.floor(seconds / 3600);
// 计算剩余的秒数
const remainingSecondsAfterHours = seconds % 3600;
// 计算分钟数
const minutes = Math.floor(remainingSecondsAfterHours / 60);
// 计算剩余的秒数
const remainingSeconds = remainingSecondsAfterHours % 60;
let text = ""
if (type == 'chinese') {
if (hours != 0) text += hours + '小时'
if (minutes != 0) text += minutes + '分钟'
if (remainingSeconds != 0 && minutes == 0) text += remainingSeconds + '秒'
} else {
if (hours != 0) text += hours + 'h'
if (minutes != 0) text += minutes + 'min'
if (remainingSeconds != 0 && minutes == 0) text += remainingSeconds + 's'
}
return text
},
// 转换 米数
metersToKilometers(input, type) {
let text = ""
if (input >= 1000) text = (input / 1000).toFixed(1) + (type == 'chinese' ? '公里' : 'km')
else text = input + (type == 'chinese' ? '米' : 'm');
return text;
},
})

View File

@ -7,6 +7,7 @@
"go-login": "../../template/goLogin/goLogin",
"ads": "./ads/ads",
"banner-ad": "../../template/bannerAD/bannerAD",
"common-list": "/template/commonList/commonList"
"common-list": "/template/commonList/commonList",
"nearby-school": "/template/nearbySchool/nearbySchool"
}
}

View File

@ -2,9 +2,9 @@
<import src="../../wxParse/wxParse.wxml" />
<wxs module="m">
module.exports = {
isArray: function (arr) {
return arr.constructor == 'Array' ? true : false
}
isArray: function (arr) {
return arr.constructor == 'Array' ? true : false
}
}
</wxs>
<view class="container" wx:if="{{ !loding }}">
@ -30,7 +30,8 @@
<view class="housing-info-right flexflex">
<view class="housing-info-name flexacenter">
{{ info.author }}
<image wx:if="{{ isintermediary == 1 }}" class="housing-info-identity-icon" src="/img/certifying-agent.png"></image>
<image wx:if="{{ isintermediary == 1 }}" class="housing-info-identity-icon"
src="/img/certifying-agent.png"></image>
<view wx:else class="housing-info-identity">{{ info.intermediary_text }}</view>
</view>
<view class="housing-info-update flexacenter">{{ info.updatetimeText }}更新
@ -46,11 +47,14 @@
<view class="housing-information certification resource-beg">
<view class="HResource-box HResource-box1">
<view class="advanced-markup flexacenter {{ isintermediary == 1 ? 'advanced-intermediary' : '' }}" wx:if="{{ info.verified == 1 || isintermediary == 1 }}">
<view class="advanced-markup flexacenter {{ isintermediary == 1 ? 'advanced-intermediary' : '' }}"
wx:if="{{ info.verified == 1 || isintermediary == 1 }}">
<view class="advanced-markup-left flexacenter ">
<image class="advanced-markup-icon" mode="widthFix" src="/img/certified-listings-icon.png"></image>
<image class="advanced-markup-identifying" mode="widthFix" src="/img/certified-listings.png"></image>
<image class="advanced-markup-icon advanced-intermediary-icon" mode="widthFix" src="/img/certified-intermediary.png"></image>
<image class="advanced-markup-identifying" mode="widthFix" src="/img/certified-listings.png">
</image>
<image class="advanced-markup-icon advanced-intermediary-icon" mode="widthFix"
src="/img/certified-intermediary.png"></image>
<view class="advanced-intermediary-name">认证中介</view>
</view>
@ -78,14 +82,17 @@
<!-- 租房类型、合租整租 房间 -->
<template is="HResource-header-item" data="{{ name: info.gptype,value: info.type }}"></template>
<!-- 租期 -->
<template is="HResource-header-item" data="{{ name: '租期', value: info.rentalduration != 0 ? info.rentalduration: '不限' }}"></template>
<template is="HResource-header-item"
data="{{ name: '租期', value: info.rentalduration != 0 ? info.rentalduration: '不限' }}"></template>
<!-- 起租日期 -->
<template is="HResource-header-item" data="{{ name: '起租日期',value: info.leasetime || '随时' }}"></template>
<template is="HResource-header-item"
data="{{ name: '起租日期',value: info.leasetime || '随时' }}"></template>
</view>
</view>
<!-- 图片和视频 -->
<view class="media-box" wx:if="{{ (info.video && info.video.length != 0) || (info.picturegroup && info.picturegroup.length != 0) }}">
<view class="media-box"
wx:if="{{ (info.video && info.video.length != 0) || (info.picturegroup && info.picturegroup.length != 0) }}">
<view class="housing-information-media-top flexacenter">
<block wx:if="{{ info.video && info.video.length != 0 }}">
<image class="housing-information-media-icon1" src="/img/u1737.png" mode="widthFix"></image>
@ -93,23 +100,27 @@
</block>
<block wx:if="{{ info.picturegroup && info.picturegroup.length != 0 }}">
<image class="housing-information-media-icon" src="/img/u1738.png" mode="widthFix"></image>
<view class="housing-information-media-quantity flexcenter">{{ info.picturegroup.length }}</view>
<view class="housing-information-media-quantity flexcenter">{{ info.picturegroup.length }}
</view>
</block>
</view>
<view class="media-content">
<scroll-view class="scroll-view_H" scroll-x="true" style="width: 100%">
<block wx:if="{{ info.video && info.video.length>0 }}">
<view class="media-item media-video" wx:for="{{ info.video }}" wx:key="index" bindtap="show_video" data-src="{{ item.url }}">
<view class="media-item media-video" wx:for="{{ info.video }}" wx:key="index"
bindtap="show_video" data-src="{{ item.url }}">
<image class="media-video-bj" src="{{ item.image }}"></image>
<view class="media-video-play">
<image class="media-video-play-icon" mode="widthFix" src="/img/videoplay.png"></image>
<image class="media-video-play-icon" mode="widthFix" src="/img/videoplay.png">
</image>
<view class="size">{{ item.size }}</view>
</view>
</view>
</block>
<block wx:if="{{ info.images && info.images.length>0 }}">
<view class="media-item" wx:for="{{ info.picturegroup }}" wx:key="index">
<image mode="heightFix" src="{{ item.thumbnail }}" bindtap="preview_img" lazy-load="true" data-index="{{ index }}"></image>
<image mode="heightFix" src="{{ item.thumbnail }}" bindtap="preview_img"
lazy-load="true" data-index="{{ index }}"></image>
</view>
</block>
</scroll-view>
@ -122,9 +133,12 @@
<image class="HResource-item-head-icon" src="/img/ask-for.png" mode="widthFix"></image>
基本{{ info['intermediary'] == 6 ? '要求' : '信息' }}
</view>
<view class="HResource-item-list {{ info['intermediary'] == 6 ? 'basic-list-aLine' : 'basic-list-twoLine' }}">
<view
class="HResource-item-list {{ info['intermediary'] == 6 ? 'basic-list-aLine' : 'basic-list-twoLine' }}">
<block wx:for="{{ basicRequirementsObj }}" wx:key="index">
<view class="basic-item-Line flexacenter {{ index == basicRequirementsObj.length - 1 ? 'flex1' : '' }}" wx:if="{{ item.value }}">
<view
class="basic-item-Line flexacenter {{ index == basicRequirementsObj.length - 1 ? 'flex1' : '' }}"
wx:if="{{ item.value }}">
<view class="basic-Line-key">{{ item.name }}</view>
<view class="basic-Line-value flex1 flexacenter" wx:if="{{ m.isArray(item.value) }}">
<block wx:for="{{ item.value }}" wx:for-item="it" wx:for-index="ind" wx:key="ind">
@ -161,10 +175,13 @@
{{ info.locationList[0].head + ' > ' + info.locationList[0].end }}
</view>
<!-- 地图 -->
<block wx:if="{{ info.cityid==1 && info.point && info.point.length==2 && info.point[0]>0 && info.point[1]>0 }}">
<block
wx:if="{{ info.cityid==1 && info.point && info.point.length==2 && info.point[0]>0 && info.point[1]>0 }}">
<view class="location">
<map class="map" latitude='{{ info.point[0] }}' longitude='{{ info.point[1] }}' markers="{{ markers }}"></map>
<view class="location-bj" catchtouchmove="locationmove" bindtap='to_map' data-longitude="{{ info.point[1] || '' }}" data-latitude="{{ info.point[0] || '' }}">
<map class="map" latitude='{{ info.point[0] }}' longitude='{{ info.point[1] }}'
markers="{{ markers }}"></map>
<view class="location-bj" catchtouchmove="locationmove" bindtap='to_map'
data-longitude="{{ info.point[1] || '' }}" data-latitude="{{ info.point[0] || '' }}">
<view class="location-site" wx:if="{{ info.address }}">
<image class="tracingPoint" mode="widthFix" src="/img/u1704.png"></image>
<view class="location-name">{{ info.address }}</view>
@ -172,51 +189,15 @@
</view>
</view>
</view>
<!-- 附近学校 -->
<view class="school {{ specialSchoolDistance ? 'special' : '' }}" bindtap="cutNearbySchools" wx:if="{{ annexSchoolOmit.length != 0 && options['school'] }}">
<view class="school-item {{ specialSchoolDistance.durationText ? 'durationText' : '' }}" wx:if="{{ specialSchoolDistance }}">
<text class="school-name">{{ specialSchoolDistance.alias }}</text>
<text class="school-distance">{{ specialSchoolDistance.distanceText }}</text>
<block wx:if="{{ specialSchoolDistance.durationText }}">
<text class="long-string">|</text>
<text class="school-name" style="font-size: 21rpx;">{{ specialSchoolDistance.toolText }}</text>
<text class="school-distance">{{ specialSchoolDistance.durationText }}</text>
</block>
</view>
<view class="school-item" wx:for="{{ annexSchoolOmit }}" wx:key="index">
<text class="school-name">{{ item.alias }}</text>
<text class="school-distance">{{ item.distanceText }}</text>
</view>
<!-- 更多 -->
<view class="school-item more">
<text class="school-name">更多</text>
<image class="more-icon" mode="widthFix" src="/img/u1908.svg"></image>
</view>
</view>
<view class="school-new flexacenter" wx:if="{{ annexSchoolOmit.length != 0 && !options['school'] }}" bindtap="cutNearbySchools">
<view class="school-new-list flex1">
<view class="school-new-item flexcenter" wx:for="{{ annexSchoolOmit }}" wx:key="indexS">
{{ item.alias }}
<text class="school-new-text">{{ item.distanceText }}</text>
<image wx:if="{{ item.toolText == '公交地铁' }}" class="school-new-icon" mode="widthFix" src="/img/subway-icon.png"></image>
<image wx:else class="school-new-icon" mode="widthFix" src="/img/walk-icon.png"></image>
<text class="school-new-text">{{ item.durationText }}</text>
</view>
</view>
<view class="school-new-more flexcenter">
更多<image class="school-new-more-icon" src="/img/u1908.svg"></image>
</view>
</view>
<nearby-school uniqid="{{ uniqid }}" options="{{ options }}" istype="{{ 1 }}"></nearby-school>
</block>
</view>
<!-- 求租描述 -->
<view class="HResource-item" wx:if="{{ info.introduction }}">
<view class="HResource-item-head flexacenter">
<image class="HResource-item-head-icon" src="/img/description-rent.png" mode="widthFix"></image>{{ info.intermediary == 6 ? '求租描述' : '更多介绍' }}
<image class="HResource-item-head-icon" src="/img/description-rent.png" mode="widthFix"></image>
{{ info.intermediary == 6 ? '求租描述' : '更多介绍' }}
</view>
<view class="HResource-item-list rent-seeking-description">
<template is="wxParse" data="{{ wxParseData:info.introduction.nodes }}" />
@ -234,7 +215,8 @@
<template is="footer1" data="{{ info,isfav,bottomLift,bottomUnitState }}"></template>
<!-- 联系方式弹窗 -->
<view class="root-portal" style="display: flex;align-items: flex-end;" bindtap="negation" data-key="contactInformationState" wx:if="{{ contactInformationState }}" catchtouchmove="locationmove">
<view class="root-portal" style="display: flex;align-items: flex-end;" bindtap="negation"
data-key="contactInformationState" wx:if="{{ contactInformationState }}" catchtouchmove="locationmove">
<!-- <template is="root-portal" data="{{ info }}"></template> -->
<template is="new-contact-information" data="{{ info,contactValue }}"></template>
</view>
@ -250,14 +232,20 @@
<image class="housing-contact-icon" mode="widthFix" src="/img/certifying-agent.png"></image>
</view>
<view class="housing-contact-detail">
<view wx:if="{{ contacts.businesscard }}" class="contact-business-card flexcenter" bindtap="showBusinessCard">
<image class="contact-business-card-icon" mode="widthFix" src="/img/business-card-icon.png"></image>
<view wx:if="{{ contacts.businesscard }}" class="contact-business-card flexcenter"
bindtap="showBusinessCard">
<image class="contact-business-card-icon" mode="widthFix" src="/img/business-card-icon.png">
</image>
名片
</view>
<view wx:if="{{ contacts.proxynumber }}" class="housing-contact-item">代理人牌照号:{{ contacts.proxynumber }}</view>
<view wx:if="{{ contacts.companyname }}" class="housing-contact-item">所属公司:{{ contacts.companyname }}</view>
<view wx:if="{{ contacts.companyaddress }}" class="housing-contact-item">公司地址:{{ contacts.companyaddress }}</view>
<view wx:if="{{ contacts.companylicensenumber }}" class="housing-contact-item">公司牌照号:{{ contacts.companylicensenumber }}</view>
<view wx:if="{{ contacts.proxynumber }}" class="housing-contact-item">
代理人牌照号:{{ contacts.proxynumber }}</view>
<view wx:if="{{ contacts.companyname }}" class="housing-contact-item">
所属公司:{{ contacts.companyname }}</view>
<view wx:if="{{ contacts.companyaddress }}" class="housing-contact-item">
公司地址:{{ contacts.companyaddress }}</view>
<view wx:if="{{ contacts.companylicensenumber }}" class="housing-contact-item">
公司牌照号:{{ contacts.companylicensenumber }}</view>
</view>
</view>
</view>
@ -265,7 +253,8 @@
<!-- 其他认证房源 -->
<view class="other-information else-box" wx:if="{{ attestationElseResource.length != 0 }}">
<view class="other-information-name flexacenter">发布者的其他{{ info['intermediary'] == 1 ? '' : '认证' }}房源<view class="else-quantity">({{ attestationElseResource.length }})</view>
<view class="other-information-name flexacenter">发布者的其他{{ info['intermediary'] == 1 ? '' : '认证' }}房源<view
class="else-quantity">({{ attestationElseResource.length }})</view>
</view>
<block wx:for="{{ attestationElseResource }}">
<common-list item="{{ item }}"></common-list>
@ -280,14 +269,17 @@
<view id="pinterest-list-left" class="pinterest-list-left flex1">
<block wx:for="{{ listDataLeft }}" wx:key="index">
<template wx:if="{{item.type == 'adv'}}" is="adv" data="{{ item }}"></template>
<template wx:elif="{{item.type == 'apartment'}}" is="apartmentApartment" data="{{ item,bgColorObj }}"></template>
<template wx:elif="{{item.type == 'apartment'}}" is="apartmentApartment"
data="{{ item,bgColorObj }}"></template>
<template wx:else is="general" data="{{ item,bgColorObj }}"></template>
</block>
</view>
<view id="pinterest-list-right" class="pinterest-list-right flex1" style="display:flex;flex-direction:column;align-items: flex-end;">
<view id="pinterest-list-right" class="pinterest-list-right flex1"
style="display:flex;flex-direction:column;align-items: flex-end;">
<block wx:for="{{ listDataRight }}" wx:key="index">
<template wx:if="{{item.type == 'adv'}}" is="adv" data="{{ item }}"></template>
<template wx:elif="{{item.type == 'apartment'}}" is="apartmentApartment" data="{{ item,bgColorObj }}"></template>
<template wx:elif="{{item.type == 'apartment'}}" is="apartmentApartment"
data="{{ item,bgColorObj }}"></template>
<template wx:else is="general" data="{{ item,bgColorObj }}"></template>
</block>
</view>
@ -313,94 +305,6 @@
</view>
</view>
<!-- 房源距离院校弹窗 -->
<view class="root-portal" wx:if="{{ academyState }}">
<view class="root-portal-bj" bindtap="negation" data-key="academyState"></view>
<view class="academy-pop">
<!-- 关闭 -->
<image class="pop-close" bindtap="negation" data-key="academyState" src="/img/u1849.svg"></image>
<view class="academy-headline flexcenter">
房源<image class="academy-headline-icon" src="https://app.gter.net/image/miniApp/HKRenting/arrows-green.svg" mode="widthFix"></image>院校
</view>
<view class="academy-box flexflex">
<view class="academy-left">
<scroll-view class="scroll-view" scroll-y style="height: 100%;max-height: 70vh;">
<view class="school-item flexcenter {{ index == academyPitchIndex ? 'pitch' : '' }}" wx:for="{{ annexSchoolList }}" wx:key="index" bind:tap="selectAcademyIndex" data-index="{{ index }}">{{ item.alias }}</view>
</scroll-view>
</view>
<view class="academy-right flex1">
<scroll-view class="scroll-view" scroll-y style="height: 100%;">
<view class="academy-right-header flexacenter">
<view class="school-icon-box flexcenter">
<image class="school-icon" mode="widthFix" src="/img/u1834.png"></image>
</view>
{{ targetAcademyPitch.school }}
</view>
<view class="academy-school-hint">本数据来自高德地图,仅供参考。</view>
<view class="academy-school-item" wx:for="{{ targetAcademyPitch.list }}" wx:key="index">
<view class="academy-school-item-header flexacenter">
<view class="academy-school-item-left flexacenter">
<view class="academy-school-item-name">{{ item.title }}</view>
<view class="academy-school-item-number">{{ item.distanceText || '1km' }}</view>
</view>
<view class="academy-school-item-right flexacenter">
<image wx:if="{{ item.publictransport }}" class="academy-school-item-icon" src="/img/subway-icon.png" mode="widthFix"></image>
<image wx:else class="academy-school-item-icon" src="/img/walk-icon.png" mode="widthFix"></image>
<view class="academy-school-item-time">{{ item.publictransport['durationText'] || item.durationText || '1分钟'}}</view>
</view>
<image class="arrow-green" mode="widthFix" src="/img/arrow-green.svg"></image>
</view>
<view class="academy-school-item-journey" wx:if="{{ item.publictransport }}">
<view class="journey-item flexacenter" wx:for="{{ item.publictransport.segments }}">
<view class="circle"></view>
<!-- 步行 骑行 -->
<view wx:if="{{ item.type == 'walking' }}" class="journey-value flex1">步行{{ item.distanceText }}</view>
<!-- 地铁 -->
<view wx:elif="{{ item.type == 'bus' && item.bustype == '地铁线路' }}" class="journey-value flex1 subway flexacenter">
<view class="subway-name flexcenter">{{ item.name }}</view>
<view class="flex1" style="white-space:nowrap;">{{ item.via_num }}站·{{ item.durationText }}</view>
</view>
<!-- 公交 -->
<view wx:elif="{{ item.type == 'bus' && item.bustype == '普通公交线路' }}" class="journey-value flex1 bus flexacenter">
<view class="bus-name flexcenter">{{ item.name }}</view>
<view class="flex1" style="white-space:nowrap;">{{ item.via_num }}站·{{ item.durationText }}</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<!-- <scroll-view scroll-y style="height: 100%;">
<view class="academy-item">
<view class="academy-title">
<view class="academy-icon-box">
<image class="academy-icon" mode="widthFix" src="/img/u1827.png"></image>
</view>
<view class="academy-place">
{{ info.address }}
</view>
</view>
<view class="school-list"></view>
</view>
<view class="academy-item" wx:for="{{ info.pointData }}" wx:key="index">
<view class="academy-title">
<view class="academy-icon-box">
<image class="academy-icon" mode="widthFix" src="/img/u1834.png"></image>
</view>
<view class="academy-place">{{ item.name }}</view>
</view>
<view class="school-list">
<view class="school-item" wx:for="{{ item.point }}" wx:for-item="it" wx:for-index="i" wx:key="index">
<view class="school-name">{{ it.title }}</view>
<view class="school-distance">{{ it.distance }} 公里</view>
</view>
</view>
</view>
</scroll-view> -->
</view>
</view>
</view>
<!-- 认证房东的 联系方式模板 -->
<template name="certificationContact">
<view class="contactInformation-item">
@ -475,13 +379,19 @@
<template name="disclaimer">
<view class="disclaimer">
<view class="disclaimer-title">免责声明</view>
<view class="disclaimer-item" bindtap="publicCopy" data-value="{{ info.id }}"><text>房源ID{{ info.id }}</text>(点击可复制)</view>
<view class="disclaimer-item" bindtap="publicCopy" data-value="{{ info.id }}">
<text>房源ID{{ info.id }}</text>(点击可复制)
</view>
<view class="disclaimer-item">发布者对房源信息的真实性、合法性等负责,平台不负责甄别和审核具体内容真实性和有效性等,请务必仔细核实相关信息,谨防上当受骗。</view>
<view class="disclaimer-item">如房源信息中有内容侵犯了您的合法权益,可点击屏幕右侧的举报或联系寄托方同学<view bindtap="publicCopy" data-value="gternet2">(微信号<text>gternet2</text>,点击可复制)</view>,我们会及时处理。谢谢!</view>
<view class="disclaimer-item">公寓/酒店/中介房源推广合作请联系:<view bindtap="publicCopy" data-value="ad@gter.net"><text>ad@gter.net</text>(点击可复制)</view>
<view class="disclaimer-item">如房源信息中有内容侵犯了您的合法权益,可点击屏幕右侧的举报或联系寄托方同学<view bindtap="publicCopy"
data-value="gternet2">(微信号<text>gternet2</text>,点击可复制)</view>,我们会及时处理。谢谢!</view>
<view class="disclaimer-item">公寓/酒店/中介房源推广合作请联系:<view bindtap="publicCopy" data-value="ad@gter.net">
<text>ad@gter.net</text>(点击可复制)
</view>
</view>
<image wx:if="{{ wechat.service }}" show-menu-by-longpress mode="widthFix" class="service" src="{{ wechat.service }}"></image>
<image wx:if="{{ wechat.service }}" show-menu-by-longpress mode="widthFix" class="service"
src="{{ wechat.service }}"></image>
</view>
</template>
@ -516,7 +426,8 @@
<view>备注:寄托租房</view>
</view>
<view class="contactInformation-right">
<image class="contactInformation-icon" show-menu-by-longpress="true" src="{{ info.wechatdata.url }}"></image>
<image class="contactInformation-icon" show-menu-by-longpress="true"
src="{{ info.wechatdata.url }}"></image>
</view>
</view>
</view>
@ -524,17 +435,20 @@
<!-- 微信号 -->
<block wx:if="{{ info.wechat }}">
<template is="certificationContact" data="{{ name: '微信号' ,value:info.wechat,num: 'wechat' }}"></template>
<template is="certificationContact"
data="{{ name: '微信号' ,value:info.wechat,num: 'wechat' }}"></template>
</block>
<!-- WhatsApp -->
<block wx:if="{{ info.whatsapp }}">
<template is="certificationContact" data="{{ name: 'WhatsApp' ,value:info.whatsapp,num: 'whatsapp' }}"></template>
<template is="certificationContact"
data="{{ name: 'WhatsApp' ,value:info.whatsapp,num: 'whatsapp' }}"></template>
</block>
<!-- 电话号码 -->
<block wx:if="{{ info.tel }}">
<template is="certificationContact" data="{{ name: '电话号码' ,value:info.tel,num: 'tel',dial: true }}"></template>
<template is="certificationContact"
data="{{ name: '电话号码' ,value:info.tel,num: 'tel',dial: true }}"></template>
</block>
</view>
</view>
@ -549,17 +463,20 @@
<view class="new-contact-information-title">{{ item.name }}</view>
<block wx:if="{{ item.key == 'wechatdata' }}">
<view class="new-contact-wechart-box flexcenter">
<image class="new-contact-wechart-icon" show-menu-by-longpress mode="widthFix" src="{{ item.value['url'] }}"></image>
<image class="new-contact-wechart-icon" show-menu-by-longpress mode="widthFix"
src="{{ item.value['url'] }}"></image>
</view>
<view class="new-contact-wechart-text">长按二维码添加好友,备注:寄托租房</view>
</block>
<block wx:else>
<view class="new-contact-information-number">{{ item.value }}</view>
<view class="new-contact-information-btn flexcenter">
<view class="new-contact-information-btn-item flexcenter" wx:if="{{ item.key == 'tel' }}" bindtap="call_us">
<view class="new-contact-information-btn-item flexcenter" wx:if="{{ item.key == 'tel' }}"
bindtap="call_us">
<image class="new-contact-information-btn-icon phone" src="/img/phone-icon.png"></image>拨打
</view>
<view class="new-contact-information-btn-item flexcenter" bindtap="publicCopy" data-value="{{ item.value }}">
<view class="new-contact-information-btn-item flexcenter" bindtap="publicCopy"
data-value="{{ item.value }}">
<image class="new-contact-information-btn-icon" src="/img/copy-icon.png"></image>复制
</view>
</view>

View File

@ -401,44 +401,6 @@ map .clickmap {
font-size: 26rpx;
}
.school-list .li {
padding: 10rpx 36rpx 10rpx 58rpx;
display: flex;
align-items: flex-start;
word-break: break-word;
}
.school-list .li .school {
display: inline-flex;
flex-direction: column;
}
.school-list .li .name {
color: #666;
font-size: 28rpx;
font-weight: 400;
margin-bottom: 8rpx;
}
.school-list .li .gate {
font-size: 26rpx;
color: #999;
word-break: break-word;
}
.school-list .point {
margin-top: 14rpx;
display: inline-flex;
flex: 0 0 10rpx;
width: 10rpx;
height: 10rpx;
background: #333;
border-radius: 50%;
margin-right: 20rpx;
}
.traffic .around-school-img {
width: 32rpx;
height: 32rpx;
@ -564,7 +526,6 @@ map .clickmap {
.around-school-alert .school .icon,
.school-list .li .school .icon {
/* position: absolute; */
left: -50rpx;
top: 8rpx;
width: 25rpx;
@ -592,7 +553,6 @@ map .clickmap {
}
.ad-contact {
/* padding: 0 30rpx 40rpx; */
padding: 0 30rpx 64rpx;
color: #999;
font-size: 24rpx;
@ -1043,87 +1003,6 @@ map .clickmap {
max-width: 540rpx;
}
.certification .school {
display: flex;
flex-wrap: wrap;
margin-top: 30rpx;
}
.certification .school .school-item {
width: 160rpx;
height: 54rpx;
line-height: 54rpx;
border-radius: 15rpx;
border: 2rpx solid #e6e6e6;
margin: 0 16rpx 15rpx 0;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.certification .school.special .school-item:first-of-type {
background: -webkit-linear-gradient(170.909723079178deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: -moz-linear-gradient(-80.9097230791777deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: linear-gradient(-80.9097230791777deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
font-size: 21rpx;
border: none;
}
.certification .school.special .school-item.durationText:first-of-type {
width: 337.5rpx;
}
.certification .school.special .school-item:first-of-type .school-name {
color: #fff;
max-width: none;
}
.certification .school.special .school-item:first-of-type .school-distance {
color: #fff;
font-size: 21rpx;
}
.certification .school.special .school-item:first-of-type .long-string {
color: #fff;
font-size: 21rpx;
margin: 0 10rpx;
}
.certification .school.special .school-item:nth-child(3),
.certification .school.special .school-item:nth-child(7) {
margin-right: 0;
}
.certification .school .school-item:nth-of-type(4n) {
margin-right: 0;
}
.certification .school.special .school-item:nth-of-type(4n) {
margin-right: 16rpx;
}
.certification .school .school-name {
font-size: 24rpx;
color: #333;
margin-right: 6rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 3em;
}
.certification .school .school-distance {
/* color: #62b1ff; */
color: #8162FF;
font-size: 21rpx;
}
.certification .school .more-icon {
width: 24rpx;
height: 24rpx;
}
.certification .information-box,
.certification .otherDescription-box {
padding: 0 30rpx;
@ -1302,8 +1181,7 @@ map .clickmap {
padding: 30rpx 30rpx 0;
}
.certification .contactInformation-pop,
.academy-pop {
.certification .contactInformation-pop {
width: 750rpx;
position: absolute;
bottom: 0;
@ -1313,8 +1191,7 @@ map .clickmap {
flex-direction: column;
}
.certification .contactInformation-headline,
.academy-headline {
.certification .contactInformation-headline {
font-size: 36rpx;
font-weight: 650;
color: #000;
@ -1323,17 +1200,6 @@ map .clickmap {
border-bottom: 1rpx solid #ebebeb;
}
.academy-headline .academy-headline-icon {
width: 36rpx;
height: 36rpx;
margin: 0 30rpx;
}
.certification .contactInformation-box,
.academy-box {
/* margin-top: 45rpx; */
}
.certification .contactInformation-box .contactInformation-item {
margin: 0 30rpx;
background-color: #fff;
@ -1424,92 +1290,6 @@ map .clickmap {
margin-left: 30rpx;
}
.academy-pop {
background-color: #fff;
width: 100vw;
max-height: 85vh;
position: fixed;
}
.academy-box {
/* display: flex;s */
/* flex-direction: column; */
/* height: 70vh; */
/* overflow-y: scroll; */
}
.academy-box .academy-item {
margin-left: 57rpx;
border-left: 2rpx dotted #e7e7e7;
padding-bottom: 60rpx;
}
.academy-box .academy-item:last-child {
border: none;
}
.academy-box .academy-item .academy-title {
font-weight: bold;
font-size: 27rpx;
color: #333;
display: flex;
align-items: center;
margin-bottom: 6rpx;
}
.academy-box .academy-icon-box {
width: 54rpx;
height: 54rpx;
line-height: 54rpx;
background-color: #ffcc17;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
margin-left: -27rpx;
}
.academy-box .academy-item:not(:first-child) .academy-icon-box {
background-color: rgba(98, 177, 255, 1);
}
.academy-box .academy-icon {
width: 36rpx;
height: 36rpx;
}
.academy-box .academy-title .academy-place {
margin-left: 24rpx;
}
.academy-box .school-list {
padding-left: 54rpx;
display: flex;
flex-wrap: wrap;
}
.academy-box .school-list .school-item {
display: flex;
align-items: center;
height: 54rpx;
background-color: rgba(242, 242, 242, 0.69803922);
border-radius: 51rpx;
padding: 0 14rpx;
margin-right: 15rpx;
margin-bottom: 15rpx;
}
.academy-box .school-item .school-name {
font-size: 24rpx;
color: #333;
}
.academy-box .school-item .school-distance {
font-size: 21rpx;
color: #62b1ff;
margin-left: 14rpx;
}
.certification .user-info {
margin-bottom: 36rpx;
}
@ -2130,14 +1910,6 @@ map .clickmap {
font-size: 30rpx;
}
.academy-box .academy-icon-box {
background-color: #ffcc17;
}
.academy-box .academy-item:not(:first-child) .academy-icon-box {
background-color: #50e3c2;
}
.housing-information .location-box {
padding-bottom: 0;
}
@ -2321,278 +2093,9 @@ map .clickmap {
height: 36rpx;
}
.service {
width: calc(100vw - 60rpx);
height: 300rpx;
margin: 10rpx auto 0;
border-radius: 10rpx;
}
.academy-left {
width: 105rpx;
border-right: 1rpx solid #ebebeb;
background-color: rgba(246, 246, 246, 1);
}
.academy-left .school-item {
width: 100%;
height: 105rpx;
font-size: 24rpx;
color: #555;
}
.academy-box {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
}
.academy-box .school-item.pitch {
color: #fff;
background: -webkit-linear-gradient(135deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: -moz-linear-gradient(-45deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: linear-gradient(-45deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
}
.academy-box .academy-right {
padding: 45rpx 30rpx 50rpx 46.5rpx;
overflow: auto;
height: 100%;
max-height: 69vh;
}
.academy-box .academy-right .scroll-view {
/* padding-bottom: 100rpx; */
}
.academy-box .academy-right .academy-right-header {
color: #000;
font-size: 30rpx;
font-weight: 650;
/* margin-bottom: 46rpx; */
margin-bottom: 30rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
}
.academy-box .academy-right .academy-right-header .school-icon-box {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
background-color: #fddf6d;
margin-right: 15rpx;
}
.academy-box .academy-right .academy-right-header .school-icon-box .school-icon {
width: 36rpx;
height: 36rpx;
}
.academy-box .academy-right .academy-school-item {
background-color: rgba(246, 246, 246, 1);
border-radius: 18rpx;
margin-bottom: 45rpx;
}
.academy-box .academy-right .academy-school-item-header {
font-size: 27rpx;
width: 570rpx;
height: 103.5rpx;
justify-content: space-between;
padding-left: 33rpx;
padding-right: 30rpx;
position: relative;
}
.academy-box .academy-right .academy-school-item-header .arrow-green {
width: 10.5rpx;
height: 18rpx;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
}
.academy-box .academy-right .academy-school-item-name {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
color: #000000;
}
.academy-box .academy-right .academy-school-item-number {
color: rgb(51, 51, 51);
margin-left: 6rpx;
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
}
.academy-box .academy-right .academy-school-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 6rpx;
}
.academy-box .academy-right .academy-school-item-time {
color: #000;
font-weight: 650;
font-size: 27rpx;
}
.academy-box .academy-right .academy-school-item-journey {
border-top: 1rpx solid #ebebeb;
padding-top: 33rpx;
padding-left: 33rpx;
padding-bottom: 39rpx;
position: relative;
}
.journey-item {
position: relative;
z-index: 1;
}
.journey-item:not(:last-of-type) {
margin-bottom: 39rpx;
}
.academy-school-item-journey::after {
content: "";
position: absolute;
top: 0;
left: 39.25rpx;
width: 1rpx;
height: 100%;
display: block;
background-image: linear-gradient(to bottom, #aaaaaa 50%, transparent 50%);
background-size: 1px 4px;
/* 控制虚线的宽度和间距 */
}
.journey-item:first-of-type::after {
content: "";
display: block;
position: absolute;
top: -33rpx;
left: 0;
width: 13.5rpx;
height: calc(50% + 33rpx);
background-color: rgba(246, 246, 246, 1);
/* z-index: 2; */
}
.journey-item:last-of-type::after {
content: "";
display: block;
position: absolute;
bottom: -39rpx;
left: 0;
width: 13.5rpx;
height: calc(50% + 39rpx);
background-color: rgba(246, 246, 246, 1);
/* z-index: 2; */
}
.journey-item .circle {
width: 14rpx;
height: 14rpx;
border-radius: 50%;
background-color: #f6f6f6;
border: 1rpx solid #797979;
box-sizing: border-box;
margin-right: 30rpx;
z-index: 1;
}
.journey-item .journey-value {
color: #333;
font-size: 22.5rpx;
padding-right: 30rpx;
}
.journey-item .journey-value.subway {
font-size: 22.5rpx;
color: #AAAAAA;
}
.journey-item .journey-value.subway .subway-name {
padding: 5rpx 9.5rpx;
background-color: rgba(51, 51, 51, 1);
border-radius: 15rpx;
color: #fff;
margin-right: 15rpx;
}
.journey-item .journey-value.bus {
font-size: 22.5rpx;
color: #AAAAAA;
}
.journey-item .journey-value.bus .bus-name {
padding: 5rpx 9.5rpx;
background-color: rgba(80, 227, 194, 0);
box-sizing: border-box;
border: 1rpx solid rgba(51, 51, 51, 1);
border-radius: 15rpx;
margin-right: 15rpx;
color: #333333;
}
.academy-school-hint {
color: #a09e9e;
font-size: 22.5rpx;
margin-bottom: 30rpx;
}
.school-new {
margin-top: 30rpx;
}
.school-new .school-new-list .school-new-item {
width: 270rpx;
height: 54rpx;
background-color: #f6f6f6;
border: 1rpx solid #ebebeb;
border-radius: 15rpx;
box-shadow: 15rpx;
font-size: 24rpx;
color: #333333;
display: inline-flex;
margin-right: 15rpx;
}
.school-new .school-new-list .school-new-item:not(:nth-last-child(-n+2)) {
margin-bottom: 15rpx;
}
.school-new .school-new-list .school-new-item:not(:nth-child(even)) {
margin-right: 15rpx;
}
.school-new .school-new-list .school-new-item .school-new-text {
color: #8162FF;
font-size: 21rpx;
margin-left: 10rpx;
}
.school-new .school-new-list .school-new-item .school-new-icon {
width: 30rpx;
height: 30rpx;
margin-left: 12rpx;
}
.school-new .school-new-more {
width: 117rpx;
height: 123rpx;
background-color: #f6f6f6;
border: 1rpx solid #ebebeb;
border-radius: 15rpx;
font-size: 24rpx;
color: #333333;
}
.school-new .school-new-more .school-new-more-icon {
width: 24rpx;
height: 24rpx;
margin-left: 9rpx;
}

View File

@ -0,0 +1,160 @@
// template/nearbySchool/nearbySchool.js
const app = getApp()
var miucms = require('../../utils/miucms.js');
Component({
/**
* 组件的属性列表
*/
properties: {
uniqid: {
type: String,
observer(res) {
this.distanceSchool()
}
},
options: {
type: Object,
observer(res) {
console.log("res,options", res);
}
},
istype: Number,
},
/**
* 组件的初始数据
*/
data: {
annexSchoolOmit: [], // 附近院校 前面 7个 或者 6个的
annexSchoolList: [], // 附近院校数据
academyPitchIndex: 0, // 附近学校距离选中院校 下标
targetAcademyPitch: [], // 附近学校距离选中院校 数据
specialSchoolDistance: null, // 特殊的 用户带有school参数 则需要特殊显示 学校距离
},
/**
* 组件的方法列表
*/
methods: {
// 获取 距离学校距离
distanceSchool() {
miucms.request(`${app.globalData.baseURL}/tenement/v2/api/details/distance`, {
uniqid: this.data.uniqid,
istype: this.data.istype,
}).then(res => {
if (res.code != 200) return
let data = res.data
let specialSchoolDistance = null
let academyPitchIndex = 0
const school = this.data.options['school'] || ''
let annexSchoolOmit = []
data.forEach((element, index) => {
element['distanceText'] = this.metersToKilometers(element.distance)
element.list.forEach((ele, ii) => {
ele['durationText'] = this.secondsToHoursMinutes(ele.duration, 'chinese')
ele['durationText2'] = this.secondsToHoursMinutes(ele.duration)
ele['distanceText'] = this.metersToKilometers(ele.distance)
if (Object.prototype.toString.call(ele.publictransport) === '[object Object]') {
ele.publictransport['durationText'] = this.secondsToHoursMinutes(ele?.publictransport?.duration || 0, 'chinese')
ele.publictransport['durationText2'] = this.secondsToHoursMinutes(ele?.publictransport?.duration || 0)
const segments = ele.publictransport['segments']
if (Array.isArray(segments)) {
segments.forEach(e => {
// console.log("e", e);durationText
e['via_num'] = 1 + Math.floor(e.via_num)
e['durationText'] = this.secondsToHoursMinutes(e.duration)
e['distanceText'] = this.metersToKilometers(e.distance, 'chinese')
})
}
} else ele.publictransport = null
if (ii == 0) {
const obj = element.list[0] || {}
let toolText = "步行"
if (Object.prototype.toString.call(obj.publictransport) === '[object Object]') toolText = "公交地铁"
element['distanceText'] = obj['distanceText']
element['durationText'] = obj.publictransport?.durationText2 || obj['durationText2']
element['toolText'] = toolText
}
})
if (school == element.id) {
academyPitchIndex = index
specialSchoolDistance = element
} else annexSchoolOmit.push(element)
})
if (specialSchoolDistance) annexSchoolOmit = annexSchoolOmit.slice(0, 5)
else annexSchoolOmit = annexSchoolOmit.slice(0, 4)
this.setData({
annexSchoolList: data,
targetAcademyPitch: data[academyPitchIndex],
annexSchoolOmit,
specialSchoolDistance,
academyPitchIndex,
})
})
},
// 切换附近学校弹窗
cutNearbySchools() {
this.setData({
academyState: true,
})
},
// 选择附近学校距离的学校下标
selectAcademyIndex(e) {
const academyPitchIndex = e.currentTarget.dataset.index || 0
const annexSchoolList = this.data.annexSchoolList
this.setData({
academyPitchIndex,
targetAcademyPitch: annexSchoolList[academyPitchIndex],
})
},
// 转换 秒数
secondsToHoursMinutes(seconds, type) {
// 计算小时数
const hours = Math.floor(seconds / 3600);
// 计算剩余的秒数
const remainingSecondsAfterHours = seconds % 3600;
// 计算分钟数
const minutes = Math.floor(remainingSecondsAfterHours / 60);
// 计算剩余的秒数
const remainingSeconds = remainingSecondsAfterHours % 60;
let text = ""
if (type == 'chinese') {
if (hours != 0) text += hours + '小时'
if (minutes != 0) text += minutes + '分钟'
if (remainingSeconds != 0 && minutes == 0) text += remainingSeconds + '秒'
} else {
if (hours != 0) text += hours + 'h'
if (minutes != 0) text += minutes + 'min'
if (remainingSeconds != 0 && minutes == 0) text += remainingSeconds + 's'
}
return text
},
// 转换 米数
metersToKilometers(input, type) {
let text = ""
if (input >= 1000) text = (input / 1000).toFixed(1) + (type == 'chinese' ? '公里' : 'km')
else text = input + (type == 'chinese' ? '米' : 'm');
return text;
},
// 专门取反的函数
negation(e) {
let key = e.currentTarget.dataset.key
this.setData({
[key]: !this.data[key]
})
},
}
})

View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -0,0 +1,113 @@
<!--template/nearbySchool/nearbySchool.wxml-->
<!-- 附近学校 -->
<view class="school {{ specialSchoolDistance ? 'special' : '' }} {{ istype == 2 ? 'apartment' : '' }}" bindtap="cutNearbySchools"
wx:if="{{ annexSchoolOmit.length != 0 && options['school'] }}">
<view class="school-item {{ specialSchoolDistance.durationText ? 'durationText' : '' }}"
wx:if="{{ specialSchoolDistance }}">
<text class="school-name">{{ specialSchoolDistance.alias }}</text>
<text class="school-distance">{{ specialSchoolDistance.distanceText }}</text>
<block wx:if="{{ specialSchoolDistance.durationText }}">
<text class="long-string">|</text>
<text class="school-name" style="font-size: 21rpx;">{{ specialSchoolDistance.toolText }}</text>
<text class="school-distance">{{ specialSchoolDistance.durationText }}</text>
</block>
</view>
<view class="school-item" wx:for="{{ annexSchoolOmit }}" wx:key="index">
<text class="school-name">{{ item.alias }}</text>
<text class="school-distance">{{ item.distanceText }}</text>
</view>
<view class="school-item more">
<text class="school-name">更多</text>
<image class="more-icon" mode="widthFix" src="/img/u1908.svg"></image>
</view>
</view>
<view class="school-new flexacenter {{ istype == 2 ? 'apartment' : '' }}" wx:if="{{ annexSchoolOmit.length != 0 && !options['school'] }}"
bindtap="cutNearbySchools">
<view class="school-new-list flex1">
<view class="school-new-item flexcenter" wx:for="{{ annexSchoolOmit }}" wx:key="indexS">
{{ item.alias }}
<text class="school-new-text">{{ item.distanceText }}</text>
<image wx:if="{{ item.toolText == '公交地铁' }}" class="school-new-icon" mode="widthFix"
src="/img/subway-icon.png"></image>
<image wx:else class="school-new-icon" mode="widthFix" src="/img/walk-icon.png"></image>
<text class="school-new-text">{{ item.durationText }}</text>
</view>
</view>
<view class="school-new-more flexcenter">
更多<image class="school-new-more-icon" src="/img/u1908.svg"></image>
</view>
</view>
<!-- 房源距离院校弹窗 -->
<view class="root-portal" wx:if="{{ academyState }}">
<view class="root-portal-bj" bindtap="negation" data-key="academyState"></view>
<view class="academy-pop">
<!-- 关闭 -->
<image class="pop-close" bindtap="negation" data-key="academyState" src="/img/u1849.svg"></image>
<view class="academy-headline flexcenter">
房源<image class="academy-headline-icon" src="https://app.gter.net/image/miniApp/HKRenting/arrows-green.svg"
mode="widthFix"></image>院校
</view>
<view class="academy-box flexflex">
<view class="academy-left">
<scroll-view class="scroll-view" scroll-y style="height: 100%;max-height: 70vh;">
<view class="school-item flexcenter {{ index == academyPitchIndex ? 'pitch' : '' }}"
wx:for="{{ annexSchoolList }}" wx:key="index" bind:tap="selectAcademyIndex"
data-index="{{ index }}">{{ item.alias }}</view>
</scroll-view>
</view>
<view class="academy-right flex1">
<scroll-view class="scroll-view" scroll-y style="height: 100%;">
<view class="academy-right-header flexacenter">
<view class="school-icon-box flexcenter">
<image class="school-icon" mode="widthFix" src="/img/u1834.png"></image>
</view>
{{ targetAcademyPitch.school }}
</view>
<view class="academy-school-hint">本数据来自高德地图,仅供参考。</view>
<view class="academy-school-item" wx:for="{{ targetAcademyPitch.list }}" wx:key="index">
<view class="academy-school-item-header flexacenter">
<view class="academy-school-item-left flexacenter">
<view class="academy-school-item-name">{{ item.title }}</view>
<view class="academy-school-item-number">{{ item.distanceText || '1km' }}</view>
</view>
<view class="academy-school-item-right flexacenter">
<image wx:if="{{ item.publictransport }}" class="academy-school-item-icon"
src="/img/subway-icon.png" mode="widthFix"></image>
<image wx:else class="academy-school-item-icon" src="/img/walk-icon.png"
mode="widthFix"></image>
<view class="academy-school-item-time">
{{ item.publictransport['durationText'] || item.durationText || '1分钟'}}</view>
</view>
<image class="arrow-green" mode="widthFix" src="/img/arrow-green.svg"></image>
</view>
<view class="academy-school-item-journey" wx:if="{{ item.publictransport }}">
<view class="journey-item flexacenter" wx:for="{{ item.publictransport.segments }}">
<view class="circle"></view>
<!-- 步行 骑行 -->
<view wx:if="{{ item.type == 'walking' }}" class="journey-value flex1">
步行{{ item.distanceText }}</view>
<!-- 地铁 -->
<view wx:elif="{{ item.type == 'bus' && item.bustype == '地铁线路' }}"
class="journey-value flex1 subway flexacenter">
<view class="subway-name flexcenter">{{ item.name }}</view>
<view class="flex1" style="white-space:nowrap;">
{{ item.via_num }}站·{{ item.durationText }}</view>
</view>
<!-- 公交 -->
<view wx:elif="{{ item.type == 'bus' && item.bustype == '普通公交线路' }}"
class="journey-value flex1 bus flexacenter">
<view class="bus-name flexcenter">{{ item.name }}</view>
<view class="flex1" style="white-space:nowrap;">
{{ item.via_num }}站·{{ item.durationText }}</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</view>

View File

@ -0,0 +1,473 @@
/* template/nearbySchool/nearbySchool.wxss */
@import '/css/common.wxss';
.school {
display: flex;
flex-wrap: wrap;
margin-top: 30rpx;
}
.school .school-item {
width: 160rpx;
height: 54rpx;
line-height: 54rpx;
border-radius: 15rpx;
border: 2rpx solid #e6e6e6;
margin: 0 16rpx 15rpx 0;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
.school.special .school-item:first-of-type {
background: -webkit-linear-gradient(170.909723079178deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: -moz-linear-gradient(-80.9097230791777deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: linear-gradient(-80.9097230791777deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
font-size: 21rpx;
border: none;
}
.school.special .school-item.durationText:first-of-type {
width: 337.5rpx;
}
.school.special .school-item:first-of-type .school-name {
color: #fff;
max-width: none;
}
.school.special .school-item:first-of-type .school-distance {
color: #fff;
font-size: 21rpx;
}
.school.special .school-item:first-of-type .long-string {
color: #fff;
font-size: 21rpx;
margin: 0 10rpx;
}
.school.special .school-item:nth-child(3),
.school.special .school-item:nth-child(7) {
margin-right: 0;
}
.school .school-item:nth-of-type(4n) {
margin-right: 0;
}
.school.special .school-item:nth-of-type(4n) {
margin-right: 16rpx;
}
.school .school-name {
font-size: 24rpx;
color: #333;
margin-right: 6rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 3em;
}
.school .school-distance {
color: #8162FF;
font-size: 21rpx;
}
.school .more-icon {
width: 24rpx;
height: 24rpx;
}
.school-new {
margin-top: 30rpx;
}
.school-new .school-new-list .school-new-item {
width: 270rpx;
height: 54rpx;
background-color: #f6f6f6;
border: 1rpx solid #ebebeb;
border-radius: 15rpx;
box-shadow: 15rpx;
font-size: 24rpx;
color: #333333;
display: inline-flex;
margin-right: 15rpx;
}
.school-new .school-new-list .school-new-item:not(:nth-last-child(-n+2)) {
margin-bottom: 15rpx;
}
.school-new .school-new-list .school-new-item:not(:nth-child(even)) {
margin-right: 15rpx;
}
.school-new .school-new-list .school-new-item .school-new-text {
color: #8162FF;
font-size: 21rpx;
margin-left: 10rpx;
}
.school-new .school-new-list .school-new-item .school-new-icon {
width: 30rpx;
height: 30rpx;
margin-left: 12rpx;
}
.school-new .school-new-more {
width: 117rpx;
height: 123rpx;
background-color: #f6f6f6;
border: 1rpx solid #ebebeb;
border-radius: 15rpx;
font-size: 24rpx;
color: #333333;
}
.school-new .school-new-more .school-new-more-icon {
width: 24rpx;
height: 24rpx;
margin-left: 9rpx;
}
.root-portal {
background-color: rgba(0, 0, 0, 0.69803922);
width: 750rpx;
height: 100vh;
display: block;
position: fixed;
top: 0;
left: 0;
bottom: 0;
z-index: 30007;
}
.root-portal-bj {
width: 750rpx;
height: 100vh;
display: block;
position: fixed;
top: 0;
left: 0;
bottom: 0;
}
.academy-pop {
bottom: 0;
border-radius: 45rpx 45rpx 0 0;
display: flex;
flex-direction: column;
background-color: #fff;
width: 100vw;
max-height: 85vh;
position: fixed;
}
.pop-close {
width: 30rpx;
height: 30rpx;
align-self: flex-end;
padding: 30rpx 30rpx 0;
}
.academy-headline {
font-size: 36rpx;
font-weight: 650;
color: #000;
text-align: center;
padding-bottom: 60rpx;
border-bottom: 1rpx solid #ebebeb;
}
.academy-headline .academy-headline-icon {
width: 36rpx;
height: 36rpx;
margin: 0 30rpx;
}
.academy-box .academy-item {
margin-left: 57rpx;
border-left: 2rpx dotted #e7e7e7;
padding-bottom: 60rpx;
}
.academy-box .academy-item:last-child {
border: none;
}
.academy-box .academy-item .academy-title {
font-weight: bold;
font-size: 27rpx;
color: #333;
display: flex;
align-items: center;
margin-bottom: 6rpx;
}
.academy-box .academy-icon-box {
width: 54rpx;
height: 54rpx;
line-height: 54rpx;
background-color: #ffcc17;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
margin-left: -27rpx;
}
.academy-box .academy-item:not(:first-child) .academy-icon-box {
background-color: rgba(98, 177, 255, 1);
}
.academy-box .academy-icon {
width: 36rpx;
height: 36rpx;
}
.academy-box .academy-title .academy-place {
margin-left: 24rpx;
}
.academy-box .school-item .school-name {
font-size: 24rpx;
color: #333;
}
.academy-box .school-item .school-distance {
font-size: 21rpx;
color: #62b1ff;
margin-left: 14rpx;
}
.academy-left {
width: 105rpx;
border-right: 1rpx solid #ebebeb;
background-color: rgba(246, 246, 246, 1);
}
.academy-left .school-item {
width: 100%;
height: 105rpx;
font-size: 24rpx;
color: #555;
}
.academy-box {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
}
.academy-box .school-item.pitch {
color: #fff;
background: -webkit-linear-gradient(135deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: -moz-linear-gradient(-45deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
background: linear-gradient(-45deg, rgba(162, 151, 252, 1) 0%, rgba(128, 128, 255, 1) 100%);
}
.academy-box .academy-right {
padding: 45rpx 30rpx 50rpx 46.5rpx;
overflow: auto;
height: 100%;
max-height: 69vh;
}
.academy-box .academy-right .academy-right-header {
color: #000;
font-size: 30rpx;
font-weight: 650;
margin-bottom: 30rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
}
.academy-box .academy-right .academy-right-header .school-icon-box {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
background-color: #fddf6d;
margin-right: 15rpx;
}
.academy-box .academy-right .academy-right-header .school-icon-box .school-icon {
width: 36rpx;
height: 36rpx;
}
.academy-box .academy-right .academy-school-item {
background-color: rgba(246, 246, 246, 1);
border-radius: 18rpx;
margin-bottom: 45rpx;
}
.academy-box .academy-right .academy-school-item-header {
font-size: 27rpx;
width: 570rpx;
height: 103.5rpx;
justify-content: space-between;
padding-left: 33rpx;
padding-right: 30rpx;
position: relative;
}
.academy-box .academy-right .academy-school-item-header .arrow-green {
width: 10.5rpx;
height: 18rpx;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
}
.academy-box .academy-right .academy-school-item-name {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
color: #000000;
}
.academy-box .academy-right .academy-school-item-number {
color: rgb(51, 51, 51);
margin-left: 6rpx;
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
}
.academy-box .academy-right .academy-school-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 6rpx;
}
.academy-box .academy-right .academy-school-item-time {
color: #000;
font-weight: 650;
font-size: 27rpx;
}
.academy-box .academy-right .academy-school-item-journey {
border-top: 1rpx solid #ebebeb;
padding-top: 33rpx;
padding-left: 33rpx;
padding-bottom: 39rpx;
position: relative;
}
.journey-item {
position: relative;
z-index: 1;
}
.journey-item:not(:last-of-type) {
margin-bottom: 39rpx;
}
.academy-school-item-journey::after {
content: "";
position: absolute;
top: 0;
left: 39.25rpx;
width: 1rpx;
height: 100%;
display: block;
background-image: linear-gradient(to bottom, #aaaaaa 50%, transparent 50%);
background-size: 1px 4px;
}
.journey-item:first-of-type::after {
content: "";
display: block;
position: absolute;
top: -33rpx;
left: 0;
width: 13.5rpx;
height: calc(50% + 33rpx);
background-color: rgba(246, 246, 246, 1);
}
.journey-item:last-of-type::after {
content: "";
display: block;
position: absolute;
bottom: -39rpx;
left: 0;
width: 13.5rpx;
height: calc(50% + 39rpx);
background-color: rgba(246, 246, 246, 1);
}
.journey-item .circle {
width: 14rpx;
height: 14rpx;
border-radius: 50%;
background-color: #f6f6f6;
border: 1rpx solid #797979;
box-sizing: border-box;
margin-right: 30rpx;
z-index: 1;
}
.journey-item .journey-value {
color: #333;
font-size: 22.5rpx;
padding-right: 30rpx;
}
.journey-item .journey-value.subway {
font-size: 22.5rpx;
color: #AAAAAA;
}
.journey-item .journey-value.subway .subway-name {
padding: 5rpx 9.5rpx;
background-color: rgba(51, 51, 51, 1);
border-radius: 15rpx;
color: #fff;
margin-right: 15rpx;
}
.journey-item .journey-value.bus {
font-size: 22.5rpx;
color: #AAAAAA;
}
.journey-item .journey-value.bus .bus-name {
padding: 5rpx 9.5rpx;
background-color: rgba(80, 227, 194, 0);
box-sizing: border-box;
border: 1rpx solid rgba(51, 51, 51, 1);
border-radius: 15rpx;
margin-right: 15rpx;
color: #333333;
}
.academy-school-hint {
color: #a09e9e;
font-size: 22.5rpx;
margin-bottom: 30rpx;
}
.apartment.school {
margin-left: 30rpx;
margin-right: 30rpx;
}
.apartment.school .school-item {
background-color: #fff;
}
.apartment.school-new {
margin-left: 30rpx;
margin-right: 30rpx;
}
.apartment.school-new .school-new-more {
background-color: #fff;
}
.apartment.school-new .school-new-list .school-new-item {
background-color: #fff;
}