feat: 添加租房模块图标和功能优化

fix: 修复投票状态显示逻辑
refactor: 重命名ajaxget为ajaxGet
style: 优化CSS样式和布局
docs: 更新组件文档和注释
This commit is contained in:
DESKTOP-RQ919RC\Pc
2025-11-04 19:05:40 +08:00
parent a7d803f633
commit 07f4401f67
28 changed files with 735 additions and 241 deletions

View File

@@ -5,17 +5,35 @@ const { defineComponent, ref, onMounted, nextTick } = Vue;
// 定义组件(直接使用模板)
export const headTop = defineComponent({
name: "headTop",
props: {
itemdata: {
type: Object,
default: () => {},
},
},
props: {},
setup(props) {
onMounted(() => {});
let signInAlreadyState = ref(false);
let state = ref(0); // 是否已经签到
let userInfoWinTimerCount = 0;
const userInfoWinTimer = setInterval(() => {
if (todaysignedState) {
state.value = todaysigned;
clearInterval(userInfoWinTimer);
}
userInfoWinTimerCount++;
if (userInfoWinTimerCount >= 3000) clearInterval(userInfoWinTimer);
}, 50);
const signIn = () => {
ajax("/v2/api/forum/sign").then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
let data = res.data;
state.value = 1;
creationAlertBox("success", res.message || "签到成功");
});
};
let input = ref("");
let defaultSearchText = ref("屯特");
@@ -23,8 +41,9 @@ export const headTop = defineComponent({
const searchText = input.value || defaultSearchText.value;
redirectToExternalWebsite("/search/" + searchText);
};
return { input, defaultSearchText, goSearch, signInAlreadyState };
return { state, signIn, input, defaultSearchText, goSearch };
},
template: `<div class="head-top flexacenter"> <a href="/" class="flexacenter" target="_blank"> <img class="logo" src="https://oss.gter.net/logo" alt="" /> </a> <div class="flex1"></div> <div class="input-box flexacenter"> <input class="input flex1" type="text" :placeholder="'大家都在搜:' + defaultSearchText" @keyup.enter="goSearch" v-model="input" /> <img class="icon" src="/img/search-icon.svg" @click="goSearch" /> </div> <div class="sign-in sign-in-already flexcenter" v-if="signInAlreadyState" v-cloak onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')"> <img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" /> <span>已签到,明天再来</span> </div> <div class="sign-in sign-in-no flexacenter" v-else onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')" v-cloak> <img class="sign-in-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-in-bj.svg" /> <img class="coin-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-bj.svg" /> <img class="coin-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-icon.png" /> <span class="text flex1">签到领寄托币</span> <div class="sign-go flexcenter"> <img class="sign-go-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-go.svg" /> GO </div> <img class="petal1" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal1.png" /> <img class="petal2" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal2.png" /> <img class="petal3" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal3.png" /> </div></div>`,
template: `<div class="head-top flexacenter"> <a href="/" class="flexacenter" target="_blank"> <img class="logo" src="https://oss.gter.net/logo" alt="" /> </a> <div class="flex1"></div> <div class="input-box flexacenter"> <input class="input flex1" type="text" :placeholder="'大家都在搜:' + defaultSearchText" @keyup.enter="goSearch" v-model="input" /> <img class="icon" src="/img/search-icon.svg" @click="goSearch" /> </div> <div class="sign-in sign-in-no flexacenter" v-if="state == 0" @click="signIn()" v-cloak> <img class="sign-in-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-in-bj.svg" /> <img class="coin-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-bj.svg" /> <img class="coin-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-icon.png" /> <span class="text flex1">签到领寄托币</span> <div class="sign-go flexcenter"> <img class="sign-go-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-go.svg" /> GO </div> <img class="petal1" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal1.png" /> <img class="petal2" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal2.png" /> <img class="petal3" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal3.png" /> </div> <div class="sign-in sign-in-already flexcenter" v-else> <img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" /> <span>已签到,明天再来</span> </div></div>`,
});

View File

@@ -8,11 +8,7 @@
<img class="icon" src="/img/search-icon.svg" @click="goSearch" />
</div>
<div class="sign-in sign-in-already flexcenter" v-if="signInAlreadyState" v-cloak onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')">
<img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" />
<span>已签到,明天再来</span>
</div>
<div class="sign-in sign-in-no flexacenter" v-else onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')" v-cloak>
<div class="sign-in sign-in-no flexacenter" v-if="state == 0" @click="signIn()" v-cloak>
<img class="sign-in-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-in-bj.svg" />
<img class="coin-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-bj.svg" />
<img class="coin-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-icon.png" />
@@ -25,4 +21,8 @@
<img class="petal2" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal2.png" />
<img class="petal3" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal3.png" />
</div>
<div class="sign-in sign-in-already flexcenter" v-else>
<img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" />
<span>已签到,明天再来</span>
</div>
</div>

View File

