This commit is contained in:
oneao committed 2025-12-21 22:34:51 +08:00
1 parent 898d209594
commit 0189bf89c9
31 files changed
+745 -3

No files matched your search

@@ -34,7 +34,7 @@ public class FilePO {
private String createTime;
@TableField(
value = "b_create_by",
value = "b_create_user_id",
fill = FieldFill.INSERT
)
private String createBy;
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostCommentPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostCommentMapper extends BaseMapper<PostCommentPO> {
}
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostFavoritePO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostFavoriteMapper extends BaseMapper<PostFavoritePO> {
}
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostLikePO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostLikeMapper extends BaseMapper<PostLikePO> {
}
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostMapper extends BaseMapper<PostPO> {
}
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostTagPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostTagMapper extends BaseMapper<PostTagPO> {
}
@@ -0,0 +1,9 @@
package cn.link56.forum.mapper;
import cn.link56.forum.model.po.PostViewPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PostViewMapper extends BaseMapper<PostViewPO> {
}
@@ -0,0 +1,39 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post_comment")
public class PostCommentPO {
@TableId(value = "b_id")
private Long id;
@TableField("b_father_id")
private Long fatherId;
@TableField("b_post_id")
private Long postId;
@TableField("b_content")
private String content;
@TableField(
value = "b_create_user_id",
fill = FieldFill.INSERT
)
private Long createUserId;
@TableField(
value = "b_create_time",
fill = FieldFill.INSERT
)
private Long createTime;
}
@@ -0,0 +1,30 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post_favorite")
public class PostFavoritePO {
@TableId(value = "b_id")
private Long id;
@TableField("b_post_id")
private Long postId;
@TableField("b_user_id")
private Long userId;
@TableField(
value = "b_create_time",
fill = FieldFill.INSERT
)
private Long createTime;
}
@@ -0,0 +1,30 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post_like")
public class PostLikePO {
@TableId(value = "b_id")
private Long id;
@TableField("b_post_id")
private Long postId;
@TableField("b_user_id")
private Long userId;
@TableField(
value = "b_create_time",
fill = FieldFill.INSERT
)
private Long createTime;
}
@@ -0,0 +1,60 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post")
public class PostPO {
@TableId(value = "b_id")
private Long id;
@TableField("b_company_id")
private Long companyId;
@TableField("b_title")
private String title;
@TableField("b_content")
private String content;
@TableField("b_summary")
private String summary;
@TableField("b_tags")
private String tags;
@TableField("b_cover")
private String cover;
@TableField(
value = "b_create_user_id",
fill = FieldFill.INSERT
)
private Long createUserId;
@TableField(
value = "b_create_time",
fill = FieldFill.INSERT
)
private Long createTime;
@TableField(
value = "b_update_user_id",
fill = FieldFill.INSERT_UPDATE
)
private Long updateUserId;
@TableField(
value = "b_update_time",
fill = FieldFill.INSERT_UPDATE
)
private Long updateTime;
}
@@ -0,0 +1,23 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post_tag")
public class PostTagPO {
@TableId(value = "b_id")
private Long id;
@TableField("b_name")
private String name;
@TableField("b_canuse")
private String canuse;
}
@@ -0,0 +1,30 @@
package cn.link56.forum.model.po;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("b_post_view")
public class PostViewPO {
@TableId(value = "b_id")
private Long id;
@TableField("b_post_id")
private Long postId;
@TableField("b_user_id")
private Long userId;
@TableField(
value = "b_create_time",
fill = FieldFill.INSERT
)
private Long createTime;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostCommentMapper;
import cn.link56.forum.model.po.PostCommentPO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostCommentService extends ServiceImpl<PostCommentMapper, PostCommentPO> {
@Resource
private PostCommentMapper postCommentMapper;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostFavoriteMapper;
import cn.link56.forum.model.po.PostFavoritePO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostFavoriteService extends ServiceImpl<PostFavoriteMapper, PostFavoritePO> {
@Resource
private PostFavoriteMapper postFavoriteMapper;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostLikeMapper;
import cn.link56.forum.model.po.PostLikePO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostLikeService extends ServiceImpl<PostLikeMapper, PostLikePO> {
@Resource
private PostLikeMapper postLikeMapper;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostMapper;
import cn.link56.forum.model.po.PostPO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostService extends ServiceImpl<PostMapper, PostPO> {
@Resource
private PostMapper postMapper;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostTagMapper;
import cn.link56.forum.model.po.PostTagPO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostTagService extends ServiceImpl<PostTagMapper, PostTagPO> {
@Resource
private PostTagMapper postTagMapper;
}
@@ -0,0 +1,14 @@
package cn.link56.forum.service;
import cn.link56.forum.mapper.PostViewMapper;
import cn.link56.forum.model.po.PostViewPO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class PostViewService extends ServiceImpl<PostViewMapper, PostViewPO> {
@Resource
private PostViewMapper postViewMapper;
}
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg height="1024" node-id="1" sillyvg="true" template-height="1024" template-width="1630" version="1.1" viewBox="0 0 1630 1024" width="1630" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs node-id="22"></defs><g node-id="24"><path d="M 160.10 945.65 C -58.52 945.76 195.58 608.18 322.49 569.93 C 432.18 536.92 434.81 618.46 568.42 637.49 C 920.85 687.62 1085.93 212.99 1278.57 287.35 C 1401.11 334.87 1475.64 491.61 1425.96 667.56 C 1397.52 767.96 1317.69 907.04 1281.11 945.65 C 1090.59 945.58 934.29 945.58 812.22 945.65 C 593.60 945.76 378.72 945.53 160.10 945.65 Z" fill="#f0f1f9" fill-rule="nonzero" group-id="1" id="bg" node-id="6" stroke="none" target-height="732.7776" target-width="1534.1641" target-x="-58.52308" target-y="212.98712"></path><g node-id="25"><path d="M 530.87 377.18 L 1297.70 404.54 C 1311.44 405.03 1322.19 416.57 1321.70 430.31 C 1321.65 431.63 1321.50 432.94 1321.24 434.24 L 1219.96 948.69 C 1217.79 959.73 1207.59 967.31 1196.39 966.22 L 530.87 901.43 L 530.87 901.43 L 530.87 377.18 Z" fill="#3681fd" fill-rule="evenodd" group-id="1,2" id="路径-11" node-id="8" stroke="#555555" stroke-linecap="butt" stroke-width="9.309091" target-height="590.1376" target-width="791.31384" target-x="530.87366" target-y="377.1764"></path><g node-id="26"><path d="M 1418.25 252.37 C 1418.25 252.37 1182.83 305.68 1236.56 403.86 C 1252.71 433.38 1309.07 448.83 1326.99 422.25 C 1338.90 404.59 1347.94 397.55 1341.14 347.38 C 1334.26 296.57 1193.18 297.62 1166.01 364.28 C 1147.90 408.72 1137.29 451.35 1134.18 492.17" fill="none" group-id="1,2,3" id="路径-5" node-id="9" stroke="#555555" stroke-dasharray="43.72627 43.72627" stroke-linecap="butt" stroke-opacity="0.2" stroke-width="8.994358" target-height="239.79517" target-width="284.06567" target-x="1134.1833" target-y="252.37048"></path></g><path d="M 461.08 201.26 L 409.12 764.21 L 409.12 764.21 L 1180.82 962.27 C 1190.78 964.83 1200.93 958.83 1203.49 948.87 C 1203.85 947.45 1204.05 945.99 1204.07 944.52 L 1215.73 173.99 C 1215.94 160.24 1204.96 148.92 1191.21 148.72 C 1190.73 148.71 1190.25 148.72 1189.78 148.74 L 484.82 178.67 C 472.37 179.19 462.22 188.85 461.08 201.26 Z" fill="#ffffff" fill-rule="evenodd" group-id="1,2" id="路径-10" node-id="10" stroke="#555555" stroke-linecap="butt" stroke-width="9.309091" target-height="816.11804" target-width="806.81934" target-x="409.1222" target-y="148.70956"></path><path d="M 418.56 412.38 L 547.77 412.38 L 613.57 484.43 L 1055.52 484.43 L 1169.69 789.58 L 481.66 729.94 Z" fill="#3681fd" fill-rule="evenodd" group-id="1,2" id="矩形备份-2" node-id="11" stroke="none" target-height="377.20624" target-width="751.12854" target-x="418.5631" target-y="412.3786"></path><g node-id="27"><path d="M 1302.40 211.10 L 1387.75 259.69 L 1458.41 211.09 L 1412.41 273.78 L 1495.93 307.56 L 1563.84 131.21 Z" fill="#3681fd" fill-rule="evenodd" group-id="1,2,4" id="路径-4" node-id="12" stroke="none" target-height="176.34915" target-width="261.44397" target-x="1302.3955" target-y="131.20853"></path></g><path d="M 323.66 947.72 L 1189.18 967.53 C 1201.26 967.80 1211.27 958.24 1211.54 946.17 C 1211.58 944.66 1211.45 943.14 1211.17 941.65 L 1137.12 545.92 L 1137.12 545.92 L 553.80 544.05 L 417.85 378.20 L 181.36 363.49 L 315.11 940.75 C 316.03 944.76 319.56 947.62 323.66 947.72 Z" fill="#ffffff" fill-rule="evenodd" group-id="1,2" id="路径-7" node-id="13" stroke="#555555" stroke-linecap="butt" stroke-width="9.309091" target-height="604.31415" target-width="1030.2188" target-x="181.35751" target-y="363.49078"></path><path d="M 339.90 472.48 L 491.02 475.24 L 551.02 548.52 L 941.92 548.52 L 1042.31 762.66 L 428.19 746.71 Z" fill="#eff0f9" fill-rule="evenodd" group-id="1,2" id="矩形备份-2" node-id="14" stroke="none" target-height="290.18347" target-width="702.4082" target-x="339.90186" target-y="472.47754"></path><path d="M 722.23 839.60 C 719.54 842.37 717.00 845.64 714.60 849.40 C 710.98 855.09 709.02 861.68 708.92 868.44 C 708.65 888.37 724.41 904.74 744.12 905.02 L 746.63 904.92 C 763.20 903.33 780.81 884.70 784.45 869.44 C 792.62 835.13 748.18 812.89 722.23 839.60 Z M 773.86 866.77 C 771.24 877.79 757.01 892.83 745.86 893.91 L 743.94 893.99 C 730.59 893.79 719.66 882.44 719.85 868.63 C 719.92 863.94 721.28 859.37 723.79 855.43 C 725.81 852.26 727.91 849.56 730.07 847.34 C 747.99 828.89 777.64 842.96 774.24 864.87 L 773.86 866.77 Z" fill="#555555" fill-rule="nonzero" group-id="1,2" id="路径-3备份" node-id="15" stroke="none" target-height="92.13165" target-width="83.96948" target-x="708.65137" target-y="812.8887"></path><path d="M 900.24 835.76 C 898.77 835.70 897.27 835.71 895.74 835.78 C 886.42 836.21 877.56 840.07 870.85 846.64 C 855.72 861.46 855.32 885.81 869.94 901.04 L 871.88 902.87 C 885.88 914.91 913.31 915.54 927.28 907.28 C 958.71 888.67 939.60 837.1Line truncated

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -0,0 +1,90 @@
<script lang="ts" setup>
import { computed } from 'vue'
const props = defineProps({
title: {
type: String,
},
subTitle: {
type: String,
},
inContainer: {
type: Boolean,
default: false,
},
})
const containerClass = computed(() => {
return props.inContainer ? 'container-inner' : 'container-fixed'
})
</script>
<template>
<div :class="containerClass">
<div class="empty-wrapper">
<img class="empty-image" src="/no-data.svg">
<div v-if="title" class="empty-title">
{{ title }}
</div>
<div v-if="subTitle" class="empty-subtitle">
{{ subTitle }}
</div>
<div v-if="$slots.extra" class="empty-extra">
<slot name="extra" />
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.container-inner {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.container-fixed {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.empty-wrapper {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: 24px;
}
.empty-image {
width: 360px;
max-width: 100%;
}
.empty-title {
margin-top: 24px;
font-size: 24px;
font-weight: 600;
color: #333;
line-height: 1.4;
}
.empty-subtitle {
margin-top: 12px;
font-size: 18px;
color: #666;
line-height: 1.6;
max-width: 360px;
}
.empty-extra {
margin-top: 28px;
}
</style>
@@ -0,0 +1,76 @@
<script lang="ts" setup>
import { computed } from 'vue'
const props = defineProps({
inContainer: {
type: Boolean,
default: false,
},
})
const containerClass = computed(() => {
return props.inContainer ? 'container-inner' : 'container-fixed'
})
</script>
<template>
<div :class="containerClass">
<!-- From Uiverse.io by nazeer004 -->
<div class="loader">
<span>link56.net</span>
<span>link56.net</span>
</div>
</div>
</template>
<style lang="scss" scoped>
.container-inner {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.container-fixed {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/* From Uiverse.io by nazeer004 */
.loader {
position: relative;
}
.loader span {
position: absolute;
color: #fff;
transform: translate(-50%, -50%);
font-size: 38px;
letter-spacing: 5px;
}
.loader span:nth-child(1) {
color: transparent;
-webkit-text-stroke: 0.3px rgb(0, 57, 244);
}
.loader span:nth-child(2) {
color: rgb(0, 4, 255);
-webkit-text-stroke: 1px rgb(17, 0, 255);
animation: uiverse723 3s ease-in-out infinite;
}
@keyframes uiverse723 {
0%,
100% {
clip-path: polygon(0% 45%, 15% 44%, 32% 50%, 54% 60%, 70% 61%, 84% 59%, 100% 52%, 100% 100%, 0% 100%);
}
50% {
clip-path: polygon(0% 60%, 16% 65%, 34% 66%, 51% 62%, 67% 50%, 84% 45%, 100% 46%, 100% 100%, 0% 100%);
}
}
</style>
@@ -13,8 +13,8 @@ const userStore = useUserStore()
const menuList = [
{ name: '首页', path: '/' },
{ name: '企业名录', path: '/company' },
{ name: '论坛中心', path: '/forum' },
{ name: '关于我们', path: '/companies' },
{ name: '论坛中心', path: '/post' },
{ name: '关于我们', path: '/aboutus' },
{ name: '联系我们', path: '/forum' },
]
@@ -18,6 +18,19 @@ const router = createRouter({
path: '/company',
component: () => import('@/views/company/index.vue'),
},
{
path: '/post',
children: [
{
path: '',
component: () => import('@/views/post/home/index.vue'),
},
],
},
{
path: '/aboutus',
component: () => import('@/views/aboutus/index.vue'),
},
{
path: '/company/detail',
component: () => import('@/views/company/detail/index.vue'),
@@ -13,6 +13,8 @@ declare module 'vue' {
export interface GlobalComponents {
AnchorMenu: typeof import('./../components/anchor-menu/index.vue')['default']
AreaSelect: typeof import('./../components/AreaSelect.vue')['default']
CustomEmpty: typeof import('./../components/CustomEmpty.vue')['default']
CustomLoading: typeof import('./../components/custom-loading/index.vue')['default']
Directory: typeof import('./../components/wang-editor/modules/directory.vue')['default']
EmailCodeInput: typeof import('./../components/EmailCodeInput.vue')['default']
HelloWorld: typeof import('./../components/HelloWorld.vue')['default']
@@ -0,0 +1,12 @@
<script lang="ts" setup>
import { ref } from 'vue'
</script>
<template>
<div>123</div>
</template>
<style lang="scss" scoped>
//
</style>
@@ -0,0 +1,10 @@
<script lang="ts" setup>
</script>
<template>
<div class="" />
</template>
<style lang="scss" scoped>
//
</style>
@@ -0,0 +1,146 @@
<script lang="ts" setup>
import { ref } from 'vue'
import CustomLoading from '@/components/custom-loading/index.vue'
import CustomEmpty from '@/components/CustomEmpty.vue'
const loading = ref<boolean>(false)
const dataResult = ref<BasePageResult<any>>({
total: 0,
records: [],
})
</script>
<template>
<div v-if="loading">
<CustomLoading />
</div>
<CustomEmpty v-else-if="dataResult.total === 0" title="🍵 帖子空空如也" sub-title="快来创建第一个贴子吧">
<template #extra>
<el-button type="primary">
创建帖子
</el-button>
</template>
</CustomEmpty>
<div v-else class="post-container">
</div>
</template>
<style lang="scss" scoped>
.post-container {
height: 100%;
margin-bottom: 40px;
}
.post-list {
display: flex;
flex-direction: column;
}
.post-item {
width: 100%;
display: flex;
gap: 16px;
padding: 16px;
background-color: #ffffff;
transition: all 0.3s ease;
border-bottom: 1px solid #f6f6f6;
}
.post-content {
display: flex;
gap: 16px;
flex-direction: column;
justify-content: space-between;
width: 100%;
}
.post-title {
font-weight: blod;
font-size: 18px;
width: 500px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #005da6;
text-decoration: underline;
font-weight: bold;
cursor: pointer;
}
.post-title:hover {
color: #fa8c16;
}
.post-summary {
font-size: 13px;
color: #999;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-clamp: 2;
box-orient: vertical;
}
.post-footer {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
}
.post-meta {
display: flex;
color: #777;
.post-meta-item {
display: flex;
align-items: center;
gap: 4px;
font-size: 14px;
}
}
.post-author {
max-width: 300px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 14px;
}
.post-tags {
max-width: 300px;
display: flex;
gap: 8px;
flex-wrap: wrap;
.post-tag {
background-color: #165dff;
border-radius: 2px;
font-size: 10px;
padding: 4px 8px;
text-align: center;
color: #ffffff;
display: inline-block;
line-height: 12px;
max-width: 80px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.post-cover {
width: 180px;
overflow: hidden;
max-height: 140px;
min-height: 120px;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
.spin-container {
display: flex;
align-items: center;
justify-content: center;
margin: 24px 0px;
}
</style>
@@ -0,0 +1,10 @@
<script lang="ts" setup>
</script>
<template>
<div class=""></div>
</template>
<style lang="scss" scoped>
//
</style>
@@ -0,0 +1,31 @@
<script lang="ts" setup>
import Nav from './components/nav.vue' // 导航栏组件
import PostList from './components/post-list.vue' // 帖子列表组件
import Sidebar from './components/sidebar.vue' // 推荐组件
</script>
<template>
<div class="post">
<Nav class="nav" />
<PostList class="post-list" />
<Sidebar class="sidebar" />
</div>
</template>
<style lang="scss" scoped>
.post {
display: flex;
padding: 0px 60px;
width: 100%;
}
.nav {
width: 200px;
}
.sidebar {
width: 250px;
margin-left: 20px;
}
.post-list {
flex: 1;
}
</style>
@@ -68,6 +68,7 @@ const dataResult = reactive<BasePageResult<ForumPostPageResult>>({
total: 0,
record: []
});
const loading = ref<boolean>(true);
const searchParams = reactive<ForumPostPageParams>({