min-project/component/project-list-screen/project-list-screen.js
DESKTOP-RQ919RC\Pc e177d0db15 排名测试修改
2025-03-05 19:08:04 +08:00

320 lines
9.4 KiB
JavaScript

// template/project-list-screen/project-list-screen.js
import common from '../../utils/commonMethod'
Component({
/**
* 组件的属性列表
*/
properties: {
classify: String,
comOption: {
type: Object,
observer(res) {
if (!res || JSON.stringify(res) == "{}") return
this.initCom()
},
},
com: Object,
majOption: {
type: Object,
observer(res) {
if (!res || JSON.stringify(res) == "{}") return
// this.majJgList()
this.initMaj()
}
},
maj: Object,
},
/**
* 组件的初始数据
*/
data: {
screenState: true, // 筛选状态 true 是选择 机构年份 false 是选择 专业
comJgList: [], // 综合的 机构列表
comYearList: [], // 综合的 年份列表
majJgList: [], // 专业的 机构列表
majMajorList: [], // 专业的 专业列表
majYearList: [], // 专业的 年份列表
rankingKey: {
"Shanghai Ranking": "软科",
"Times Higher Education": "泰晤士",
"times": "泰晤士",
"USNEWS": "U.S. News",
"US News": "U.S. News",
},
},
/**
* 组件的方法列表
*/
methods: {
// 初始化综合
initCom() {
const option = this.data.comOption || {}
let comJgList = Object.keys(option) || []
const jg = comJgList[0]
let comYearList = Object.keys(option[jg]).sort((a, b) => b - a)
this.setData({
comJgList,
comYearList,
})
},
// 综合 通过机构 计算 出年份
comJGToYear() {
const com = this.data.com
const option = this.data.comOption || {}
const jg = com.jg
let year = com.year
// let comJgList = Object.keys(option)
let comYearList = Object.keys(option[jg]).sort((a, b) => b - a)
if (!comYearList.includes(year)) year = ""
this.setData({
// comJgList,
comYearList,
[`com.year`]: year,
// [`com.jg`]: jg,
// com: {
// jg,
// year: comYearList[0],
// }
})
},
// 选择综合的 机构
selectComJg(e) {
const key = e.currentTarget.dataset.key
this.setData({
[`com.jg`]: key,
})
this.comJGToYear()
},
// 选择综合的 年份
selectComYear(e) {
const key = e.currentTarget.dataset.key
this.setData({
[`com.year`]: key,
})
},
// 专业 算出机构列表和默认机构
majJgList() {
const maj = this.data.maj
const option = this.data.majOption || {}
const jg = maj.jg || Object.keys(option)[0]
let majJgList = Object.keys(option)
this.setData({
majJgList,
[`maj.jg`]: jg,
})
this.majJgToMajor()
},
initMaj() {
const option = this.data.majOption
const allMajor = Object.values(option).flatMap(institutionData => Object.keys(institutionData));
const majMajorList = [...new Set(allMajor)].sort((a, b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
const maj = this.data.maj
if (maj.jg) {
if (maj.major) this.majMajorToJG()
let majYearList = option[maj.jg][maj.major] || []
majYearList = Object.keys(majYearList).sort((a, b) => b - a)
this.setData({
majMajorList,
majYearList,
})
} else {
let majJgList = Object.keys(option)
let majYearList = option[majJgList[0]][majMajorList[0]] || []
majYearList = Object.keys(majYearList).sort((a, b) => b - a)
this.setData({
majMajorList,
majYearList,
majJgList,
})
}
},
// 专业 通过 机构 算出 专业列表
majJgToMajor() {
const maj = this.data.maj
const option = this.data.majOption[maj.jg] || {}
let majMajorList = Object.keys(option)
const major = maj.major || majMajorList[0]
this.setData({
majMajorList,
[`maj.major`]: major,
})
this.majMajorToYear()
},
// 专业 通过专业 算出 年份列表
majMajorToYear() {
const maj = this.data.maj
const majOption = this.data.majOption
const option = majOption[maj.jg][maj.major] || {}
console.log("option", this.data.majOption);
let target = {}
// if (maj.jg) {
// target = majOption[maj.jg]
// for (const key in target) {
// if (Object.hasOwnProperty.call(target, key)) {
// const element = target[key];
// console.log("key", key);
// if () {
// }
// }
// }
// }
// // console.log("target", target);
// return
// for (const key in majOption) {
// if (Object.hasOwnProperty.call(majOption, key)) {
// const element = majOption[key];
// }
// }
let majYearList = Object.keys(option).sort((a, b) => b - a) || []
let year = maj.year
if (!majYearList.includes(year)) year = ""
this.setData({
majYearList,
[`maj.year`]: year,
})
},
// 专业 选择 机构
selectMajJg(e) {
const jg = e.currentTarget.dataset.key
const maj = this.data.maj
let year = maj.year
this.setData({
['maj.jg']: jg,
// maj: {
// jg,
// major: "",
// year: "",
// }
})
// this.majJgToMajor()
if (maj.major && maj.jg) this.majMajorToYear()
},
// 打开专业弹窗
opneMajorPop() {
this.setData({
screenState: false,
})
},
// 选择专业弹窗的关闭
closeselect(e) {
const major = e.detail?.value || ""
const maj = this.data.maj
this.setData({
screenState: true,
})
console.log("major", major);
if (!major) return
this.setData({
['maj.major']: major,
})
console.log("major", major);
this.majMajorToJG()
if (major && maj.jg) this.majMajorToYear()
},
// 专业 通过专业 算出 机构
majMajorToJG() {
const option = this.data.majOption
let maj = this.data.maj
let major = maj.major
let majJgList = []
for (const key in option) {
if (Object.hasOwnProperty.call(option, key)) {
const element = option[key];
for (const k in element) {
if (k == major) majJgList.push(key)
}
}
}
let jg = maj.jg
if (!majJgList.includes(jg)) jg = ""
this.setData({
majJgList,
['maj.jg']: jg,
})
},
// 选择专业的年份
selectMajYear(e) {
const key = e.currentTarget.dataset.key
this.setData({
[`maj.year`]: key,
})
},
// 点击取消
cutScreenState() {
this.triggerEvent("cutScreenState")
},
// 点击选好了
haveChosen() {
const classify = this.data.classify
if (classify == "school") {
let hint = ""
const com = this.data.com
const comOption = this.data.comOption
if (!com['jg']) hint = "请选择机构"
else if (!com['year']) hint = "请选择年份"
if (hint) {
common.toast(hint)
return
}
com['token'] = comOption[com.jg][com.year]
this.triggerEvent("haveChosen", this.data.com)
} else {
let hint = ""
let maj = this.data.maj
const majOption = this.data.majOption
if (!maj['major']) hint = "请选择专业"
else if (!maj['jg']) hint = "请选择机构"
else if (!maj['year']) hint = "请选择年份"
if (hint) {
common.toast(hint)
return
}
maj['token'] = majOption[maj.jg][maj.major][maj.year]
this.triggerEvent("haveChosen", this.data.maj)
}
},
}
})