@@ -28,7 +28,7 @@ export const itemHead = defineComponent({
sectionn.value = item.value.sectionn || [];
const sectionNameSet = new Set(sectionn.value.map((item) => item.name));
tags.value = item.value.tags.filter((tagName) => !sectionNameSet.has(tagName));
tags.value = item.value?.tags?.filter((tagName) => !sectionNameSet.has(tagName)) || [];
// const sectionSet = new Set(sectionn.value);
// tags.value = item.value.tags?.filter((tag) => !sectionSet.has(tag));
@@ -49,8 +49,7 @@ export const itemHead = defineComponent({
onMounted(() => {
setTimeout(() => {
permissions.value = window["permissions"] || [];
// ismanager.value = permissions.value.indexOf("topic:manager") >= 0;
ismanager.value = true;
ismanager.value = permissions.value.indexOf("topic:manager") >= 0;
}, 1000);
});
@@ -124,5 +123,5 @@ export const itemHead = defineComponent({
report,
},
template: `<div class="item-head flexacenter"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uin, item?.user?.uid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="info?.group?.image" :src="info?.group?.image" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="view flexacenter"> <img class="icon" src="/img/eye-icon.svg" /> <div class="text">{{ item.views }}</div> </div> <div class="btn flexcenter" @click.stop="cutShow"> <img class="icon" src="/img/dot-dot-dot-gray.png" /> </div> <div v-if="show"> <div class="mask" @click.stop="cutShow"></div> <div class="operate"> <div class="item" @click.stop="report">举报</div> <template v-if="ismanager"> <div class="item" @click.stop="hide">{{ item.hidden == 0 ? "隐藏" : "显示" }}</div> <div class="item" @click.stop="recommend">{{ item.recommend == 1 ? "取消" : "" }}推荐</div> <div class="item" @click.stop="essence">{{ item.best == 1 ? "取消" : "" }}精华</div> </template> <template v-if="item.type == 'thread' && item.ismyself"> <div class="item" @click.stop="edit">编辑</div> <div class="item" @click.stop="deleteItem">删除</div> </template> </div> </div></div><div class="label flexflex" v-if="sectionn?.length || tags?.length || item.recommend == 1 || item.best == 1"> <img class="item icon" v-if="item.recommend == 1 && item.best != 1" src="/img/recommend-icon.png" /> <img class="item icon" v-if="item.best == 1" src="/img/essence-icon.png" /> <a class="item blue" v-for="(item, index) in sectionn" :key="item" :href="'/section/' + item.uniqid" target="_blank">{{ item.name }}</a> <a class="item" v-for="(item, index) in tags" :key="item" :href="'/tag/' + item" target="_blank">{{ item }}</a></div><report v-if="reportState" :itemdata="item"></report>`,
template: `<div class="item-head flexacenter"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uin, item?.user?.uid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="info?.group?.image" :src="info?.group?.image" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="view flexacenter"> <img class="icon" src="/img/eye-icon.svg" /> <div class="text">{{ item.views }}</div> </div> <div v-if="item.type != 'tenement'" class="btn flexcenter" @click.stop="cutShow"> <img class="icon" src="/img/dot-dot-dot-gray.png" /> </div> <div v-if="show"> <div class="mask" @click.stop="cutShow"></div> <div class="operate"> <div class="item" @click.stop="report">举报</div> <template v-if="ismanager"> <div class="item" @click.stop="hide">{{ item.hidden == 0 ? "隐藏" : "显示" }}</div> <div class="item" @click.stop="recommend">{{ item.recommend == 1 ? "取消" : "" }}推荐</div> <div class="item" @click.stop="essence">{{ item.best == 1 ? "取消" : "" }}精华</div> </template> <template v-if="item.type == 'thread' && item.ismyself"> <div class="item" @click.stop="edit">编辑</div> <div class="item" @click.stop="deleteItem">删除</div> </template> </div> </div></div><div class="label flexflex" v-if="sectionn?.length || tags?.length || item.recommend == 1 || item.best == 1"> <img class="item icon" v-if="item.recommend == 1 && item.best != 1" src="/img/recommend-icon.png" /> <img class="item icon" v-if="item.best == 1" src="/img/essence-icon.png" /> <a class="item blue" v-for="(item, index) in sectionn" :key="item" :href="'/section/' + item.uniqid" target="_blank">{{ item.name }}</a> <a class="item" v-for="(item, index) in tags" :key="item" :href="'/tag/' + item" target="_blank">{{ item }}</a></div><report v-if="reportState" :itemdata="item"></report>`,
});

View File

@@ -13,7 +13,7 @@
<div class="text">{{ item.views }}</div>
</div>
<div class="btn flexcenter" @click.stop="cutShow">
<div v-if="item.type != 'tenement'" class="btn flexcenter" @click.stop="cutShow">
<img class="icon" src="/img/dot-dot-dot-gray.png" />
</div>

View File

@@ -61,11 +61,22 @@ export const itemTenement = defineComponent({
let item = ref({ ...props.itemdata });
// console.log("item", item.value);
item.value = handleHousing(item.value);
item.value['url'] = '/details/' + item.value.uniqid;
item.value["url"] = "https://fang.gter.net/detail?id=" + item.value.uniqid;
let sectionn = ref([]);
let tags = ref([]);
if (item.value.type == "tenement") {
const tabList = item.value?.tabList || [];
sectionn.value = ["香港租房", tabList[0]];
tags.value = tabList.slice(1) || [];
}
if (item.value.images?.length > 4) item.value.images = item.value.images.slice(0, 4);
console.log("item.value", item.value);
return { item };
return { sectionn, tags, item };
},
components: {
@@ -73,5 +84,5 @@ export const itemTenement = defineComponent({
itemHead,
},
template: `<div class="item-box item-tenement"> <item-head :itemdata="item"></item-head> <a class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="site-box flexacenter" :href="item.url" target="_blank"> <template v-if="item.intermediary == 6"> <div class="site-item flexacenter" v-for="(item, index) in item.location" :key="index"> <img class="site-icon" src="/img/orientation.png"> {{ item }} </div> </template> <div v-else class="site-item flexacenter"> <img class="site-icon" src="/img/orientation.png"> {{ item.location || '' }} </div> </a> <a class="price-section flexacenter" :href="item.url" target="_blank"> <div class="unit">HK$</div> <div class="price">{{ item.rent }}</div> <span class="text">/月</span> <div class="rentalduration">[ 租期{{ item.rentalduration }} ]</div> </a> <a class="picture flexacenter" :href="item.url" target="_blank" v-if="item.images?.length != 0"> <img class="picture-item" v-for="(item, index) in item.images" :key="index" :src="item" alt=""> </a> <item-bottom :itemdata="item"></item-bottom></div>`,
template: `<div class="item-box item-tenement"> <item-head :itemdata="item"></item-head> <div class="label flexflex" v-if="sectionn?.length || tags?.length"> <img class="item icon" v-if="item.isintermediary == 1" style="width: 94px; cursor: auto;" src="/img/intermediary-icon.png" /> <img class="item icon" v-if="item.verified == 1" style="width: 94px; cursor: auto;" src="/img/attestation-icon.png" /> <div class="item blue" v-for="(item, index) in sectionn" :key="item" style="cursor: auto;">{{ item }}</div> <div class="item" v-for="(item, index) in tags" :key="item" style="cursor: auto;">{{ item }}</div> </div> <a class="title" :href="item.url" target="_blank">{{ item.subject }}</a> <a class="site-box flexacenter" :href="item.url" target="_blank"> <template v-if="item.intermediary == 6"> <div class="site-item flexacenter" v-for="(item, index) in item.location" :key="index"> <img class="site-icon" src="/img/orientation.png"> {{ item }} </div> </template> <div v-else class="site-item flexacenter"> <img class="site-icon" src="/img/orientation.png"> {{ item.location || '' }} </div> </a> <a class="price-section flexacenter" :href="item.url" target="_blank"> <div class="unit">HK$</div> <div class="price">{{ item.rent }}</div> <span class="text">/月</span> <div class="rentalduration">[ 租期{{ item.rentalduration }} ]</div> </a> <a class="picture flexacenter" :href="item.url" target="_blank" v-if="item.images?.length != 0"> <img class="picture-item" v-for="(item, index) in item.images" :key="index" :src="item" alt=""> </a> <item-bottom :itemdata="item"></item-bottom></div>`,
});

View File

@@ -1,6 +1,13 @@
<div class="item-box item-tenement">
<item-head :itemdata="item"></item-head>
<a class="title" :href="item.url" target="_blank">{{ item.title }}</a>
<div class="label flexflex" v-if="sectionn?.length || tags?.length">
<img class="item icon" v-if="item.isintermediary == 1" style="width: 94px; cursor: auto;" src="/img/intermediary-icon.png" />
<img class="item icon" v-if="item.verified == 1" style="width: 94px; cursor: auto;" src="/img/attestation-icon.png" />
<div class="item blue" v-for="(item, index) in sectionn" :key="item" style="cursor: auto;">{{ item }}</div>
<div class="item" v-for="(item, index) in tags" :key="item" style="cursor: auto;">{{ item }}</div>
</div>
<a class="title" :href="item.url" target="_blank">{{ item.subject }}</a>
<a class="site-box flexacenter" :href="item.url" target="_blank">
<template v-if="item.intermediary == 6">

View File

@@ -25,5 +25,5 @@ export const itemVote = defineComponent({
itemHead,
},
template: `<div class="item-box item-vote"> <item-head :itemdata="item"></item-head> <a class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message one-line-display" v-if="item.content">{{ item.content }}</a> <a class="info flexacenter" target="_blank" :href="item.url"> <template v-if="item.time"> <div class="status">进行中</div> <div class="line"></div> <div class="num">{{ item?.time.num }}</div>{{ item.time.unit }}后结束 </template> <div v-else class="status end">已结束</div> <div class="line"></div> <div class="num">{{ item?.data?.votes }}</div>人参与 </a> <a class="list" :class="{ 'voted': !item.time || item.isvote }" target="_blank" :href="item.url"> <div class="list-item flexcenter " v-for="(item, index) in item?.data?.option" :key="index"> <div class="list-top flexacenter"> <img v-if="item.selected" class="list-tick" src="/img/vote-tick.svg"> <div v-else class="list-serial flexcenter">{{ index + 1 }}</div> <div class="list-text one-line-display flex1">{{ item.value }}</div> </div> <div class="list-bottom flexacenter"> <div class="list-length" :style="{ width: item.percentage + '%' }"></div>{{ item.count }} </div> </div> </a> <item-bottom :itemdata="item"></item-bottom></div>`,
template: `<div class="item-box item-vote"> <item-head :itemdata="item"></item-head> <a class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message one-line-display" v-if="item.content">{{ item.content }}</a> <a class="info flexacenter" target="_blank" :href="item.url"> <template v-if="item?.data.status == 1"> <div class="status">进行中</div> <div class="line"></div> <div class="num">{{ item?.time.num }}</div>{{ item.time.unit }}后结束 </template> <div v-else class="status end">已结束</div> <div class="line"></div> <div class="num">{{ item?.data?.votes }}</div>人参与 </a> <a class="list" :class="{ 'voted': !item.time || item.isvote }" target="_blank" :href="item.url"> <div class="list-item flexcenter " v-for="(item, index) in item?.data?.option" :key="index"> <div class="list-top flexacenter"> <img v-if="item.selected" class="list-tick" src="/img/vote-tick.svg"> <div v-else class="list-serial flexcenter">{{ index + 1 }}</div> <div class="list-text one-line-display flex1">{{ item.value }}</div> </div> <div class="list-bottom flexacenter"> <div class="list-length" :style="{ width: item.percentage + '%' }"></div>{{ item.count }} </div> </div> </a> <item-bottom :itemdata="item"></item-bottom></div>`,
});

View File

@@ -3,7 +3,7 @@
<a class="title" :href="item.url" target="_blank">{{ item.title }}</a>
<a class="message one-line-display" v-if="item.content">{{ item.content }}</a>
<a class="info flexacenter" target="_blank" :href="item.url">
<template v-if="item.time">
<template v-if="item?.data.status == 1">
<div class="status">进行中</div>
<div class="line"></div>
<div class="num">{{ item?.time.num }}</div>{{ item.time.unit }}后结束

View File

@@ -23,15 +23,10 @@ export const latestList = defineComponent({
let postsTab = ref("newest"); // newest essence
let boxtype = ref(props.boxtype);
console.log(boxtype.value);
onMounted(() => {
if (props.boxtype == "newest") {
// boxtype.value = "newest";
getTopicLatest();
} else if (props.boxtype == "essence") {
// boxtype.value = "essence";
topicHandpicked();
} else {
if (props.boxtype == "newest") getTopicLatest();
else if (props.boxtype == "essence") topicHandpicked();
else {
getTopicLatest();
topicHandpicked();
}

View File

@@ -169,6 +169,9 @@
margin: 0 4px;
text-decoration: none;
}
#details .matter .matter-left .html img {
max-width: 100%;
}
#details .matter .matter-left .last-time {
color: #aaaaaa;
font-size: 13px;
@@ -953,6 +956,10 @@
/* 允许长单词内部断行 */
margin-bottom: 13px;
}
.answer-discuss .comments-box .comments-item .comments-content .comments-text a {
text-decoration: underline;
color: #04b0d5;
}
.answer-discuss .comments-box .comments-item .comments-content .comments-text .comments-reply {
color: #92a1bf;
display: inline;

View File

@@ -193,6 +193,10 @@
margin: 0 4px;
text-decoration: none;
}
img {
max-width: 100%;
}
}
.last-time {
@@ -1112,6 +1116,11 @@
overflow-wrap: break-word;
/* 允许长单词内部断行 */
margin-bottom: 13px;
a {
text-decoration: underline;
color: #04b0d5;
}
}
.answer-discuss .comments-box .comments-item .comments-content .comments-text .comments-reply {

View File

@@ -116,6 +116,67 @@
height: 14px;
margin-left: 5px;
}
#homepage-me .matter .card-user .bi-box .bi-btn:hover .bi-pop {
display: flex;
}
#homepage-me .matter .card-user .bi-box .bi-pop {
width: 260px;
box-sizing: border-box;
position: absolute;
background-color: #f6f7f7;
top: 58px;
left: 0;
z-index: 1;
border-radius: 12px;
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.35);
flex-direction: column;
padding: 10px;
color: #555;
display: none;
}
#homepage-me .matter .card-user .bi-box .bi-pop .bi-coin-title {
font-weight: 650;
font-size: 16px;
color: #000000;
margin-bottom: 5px;
}
#homepage-me .matter .card-user .bi-box .bi-pop .bi-coin-hint {
font-size: 14px;
line-height: 20px;
}
#homepage-me .matter .card-user .bi-box .bi-pop .bi-coin-hint a {
text-decoration: none;
}
#homepage-me .matter .card-user .bi-box .bi-pop .bi-coin-hint .bi-url {
text-decoration: underline;
color: #04b0d5;
}
#homepage-me .matter .card-user .bi-box .bi-pop::before {
content: "";
width: 10px;
height: 10px;
position: absolute;
top: -19px;
right: 40px;
width: 0;
height: 0;
transform: translateX(-50%);
border: 10px solid #000;
border-top-color: transparent;
border-bottom-color: #f6f7f7;
border-left-color: transparent;
border-right-color: transparent;
}
#homepage-me .matter .card-user .bi-box .bi-pop::after {
content: "";
position: absolute;
width: 100%;
height: 20px;
display: block;
z-index: -1;
top: -15px;
left: 0;
}
#homepage-me .matter .card-user .medal-area {
margin: 0 30px;
align-self: self-start;

