From 10ebdd0ec7fb10223d646af9e86c944b4e38c9c5 Mon Sep 17 00:00:00 2001 From: "DESKTOP-RQ919RC\\Pc" <1300399510@qq.com> Date: Wed, 26 Mar 2025 17:00:16 +0800 Subject: [PATCH] no message --- component/document-box/document-box.js | 49 ++ component/document-box/document-box.json | 4 + component/document-box/document-box.less | 117 ++++ component/document-box/document-box.wxml | 22 + component/document-box/document-box.wxss | 93 +++ pages/projectDetails/projectDetails.js | 442 +++++++++++--- pages/projectDetails/projectDetails.json | 3 +- pages/projectDetails/projectDetails.less | 744 +++++++++++++++++++++-- pages/projectDetails/projectDetails.wxml | 388 ++++++++---- pages/projectDetails/projectDetails.wxss | 596 +++++++++++++++++- 10 files changed, 2190 insertions(+), 268 deletions(-) create mode 100644 component/document-box/document-box.js create mode 100644 component/document-box/document-box.json create mode 100644 component/document-box/document-box.less create mode 100644 component/document-box/document-box.wxml create mode 100644 component/document-box/document-box.wxss diff --git a/component/document-box/document-box.js b/component/document-box/document-box.js new file mode 100644 index 0000000..df3bd1d --- /dev/null +++ b/component/document-box/document-box.js @@ -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 + }) + }, + } +}) \ No newline at end of file diff --git a/component/document-box/document-box.json b/component/document-box/document-box.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/component/document-box/document-box.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/component/document-box/document-box.less b/component/document-box/document-box.less new file mode 100644 index 0000000..cae2618 --- /dev/null +++ b/component/document-box/document-box.less @@ -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; + } + } + } +} \ No newline at end of file diff --git a/component/document-box/document-box.wxml b/component/document-box/document-box.wxml new file mode 100644 index 0000000..f8ae64b --- /dev/null +++ b/component/document-box/document-box.wxml @@ -0,0 +1,22 @@ + + + + + + + + + {{ item.document_zh }} + 必须 + 可选 + + {{ item.description_zh }} + + + + + + + + + \ No newline at end of file diff --git a/component/document-box/document-box.wxss b/component/document-box/document-box.wxss new file mode 100644 index 0000000..bdee768 --- /dev/null +++ b/component/document-box/document-box.wxss @@ -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; +} diff --git a/pages/projectDetails/projectDetails.js b/pages/projectDetails/projectDetails.js index 78ac520..94e453d 100644 --- a/pages/projectDetails/projectDetails.js +++ b/pages/projectDetails/projectDetails.js @@ -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]}`) + } }) \ No newline at end of file diff --git a/pages/projectDetails/projectDetails.json b/pages/projectDetails/projectDetails.json index e16ce23..3bca713 100644 --- a/pages/projectDetails/projectDetails.json +++ b/pages/projectDetails/projectDetails.json @@ -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" } } \ No newline at end of file diff --git a/pages/projectDetails/projectDetails.less b/pages/projectDetails/projectDetails.less index 68a363f..26d4de9 100644 --- a/pages/projectDetails/projectDetails.less +++ b/pages/projectDetails/projectDetails.less @@ -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 { diff --git a/pages/projectDetails/projectDetails.wxml b/pages/projectDetails/projectDetails.wxml index 31604e3..872a853 100644 --- a/pages/projectDetails/projectDetails.wxml +++ b/pages/projectDetails/projectDetails.wxml @@ -7,20 +7,28 @@ 项目详情 - {{ info.name_zh }} - {{ info.name_en }} + {{ info.program_zh }} + {{ info.program_en }} - + {{ info.schoolname || '' }} + - - | - {{ info.au0 }} + + + | + {{ info.academic_unit[0]['academic_unit_zh'] }} + + - + | - {{ info.au1 }} + {{ info.academic_unit[1]['academic_unit_zh'] }} + + + | + {{ info.academic_unit[2]['academic_unit_zh'] }} @@ -38,7 +46,6 @@ - 宣讲会 @@ -68,7 +75,7 @@ - + {{ item }} {{ sideNum[index] }} @@ -77,13 +84,11 @@ - - + {{ rankingKey[item.system] || item.system }} @@ -115,14 +119,11 @@ - {{ info.tuition_currency || 'HK$' }} 总学费 {{ info.tuition_fee_text || '待确认' }} - - {{ info.language_of_instruction_text || '-' }} @@ -152,9 +153,34 @@ - + --> + 基本信息 + + + {{ newest || '' }} + 本项目招生信息已更新为{{ newest || '' }} + + + + {{ info.distinctive }} + + + + {{ item }} + + + + + + {{ discipline.name }} + + 该学科领域的其他项目 + {{ discipline.count }} + + + @@ -167,7 +193,7 @@ - {{ rankingKey[item.system] || item.system }} + {{ rankingKey[item.system] || item.system }} @@ -181,34 +207,70 @@ - - - - - - + + P.S. + 某些学科属跨学科专业(如建筑师兼顾工学和艺术学),系统自动从排名分类里找到最接近的进行展示。 - - - + + - + + + + + + + + + + + {{ item.title }} + + + + + {{ item.body_full_zh }}({{ item.body_abbr }}) + + + + + 申请信息 + + + + - {{ admissionsObj.season }}申请信息 - + + + + + + + + + + + {{ item.season }}申请信息 + + + + + - - + + {{ index + 1 }} {{ item.text }} - {{ info.application_start || '-' }} + {{ admissionsObj.application_start || '-' }} 开始申请日期 @@ -217,63 +279,97 @@ - - - + + + 结果通知时间: - {{ info.result_date }} + {{ admissionsObj.result_time }} - - {{ info.entrance_requirements || '-' }} - + + {{ admission_requirementsObj.basic_requirements }} + + + + + + - + - - - - + - {{ info.tuition_currency || 'HK$' }} - 总学费 - {{ info.tuition_fee_text || '待确认' }} + + {{ admissionsObj.tuition_currency || 'HK$' }} + 总学费 + {{ admissionsObj.tuition_fee_text || '待确认' }} + + + + 每学分学费 + {{ admissionsObj.tuition_fee_per_credit_text }} + + + 申请费 + {{ admissionsObj.application_fee_text }} + + + 入学保证金 + {{ admissionsObj.admission_deposit_text }} + + + + + + + P.S. + + {{ admissionsObj.fee_remarks }} - + - - + + {{ item.scholarship_name }} + 奖学金名称 + {{ item.description }} + + 适用范围 + {{ item.is_local_eligible ? '本地生适用' : '' }}{{ item.is_nonlocal_eligible ? '非本地生适用' : '' }} + - + + - + + + 就读信息 + @@ -283,52 +379,52 @@ - {{ info.language_of_instruction_text || '-' }} + {{ detailsInfo.language_of_instruction_text || '-' }} 教学语言 - {{ info.ft_normal_period || '-' }} + {{ detailsInfo.full_time_normal_year ? (detailsInfo.full_time_normal_year + '年') : '-' }} 正常学习时长 - {{ info.ft_maximum_period || '待确认' }} + {{ detailsInfo.full_time_maximum_year ? (detailsInfo.full_time_maximum_year + '年') : '待确认' }} 最长学习时长 - {{ info.language_of_instruction_text || '-' }} + {{ detailsInfo.language_of_instruction_text || '-' }} 教学语言 - {{ info.pt_normal_period || '-' }} + {{ detailsInfo.part_time_normal_year ? (detailsInfo.part_time_normal_year + '年') : '-' }} 正常学习时长 - {{ info.pt_maximum_period || '待确认' }} + {{ detailsInfo.part_time_maximum_year ? (detailsInfo.part_time_maximum_year + '年') : '待确认' }} 最长学习时长 - + - + - + - + - + 申请页项目详情 - {{ info.catalog_url }} - + {{ admissionsObj.catalog_url }} + 复制链接 @@ -336,6 +432,8 @@ + 毕业&就业 + @@ -349,24 +447,24 @@ - + - + - - - + + + - - + + - - + + @@ -387,29 +485,26 @@ 寄托网友 - - 招生官 - - - + + 录取参考 - + {{ item.schoolname }} @@ -449,7 +544,7 @@ - + @@ -474,12 +569,18 @@ + + 加载更多 + + - - + + 常见问题 + + - {{ item.num }} + {{ index + 1 }} {{ item.question }} {{ item.answer }} @@ -487,33 +588,88 @@ - - + + 相关链接 + + - 官方宣传册 - {{ info.leaflet_name || '-' }} - 打开文件 + 项目宣传册 + {{ admissionsObj.leaflet_name || '-' }} + 打开文件 - + + 研究生院申请页项目详情 + {{ info.website_en }} + + + 复制链接 + + + 学院网站项目详情 - {{ info.program_url }} - + {{ admissionsObj.application_url }} + 复制链接 - + 项目目录项目详情 - {{ info.catalog_url }} - + {{ admissionsObj.catalog_url }} + 复制链接 - - End - + + + + 推荐项目 + + + + + + {{ item.schoolname }} + + {{ item.name_zh }} + {{ item.name_en }} + + + 专业排名 {{ item.rank }} + + + | 学费HK$ {{ item.tuition_fee_text }} + + + {{ item.distinctive }} + + 招生官项目 + {{ item.semester.text }} + {{ item }} + + + + + 查看该项目 + + + + 与该项目对比 + + + + + + 加载更多 + + + + + - End - @@ -609,10 +765,10 @@ 榜单 - + Offer榜 - + @@ -639,20 +795,32 @@ {{ item.course_name_zh }} {{ item.course_name_en }} - {{ item.credit || '-' }} + {{ item.course_credits || '-' }} diff --git a/pages/projectDetails/projectDetails.wxss b/pages/projectDetails/projectDetails.wxss index b089e72..31cdd18 100644 --- a/pages/projectDetails/projectDetails.wxss +++ b/pages/projectDetails/projectDetails.wxss @@ -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;