refactor(components): 重构图片资源引用方式,使用动态路径

将静态图片路径改为从valueUrl动态获取,统一管理图片资源路径
添加新的SVG图标资源
修复BI组件401未授权时的登录跳转逻辑
优化签到组件图片资源路径
This commit is contained in:
DESKTOP-RQ919RC\Pc
2025-12-08 19:09:04 +08:00
parent 003b5992a5
commit 6ce06b133a
29 changed files with 268 additions and 187 deletions

View File

@@ -219,6 +219,9 @@ class BiCard extends HTMLElement {
if (xhr.readyState === 4 && xhr.status === 200) {
let response = xhr.response;
resolve(response);
} else if (xhr.status === 401) {
if (typeof ajax_login === "function") ajax_login();
else window.open("https://passport.gter.net/?referer=" + escape(location.href), "_self");
}
};
@@ -241,6 +244,9 @@ class BiCard extends HTMLElement {
if (xhr.readyState === 4 && xhr.status === 200) {
let response = xhr.response;
resolve(JSON.parse(response));
} else if (xhr.status === 401) {
if (typeof ajax_login === "function") ajax_login();
else window.open("https://passport.gter.net/?referer=" + escape(location.href), "_self");
}
};

View File

@@ -7,8 +7,12 @@ export const hotSearch = defineComponent({
props: {},
setup(props) {
let valueUrl = ref("");
onMounted(() => {
init();
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
const init = () => {
@@ -20,10 +24,10 @@ export const hotSearch = defineComponent({
const list = ref([]);
return { list };
return { valueUrl, list };
},
components: {},
template: `<div class="hot-tag" v-if="list.length > 0"> <div class="hot-tag-title"> <img class="icon" src="/img/triangle-violet.svg" /> 热门搜索 </div> <div class="list flexflex"> <a class="item" v-for="item in list" :href="'/search/' + item.keyword" target="_blank">{{ item.keyword }}</a> </div></div>`,
template: `<div class="hot-tag" v-if="list.length > 0"> <div class="hot-tag-title"> <img class="icon" :src="valueUrl + '/img/triangle-violet.svg'" /> 热门搜索 </div> <div class="list flexflex"> <a class="item" v-for="item in list" :href="'/search/' + item.keyword" target="_blank">{{ item.keyword }}</a> </div></div>`,
});

View File

@@ -1,6 +1,6 @@
<div class="hot-tag" v-if="list.length > 0">
<div class="hot-tag-title">
<img class="icon" src="/img/triangle-violet.svg" />
<img class="icon" :src="valueUrl + '/img/triangle-violet.svg'" />
热门搜索
</div>
<div class="list flexflex">

View File

@@ -7,8 +7,12 @@ export const hotTag = defineComponent({
props: {},
setup(props) {
let valueUrl = ref("");
onMounted(() => {
init();
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
const init = () => {
@@ -20,7 +24,7 @@ export const hotTag = defineComponent({
const list = ref([]);
return { list };
return { valueUrl, list };
},
components: {},

View File

@@ -1,6 +1,6 @@
<div class="hot-tag" v-if="list.length > 0">
<div class="hot-tag-title">
<img class="icon" src="/img/triangle-orange.svg" />
<img class="icon" :src="valueUrl + '/img/triangle-orange.svg'" />
热门标签
</div>
<div class="list flexflex">

View File

@@ -1,151 +1,158 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent, ref, inject, defineAsyncComponent } = Vue;
const { defineComponent, ref, inject, defineAsyncComponent, onMounted } = Vue;
const like = defineAsyncComponent(() => import(withVer("../like/like.js")).then(m => m.like));
const like = defineAsyncComponent(() => import(withVer("../like/like.js")).then((m) => m.like));
// 定义组件(直接使用模板)
export const itemBottom = defineComponent({
name: "item-bottom",
props: {
itemdata: {
type: Object,
default: () => {},
},
props: {
itemdata: {
type: Object,
default: () => {},
},
},
setup(props) {
let item = ref({ ...props.itemdata });
setup(props) {
let valueUrl = ref("");
let isLogin = inject("isLogin");
let userInfoWin = inject("userInfoWin");
let realname = inject("realname");
let goLogin = inject("goLogin");
let openAttest = inject("openAttest");
onMounted(() => {
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
let isLikeGif = ref(false);
let item = ref({ ...props.itemdata });
let cancelOperate = inject("cancelOperate");
let isLogin = inject("isLogin");
let userInfoWin = inject("userInfoWin");
let realname = inject("realname");
let goLogin = inject("goLogin");
let openAttest = inject("openAttest");
const likeClick = () => {
if (realname.value == 0 && userInfoWin.value?.uin > 0) {
openAttest();
return;
}
let isLikeGif = ref(false);
if (!isLogin.value) {
goLogin();
return;
}
let cancelOperate = inject("cancelOperate");
const token = item.value.token || "";
const likeClick = () => {
if (realname.value == 0 && userInfoWin.value?.uin > 0) {
openAttest();
return;
}
if (["offer", "offer_summary", "interviewexperience"].includes(item.value["type"]) && item.value["is_like"]) {
creationAlertBox("error", "不可取消点赞");
return;
}
if (!isLogin.value) {
goLogin();
return;
}
ajax(`/v2/api/forum/postTopicLike`, {
token,
const token = item.value.token || "";
if (["offer", "offer_summary", "interviewexperience"].includes(item.value["type"]) && item.value["is_like"]) {
creationAlertBox("error", "不可取消点赞");
return;
}
ajax(`/v2/api/forum/postTopicLike`, {
token,
})
.then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
let data = res.data;
creationAlertBox("success", res.message);
item.value["is_like"] = data.status;
item.value["likes"] = data.likes;
if (data.status) {
isLikeGif.value = true;
setTimeout(() => (isLikeGif.value = false), 2000);
}
if (data.status == 0) cancelOperate("like", token);
// wx.hideLoading();
})
.then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
.catch(() => {});
};
let data = res.data;
creationAlertBox("success", res.message);
const collectClick = () => {
if (!isLogin.value) {
goLogin();
return;
}
item.value["is_like"] = data.status;
item.value["likes"] = data.likes;
const token = item.value.token || "";
if (data.status) {
isLikeGif.value = true;
setTimeout(() => (isLikeGif.value = false), 2000);
}
if (data.status == 0) cancelOperate("like", token);
// wx.hideLoading();
})
.catch(() => {});
};
const collectClick = () => {
if (!isLogin.value) {
goLogin();
return;
}
const token = item.value.token || "";
ajax(`/v2/api/forum/postTopicCollect`, {
token,
})
.then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
const data = res.data || {};
item.value["is_collect"] = data.status;
item.value["collections"] = data.collections;
creationAlertBox("success", res.message);
// 调用父组件的方法
if (data.status == 0) cancelOperate("collection", token);
})
.catch((err) => {
if (err?.code == 401) goLogin();
});
};
const copyLinkClick = () => {
copyForumUid(`${location.origin}/details/${item.value.uniqid}`);
};
let QRcode = ref("");
const showQRcode = () => {
if (QRcode.value) return;
// return
ajaxGet(`/v2/api/forum/getQrcode?token=${item.value.token}`).then((res) => {
if (res.code != 200) return;
ajax(`/v2/api/forum/postTopicCollect`, {
token,
})
.then((res) => {
if (res.code != 200) {
creationAlertBox("error", res.message);
return;
}
const data = res.data || {};
QRcode.value = data.url || "";
item.value["is_collect"] = data.status;
item.value["collections"] = data.collections;
creationAlertBox("success", res.message);
// 调用父组件的方法
if (data.status == 0) cancelOperate("collection", token);
})
.catch((err) => {
if (err?.code == 401) goLogin();
});
};
};
let isright = ref(false);
const copyLinkClick = () => {
copyForumUid(`${location.origin}/details/${item.value.uniqid}`);
};
const share = () => {
const token = item.value.token || "";
ajax(`/v2/api/forum/postTopicShare`, { token });
let QRcode = ref("");
const showQRcode = () => {
if (QRcode.value) return;
// return
ajaxGet(`/v2/api/forum/getQrcode?token=${item.value.token}`).then((res) => {
if (res.code != 200) return;
const data = res.data || {};
QRcode.value = data.url || "";
});
};
if (!shareBoxRef.value) return;
let isright = ref(false);
// 1. 获取元素相对于可视窗口的位置信息
const rect = shareBoxRef.value.getBoundingClientRect();
const share = () => {
const token = item.value.token || "";
ajax(`/v2/api/forum/postTopicShare`, { token });
// 2. 获取可视窗口宽度(不包含滚动条,更准确)
const clientWidth = document.documentElement.clientWidth;
if (!shareBoxRef.value) return;
// 3. 计算距离:可视窗口宽度 - 元素右边缘到左边缘的距离
const distance = clientWidth - rect.right;
console.log("distance", distance);
// 1. 获取元素相对于可视窗口的位置信息
const rect = shareBoxRef.value.getBoundingClientRect();
if (distance < 140) isright.value = true;
else isright.value = false;
};
// 2. 获取可视窗口宽度(不包含滚动条,更准确)
const clientWidth = document.documentElement.clientWidth;
const shareBoxRef = ref(null);
// 3. 计算距离:可视窗口宽度 - 元素右边缘到左边缘的距离
const distance = clientWidth - rect.right;
console.log("distance", distance);
return { isright, shareBoxRef, share, QRcode, showQRcode, copyLinkClick, collectClick, item, likeClick, isLogin, isLikeGif };
},
if (distance < 140) isright.value = true;
else isright.value = false;
};
components: {
like,
},
const shareBoxRef = ref(null);
template: `<a class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)" :href="item.url" target="_blank"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div></a><template v-if="item.comment_list?.length != 0"> <a class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index" :href="item.url" target="_blank"> <img class="icon" :src="item.avatar" /> <div class="text one-line-display">{{ item.content || "[图]" }}</div> </a></template><div class="bottom flexacenter"> <div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'"> <img v-if="item.is_like" class="icon" src="/img/like-red-icon.png" /> <img v-else class="icon" src="/img/like-icon.png" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item flexacenter" @click="collectClick()"> <img v-if="item.is_collect" class="icon" src="/img/collect-golden.svg" /> <img v-else class="icon" src="/img/collect-gray.png" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/discuss-icon.png" /> <div class="text">{{ item.comments || "讨论" }}</div> </a> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/bi-copper-icon.png" /> <div class="text">{{ item.coins || "投币" }}</div> </a> <!-- 鼠标移入事件 --> <div class="bottom-item share flexacenter" @mouseenter="share"> <img class="icon" src="/img/share-gray.png" style="width: 19px; height: 19px;" /> <div class="text">{{ item.shares || '转发'}}</div> <div class="share-box flexcenter" ref="shareBoxRef"> <div class="share-item flexcenter" @click="copyLinkClick()"> <img class="share-icon" src="/img/copy-black-icon.png" /> <div class="text">复制链接</div> </div> <!-- 鼠标移入 加载二维码 --> <div class="share-item wenxin flexcenter" @mouseenter="showQRcode"> <img class="share-icon" src="/img/weixin-icon.png" /> <div class="text">微信转发</div> <div class="QRcode-box flexcenter" :class="{'right': isright}"> <img v-if="QRcode" class="QRcode" :src="QRcode" /> <div v-else class="QRcode flexcenter"> <img class="load" src="/img/load-icon.svg" /> </div> <div class="text">微信扫码</div> </div> </div> </div> </div></div><like v-if="isLikeGif"></like>`,
return { valueUrl, isright, shareBoxRef, share, QRcode, showQRcode, copyLinkClick, collectClick, item, likeClick, isLogin, isLikeGif };
},
components: {
like,
},
template: `<a class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)" :href="item.url" target="_blank"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div></a><template v-if="item.comment_list?.length != 0"> <a class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index" :href="item.url" target="_blank"> <img class="icon" :src="item.avatar" /> <div class="text one-line-display">{{ item.content || "[图]" }}</div> </a></template><div class="bottom flexacenter"> <div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'"> <img v-if="item.is_like" class="icon" :src="valueUrl + '/img/like-red-icon.png'" /> <img v-else class="icon" :src="valueUrl + '/img/like-icon.png'" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item flexacenter" @click="collectClick()"> <img v-if="item.is_collect" class="icon" :src="valueUrl + '/img/collect-golden.svg'" /> <img v-else class="icon" :src="valueUrl + '/img/collect-gray.png'" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" :src="valueUrl + '/img/discuss-icon.png'" /> <div class="text">{{ item.comments || "讨论" }}</div> </a> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" :src="valueUrl + '/img/bi-copper-icon.png'" /> <div class="text">{{ item.coins || "投币" }}</div> </a> <!-- 鼠标移入事件 --> <div class="bottom-item share flexacenter" @mouseenter="share"> <img class="icon" :src="valueUrl + '/img/share-gray.png'" style="width: 19px; height: 19px;" /> <div class="text">{{ item.shares || '转发'}}</div> <div class="share-box flexcenter" ref="shareBoxRef"> <div class="share-item flexcenter" @click="copyLinkClick()"> <img class="share-icon" :src="valueUrl + '/img/copy-black-icon.png'" /> <div class="text">复制链接</div> </div> <!-- 鼠标移入 加载二维码 --> <div class="share-item wenxin flexcenter" @mouseenter="showQRcode"> <img class="share-icon" :src="valueUrl + '/img/weixin-icon.png'" /> <div class="text">微信转发</div> <div class="QRcode-box flexcenter" :class="{'right': isright}"> <img v-if="QRcode" class="QRcode" :src="QRcode" /> <div v-else class="QRcode flexcenter"> <img class="load" :src="valueUrl + '/img/load-icon.svg'" /> </div> <div class="text">微信扫码</div> </div> </div> </div> </div></div><like v-if="isLikeGif"></like>`,
});

View File

@@ -10,45 +10,45 @@
</template>
<div class="bottom flexacenter">
<div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'">
<img v-if="item.is_like" class="icon" src="/img/like-red-icon.png" />
<img v-else class="icon" src="/img/like-icon.png" />
<img v-if="item.is_like" class="icon" :src="valueUrl + '/img/like-red-icon.png'" />
<img v-else class="icon" :src="valueUrl + '/img/like-icon.png'" />
<div class="text">{{ item.likes || "赞" }}</div>
</div>
<div class="bottom-item flexacenter" @click="collectClick()">
<img v-if="item.is_collect" class="icon" src="/img/collect-golden.svg" />
<img v-else class="icon" src="/img/collect-gray.png" />
<img v-if="item.is_collect" class="icon" :src="valueUrl + '/img/collect-golden.svg'" />
<img v-else class="icon" :src="valueUrl + '/img/collect-gray.png'" />
<div class="text">{{ item.collections || "收藏" }}</div>
</div>
<a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank">
<img class="icon" src="/img/discuss-icon.png" />
<img class="icon" :src="valueUrl + '/img/discuss-icon.png'" />
<div class="text">{{ item.comments || "讨论" }}</div>
</a>
<a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank">
<img class="icon" src="/img/bi-copper-icon.png" />
<img class="icon" :src="valueUrl + '/img/bi-copper-icon.png'" />
<div class="text">{{ item.coins || "投币" }}</div>
</a>
<!-- 鼠标移入事件 -->
<div class="bottom-item share flexacenter" @mouseenter="share">
<img class="icon" src="/img/share-gray.png" style="width: 19px; height: 19px;" />
<img class="icon" :src="valueUrl + '/img/share-gray.png'" style="width: 19px; height: 19px;" />
<div class="text">{{ item.shares || '转发'}}</div>
<div class="share-box flexcenter" ref="shareBoxRef">
<div class="share-item flexcenter" @click="copyLinkClick()">
<img class="share-icon" src="/img/copy-black-icon.png" />
<img class="share-icon" :src="valueUrl + '/img/copy-black-icon.png'" />
<div class="text">复制链接</div>
</div>
<!-- 鼠标移入 加载二维码 -->
<div class="share-item wenxin flexcenter" @mouseenter="showQRcode">
<img class="share-icon" src="/img/weixin-icon.png" />
<img class="share-icon" :src="valueUrl + '/img/weixin-icon.png'" />
<div class="text">微信转发</div>
<div class="QRcode-box flexcenter" :class="{'right': isright}">
<img v-if="QRcode" class="QRcode" :src="QRcode" />
<div v-else class="QRcode flexcenter">
<img class="load" src="/img/load-icon.svg" />
<img class="load" :src="valueUrl + '/img/load-icon.svg'" />
</div>
<div class="text">微信扫码</div>
</div>

View File

@@ -31,7 +31,11 @@ export const itemForum = defineComponent({
item.value["url"] = "/details/" + item.value.uniqid;
return { item };
let valueUrl = ref("");
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
return { valueUrl, item };
},
components: {
@@ -39,5 +43,5 @@ export const itemForum = defineComponent({
itemHead,
},
template: `<div class="item-box item-forum"> <item-head :itemdata="item" :page="page"></item-head> <a v-if="item.title" class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message two-line-display" :href="item.url" target="_blank">{{ item.content }}</a> <a class="picture flexacenter" :href="item.url" target="_blank" v-if="item.images?.length != 0 || item.videos?.length != 0"> <img class="picture-item" v-for="(item, index) in item.images" :key="index" :src="item.url" alt=""> <template v-for="(item, index) in item.videos" :key="index"> <div v-if="item.posterurl" class="picture-videos flexacenter"> <img class="picture-item" :src="item.posterurl" alt=""> <img class="icon-play" src="/img/videoplay.png" alt=""> </div> </template> </a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
template: `<div class="item-box item-forum"> <item-head :itemdata="item" :page="page"></item-head> <a v-if="item.title" class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message two-line-display" :href="item.url" target="_blank">{{ item.content }}</a> <a class="picture flexacenter" :href="item.url" target="_blank" v-if="item.images?.length != 0 || item.videos?.length != 0"> <img class="picture-item" v-for="(item, index) in item.images" :key="index" :src="item.url" alt=""> <template v-for="(item, index) in item.videos" :key="index"> <div v-if="item.posterurl" class="picture-videos flexacenter"> <img class="picture-item" :src="item.posterurl" alt=""> <img class="icon-play" :src="valueUrl + '/img/videoplay.png'" alt=""> </div> </template> </a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
});

View File

@@ -8,7 +8,7 @@
<template v-for="(item, index) in item.videos" :key="index">
<div v-if="item.posterurl" class="picture-videos flexacenter">
<img class="picture-item" :src="item.posterurl" alt="">
<img class="icon-play" src="/img/videoplay.png" alt="">
<img class="icon-play" :src="valueUrl + '/img/videoplay.png'" alt="">
</div>
</template>
</a>

View File

@@ -54,11 +54,15 @@ export const itemHead = defineComponent({
let permissions = ref([]);
let valueUrl = ref("");
onMounted(() => {
setTimeout(() => {
permissions.value = window["permissions"] || [];
ismanager.value = permissions.value.indexOf("topic:manager") >= 0;
}, 1000);
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
// 举报
@@ -158,12 +162,12 @@ export const itemHead = defineComponent({
});
};
return { itemHead, cutAnonymousState, cutAnonymous, anonymousState, openedit, edit, deleteItem, goPersonalHomepage, reportState, cutShow, show, item, timestamp, sectionn, tags, ismanager, report, hide, recommend, essence };
return { valueUrl, itemHead, cutAnonymousState, cutAnonymous, anonymousState, openedit, edit, deleteItem, goPersonalHomepage, reportState, cutShow, show, item, timestamp, sectionn, tags, ismanager, report, hide, recommend, essence };
},
components: {
report,
},
template: `<div class="item-head flexacenter" ref="itemHead"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uniqid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="item.user?.groupimage" :src="item.user?.groupimage" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="circlePen flexcenter" @click="openedit(item.type)" v-if="page == 'edit' && (item.type == 'offer' || item.type == 'offer_summary')"> <img class="icon" src="/img/pen-icon.png" /> </div> <div class="flexacenter" style="position: relative;"> <div class="anonymous-box flexcenter" @click.stop="cutAnonymous" v-if="page == 'edit' && (item.type == 'vote' || item.type == 'interviewexperience')"> <span v-if="item.anonymous == 0">公开</span> <span v-else>匿名</span> </div> <!-- 是否 公开发表 --> <template v-if="anonymousState"> <div class="mask" @click.stop="cutAnonymous"></div> <div class="isPublicityBox"> <div class="isPublicity-item" :class="{'green': item.anonymous == 0}" @click.stop="cutAnonymousState(0)">公开发表 <img v-if="item.anonymous == 0" class="isPublicityIcon" src="/img/u1829.svg"></image> </div> <div class="isPublicity-item" :class="{'green': item.anonymous != 0}" @click.stop="cutAnonymousState(1)">匿名发表 <img v-if="item.anonymous != 0" class="isPublicityIcon" src="/img/u1829.svg"></image> </div> </div> </template> </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 class="item" v-if="page == 'edit' && item.type == 'vote'" @click.stop="deleteItem">删除</div> </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" 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" ref="itemHead"> <div class="user-box flexacenter" @click="goPersonalHomepage(item?.user?.uniqid)"> <img class="avatar" :src="item?.user?.avatar || item.avatar" /> <div class="name">{{ item?.user?.nickname || item.nickname || "匿名用户" }}</div> <img class="group" v-if="item.user?.groupimage" :src="item.user?.groupimage" /> </div> <div class="time">{{ timestamp }}</div> <div class="flex1"></div> <div class="circlePen flexcenter" @click="openedit(item.type)" v-if="page == 'edit' && (item.type == 'offer' || item.type == 'offer_summary')"> <img class="icon" :src="valueUrl + '/img/pen-icon.png'" /> </div> <div class="flexacenter" style="position: relative;"> <div class="anonymous-box flexcenter" @click.stop="cutAnonymous" v-if="page == 'edit' && (item.type == 'vote' || item.type == 'interviewexperience')"> <span v-if="item.anonymous == 0">公开</span> <span v-else>匿名</span> </div> <!-- 是否 公开发表 --> <template v-if="anonymousState"> <div class="mask" @click.stop="cutAnonymous"></div> <div class="isPublicityBox"> <div class="isPublicity-item" :class="{'green': item.anonymous == 0}" @click.stop="cutAnonymousState(0)">公开发表 <img v-if="item.anonymous == 0" class="isPublicityIcon" :src="valueUrl + '/img/u1829.svg'"></image> </div> <div class="isPublicity-item" :class="{'green': item.anonymous != 0}" @click.stop="cutAnonymousState(1)">匿名发表 <img v-if="item.anonymous != 0" class="isPublicityIcon" :src="valueUrl + '/img/u1829.svg'"></image> </div> </div> </template> </div> <div class="view flexacenter"> <img class="icon" :src="valueUrl + '/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="valueUrl + '/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 class="item" v-if="page == 'edit' && item.type == 'vote'" @click.stop="deleteItem">删除</div> </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" :src="valueUrl + '/img/recommend-icon.png'" /> <img class="item icon" v-if="item.best == 1" :src="valueUrl + '/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

@@ -9,7 +9,7 @@
<div class="flex1"></div>
<div class="circlePen flexcenter" @click="openedit(item.type)" v-if="page == 'edit' && (item.type == 'offer' || item.type == 'offer_summary')">
<img class="icon" src="/img/pen-icon.png" />
<img class="icon" :src="valueUrl + '/img/pen-icon.png'" />
</div>
<div class="flexacenter" style="position: relative;">
@@ -23,10 +23,10 @@
<div class="mask" @click.stop="cutAnonymous"></div>
<div class="isPublicityBox">
<div class="isPublicity-item" :class="{'green': item.anonymous == 0}" @click.stop="cutAnonymousState(0)">公开发表
<img v-if="item.anonymous == 0" class="isPublicityIcon" src="/img/u1829.svg"></image>
<img v-if="item.anonymous == 0" class="isPublicityIcon" :src="valueUrl + '/img/u1829.svg'"></image>
</div>
<div class="isPublicity-item" :class="{'green': item.anonymous != 0}" @click.stop="cutAnonymousState(1)">匿名发表
<img v-if="item.anonymous != 0" class="isPublicityIcon" src="/img/u1829.svg"></image>
<img v-if="item.anonymous != 0" class="isPublicityIcon" :src="valueUrl + '/img/u1829.svg'"></image>
</div>
</div>
</template>
@@ -34,12 +34,12 @@
<div class="view flexacenter">
<img class="icon" src="/img/eye-icon.svg" />
<img class="icon" :src="valueUrl + '/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" />
<img class="icon" :src="valueUrl + '/img/dot-dot-dot-gray.png'" />
</div>
<div v-if="show">
@@ -62,8 +62,8 @@
</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" src="/img/recommend-icon.png" />
<img class="item icon" v-if="item.best == 1" src="/img/essence-icon.png" />
<img class="item icon" v-if="item.recommend == 1" :src="valueUrl + '/img/recommend-icon.png'" />
<img class="item icon" v-if="item.best == 1" :src="valueUrl + '/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>

View File

@@ -29,8 +29,13 @@ export const itemProject = defineComponent({
};
};
let valueUrl = ref("");
onMounted(() => {
checkWConfig();
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
let redtagArr = ref([]);
@@ -85,7 +90,7 @@ export const itemProject = defineComponent({
item.value["url"] = "https://program.gter.net/details/" + item.value.uniqid;
return { item };
return { valueUrl, item };
},
template: `<div class="item-box item-project"> <div class="tag flexflex"> <img class="tag-item icon" v-if="item.admissionsproject" src="https://app.gter.net/image/miniApp/offer/admissions-icon.png" /> <a class="tag-item blue" href="https://program.gter.net/" target="_blank">港校项目库</a> <div class="tag-item" :class="item.class" v-for="(tag, index) in item.tags" :key="index">{{ tag.name || tag }} </div> </div> <a class="school flexacenter" :href="item.url" target="_blank"> <img class="icon" v-if="item.schoollogo" :src="item.schoollogo" /> <span class="flex1">{{ item.schoolname }}</span> </a> <a class="name flexacenter" :href="item.url" target="_blank">{{ item.name_zh || item.program_zh }}</a> <a class="en flexacenter" :href="item.url" target="_blank">{{ item.name_en || item.program_en }}</a> <a class="introduce flexacenter" :href="item.url" target="_blank"> <span>{{ item.department }}</span> <div class="flexacenter" v-if="item.rank"> <div class="line" v-if="item.department">|</div> 专业排名 <div class="q">{{ item.rank }}</div> </div> <div class="flexacenter" v-if="item.tuition_fee"> <div class="line" v-if="item.department || item.rank">|</div> 学费HK$ <div class="q">{{ item.tuition_fee_text }}</div> </div> </a> <a class="word flexacenter one-line-display" v-if="item.distinctive" :href="item.url" target="_blank">{{ item.distinctive }}</a></div>`,
template: `<div class="item-box item-project"> <div class="tag flexflex"> <img class="tag-item icon" v-if="item.admissionsproject" :src="valueUrl + '/img/admissions-icon.png'" /> <a class="tag-item blue" href="https://program.gter.net/" target="_blank">港校项目库</a> <div class="tag-item" :class="item.class" v-for="(tag, index) in item.tags" :key="index">{{ tag.name || tag }} </div> </div> <a class="school flexacenter" :href="item.url" target="_blank"> <img class="icon" v-if="item.schoollogo" :src="item.schoollogo" /> <span class="flex1">{{ item.schoolname }}</span> </a> <a class="name flexacenter" :href="item.url" target="_blank">{{ item.name_zh || item.program_zh }}</a> <a class="en flexacenter" :href="item.url" target="_blank">{{ item.name_en || item.program_en }}</a> <a class="introduce flexacenter" :href="item.url" target="_blank"> <span>{{ item.department }}</span> <div class="flexacenter" v-if="item.rank"> <div class="line" v-if="item.department">|</div> 专业排名 <div class="q">{{ item.rank }}</div> </div> <div class="flexacenter" v-if="item.tuition_fee"> <div class="line" v-if="item.department || item.rank">|</div> 学费HK$ <div class="q">{{ item.tuition_fee_text }}</div> </div> </a> <a class="word flexacenter one-line-display" v-if="item.distinctive" :href="item.url" target="_blank">{{ item.distinctive }}</a></div>`,
});

View File

@@ -1,6 +1,6 @@
<div class="item-box item-project">
<div class="tag flexflex">
<img class="tag-item icon" v-if="item.admissionsproject" src="https://app.gter.net/image/miniApp/offer/admissions-icon.png" />
<img class="tag-item icon" v-if="item.admissionsproject" :src="valueUrl + '/img/admissions-icon.png'" />
<a class="tag-item blue" href="https://program.gter.net/" target="_blank">港校项目库</a>
<div class="tag-item" :class="item.class" v-for="(tag, index) in item.tags" :key="index">{{ tag.name || tag }}
</div>

View File

@@ -27,10 +27,14 @@ export const itemSummary = defineComponent({
// if (item.value?.data?.offerlist?.length > 2) {
// item.value.data.offerlist.length = 2;
// }
item.value['url'] = '/details/' + item.value.uniqid;
return { item };
item.value["url"] = "/details/" + item.value.uniqid;
let valueUrl = ref("");
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
return { valueUrl, item };
},
components: {
@@ -38,5 +42,5 @@ export const itemSummary = defineComponent({
itemHead,
},
template: `<div class="item-box item-summary"> <item-head :itemdata="item" :page="page"></item-head> <a class="title" v-if="item.title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message one-line-display" :href="item.url" target="_blank" v-if="item.content">{{ item.content }}</a> <a class="total flexacenter" :href="item.url" target="_blank"> <div>共</div> <div class="num">{{ item.data.offercount }}</div> <div>个Offer</div> </a> <a class="list flexacenter" :href="item.url" target="_blank"> <template v-for="(it,i) in item.data.offerlist" :key="i"> <div class="item flexflex" v-if="i < 2"> <div class="item-content flexflex"> <div class="school flexacenter"> <img class="icon" v-if="it.schoollogo" :src="it.schoollogo" mode="heightFix"></image> <div class="name one-line-display flex1">{{ it.schoolname }}</div> </div> <div class="major one-line-display" v-if="it.professional">{{ it.professional }}</div> <div class="info flexacenter"> {{ it.semester || '25Fall' }} <div class="line"></div> {{ it.degree || 'MSc' }} <div class="line"></div> <div class="results" :class="['r' + it.apply_results]">{{ it.apply_results_text || 'Offer' }}</div> </div> </div> </div> </template> <div v-if="item.data.offercount > 2" class="item more flexcenter"> <div class="item-content flexcenter"> <div class="">查看更多</div> <img class="icon" src="/img/arrows-circle-dark-blue.svg" mode="heightFix"></image> </div> </div> </a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
template: `<div class="item-box item-summary"> <item-head :itemdata="item" :page="page"></item-head> <a class="title" v-if="item.title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message one-line-display" :href="item.url" target="_blank" v-if="item.content">{{ item.content }}</a> <a class="total flexacenter" :href="item.url" target="_blank"> <div>共</div> <div class="num">{{ item.data.offercount }}</div> <div>个Offer</div> </a> <a class="list flexacenter" :href="item.url" target="_blank"> <template v-for="(it,i) in item.data.offerlist" :key="i"> <div class="item flexflex" v-if="i < 2"> <div class="item-content flexflex"> <div class="school flexacenter"> <img class="icon" v-if="it.schoollogo" :src="it.schoollogo" mode="heightFix"></image> <div class="name one-line-display flex1">{{ it.schoolname }}</div> </div> <div class="major one-line-display" v-if="it.professional">{{ it.professional }}</div> <div class="info flexacenter"> {{ it.semester || '25Fall' }} <div class="line"></div> {{ it.degree || 'MSc' }} <div class="line"></div> <div class="results" :class="['r' + it.apply_results]">{{ it.apply_results_text || 'Offer' }}</div> </div> </div> </div> </template> <div v-if="item.data.offercount > 2" class="item more flexcenter"> <div class="item-content flexcenter"> <div class="">查看更多</div> <img class="icon" :src="valueUrl + '/img/arrows-circle-dark-blue.svg'" mode="heightFix"></image> </div> </div> </a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
});

View File

@@ -30,7 +30,7 @@
<div v-if="item.data.offercount > 2" class="item more flexcenter">
<div class="item-content flexcenter">
<div class="">查看更多</div>
<img class="icon" src="/img/arrows-circle-dark-blue.svg" mode="heightFix"></image>
<img class="icon" :src="valueUrl + '/img/arrows-circle-dark-blue.svg'" mode="heightFix"></image>
</div>
</div>
</a>

View File

@@ -77,11 +77,12 @@ export const itemTenement = defineComponent({
}
if (item.value.images?.length > 4) item.value.images = item.value.images.slice(0, 4);
console.log("item.value", item.value);
let valueUrl = ref("");
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
return { sectionn, tags, item };
return { valueUrl, sectionn, tags, item };
},
components: {
@@ -89,5 +90,5 @@ export const itemTenement = defineComponent({
itemHead,
},
template: `<div class="item-box item-tenement"> <item-head :itemdata="item" :page="page"></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" :page="page"></item-bottom></div>`,
template: `<div class="item-box item-tenement"> <item-head :itemdata="item" :page="page"></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="valueUrl + '/img/intermediary-icon.png'" /> <img class="item icon" v-if="item.verified == 1" style="width: 94px; cursor: auto;" :src="valueUrl + '/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="valueUrl + '/img/orientation.png'"> {{ item }} </div> </template> <div v-else class="site-item flexacenter"> <img class="site-icon" :src="valueUrl + '/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" :page="page"></item-bottom></div>`,
});

View File

@@ -1,8 +1,8 @@
<div class="item-box item-tenement">
<item-head :itemdata="item" :page="page"></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" />
<img class="item icon" v-if="item.isintermediary == 1" style="width: 94px; cursor: auto;" :src="valueUrl + '/img/intermediary-icon.png'" />
<img class="item icon" v-if="item.verified == 1" style="width: 94px; cursor: auto;" :src="valueUrl + '/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>
@@ -12,12 +12,12 @@
<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">
<img class="site-icon" :src="valueUrl + '/img/orientation.png'">
{{ item }}
</div>
</template>
<div v-else class="site-item flexacenter">
<img class="site-icon" src="/img/orientation.png">
<img class="site-icon" :src="valueUrl + '/img/orientation.png'">
{{ item.location || '' }}
</div>
</a>

View File

@@ -69,7 +69,11 @@ export const itemVote = defineComponent({
const option = item.value.data.option || [];
item.value["isvote"] = option.some((item) => item.selected == 1);
return { item };
let valueUrl = ref("");
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
return { valueUrl, item };
},
components: {
@@ -77,5 +81,5 @@ export const itemVote = defineComponent({
itemHead,
},
template: `<div class="item-box item-vote"> <item-head :itemdata="item" :page="page"></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" :page="page"></item-bottom></div>`,
template: `<div class="item-box item-vote"> <item-head :itemdata="item" :page="page"></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="valueUrl + '/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" :page="page"></item-bottom></div>`,
});

View File

@@ -16,7 +16,7 @@
<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">
<img v-if="item.selected" class="list-tick" :src="valueUrl + '/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>

View File

@@ -21,6 +21,8 @@ export const latestList = defineComponent({
let postsTab = ref("newest"); // newest essence
let boxtype = ref(props.boxtype);
let valueUrl = ref("");
onMounted(() => {
if (props.boxtype == "newest") getTopicLatest();
else if (props.boxtype == "essence") topicHandpicked();
@@ -28,6 +30,9 @@ export const latestList = defineComponent({
getTopicLatest();
topicHandpicked();
}
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
let count = 0;
@@ -53,7 +58,7 @@ export const latestList = defineComponent({
const topicHandpicked = () => {
ajaxGet(`/v2/api/forum/getHomebestRecommend?limit=15&type=thread`).then((res) => {
const data = res.data;
console.log('data', data);
console.log("data", data);
topList.value = data;
nextTick(() => {
count += 1;
@@ -78,11 +83,10 @@ export const latestList = defineComponent({
postsTab.value = key;
};
return { boxtype, tabPostsItem, postsTab, topList, latestList, item };
return { valueUrl, boxtype, tabPostsItem, postsTab, topList, latestList, item };
},
components: {
},
components: {},
template: `<div class="posts-box box-newest " :class="['boxtype-' + boxtype]"> <div v-if="boxtype == 'newest'" class="box-newest-head flexacenter"> <img class="icon" src="/img/newest-icon.png" alt="" /> 最新 </div> <div v-else-if="boxtype == 'essence'" class="box-newest-head flexacenter"> <img class="icon" src="/img/essence.png" alt="" /> 精华阅读 </div> <div v-else class="slideshow-box"> <div class="tab-list flexacenter"> <div class="tab-item newest" :class="{'pitch': postsTab == 'newest'}" @click="tabPostsItem('newest')">最新 </div> <div class="tab-item essence" :class="{'pitch': postsTab == 'essence'}" @click="tabPostsItem('essence')">精华 </div> </div> </div> <div class="slideshow-content flexflex"> <!-- newest 最新 --> <div class="newest-side-box side-box"> <img class="bounding" src="/img/bounding-circle-green.svg" alt="" /> <div class="box"> <template v-for="(item, index) in latestList" :key="index"> <a v-if="item.title || item.content" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank"> <div class="dot dot-green"></div> <div class="text one-line-display">{{ item.title || item.content }}</div> </a> </template> </div> </div> <!-- essence 精选 --> <div class="essence-side-box side-box"> <img class="bounding" src="/img/bounding-circle-blue.svg" alt="" /> <div class="box"> <template v-for="(item, index) in topList" :key="index"> <a v-if="item.title || item.content" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank"> <div class="dot"></div> <div class="text one-line-display">{{ item.title || item.content }}</div> </a> </template> </div> </div> </div></div>`,
template: `<div class="posts-box box-newest " :class="['boxtype-' + boxtype]"> <div v-if="boxtype == 'newest'" class="box-newest-head flexacenter"> <img class="icon" :src="valueUrl + '/img/newest-icon.png'" alt="" /> 最新 </div> <div v-else-if="boxtype == 'essence'" class="box-newest-head flexacenter"> <img class="icon" :src="valueUrl + '/img/essence.png'" alt="" /> 精华阅读 </div> <div v-else class="slideshow-box"> <div class="tab-list flexacenter"> <div class="tab-item newest" :class="{'pitch': postsTab == 'newest'}" @click="tabPostsItem('newest')">最新 </div> <div class="tab-item essence" :class="{'pitch': postsTab == 'essence'}" @click="tabPostsItem('essence')">精华 </div> </div> </div> <div class="slideshow-content flexflex"> <!-- newest 最新 --> <div class="newest-side-box side-box"> <img class="bounding" :src="valueUrl + '/img/bounding-circle-green.svg'" alt="" /> <div class="box"> <template v-for="(item, index) in latestList" :key="index"> <a v-if="item.title || item.content" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank"> <div class="dot dot-green"></div> <div class="text one-line-display">{{ item.title || item.content }}</div> </a> </template> </div> </div> <!-- essence 精选 --> <div class="essence-side-box side-box"> <img class="bounding" :src="valueUrl + '/img/bounding-circle-blue.svg'" alt="" /> <div class="box"> <template v-for="(item, index) in topList" :key="index"> <a v-if="item.title || item.content" class="item flexacenter vuehide" :href="'/details/' + item.uniqid" target="_blank"> <div class="dot"></div> <div class="text one-line-display">{{ item.title || item.content }}</div> </a> </template> </div> </div> </div></div>`,
});

View File

@@ -1,10 +1,10 @@
<div class="posts-box box-newest " :class="['boxtype-' + boxtype]">
<div v-if="boxtype == 'newest'" class="box-newest-head flexacenter">
<img class="icon" src="/img/newest-icon.png" alt="" />
<img class="icon" :src="valueUrl + '/img/newest-icon.png'" alt="" />
最新
</div>
<div v-else-if="boxtype == 'essence'" class="box-newest-head flexacenter">
<img class="icon" src="/img/essence.png" alt="" />
<img class="icon" :src="valueUrl + '/img/essence.png'" alt="" />
精华阅读
</div>
<div v-else class="slideshow-box">
@@ -18,7 +18,7 @@
<div class="slideshow-content flexflex">
<!-- newest 最新 -->
<div class="newest-side-box side-box">
<img class="bounding" src="/img/bounding-circle-green.svg" alt="" />
<img class="bounding" :src="valueUrl + '/img/bounding-circle-green.svg'" alt="" />
<div class="box">
<template v-for="(item, index) in latestList" :key="index">
<a v-if="item.title || item.content" class="item flexacenter vuehide"
@@ -32,7 +32,7 @@
<!-- essence 精选 -->
<div class="essence-side-box side-box">
<img class="bounding" src="/img/bounding-circle-blue.svg" alt="" />
<img class="bounding" :src="valueUrl + '/img/bounding-circle-blue.svg'" alt="" />
<div class="box">
<template v-for="(item, index) in topList" :key="index">
<a v-if="item.title || item.content" class="item flexacenter vuehide"

View File

@@ -12,8 +12,15 @@ export const loadBox = defineComponent({
},
},
setup(props) {
return { };
let valueUrl = ref("");
onMounted(() => {
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
return { valueUrl };
},
template: `<div class="list-load-box flexcenter" :class="{'show': loading}"><img class="list-load-icon" src="/img/load-icon.svg" /><div class="list-load-text">加载中</div></div>`,
template: `<div class="list-load-box flexcenter" :class="{'show': loading}"><img class="list-load-icon" :src="valueUrl + '/img/load-icon.svg'" /><div class="list-load-text">加载中</div></div>`,
});

View File

@@ -145,7 +145,7 @@ class SignInBox extends HTMLElement {
(t, i) => `
<div class="rule-item flexacenter">
<div class="rule-item-icon flexcenter">
<img class="rule-item-img" src="${i == 0 ? "https://app.gter.net/image/miniApp/offer/bi.png" : "https://app.gter.net/image/miniApp/offer/hardworking-icon.png"}">
<img class="rule-item-img" src="${i == 0 ? "https://app.gter.net/image/gter/commonCom/sign-in/img/bi.png" : "https://app.gter.net/image/gter/commonCom/sign-in/img/hardworking-icon.png"}">
</div>
<div class="rule-item-text flex1">${t}</div>
</div>`
@@ -155,6 +155,10 @@ class SignInBox extends HTMLElement {
this.isInit = true;
this.getList();
const scrollWidth = window.innerWidth - document.documentElement.clientWidth;
document.body.style.overflow = "hidden";
document.body.style.paddingRight = `${scrollWidth}px`;
});
}
@@ -205,7 +209,7 @@ class SignInBox extends HTMLElement {
const row = Math.floor(index / 7);
const showMobile = visibleRows.has(row) ? "show-mobile" : "";
items.push(`<div class="calendar-item flexcenter ${cls} row-${row} ${showMobile}">${name}<img class="yellow-tick" src="https://app.gter.net/image/miniApp/offer/yellow-tick.svg"></div>`);
items.push(`<div class="calendar-item flexcenter ${cls} row-${row} ${showMobile}">${name}<img class="yellow-tick" src="https://app.gter.net/image/gter/commonCom/sign-in/img/yellow-tick.svg"></div>`);
}
box.innerHTML = items.join("");
}
@@ -278,7 +282,7 @@ class SignInBox extends HTMLElement {
const todayItem = this.shadowRoot.querySelector(".calendar-item.today");
todayItem.classList.remove("today");
todayItem.classList.add("already");
todayItem.innerHTML = `+${rewardT}<img class="yellow-tick" src="https://app.gter.net/image/miniApp/offer/yellow-tick.svg">`;
todayItem.innerHTML = `+${rewardT}<img class="yellow-tick" src="https://app.gter.net/image/gter/commonCom/sign-in/img/yellow-tick.svg">`;
this.issign = 1;
@@ -342,6 +346,9 @@ class SignInBox extends HTMLElement {
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
resolve(xhr.response);
} else if (xhr.status === 401) {
if (typeof ajax_login === "function") ajax_login();
else window.open("https://passport.gter.net/?referer=" + escape(location.href), "_self");
}
};
xhr.send(JSON.stringify(data));
@@ -374,11 +381,12 @@ class SignInBox extends HTMLElement {
}
open() {
const scrollWidth = window.innerWidth - document.documentElement.clientWidth;
document.body.style.overflow = "hidden";
document.body.style.paddingRight = `${scrollWidth}px`;
if (this.isInit) this.shadowRoot.querySelector(".signInBox-mask").style.display = "flex";
else {
if (this.isInit) {
this.shadowRoot.querySelector(".signInBox-mask").style.display = "flex";
const scrollWidth = window.innerWidth - document.documentElement.clientWidth;
document.body.style.overflow = "hidden";
document.body.style.paddingRight = `${scrollWidth}px`;
} else {
this.init();
}
}

View File

@@ -15,7 +15,14 @@ export const slideshowBox = defineComponent({
setup(props) {
let item = ref({ ...props.itemdata });
onMounted(() => getTopicLatest());
let valueUrl = ref("");
onMounted(() => {
getTopicLatest();
const valueA = document.querySelector(".valueA");
valueUrl.value = valueA.innerText;
});
let tabPitch = ref(""); // thread offer vote interviewexperience
@@ -84,8 +91,8 @@ export const slideshowBox = defineComponent({
}
};
return { handleCheckAttest, tabItem, tabPitch, tabPitch, latestList };
return { valueUrl, handleCheckAttest, tabItem, tabPitch, tabPitch, latestList };
},
template: `<div class="box-box" :class="['box-' + tabPitch]"> <div class="slideshow-box"> <div class="tab-list flexacenter"> <!-- <div class="tab-item thread" :class="{'pitch': tabPitch == 'thread'}" @click="tabItem('thread')">帖子</div> --> <div class="tab-item offer" :class="{'pitch': tabPitch == 'offer'}" @click="tabItem('offer')">Offer</div> <div class="tab-item vote" :class="{'pitch': tabPitch == 'vote'}" @click="tabItem('vote')">投票</div> <div class="tab-item interviewexperience" :class="{'pitch': tabPitch == 'interviewexperience'}" @click="tabItem('interviewexperience')">面经</div> </div> </div> <div class="slideshow-content flexflex"> <!-- 问答 --> <!-- <div class="thread-side-box side-box"> <div class="box"> <a v-for="item in latestList.thread" :key="item.uniqid" class="item" target="_blank" :href="'/details/' + item.uniqid"> <div class="question flexacenter"> <div class="text flex1 ellipsis">{{ item.title }}</div> </div> <div class="answer flexacenter"> <div class="text flex1"> <div class="texttext">{{ item.content }}</div> </div> </div> </a> <a class="add-btn flexcenter" href="https://ask.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg"> </a> </div> </div> --> <!-- offer --> <div class="offer-side-box side-box"> <div class="box"> <a v-for="item in latestList.offer" :key="item.uniqid" class="item flexflex" :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" href="https://offer.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg"> </a> </div> </div> <!-- 投票 --> <div class="vote-side-box side-box"> <div class="box"> <a v-for="item in latestList.vote" :key="item.uniqid" class="item flexflex vuehide" target="_blank" :href="'/details/' + item.uniqid"> <div class="name one-line-display">{{ item.title }}</div> <div class="brief">{{ item.content }}</div> </a> <a class="add-btn flexcenter" href="https://vote.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg"> </a> </div> </div> <!-- mj --> <div class="interviewexperience-side-box side-box"> <div class="box"> <a v-for="item in latestList.interviewexperience" :key="item.thread_id" class="item flexflex" :href="'/details/' + item.uniqid" target="_blank"> <div class="school one-line-display">{{ item.data.schoolname }}</div> <div class="major one-line-display">{{ item.data.project }}</div> <div class="info"> <img class="icon" :src="item.user.avatar" /> <span class="text">{{ item.title || item.content }} </span> </div> </a> <a class="add-btn flexcenter" href="https://interviewexperience.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg"> </a> </div> </div> </div></div>`,
template: `<div class="box-box" :class="['box-' + tabPitch]"> <div class="slideshow-box"> <div class="tab-list flexacenter"> <!-- <div class="tab-item thread" :class="{'pitch': tabPitch == 'thread'}" @click="tabItem('thread')">帖子</div> --> <div class="tab-item offer" :class="{'pitch': tabPitch == 'offer'}" @click="tabItem('offer')">Offer</div> <div class="tab-item vote" :class="{'pitch': tabPitch == 'vote'}" @click="tabItem('vote')">投票</div> <div class="tab-item interviewexperience" :class="{'pitch': tabPitch == 'interviewexperience'}" @click="tabItem('interviewexperience')">面经</div> </div> </div> <div class="slideshow-content flexflex"> <!-- 问答 --> <!-- <div class="thread-side-box side-box"> <div class="box"> <a v-for="item in latestList.thread" :key="item.uniqid" class="item" target="_blank" :href="'/details/' + item.uniqid"> <div class="question flexacenter"> <div class="text flex1 ellipsis">{{ item.title }}</div> </div> <div class="answer flexacenter"> <div class="text flex1"> <div class="texttext">{{ item.content }}</div> </div> </div> </a> <a class="add-btn flexcenter" href="https://ask.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg"> </a> </div> </div> --> <!-- offer --> <div class="offer-side-box side-box"> <div class="box"> <a v-for="item in latestList.offer" :key="item.uniqid" class="item flexflex" :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" href="https://offer.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'"> </a> </div> </div> <!-- 投票 --> <div class="vote-side-box side-box"> <div class="box"> <a v-for="item in latestList.vote" :key="item.uniqid" class="item flexflex vuehide" target="_blank" :href="'/details/' + item.uniqid"> <div class="name one-line-display">{{ item.title }}</div> <div class="brief">{{ item.content }}</div> </a> <a class="add-btn flexcenter" href="https://vote.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'"> </a> </div> </div> <!-- mj --> <div class="interviewexperience-side-box side-box"> <div class="box"> <a v-for="item in latestList.interviewexperience" :key="item.thread_id" class="item flexflex" :href="'/details/' + item.uniqid" target="_blank"> <div class="school one-line-display">{{ item.data.schoolname }}</div> <div class="major one-line-display">{{ item.data.project }}</div> <div class="info"> <img class="icon" :src="item.user.avatar" /> <span class="text">{{ item.title || item.content }} </span> </div> </a> <a class="add-btn flexcenter" href="https://interviewexperience.gter.net" target="_blank"> <div>more</div> <img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'"> </a> </div> </div> </div></div>`,
});

View File

@@ -48,7 +48,7 @@
<a class="add-btn flexcenter" href="https://offer.gter.net" target="_blank">
<div>more</div>
<img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg">
<img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'">
</a>
</div>
</div>
@@ -63,7 +63,7 @@
<a class="add-btn flexcenter" href="https://vote.gter.net" target="_blank">
<div>more</div>
<img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg">
<img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'">
</a>
</div>
</div>
@@ -82,7 +82,7 @@
<a class="add-btn flexcenter" href="https://interviewexperience.gter.net" target="_blank">
<div>more</div>
<img class="" style="margin-left: 8px;" src="/img/right-arrow-black.svg">
<img class="" style="margin-left: 8px;" :src="valueUrl + '/img/right-arrow-black.svg'">
</a>
</div>
</div>

BIN
img/admissions-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
img/handpick-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

6
img/well-white.svg Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="17px" height="14px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 2809 -853 )">
<path d="M 6.93576388888889 8.16666666666667 L 9.43460648148148 8.16666666666667 L 10.0642361111111 5.83333333333333 L 7.56539351851852 5.83333333333333 L 6.93576388888889 8.16666666666667 Z M 16.9311342592593 3.31770833333333 C 16.990162037037 3.390625 17.009837962963 3.47569444444444 16.990162037037 3.57291666666667 L 16.4392361111111 5.61458333333333 C 16.393325617284 5.76041666666667 16.2916666666667 5.83333333333333 16.1342592592593 5.83333333333333 L 12.9172453703704 5.83333333333333 L 12.2876157407407 8.16666666666667 L 15.3472222222222 8.16666666666667 C 15.4456018518519 8.16666666666667 15.5275848765432 8.203125 15.5931712962963 8.27604166666667 C 15.6587577160494 8.36111111111111 15.6784336419753 8.44618055555556 15.6521990740741 8.53125 L 15.1012731481481 10.5729166666667 C 15.0684799382716 10.71875 14.9668209876543 10.7916666666667 14.7962962962963 10.7916666666667 L 11.5792824074074 10.7916666666667 L 10.7824074074074 13.78125 C 10.7364969135802 13.9270833333333 10.634837962963 14 10.4774305555556 14 L 8.27372685185185 14 C 8.16878858024691 14 8.0835262345679 13.9635416666667 8.01793981481481 13.890625 C 7.95891203703704 13.8177083333333 7.93923611111111 13.7326388888889 7.95891203703704 13.6354166666667 L 8.72627314814815 10.7916666666667 L 6.22743055555556 10.7916666666667 L 5.43055555555556 13.78125 C 5.3846450617284 13.9270833333333 5.28298611111111 14 5.1255787037037 14 L 2.91203703703704 14 C 2.81365740740741 14 2.73167438271605 13.9635416666667 2.66608796296296 13.890625 C 2.60706018518519 13.8177083333333 2.58738425925926 13.7326388888889 2.60706018518519 13.6354166666667 L 3.3744212962963 10.7916666666667 L 0.314814814814815 10.7916666666667 C 0.216435185185185 10.7916666666667 0.134452160493827 10.7552083333333 0.0688657407407407 10.6822916666667 C 0.00983796296296296 10.609375 -0.00983796296296293 10.5243055555556 0.00983796296296296 10.4270833333333 L 0.560763888888889 8.38541666666667 C 0.606674382716049 8.23958333333333 0.708333333333333 8.16666666666667 0.865740740740741 8.16666666666667 L 4.08275462962963 8.16666666666667 L 4.71238425925926 5.83333333333333 L 1.65277777777778 5.83333333333333 C 1.55439814814815 5.83333333333333 1.47241512345679 5.796875 1.4068287037037 5.72395833333333 C 1.34124228395062 5.63888888888889 1.32156635802469 5.55381944444444 1.34780092592593 5.46875 L 1.89872685185185 3.42708333333333 C 1.9315200617284 3.28125 2.03317901234568 3.20833333333333 2.2037037037037 3.20833333333333 L 5.42071759259259 3.20833333333333 L 6.21759259259259 0.21875 C 6.26350308641975 0.0729166666666672 6.36844135802469 0 6.53240740740741 0 L 8.73611111111111 0 C 8.83449074074074 0 8.9164737654321 0.0364583333333328 8.98206018518519 0.109375 C 9.04108796296296 0.182291666666667 9.06076388888889 0.267361111111111 9.04108796296296 0.364583333333333 L 8.27372685185185 3.20833333333333 L 10.7725694444444 3.20833333333333 L 11.5694444444444 0.21875 C 11.6153549382716 0.0729166666666672 11.7202932098765 0 11.8842592592593 0 L 14.087962962963 0 C 14.1863425925926 0 14.268325617284 0.0364583333333328 14.333912037037 0.109375 C 14.3929398148148 0.182291666666667 14.4126157407407 0.267361111111111 14.3929398148148 0.364583333333333 L 13.6255787037037 3.20833333333333 L 16.6851851851852 3.20833333333333 C 16.7835648148148 3.20833333333333 16.8655478395062 3.24479166666667 16.9311342592593 3.31770833333333 Z " fill-rule="nonzero" fill="#ffffff" stroke="none" transform="matrix(1 0 0 1 -2809 853 )" />
</g>
</svg>

6
img/well-yellow.svg Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="15px" height="12px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -90 -966 )">
<path d="M 6.11979166666667 7 L 8.32465277777778 7 L 8.88020833333333 5 L 6.67534722222222 5 L 6.11979166666667 7 Z M 14.9392361111111 2.84375 C 14.9913194444444 2.90625 15.0086805555556 2.97916666666667 14.9913194444444 3.0625 L 14.5052083333333 4.8125 C 14.4646990740741 4.9375 14.375 5 14.2361111111111 5 L 11.3975694444444 5 L 10.8420138888889 7 L 13.5416666666667 7 C 13.6284722222222 7 13.7008101851852 7.03125 13.7586805555556 7.09375 C 13.8165509259259 7.16666666666667 13.833912037037 7.23958333333333 13.8107638888889 7.3125 L 13.3246527777778 9.0625 C 13.2957175925926 9.1875 13.2060185185185 9.25 13.0555555555556 9.25 L 10.2170138888889 9.25 L 9.51388888888889 11.8125 C 9.47337962962963 11.9375 9.38368055555556 12 9.24479166666667 12 L 7.30034722222222 12 C 7.20775462962963 12 7.13252314814815 11.96875 7.07465277777778 11.90625 C 7.02256944444444 11.84375 7.00520833333333 11.7708333333333 7.02256944444444 11.6875 L 7.69965277777778 9.25 L 5.49479166666667 9.25 L 4.79166666666667 11.8125 C 4.75115740740741 11.9375 4.66145833333333 12 4.52256944444444 12 L 2.56944444444444 12 C 2.48263888888889 12 2.41030092592593 11.96875 2.35243055555556 11.90625 C 2.30034722222222 11.84375 2.28298611111111 11.7708333333333 2.30034722222222 11.6875 L 2.97743055555556 9.25 L 0.277777777777778 9.25 C 0.190972222222222 9.25 0.118634259259259 9.21875 0.0607638888888889 9.15625 C 0.00868055555555556 9.09375 -0.00868055555555552 9.02083333333333 0.00868055555555556 8.9375 L 0.494791666666667 7.1875 C 0.535300925925926 7.0625 0.625 7 0.763888888888889 7 L 3.60243055555556 7 L 4.15798611111111 5 L 1.45833333333333 5 C 1.37152777777778 5 1.29918981481481 4.96875 1.24131944444444 4.90625 C 1.18344907407407 4.83333333333333 1.16608796296296 4.76041666666667 1.18923611111111 4.6875 L 1.67534722222222 2.9375 C 1.70428240740741 2.8125 1.79398148148148 2.75 1.94444444444444 2.75 L 4.78298611111111 2.75 L 5.48611111111111 0.1875 C 5.52662037037037 0.0625000000000004 5.61921296296296 0 5.76388888888889 0 L 7.70833333333333 0 C 7.79513888888889 0 7.86747685185185 0.0312499999999996 7.92534722222222 0.09375 C 7.97743055555556 0.15625 7.99479166666667 0.229166666666667 7.97743055555556 0.3125 L 7.30034722222222 2.75 L 9.50520833333333 2.75 L 10.2083333333333 0.1875 C 10.2488425925926 0.0625000000000004 10.3414351851852 0 10.4861111111111 0 L 12.4305555555556 0 C 12.5173611111111 0 12.5896990740741 0.0312499999999996 12.6475694444444 0.09375 C 12.6996527777778 0.15625 12.7170138888889 0.229166666666667 12.6996527777778 0.3125 L 12.0225694444444 2.75 L 14.7222222222222 2.75 C 14.8090277777778 2.75 14.8813657407407 2.78125 14.9392361111111 2.84375 Z " fill-rule="nonzero" fill="#f4ae38" stroke="none" transform="matrix(1 0 0 1 90 966 )" />
</g>
</svg>