View File

@@ -123,11 +123,82 @@
font-size: 13px;
color: rgb(171, 119, 19);
text-decoration: none;
.bi-question {
width: 14px;
height: 14px;
margin-left: 5px;
}
&:hover {
.bi-pop {
display: flex;
}
}
}
.bi-pop {
width: 260px;
box-sizing: border-box;
position: absolute;
background-color: #f6f7f7;
top: 58px;
left: 0;
z-index: 1;
border-radius: 12px;
box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.35);
flex-direction: column;
padding: 10px;
color: #555;
display: none;
.bi-coin-title {
font-weight: 650;
font-size: 16px;
color: #000000;
margin-bottom: 5px;
}
.bi-coin-hint {
font-size: 14px;
line-height: 20px;
a {
text-decoration: none;
}
.bi-url {
text-decoration: underline;
color: #04b0d5;
}
}
&::before {
content: "";
width: 10px;
height: 10px;
position: absolute;
top: -19px;
right: 40px;
width: 0;
height: 0;
transform: translateX(-50%);
border: 10px solid #000;
border-top-color: transparent;
border-bottom-color: #f6f7f7;
border-left-color: transparent;
border-right-color: transparent;
}
&::after {
content: "";
position: absolute;
width: 100%;
height: 20px;
display: block;
z-index: -1;
top: -15px;
left: 0;
}
}
}

