refactor(component): 重构组件模板与样式结构

将公共样式提取至public.css,优化组件模板结构
添加图片资源与组件模板同步脚本
调整组件样式与布局,统一风格
This commit is contained in:
DESKTOP-RQ919RC\Pc
2025-10-22 18:31:16 +08:00
parent 5b4040ec05
commit 6bb48ff86d
31 changed files with 3067 additions and 613 deletions

View File

@@ -0,0 +1,24 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent, ref } = Vue;
// 定义组件(直接使用模板)
export const itemBottom = defineComponent({
name: "item-bottom",
props: {
title: {
type: String,
default: "默认标题",
},
itemdata: {
type: Object,
default: () => {},
},
},
setup(props) {
let item = ref({ ...props.itemdata });
return { item };
},
template: `<div class="comment flexacenter" v-if="!Array.isArray(item?.commentreviews)"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content }}</div></div><div class="bottom flexacenter"> <div class="bottom-item like flexacenter"> <img class="icon" src="./img/like-icon.png" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item like flexacenter"> <img class="icon" src="./img/collect-golden.svg" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <div class="bottom-item like flexacenter"> <img class="icon" src="./img/discuss-icon.png" /> <div class="text">{{ item.comments || "讨论" }}</div> </div> <div class="bottom-item like flexacenter"> <img class="icon" src="./img/bi-copper-icon.png" /> <div class="text">{{ item.coins || "投币" }}</div> </div> <div class="bottom-item like flexacenter"> <img class="icon" src="./img/share-gray.png" /> <div class="text">转发</div> </div></div>`,
});

View File

@@ -0,0 +1,28 @@
<div class="comment flexacenter" v-if="!Array.isArray(item?.commentreviews)">
<img class="icon" :src="item?.commentreviews?.avatar" />
<div class="text one-line-display">{{ item?.commentreviews?.content }}</div>
</div>
<div class="bottom flexacenter">
<div class="bottom-item like flexacenter">
<img class="icon" src="./img/like-icon.png" />
<div class="text">{{ item.likes || "赞" }}</div>
</div>
<div class="bottom-item like flexacenter">
<img class="icon" src="./img/collect-golden.svg" />
<div class="text">{{ item.collections || "收藏" }}</div>
</div>
<div class="bottom-item like flexacenter">
<img class="icon" src="./img/discuss-icon.png" />
<div class="text">{{ item.comments || "讨论" }}</div>
</div>
<div class="bottom-item like flexacenter">
<img class="icon" src="./img/bi-copper-icon.png" />
<div class="text">{{ item.coins || "投币" }}</div>
</div>
<div class="bottom-item like flexacenter">
<img class="icon" src="./img/share-gray.png" />
<div class="text">转发</div>
</div>
</div>

View File

