- 编辑器投稿页布局优化:标题与编辑器高度动态适配,工具栏与内容区视觉对齐 - 稿件展示页布局优化:MD 渲染区与评论区视觉分离,代码块主题微调 - CSRF 中间件:图像上传端点豁免,解决 Vditor 拖拽/粘贴上传 403 - Post 状态映射、GetGinUser、SaveUploadedFile 提取至 common 包,遵循审计建议 - 新增个人空间功能:/space(需登录)重定向到 /space/:uid,/space/:uid 公开访问 - 空间页模板:参考 B 站布局,展示头像、用户名、个性签名、UID、加入时间及稿件列表 - 导航栏:用户名链接指向 /space,新增「设置」入口 - 分层实现:SpaceController → SpaceService → PostRepo.FindByUserID,严格 ISP 接口隔离
94 lines
3.3 KiB
HTML
94 lines
3.3 KiB
HTML
{{template "layout/header.html" .}}
|
|
<body>
|
|
|
|
{{template "layout/nav.html" .}}
|
|
|
|
{{if .Error}}
|
|
<div class="space-error">
|
|
<div class="container">
|
|
<h1>{{.Error}}</h1>
|
|
<a href="/" class="btn btn-primary">返回首页</a>
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
<div class="space-page">
|
|
<!-- 用户信息头部 -->
|
|
<div class="space-header">
|
|
<div class="container space-header-inner">
|
|
<div class="space-avatar">
|
|
{{if .SpaceUser.Avatar}}
|
|
<img src="{{.SpaceUser.Avatar}}" alt="{{.SpaceUser.Username}}">
|
|
{{else}}
|
|
<div class="space-avatar-placeholder">{{slice .SpaceUser.Username 0 1}}</div>
|
|
{{end}}
|
|
</div>
|
|
<div class="space-info">
|
|
<h1 class="space-username">{{.SpaceUser.Username}}</h1>
|
|
<p class="space-bio">{{if .SpaceUser.Bio}}{{.SpaceUser.Bio}}{{else}} {{end}}</p>
|
|
<div class="space-meta">
|
|
<span class="space-uid">UID: {{.SpaceUser.ID}}</span>
|
|
<span class="space-divider">·</span>
|
|
<span class="space-joined">加入于 {{.SpaceUser.CreatedAt.Format "2006-01-02"}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 内容区域 -->
|
|
<div class="container space-content">
|
|
<!-- 统计栏 -->
|
|
<div class="space-stats">
|
|
<div class="space-stat-item">
|
|
<span class="space-stat-num">{{.Total}}</span>
|
|
<span class="space-stat-label">稿件</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 稿件列表 -->
|
|
<div class="space-section">
|
|
<h2 class="space-section-title">稿件</h2>
|
|
|
|
{{if eq (len .Posts) 0}}
|
|
<div class="empty-state">暂无稿件</div>
|
|
{{else}}
|
|
<div class="space-posts-list">
|
|
{{range .Posts}}
|
|
<article class="space-post-card">
|
|
<div class="space-post-main">
|
|
<h3 class="space-post-title">
|
|
<a href="/posts/{{.ID}}">{{.Title}}</a>
|
|
</h3>
|
|
<p class="space-post-excerpt">{{if .Excerpt}}{{.Excerpt}}{{else}}{{printf "%.200s" .Body}}{{end}}</p>
|
|
<div class="space-post-meta">
|
|
<span class="space-post-status">已发布</span>
|
|
<span class="space-post-time">{{.CreatedAt.Format "2006-01-02"}}</span>
|
|
</div>
|
|
</div>
|
|
</article>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
|
|
<!-- 分页 -->
|
|
{{if gt .TotalPages 1}}
|
|
<div class="pagination">
|
|
{{if gt .Page 1}}
|
|
<a href="?page={{.PrevPage}}" class="page-link">上一页</a>
|
|
{{end}}
|
|
<span class="page-info">第 {{.Page}} / {{.TotalPages}} 页 (共 {{.Total}} 条)</span>
|
|
{{if lt .Page .TotalPages}}
|
|
<a href="?page={{.NextPage}}" class="page-link">下一页</a>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{template "layout/footer.html" .}}
|
|
|
|
<script src="/static/js/common.js"></script>
|
|
</body>
|
|
</html>
|