View File

@@ -420,6 +420,42 @@
#appIndex .header-content-box .header-content-right .offer-box .item:hover .titletitle {
color: #000000;
}
#appIndex .admission {
margin-bottom: 30px;
}
#appIndex .admission .admission-header {
margin-bottom: 24px;
display: inline-flex;
}
#appIndex .admission .admission-header .admission-header-icon {
width: 91px;
height: 28px;
margin-right: 16px;
}
#appIndex .admission .admission-header .admission-header-name {
font-family: "Roboto-Light", "Roboto Light", "Roboto", sans-serif;
font-weight: 200;
font-size: 16px;
line-height: 16px;
color: #555555;
align-items: flex-end;
}
#appIndex .admission .admission-list {
flex-wrap: wrap;
}
#appIndex .admission .admission-list .admission-item {
width: 291px;
height: 103px;
border-radius: 9px;
cursor: pointer;
overflow: hidden;
}
#appIndex .admission .admission-list .admission-item:not(:nth-child(4n)) {
margin-right: 12px;
}
#appIndex .admission .admission-list .admission-item:not(:nth-last-child(-n + 4)) {
margin-bottom: 14px;
}
#appIndex .matter .matter-content {
margin-right: 12px;
}

View File

@@ -504,6 +504,48 @@
}
}
.admission {
margin-bottom: 30px;
.admission-header {
margin-bottom: 24px;
display: inline-flex;
.admission-header-icon {
width: 91px;
height: 28px;
margin-right: 16px;
}
.admission-header-name {
font-family: "Roboto-Light", "Roboto Light", "Roboto", sans-serif;
font-weight: 200;
font-size: 16px;
line-height: 16px;
color: #555555;
align-items: flex-end;
}
}
.admission-list {
flex-wrap: wrap;
.admission-item {
width: 291px;
height: 103px;
border-radius: 9px;
cursor: pointer;
overflow: hidden;
&:not(:nth-child(4n)) {
margin-right: 12px;
}
&:not(:nth-last-child(-n + 4)) {
margin-bottom: 14px;
}
}
}
}
.matter {
.matter-content {
margin-right: 12px;

View File

@@ -185,6 +185,7 @@ body {
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
display: flex;
}
.item-box.item-forum .message {
font-size: 14px;
@@ -476,6 +477,7 @@ body {
color: #000000;
line-height: 36px;
margin-bottom: 10px;
display: block;
}
.item-box.item-tenement .site-box {
margin-bottom: 10px;
@@ -1532,3 +1534,62 @@ body {
cursor: pointer;
text-decoration: none;
}
table {
empty-cells: show;
border-collapse: collapse;
}
.t_l,
.t_c,
.t_r,
.m_l,
.m_r,
.b_l,
.b_c,
.b_r {
overflow: hidden;
background: #000;
opacity: 0.2;
filter: alpha(opacity=20);
}
.t_l,
.t_c,
.t_r,
.m_l,
.m_r,
.b_l,
.b_c,
.b_r {
overflow: hidden;
background: #000;
opacity: 0.2;
filter: alpha(opacity=20);
}
td {
display: table-cell;
vertical-align: inherit;
unicode-bidi: isolate;
}
.t_l {
-moz-border-radius: 8px 0 0 0;
-webkit-border-radius: 8px 0 0 0;
border-radius: 8px 0 0 0;
}
.t_c,
.b_c {
height: 8px;
}
.t_l,
.t_r,
.b_l,
.b_r {
width: 8px;
height: 8px;
}
.t_r {
-moz-border-radius: 0 8px 0 0;
-webkit-border-radius: 0 8px 0 0;
border-radius: 0 8px 0 0;
}
.templateValue {
display: none;
}

View File

@@ -219,6 +219,7 @@ body {
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
display: flex;
}
.message {
@@ -569,6 +570,7 @@ body {
color: #000000;
line-height: 36px;
margin-bottom: 10px;
display: block;
}
.site-box {
@@ -1823,3 +1825,70 @@ body {
}
}
}
table {
empty-cells: show;
border-collapse: collapse;
}
.t_l,
.t_c,
.t_r,
.m_l,
.m_r,
.b_l,
.b_c,
.b_r {
overflow: hidden;
background: #000;
opacity: 0.2;
filter: alpha(opacity=20);
}
.t_l,
.t_c,
.t_r,
.m_l,
.m_r,
.b_l,
.b_c,
.b_r {
overflow: hidden;
background: #000;
opacity: 0.2;
filter: alpha(opacity=20);
}
td {
display: table-cell;
vertical-align: inherit;
unicode-bidi: isolate;
}
.t_l {
-moz-border-radius: 8px 0 0 0;
-webkit-border-radius: 8px 0 0 0;
border-radius: 8px 0 0 0;
}
.t_c,
.b_c {
height: 8px;
}
.t_l,
.t_r,
.b_l,
.b_r {
width: 8px;
height: 8px;
}
.t_r {
-moz-border-radius: 0 8px 0 0;
-webkit-border-radius: 0 8px 0 0;
border-radius: 0 8px 0 0;
}
.templateValue {
display: none;
}

View File

@@ -105,9 +105,12 @@
margin-right: 20px;
margin-bottom: 28px;
width: fit-content;
width: 100%;
}
#sectionIndex .matter .matter-content .info-box .right .link .item {
padding: 12px 0;
position: relative;
cursor: pointer;
}
#sectionIndex .matter .matter-content .info-box .right .link .item:not(:last-child) {
margin-right: 72px;
@@ -121,6 +124,40 @@
width: 12px;
height: 12px;
}
#sectionIndex .matter .matter-content .info-box .right .link .item:hover .QRcode-box {
display: flex;
}
#sectionIndex .matter .matter-content .info-box .right .link .item .QRcode-box {
position: absolute;
top: 51px;
left: 50%;
transform: translateX(-50%);
width: 180px;
height: 240px;
background-color: #ffffff;
border-radius: 10px;
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.12156863);
flex-direction: column;
z-index: 1;
display: none;
}
#sectionIndex .matter .matter-content .info-box .right .link .item .QRcode-box .QRcode-img {
width: 130px;
height: 130px;
margin-bottom: 12px;
}
#sectionIndex .matter .matter-content .info-box .right .link .item .QRcode-box .name {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 16px;
color: #000000;
margin-bottom: 9px;
}
#sectionIndex .matter .matter-content .info-box .right .link .item .QRcode-box .hint {
font-size: 13px;
color: #333333;
}
#sectionIndex .matter .matter-content .info-box .right .bottom {
justify-content: space-between;
margin-right: 20px;