@@ -1,11 +1,12 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent } = Vue;
console.log("11223131321321");
import { itemBottom } from "../item-bottom/item-bottom.js";
import { itemHead } from "../item-head/item-head.js";
// 定义组件(直接使用模板)
export const MyComponent = defineComponent({
name: "MyComponent",
export const itemForum = defineComponent({
name: "item-forum",
props: {
title: {
type: String,
@@ -18,10 +19,11 @@ export const MyComponent = defineComponent({
alert("组件按钮被点击");
},
},
// 直接使用template选项包含标题、文本内容和按钮
template: `<div style="padding: 10px; border: 1px solid #ccc;">
<h3>{{ title }}</h3>
<p>这是从text文件加载的模板内容</p>
<button @click="handleClick">点击我</button>
</div>`,
components: {
itemBottom,
itemHead,
},
template: `<div class="item-box item-forum"> <item-head></item-head> <div class="label flexflex"> <img class="item icon" src="./img/recommend-icon.png" /> <img class="item icon" src="./img/essence-icon.png" /> <div class="item blue">香港</div> <div class="item">香港</div> </div> <div class="title">【干货】香港留学费用准备</div> <div class="message">在即将赴港的时候很多同学好奇香港一年制硕士下来的整体费用大概是多少其实主要包括学费租房费和生活费三部分。学费的话根据不同香港来定大概在10-30万港币之间比较固定…</div> <item-bottom></item-bottom></div>`,
});

View File

@@ -1,5 +0,0 @@
<div style="padding: 10px; border: 1px solid #ccc;">
<h3>{{ title }}</h3>
<p>这是从text文件加载的模板内容</p>
<button @click="handleClick">点击我</button>
</div>

View File

@@ -0,0 +1,15 @@
<div class="item-box item-forum">
<item-head></item-head>
<div class="label flexflex">
<img class="item icon" src="./img/recommend-icon.png" />
<img class="item icon" src="./img/essence-icon.png" />
<div class="item blue">香港</div>
<div class="item">香港</div>
</div>
<div class="title">【干货】香港留学费用准备</div>
<div class="message">在即将赴港的时候很多同学好奇香港一年制硕士下来的整体费用大概是多少其实主要包括学费租房费和生活费三部分。学费的话根据不同香港来定大概在10-30万港币之间比较固定…</div>
<item-bottom></item-bottom>
</div>

View File

@@ -0,0 +1,22 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent } = Vue;
// 定义组件(直接使用模板)
export const itemHead = defineComponent({
name: "item-head",
props: {
title: {
type: String,
default: "默认标题",
},
},
// 方法
methods: {
handleClick() {
alert("组件按钮被点击");
},
},
template: `<div class="item-head flexacenter"> <img class="avatar" src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC1UltTF6WOikN42jDKLNjtax7Hc44zLpaKSdU9oWFhY2E~/small" /> <div class="name">小P学姐</div> <img class="group" src="https://o.x-php.com/Zvt57TuJSUvkyhw-xG7Y2l-c_ZMtdXfqqsgFptxhcq_cQnrlcPJ0DVESBq_D-81qNDQyOQ~~" /> <div class="time">2025-8-11 01:30</div> <div class="flex1"></div> <div class="view flexacenter"> <img class="icon" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg" /> <div class="text">3016</div> </div> <div class="btn flexcenter" @click="cutShow"> <img class="icon" src="https://app.gter.net/image/miniApp/offer/dot-dot-dot-gray.png" /> </div> <!-- <template v-if="show"> <div class="mask" catch:tap="cutShow" catch:touchmove="touchmove"></div> <div class="operate" catch:tap="true"> <div class="item" bind:tap="report">举报</div> <template v-if="ismanager"> <div class="item" bind:tap="hide">{{ item.hidden == 0 ? '隐藏' : '显示' }}</div> <div class="item" bind:tap="recommend">{{ item.recommend == 1 ? '取消' : '' }}推荐</div> <div class="item" bind:tap="essence">{{ item.best == 1 ? '取消' : '' }}精华</div> </template> </div> </template> --></div> `,
});

View File

@@ -0,0 +1,28 @@
<div class="item-head flexacenter">
<img class="avatar" src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC1UltTF6WOikN42jDKLNjtax7Hc44zLpaKSdU9oWFhY2E~/small" />
<div class="name">小P学姐</div>
<img class="group" src="https://o.x-php.com/Zvt57TuJSUvkyhw-xG7Y2l-c_ZMtdXfqqsgFptxhcq_cQnrlcPJ0DVESBq_D-81qNDQyOQ~~" />
<div class="time">2025-8-11 01:30</div>
<div class="flex1"></div>
<div class="view flexacenter">
<img class="icon" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg" />
<div class="text">3016</div>
</div>
<div class="btn flexcenter" @click="cutShow">
<img class="icon" src="https://app.gter.net/image/miniApp/offer/dot-dot-dot-gray.png" />
</div>
<!-- <template v-if="show">
<div class="mask" catch:tap="cutShow" catch:touchmove="touchmove"></div>
<div class="operate" catch:tap="true">
<div class="item" bind:tap="report">举报</div>
<template v-if="ismanager">
<div class="item" bind:tap="hide">{{ item.hidden == 0 ? '隐藏' : '显示' }}</div>
<div class="item" bind:tap="recommend">{{ item.recommend == 1 ? '取消' : '' }}推荐</div>
<div class="item" bind:tap="essence">{{ item.best == 1 ? '取消' : '' }}精华</div>
</template>
</div>
</template> -->
</div>

View File

@@ -0,0 +1,33 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent } = Vue;
import { itemBottom } from "../item-bottom/item-bottom.js";
import { itemHead } from "../item-head/item-head.js";
// 定义组件(直接使用模板)
export const itemOffer = defineComponent({
name: "item-offer",
props: {
title: {
type: String,
default: "默认标题",
},
item: {
type: Object,
default: () => {},
},
},
// 方法
methods: {
handleClick() {
alert("组件按钮被点击");
},
},
components: {
itemBottom,
itemHead,
},
template: `<div class="item-box item-offer"> <item-head></item-head> <div class="school flexacenter"> <img class="icon" :src="item.data.schoollogo" mode="heightFix"></image> <div class="text flex1 one-line-display">{{ item.data.schoolname }}</div> </div> <div class="major flexacenter" v-if="item.data.professional"> <div class="key">{{ item.data.project ? '专业' : '项目/专业' }}</div> <div class="value flex1 one-line-display">{{ item.data.professional }}</div> </div> <div class="major flexacenter" v-if="item.data.project"> <div class="key">项目</div> <div class="value flex1 one-line-display">{{ item.data.project }}</div> </div> <div class="info flexacenter"> {{ item.data.semester }} <div class="line"></div> {{ item.data.degree }} <div class="line"></div> <div class="results" :class="['r' + item.data.apply_results]">{{ item.data.apply_results_text }}</div> </div> <div class="message" v-if="item.content">{{ item.content }}</div> <item-bottom></item-bottom></div>`,
});

View File

@@ -0,0 +1,28 @@
<div class="item-box item-offer">
<item-head></item-head>
<div class="school flexacenter">
<img class="icon" :src="item.data.schoollogo" mode="heightFix"></image>
<div class="text flex1 one-line-display">{{ item.data.schoolname }}</div>
</div>
<div class="major flexacenter" v-if="item.data.professional">
<div class="key">{{ item.data.project ? '专业' : '项目/专业' }}</div>
<div class="value flex1 one-line-display">{{ item.data.professional }}</div>
</div>
<div class="major flexacenter" v-if="item.data.project">
<div class="key">项目</div>
<div class="value flex1 one-line-display">{{ item.data.project }}</div>
</div>
<div class="info flexacenter">
{{ item.data.semester }}
<div class="line"></div>
{{ item.data.degree }}
<div class="line"></div>
<div class="results" :class="['r' + item.data.apply_results]">{{ item.data.apply_results_text }}</div>
</div>
<div class="message" v-if="item.content">{{ item.content }}</div>
<item-bottom></item-bottom>
</div>

View File

@@ -0,0 +1,33 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent } = Vue;
import { itemBottom } from "../item-bottom/item-bottom.js";
import { itemHead } from "../item-head/item-head.js";
// 定义组件(直接使用模板)
export const itemSummary = defineComponent({
name: "item-summary",
props: {
title: {
type: String,
default: "默认标题",
},
item: {
type: Object,
default: () => {},
},
},
// 方法
methods: {
handleClick() {
alert("组件按钮被点击");
},
},
components: {
itemBottom,
itemHead,
},
template: `<div class="item-box item-summary"> <item-head></item-head> <div class="title" v-if="item.title">{{ item.title }}</div> <div class="message one-line-display" v-if="item.content">{{ item.content }}</div> <div class="total flexacenter"> <div>共</div> <div class="num">{{ item.data.offercount }}</div> <div>个Offer</div> </div> <div class="list flexacenter" scroll-x> <div class="item flexflex" v-for="(it,i) in item.data.offerlist" :key="i"> <div class="item-content flexflex"> <div class="school flexacenter"> <img class="icon" :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> <div v-if="item.data.offercount > 3" 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> </div> <item-bottom></item-bottom></div>`,
});

View File

@@ -0,0 +1,36 @@
<div class="item-box item-summary">
<item-head></item-head>
<div class="title" v-if="item.title">{{ item.title }}</div>
<div class="message one-line-display" v-if="item.content">{{ item.content }}</div>
<div class="total flexacenter">
<div>共</div>
<div class="num">{{ item.data.offercount }}</div>
<div>个Offer</div>
</div>
<div class="list flexacenter" scroll-x>
<div class="item flexflex" v-for="(it,i) in item.data.offerlist" :key="i">
<div class="item-content flexflex">
<div class="school flexacenter">
<img class="icon" :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>
<div v-if="item.data.offercount > 3" 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>
</div>
<item-bottom></item-bottom>
</div>

View File

@@ -0,0 +1,38 @@
// my-component.js
// 引入全局 Vue 对象(因在 HTML 中通过 script 引入Vue 已挂载到 window
const { defineComponent, ref } = Vue;
import { itemBottom } from "../item-bottom/item-bottom.js";
import { itemHead } from "../item-head/item-head.js";
// 定义组件(直接使用模板)
export const itemVote = defineComponent({
name: "item-vote",
props: {
itemdata: {
type: Object,
default: () => {},
},
},
setup(props) {
let item = ref({ ...props.itemdata });
// item.value.title = "【投41票】" + item.value.title;
// res["timestamp"] = util.strtimeago(res.release_at, 4);
// const data = res.data;
// const option = data.option || [];
// res["isvote"] = option.some((item) => item.selected == 1);
// const time = util.handleDeadline(data.deadline);
// res["time"] = time;
// this.setData({
// item: res,
// });
return { item };
},
components: {
itemBottom,
itemHead,
},
template: `<div class="item-box item-vote"> <item-head :itemdata="item"></item-head> <div class="title">{{ item.title }}</div> <div class="message one-line-display" v-if="item.content">{{ item.content }}</div> <div class="info flexacenter"> <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>人参与 </div> <div class="list" :class="{ 'voted': !item.time || item.isvote }"> <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> </div> <item-bottom :itemdata="item"></item-bottom></div>`,
});

View File

@@ -0,0 +1,29 @@
<div class="item-box item-vote">
<item-head :itemdata="item"></item-head>
<div class="title">{{ item.title }}</div>
<div class="message one-line-display" v-if="item.content">{{ item.content }}</div>
<div class="info flexacenter">
<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>人参与
</div>
<div class="list" :class="{ 'voted': !item.time || item.isvote }">
<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>
</div>
<item-bottom :itemdata="item"></item-bottom>
</div>

View File

@@ -181,6 +181,9 @@ body {
#homepage-other .head-navigation .text:hover {
text-decoration: underline;
}
#homepage-other .matter {
align-items: flex-start;
}
#homepage-other .matter .card-user {
width: 320px;
background: -webkit-linear-gradient(270.06444514deg, #ffffff 0%, #eef8f9 100%);
@@ -192,6 +195,7 @@ body {
flex-direction: column;
padding-top: 39px;
padding-bottom: 40px;
margin-right: 20px;
}
#homepage-other .matter .card-user .avatar {
width: 120px;
@@ -252,12 +256,13 @@ body {
color: #000000;
}
#homepage-other .matter .matter-content .message-box {
height: 452px;
background-color: #ffffff;
border: 1px solid #e9eef2;
border-radius: 10px;
padding-left: 95px;
padding-bottom: 5px;
padding-right: 40px;
padding-bottom: 31px;
margin-bottom: 20px;
}
#homepage-other .matter .matter-content .message-box .header {
border-bottom: 1px dotted #d7d7d7;
@@ -312,3 +317,83 @@ body {
color: #ffffff;
background-color: #04b0d5;
}
#homepage-other .matter .matter-content .message-box .stats {
padding-top: 20px;
padding-bottom: 21px;
font-size: 14px;
}
#homepage-other .matter .matter-content .message-box .stats .item .text {
color: #7f7f7f;
margin-right: 5px;
}
#homepage-other .matter .matter-content .message-box .stats .item .num {
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
color: #04b0d5;
}
#homepage-other .matter .matter-content .message-box .stats .line {
color: #d7d7d7;
margin: 0 14px;
}
#homepage-other .matter .matter-content .message-box .tags {
flex-wrap: wrap;
}
#homepage-other .matter .matter-content .message-box .tags .item {
padding: 0 10px;
font-size: 14px;
color: #333333;
height: 24px;
background-color: #f6f6f6;
border: 1px solid #f0f1ec;
border-radius: 5px;
margin-right: 20px;
margin-bottom: 10px;
}
#homepage-other .matter .matter-content .message-box .tags .item .icon {
height: 13px;
margin-right: 7px;
}
#homepage-other .matter .matter-content .list-area {
width: 860px;
background-color: #ffffff;
border: 1px solid #e9eef2;
border-radius: 10px;
padding-left: 95px;
padding-right: 40px;
}
#homepage-other .matter .matter-content .list-area .classify {
padding-top: 39px;
padding-bottom: 23px;
}
#homepage-other .matter .matter-content .list-area .classify .item {
width: 50px;
height: 32px;
line-height: 32px;
text-align: center;
background-color: #ffffff;
border: 1px solid #f2f2f2;
border-radius: 12px;
color: #333333;
cursor: pointer;
}
#homepage-other .matter .matter-content .list-area .classify .item.pitch {
background-color: #d35110;
color: #ffffff;
}
#homepage-other .matter .matter-content .list-area .classify .item:not(:last-child) {
margin-right: 10px;
}
#homepage-other .matter .matter-content .list-area .issue-data {
color: #7f7f7f;
font-size: 14px;
margin-bottom: 20px;
}
#homepage-other .matter .matter-content .list-area .issue-data .num {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
color: #000000;
margin: 0 5px;
}
#homepage-other .matter .matter-content .list-area .list-box .item-box {
margin-bottom: 20px;
}

