no message

This commit is contained in:
DESKTOP-RQ919RC\Pc 2025-03-26 17:00:16 +08:00
parent 569e5505ce
commit 10ebdd0ec7
10 changed files with 2190 additions and 268 deletions

View File

@ -0,0 +1,49 @@
// template/document-box/document-box.js
Component({
/**
* 组件的属性列表
*/
properties: {
className: String,
documents: {
type: Array,
observer(res) {
if (res && res.length > 0) this.init()
}
},
},
/**
* 组件的初始数据
*/
data: {
swiperCurrent: 0, // 轮播图下标
},
/**
* 组件的方法列表
*/
methods: {
init() {
const query = wx.createSelectorQuery();
query.selectAll(`.main >>> .file-list`).boundingClientRect(rect => {
if (!rect) return
let page = {}
rect.forEach(element => page[element.dataset.index] = element.height)
this.setData({
page
})
}).exec();
},
// 新 轮播图 自动滑动事件,修改下标
bindchangeSwiper(e) {
let current = e.detail.current
this.setData({
swiperCurrent: current
})
},
}
})

View File

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

View File

@ -0,0 +1,117 @@
/* template/document-box/document-box.wxss */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.block {
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 18rpx;
margin-bottom: 30rpx;
margin-left: 36rpx;
}
.file {
padding-bottom: 34.5rpx;
.file-swiper {
transition: all .3s;
}
.file-list {
padding: 36rpx 10rpx 25.5rpx 49.5rpx;
box-sizing: border-box;
.file-item {
&:not(:last-of-type) {
margin-bottom: 39rpx;
}
.name {
position: relative;
margin-bottom: 15rpx;
.icon {
position: absolute;
top: 50%;
left: -27rpx;
transform: translateY(-50%);
width: 12rpx;
height: 12rpx;
}
font-family: 'PingFangSC-Semibold',
'PingFang SC Semibold',
'PingFang SC',
sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
.tag {
width: 69rpx;
height: 36rpx;
line-height: 36rpx;
background-color: rgba(111, 193, 109, 1);
border-radius: 30rpx;
font-size: 21rpx;
color: #FFFFFF;
margin-left: 15rpx;
&.selectable {
border: 1rpx solid rgba(215, 215, 215, 1);
background-color: #fff;
color: #000000;
}
}
}
.hint {
font-size: 24rpx;
color: #555555;
}
}
}
.pilot {
margin-top: 24rpx;
display: flex;
justify-content: center;
align-items: center;
.item {
width: 15rpx;
height: 6rpx;
background-color: rgba(215, 215, 215, 1);
border-radius: 30rpx;
&.pitch {
background-color: rgba(250, 107, 17, 1);
}
&:not(:last-of-type) {
margin-right: 6rpx;
}
}
}
}

View File

@ -0,0 +1,22 @@
<!--template/document-box/document-box.wxml-->
<view class="block file">
<swiper class="file-swiper" style="height: {{ page[swiperCurrent] }}px;" current="{{ swiperCurrent || 0 }}" bindanimationfinish="bindchangeSwiper" circular="{{ true }}">
<swiper-item wx:for="{{ documents }}" wx:key="index">
<view class="file-list" data-index="{{ index }}">
<view class="file-item" wx:for="{{ item }}" wx:key="index">
<view class="name flexacenter">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/dot-green.svg" mode="widthFix"></image>
{{ item.document_zh }}
<view wx:if="{{ item.is_required }}" class="tag flexcenter">必须</view>
<view wx:else class="tag selectable flexcenter">可选</view>
</view>
<view class="hint">{{ item.description_zh }}</view>
</view>
</view>
</swiper-item>
</swiper>
<view class="pilot">
<view class="item {{ swiperCurrent == index ? 'pitch' : '' }}" wx:for="{{ documents }}" wx:key="index"></view>
</view>
</view>

View File

@ -0,0 +1,93 @@
/* template/document-box/document-box.wxss */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.block {
background-color: #ffffff;
border: 1rpx solid #ebebeb;
border-radius: 18rpx;
margin-bottom: 30rpx;
margin-left: 36rpx;
}
.file {
padding-bottom: 34.5rpx;
}
.file .file-swiper {
transition: all 0.3s;
}
.file .file-list {
padding: 36rpx 10rpx 25.5rpx 49.5rpx;
box-sizing: border-box;
}
.file .file-list .file-item:not(:last-of-type) {
margin-bottom: 39rpx;
}
.file .file-list .file-item .name {
position: relative;
margin-bottom: 15rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
}
.file .file-list .file-item .name .icon {
position: absolute;
top: 50%;
left: -27rpx;
transform: translateY(-50%);
width: 12rpx;
height: 12rpx;
}
.file .file-list .file-item .name .tag {
width: 69rpx;
height: 36rpx;
line-height: 36rpx;
background-color: #6fc16d;
border-radius: 30rpx;
font-size: 21rpx;
color: #FFFFFF;
margin-left: 15rpx;
}
.file .file-list .file-item .name .tag.selectable {
border: 1rpx solid #d7d7d7;
background-color: #fff;
color: #000000;
}
.file .file-list .file-item .hint {
font-size: 24rpx;
color: #555555;
}
.file .pilot {
margin-top: 24rpx;
display: flex;
justify-content: center;
align-items: center;
}
.file .pilot .item {
width: 15rpx;
height: 6rpx;
background-color: #d7d7d7;
border-radius: 30rpx;
}
.file .pilot .item.pitch {
background-color: #fa6b11;
}
.file .pilot .item:not(:last-of-type) {
margin-right: 6rpx;
}

View File

