320 lines
9.4 KiB
JavaScript
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)
|
|
}
|
|
},
|
|
}
|
|
}) |