<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <link rel="stylesheet" href="/css/common.css" /> <link rel="stylesheet" href="/css/search.css" /> <script src="/js/axios.min.js"></script> <script src="/js/vue.global.js"></script> <script src="/js/common.js"></script> <script src="/js/base.js"></script> <style> [v-cloak] { display: none; } </style> </head> <body> <div id="app" class="main" v-cloak> <img class="index-icon" src="/img/index-icon.png" /> <div class="boxbox"> <div class="tab flexacenter"> <a href="/" target="_blank">首页</a> <img class="img" src="/img/arrows.svg" /> <div class="current">项目搜索</div> </div> <div class="body flexflex"> <div class="left"> <div class="input-box flexacenter"> <input class="flex1" placeholder="请输入" v-model="kw" @keyup.enter="submit" /> <img class="search-icon" src="/img/search-black-icon.svg" /> </div> <div class="total flexacenter"> 共 <div class="sum">{{ count }}</div> 个搜索结果 </div> <div v-if="count == 0 && showList.length == 0" class="empty-box flexcenter"> <img class="icon" src="/img/empty-icon.png" /> <span class="text">暂无搜索结果,换个关键词试试吧!</span> </div> <div class="list" v-if="showList.length != 0"> <div class="item" v-for="(item ,index) in showList"> <div class="operate flexcenter"> <div v-if="item.contraststatus?.status === 1 && item.contraststatus?.ismanage === 1" class="already flexacenter"> <div class="tick-box flexcenter"> <img class="img-tick" src="/img/tick-icon.svg" /> </div> 已加入 </div> <div v-else-if="item.contraststatus?.status === 0 || item.contraststatus?.ismanage === 0" @click="openMoreSelect(index)" class="circle flexcenter"> <img class="img-dot" src="/img/dot-dot-dot.png" /> </div> <div v-else class="circle flexcenter" :class="'add' + item.random" @click="handleClick(item,index)"> <img class="img-add" src="/img/add-thick.svg" /> </div> <div v-if="item.moreState" class="select-mask" @click="closeMoreSelectAll()"></div> <div class="select flexflex" :class="{'show': item.moreState}"> <div class="title flexacenter"> <div class="dot"></div> {{ item.contraststatus?.status == 1 ? '该项目已加入对比单,未加入项目管理' : '该项目已加入项目管理,未加入对比单' }} </div> <div class="btn flexcenter" @click="handleClick(item,index)"><img class="img" src="/img/add-circle.svg" />加入{{ item.contraststatus?.status == 1 ? '项目管理' : '对比单' }}</div> </div> </div> <div class="name flexflex">{{ item.name_zh }}</div> <div class="english">{{ item.name_en }}</div> <div class="introduce flexacenter"> {{ item.department }} <div class="flexacenter" v-if="item.rank"> <div class="line">|</div> 专业排名 <div class="quantity">{{ item.rank }}</div> </div> <div class="flexacenter" v-if="item.tuition_fee_text"> <div class="line">|</div> 学费HK$ <div class="quantity">{{ item.tuition_fee_text }}</div> </div> </div> <div class="word" v-if="item.distinctive">{{ item.distinctive }}</div> <div class="tag flexflex"> <div class="tag-item admissions" v-if="item.admissionsproject">招生官项目</div> <div class="tag-item gray" :class="{'semester': item.semesterState}">{{ item.semester.text }}</div> <div class="tag-item" v-for="item in item.tags">{{ item }}</div> </div> </div> </div> </div> <div class="right"> <template v-if="historyList.length != 0"> <div class="title flexacenter"> <div class="dot"></div> 历史搜索 </div> <div class="list flexflex"> <div class="item flexcenter" v-for="item in historyList" @click="selectKW(item)">{{ item }}</div> </div> </template> <div class="title flexacenter"> <div class="dot"></div> 标签搜索 </div> <div class="list flexflex"> <div class="item flexcenter" v-for="item in 9">搜索</div> </div> </div> </div> </div> <!-- 底部 --> <div class="base flexcenter"> <div class="btn flexacenter"><img class="img" src="/img/contrast-icon.png" />项目对比</div> <div class="line"></div> <div class="btn flexacenter"><img class="img" src="/img/manage-icon.png" />项目管理</div> </div> </div> <script> const { createApp, ref, onMounted, nextTick, onUnmounted, computed } = Vue const search = createApp({ setup() { onMounted(() => { // kw.value = "术" // getList() let history = localStorage.getItem("historyProject") if (history) { history = JSON.parse(history) historyList.value = history } }) let historyList = ref([]) let kw = ref("") let count = ref(0) let listAll = [] const getList = () => { console.log("kw", kw.value) $ajaxget("/api/project.lists", { limit: 2000, page: 1, keyword: kw.value, }).then(res => { if (res.code != 200) return const data = res.data let list = data.data || [] const date = new Date() const month = date.getMonth() + 1 const year = date.getFullYear() list.forEach(element => { const semester = element.semester || {} if (month > semester.month && year + 1 <= semester.year) element["semesterState"] = true element["tuition_fee_text"] = formatNumberWithSpaces(element.tuition_fee) element["random"] = randomString(6) }) listAll = list count.value = data.count calculateShowList() }) } let showList = ref([]) let page = ref(1) // 在 listAll 数据截取要显示的数据 const calculateShowList = () => { const limit = 20 if (page.value == 0) return const startIndex = (page.value - 1) * limit const endIndex = startIndex + limit let list = listAll.slice(startIndex, endIndex) showList.value = showList.value.concat(list) console.log("showList", showList) page.value = endIndex >= listAll.length ? 0 : page.value + 1 } let pl = ref("") const submit = () => { kw.value = kw.value.trim() if (kw.value == "") kw.value = pl.value if (kw.value == "") return if (!historyList.value.includes(kw.value)) historyList.value.unshift(kw.value) localStorage.setItem("historyProject", JSON.stringify(historyList.value)) showList.value = [] page.value = 1 count.value = 0 getList() } const selectKW = name => { kw.value = name if (!historyList.value.includes(kw.value)) historyList.value.unshift(kw.value) localStorage.setItem("historyProject", JSON.stringify(historyList.value)) showList.value = [] page.value = 1 count.value = 0 getList() } // 点击事件 const handleClick = (item, index) => { const random = item.random if (item.status == 1) return $ajax("/api/project.contrast/add", { projectid: item.id, }).then(res => { // console.log(baseRef.value) // baseRef.value.calculate(random, res.data.count) const uniqid = item["uniqid"] listAll.forEach(element => { if (element.uniqid == uniqid) { element["contraststatus"] = { status: 1, ismanage: 1, } } }) showList.value[index]["contraststatus"] = { status: 1, ismanage: 1, } showList.value[index]["moreState"] = false }) } const openMoreSelect = index => { closeMoreSelectAll() showList.value[index]["moreState"] = true } // 关闭所有 状态 选择 弹出框 const closeMoreSelectAll = type => { showList.value.forEach(element => { element["moreState"] = false }) } return { showList, count, kw, submit, pl, historyList, selectKW, handleClick, openMoreSelect, closeMoreSelectAll } }, }) search.mount("#app") </script> </body> </html>