View File

@@ -114,20 +114,68 @@
margin-right: 20px;
margin-bottom: 28px;
width: fit-content;
width: 100%;
.item {
padding: 12px 0;
position: relative;
cursor: pointer;
&:not(:last-child) {
margin-right: 72px;
}
.text {
font-size: 14px;
color: #333333;
margin-right: 8px;
}
.icon {
width: 12px;
height: 12px;
}
&:hover {
.QRcode-box {
display: flex;
}
}
.QRcode-box {
position: absolute;
top: 51px;
left: 50%;
transform: translateX(-50%);
width: 180px;
height: 240px;
background-color: rgba(255, 255, 255, 1);
border-radius: 10px;
box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.12156862745098);
flex-direction: column;
z-index: 1;
display: none;
.QRcode-img {
width: 130px;
height: 130px;
margin-bottom: 12px;
}
.name {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 16px;
color: #000000;
margin-bottom: 9px;
}
.hint {
font-size: 13px;
color: #333333;
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
img/attestation-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
img/cong-ge.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
img/intermediary-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
img/university-manager.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -34,8 +34,8 @@ const ajax = (url, data) => {
});
};
// 导出ajaxget函数
const ajaxget = (url) => {
// 导出ajaxGet函数
const ajaxGet = (url) => {
if (location.hostname == "127.0.0.1") axios.defaults.headers.common["Authorization"] = "erhvky91rk23vx7xiutj34db82kjb1vc";
url = url.indexOf("https://") > -1 ? url : forumBaseURL + url;

View File

@@ -100,7 +100,7 @@ const appSearch = createApp({
let uniqid = "";
const init = () => {
ajaxget(`https://offer.gter.net/miniprogramApi/offer/search`).then((res) => {
ajaxGet(`https://offer.gter.net/miniprogramApi/offer/search`).then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
page.value = 0;
@@ -120,7 +120,7 @@ const appSearch = createApp({
if (loading || page.value == null) return;
loading = true;
const limit = 20;
ajaxget(`/v2/api/forum/topicLists?type=${tabValue.value == "all" ? "" : tabValue.value}&page=${page.value}&limit=${limit}&keyword=${kw.value}`)
ajaxGet(`/v2/api/forum/topicLists?type=${tabValue.value == "all" ? "" : tabValue.value}&page=${page.value}&limit=${limit}&keyword=${kw.value}`)
.then((res) => {
// wx.hideLoading();
if (res.code != 200) {

View File

@@ -38,7 +38,7 @@ const appSectionIndex = createApp({
let section = ref("");
const getSectionList = () => {
ajaxget("/v2/api/forum/getSectionList").then((res) => {
ajaxGet("/v2/api/forum/getSectionList").then((res) => {
if (res.code != 200) return;
const data = res.data || [];
@@ -89,7 +89,7 @@ const appSectionIndex = createApp({
let info = ref({});
const init = () => {
ajaxget(`/v2/api/forum/getSectionDetails?sectionid=${section.value}`).then((res) => {
ajaxGet(`/v2/api/forum/getSectionDetails?sectionid=${section.value}`).then((res) => {
if (res.code != 200) return;
const data = res.data || {};
info.value = data;
@@ -98,7 +98,7 @@ const appSectionIndex = createApp({
let handpickList = ref([]);
const handpick = () => {
ajaxget(`/v2/api/forum/topicHandpicked?sectionid=${section.value}`).then((res) => {
ajaxGet(`/v2/api/forum/topicHandpicked?sectionid=${section.value}`).then((res) => {
let data = res.data || [];
handpickList.value = data;
});
@@ -106,7 +106,7 @@ const appSectionIndex = createApp({
let tagsList = ref([]);
const getTags = () => {
ajaxget(`/v2/api/forum/sectionTags?sectionid=${section.value}`).then((res) => {
ajaxGet(`/v2/api/forum/sectionTags?sectionid=${section.value}`).then((res) => {
if (res.code != 200) return;
const data = res.data || {};
tagsList.value = data;
@@ -120,7 +120,7 @@ const appSectionIndex = createApp({
const getList = () => {
if (loading || page.value == 0) return;
loading = true;
ajaxget(`/v2/api/forum/topicLists?type=thread&page=${page.value || 1}&sectionid=${section.value}`)
ajaxGet(`/v2/api/forum/topicLists?type=thread&page=${page.value || 1}&sectionid=${section.value}`)
.then((res) => {
if (res.code != 200) return;
let data = res.data;
@@ -205,7 +205,7 @@ const appSectionIndex = createApp({
let vote = ref([]); // 面经列表
let interviewexperience = ref([]); // 面经列表
const getTopicLatest = () => {
ajaxget(`/v2/api/forum/getTopicLatest?limit=4`).then((res) => {
ajaxGet(`/v2/api/forum/getTopicLatest?limit=4`).then((res) => {
const data = res.data || [];
console.log("data99999999999999", data);

View File

@@ -1,227 +1,249 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>版块首页</title>
<link rel="stylesheet" href="./css/public.css" />
<link rel="stylesheet" href="./css/section.css" />
<script src="./js/vue.global.js"></script>
<style scoped>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div class="container" id="sectionIndex" v-cloak>
<div class="head-top flexacenter">
<img class="logo" src="https://oss.gter.net/logo" alt="" />
<div class="flex1"></div>
<div class="input-box flexacenter">
<input class="input flex1" type="text" placeholder="大家都在搜:屯特" />
<img class="icon" />
</div>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>版块首页</title>
<link rel="stylesheet" href="./css/public.css" />
<link rel="stylesheet" href="./css/section.css" />
<script src="./js/vue.global.js"></script>
<style scoped>
[v-cloak] {
display: none;
}
</style>
</head>
<div class="sign-in sign-in-already flexcenter" v-if="signInAlreadyState" v-cloak onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')">
<img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" />
<span>已签到,明天再来</span>
</div>
<div class="sign-in sign-in-no flexacenter" v-else onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')" v-cloak>
<img class="sign-in-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-in-bj.svg" />
<img class="coin-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-bj.svg" />
<img class="coin-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-icon.png" />
<span class="text flex1">签到领寄托币</span>
<div class="sign-go flexcenter">
<img class="sign-go-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-go.svg" />
GO
</div>
<img class="petal1" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal1.png" />
<img class="petal2" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal2.png" />
<img class="petal3" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal3.png" />
</div>
<body>
<div class="container" id="sectionIndex" v-cloak>
<div class="head-top flexacenter">
<img class="logo" src="https://oss.gter.net/logo" alt="" />
<div class="flex1"></div>
<div class="input-box flexacenter">
<input class="input flex1" type="text" placeholder="大家都在搜:屯特" />
<img class="icon" />
</div>
<div class="head-navigation flexacenter">
<img class="icon" src="./img/index-icon.png" />
<a class="text textA" target="_blank" href="./">首页</a>
<img class="arrows" src="./img/arrows-gray.svg" />
<div class="text">{{ info.name }}</div>
<div class="sign-in sign-in-already flexcenter" v-if="signInAlreadyState" v-cloak onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')">
<img class="sign-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-icon.png" />
<span>已签到,明天再来</span>
</div>
<div class="sign-in sign-in-no flexacenter" v-else onclick="showWindow('dsu_paulsign', 'https://bbs.gter.net/plugin.php?id=dsu_paulsign:sign&show=sign')" v-cloak>
<img class="sign-in-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-in-bj.svg" />
<img class="coin-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-bj.svg" />
<img class="coin-icon" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/coin-icon.png" />
<span class="text flex1">签到领寄托币</span>
<div class="sign-go flexcenter">
<img class="sign-go-bj" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/sign-go.svg" />
GO
</div>
<img class="petal1" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal1.png" />
<img class="petal2" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal2.png" />
<img class="petal3" src="//framework.x-php.com/gter/image/gter/forum/assets/forum/petal3.png" />
</div>
</div>
<div class="matter flexflex">
<div class="sidebar">
<div class="title">论坛版块</div>
<div class="list">
<template v-for="(item, index) in sectionList" :key="index">
<div v-if="item.key == 'line'" class="line"></div>
<div v-else class="item flexacenter" :class="{'pitch' : item.uniqid == section}" @click="changeSection(item.uniqid)">
<span class="text">{{ item.name }}</span>
<div class="head-navigation flexacenter">
<img class="icon" src="./img/index-icon.png" />
<a class="text textA" target="_blank" href="./">首页</a>
<img class="arrows" src="./img/arrows-gray.svg" />
<div class="text">{{ info.name }}</div>
</div>
<div class="matter flexflex">
<div class="sidebar">
<div class="title">论坛版块</div>
<div class="list">
<template v-for="(item, index) in sectionList" :key="index">
<div v-if="item.key == 'line'" class="line"></div>
<div v-else class="item flexacenter" :class="{'pitch' : item.uniqid == section}" @click="changeSection(item.uniqid)">
<span class="text">{{ item.name }}</span>
</div>
</template>
</div>
</div>
<div class="matter-content flex1">
<div class="info-box flexflex">
<img v-if="info.icon" class="img" :src="info.icon" />
<div class="right flex1">
<div class="title">{{ info.name }}</div>
<div class="link flexacenter">
<a class="item flexacenter" href="https://u.gter.net/ad/1043?x=gter" target="_blank">
<div class="text">申港超强资料包</div>
<img class="icon" src="./img/arrows-circle-red.svg" />
</a>
<a class="item flexacenter" href="http://program.gter.net/" target="_blank">
<div class="text">港校项目库</div>
<img class="icon" src="./img/arrows-circle-red.svg" />
</a>
<div class="item flexacenter">
<div class="text">26fall香港申请群</div>
<img class="icon" src="./img/arrows-circle-red.svg" />
<div class="QRcode-box flexcenter">
<img class="QRcode-img">
<div class="QRcode-name">26fall香港申请群</div>
<div class="hint">微信扫码添加</div>
</div>
</div>
</template>
<a class="item flexacenter" href="https://fang.gter.net/" target="_blank">
<div class="text">寄托香港租房</div>
<img class="icon" src="./img/arrows-circle-red.svg" />
</a>
</div>
<div class="bottom flexacenter">
<div class="data flexacenter">
<div class="sum">{{ count }}</div>
个帖子
</div>
<div class="btn flexcenter">
<img class="icon" src="./img/pen-icon.png" />
<div class="text">发帖</div>
</div>
</div>
</div>
</div>
<div class="matter-content flex1">
<div class="info-box flexflex">
<img v-if="info.icon" class="img" :src="info.icon" />
<div class="right flex1">
<div class="title">{{ info.name }}</div>
<div class="link flexacenter">
<div class="item flexacenter" v-for="item in 4" :key="item">
<div class="text">申港超强资料包</div>
<img class="icon" src="./img/arrows-circle-red.svg" />
</div>
<div class="details-box flexflex">
<div class="content-box flex1">
<div class="selectives-box" v-if="handpickList.length > 0">
<div class="head-top flexcenter">
<img class="icon" src="https://app.gter.net/image/miniApp/offer/handpick-icon.png" />
<div class="text">精选</div>
</div>
<div class="bottom flexacenter">
<div class="data flexacenter">
<div class="sum">{{ count }}</div>
个帖子
</div>
<div class="btn flexcenter">
<img class="icon" src="./img/pen-icon.png" />
<div class="text">发帖</div>
</div>
<div class="list flexflex">
<a class="item flexacenter" v-for="(item, index) in handpickList" :key="index" :href="'http://14.22.79.19:9551/?tpl=forum/details&uniqid=' + item.uniqid" target="_blank">
<div class="dot"></div>
<div class="text one-line-display">{{ item.title }}</div>
</a>
</div>
</div>
<div class="red-tag" v-if="tagsList.length > 0">
<div class="title">
热门标签
<img class="icon" src="./img/triangle-red.svg" />
</div>
<div class="list">
<div class="item flexacenter" v-for="(item, index) in tagsList" :key="index">{{ item.tagname }}</div>
</div>
</div>
<div class="list-box">
<item-forum v-for="(item, index) in list" :key="index" :itemdata="item"></item-forum>
</div>
</div>
<div class="details-box flexflex">
<div class="content-box flex1">
<div class="selectives-box" v-if="handpickList.length > 0">
<div class="head-top flexcenter">
<img class="icon" src="https://app.gter.net/image/miniApp/offer/handpick-icon.png" />
<div class="text">精选</div>
</div>
<div class="list flexflex">
<a class="item flexacenter" v-for="(item, index) in handpickList" :key="index" :href="'http://14.22.79.19:9551/?tpl=forum/details&uniqid=' + item.uniqid" target="_blank">
<div class="dot"></div>
<div class="text one-line-display">{{ item.title }}</div>
</a>
</div>
</div>
<div>
<a class="adv" href="" target="_blank">
<img class="adv-icon" src="https://o.x-php.com/bbs/common/cf/1709075xdbbbvjd8cbxvdd.jpg" alt="26Fall祈福求offer得offer" />
</a>
<a class="adv" href="" target="_blank">
<img class="adv-icon" src="https://o.x-php.com/bbs/common/cf/1709075xdbbbvjd8cbxvdd.jpg" alt="26Fall祈福求offer得offer" />
</a>
<div class="red-tag" v-if="tagsList.length > 0">
<div class="title">
热门标签
<img class="icon" src="./img/triangle-red.svg" />
</div>
<div class="list">
<div class="item flexacenter" v-for="(item, index) in tagsList" :key="index">{{ item.tagname }}</div>
<!-- offer -->
<div class="offer-side-box side-box" v-if="offer.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/offer-index-icon.png" />
<div class="title">Offer</div>
</div>
<a class="more flexacenter" href="https://offer.gter.net" target="_blank">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<div class="list-box">
<item-forum v-for="(item, index) in list" :key="index" :itemdata="item"></item-forum>
<div class="box">
<a class="item flexflex" v-cloak v-for="item in offer" :key="item" :href="'/details/' + item['uniqid']" target="_blank">
<img class="school-img" :src="item.data['schoollogo']" />
<div class="school-detail flex1 flexflex">
<div class="school-name one-line-display">{{ item.data['schoolname'] }}</div>
<div class="school-brief one-line-display">{{ item.data['professional'] }}</div>
<div class="school-offer flexacenter">
<span>{{ item.data['degree'] }}</span>
<span class="long-string">|</span>
<span>{{ item.data['semester'] }}</span>
<span class="long-string">|</span>
<span>{{ item.data['apply_results_text'] }}</span>
</div>
</div>
</a>
<a class="add-btn flexcenter" style="position: relative" href="https://offer.gter.net/post" target="_blank" v-cloak>
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>报Offer</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
</div>
</div>
<div >
<a class="adv" href="" target="_blank">
<img class="adv-icon" src="https://o.x-php.com/bbs/common/cf/1709075xdbbbvjd8cbxvdd.jpg" alt="26Fall祈福求offer得offer" />
</a>
<a class="adv" href="" target="_blank">
<img class="adv-icon" src="https://o.x-php.com/bbs/common/cf/1709075xdbbbvjd8cbxvdd.jpg" alt="26Fall祈福求offer得offer" />
</a>
<!-- offer -->
<div class="offer-side-box side-box" v-if="offer.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/offer-index-icon.png" />
<div class="title">Offer</div>
</div>
<a class="more flexacenter" href="https://offer.gter.net" target="_blank">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<div class="box">
<a class="item flexflex" v-cloak v-for="item in offer" :key="item" :href="'/details/' + item['uniqid']" target="_blank">
<img class="school-img" :src="item.data['schoollogo']" />
<div class="school-detail flex1 flexflex">
<div class="school-name one-line-display">{{ item.data['schoolname'] }}</div>
<div class="school-brief one-line-display">{{ item.data['professional'] }}</div>
<div class="school-offer flexacenter">
<span>{{ item.data['degree'] }}</span>
<span class="long-string">|</span>
<span>{{ item.data['semester'] }}</span>
<span class="long-string">|</span>
<span>{{ item.data['apply_results_text'] }}</span>
</div>
</div>
</a>
<a class="add-btn flexcenter" style="position: relative" href="https://offer.gter.net/post" target="_blank" v-cloak>
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>报Offer</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
<!-- vote -->
<div class="vote-side-box side-box" v-if="vote.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/vote-index-icon.png" />
<div class="title">投票</div>
</div>
<a class="more flexacenter" target="_blank" href="https://vote.gter.net">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<!-- vote -->
<div class="vote-side-box side-box" v-if="vote.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/vote-index-icon.png" />
<div class="title">投票</div>
</div>
<a class="more flexacenter" target="_blank" href="https://vote.gter.net">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<div class="box">
<a class="item flexflex" v-cloak v-for="item in vote" :key="item" target="_blank" :href="'https://vote.gter.net/details/' + item['uniqid']">
<div class="name one-line-display">{{item['title']}}</div>
<div class="brief">{{ item['message'] }}</div>
</a>
<a class="add-btn flexcenter" style="position: relative" v-cloak target="_blank" href="https://vote.gter.net/publish">
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>发起投票</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
</div>
<div class="box">
<a class="item flexflex" v-cloak v-for="item in vote" :key="item" target="_blank" :href="'https://vote.gter.net/details/' + item['uniqid']">
<div class="name one-line-display">{{item['title']}}</div>
<div class="brief">{{ item['message'] }}</div>
</a>
<a class="add-btn flexcenter" style="position: relative" v-cloak target="_blank" href="https://vote.gter.net/publish">
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>发起投票</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
</div>
<!-- mj -->
<div class="interviewexperience-side-box side-box" v-if="interviewexperience.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/mj-index-icon.png" />
<div class="title">面经</div>
</div>
<a class="more flexacenter" href="https://interviewexperience.gter.net/" target="_blank">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<div class="box">
<a class="item flexflex" v-cloak v-for="(item,index) in interviewexperience" :key="item" :href="'https://interviewexperience.gter.net/details/' + item['uniqid']" target="_blank">
<div class="school one-line-display">{{ item.data['schoolname'] }}</div>
<div class="major one-line-display" v-if="item.data['profession']">{{ item.data['profession'] }}</div>
<div class="info">
<img class="icon" :src="item.user['avatar']" />
<span class="text">{{ item['content'] }}</span>
</div>
</a>
<a class="add-btn flexcenter" style="position: relative" href="https://interviewexperience.gter.net/publish" target="_blank" v-cloak>
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>写面经</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
</div>
</div>
<!-- newest 最新 -->
<latest-list boxtype="newest"></latest-list>
<latest-list boxtype="essence"></latest-list>
</div>
<!-- mj -->
<div class="interviewexperience-side-box side-box" v-if="interviewexperience.length != 0">
<div class="side-header flexacenter">
<div class="left flexacenter">
<img class="header-icon" src="./img/mj-index-icon.png" />
<div class="title">面经</div>
</div>
<a class="more flexacenter" href="https://interviewexperience.gter.net/" target="_blank">
<span>more</span>
<img class="more-icon" src="./img/right-arrow-black.svg" />
</a>
</div>
<div class="box">
<a class="item flexflex" v-cloak v-for="(item,index) in interviewexperience" :key="item" :href="'https://interviewexperience.gter.net/details/' + item['uniqid']" target="_blank">
<div class="school one-line-display">{{ item.data['schoolname'] }}</div>
<div class="major one-line-display" v-if="item.data['profession']">{{ item.data['profession'] }}</div>
<div class="info">
<img class="icon" :src="item.user['avatar']" />
<span class="text">{{ item['content'] }}</span>
</div>
</a>
<a class="add-btn flexcenter" style="position: relative" href="https://interviewexperience.gter.net/publish" target="_blank" v-cloak>
<img class="add-icon" src="./img/add-btn-black.svg" />
<div>写面经</div>
<div v-if="realname == 0 && userInfo.uin > 0" class="open-attest-btn" @click.prevent="openAttest"></div>
</a>
</div>
</div>
<!-- newest 最新 -->
<latest-list boxtype="newest"></latest-list>
<latest-list boxtype="essence"></latest-list>
</div>
</div>
</div>
</div>
<script src="./js/axios.min.js"></script>
<script src="./js/public.js"></script>
<script type="module" src="./js/section.js"></script>
</body>
</div>
<script src="./js/axios.min.js"></script>
<script src="./js/public.js"></script>
<script type="module" src="./js/section.js"></script>
</body>
</html>