@ -47,7 +47,7 @@ Page({
info: {},
side: {
pivotal: "关键信息",
// pivotal: "关键信息",
basic: "基本信息",
apply: "申请信息",
attend: "就读信息",
@ -56,10 +56,11 @@ Page({
consult: "录取参考",
issue: "常见问题",
links: "相关链接",
recommend: "推荐项目",
},
sideKey: "pivotal", // 侧边栏选中 key
sideKey: "basic", // 侧边栏选中 key
course: {}, // 课程
@ -104,7 +105,30 @@ Page({
quickAnswerState: false,
rankingKey: common.rankingKey,
detailsInfo: {},
accreditation: {},
isAccreditation: false,
admissions: [],
admissionsObj: {},
admissionsIndex: 0,
demandState: 0, // 要求展示状态 0 显示全部 1 显示箭头和部分 2 显示箭头和全部
recommendPage: 1, // 推荐页数
recommendList: [],
scholarships: [], // 奖学金
documents: [], // 文件
discipline: {}, // 学科领域
admission_requirements: [], // 语言能力要求
admission_requirementsObj: {},
applyListState: false, // 申请信息选择列表状态
newest: "",
},
/**
@ -141,7 +165,7 @@ Page({
wx.showLoading({
title: '加载中...',
})
util.wxpost("/api/project.detail", {
util.wxpost("https://api.gter.net/v1/program/details", {
uniqid: this.data.uniqid,
query: {
...this.options
@ -150,6 +174,13 @@ Page({
const data = res.data
let admissionofficerin = data.admissionofficerin || []
console.log("data", data);
// data.info.tags = {}
// data.info.rankings = []
// data.scholarships = []
// data.info.distinctive = ""
// data.detailsInfo.faq = []
if (admissionofficerin.length > 0) {
admissionofficerin.forEach(element => {
const date = new Date(element.date);
@ -166,98 +197,51 @@ Page({
let answerquestions = data.answerquestions || []
common.decodeKey(data.info).then(res => {
// console.log("res", res);
data.info = res
let course = {
required: [],
requiredCount: 0,
elective: [],
electiveCount: 0,
}
const info = data.info || {}
const fields = ['tuition_fee'];
fields.forEach(field => {
const textKey = `${field}_text`;
info[textKey] = common.formatNumberWithSpaces(info[field] || '');
});
const curriculum = info.curriculum || []
if (info.language_of_instruction) {
let strOutput = info.language_of_instruction.join(',');
info['language_of_instruction_text'] = strOutput
}
curriculum.forEach(element => {
if (element.credit == 'N/A') element.credit = 0
element.type === '必修课' ? (course.required.push(element), course.requiredCount += element.credit) : (course.elective.push(element), course.electiveCount += element.credit);
})
let contras = data.contras
if (Array.isArray(contras)) contras = {}
const remark = contras.remarks || ''
// const remark = contras.remarks || ''
// 算出最后申请时间
info['application_end'] = this.calculateApplicaDeadline(info.nonlocal_application_end || {})
// 算出面试轮时间
info['interviewRounds'] = this.calculateInterviewRound(info.nonlocal_application_end || {})
// info['application_end'] = this.calculateApplicaDeadline(info.nonlocal_application_end || {})
if (typeof info.mode_of_study == "string") info.mode_of_study = JSON.parse(info.mode_of_study)
let side = this.data.side
// 判断是否常见问题 ,没有则删除左侧
if (!info.faq || info.faq.length == 0) delete side.issue
// 判断 毕业就业 没有则删除左侧
if (!info.award_zh && !info.graduation_requirements && !info.domains && !info.employers && !info.positions) delete side.graduate
// 判断奖学金文案
if (info.scholarship) info['scholarshipText'] = this.JudgmentScholarshipText(info.scholarship)
// if (info.scholarship) info['scholarshipText'] = this.JudgmentScholarshipText(info.scholarship)
if (info.leaflet_url) {
const leaflet_url = decodeURIComponent(info.leaflet_url)
const urlWithoutParams = leaflet_url.split('?')[0];
const urlParts = urlWithoutParams.split('/');
const fileName = urlParts[urlParts.length - 1];
info['leaflet_name'] = fileName
}
// if (info.leaflet_url) {
// const leaflet_url = decodeURIComponent(info.leaflet_url)
// const urlWithoutParams = leaflet_url.split('?')[0];
// const urlParts = urlWithoutParams.split('/');
// const fileName = urlParts[urlParts.length - 1];
// info['leaflet_name'] = fileName
// }
const isadmission = info.admissionsproject || 0
if (isadmission == 1) this.getAdmissionList()
const date = new Date()
const month = date.getMonth() + 1
const year = date.getFullYear()
const semester = info.semester || {}
// if (month > semester.month && year + 1 <= semester.year) info['semesterState'] = true
if ((year < semester.year) || (year === semester.year && month < semester.month)) info['semesterState'] = true
let scores = info.language_proficiency_scores || []
info["scoresList"] = common.scoresList(scores)
// info["scoresList"] = scoresList
this.getOfferData(info.id)
// 判断相关链接
if (!info.leaflet_url && !info.program_url && !info.catalog_url) delete side.links
if (info.rankings.length == 0 && !info.intro && !info.accreditation) delete side.basic
if (answerquestions.length == 0) delete side.answers
// const date = new Date()
// const month = date.getMonth() + 1
// const year = date.getFullYear()
// const semester = info.semester || {}
// if ((year < semester.year) || (year === semester.year && month < semester.month)) info['semesterState'] = true
this.setData({
info,
course,
// course,
contras,
remark,
// remark,
side,
isadmission,
sideKey: "pivotal", // pivotal
sideKey: "basic", // basic
isInitFinish: true,
admissionofficerin,
answerquestions,
answerintroduction: data.answerintroduction,
}, () => {
setTimeout(() => {
@ -266,12 +250,218 @@ Page({
}, 500)
})
this.getOfferData()
}).catch(err => common.toast("出错了,请联系管理员。"))
common.decodeKey(data.detailsInfo).then(data => {
const direction = ['career_fields', 'typical_employers', 'career_positions'];
direction.forEach(field => {
let text = ""
if (data[field]) {
data[field].forEach(element => {
text += element + '\n'
})
data[field] = text
}
});
if (data.language_of_instruction) {
let strOutput = data.language_of_instruction.join(',');
data['language_of_instruction_text'] = strOutput
}
let course = {
required: [],
requiredCount: 0,
elective: [],
electiveCount: 0,
}
const curriculum = data.curriculum || []
curriculum.forEach(element => {
if (element.course_credits == 'N/A') element.course_credits = 0
element.type === 'Compulsory' ? (course.required.push(element), course.requiredCount += element.course_credits) : (course.elective.push(element), course.electiveCount += element.course_credits);
})
let side = this.data.side
// 判断是否常见问题 ,没有则删除左侧
if (!data.faq || data.faq.length == 0) delete side.issue
if (answerquestions.length == 0) delete side.answers
this.setData({
course,
answerquestions,
detailsInfo: data,
side,
})
})
this.handleAccreditationData(data.accreditations || [])
this.handleDocumentsData(data.documents || [])
const admissions = data.admissions
this.setData({
admissions,
scholarships: data.scholarships || [],
discipline: data.discipline,
admission_requirements: data.admission_requirements || [],
newest: data.newest || '',
})
const admissionsId = admissions[0].id
this.handleAmissionsData(admissionsId)
this.handleRequirementData(admissionsId)
this.getRecommendData()
}).finally(() => {
wx.hideLoading()
})
},
// 处理 能力要求信息
handleRequirementData(id) {
const admission_requirements = this.data.admission_requirements || []
this.setData({
admission_requirements,
})
this.getRequirementsObj(id)
},
// 拿到 能力要求 选中信息
getRequirementsObj(id) {
const target = this.data.admission_requirements.find(item => item.admission_id === id) || {};
const obj = {
"ENGLISH": "英语能力要求",
"CHINESE": "汉语能力要求",
"test": "能力测试",
"native": "母语",
"education": "教育",
"qualification": "专业资格",
"recommended": "推荐",
"required": "必须",
"optional": "可选",
};
let language = target.language_requirements || []
language.forEach(element => {
element['name'] = obj[element['language']];
element.proof_methods.forEach(ele => {
ele['name'] = obj[ele['type']];
(ele.tests || []).forEach(e => {
let text = ""
if (e.min_score == 'Pass') text = `等级 ${e.min_score}`
else if (e.min_score && /^[A-Za-z]+$/.test(e.min_score)) text = `等级 ${e.min_score} 以上`
else if (e.min_score) text = `总分 ${e.min_score} 分以上`
e['text'] = text
})
})
})
const standardized = target.standardized_tests_requirements || []
let arr = []
standardized.forEach(element => {
element['level'] = obj[element.requirement_level]
arr.push(element)
})
if (arr.length != 0) {
language.push({
name: "其他标化考试要求",
iselse: true,
proof_methods: arr,
})
}
target.language_requirements = language
this.setData({
admission_requirementsObj: target,
}, () => {
const rpx800 = util.rpxTopx(800)
const query = wx.createSelectorQuery();
query.select('.side-item .demand.block').boundingClientRect(rect => {
if (!rect) return
this.setData({
demandState: rect.height >= rpx800 ? 1 : 0
})
}).exec()
})
},
// 处理 申请信息 季
handleAmissionsData(id) {
let admissions = this.data.admissions || []
const fields = ['tuition_fee', 'tuition_fee_per_credit', 'application_fee', 'admission_deposit'];
admissions.forEach(element => {
fields.forEach(field => {
const textKey = `${field}_text`;
element[textKey] = common.formatNumberWithSpaces(element[field] ? element[field] + '' : '');
});
element['season'] = this.getIntakeSeason(element.intake_month, element.intake_year)
element['interviewRounds'] = this.calculateInterviewRound(element.application_end || {})
console.log("element", element);
})
this.setData({
admissions,
})
this.getAdmissionsObj(id)
},
// 拿到 招生 选中信息
getAdmissionsObj(id) {
const admissionsObj = this.data.admissions.find(item => item.id === id);
// console.log("admissionsObj", admissionsObj);
this.setData({
admissionsObj,
})
},
// 处理 文件数据
handleDocumentsData(documents) {
const documentsArr = [];
for (let i = 0; i < documents.length; i += 4) {
documentsArr.push(documents.slice(i, i + 4));
}
this.setData({
documents: documentsArr,
})
},
// 处理认证数据
handleAccreditationData(accreditation) {
let accArr = {
AC: {
title: "认证机构",
list: []
},
RE: {
title: "验证机构",
list: []
},
VA: {
title: "认可机构",
list: []
},
}
accreditation.forEach(element => {
if (element.accreditation_type == "ACCREDITATION") accArr.AC.list.push(element)
if (element.accreditation_type == "RECOGNITION") accArr.RE.list.push(element)
if (element.accreditation_type == "VALIDATION") accArr.VA.list.push(element)
})
this.setData({
accreditation: accArr,
isAccreditation: accreditation.length != 0 ? true : false,
})
},
countdownInterval: null,
startCountdown(duration) {
clearTimeout(this.countdownInterval);
@ -395,7 +585,7 @@ Page({
return acc;
}, null);
const sideKey = closestValue || 'pivotal'
const sideKey = closestValue || 'basic'
if (sideKey != this.data.sideKey) {
this.setData({
sideKey,
@ -488,7 +678,7 @@ Page({
const sideKey = e.currentTarget.dataset.key
const sideHeight = this.sideHeight
let value = sideHeight[sideKey] - this.data.totalTopHeight || 0
if (this.data.offerPage && ["issue", "links"].includes(sideKey)) value = 10000000
// if (this.data.offerPage && ["issue", "links"].includes(sideKey)) value = 10000000
wx.pageScrollTo({
scrollTop: value,
})
@ -507,7 +697,7 @@ Page({
const contras = this.data.contras
const info = this.data.info
util.wxpost("/api/project.contrast/add", {
util.wxpost("https://api.gter.net/v1/program/addContrast", {
projectid: info.id,
}).then(res => {
if (res.code != 200) return
@ -533,7 +723,6 @@ Page({
})
},
// 获取招生官
getAdmissionList() {
util.wxget('/miniprogramApi/offer/home').then(res => {
@ -575,9 +764,9 @@ Page({
return now <= date
},
getOfferData(projectid) {
getOfferData() {
if (this.data.offerPage == 0) return
util.wxget(`/api/project.other/offerList?limit=2000&projectid=${ projectid || this.data.info.id }&page=${ this.data.offerPage }`).then(res => {
util.wxget(`https://api.gter.net/v1/program/offerList?limit=5&projectid=${ this.data.info.id }&page=${ this.data.offerPage }`).then(res => {
const data = res.data
const list = data.list || []
let side = this.data.side
@ -602,42 +791,25 @@ Page({
})
},
openPreview() {
wx.previewMedia({
sources: [{
url: '//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg'
}],
showmenu: true,
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
onReady() {},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
onShow() {},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
onHide() {},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
onUnload() {},
/**
* 页面相关事件处理函数--监听用户下拉动作
@ -651,7 +823,7 @@ Page({
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
if (this.data.offerPage != 0) this.getOfferData()
// if (this.data.offerPage != 0) this.getOfferData()
},
/**
* 页面相关事件处理函数--监听用户下拉动作
@ -695,4 +867,82 @@ Page({
url: `/pages/projectList/projectList?type=subject&year=${ item.year }&system=${item.system}&subject=${item.subject}`,
})
},
// 切换要求展示
cutDemandState() {
this.setData({
demandState: this.data.demandState == 1 ? 2 : 1
})
},
// 获取 格式 2025Fall
getIntakeSeason(intake_month, intake_year) {
let season = "Fall";
if (intake_month >= 8 && intake_month <= 12) season = "Fall";
else if (intake_month >= 1 && intake_month <= 5) season = "Spring";
else if (intake_month >= 6 && intake_month <= 7) season = "Summer";
const shortYear = String(intake_year).slice(-2);
return `${shortYear}${season}`;
},
cutApplyIndex(e) {
const id = e.currentTarget.dataset.id
this.handleAmissionsData(id)
this.handleAmissionsData(id)
this.cutApplyState()
},
cutApplyState() {
this.setData({
applyListState: !this.data.applyListState,
})
},
// 获取推荐数据
getRecommendData() {
if (this.data.recommendPage == 0) return
util.wxpost("https://api.gter.net/v1/program/recommendProgram", {
uniqid: this.data.uniqid,
page: this.data.recommendPage,
limit: 10,
}).then(res => {
const data = res.data
const date = new Date()
const month = date.getMonth() + 1
const year = date.getFullYear()
let list = data.data || []
list = (list).map(element => ({
...element,
semesterState: (year < element.semester.year) || (year === element.semester.year && month < element.semester.month),
tuition_fee_text: common.formatNumberWithSpaces(element.tuition_fee ? element.tuition_fee + '' : '')
}));
let side = this.data.side
if (list.length == 0) delete side.recommend
this.setData({
recommendList: this.data.recommendList.concat(list),
side,
recommendPage: this.data.recommendPage + 1
})
})
},
// 点击 推荐项目 的详情
goDetails(e) {
const index = e.currentTarget.dataset.index
const list = this.data.recommendList
const target = list[index]
common.goPage(`/pages/projectDetails/projectDetails?uniqid=${ target.uniqid }`)
},
goVs(e) {
const index = e.currentTarget.dataset.index
const info = this.data.info
const list = this.data.recommendList
const target = list[index]
common.goPage(`/pages/projectComparison/projectComparison?ids=${[info.id, target.id]}`)
}
})

View File

@ -4,6 +4,7 @@
"project-show-text": "/component/projectShowText/projectShowText",
"go-login": "/component/goLogin/goLogin",
"perfect-information": "/component/perfectInformation/perfectInformation",
"index-sidebar": "/component/indexSidebar/indexSidebar"
"index-sidebar": "/component/indexSidebar/indexSidebar",
"document-box": "/component/document-box/document-box"
}
}

View File

@ -44,9 +44,13 @@ navigator {
.school {
font-size: 24rpx;
color: #333333;
color: #7F7F7F;
flex-wrap: wrap;
.black {
color: #000000;
}
.icon {
width: 36rpx;
height: 31.5rpx;
@ -57,6 +61,12 @@ navigator {
color: #d7d7d7;
margin: 0 18rpx;
}
.arrows {
width: 18rpx;
height: 18rpx;
margin-left: 18rpx;
}
}
}
@ -189,6 +199,25 @@ navigator {
.side-item {
padding-right: 15rpx;
padding-bottom: 40rpx;
padding-top: 70rpx;
.side-head {
height: 36rpx;
background-color: rgba(242, 242, 242, 1);
border-radius: 6rpx;
font-size: 21rpx;
color: #7F7F7F;
margin-left: 36rpx;
margin-bottom: 60rpx;
&.side-head-no-bottom {
margin-bottom: 0;
}
}
&:first-of-type {
padding-top: 37.5rpx;
}
&:not(:first-of-type) {
padding-top: 70rpx;
@ -413,9 +442,10 @@ navigator {
.label {
flex-wrap: wrap;
margin-bottom: 15rpx;
padding-bottom: 15rpx;
margin-left: 36rpx;
padding-top: 30rpx;
border-bottom: 1rpx dotted #d9d9d9;
.item {
height: 36rpx;
@ -440,6 +470,96 @@ navigator {
}
}
.discipline {
// width: 564rpx;
// height: 210rpx;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(235, 235, 235, 1);
border-radius: 18rpx;
margin-left: 36rpx;
padding: 36rpx 21rpx;
margin-bottom: 30rpx;
.discipline-title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 30rpx;
color: #000000;
text-align: center;
line-height: 51rpx;
margin-bottom: 24rpx;
}
.discipline-btn {
height: 54rpx;
line-height: 54rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 259.5rpx;
font-size: 21rpx;
color: #333333;
padding-left: 22.5rpx;
padding-right: 10rpx;
.icon {
width: 30rpx;
height: 30rpx;
}
.sum {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-style: normal;
font-size: 21rpx;
color: #000000;
margin-right: 15rpx;
}
}
}
.accreditation {
padding: 36rpx 19.5rpx 0;
.accreditation-item {
margin-bottom: 36rpx;
.title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-bottom: 18rpx;
.icon {
width: 16.5rpx;
height: 13.5rpx;
margin-right: 18rpx;
transform: rotate(-90deg);
}
}
.list {
background-color: rgba(246, 246, 246, 1);
border-radius: 9rpx;
padding: 24rpx 15rpx;
.item {
.dot {
width: 12rpx;
height: 12rpx;
margin-right: 15rpx;
}
font-size: 24rpx;
color: #333333;
&:not(:last-of-type) {
margin-bottom: 21rpx;
}
}
}
}
}
.key-ranking {
display: flex;
flex-direction: column;
@ -503,6 +623,13 @@ navigator {
align-items: center;
position: relative;
min-height: 160rpx;
margin-bottom: 16rpx;
justify-content: space-between;
.left {
flex-direction: column;
padding-right: 15rpx;
}
.unit {
padding: 0 10.5rpx;
@ -530,7 +657,245 @@ navigator {
.text {
font-size: 24rpx;
color: #555555;
margin-right: 20rpx;
// margin-right: 20rpx;
}
.tuition-details {
width: 300rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 9rpx;
padding: 24rpx 15rpx;
.tuition-item {
justify-content: space-between;
&:not(:last-of-type) {
margin-bottom: 16.5rpx;
}
.key {
font-size: 24rpx;
color: #555555;
}
.value {
font-family: 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
font-style: normal;
font-size: 24rpx;
color: #000000;
}
}
}
}
.tuition-remark {
// height: 315rpx;
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 18rpx;
margin-bottom: 30rpx;
margin-left: 36rpx;
font-size: 24rpx;
color: #555555;
line-height: 39rpx;
padding: 33rpx 31.5rpx;
word-break: break-all;
.head {
.icon {
width: 30rpx;
height: 30rpx;
margin-right: 10.5rpx;
}
font-family: 'Arial-Black',
'Arial Black',
sans-serif;
font-weight: 900;
font-size: 27rpx;
color: #000000;
margin-bottom: 15rpx;
}
}
.scholarships {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
padding-top: 25.5rpx;
padding-bottom: 48rpx;
display: flex;
flex-direction: column;
align-items: center;
.name-en {
text-align: center;
font-weight: 650;
font-size: 30rpx;
color: #000000;
line-height: 51rpx;
position: relative;
width: fit-content;
margin: 0 40rpx 13.5rpx;
&::after {
left: -27rpx;
}
&::before {
right: -27rpx;
}
&::after,
&::before {
content: "";
position: absolute;
width: 9rpx;
height: 9rpx;
background-color: rgba(249, 93, 93, 1);
border-radius: 30rpx;
top: 50%;
transform: translateY(-50%);
}
}
.name-zh {
text-align: center;
font-size: 22.5rpx;
color: #AAAAAA;
margin-bottom: 28.5rpx;
}
.text {
font-size: 24rpx;
color: #555555;
line-height: 54rpx;
margin: 0 27rpx 39rpx;
align-self: self-start;
position: relative;
background-image: url(https://app.gter.net/image/miniApp/offer/dotted-line.png);
background-size: 100% 54rpx;
background-repeat: repeat-y;
background-position: 0 0;
white-space: pre-wrap;
&::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
display: block;
width: 100%;
height: 1rpx;
background-image: url(https://app.gter.net/image/miniApp/offer/dotted-line.png);
background-size: 100% 54rpx;
background-repeat: repeat-y;
}
}
.radius {
margin: 0 27rpx;
align-self: self-start;
.key {
font-size: 21rpx;
color: #FFFFFF;
height: 36rpx;
line-height: 36rpx;
background-color: rgba(4, 176, 213, 1);
border-radius: 12rpx;
padding: 0 10.5rpx;
width: fit-content;
margin-right: 18rpx;
}
.value {
font-size: 24rpx;
color: #000000;
}
}
}
.apply-btn {
position: relative;
z-index: 1;
width: fit-content;
margin: 20rpx auto 62rpx;
.btn {
width: 348rpx;
height: 45rpx;
font-size: 24rpx;
color: #FFFFFF;
margin: 0 auto;
z-index: 1;
.text {
text-align: center;
line-height: 45rpx;
background-color: rgba(249, 93, 93, 1);
border-radius: 10.5rpx 0 0 10.5rpx;
}
.btn-right {
background-color: rgba(51, 51, 51, 1);
border-radius: 0 10.5rpx 10.5rpx 0;
height: 100%;
width: 45rpx;
.arrows {
width: 15rpx;
height: 7.5rpx;
}
}
}
.apply-mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.apply-list {
position: absolute;
left: -15rpx;
top: -15rpx;
width: 378rpx;
background-color: rgba(242, 242, 242, 1);
border-radius: 22.5rpx;
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.172549019607843);
z-index: -1;
padding: 80rpx 15rpx 15rpx;
.apply-item {
font-size: 24rpx;
color: #555555;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
// margin-bottom: 27rpx;
line-height: 60rpx;
.dot {
width: 9rpx;
height: 9rpx;
border-radius: 50%;
border: 1rpx solid #797979;
margin-right: 27rpx;
}
&.pitch {
font-weight: 650;
color: #000000;
.dot {
border-color: #333;
background-color: #333;
}
}
}
}
}
@ -634,21 +999,38 @@ navigator {
}
.demand {
padding: 25.5rpx 22.5rpx;
padding: 25.5rpx 22.5rpx 75rpx;
// height: 800rpx;
// overflow: hidden;
position: relative;
transition: all .3s;
&.arrowShow {
height: 800rpx;
overflow: hidden;
}
&.demandShow {
height: auto;
}
.text {
font-size: 27rpx;
font-size: 24rpx;
color: #000000;
line-height: 51rpx;
margin-bottom: 30rpx;
line-height: 42rpx;
padding-bottom: 30rpx;
word-break: break-word;
white-space: pre-line;
}
.title {
border-top: 1rpx dotted #d7d7d7;
font-weight: 650;
font-size: 27rpx;
color: #000000;
padding-top: 34rpx;
margin-bottom: 15rpx;
}
@ -658,51 +1040,150 @@ navigator {
margin-bottom: 30rpx;
}
.list {
.item {
background-color: rgba(246, 246, 246, 1);
border-radius: 9rpx;
padding: 19.5rpx 15rpx 19.5rpx 42rpx;
position: relative;
.ability-item {
background-color: rgba(246, 246, 246, 1);
border-radius: 9rpx;
padding: 30rpx 15rpx;
margin-bottom: 36rpx;
.triangle {
position: absolute;
width: 16.5rpx;
height: 9rpx;
transform: rotate(-90deg);
top: 33rpx;
left: 15rpx;
.head {
margin-bottom: 22.5rpx;
.index {
width: 30rpx;
height: 30rpx;
background-color: rgba(249, 93, 93, 1);
border-radius: 30rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-style: normal;
font-size: 21rpx;
color: #FFFFFF;
margin-right: 16.5rpx;
}
&:not(:last-of-type) {
margin-bottom: 15rpx;
.ability-text {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-right: 15rpx;
}
font-size: 24rpx;
.name {
color: #7F7F7F;
margin-bottom: 12rpx;
}
.value {
.tag {
width: 69rpx;
height: 36rpx;
line-height: 36rpx;
text-align: center;
font-size: 21rpx;
color: #333333;
border: 1rpx solid rgba(215, 215, 215, 1);
border-radius: 30rpx;
&.recommended {
color: #fff;
background-color: rgba(4, 176, 213, 1);
border-color: rgba(4, 176, 213, 1);
}
&.required {
color: #fff;
background-color: rgba(111, 193, 109, 1);
border-color: rgba(111, 193, 109, 1);
}
}
}
.description {
background-color: rgba(251, 251, 251, 1);
border-radius: 9rpx;
font-size: 24rpx;
line-height: 39rpx;
color: #333333;
padding: 25.5rpx 18rpx;
}
.remarks {
margin-top: 30rpx;
padding-top: 30rpx;
border-top: 1rpx dotted #d7d7d7;
}
.list {
.item {
border-radius: 9rpx;
padding: 19.5rpx 15rpx 19.5rpx 42rpx;
position: relative;
// height: 86px;
background-color: rgba(251, 251, 251, 1);
border-radius: 9rpx;
.triangle {
position: absolute;
width: 12rpx;
height: 12rpx;
top: 30rpx;
left: 15rpx;
}
&:not(:last-of-type) {
margin-bottom: 15rpx;
}
font-size: 24rpx;
.name {
color: #7F7F7F;
margin-bottom: 12rpx;
}
.value {
color: #333333;
}
}
}
}
.demand-content {}
.demand-bottom {
height: 75rpx;
background-color: rgba(255, 255, 255, 0.980392156862745);
border-radius: 0 0 18rpx 18rpx;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
&.demandShow {
.bottom-icon {
transform: rotate(270deg);
}
}
.bottom-icon {
width: 33rpx;
height: 33rpx;
transform: rotate(90deg);
transition: all .3s;
}
}
}
.ranking {
margin-left: 36rpx;
margin-bottom: 30rpx;
.item {
background-color: rgba(246, 246, 246, 1);
border-radius: 9rpx;
&:not(:last-of-type) {
margin-bottom: 15rpx;
}
margin-bottom: 15rpx;
.rank {
width: 150rpx;
@ -791,6 +1272,30 @@ navigator {
}
}
.ps {
margin-bottom: 30rpx;
margin-left: 36rpx;
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 9rpx;
font-size: 21rpx;
padding: 13.5rpx;
.title {
font-family: 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
color: #000000;
display: inline-flex;
}
.text {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
color: #555555;
display: inline;
word-break: break-all;
}
}
.pattern {
padding: 30rpx 0;
@ -812,7 +1317,7 @@ navigator {
border-radius: 33rpx;
&.pitch {
background-color: rgba(4, 176, 213, 1);
background-color: rgba(111, 193, 109, 1);
color: #FFFFFF;
}
}
@ -1015,6 +1520,7 @@ navigator {
color: #555555;
line-height: 51rpx;
padding: 22.5rpx 0;
word-break: break-word;
}
.index {
@ -1146,7 +1652,7 @@ navigator {
}
.english {
font-family: 'ArialMT', 'Arial', sans-serif;
// font-family: 'ArialMT', 'Arial', sans-serif;
color: #AAAAAA;
font-size: 21rpx;
padding: 0 12.75rpx;
@ -1239,13 +1745,16 @@ navigator {
margin-left: 36rpx;
.consult-item {
margin-bottom: 30rpx;
width: 567rpx;
// width: 567rpx;
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 18rpx;
padding: 33rpx 18rpx 30rpx 31.5rpx;
&:not(:last-of-type) {
margin-bottom: 30rpx;
}
.school {
.img {
width: 48rpx;
@ -1293,6 +1802,7 @@ navigator {
}
.info-xiaobox {
width: 519rpx;
height: 69rpx;
background-color: rgba(251, 251, 251, 1);
border-radius: 15rpx;
@ -1323,6 +1833,164 @@ navigator {
}
}
}
.consult-more {
font-size: 21rpx;
color: #555555;
line-height: 39rpx;
padding-top: 45rpx;
padding-bottom: 5rpx;
.icon {
width: 27rpx;
height: 27rpx;
margin-left: 6rpx;
}
}
.recommend-list {
margin-left: 36rpx;
.item {
background-color: rgba(255, 255, 255, 1);
border: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 18rpx;
padding: 36rpx 18rpx 95rpx;
position: relative;
&:not(:last-of-type) {
margin-bottom: 30rpx;
}
.school {
.icon {
width: 30rpx;
height: 30rpx;
margin-right: 12rpx;
}
font-size: 24rpx;
color: #333333;
margin-bottom: 18rpx;
}
.name {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 33rpx;
color: #000000;
}
.english {
font-size: 21rpx;
color: #7F7F7F;
margin-top: 12rpx;
}
.introduce {
font-size: 25.5rpx;
color: #555555;
margin-top: 15rpx;
flex-wrap: wrap;
.line {
color: #D7D7D7;
margin: 0 12rpx;
}
.quantity {
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
color: #000000;
margin-left: 12rpx;
}
}
.word {
font-size: 24rpx;
color: #7F7F7F;
padding: 10.5rpx 15rpx;
background-color: rgba(246, 246, 246, 1);
border-radius: 7.5rpx;
margin-top: 15rpx;
}
.tag {
flex-wrap: wrap;
margin-top: 25rpx;
.tag-item {
height: 36rpx;
line-height: 36rpx;
font-size: 22.5rpx;
color: #858585;
padding: 0 10.5rpx;
border: 1rpx solid #aaaaaa;
border-radius: 6px;
width: fit-content;
margin-right: 15rpx;
margin-bottom: 10rpx;
&.admissions {
background-color: rgba(115, 209, 229, 1);
border: none;
color: #fff;
}
&.gray {
border: none;
color: #fff;
background-color: rgba(51, 51, 51, 1);
&.semester {
background-color: #f95d5d;
}
}
}
}
.btn {
height: 75rpx;
background-color: rgba(237, 240, 244, 1);
border-top: 1rpx solid rgba(235, 235, 235, 1);
border-radius: 0 0 18rpx 18rpx;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
color: #000000;
.btn-item {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
position: relative;
&:not(:last-of-type)::after {
content: "";
position: absolute;
top: 50%;
right: 1rpx;
width: 1rpx;
height: 31.5rpx;
transform: translateY(-50%);
background-color: #aaaaaa;
}
.icon {
width: 24rpx;
height: 24rpx;
margin-right: 9rpx;
}
}
}
}
}
}
.bottom-base {

View File

@ -7,20 +7,28 @@
<header-Nav wx:else class="header-nav" bgcolor="{{ !sideFixed ? '#fff' : '#fbfbfb' }}">项目详情</header-Nav>
<view class="head-box {{ isadmission ? 'isadmission' : '' }}" style="padding-top: {{ totalTopHeight + 15 }}px">
<view class="name">{{ info.name_zh }}</view>
<view class="english">{{ info.name_en }}</view>
<view class="name">{{ info.program_zh }}</view>
<view class="english">{{ info.program_en }}</view>
<view class="school flexacenter">
<view class="flexacenter" bind:tap="goPage" data-url="/pages/projectSchoolHomepage/projectSchoolHomepage?id={{ info.sid }}">
<view class="black flexacenter" bind:tap="goPage" data-url="/pages/projectSchoolHomepage/projectSchoolHomepage?id={{ info.sid }}">
<image class="icon" src="{{ info.schoollogo }}" mode="heightFix"></image>
{{ info.schoolname || '' }}
<image class="arrows" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrows-circle-yellow-green.svg"></image>
</view>
<block wx:if="{{ info.au0 }}">
<view class="line">|</view>
{{ info.au0 }}
<block wx:if="{{ info.academic_unit[0] }}">
<view class="flexacenter black">
<view class="line">|</view>
{{ info.academic_unit[0]['academic_unit_zh'] }}
<image class="arrows" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrows-circle-yellow-green.svg"></image>
</view>
</block>
<block wx:if="{{ info.au1 }}">
<block wx:if="{{ info.academic_unit[1] }}">
<view class="line">|</view>
{{ info.au1 }}
{{ info.academic_unit[1]['academic_unit_zh'] }}
</block>
<block wx:if="{{ info.academic_unit[2] }}">
<view class="line">|</view>
{{ info.academic_unit[2]['academic_unit_zh'] }}
</block>
</view>
<view bind:tap="goPage" data-url="/pages/webview/webview?url={{ admissionofficerin[0]['url'] }}" class="answer flexacenter" wx:if="{{ answerType == 1 }}">
@ -38,7 +46,6 @@
</view>
<view bind:tap="goPage" data-url="/pages/webview/webview?url={{ admissionofficerin[0]['url'] }}" class="about-start flexacenter" wx:if="{{ answerType == 2 }}">
<!-- <image class="bj" src="https://app.gter.net/image/miniApp/offer/about-start-bj.svg" mode="heightFix"></image> -->
<view class="left flexacenter flex1">
<view class="left-text flexacenter">
<view class="icon">宣讲会</view>
@ -68,7 +75,7 @@
<view class="main flexflex" style="min-height: calc(100vh - {{ headHeight - rpx30 }}px)">
<view class="side-box">
<view class="side {{ sideFixed ? 'sideFixed' : '' }}" style="top: {{ sideFixed ? totalTopHeight : 0 }}px;">
<view class="side-fill {{ sideKey == 'pivotal' ? 'side-fill-white' : '' }}"></view>
<view class="side-fill {{ sideKey == 'basic' ? 'side-fill-white' : '' }}"></view>
<view class="item flexcenter {{ index == sideKey ? 'pitch' : '' }}" wx:for="{{ side }}" bind:tap="handSide" data-key="{{ index }}" wx:key="index">
<view class="text">{{ item }}
<view wx:if="{{ sideNum[index] }}" class="red-amount {{ sideNum[index] < 10 ? 'red-round' : '' }}">{{ sideNum[index] }}</view>
@ -77,13 +84,11 @@
</view>
</view>
<view style="height: 100%" class="details-box flex1">
<!-- 招生官 -->
<view class="side-item" data-type="pivotal">
<!-- <view class="side-item" data-type="pivotal">
<block wx:if="{{ urls.length != 0 && answerType == 0 }}">
<image class="quick-answer" src="https://app.gter.net/image/miniApp/offer/quick-answer.png" mode="widthFix" bind:tap="cutQuickAnswer"></image>
<view class="borderTop"></view>
</block>
<view class="semester-box flexacenter ">
<view class="text gray {{ info.semesterState ? 'semester' : '' }}">{{ info.semester.text || '' }}</view>
{{ info.semesterState ? "本项目招生信息已更新为" + (info.semester.text || '') : "学校尚未更新招生信息,请参考" + (info.semester.text || '') + "内容" }}
@ -104,7 +109,6 @@
<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="ranking-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 == 'Times Higher Education' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg" mode="widthFix"></image>
@ -115,14 +119,11 @@
</view>
</view>
<!-- 总学费 -->
<view class="tuition block flexcenter">
<view class="unit">{{ info.tuition_currency || 'HK$' }}</view>
<view class="text">总学费</view>
<view class="number">{{ info.tuition_fee_text || '待确认' }}</view>
</view>
<!-- 语言和奖金 -->
<view class="language-bonuses flexflex" wx:if="{{ info.scholarshipText || info.language_of_instruction_text }}">
<view class="item flex1 block">
<view class="name">{{ info.language_of_instruction_text || '-' }}</view>
@ -152,9 +153,34 @@
<view class="demand block" wx:if="{{ info.scoresList.length != 0 }}">
<template is="demand" data="{{ list: info.scoresList }}"></template>
</view>
</view>
</view> -->
<view wx:if="{{ side.basic }}" class="side-item" data-type="basic">
<view class="side-head flexcenter side-head-no-bottom">基本信息</view>
<view class="" style="margin-bottom: 30rpx;">
<view class="semester-box flexacenter ">
<view class="text gray semester">{{ newest || '' }}</view>
本项目招生信息已更新为{{ newest || '' }}
</view>
<view class="distinctive flexflex" wx:if="{{ info.distinctive }}">
<image class="img" src="https://app.gter.net/image/miniApp/offer/double-quotation-marks.png" mode="widthFix"></image>
<view class="flex1">{{ info.distinctive }}</view>
</view>
<view class="label flexflex" wx:if="{{ info.tags.length != 0 }}">
<view class="item" wx:for="{{ info.tags }}" wx:key="index">{{ item }}</view>
</view>
</view>
<template is="item-header" data="{{ text: '学科领域' }}"></template>
<view class="discipline">
<view class="discipline-title">{{ discipline.name }}</view>
<navigator hover-class="none" url="/pages/projectSubjectList/projectSubjectList?id={{ discipline.id }}" class="discipline-btn flexacenter">
<view class="text flex1">该学科领域的其他项目</view>
<view class="sum">{{ discipline.count }}</view>
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-circle-green.svg" mode="widthFix"></image>
</navigator>
</view>
<block wx:if="{{ info.rankings && info.rankings.length != 0 }}">
<template is="item-header" data="{{ text: '专业排名', type: 'rankings' }}"></template>
<view class="ranking">
@ -167,7 +193,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 == 'U.S. News' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-us.svg" mode="widthFix"></image>
</view>
<view class="name"> {{ rankingKey[item.system] || item.system }}</view>
<view class="name">{{ rankingKey[item.system] || item.system }}</view>
</view>
<view class="box flex1">
<view class="itemm flexacenter">
@ -181,34 +207,70 @@
</view>
</view>
</view>
</block>
<block wx:if="{{ info.intro }}">
<template is="item-header" data="{{ text: '项目简介' }}"></template>
<view class="block">
<project-show-text className="intro_zh" text="{{ info.intro || ' - ' }}"></project-show-text>
<view class="ps">
<view class="title">P.S.</view>
<view class="text">某些学科属跨学科专业(如建筑师兼顾工学和艺术学),系统自动从排名分类里找到最接近的进行展示。</view>
</view>
</block>
<block wx:if="{{ info.accreditation }}">
<template is="item-header" data="{{ text: '专业资格认证' }}"></template>
<block wx:if="{{ detailsInfo.introduction }}">
<template is="item-header" data="{{ text: '项目简介' }}"></template>
<view class="block">
<project-show-text className="accreditation" text="{{ info.accreditation || '无' }}"></project-show-text>
<project-show-text className="intro_zh" text="{{ detailsInfo.introduction || ' - ' }}"></project-show-text>
</view>
</block>
<block wx:if="{{ isAccreditation }}">
<template is="item-header" data="{{ text: '专业资格认证' }}"></template>
<view class="block accreditation">
<block wx:for="{{ accreditation }}" wx:key="index">
<view class="accreditation-item" wx:if="{{ item.list.length != 0 }}">
<view class="title flexacenter">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
{{ item.title }}
</view>
<view class="list">
<view class="item flexacenter" wx:for="{{ item.list }}" wx:key="index">
<image class="dot" src="https://app.gter.net/image/miniApp/offer/dot-green.svg" mode="widthFix"></image>
<view class="flex1">{{ item.body_full_zh }}({{ item.body_abbr }})</view>
</view>
</view>
</view>
</block>
</view>
</block>
</view>
<view class="side-item" data-type="apply">
<view class="side-head flexcenter">申请信息</view>
<view class="apply-btn flexacenter">
<view class="btn flexacenter" bind:tap="cutApplyState">
<view class="text flex1">- {{ admissionsObj.season }}申请信息 -</view>
<view class="btn-right flexcenter">
<image class="arrows" src="https://app.gter.net/image/miniApp/offer/triangle-white.svg" mode="widthFix"></image>
</view>
</view>
<block wx:if="{{ applyListState }}">
<view class="apply-mask" bind:tap="cutApplyState"></view>
<view class="apply-list">
<view class="apply-item flexacenter {{ item.id == admissionsObj.id ? 'pitch' : ''}}" wx:for="{{ admissions }}" bind:tap="cutApplyIndex" data-id="{{ item.id }}">
<view class="dot"></view>
<view class="text">{{ item.season }}申请信息</view>
</view>
</view>
</block>
</view>
<template is="item-header" data="{{ text: '申请日程' }}"></template>
<view class="application-schedule block">
<view class="list" wx:for="{{ info.interviewRounds }}" wx:key="index">
<view class="index flexacenter" wx:if="{{ info.interviewRounds.length != 1 }}">
<view class="list" wx:for="{{ admissionsObj.interviewRounds }}" wx:key="index">
<view class="index flexacenter" wx:if="{{ admissionsObj.interviewRounds.length != 1 }}">
<view class="sum flexcenter">{{ index + 1 }}</view>
{{ item.text }}
</view>
<view class="time flexflex">
<view class="item flex1">
<view class="name">{{ info.application_start || '-' }}</view>
<view class="name">{{ admissionsObj.application_start || '-' }}</view>
<view class="value">开始申请日期</view>
</view>
<view class="item flex1">
@ -217,63 +279,97 @@
</view>
</view>
</view>
<view class="else" wx:if="{{ info.interview_date || info.result_date }}">
<view class="item flexacenter" wx:if="{{ info.interview_date }}">
<view class="else" wx:if="{{ admissionsObj.result_time }}">
<!-- <view class="item flexacenter" wx:if="{{ info.interview_date }}">
<view class="name">面试时间:</view>
<view class="value flex1">{{ info.interview_date }}</view>
</view>
<view class="item flexacenter" wx:if="{{ info.result_date }}">
</view> -->
<view class="item flexacenter" wx:if="{{ admissionsObj.result_time }}">
<view class="name">结果通知时间:</view>
<view class="value flex1">{{ info.result_date }}</view>
<view class="value flex1">{{ admissionsObj.result_time }}</view>
</view>
</view>
</view>
<template is="item-header" data="{{ text: '最低入学要求' }}"></template>
<view class="demand block">
<view class="text">{{ info.entrance_requirements || '-' }}</view>
<template is="demand" wx:if="{{ info.scoresList.length != 0 }}" data="{{ list: info.scoresList }}"></template>
<view class="demand block {{ demandState != 0 ? 'arrowShow' : '' }} {{ demandState == 2 ? 'demandShow' : '' }}">
<view class="text">{{ admission_requirementsObj.basic_requirements }}</view>
<view class="demand-content">
<template is="demand" wx:for="{{ admission_requirementsObj.language_requirements }}" wx:key="index" data="{{ item }}"></template>
</view>
<view class="demand-bottom flexcenter {{ demandState == 2 ? 'demandShow' : '' }}" bind:tap="cutDemandState" wx:if="{{ demandState != 0 }}">
<image class="bottom-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
</view>
</view>
<block wx:if="{{ info.documents_required }}">
<block wx:if="{{ documents.length != 0 }}">
<template is="item-header" data="{{ text: '必须文件' }}"></template>
<view class="block">
<project-show-text className="documents_required" text="{{ info.documents_required || '无' }}">
</project-show-text>
</view>
<document-box documents="{{ documents }}"></document-box>
</block>
<template is="item-header" data="{{ text: '费用' }}"></template>
<view class="tuition block flexcenter">
<view class="unit">{{ info.tuition_currency || 'HK$' }}</view>
<view class="text">总学费</view>
<view class="number">{{ info.tuition_fee_text || '待确认' }}</view>
<view class="left flexcenter flex1">
<view class="unit">{{ admissionsObj.tuition_currency || 'HK$' }}</view>
<view class="text">总学费</view>
<view class="number">{{ admissionsObj.tuition_fee_text || '待确认' }}</view>
</view>
<view class="tuition-details" wx:if="{{ admissionsObj.tuition_fee_per_credit_text || admissionsObj.application_fee_text || admissionsObj.admission_deposit_text }}">
<view class="tuition-item flexacenter" wx:if="{{ admissionsObj.tuition_fee_per_credit_text }}">
<view class="key">每学分学费</view>
<view class="value">{{ admissionsObj.tuition_fee_per_credit_text }}</view>
</view>
<view class="tuition-item flexacenter" wx:if="{{ admissionsObj.application_fee_text }}">
<view class="key">申请费</view>
<view class="value">{{ admissionsObj.application_fee_text }}</view>
</view>
<view class="tuition-item flexacenter" wx:if="{{ admissionsObj.admission_deposit_text }}">
<view class="key">入学保证金</view>
<view class="value">{{ admissionsObj.admission_deposit_text }}</view>
</view>
</view>
</view>
<view class="tuition-remark" wx:if="{{ admissionsObj.fee_remarks }}">
<view class="head flexacenter">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/p.s.-icon.png" mode="widthFix"></image>
P.S.
</view>
{{ admissionsObj.fee_remarks }}
</view>
<block wx:if="{{ info.scholarships }}">
<block wx:if="{{ scholarships.length }}">
<template is="item-header" data="{{ text: '奖学金' }}"></template>
<view class="block">
<project-show-text className="scholarships" text="{{ info.scholarships || '-' }}"></project-show-text>
<view class="block scholarships" wx:for="{{ scholarships }}" wx:key="index">
<view class="name-en">{{ item.scholarship_name }}</view>
<view class="name-zh">奖学金名称</view>
<view class="text">{{ item.description }}</view>
<view class="radius flexacenter">
<view class="key">适用范围</view>
<view class="value">{{ item.is_local_eligible ? '本地生适用' : '' }}{{ item.is_nonlocal_eligible ? '非本地生适用' : '' }}</view>
</view>
</view>
</block>
<block wx:if="{{ info.selection_criteria }}">
<!-- 取消 -->
<!-- <block wx:if="{{ info.selection_criteria }}">
<template is="item-header" data="{{ text: '录取选择标准' }}"></template>
<view class="block">
<project-show-text className="selection_criteria" text="{{ info.selection_criteria || '- 暂无 -' }}"></project-show-text>
</view>
</block>
</block> -->
<block wx:if="{{ info.recent_admission }}">
<!-- 取消 -->
<!-- <block wx:if="{{ info.recent_admission }}">
<template is="item-header" data="{{ text: '近期录取信息' }}"></template>
<view class="block">
<project-show-text className="recent_admission" text="{{ info.recent_admission || '- 暂无 -' }}"></project-show-text>
</view>
</block>
</block> -->
</view>
<view class="side-item" data-type="attend">
<view class="side-head flexcenter">就读信息</view>
<template is="item-header" data="{{ text: '学习模式' }}"></template>
<view class="pattern block">
<view class="tab flexacenter">
@ -283,52 +379,52 @@
<view wx:if="{{ studyMode == 'ft' }}" class="introduce flexflex">
<view class="item flex1">
<view class="value">{{ info.language_of_instruction_text || '-' }}</view>
<view class="value">{{ detailsInfo.language_of_instruction_text || '-' }}</view>
<view class="name">教学语言</view>
</view>
<view class="item flex1">
<view class="value">{{ info.ft_normal_period || '-' }}</view>
<view class="value">{{ detailsInfo.full_time_normal_year ? (detailsInfo.full_time_normal_year + '年') : '-' }}</view>
<view class="name">正常学习时长</view>
</view>
<view class="item flex1">
<view class="value">{{ info.ft_maximum_period || '待确认' }}</view>
<view class="value">{{ detailsInfo.full_time_maximum_year ? (detailsInfo.full_time_maximum_year + '年') : '待确认' }}</view>
<view class="name">最长学习时长</view>
</view>
</view>
<view wx:else class="introduce flexflex">
<view class="item flex1">
<view class="value">{{ info.language_of_instruction_text || '-' }}</view>
<view class="value">{{ detailsInfo.language_of_instruction_text || '-' }}</view>
<view class="name">教学语言</view>
</view>
<view class="item flex1">
<view class="value">{{ info.pt_normal_period || '-' }}</view>
<view class="value">{{ detailsInfo.part_time_normal_year ? (detailsInfo.part_time_normal_year + '年') : '-' }}</view>
<view class="name">正常学习时长</view>
</view>
<view class="item flex1">
<view class="value">{{ info.pt_maximum_period || '待确认' }}</view>
<view class="value">{{ detailsInfo.part_time_maximum_year ? (detailsInfo.part_time_maximum_year + '年') : '待确认' }}</view>
<view class="name">最长学习时长</view>
</view>
</view>
</view>
<block wx:if="{{ info.time_of_class }}">
<block wx:if="{{ detailsInfo.class_schedule }}">
<template is="item-header" data="{{ text: '上课时间' }}"></template>
<view class="block">
<project-show-text className="time_of_class" text="{{ info.time_of_class || '- 暂无 -' }}"></project-show-text>
<project-show-text className="time_of_class" text="{{ detailsInfo.class_schedule || '- 暂无 -' }}"></project-show-text>
</view>
</block>
<template wx:if="{{ course.required.length != 0 || course.required.length != 0 }}" is="item-header" data="{{ text: '课程设置' }}"></template>
<template wx:if="{{ course.required.length != 0 }}" is="table" data="{{ data: course.required, title: '必修课程', count: course.requiredCount }}"></template>
<template wx:if="{{ course.required.length != 0 }}" is="table" data="{{ data: course.required, title: '必修科目', count: course.requiredCount }}"></template>
<template wx:if="{{ course.elective.length != 0 }}" is="table" data="{{ data: course.elective, title: '选修课程' }}"></template>
<template wx:if="{{ course.elective.length != 0 }}" is="table" data="{{ data: course.elective, title: '选修科目' }}"></template>
<view class="link block" wx:if="{{ info.catalog_url }}">
<view class="link block" wx:if="{{ admissionsObj.catalog_url }}">
<view class="title">申请页项目详情</view>
<view class="text">{{ info.catalog_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.catalog_url }}">
<view class="text">{{ admissionsObj.catalog_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ admissionsObj.catalog_url }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
复制链接
</view>
@ -336,6 +432,8 @@
</view>
<view class="side-item" data-type="graduate">
<view class="side-head flexcenter">毕业&就业</view>
<block wx:if="{{ info.award_zh }}">
<template is="item-header" data="{{ text: '学位' }}"></template>
<view class="degree block">
@ -349,24 +447,24 @@
</view>
</block>
<block wx:if="{{ info.graduation_requirements }}">
<block wx:if="{{ detailsInfo.graduation_requirements }}">
<template is="item-header" data="{{ text: '毕业要求' }}"></template>
<view class="block">
<project-show-text className="graduation_requirements" text="{{ info.graduation_requirements || '- 暂无 -' }}"></project-show-text>
<project-show-text className="graduation_requirements" text="{{ detailsInfo.graduation_requirements || '- 暂无 -' }}"></project-show-text>
</view>
</block>
<template wx:if="{{ info.domains || info.employers || info.positions }}" is="item-header" data="{{ text: '历届毕业生就业方向' }}"></template>
<view class="block" wx:if="{{ info.domains }}">
<project-show-text titleName="就业领域" className="domains" text="{{ info.domains || '- 暂无 -' }}"></project-show-text>
<template wx:if="{{ detailsInfo.career_fields.length != 0 || detailsInfo.typical_employers.length != 0 || detailsInfo.career_positions.length != 0 }}" is="item-header" data="{{ text: '历届毕业生就业方向' }}"></template>
<view class="block" wx:if="{{ detailsInfo.career_fields.length != 0 }}">
<project-show-text titleName="就业领域" className="domains" text="{{ detailsInfo.career_fields || '- 暂无 -' }}"></project-show-text>
</view>
<view class="block" wx:if="{{ info.employers }}">
<project-show-text titleName="主要雇主名单" className="employers" text="{{ info.employers || '- 暂无 -' }}"></project-show-text>
<view class="block" wx:if="{{ detailsInfo.typical_employers.length != 0 }}">
<project-show-text titleName="主要雇主名单" className="employers" text="{{ detailsInfo.typical_employers || '- 暂无 -' }}"></project-show-text>
</view>
<view class="block" wx:if="{{ info.positions }}">
<project-show-text titleName="职业岗位" className="positions" text="{{ info.positions || '- 暂无 -' }}"></project-show-text>
<view class="block" wx:if="{{ detailsInfo.career_positions.length != 0 }}">
<project-show-text titleName="职业岗位" className="positions" text="{{ detailsInfo.career_positions || '- 暂无 -' }}"></project-show-text>
</view>
</view>
@ -387,29 +485,26 @@
<image class="avatar" src="https://app.gter.net/image/miniApp/offer/avatar-default.svg"></image>
寄托网友
</view>
<!-- <view class="message">{{ item.q }}</view> -->
<rich-text class="message" nodes="{{ item.q }}"></rich-text>
<!-- <image class="message-img" mode="widthFix" bind:tap="openPreview" src="//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg"></image> -->
</view>
<view class="dialogue-right">
<view class="info flexacenter">
招生官
<!-- <image class="avatar" src="https://app.gter.net/image/miniApp/offer/avatar-admission.png"></image> -->
<image class="avatar" src="{{ info.schoollogo }}"></image>
</view>
<rich-text class="message" nodes="{{ item.a }}"></rich-text>
<!-- <view class="message">{{ item.a }}</view> -->
<!-- <image class="message-img" mode="widthFix" bind:tap="openPreview" src="//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg"></image> -->
</view>
</block>
</view>
</view>
</view>
<!-- <view wx:if="{{ offerList.length != 0 }}" class="side-item" data-type="consult"> -->
<view wx:if="{{ offerList.length != 0 }}" class="side-item" data-type="consult">
<view class="side-head flexcenter">录取参考</view>
<template is="item-header" data="{{ text: '寄托录取参考', type: 'consult' }}"></template>
<view class="consult-list">
<navigator class="consult-item" wx:for="{{ offerList }}" wx:key="index" target="miniProgram" app-id="wxa9296b07391c2bc7" path="/pages/victoryDetails/victoryDetails?id={{ item.id || item.uniqid }}" hover-class="none">
<navigator class="consult-item" wx:for="{{ offerList }}" wx:key="index" url="/pages/victoryDetails/victoryDetails?id={{ item.id || item.uniqid }}" hover-class="none">
<view class="school flexacenter">
<image class="img" src="{{ item.schoolimage }}" mode="widthFix"></image>
<view class="flex1">{{ item.schoolname }}</view>
@ -449,7 +544,7 @@
</view>
<view wx:if="{{ isShowEmoji }}" class="numerical-box" style="display: flex;margin-left: 15rpx;">
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
<rich-text class="emoji-item-icon" nodes="{{ '&#x' + item + ';' }}" />
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
</view>
</view>
<!-- 数值 -->
@ -474,12 +569,18 @@
</view>
</navigator>
</view>
<view class="consult-more flexcenter" wx:if="{{ offerPage != 0 }}" bind:tap="getOfferData">
加载更多
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle.png" mode="widthFix"></image>
</view>
</view>
<view class="side-item" data-type="issue" wx:if="{{ offerPage == 0 && (info.faq && info.faq.length != 0) }}">
<view class="issue-bj" wx:for="{{ info.faq }}" wx:key="index">
<view class="side-item" data-type="issue" wx:if="{{ detailsInfo.faq && detailsInfo.faq.length != 0 }}">
<view class="side-head flexcenter">常见问题</view>
<view class="issue-bj" wx:for="{{ detailsInfo.faq }}" wx:key="index">
<view class="issue block">
<view class="index flexcenter">{{ item.num }}</view>
<view class="index flexcenter">{{ index + 1 }}</view>
<image class="index-bj" src="https://app.gter.net/image/miniApp/offer/index-bj.svg"></image>
<view class="title">{{ item.question }}</view>
<view class="text">{{ item.answer }}</view>
@ -487,33 +588,88 @@
</view>
</view>
<view wx:if="{{ offerPage == 0 && (info.leaflet_url || info.program_url || info.catalog_url) }}" class="side-item" data-type="links">
<view class="pdf block" wx:if="{{ info.leaflet_url }}">
<view wx:if="{{admissionsObj.leaflet_url || info.website_en || admissionsObj.application_url || admissionsObj.catalog_url }}" class="side-item" data-type="links">
<view class="side-head flexcenter">相关链接</view>
<view class="pdf block" wx:if="{{ admissionsObj.leaflet_url }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/pdf-icon.svg" mode="widthFix"></image>
<view class="title">官方宣传册</view>
<view class="name">{{ info.leaflet_name || '-' }}</view>
<view class="btn flexcenter" bind:tap="openFile" data-url="{{ info.leaflet_url }}">打开文件</view>
<view class="title">项目宣传册</view>
<view class="name">{{ admissionsObj.leaflet_name || '-' }}</view>
<view class="btn flexcenter" bind:tap="openFile" data-url="{{ admissionsObj.leaflet_url }}">打开文件</view>
</view>
<view class="link block" wx:if="{{ info.program_url }}">
<view class="link block" wx:if="{{ info.website_en }}">
<view class="title">研究生院申请页项目详情</view>
<view class="text">{{ info.website_en }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.website_en }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
复制链接
</view>
</view>
<view class="link block" wx:if="{{ admissionsObj.application_url }}">
<view class="title">学院网站项目详情</view>
<view class="text">{{ info.program_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.program_url }}">
<view class="text">{{ admissionsObj.application_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ admissionsObj.application_url }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
复制链接
</view>
</view>
<view class="link block" wx:if="{{ info.catalog_url }}">
<view class="link block" wx:if="{{ admissionsObj.catalog_url }}">
<view class="title">项目目录项目详情</view>
<view class="text">{{ info.catalog_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.catalog_url }}">
<view class="text">{{ admissionsObj.catalog_url }}</view>
<view class="btn flexcenter" bind:tap="copy" data-text="{{ admissionsObj.catalog_url }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
复制链接
</view>
</view>
</view>
<text class="upglide flexcenter">- End -</text>
<!-- 推荐项目 -->
<view class="side-item" data-type="recommend">
<view class="side-head flexcenter">推荐项目</view>
<template is="item-header" data="{{ text: '推荐项目' }}"></template>
<view class="recommend-list">
<view class="item" wx:for="{{ recommendList }}" wx:key="index" bind:tap="goPage" data-url="/pages/projectDetails/projectDetails?uniqid={{ item.uniqid }}">
<view class="school flexacenter">
<image class="icon" src="{{ item.schoollogo }}" mode="heightFix"></image>
{{ item.schoolname }}
</view>
<view class="name flex1">{{ item.name_zh }}</view>
<view class="english">{{ item.name_en }}</view>
<view class="introduce flexacenter">
<view class="flexacenter" wx:if="{{ item.rank }}">
专业排名 <vie class="quantity">{{ item.rank }}</vie>
</view>
<view class="flexacenter" wx:if="{{ item.tuition_fee }}">
<view class="line" wx:if="{{ item.rank }}">|</view> 学费HK$ <vie class="quantity">{{ item.tuition_fee_text }}</vie>
</view>
</view>
<view class="word" wx:if="{{ item.distinctive }}">{{ item.distinctive }}</view>
<view class="tag flexflex">
<view class="tag-item admissions" wx:if="{{ item.admissionsproject }}">招生官项目</view>
<view class="tag-item gray {{ item.semesterState ? 'semester' : '' }}">{{ item.semester.text }}</view>
<view class="tag-item" wx:for="{{ item.tags }}" wx:key="index">{{ item }}</view>
</view>
<view class="btn flexacenter">
<view class="btn-item flexcenter flex1" catch:tap="goDetails" data-index="{{ index }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/check-icon.png" mode="widthFix"></image>
查看该项目
</view>
<view class="btn-item flexcenter flex1" catch:tap="goVs" data-index="{{ index }}">
<image class="icon" src="https://app.gter.net/image/miniApp/offer/vs-circle-black.png" mode="widthFix"></image>
与该项目对比
</view>
</view>
</view>
</view>
<view class="consult-more flexcenter" wx:if="{{ recommendPage != 0 }}" bind:tap="getRecommendData">
加载更多
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle.png" mode="widthFix"></image>
</view>
</view>
<text class="upglide flexcenter" wx:if="{{ recommendPage == 0 }}">- End -</text>
</view>
</view>
@ -609,10 +765,10 @@
榜单
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png"></image>
</view>
<navigator target="miniProgram" app-id="wxa9296b07391c2bc7" wx:if="{{ type == 'consult' }}" class="list-btn flexacenter" path="/pages/victoryList/victoryList">
<view wx:if="{{ type == 'consult' }}" class="list-btn flexacenter" bind:tap="goPage" data-url="/pages/victoryList/victoryList">
Offer榜
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png"></image>
</navigator>
</view>
</view>
</template>
@ -639,20 +795,32 @@
<view class="text">{{ item.course_name_zh }}</view>
<view class="english">{{ item.course_name_en }}</view>
</view>
<view class="item credit flexcenter">{{ item.credit || '-' }}</view>
<view class="item credit flexcenter">{{ item.course_credits || '-' }}</view>
</view>
</view>
</view>
</template>
<template name="demand">
<view class="title">英语能力要求</view>
<view class="hint">满足以下其中一项即可</view>
<view class="list">
<view class="item" wx:for="{{ list }}" wx:key="index">
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
<view class="name">{{ item.name }}</view>
<view class="value">{{ item.text }}</view>
<view class="title">{{ item.name || '' }}</view>
<view class="hint" wx:if="{{ !item.iselse }}">满足以下其中一项即可</view>
<view class="ability-item" wx:for="{{ item.proof_methods }}" wx:key="index">
<view class="head flexacenter">
<view class="index flexcenter">{{ index + 1 }}</view>
<view class="ability-text">{{ item.name || item.test_name }}</view>
<view wx:if="{{ item.requirement_level }}" class="tag flexcenter {{ item.requirement_level }}">{{ item.level }}</view>
</view>
<view wx:if="{{ item.description_zh }}" class="description">
{{ item.description_zh }}
<view class="remarks" wx:if="{{ item.remarks_zh && item.description_zh != item.remarks_zh }}">{{ item.remarks_zh }}</view>
</view>
<view wx:else class="list">
<view class="item" wx:for="{{ item.tests }}" wx:key="index">
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/dot-green.svg" mode="widthFix"></image>
<view class="name">{{ item.test_name }}</view>
<view class="value">{{ item.text }}</view>
<view class="remarks" wx:if="{{ item.remarks_zh }}">{{ item.remarks_zh }}</view>
</view>
</view>
</view>
</template>

View File

@ -38,9 +38,12 @@ navigator {
}
.head-box .school {
font-size: 24rpx;
color: #333333;
color: #7F7F7F;
flex-wrap: wrap;
}
.head-box .school .black {
color: #000000;
}
.head-box .school .icon {
width: 36rpx;
height: 31.5rpx;
@ -50,6 +53,11 @@ navigator {
color: #d7d7d7;
margin: 0 18rpx;
}
.head-box .school .arrows {
width: 18rpx;
height: 18rpx;
margin-left: 18rpx;
}
.main {
background-color: #fbfbfb;
border-radius: 45rpx;
@ -156,6 +164,22 @@ navigator {
.details-box .side-item {
padding-right: 15rpx;
padding-bottom: 40rpx;
padding-top: 70rpx;
}
.details-box .side-item .side-head {
height: 36rpx;
background-color: #f2f2f2;
border-radius: 6rpx;
font-size: 21rpx;
color: #7F7F7F;
margin-left: 36rpx;
margin-bottom: 60rpx;
}
.details-box .side-item .side-head.side-head-no-bottom {
margin-bottom: 0;
}
.details-box .side-item:first-of-type {
padding-top: 37.5rpx;
}
.details-box .side-item:not(:first-of-type) {
padding-top: 70rpx;
@ -336,9 +360,10 @@ navigator {
}
.details-box .label {
flex-wrap: wrap;
margin-bottom: 15rpx;
padding-bottom: 15rpx;
margin-left: 36rpx;
padding-top: 30rpx;
border-bottom: 1rpx dotted #d9d9d9;
}
.details-box .label .item {
height: 36rpx;
@ -359,6 +384,81 @@ navigator {
.details-box .label .item.gray.semester {
background-color: #ccce04;
}
.details-box .discipline {
background-color: #ffffff;
border: 1px solid #ebebeb;
border-radius: 18rpx;
margin-left: 36rpx;
padding: 36rpx 21rpx;
margin-bottom: 30rpx;
}
.details-box .discipline .discipline-title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 30rpx;
color: #000000;
text-align: center;
line-height: 51rpx;
margin-bottom: 24rpx;
}
.details-box .discipline .discipline-btn {
height: 54rpx;
line-height: 54rpx;
background-color: #f6f6f6;
border-radius: 259.5rpx;
font-size: 21rpx;
color: #333333;
padding-left: 22.5rpx;
padding-right: 10rpx;
}
.details-box .discipline .discipline-btn .icon {
width: 30rpx;
height: 30rpx;
}
.details-box .discipline .discipline-btn .sum {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-style: normal;
font-size: 21rpx;
color: #000000;
margin-right: 15rpx;
}
.details-box .accreditation {
padding: 36rpx 19.5rpx 0;
}
.details-box .accreditation .accreditation-item {
margin-bottom: 36rpx;
}
.details-box .accreditation .accreditation-item .title {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-bottom: 18rpx;
}
.details-box .accreditation .accreditation-item .title .icon {
width: 16.5rpx;
height: 13.5rpx;
margin-right: 18rpx;
transform: rotate(-90deg);
}
.details-box .accreditation .accreditation-item .list {
background-color: #f6f6f6;
border-radius: 9rpx;
padding: 24rpx 15rpx;
}
.details-box .accreditation .accreditation-item .list .item {
font-size: 24rpx;
color: #333333;
}
.details-box .accreditation .accreditation-item .list .item .dot {
width: 12rpx;
height: 12rpx;
margin-right: 15rpx;
}
.details-box .accreditation .accreditation-item .list .item:not(:last-of-type) {
margin-bottom: 21rpx;
}
.details-box .key-ranking {
display: flex;
flex-direction: column;
@ -414,6 +514,12 @@ navigator {
align-items: center;
position: relative;
min-height: 160rpx;
margin-bottom: 16rpx;
justify-content: space-between;
}
.details-box .tuition .left {
flex-direction: column;
padding-right: 15rpx;
}
.details-box .tuition .unit {
padding: 0 10.5rpx;
@ -439,7 +545,208 @@ navigator {
.details-box .tuition .text {
font-size: 24rpx;
color: #555555;
margin-right: 20rpx;
}
.details-box .tuition .tuition-details {
width: 300rpx;
background-color: #f6f6f6;
border-radius: 9rpx;
padding: 24rpx 15rpx;
}
.details-box .tuition .tuition-details .tuition-item {
justify-content: space-between;
}
.details-box .tuition .tuition-details .tuition-item:not(:last-of-type) {
margin-bottom: 16.5rpx;
}
.details-box .tuition .tuition-details .tuition-item .key {
font-size: 24rpx;
color: #555555;
}
.details-box .tuition .tuition-details .tuition-item .value {
font-family: 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
font-style: normal;
font-size: 24rpx;
color: #000000;
}
.details-box .tuition-remark {
background-color: #ffffff;
border: 1rpx solid #ebebeb;
border-radius: 18rpx;
margin-bottom: 30rpx;
margin-left: 36rpx;
font-size: 24rpx;
color: #555555;
line-height: 39rpx;
padding: 33rpx 31.5rpx;
word-break: break-all;
}
.details-box .tuition-remark .head {
font-family: 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
font-size: 27rpx;
color: #000000;
margin-bottom: 15rpx;
}
.details-box .tuition-remark .head .icon {
width: 30rpx;
height: 30rpx;
margin-right: 10.5rpx;
}
.details-box .scholarships {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
padding-top: 25.5rpx;
padding-bottom: 48rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.details-box .scholarships .name-en {
text-align: center;
font-weight: 650;
font-size: 30rpx;
color: #000000;
line-height: 51rpx;
position: relative;
width: fit-content;
margin: 0 40rpx 13.5rpx;
}
.details-box .scholarships .name-en::after {
left: -27rpx;
}
.details-box .scholarships .name-en::before {
right: -27rpx;
}
.details-box .scholarships .name-en::after,
.details-box .scholarships .name-en::before {
content: "";
position: absolute;
width: 9rpx;
height: 9rpx;
background-color: #f95d5d;
border-radius: 30rpx;
top: 50%;
transform: translateY(-50%);
}
.details-box .scholarships .name-zh {
text-align: center;
font-size: 22.5rpx;
color: #AAAAAA;
margin-bottom: 28.5rpx;
}
.details-box .scholarships .text {
font-size: 24rpx;
color: #555555;
line-height: 54rpx;
margin: 0 27rpx 39rpx;
align-self: self-start;
position: relative;
background-image: url(https://app.gter.net/image/miniApp/offer/dotted-line.png);
background-size: 100% 54rpx;
background-repeat: repeat-y;
background-position: 0 0;
white-space: pre-wrap;
}
.details-box .scholarships .text::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
display: block;
width: 100%;
height: 1rpx;
background-image: url(https://app.gter.net/image/miniApp/offer/dotted-line.png);
background-size: 100% 54rpx;
background-repeat: repeat-y;
}
.details-box .scholarships .radius {
margin: 0 27rpx;
align-self: self-start;
}
.details-box .scholarships .radius .key {
font-size: 21rpx;
color: #FFFFFF;
height: 36rpx;
line-height: 36rpx;
background-color: #04b0d5;
border-radius: 12rpx;
padding: 0 10.5rpx;
width: fit-content;
margin-right: 18rpx;
}
.details-box .scholarships .radius .value {
font-size: 24rpx;
color: #000000;
}
.details-box .apply-btn {
position: relative;
z-index: 1;
width: fit-content;
margin: 20rpx auto 62rpx;
}
.details-box .apply-btn .btn {
width: 348rpx;
height: 45rpx;
font-size: 24rpx;
color: #FFFFFF;
margin: 0 auto;
z-index: 1;
}
.details-box .apply-btn .btn .text {
text-align: center;
line-height: 45rpx;
background-color: #f95d5d;
border-radius: 10.5rpx 0 0 10.5rpx;
}
.details-box .apply-btn .btn .btn-right {
background-color: #333333;
border-radius: 0 10.5rpx 10.5rpx 0;
height: 100%;
width: 45rpx;
}
.details-box .apply-btn .btn .btn-right .arrows {
width: 15rpx;
height: 7.5rpx;
}
.details-box .apply-btn .apply-mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.details-box .apply-btn .apply-list {
position: absolute;
left: -15rpx;
top: -15rpx;
width: 378rpx;
background-color: #f2f2f2;
border-radius: 22.5rpx;
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.17254902);
z-index: -1;
padding: 80rpx 15rpx 15rpx;
}
.details-box .apply-btn .apply-list .apply-item {
font-size: 24rpx;
color: #555555;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
line-height: 60rpx;
}
.details-box .apply-btn .apply-list .apply-item .dot {
width: 9rpx;
height: 9rpx;
border-radius: 50%;
border: 1rpx solid #797979;
margin-right: 27rpx;
}
.details-box .apply-btn .apply-list .apply-item.pitch {
font-weight: 650;
color: #000000;
}
.details-box .apply-btn .apply-list .apply-item.pitch .dot {
border-color: #333;
background-color: #333;
}
.details-box .language-bonuses {
justify-content: space-between;
@ -520,20 +827,31 @@ navigator {
color: #333333;
}
.details-box .demand {
padding: 25.5rpx 22.5rpx;
padding: 25.5rpx 22.5rpx 75rpx;
position: relative;
transition: all 0.3s;
}
.details-box .demand.arrowShow {
height: 800rpx;
overflow: hidden;
}
.details-box .demand.demandShow {
height: auto;
}
.details-box .demand .text {
font-size: 27rpx;
font-size: 24rpx;
color: #000000;
line-height: 51rpx;
margin-bottom: 30rpx;
line-height: 42rpx;
padding-bottom: 30rpx;
word-break: break-word;
white-space: pre-line;
}
.details-box .demand .title {
border-top: 1rpx dotted #d7d7d7;
font-weight: 650;
font-size: 27rpx;
color: #000000;
padding-top: 34rpx;
margin-bottom: 15rpx;
}
.details-box .demand .hint {
@ -541,40 +859,115 @@ navigator {
font-size: 24rpx;
margin-bottom: 30rpx;
}
.details-box .demand .list .item {
.details-box .demand .ability-item {
background-color: #f6f6f6;
border-radius: 9rpx;
padding: 30rpx 15rpx;
margin-bottom: 36rpx;
}
.details-box .demand .ability-item .head {
margin-bottom: 22.5rpx;
}
.details-box .demand .ability-item .head .index {
width: 30rpx;
height: 30rpx;
background-color: #f95d5d;
border-radius: 30rpx;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-style: normal;
font-size: 21rpx;
color: #FFFFFF;
margin-right: 16.5rpx;
}
.details-box .demand .ability-item .head .ability-text {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 27rpx;
color: #000000;
margin-right: 15rpx;
}
.details-box .demand .ability-item .head .tag {
width: 69rpx;
height: 36rpx;
line-height: 36rpx;
text-align: center;
font-size: 21rpx;
color: #333333;
border: 1rpx solid #d7d7d7;
border-radius: 30rpx;
}
.details-box .demand .ability-item .head .tag.recommended {
color: #fff;
background-color: #04b0d5;
border-color: #04b0d5;
}
.details-box .demand .ability-item .head .tag.required {
color: #fff;
background-color: #6fc16d;
border-color: #6fc16d;
}
.details-box .demand .ability-item .description {
background-color: #fbfbfb;
border-radius: 9rpx;
font-size: 24rpx;
line-height: 39rpx;
color: #333333;
padding: 25.5rpx 18rpx;
}
.details-box .demand .ability-item .remarks {
margin-top: 30rpx;
padding-top: 30rpx;
border-top: 1rpx dotted #d7d7d7;
}
.details-box .demand .ability-item .list .item {
padding: 19.5rpx 15rpx 19.5rpx 42rpx;
position: relative;
background-color: #fbfbfb;
border-radius: 9rpx;
font-size: 24rpx;
}
.details-box .demand .list .item .triangle {
.details-box .demand .ability-item .list .item .triangle {
position: absolute;
width: 16.5rpx;
height: 9rpx;
transform: rotate(-90deg);
top: 33rpx;
width: 12rpx;
height: 12rpx;
top: 30rpx;
left: 15rpx;
}
.details-box .demand .list .item:not(:last-of-type) {
.details-box .demand .ability-item .list .item:not(:last-of-type) {
margin-bottom: 15rpx;
}
.details-box .demand .list .item .name {
.details-box .demand .ability-item .list .item .name {
color: #7F7F7F;
margin-bottom: 12rpx;
}
.details-box .demand .list .item .value {
.details-box .demand .ability-item .list .item .value {
color: #333333;
}
.details-box .demand .demand-bottom {
height: 75rpx;
background-color: rgba(255, 255, 255, 0.98039216);
border-radius: 0 0 18rpx 18rpx;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
.details-box .demand .demand-bottom.demandShow .bottom-icon {
transform: rotate(270deg);
}
.details-box .demand .demand-bottom .bottom-icon {
width: 33rpx;
height: 33rpx;
transform: rotate(90deg);
transition: all 0.3s;
}
.details-box .ranking {
margin-left: 36rpx;
margin-bottom: 30rpx;
}
.details-box .ranking .item {
background-color: #f6f6f6;
border-radius: 9rpx;
}
.details-box .ranking .item:not(:last-of-type) {
margin-bottom: 15rpx;
}
.details-box .ranking .item .rank {
@ -648,6 +1041,27 @@ navigator {
.details-box .ranking .item .box .itemm .value {
color: #333333;
}
.details-box .ps {
margin-bottom: 30rpx;
margin-left: 36rpx;
background-color: #ffffff;
border: 1rpx solid #ebebeb;
border-radius: 9rpx;
font-size: 21rpx;
padding: 13.5rpx;
}
.details-box .ps .title {
font-family: 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
color: #000000;
display: inline-flex;
}
.details-box .ps .text {
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
color: #555555;
display: inline;
word-break: break-all;
}
.details-box .pattern {
padding: 30rpx 0;
}
@ -668,7 +1082,7 @@ navigator {
border-radius: 33rpx;
}
.details-box .pattern .tab .item.pitch {
background-color: #04b0d5;
background-color: #6fc16d;
color: #FFFFFF;
}
.details-box .pattern .introduce {
@ -840,6 +1254,7 @@ navigator {
color: #555555;
line-height: 51rpx;
padding: 22.5rpx 0;
word-break: break-word;
}
.details-box .issue-bj .issue .index {
width: 54rpx;
@ -952,7 +1367,6 @@ navigator {
padding: 0 12.75rpx;
}
.details-box .course .table-body .list .item.name .english {
font-family: 'ArialMT', 'Arial', sans-serif;
color: #AAAAAA;
font-size: 21rpx;
padding: 0 12.75rpx;
@ -1027,13 +1441,14 @@ navigator {
margin-left: 36rpx;
}
.details-box .consult-list .consult-item {
margin-bottom: 30rpx;
width: 567rpx;
background-color: #ffffff;
border: 1rpx solid #ebebeb;
border-radius: 18rpx;
padding: 33rpx 18rpx 30rpx 31.5rpx;
}
.details-box .consult-list .consult-item:not(:last-of-type) {
margin-bottom: 30rpx;
}
.details-box .consult-list .consult-item .school {
font-weight: 650;
font-style: normal;
@ -1072,6 +1487,7 @@ navigator {
font-family: 'ArialMT', 'Arial', sans-serif;
}
.details-box .consult-list .consult-item .info-xiaobox {
width: 519rpx;
height: 69rpx;
background-color: #fbfbfb;
border-radius: 15rpx;
@ -1096,6 +1512,140 @@ navigator {
border-radius: 50%;
margin-right: 18rpx;
}
.details-box .consult-more {
font-size: 21rpx;
color: #555555;
line-height: 39rpx;
padding-top: 45rpx;
padding-bottom: 5rpx;
}
.details-box .consult-more .icon {
width: 27rpx;
height: 27rpx;
margin-left: 6rpx;
}
.details-box .recommend-list {
margin-left: 36rpx;
}
.details-box .recommend-list .item {
background-color: #ffffff;
border: 1rpx solid #ebebeb;
border-radius: 18rpx;
padding: 36rpx 18rpx 95rpx;
position: relative;
}
.details-box .recommend-list .item:not(:last-of-type) {
margin-bottom: 30rpx;
}
.details-box .recommend-list .item .school {
font-size: 24rpx;
color: #333333;
margin-bottom: 18rpx;
}
.details-box .recommend-list .item .school .icon {
width: 30rpx;
height: 30rpx;
margin-right: 12rpx;
}
.details-box .recommend-list .item .name {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 33rpx;
color: #000000;
}
.details-box .recommend-list .item .english {
font-size: 21rpx;
color: #7F7F7F;
margin-top: 12rpx;
}
.details-box .recommend-list .item .introduce {
font-size: 25.5rpx;
color: #555555;
margin-top: 15rpx;
flex-wrap: wrap;
}
.details-box .recommend-list .item .introduce .line {
color: #D7D7D7;
margin: 0 12rpx;
}
.details-box .recommend-list .item .introduce .quantity {
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
font-weight: 900;
color: #000000;
margin-left: 12rpx;
}
.details-box .recommend-list .item .word {
font-size: 24rpx;
color: #7F7F7F;
padding: 10.5rpx 15rpx;
background-color: #f6f6f6;
border-radius: 7.5rpx;
margin-top: 15rpx;
}
.details-box .recommend-list .item .tag {
flex-wrap: wrap;
margin-top: 25rpx;
}
.details-box .recommend-list .item .tag .tag-item {
height: 36rpx;
line-height: 36rpx;
font-size: 22.5rpx;
color: #858585;
padding: 0 10.5rpx;
border: 1rpx solid #aaaaaa;
border-radius: 6px;
width: fit-content;
margin-right: 15rpx;
margin-bottom: 10rpx;
}
.details-box .recommend-list .item .tag .tag-item.admissions {
background-color: #73d1e5;
border: none;
color: #fff;
}
.details-box .recommend-list .item .tag .tag-item.gray {
border: none;
color: #fff;
background-color: #333333;
}
.details-box .recommend-list .item .tag .tag-item.gray.semester {
background-color: #f95d5d;
}
.details-box .recommend-list .item .btn {
height: 75rpx;
background-color: #edf0f4;
border-top: 1rpx solid #ebebeb;
border-radius: 0 0 18rpx 18rpx;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
color: #000000;
}
.details-box .recommend-list .item .btn .btn-item {
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
font-weight: 650;
font-size: 24rpx;
position: relative;
}
.details-box .recommend-list .item .btn .btn-item:not(:last-of-type)::after {
content: "";
position: absolute;
top: 50%;
right: 1rpx;
width: 1rpx;
height: 31.5rpx;
transform: translateY(-50%);
background-color: #aaaaaa;
}
.details-box .recommend-list .item .btn .btn-item .icon {
width: 24rpx;
height: 24rpx;
margin-right: 9rpx;
}
.bottom-base {
width: 100vw;
position: fixed;