View File

@@ -209,6 +209,7 @@ body {
}
.matter {
align-items: flex-start;
.card-user {
width: 320px;
background: -webkit-linear-gradient(270.064445137829deg, rgba(255, 255, 255, 1) 0%, rgba(238, 248, 249, 1) 100%);
@@ -220,7 +221,7 @@ body {
flex-direction: column;
padding-top: 39px;
padding-bottom: 40px;
margin-right: 20px;
.avatar {
width: 120px;
height: 120px;
@@ -294,12 +295,13 @@ body {
.matter-content {
.message-box {
height: 452px;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(233, 238, 242, 1);
border-radius: 10px;
padding-left: 95px;
padding-bottom: 5px;
padding-right: 40px;
padding-bottom: 31px;
margin-bottom: 20px;
.header {
border-bottom: 1px dotted #d7d7d7;
@@ -330,7 +332,7 @@ body {
flex-flow: wrap;
padding-top: 20px;
border-bottom: 1px dotted #d7d7d7;
.item {
width: 50%;
margin-bottom: 15px;
@@ -361,6 +363,103 @@ body {
}
}
}
.stats {
padding-top: 20px;
padding-bottom: 21px;
font-size: 14px;
.item {
.text {
color: #7f7f7f;
margin-right: 5px;
}
.num {
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
color: #04b0d5;
}
}
.line {
color: #d7d7d7;
margin: 0 14px;
}
}
.tags {
flex-wrap: wrap;
.item {
padding: 0 10px;
font-size: 14px;
color: #333333;
height: 24px;
background-color: rgba(246, 246, 246, 1);
border: 1px solid rgba(240, 241, 236, 1);
border-radius: 5px;
margin-right: 20px;
margin-bottom: 10px;
.icon {
height: 13px;
margin-right: 7px;
}
}
}
}
.list-area {
width: 860px;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(233, 238, 242, 1);
border-radius: 10px;
padding-left: 95px;
padding-right: 40px;
.classify {
padding-top: 39px;
padding-bottom: 23px;
.item {
width: 50px;
height: 32px;
line-height: 32px;
text-align: center;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(242, 242, 242, 1);
border-radius: 12px;
color: #333333;
cursor: pointer;
&.pitch {
background-color: rgba(211, 81, 16, 1);
color: #ffffff;
}
&:not(:last-child) {
margin-right: 10px;
}
}
}
.issue-data {
color: #7f7f7f;
font-size: 14px;
margin-bottom: 20px;
.num {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
color: #000000;
margin: 0 5px;
}
}
.list-box {
.item-box {
margin-bottom: 20px;
}
}
}
}
}

View File

@@ -1,45 +1,3 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
padding: 10px;
background-color: #eef2f5;
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.topic-and-selectives .head-top {
width: 64px;
height: 24px;
@@ -227,128 +185,3 @@ body {
.forum-sections-list .list .line .item:not(:last-child) {
margin-right: 10px;
}
.item-box {
width: 897px;
background-color: #ffffff;
border: 1px solid #e9eef2;
border-radius: 10px;
padding: 18px 20px 0;
}
.item-box .item-head {
margin-bottom: 14px;
}
.item-box .item-head .avatar {
width: 28px;
height: 28px;
border-radius: 50%;
margin-right: 8px;
}
.item-box .item-head .name {
font-style: normal;
color: #555555;
font-size: 14px;
margin-right: 8px;
}
.item-box .item-head .group {
height: 15px;
margin-right: 8px;
}
.item-box .item-head .time {
font-size: 13px;
color: #aaaaaa;
}
.item-box .item-head .view {
font-size: 12px;
color: #aaaaaa;
margin-right: 15px;
}
.item-box .item-head .view .icon {
width: 13px;
height: 8px;
margin-right: 5px;
}
.item-box .item-head .btn {
width: 24px;
height: 16px;
background-color: #f2f2f2;
border-radius: 150px;
}
.item-box .item-head .btn .icon {
width: 18px;
height: 18px;
}
.item-box .label {
margin-bottom: 10px;
}
.item-box .label .item {
font-size: 14px;
color: #555555;
padding: 0 9px;
height: 24px;
line-height: 24px;
background-color: #f2f2f2;
border-radius: 6px;
}
.item-box .label .item.icon {
padding: 0;
}
.item-box .label .item:not(:last-child) {
margin-right: 10px;
}
.item-box .label .item.blue {
color: #ffffff;
background-color: #04b0d5;
}
.item-box .title {
font-weight: 650;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
}
.item-box .message {
font-size: 14px;
color: #555555;
white-space: pre-wrap;
margin-bottom: 15px;
}
.item-box .comment {
height: 40px;
background-color: #f6f6f6;
border-radius: 10px;
padding: 0 10px;
}
.item-box .comment .icon {
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 10px;
}
.item-box .comment .text {
font-size: 14px;
color: #7f7f7f;
}
.item-box .bottom {
height: 55px;
justify-content: flex-end;
}
.item-box .bottom .bottom-item {
cursor: pointer;
}
.item-box .bottom .bottom-item:not(:last-child) {
margin-right: 60px;
}
.item-box .bottom .bottom-item .icon {
width: 20px;
height: 20px;
margin-right: 8px;
}
.item-box .bottom .bottom-item .text {
color: #aaaaaa;
font-size: 13px;
}
.item-box .bottom .bottom-item.like .icon {
width: 18px;
height: 18px;
}

View File

@@ -1,54 +1,3 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
padding: 10px;
background-color: rgba(238, 242, 245, 1);
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.topic-and-selectives {
.head-top {
width: 64px;
@@ -276,155 +225,4 @@ body {
}
}
}
}
.item-box {
width: 897px;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(233, 238, 242, 1);
border-radius: 10px;
padding: 18px 20px 0;
.item-head {
margin-bottom: 14px;
.avatar {
width: 28px;
height: 28px;
border-radius: 50%;
margin-right: 8px;
}
.name {
font-style: normal;
color: #555555;
font-size: 14px;
margin-right: 8px;
}
.group {
height: 15px;
margin-right: 8px;
}
.time {
font-size: 13px;
color: #aaaaaa;
}
.view {
font-size: 12px;
color: #aaaaaa;
margin-right: 15px;
.icon {
width: 13px;
height: 8px;
margin-right: 5px;
}
}
.btn {
width: 24px;
height: 16px;
background-color: rgba(242, 242, 242, 1);
border-radius: 150px;
.icon {
width: 18px;
height: 18px;
}
}
}
.label {
margin-bottom: 10px;
.item {
font-size: 14px;
color: #555555;
padding: 0 9px;
height: 24px;
line-height: 24px;
background-color: rgba(242, 242, 242, 1);
border-radius: 6px;
&.icon {
padding: 0;
}
&:not(:last-child) {
margin-right: 10px;
}
&.blue {
color: #ffffff;
background-color: #04b0d5;
}
}
}
.title {
font-weight: 650;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
}
.message {
font-size: 14px;
color: #555555;
white-space: pre-wrap;
margin-bottom: 15px;
}
.comment {
height: 40px;
background-color: rgba(246, 246, 246, 1);
border-radius: 10px;
padding: 0 10px;
.icon {
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 10px;
}
.text {
font-size: 14px;
color: #7f7f7f;
}
}
.bottom {
height: 55px;
justify-content: flex-end;
.bottom-item {
cursor: pointer;
&:not(:last-child) {
margin-right: 60px;
}
.icon {
width: 20px;
height: 20px;
margin-right: 8px;
}
.text {
color: #aaaaaa;
font-size: 13px;
}
&.like {
.icon {
width: 18px;
height: 18px;
}
}
}
}
}
}

419
css/public.css Normal file
View File

@@ -0,0 +1,419 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
background-color: #eef2f5;
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.item-box {
max-width: 897px;
width: 100%;
background-color: #ffffff;
border: 1px solid #e9eef2;
border-radius: 10px;
padding: 18px 20px 0;
}
.item-box .item-head {
margin-bottom: 14px;
}
.item-box .item-head .avatar {
width: 28px;
height: 28px;
border-radius: 50%;
margin-right: 8px;
}
.item-box .item-head .name {
font-style: normal;
color: #555555;
font-size: 14px;
margin-right: 8px;
}
.item-box .item-head .group {
height: 15px;
margin-right: 8px;
}
.item-box .item-head .time {
font-size: 13px;
color: #aaaaaa;
}
.item-box .item-head .view {
font-size: 12px;
color: #aaaaaa;
margin-right: 15px;
}
.item-box .item-head .view .icon {
width: 13px;
height: 8px;
margin-right: 5px;
}
.item-box .item-head .btn {
width: 24px;
height: 16px;
background-color: #f2f2f2;
border-radius: 150px;
}
.item-box .item-head .btn .icon {
width: 18px;
height: 18px;
}
.item-box .label {
margin-bottom: 10px;
}
.item-box .label .item {
font-size: 14px;
color: #555555;
padding: 0 9px;
height: 24px;
line-height: 24px;
background-color: #f2f2f2;
border-radius: 6px;
}
.item-box .label .item.icon {
padding: 0;
}
.item-box .label .item:not(:last-child) {
margin-right: 10px;
}
.item-box .label .item.blue {
color: #ffffff;
background-color: #04b0d5;
}
.item-box.item-forum .title {
font-weight: 650;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
}
.item-box.item-forum .message {
font-size: 14px;
color: #555555;
white-space: pre-wrap;
margin-bottom: 15px;
}
.item-box.item-offer {
font-size: 14px;
color: #333333;
}
.item-box.item-offer .school {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
}
.item-box.item-offer .school .icon {
height: 20px;
margin-right: 10px;
}
.item-box.item-offer .school .text {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
}
.item-box.item-offer .major {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
}
.item-box.item-offer .major .key {
font-size: 14px;
color: #7f7f7f;
margin-right: 20px;
}
.item-box.item-offer .info {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
margin-bottom: 12px;
}
.item-box.item-offer .info .line {
width: 1px;
height: 14px;
background: #aaaaaa;
margin: 0 10px;
}
.item-box.item-offer .info .results {
font-size: 13px;
color: #ffffff;
height: 20px;
padding: 0 9px;
border-radius: 37px;
}
.item-box.item-offer .message {
color: #555555;
margin-bottom: 15px;
}
.item-box.item-summary .title {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
}
.item-box.item-summary .message {
font-size: 14px;
color: #555555;
margin-bottom: 20px;
}
.item-box.item-summary .total {
font-size: 14px;
color: #555555;
margin-bottom: 12px;
}
.item-box.item-summary .total .num {
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
color: #000000;
margin: 0 5px;
}
.item-box.item-summary .list {
overflow: auto;
margin-bottom: 16px;
}
.item-box.item-summary .list .item-content {
width: 280px;
flex-direction: column;
justify-content: space-between;
padding: 10px;
}
.item-box.item-summary .list .item {
width: 280px;
height: 110px;
background-color: rgba(242, 242, 242, 0);
border: 1px solid #ebebeb;
border-radius: 10px;
color: #333333;
font-size: 14px;
cursor: pointer;
margin-right: 10px;
}
.item-box.item-summary .list .item .school .icon {
height: 24px;
}
.item-box.item-summary .list .item .school .name {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 16px;
color: #000000;
line-height: 24px;
}
.item-box.item-summary .list .item .info .results {
font-size: 13px;
color: #ffffff;
height: 20px;
padding: 0 9px;
border-radius: 37px;
}
.item-box.item-summary .list .item .info .line {
width: 1px;
height: 14px;
background: #aaaaaa;
margin: 0 10px;
}
.item-box.item-summary .list .item.more {
color: #026277;
}
.item-box.item-summary .list .item.more .item-content {
vertical-align: top;
flex-direction: row;
justify-content: center;
}
.item-box.item-summary .list .item.more .icon {
width: 15px;
height: 15px;
margin-left: 5px;
}
.item-box.item-vote .title {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
}
.item-box.item-vote .message {
font-size: 14px;
color: #555555;
margin-bottom: 15px;
}
.item-box.item-vote .info {
font-size: 14px;
color: #7f7f7f;
}
.item-box.item-vote .info .status {
height: 22px;
line-height: 22px;
background-color: rgba(211, 81, 16, 0.09803922);
border-radius: 24px;
font-size: 13px;
color: #d35110;
padding: 0 7px;
}
.item-box.item-vote .info .line {
width: 1px;
height: 14px;
background-color: #aaaaaa;
margin: 0 10px;
}
.item-box.item-vote .info .num {
font-weight: 650;
color: #000000;
}
.item-box.item-vote .list {
margin: 4px 20px 0;
overflow: hidden;
max-height: 138px;
}
.item-box.item-vote .list.voted {
max-height: 178px;
}
.item-box.item-vote .list.voted .list-item {
height: 75px;
}
.item-box.item-vote .list.voted .list-item .list-bottom {
display: flex;
}
.item-box.item-vote .list .list-item {
height: 55px;
flex-direction: column;
}
.item-box.item-vote .list .list-item:not(:last-of-type) {
border-bottom: 1px dotted #d7d7d7;
}
.item-box.item-vote .list .list-item .list-top {
margin-bottom: 1px;
width: 100%;
}
.item-box.item-vote .list .list-item .list-top .list-serial {
width: 18px;
height: 18px;
line-height: 18px;
background-color: #333333;
border-radius: 50%;
color: #ffffff;
font-size: 13px;
margin-right: 12px;
}
.item-box.item-vote .list .list-item .list-top .list-tick {
width: 18px;
height: 18px;
margin-right: 12px;
}
.item-box.item-vote .list .list-item .list-top .list-text {
font-size: 18px;
line-height: 24px;
color: #333333;
width: 400px;
}
.item-box.item-vote .list .list-item .list-bottom {
color: #026277;
font-size: 13px;
padding: 2px;
justify-content: flex-end;
width: 100%;
display: none;
}
.item-box.item-vote .list .list-item .list-bottom .list-length {
width: 100%;
height: 4px;
background-color: #cff7ff;
border-radius: 66px;
margin-right: 6px;
}
.item-box .comment {
height: 40px;
background-color: #f6f6f6;
border-radius: 10px;
padding: 0 10px;
}
.item-box .comment .icon {
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 10px;
}
.item-box .comment .text {
font-size: 14px;
color: #7f7f7f;
}
.item-box .bottom {
margin-top: 15px;
height: 55px;
justify-content: flex-end;
}
.item-box .bottom .bottom-item {
cursor: pointer;
}
.item-box .bottom .bottom-item:not(:last-child) {
margin-right: 60px;
}
.item-box .bottom .bottom-item .icon {
width: 20px;
height: 20px;
margin-right: 8px;
}
.item-box .bottom .bottom-item .text {
color: #aaaaaa;
font-size: 13px;
}
.item-box .bottom .bottom-item.like .icon {
width: 18px;
height: 18px;
}
/* offer 录取结果 */
.results.r1 {
background-color: #76c45e;
}
.results.r2 {
background-color: #50e3c2;
}
.results.r3 {
background-color: #81d3f8;
}
.results.r4 {
background-color: #d35110;
}
.results.r5 {
background-color: #f59a23;
}
.results.r6 {
background-color: #8080ff;
}

509
css/public.less Normal file
View File

@@ -0,0 +1,509 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
background-color: rgba(238, 242, 245, 1);
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.item-box {
max-width: 897px;
width: 100%;
background-color: rgba(255, 255, 255, 1);
border: 1px solid rgba(233, 238, 242, 1);
border-radius: 10px;
padding: 18px 20px 0;
.item-head {
margin-bottom: 14px;
.avatar {
width: 28px;
height: 28px;
border-radius: 50%;
margin-right: 8px;
}
.name {
font-style: normal;
color: #555555;
font-size: 14px;
margin-right: 8px;
}
.group {
height: 15px;
margin-right: 8px;
}
.time {
font-size: 13px;
color: #aaaaaa;
}
.view {
font-size: 12px;
color: #aaaaaa;
margin-right: 15px;
.icon {
width: 13px;
height: 8px;
margin-right: 5px;
}
}
.btn {
width: 24px;
height: 16px;
background-color: rgba(242, 242, 242, 1);
border-radius: 150px;
.icon {
width: 18px;
height: 18px;
}
}
}
.label {
margin-bottom: 10px;
.item {
font-size: 14px;
color: #555555;
padding: 0 9px;
height: 24px;
line-height: 24px;
background-color: rgba(242, 242, 242, 1);
border-radius: 6px;
&.icon {
padding: 0;
}
&:not(:last-child) {
margin-right: 10px;
}
&.blue {
color: #ffffff;
background-color: #04b0d5;
}
}
}
&.item-forum {
.title {
font-weight: 650;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
}
.message {
font-size: 14px;
color: #555555;
white-space: pre-wrap;
margin-bottom: 15px;
}
}
&.item-offer {
font-size: 14px;
color: #333333;
.school {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
.icon {
height: 20px;
margin-right: 10px;
}
.text {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
}
}
.major {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
.key {
font-size: 14px;
color: #7f7f7f;
margin-right: 20px;
}
}
.info {
height: 45px;
border-bottom: 1px dotted #d7d7d7;
margin-bottom: 12px;
.line {
width: 1px;
height: 14px;
background: #aaaaaa;
margin: 0 10px;
}
.results {
font-size: 13px;
color: #ffffff;
height: 20px;
padding: 0 9px;
border-radius: 37px;
}
}
.message {
color: #555555;
margin-bottom: 15px;
}
}
&.item-summary {
.title {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
}
.message {
font-size: 14px;
color: #555555;
margin-bottom: 20px;
}
.total {
font-size: 14px;
color: #555555;
margin-bottom: 12px;
.num {
font-family: "Arial-BoldMT", "Arial Bold", "Arial", sans-serif;
font-weight: 700;
color: #000000;
margin: 0 5px;
}
}
.list {
overflow: auto;
margin-bottom: 16px;
.item-content {
width: 280px;
flex-direction: column;
justify-content: space-between;
padding: 10px;
}
.item {
width: 280px;
height: 110px;
background-color: rgba(242, 242, 242, 0);
border: 1px solid rgba(235, 235, 235, 1);
border-radius: 10px;
color: #333333;
font-size: 14px;
cursor: pointer;
margin-right: 10px;
.school {
.icon {
height: 24px;
}
.name {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 16px;
color: #000000;
line-height: 24px;
}
}
.info {
.results {
font-size: 13px;
color: #ffffff;
height: 20px;
padding: 0 9px;
border-radius: 37px;
}
.line {
width: 1px;
height: 14px;
background: #aaaaaa;
margin: 0 10px;
}
}
&.more {
color: #026277;
// vertical-align: top;
// flex-direction: row;
// justify-content: center;
.item-content {
vertical-align: top;
flex-direction: row;
justify-content: center;
}
.icon {
width: 15px;
height: 15px;
margin-left: 5px;
}
}
}
}
}
&.item-vote {
.title {
font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC", sans-serif;
font-weight: 650;
font-style: normal;
font-size: 20px;
color: #000000;
line-height: 36px;
margin-bottom: 7px;
}
.message {
font-size: 14px;
color: #555555;
margin-bottom: 15px;
}
.info {
font-size: 14px;
color: #7f7f7f;
.status {
height: 22px;
line-height: 22px;
background-color: rgba(211, 81, 16, 0.0980392156862745);
border-radius: 24px;
font-size: 13px;
color: #d35110;
padding: 0 7px;
}
.line {
width: 1px;
height: 14px;
background-color: #aaaaaa;
margin: 0 10px;
}
.num {
font-weight: 650;
color: #000000;
}
}
.list {
margin: 4px 20px 0;
overflow: hidden;
max-height: 138px;
&.voted {
max-height: 178px;
.list-item {
height: 75px;
.list-bottom {
display: flex;
}
}
}
.list-item {
height: 55px;
flex-direction: column;
&:not(:last-of-type) {
border-bottom: 1px dotted #d7d7d7;
}
.list-top {
margin-bottom: 1px;
width: 100%;
.list-serial {
width: 18px;
height: 18px;
line-height: 18px;
background-color: #333333;
border-radius: 50%;
color: #ffffff;
font-size: 13px;
margin-right: 12px;
}
.list-tick {
width: 18px;
height: 18px;
margin-right: 12px;
}
.list-text {
font-size: 18px;
line-height: 24px;
color: #333333;
width: 400px;
}
}
.list-bottom {
color: #026277;
font-size: 13px;
padding: 2px;
justify-content: flex-end;
width: 100%;
display: none;
.list-length {
width: 100%;
height: 4px;
background-color: rgba(207, 247, 255, 1);
border-radius: 66px;
margin-right: 6px;
}
}
}
}
}
.comment {
height: 40px;
background-color: rgba(246, 246, 246, 1);
border-radius: 10px;
padding: 0 10px;
.icon {
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 10px;
}
.text {
font-size: 14px;
color: #7f7f7f;
}
}
.bottom {
margin-top: 15px;
height: 55px;
justify-content: flex-end;
.bottom-item {
cursor: pointer;
&:not(:last-child) {
margin-right: 60px;
}
.icon {
width: 20px;
height: 20px;
margin-right: 8px;
}
.text {
color: #aaaaaa;
font-size: 13px;
}
&.like {
.icon {
width: 18px;
height: 18px;
}
}
}
}
}
/* offer 录取结果 */
.results.r1 {
background-color: rgba(118, 196, 94, 1);
}
.results.r2 {
background-color: rgba(80, 227, 194, 1);
}
.results.r3 {
background-color: rgba(129, 211, 248, 1);
}
.results.r4 {
background-color: rgba(211, 81, 16, 1);
}
.results.r5 {
background-color: rgba(245, 154, 35, 1);
}
.results.r6 {
background-color: rgba(128, 128, 255, 1);
}

View File

@@ -1,44 +1,3 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
background-color: #eef2f5;
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#sectionIndex {
width: 1200px;
margin: 0 auto;

View File

@@ -1,53 +1,3 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "PingFangSC-Regular", "PingFang SC", sans-serif;
font-weight: 400;
font-style: normal;
}
body {
background-color: rgba(238, 242, 245, 1);
}
/* 公共的 css 样式 */
.flexflex {
display: flex;
}
.flexcenter {
display: flex;
justify-content: center;
align-items: center;
}
.flexjcenter {
display: flex;
justify-content: center;
}
.flexacenter {
display: flex;
align-items: center;
}
.flex1 {
flex: 1;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
.one-line-display {
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#sectionIndex {
width: 1200px;
margin: 0 auto;

View File

@@ -1,148 +1,169 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="./css/homepage-other.css" />
<script src="./js/vue.global.js"></script>
</head>
<body>
<div class="container" id="homepage-other">
<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>Document</title>
<link rel="stylesheet" href="./css/public.css" />
<link rel="stylesheet" href="./css/homepage-other.css" />
<script src="./js/vue.global.js"></script>
</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="homepage-other">
<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" />
<div class="text">首页</div>
<img class="arrows" src="./img/arrows-gray.svg" />
<div class="text">GTSuperstar 的个人主页</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="card-user flexcenter">
<div class="name-area">
<img class="avatar" src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC2WV5VHK6OikN42jDKLNjtax7HL4g2eMCJSdU9oWFhY2E~/middle" alt="用户头像" />
<div class="head-navigation flexacenter">
<img class="icon" src="./img/index-icon.png" />
<div class="text">首页</div>
<img class="arrows" src="./img/arrows-gray.svg" />
<div class="text">GTSuperstar 的个人主页</div>
</div>
<h3 class="username">GTSuperstar</h3>
<p class="uid flexacenter">
UID: 3276161
<img class="icon" src="./img/copy-icon.png" />
</p>
</div>
<div class="matter flexflex">
<div class="card-user flexcenter">
<div class="name-area">
<img class="avatar" src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC2WV5VHK6OikN42jDKLNjtax7HL4g2eMCJSdU9oWFhY2E~/middle" alt="用户头像" />
<div class="medal-area">
<p class="title">勋章 6</p>
<div class="list flexflex">
<img v-for="item in 5" src="https://o.x-php.com/Zvt57TuJSUvkyhw-xG3WvCGHpt5oNTyM1Nwws484T7rGFDO1bKwnG2kLV_eSo5JUnMYHVj-SsGLytRp94iZe_tpcnj-4Ce4gYuGWnGU_hCATZ7u7I_X1F8YjCfX63o6lsSPQ7Y2N90MUNDQyOQ~~" alt="勋章1" class="item" />
</div>
</div>
<h3 class="username">GTSuperstar</h3>
<p class="uid flexacenter">
UID: 3276161
<img class="icon" src="./img/copy-icon.png" />
</p>
</div>
<div class="btn-area">
<div class="item msg flexcenter">发私信</div>
<div class="item flexcenter">用户管理</div>
<div class="item flexcenter">内容管理</div>
<div class="medal-area">
<p class="title">勋章 6</p>
<div class="list flexflex">
<img v-for="item in 5" src="https://o.x-php.com/Zvt57TuJSUvkyhw-xG3WvCGHpt5oNTyM1Nwws484T7rGFDO1bKwnG2kLV_eSo5JUnMYHVj-SsGLytRp94iZe_tpcnj-4Ce4gYuGWnGU_hCATZ7u7I_X1F8YjCfX63o6lsSPQ7Y2N90MUNDQyOQ~~" alt="勋章1" class="item" />
</div>
</div>
<div class="matter-content flex1">
<div class="message-box">
<!-- 头部区域 -->
<div class="header">
<img src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC2WV5VHK6OikN42jDKLNjtax7HL4g2eMCJSdU9oWFhY2E~/middle" alt="用户头像" class="avatar" />
<span class="username">GTSuperstar</span>
<!-- <img class="icon"> -->
</div>
<!-- 信息列表区域 -->
<div class="info-list flexflex">
<div class="item flexacenter">
<span class="label">注册时间</span>
<span class="value">2019-7-26 16:38</span>
</div>
<div class="item flexacenter">
<span class="label">最后登录</span>
<span class="value">2025-10-16 10:32</span>
</div>
<div class="item flexacenter">
<span class="label">在线时长</span>
<span class="value">1304 小时</span>
</div>
<div class="item flexacenter">
<span class="label">上次访问 IP</span>
<span class="value">116.237.182.149 -- 上海长宁区</span>
</div>
<div class="item flexacenter">
<span class="label">Email</span>
<span class="value">skysuper007@qq.com</span>
<span class="status flexacenter">未认证</span>
</div>
<div class="item flexacenter">
<span class="label">手机号</span>
<span class="value">15934271290</span>
<span class="status blue flexacenter">已认证</span>
</div>
<div class="item flexacenter">
<span class="label">累计签到</span>
<span class="value">1341 天</span>
</div>
<div class="item flexacenter">
<span class="label">本月签到</span>
<span class="value">6 天</span>
</div>
<div class="item flexacenter">
<span class="label">寄托币</span>
<span class="value">13813</span>
</div>
</div>
<div class="btn-area">
<div class="item msg flexcenter">发私信</div>
<div class="item flexcenter">用户管理</div>
<div class="item flexcenter">内容管理</div>
</div>
</div>
<div class="matter-content flex1">
<div class="message-box" v-if="false">
<!-- 头部区域 -->
<div class="header">
<img src="https://nas.gter.net:9008/avatar/97K4EWIMLrsbGTWXslC2WV5VHK6OikN42jDKLNjtax7HL4g2eMCJSdU9oWFhY2E~/middle" alt="用户头像" class="avatar" />
<span class="username">GTSuperstar</span>
<!-- <img class="icon"> -->
</div>
<!-- 统计标签区域 -->
<div class="stats">
<span class="stat-item">Offer × 6</span>
<span class="stat-item">总结 × 1</span>
<span class="stat-item">面经 × 3</span>
<span class="stat-item">回答 × 1</span>
<span class="stat-item">其他 × 4</span>
<!-- 信息列表区域 -->
<div class="info-list flexflex">
<div class="item flexacenter">
<span class="label">注册时间</span>
<span class="value">2019-7-26 16:38</span>
</div>
<div class="item flexacenter">
<span class="label">最后登录</span>
<span class="value">2025-10-16 10:32</span>
</div>
<div class="item flexacenter">
<span class="label">在线时长</span>
<span class="value">1304 小时</span>
</div>
<div class="item flexacenter">
<span class="label">上次访问 IP</span>
<span class="value">116.237.182.149 -- 上海长宁区</span>
</div>
<div class="item flexacenter">
<span class="label">Email</span>
<span class="value">skysuper007@qq.com</span>
<span class="status flexacenter">未认证</span>
</div>
<div class="item flexacenter">
<span class="label">手机号</span>
<span class="value">15934271290</span>
<span class="status blue flexacenter">已认证</span>
</div>
<div class="item flexacenter">
<span class="label">累计签到</span>
<span class="value">1341 天</span>
</div>
<div class="item flexacenter">
<span class="label">本月签到</span>
<span class="value">6 天</span>
</div>
<div class="item flexacenter">
<span class="label">寄托币</span>
<span class="value">13813</span>
</div>
</div>
<!-- Offer标签区域 -->
<div class="offer-tags">
<span class="tag">Offer 阿尔托大学</span>
<span class="tag">Offer 坦佩雷大学</span>
<span class="tag">Offer 悉尼大学</span>
<span class="tag">Offer 巴黎理工学院</span>
<span class="tag">Offer 悉尼大学</span>
<span class="tag">Offer 巴黎理工学院</span>
<span class="tag">Offer 阿尔托大学</span>
<!-- 统计标签区域 -->
<div class="stats flexacenter">
<template v-for="item in 5" :key="item">
<span class="item flexacenter">
<div class="text">Offer ×</div>
<div class="num">6</div>
</span>
<div class="line">|</div>
</template>
</div>
<!-- Offer标签区域 -->
<div class="tags flexflex">
<div class="item flexacenter" v-for="item in 15" :key="item">
<!-- <img class="icon" src="./img/mj-icon.png" mode="heightFix" /> -->
<img class="icon" src="./img/offer-icon.png" mode="heightFix" />
阿尔托大学
</div>
</div>
</div>
<div class="list-area">
<div class="classify flexacenter">
<div class="item " :class="{'pitch': item === 1}" v-for="item in 5" :key="item">全部</div>
</div>
<div class="issue-data flexacenter">
<div class="num">57</div> 个创作,获得 <div class="num">1093</div> 个赞
</div>
<div class="list-box">
<template v-for="(item,index) in list" :key="index"> {{ item.type }}
<item-offer v-if=" item.type == 'offer'" :item="item"></item-offer>
<item-summary v-else-if="item.type == 'offer_summary'" :item="item"></item-summary>
<item-vote v-else-if="item.type == 'vote'" :itemdata="item"></item-vote>
<item-forum v-else :item="item"></item-forum>
</template>
</div>
</div>
</div>
</div>
<script type="module" src="./js/homepage-other.js"></script>
</body>
</html>
</div>
<script type="module" src="./js/homepage-other.js"></script>
</body>
</html>

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="16px" height="16px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -2688 -891 )">
<path d="M 7 13.3958333333333 C 7.18055555555556 13.3958333333333 7.33680555555556 13.3298611111111 7.46875 13.1979166666667 L 12.1979166666667 8.46875 C 12.3298611111111 8.33680555555555 12.3958333333333 8.18055555555555 12.3958333333333 8 C 12.3958333333333 7.81944444444444 12.3298611111111 7.66319444444444 12.1979166666667 7.53125 L 7.46875 2.80208333333333 C 7.33680555555556 2.67013888888889 7.18055555555556 2.60416666666667 7 2.60416666666667 C 6.81944444444445 2.60416666666667 6.66319444444445 2.67013888888889 6.53125 2.80208333333333 L 5.46875 3.86458333333333 C 5.33680555555556 3.99652777777778 5.27083333333333 4.15277777777778 5.27083333333333 4.33333333333333 C 5.27083333333333 4.51388888888889 5.33680555555556 4.67013888888889 5.46875 4.80208333333333 L 8.66666666666667 8 L 5.46875 11.1979166666667 C 5.33680555555556 11.3298611111111 5.27083333333333 11.4861111111111 5.27083333333333 11.6666666666667 C 5.27083333333333 11.8472222222222 5.33680555555556 12.0034722222222 5.46875 12.1354166666667 L 6.53125 13.1979166666667 C 6.66319444444445 13.3298611111111 6.81944444444445 13.3958333333333 7 13.3958333333333 Z M 14.9270833333333 3.984375 C 15.6423611111111 5.21006944444444 16 6.54861111111111 16 8 C 16 9.45138888888889 15.6423611111111 10.7899305555556 14.9270833333333 12.015625 C 14.2118055555556 13.2413194444444 13.2413194444444 14.2118055555556 12.015625 14.9270833333333 C 10.7899305555556 15.6423611111111 9.45138888888889 16 8 16 C 6.54861111111111 16 5.21006944444444 15.6423611111111 3.984375 14.9270833333333 C 2.75868055555556 14.2118055555556 1.78819444444444 13.2413194444444 1.07291666666667 12.015625 C 0.357638888888889 10.7899305555556 0 9.45138888888889 0 8 C 0 6.54861111111111 0.357638888888889 5.21006944444444 1.07291666666667 3.984375 C 1.78819444444444 2.75868055555556 2.75868055555556 1.78819444444444 3.984375 1.07291666666667 C 5.21006944444444 0.357638888888888 6.54861111111111 0 8 0 C 9.45138888888889 0 10.7899305555556 0.357638888888888 12.015625 1.07291666666667 C 13.2413194444444 1.78819444444444 14.2118055555556 2.75868055555556 14.9270833333333 3.984375 Z " fill-rule="nonzero" fill="#026277" stroke="none" transform="matrix(1 0 0 1 2688 891 )" />
</g>
</svg>

BIN
img/forum-title.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
img/offer-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

6
img/vote-tick.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="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -100 -976 )">
<path d="M 11.5390625 5.93359375 C 11.6484375 5.82421875 11.703125 5.6875 11.703125 5.5234375 C 11.703125 5.35329861111111 11.6484375 5.21354166666667 11.5390625 5.10416666666667 L 10.7096354166667 4.28385416666667 C 10.5941840277778 4.16840277777778 10.4574652777778 4.11067708333333 10.2994791666667 4.11067708333333 C 10.1414930555556 4.11067708333333 10.0047743055556 4.16840277777778 9.88932291666667 4.28385416666667 L 6.17057291666667 7.99348958333333 L 4.11067708333333 5.93359375 C 3.99522569444444 5.81814236111111 3.85850694444444 5.76041666666667 3.70052083333333 5.76041666666667 C 3.54253472222222 5.76041666666667 3.40581597222222 5.81814236111111 3.29036458333333 5.93359375 L 2.4609375 6.75390625 C 2.3515625 6.86328125 2.296875 7.00303819444444 2.296875 7.17317708333333 C 2.296875 7.33723958333333 2.3515625 7.47395833333333 2.4609375 7.58333333333333 L 5.76041666666667 10.8828125 C 5.87586805555556 10.9982638888889 6.01258680555556 11.0559895833333 6.17057291666667 11.0559895833333 C 6.33463541666667 11.0559895833333 6.47439236111111 10.9982638888889 6.58984375 10.8828125 L 11.5390625 5.93359375 Z M 13.0611979166667 3.486328125 C 13.6870659722222 4.55881076388889 14 5.73003472222222 14 7 C 14 8.26996527777778 13.6870659722222 9.44118923611111 13.0611979166667 10.513671875 C 12.4353298611111 11.5861545138889 11.5861545138889 12.4353298611111 10.513671875 13.0611979166667 C 9.44118923611111 13.6870659722222 8.26996527777778 14 7 14 C 5.73003472222222 14 4.55881076388889 13.6870659722222 3.486328125 13.0611979166667 C 2.41384548611111 12.4353298611111 1.56467013888889 11.5861545138889 0.938802083333333 10.513671875 C 0.312934027777778 9.44118923611111 0 8.26996527777778 0 7 C 0 5.73003472222222 0.312934027777778 4.55881076388889 0.938802083333333 3.486328125 C 1.56467013888889 2.41384548611111 2.41384548611111 1.56467013888889 3.486328125 0.938802083333333 C 4.55881076388889 0.312934027777777 5.73003472222222 0 7 0 C 8.26996527777778 0 9.44118923611111 0.312934027777777 10.513671875 0.938802083333333 C 11.5861545138889 1.56467013888889 12.4353298611111 2.41384548611111 13.0611979166667 3.486328125 Z " fill-rule="nonzero" fill="#04b0d5" stroke="none" transform="matrix(1 0 0 1 100 976 )" />
</g>
</svg>

View File

@@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="./css/public.css" />
<link rel="stylesheet" href="./css/index.css" />
<script src="./js/vue.global.js"></script>
</head>

File diff suppressed because it is too large Load Diff

71
js/save.js Normal file
View File

@@ -0,0 +1,71 @@
const fs = require("fs");
const path = require("path");
// 配置需要监听的文件列表:键为 txt 文件路径,值为对应的 js 文件路径
const watchList = {
// 监听 item-bottom.txt同步到 item-bottom.js
"../component/item-bottom/item-bottom.txt": "../component/item-bottom/item-bottom.js",
// 监听 item-forum.txt同步到 item-forum.js
"../component/item-forum/item-forum.txt": "../component/item-forum/item-forum.js",
// 监听 item-head.txt同步到 item-head.js
"../component/item-head/item-head.txt": "../component/item-head/item-head.js",
// 监听 item-offer.txt同步到 item-offer.js
"../component/item-offer/item-offer.txt": "../component/item-offer/item-offer.js",
// 监听 item-summary.txt同步到 item-summary.js
"../component/item-summary/item-summary.txt": "../component/item-summary/item-summary.js",
// 监听 item-vote.txt同步到 item-vote.js
"../component/item-vote/item-vote.txt": "../component/item-vote/item-vote.js",
// 可添加更多文件(格式:'txt路径': 'js路径'
// './component/other/other.txt': './component/other/other.js',
};
// 检查所有文件是否存在
Object.entries(watchList).forEach(([txtPath, jsPath]) => {
const resolvedTxt = path.resolve(__dirname, txtPath);
const resolvedJs = path.resolve(__dirname, jsPath);
if (!fs.existsSync(resolvedTxt)) {
console.error(`错误:文件不存在 - ${resolvedTxt}`);
process.exit(1);
}
if (!fs.existsSync(resolvedJs)) {
console.error(`错误:文件不存在 - ${resolvedJs}`);
process.exit(1);
}
});
// 同步逻辑:将 txtContent 替换到对应 js 的 template 中
function syncContent(txtPath, jsPath) {
try {
const txtContent = fs.readFileSync(txtPath, "utf8")?.replace(/[\n\r]/g, '');
let jsContent = fs.readFileSync(jsPath, "utf8");
// 匹配 template: `...` 结构,替换反引号内的内容
const templateRegex = /(template:\s*)(`[^`]*`)/;
if (templateRegex.test(jsContent)) {
jsContent = jsContent.replace(templateRegex, `$1\`${txtContent}\``);
fs.writeFileSync(jsPath, jsContent, "utf8");
console.log(`✅ 同步成功:${path.basename(txtPath)}${path.basename(jsPath)}`);
} else {
console.error(`❌ 格式错误:${path.basename(jsPath)} 中未找到 template: \`...\``);
}
} catch (err) {
console.error(`❌ 同步失败:${err.message}`);
}
}
// 为每个文件添加监听
Object.entries(watchList).forEach(([txtPath, jsPath]) => {
const resolvedTxt = path.resolve(__dirname, txtPath);
const resolvedJs = path.resolve(__dirname, jsPath);
fs.watch(resolvedTxt, (eventType) => {
if (eventType === "change") {
console.log(`\n检测到 ${path.basename(resolvedTxt)} 保存,开始同步...`);
syncContent(resolvedTxt, resolvedJs);
}
});
console.log(`开始监听:${resolvedTxt}`);
});
console.log("\n服务启动成功所有文件修改后将自动同步 🚀");

View File

@@ -1,5 +1,5 @@
const { createApp, ref, onMounted, nextTick, onUnmounted, computed, watch } = Vue;
import { MyComponent } from "../component/item-forum/item-forum.js";
import { itemForum } from "../component/item-forum/item-forum.js";
const appSectionIndex = createApp({
setup() {
@@ -8,5 +8,5 @@ const appSectionIndex = createApp({
return { signInAlreadyState };
},
});
appSectionIndex.component("MyComponent", MyComponent);
appSectionIndex.component("item-forum", itemForum);
appSectionIndex.mount("#sectionIndex");

View File

@@ -5,6 +5,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="./css/public.css" />
<link rel="stylesheet" href="./css/sectionIndex.css" />
<script src="./js/vue.global.js"></script>
</head>