排行榜上线

This commit is contained in:
DESKTOP-RQ919RC\Pc 2025-03-06 17:41:21 +08:00
parent e177d0db15
commit 808efb9bb4
26 changed files with 183 additions and 331 deletions

1
app.js
View File

@ -1,4 +1,5 @@
//app.js //app.js
// common.wxml(1) admission-box.wxml(2) projectDetails.wxml(2) indexSidebar.js(2) projectLibrary.js(2)
var miucms = require('./utils/miucms.js'); var miucms = require('./utils/miucms.js');
// var script = require('./utils/script'); // var script = require('./utils/script');
// console.log(script()); // console.log(script());

View File

@ -39,13 +39,7 @@ Component({
majMajorList: [], // 专业的 专业列表 majMajorList: [], // 专业的 专业列表
majYearList: [], // 专业的 年份列表 majYearList: [], // 专业的 年份列表
rankingKey: { rankingKey: common.rankingKey,
"Shanghai Ranking": "软科",
"Times Higher Education": "泰晤士",
"times": "泰晤士",
"USNEWS": "U.S. News",
"US News": "U.S. News",
},
}, },
/** /**
@ -56,8 +50,9 @@ Component({
initCom() { initCom() {
const option = this.data.comOption || {} const option = this.data.comOption || {}
let comJgList = Object.keys(option) || [] let comJgList = Object.keys(option) || []
const jg = comJgList[0] const com = this.data.com
let comYearList = Object.keys(option[jg]).sort((a, b) => b - a) const jg = com.jg || comJgList[0]
const comYearList = Object.keys(option[jg]).sort((a, b) => b - a)
this.setData({ this.setData({
comJgList, comJgList,
comYearList, comYearList,

View File

@ -118,6 +118,7 @@
border: 1rpx solid rgba(204, 208, 3, 1); border: 1rpx solid rgba(204, 208, 3, 1);
font-weight: 650; font-weight: 650;
color: #9A9D02; color: #9A9D02;
background-color: #FFFFFF;
} }
} }
} }

View File

@ -104,6 +104,7 @@
border: 1rpx solid #ccd003; border: 1rpx solid #ccd003;
font-weight: 650; font-weight: 650;
color: #9A9D02; color: #9A9D02;
background-color: #FFFFFF;
} }
.screen-mask .screen-box .footer { .screen-mask .screen-box .footer {
margin-top: 45rpx; margin-top: 45rpx;

View File

@ -62,19 +62,15 @@ Page({
letterFixed: false, letterFixed: false,
isFirstPattern: true, // 是否是首屏模式 isFirstPattern: true, // 是否是首屏模式
rankingKey: { rankingKey: common.rankingKey,
"Shanghai Ranking": "软科",
"Times Higher Education": "泰晤士",
"times": "泰晤士",
"USNEWS": "U.S. News",
"US News": "U.S. News",
},
}, },
/** /**
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
windowHeight: 0, windowHeight: 0,
totalTopHeight: 0,
onLoad(options) { onLoad(options) {
miucms.pageStart(app).then(() => { miucms.pageStart(app).then(() => {
const screen_data = app.globalData.screen_data const screen_data = app.globalData.screen_data
@ -86,6 +82,7 @@ Page({
}) })
this.windowHeight = screen_data.windowHeight this.windowHeight = screen_data.windowHeight
this.totalTopHeight = screen_data.totalTopHeight
common.xgBasicData(this, app).then(data => { common.xgBasicData(this, app).then(data => {
this.setData({ this.setData({
@ -143,12 +140,20 @@ Page({
initialCount[initial]['sum'] += Object.keys(item.systemObj).length || 0 initialCount[initial]['sum'] += Object.keys(item.systemObj).length || 0
}); });
const result = {};
list.forEach(item => {
const firstLetter = item.subject[0].toUpperCase();
if (!result[firstLetter]) {
result[firstLetter] = [];
}
result[firstLetter].push(item);
});
this.setData({ this.setData({
majSum: data.count, majSum: data.count,
majData: list, majData: result,
letterList: initialCount, letterList: initialCount,
}, () => {
this.calculateSectionTops()
}) })
}) })
}, },
@ -279,6 +284,12 @@ Page({
this.setData({ this.setData({
classify, classify,
}, () => {
if (classify == "subject" && JSON.stringify(this.sideHeight) == "{}") {
setTimeout(() => {
this.calculateSectionTops()
}, 500)
}
}) })
}, },
@ -346,6 +357,7 @@ Page({
let headHeight = screen_data.totalTopHeight || 0 let headHeight = screen_data.totalTopHeight || 0
query.select(`.header`).boundingClientRect() query.select(`.header`).boundingClientRect()
query.select(`.item-header-screen`).boundingClientRect() query.select(`.item-header-screen`).boundingClientRect()
query.select(`.item-header-all`).boundingClientRect()
query.select(`.screen`).boundingClientRect() query.select(`.screen`).boundingClientRect()
query.exec(res => { query.exec(res => {
@ -354,26 +366,27 @@ Page({
res.forEach(element => { res.forEach(element => {
headHeight += element.height headHeight += element.height
}) })
headHeight += util.rpxTopx(165) headHeight += util.rpxTopx(405)
let sideHeight = {} let sideHeight = {}
const letterList = this.data.letterList const query2 = wx.createSelectorQuery()
let h = util.pxToRpx(headHeight) query2.selectAll(`.node-item`).boundingClientRect(rect => {
for (const key in letterList) { if (!rect) return
const element = letterList[key] let h = headHeight
let height = 108 * element.initial + 106 * element.sum rect.forEach(element => {
sideHeight[key] = util.rpxTopx(h) sideHeight[element.id] = h
h += height h += element.height
} })
this.sideHeight = sideHeight this.sideHeight = sideHeight
}).exec();
}) })
}, },
// 点击字母跳转 // 点击字母跳转
jumpToIndex(e) { jumpToIndex(e) {
const key = e.currentTarget.dataset.key const key = e.currentTarget.dataset.key
const sideHeight = this.sideHeight
wx.pageScrollTo({ wx.pageScrollTo({
scrollTop: sideHeight[key], offsetTop: -this.totalTopHeight,
selector: `.major .list .item${ key }`,
}) })
}, },
@ -387,7 +400,7 @@ Page({
// 对键数组进行倒序排列 // 对键数组进行倒序排列
let closestValue = keys.reduce((acc, key) => { let closestValue = keys.reduce((acc, key) => {
const diff = sideHeight[key] - scrollTop; const diff = sideHeight[key] - scrollTop;
if (diff <= 5) return key if (diff <= this.totalTopHeight + 20) return key
return acc; return acc;
}, null); }, null);
@ -413,44 +426,32 @@ Page({
/** /**
* 生命周期函数--监听页面初次渲染完成 * 生命周期函数--监听页面初次渲染完成
*/ */
onReady() { onReady() {},
},
/** /**
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {},
},
/** /**
* 生命周期函数--监听页面隐藏 * 生命周期函数--监听页面隐藏
*/ */
onHide() { onHide() {},
},
/** /**
* 生命周期函数--监听页面卸载 * 生命周期函数--监听页面卸载
*/ */
onUnload() { onUnload() {},
},
/** /**
* 页面相关事件处理函数--监听用户下拉动作 * 页面相关事件处理函数--监听用户下拉动作
*/ */
onPullDownRefresh() { onPullDownRefresh() {},
},
/** /**
* 页面上拉触底事件的处理函数 * 页面上拉触底事件的处理函数
*/ */
onReachBottom() { onReachBottom() {},
},
/** /**
* 用户点击右上角分享 * 用户点击右上角分享

View File

@ -121,7 +121,6 @@ view {
border-radius: 0 0 15rpx 15rpx; border-radius: 0 0 15rpx 15rpx;
.classify { .classify {
padding-top: 21rpx;
font-size: 30rpx; font-size: 30rpx;
color: #555555; color: #555555;
height: 109.5rpx; height: 109.5rpx;
@ -135,10 +134,19 @@ view {
.classify-item { .classify-item {
justify-content: center; justify-content: center;
position: relative; position: relative;
padding-top: 21rpx;
.extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
}
.pitch { .pitch {
position: absolute; position: absolute;
top: -28rpx; top: -7rpx;
left: 0; left: 0;
width: 375rpx; width: 375rpx;
height: 90rpx; height: 90rpx;
@ -299,6 +307,10 @@ view {
z-index: 1; z-index: 1;
} }
.node-item {
padding-bottom: 76rpx;
}
.item { .item {
&:not(:last-of-type) { &:not(:last-of-type) {
margin-bottom: 76rpx; margin-bottom: 76rpx;
@ -459,131 +471,5 @@ view {
} }
} }
} }
}
.screen-mask {
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.705882352941177);
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: flex-end;
z-index: 100;
.screen-box {
width: 100vw;
background-color: #FFFFFF;
padding-top: 43.5rpx;
border-radius: 45rpx 45rpx 0 0;
.head {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 30rpx;
color: #000000;
margin-bottom: 45rpx;
text-align: center;
}
.box {
margin: 0 22.5rpx 30rpx;
background-color: rgba(251, 251, 251, 1);
border: 1rpx solid rgba(242, 242, 242, 1);
border-radius: 15rpx;
padding: 16.5rpx 18rpx 30rpx 18rpx;
.title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-bottom: 45rpx;
}
.major-box {
height: 72rpx;
line-height: 72rpx;
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(204, 208, 3, 1);
border-radius: 112.5rpx;
padding-left: 30rpx;
padding-right: 22.5rpx;
.text {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
color: #9A9D02;
&.text-no {
color: #AAAAAA;
font-weight: 400;
}
}
.icon {
width: 10.5rpx;
height: 18rpx;
}
}
.list {
flex-wrap: wrap;
.item {
min-width: 150rpx;
height: 72rpx;
line-height: 72rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 112.5rpx;
font-size: 24rpx;
color: #555555;
margin-right: 15rpx;
padding: 0 15rpx;
margin-bottom: 10rpx;
&.pitch {
border: 1rpx solid rgba(204, 208, 3, 1);
font-weight: 650;
color: #9A9D02;
}
}
}
}
.footer {
margin-top: 45rpx;
height: 201rpx;
border-top: 1rpx solid #ebebeb;
justify-content: space-between;
font-size: 30rpx;
padding: 45rpx 30rpx 0 30rpx;
.cancel {
width: 225rpx;
height: 96rpx;
background-color: rgba(207, 247, 255, 0);
border: 1rpx solid rgba(215, 215, 215, 1);
border-radius: 112.5rpx;
color: #555555;
}
.confirm {
width: 435rpx;
height: 96rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
color: #026277;
background-color: rgba(207, 247, 255, 1);
border: 1rpx solid rgba(186, 222, 230, 1);
border-radius: 112.5rpx;
}
}
}
} }
} }

View File

@ -31,7 +31,7 @@
</view> </view>
</view> </view>
<view class="item-header flexacenter"> <view class="item-header item-header-all flexacenter">
<view class="greenDot"></view> <view class="greenDot"></view>
全部榜单 全部榜单
</view> </view>
@ -48,7 +48,10 @@
综合排名 综合排名
</view> </view>
</view> </view>
<block wx:else>综合排名</block> <block wx:else>
<view class="extension"></view>
综合排名
</block>
</view> </view>
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject"> <view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject">
<view class="pitch right" wx:if="{{ classify == 'subject' }}"> <view class="pitch right" wx:if="{{ classify == 'subject' }}">
@ -60,7 +63,10 @@
专业排名 专业排名
</view> </view>
</view> </view>
<block wx:else>专业排名</block> <block wx:else>
<view class="extension"></view>
专业排名
</block>
</view> </view>
</view> </view>
@ -82,16 +88,17 @@
<view wx:else class="major"> <view wx:else class="major">
<view class="total">共{{ majSum }}个专业排名榜单</view> <view class="total">共{{ majSum }}个专业排名榜单</view>
<view class="letter"> <view class="letter">
<view class="item {{ letterKey == index ? 'pitch' : '' }}" wx:for="{{ letterList }}" bind:tap="jumpToIndex" wx:key="index" data-key="{{ index }}">{{ index }}</view> <view class="item {{ letterKey == index ? 'pitch' : '' }}" wx:for="{{ letterList }}" wx:key="index" bind:tap="jumpToIndex" data-key="{{ index }}">{{ index }}</view>
</view> </view>
<view class="list"> <view class="list">
<view wx:if="{{ majPitch.major }}" class="mask" bind:tap="closeYear"></view> <view wx:if="{{ majPitch.major }}" class="mask" bind:tap="closeYear"></view>
<view class="item {{ item.initial ? 'item-initial' : '' }}" wx:for="{{ majData }}" wx:key="index" data-letter="{{ item.initial }}"> <view class="node-item" id="{{ indexx }}" wx:for="{{ majData }}" wx:for-index="indexx" wx:for-item="itemm">
<view class="item {{ item.initial ? 'item' + item.initial : '' }}" wx:for="{{ itemm }}" wx:key="index" data-letter="{{ item.initial }}">
<view class="title">{{ item.subject }}</view> <view class="title">{{ item.subject }}</view>
<view class="organ"> <view class="organ">
<view class="organ-item flexacenter" wx:for="{{ item.systemObj }}" wx:for-item="ite" wx:for-index="ii" wx:key="ii"> <view class="organ-item flexacenter" wx:for="{{ item.systemObj }}" wx:for-item="ite" wx:for-index="ii" wx:key="ii">
<view class="spot"></view> <view class="spot"></view>
<view class="name">{{ rankingskeyVlaue[ii].name || '' }}</view> <view class="name">{{ rankingKey[ii] || ii || '' }}</view>
<view class="select-box {{ ( majPitch.major == item.subject && majPitch.organ == ii ) ? 'show' : ''}}"> <view class="select-box {{ ( majPitch.major == item.subject && majPitch.organ == ii ) ? 'show' : ''}}">
<view catch:tap="openYear" data-major="{{ item.subject }}" data-organ="{{ ii }}" data-value="{{ ite.show }}" class="select flexacenter"> <view catch:tap="openYear" data-major="{{ item.subject }}" data-organ="{{ ii }}" data-value="{{ ite.show }}" class="select flexacenter">
<view class="text">请选择年份</view> <view class="text">请选择年份</view>
@ -105,6 +112,7 @@
</view> </view>
</view> </view>
</view> </view>
</view>
<view class="end">- End -</view> <view class="end">- End -</view>
</view> </view>
</view> </view>

View File

@ -101,7 +101,6 @@ view {
border-radius: 0 0 15rpx 15rpx; border-radius: 0 0 15rpx 15rpx;
} }
.container .all .classify { .container .all .classify {
padding-top: 21rpx;
font-size: 30rpx; font-size: 30rpx;
color: #555555; color: #555555;
height: 109.5rpx; height: 109.5rpx;
@ -115,10 +114,18 @@ view {
.container .all .classify .classify-item { .container .all .classify .classify-item {
justify-content: center; justify-content: center;
position: relative; position: relative;
padding-top: 21rpx;
}
.container .all .classify .classify-item .extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
} }
.container .all .classify .classify-item .pitch { .container .all .classify .classify-item .pitch {
position: absolute; position: absolute;
top: -28rpx; top: -7rpx;
left: 0; left: 0;
width: 375rpx; width: 375rpx;
height: 90rpx; height: 90rpx;
@ -240,6 +247,9 @@ view {
left: 0; left: 0;
z-index: 1; z-index: 1;
} }
.container .all .major .list .node-item {
padding-bottom: 76rpx;
}
.container .all .major .list .item:not(:last-of-type) { .container .all .major .list .item:not(:last-of-type) {
margin-bottom: 76rpx; margin-bottom: 76rpx;
} }
@ -370,111 +380,3 @@ view {
line-height: 39rpx; line-height: 39rpx;
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif; font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
} }
.container .screen-mask {
background-color: rgba(0, 0, 0, 0.70588235);
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: flex-end;
z-index: 100;
}
.container .screen-mask .screen-box {
width: 100vw;
background-color: #FFFFFF;
padding-top: 43.5rpx;
border-radius: 45rpx 45rpx 0 0;
}
.container .screen-mask .screen-box .head {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 30rpx;
color: #000000;
margin-bottom: 45rpx;
text-align: center;
}
.container .screen-mask .screen-box .box {
margin: 0 22.5rpx 30rpx;
background-color: #fbfbfb;
border: 1rpx solid #f2f2f2;
border-radius: 15rpx;
padding: 16.5rpx 18rpx 30rpx 18rpx;
}
.container .screen-mask .screen-box .box .title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-bottom: 45rpx;
}
.container .screen-mask .screen-box .box .major-box {
height: 72rpx;
line-height: 72rpx;
background-color: #ffffff;
border: 1rpx solid #ccd003;
border-radius: 112.5rpx;
padding-left: 30rpx;
padding-right: 22.5rpx;
}
.container .screen-mask .screen-box .box .major-box .text {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
color: #9A9D02;
}
.container .screen-mask .screen-box .box .major-box .text.text-no {
color: #AAAAAA;
font-weight: 400;
}
.container .screen-mask .screen-box .box .major-box .icon {
width: 10.5rpx;
height: 18rpx;
}
.container .screen-mask .screen-box .box .list {
flex-wrap: wrap;
}
.container .screen-mask .screen-box .box .list .item {
min-width: 150rpx;
height: 72rpx;
line-height: 72rpx;
background-color: #f6f6f6;
border-radius: 112.5rpx;
font-size: 24rpx;
color: #555555;
margin-right: 15rpx;
padding: 0 15rpx;
margin-bottom: 10rpx;
}
.container .screen-mask .screen-box .box .list .item.pitch {
border: 1rpx solid #ccd003;
font-weight: 650;
color: #9A9D02;
}
.container .screen-mask .screen-box .footer {
margin-top: 45rpx;
height: 201rpx;
border-top: 1rpx solid #ebebeb;
justify-content: space-between;
font-size: 30rpx;
padding: 45rpx 30rpx 0 30rpx;
}
.container .screen-mask .screen-box .footer .cancel {
width: 225rpx;
height: 96rpx;
background-color: rgba(207, 247, 255, 0);
border: 1rpx solid #d7d7d7;
border-radius: 112.5rpx;
color: #555555;
}
.container .screen-mask .screen-box .footer .confirm {
width: 435rpx;
height: 96rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
color: #026277;
background-color: #cff7ff;
border: 1rpx solid #badee6;
border-radius: 112.5rpx;
}

View File

@ -48,6 +48,7 @@ Page({
projectList: [], projectList: [],
projectPitch: {}, projectPitch: {},
projectValue: {}, projectValue: {},
rankingKey: common.rankingKey,
}, },
/** /**

View File

@ -34,7 +34,7 @@
<view class="lump"> <view class="lump">
<view class="title">专业排名</view> <view class="title">专业排名</view>
<view class="ranking-title flexcenter" bind:tap="openSelectRank" data-type="rank"> <view class="ranking-title flexcenter" bind:tap="openSelectRank" data-type="rank">
{{ projectPitch.system }}世界专业排名({{ projectPitch.year }}) {{ rankingKey[projectPitch.system] || projectPitch.system }}世界专业排名({{ projectPitch.year }})
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image> <image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
</view> </view>
<view class="block flexflex"> <view class="block flexflex">
@ -47,7 +47,7 @@
<view class="lump"> <view class="lump">
<view class="title">学校排名</view> <view class="title">学校排名</view>
<view class="ranking-title flexcenter" bind:tap="openSelectRank" data-type="schoolrank"> <view class="ranking-title flexcenter" bind:tap="openSelectRank" data-type="schoolrank">
{{ schoolPitch.system }}世界综合排名({{ schoolPitch .year }}) {{ rankingKey[schoolPitch.system] || schoolPitch.system }}世界综合排名({{ schoolPitch .year }})
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image> <image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
</view> </view>
<view class="block flexflex"> <view class="block flexflex">
@ -324,7 +324,7 @@
<view class="item flexacenter {{ (selectType == 'rank' && item.system == projectPitch.system && item.year == projectPitch.year) || (selectType == 'schoolrank' && item.system == schoolPitch.system && item.year == schoolPitch.year) ? 'pitch' : '' }}" wx:for="{{ selectType == 'rank' ? projectList : schoolList }}" catch:tap="handleSelectType" data-index="{{ index }}"> <view class="item flexacenter {{ (selectType == 'rank' && item.system == projectPitch.system && item.year == projectPitch.year) || (selectType == 'schoolrank' && item.system == schoolPitch.system && item.year == schoolPitch.year) ? 'pitch' : '' }}" wx:for="{{ selectType == 'rank' ? projectList : schoolList }}" catch:tap="handleSelectType" data-index="{{ index }}">
<view class="dot"></view> <view class="dot"></view>
<view class="content flex1 flexacenter"> <view class="content flex1 flexacenter">
<view class="text flex1">{{ item.system }}世界专业排名({{ item.year }}年)</view> <view class="text flex1">{{ rankingKey[item.system] || item.system }}世界{{ selectType == 'rank' ? '专业' : '综合' }}排名({{ item.year }}年)</view>
<image class="img" src="https://app.gter.net/image/miniApp/offer/tick-red.svg" mode="widthFix"></image> <image class="img" src="https://app.gter.net/image/miniApp/offer/tick-red.svg" mode="widthFix"></image>
</view> </view>
</view> </view>

View File

@ -103,6 +103,7 @@ Page({
answerquestions: [], answerquestions: [],
quickAnswerState: false, quickAnswerState: false,
rankingKey: common.rankingKey,
}, },

View File

@ -104,7 +104,8 @@
<view class="item flex1" wx:for="{{ info.rankings }}" wx:key="index" bind:tap="goProjectList" data-index="{{ index }}"> <view class="item flex1" wx:for="{{ info.rankings }}" wx:key="index" bind:tap="goProjectList" data-index="{{ index }}">
<view class="quantity">{{ item.rank }}</view> <view class="quantity">{{ item.rank }}</view>
<view class="ranking-name"> <view class="ranking-name">
{{ rankingsObj[item.system].name }} <!-- {{ rankingsObj[item.system].name }} -->
{{ rankingKey[item.system] || item.system }}
<image wx:if="{{ item.system == 'QS' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg" mode="widthFix"></image> <image wx:if="{{ item.system == 'QS' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg" mode="widthFix"></image>
<image wx:if="{{ item.system == 'Times Higher Education' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg" mode="widthFix"></image> <image wx:if="{{ item.system == 'Times Higher Education' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg" mode="widthFix"></image>
<image wx:if="{{ item.system == 'U.S. News' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg" mode="widthFix"></image> <image wx:if="{{ item.system == 'U.S. News' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg" mode="widthFix"></image>
@ -166,7 +167,7 @@
<image wx:if="{{ item.system == 'Times Higher Education' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-ti.svg" mode="widthFix"></image> <image wx:if="{{ item.system == 'Times Higher Education' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-ti.svg" mode="widthFix"></image>
<image wx:if="{{ item.system == 'U.S. News' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-us.svg" mode="widthFix"></image> <image wx:if="{{ item.system == 'U.S. News' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-us.svg" mode="widthFix"></image>
</view> </view>
<view class="name">{{ rankingsObj[item.system].name }}</view> <view class="name"> {{ rankingKey[item.system] || item.system }}</view>
</view> </view>
<view class="box flex1"> <view class="box flex1">
<view class="itemm flexacenter"> <view class="itemm flexacenter">

View File

@ -36,6 +36,7 @@ Page({
swiperHeightList: {}, // 轮播图高度 swiperHeightList: {}, // 轮播图高度
swiperCurrent: 0, // 轮播图下标 swiperCurrent: 0, // 轮播图下标
rankingList: [], rankingList: [],
rankingKey: common.rankingKey,
}, },
@ -805,7 +806,6 @@ Page({
element['mechanism'] = this.rankingsObj[element.mechanism]?.name || element.mechanism element['mechanism'] = this.rankingsObj[element.mechanism]?.name || element.mechanism
}) })
let arr = [data.slice(0, 5), data.slice(5, 10), data.slice(10, 15)] let arr = [data.slice(0, 5), data.slice(5, 10), data.slice(10, 15)]
console.log("arr", arr);
this.setData({ this.setData({
rankingList: arr rankingList: arr
}) })

View File

@ -126,6 +126,14 @@ view {
justify-content: center; justify-content: center;
position: relative; position: relative;
.extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
}
.pitch { .pitch {
position: absolute; position: absolute;
top: -28rpx; top: -28rpx;

View File

@ -44,14 +44,20 @@
<image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-left-icon.svg"></image> <image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-left-icon.svg"></image>
<view class="text">按学校查看</view> <view class="text">按学校查看</view>
</view> </view>
<block wx:else>按学校查看</block> <block wx:else>
<view class="extension"></view>
按学校查看
</block>
</view> </view>
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject"> <view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject">
<view class="pitch right" wx:if="{{ classify == 'subject' }}"> <view class="pitch right" wx:if="{{ classify == 'subject' }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-right-icon.svg"></image> <image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-right-icon.svg"></image>
<view class="text">按学科查看</view> <view class="text">按学科查看</view>
</view> </view>
<block wx:else>按学科查看</block> <block wx:else>
<view class="extension"></view>
按学科查看
</block>
</view> </view>
</view> </view>
<view class="school-list list" wx:if="{{ classify == 'school' }}"> <view class="school-list list" wx:if="{{ classify == 'school' }}">
@ -171,12 +177,12 @@
<view class="item flexacenter" wx:for="{{ item }}" wx:for-index="i" wx:key="i" bind:tap="handRanking" data-index="{{ index }}" data-i="{{ i }}"> <view class="item flexacenter" wx:for="{{ item }}" wx:for-index="i" wx:key="i" bind:tap="handRanking" data-index="{{ index }}" data-i="{{ i }}">
<view class="spot"></view> <view class="spot"></view>
<view wx:if="{{ item.type == 'major' }}" class="content1 flexacenter flex1"> <view wx:if="{{ item.type == 'major' }}" class="content1 flexacenter flex1">
<view class="name">{{ item.mechanism }}</view> <view class="name">{{ rankingKey[item.mechanism] || item.mechanism }}</view>
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-circle-green.svg" mode="widthFix"></image> <image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-circle-green.svg" mode="widthFix"></image>
<view class="text one-line-display">{{ item.subject }}</view> <view class="text one-line-display">{{ item.subject }}</view>
<view class="year">({{ item.year }}年)</view> <view class="year">({{ item.year }}年)</view>
</view> </view>
<view wx:else class="content2 one-line-display flexacenter">{{ item.mechanism }}世界综合排名({{ item.year }}年)</view> <view wx:else class="content2 one-line-display flexacenter">{{ rankingKey[item.mechanism] || item.mechanism }}世界综合排名({{ item.year }}年)</view>
</view> </view>
</view> </view>
</swiper-item> </swiper-item>

View File

@ -110,6 +110,13 @@ view {
justify-content: center; justify-content: center;
position: relative; position: relative;
} }
.select .classify .classify-item .extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
}
.select .classify .classify-item .pitch { .select .classify .classify-item .pitch {
position: absolute; position: absolute;
top: -28rpx; top: -28rpx;

View File

@ -38,13 +38,8 @@ Page({
majTotal: 0, majTotal: 0,
majDefault: {}, majDefault: {},
rankingKey: { rankingKey: common.rankingKey,
"Shanghai Ranking": "软科",
"Times Higher Education": "泰晤士",
"times": "泰晤士",
"USNEWS": "U.S. News",
"US News": "U.S. News",
},
}, },
/** /**
@ -75,7 +70,7 @@ Page({
} }
if (['subject', 'school'].includes(options.type)) { if (['subject', 'school'].includes(options.type)) {
const isSubject = options.type === 'subject'; const isSubject = options.type === 'subject';
const targetKey = isSubject ? 'majDefault' : 'comDefault'; const targetKey = isSubject ? 'maj' : 'com';
const source = this.data[targetKey] || (isSubject ? {} : this.data.com); const source = this.data[targetKey] || (isSubject ? {} : this.data.com);
let updates = { let updates = {
jg: this.decodeKey(isSubject ? options.system : options.mechanism) || '', jg: this.decodeKey(isSubject ? options.system : options.mechanism) || '',

View File

@ -110,7 +110,7 @@ view {
color: #000000; color: #000000;
.major-pitch-text { .major-pitch-text {
max-width: 80vw; max-width: 75vw;
} }
&::after { &::after {

View File

@ -96,7 +96,7 @@ view {
color: #000000; color: #000000;
} }
.chunk .pitch-on.major-pitch .major-pitch-text { .chunk .pitch-on.major-pitch .major-pitch-text {
max-width: 80vw; max-width: 75vw;
} }
.chunk .pitch-on.major-pitch::after { .chunk .pitch-on.major-pitch::after {
content: ""; content: "";

View File

@ -44,6 +44,14 @@ view {
justify-content: center; justify-content: center;
position: relative; position: relative;
.extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
}
.pitch { .pitch {
position: absolute; position: absolute;
top: -26rpx; top: -26rpx;

View File

@ -17,7 +17,10 @@
项目对比 项目对比
</view> </view>
</view> </view>
<block wx:else>项目对比</block> <block wx:else>
<view class="extension"></view>
项目对比
</block>
</view> </view>
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="manage"> <view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="manage">
<view class="pitch right" wx:if="{{ classify == 'manage' }}"> <view class="pitch right" wx:if="{{ classify == 'manage' }}">
@ -27,7 +30,10 @@
项目管理 项目管理
</view> </view>
</view> </view>
<block wx:else>项目管理</block> <block wx:else>
<view class="extension"></view>
项目管理
</block>
</view> </view>
</view> </view>

View File

@ -38,6 +38,13 @@ view {
justify-content: center; justify-content: center;
position: relative; position: relative;
} }
.classify .classify-item .extension {
position: absolute;
top: -25rpx;
left: 0;
width: 100%;
height: 100%;
}
.classify .classify-item .pitch { .classify .classify-item .pitch {
position: absolute; position: absolute;
top: -26rpx; top: -26rpx;

View File

@ -57,6 +57,7 @@ Page({
isInitFinish: false, isInitFinish: false,
user: {}, user: {},
rankingKey: common.rankingKey,
}, },
/** /**

View File

@ -19,7 +19,7 @@
<view class="item" wx:for="{{ info.ranks }}" wx:key="index" bind:tap="goProjectList" data-index="{{ index }}"> <view class="item" wx:for="{{ info.ranks }}" wx:key="index" bind:tap="goProjectList" data-index="{{ index }}">
<view class="quantity">{{ item.ranktext }}</view> <view class="quantity">{{ item.ranktext }}</view>
<view class="ranking-name"> <view class="ranking-name">
{{ item.mechanism }} {{ rankingKey[item.mechanism] || item.mechanism }}
<image wx:if="{{ item.mechanism == 'QS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg"></image> <image wx:if="{{ item.mechanism == 'QS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg"></image>
<image wx:if="{{ item.mechanism == '泰晤士' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg"></image> <image wx:if="{{ item.mechanism == '泰晤士' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg"></image>
<image wx:if="{{ item.mechanism == 'USNEWS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg"></image> <image wx:if="{{ item.mechanism == 'USNEWS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg"></image>

View File

@ -2,12 +2,19 @@
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "%E5%B0%8F%E7%A8%8B%E5%BA%8F%20-%20%E9%A1%B9%E7%9B%AE%E5%BA%93", "projectname": "%E5%B0%8F%E7%A8%8B%E5%BA%8F%20-%20%E9%A1%B9%E7%9B%AE%E5%BA%93",
"setting": { "setting": {
"compileHotReLoad": true, "compileHotReLoad": false,
"urlCheck": true "urlCheck": true
}, },
"condition": { "condition": {
"miniprogram": { "miniprogram": {
"list": [ "list": [
{
"name": "pages/projectDetails/projectDetails",
"pathName": "pages/projectDetails/projectDetails",
"query": "uniqid=XCu0SzLXGK1O",
"launchMode": "default",
"scene": null
},
{ {
"name": "pages/projectList/projectList", "name": "pages/projectList/projectList",
"pathName": "pages/projectList/projectList", "pathName": "pages/projectList/projectList",

View File

@ -127,6 +127,14 @@ const scoresList = scores => {
.filter(item => item !== null) .filter(item => item !== null)
} }
const rankingKey = {
"Shanghai Ranking": "软科",
"Times Higher Education": "泰晤士",
"times": "泰晤士",
"USNEWS": "U.S. News",
"US News": "U.S. News",
}
module.exports = { module.exports = {
getOfferAdDetails, getOfferAdDetails,
goPage, goPage,
@ -135,4 +143,5 @@ module.exports = {
formatNumberWithSpaces, formatNumberWithSpaces,
decodeKey, decodeKey,
scoresList, scoresList,
rankingKey,
} }