fix(forum): align forum pages with the reference layout

- cards: restore the shared card shell, add author follow/message actions,
  score group, last-reply meta and reference plate header actions
- home: desktop left tab rail, widget-only sidebar, reference load-more markup
- plate: 1-based tabs, reference defaults (全部/推荐/最新回复/热门/精华)
- post: fixed action rail, score footer, author card, h1 article title
- quick publish: plate selector moved into the submit row like the reference
This commit is contained in:
kate522 committed 2026-11-11 18:06:33 +08:00
1 parent 7a59c65252
commit ec5dfcd82f
15 files changed
+396 -166

No files matched your search

+105 -45
View File
@@ -24,44 +24,44 @@
#forum .jio-forum__tabs a{padding:14px 0;color:var(--forum-muted);border-bottom:2px solid transparent}
#forum .jio-forum__tabs .is-active{color:var(--forum-accent);border-color:var(--forum-accent);font-weight:600}
/* ── 论坛首页:栏目 TAB ─────────────────────────────────────────── */
/* ── 论坛首页:栏目 TAB(桌面端为左侧竖排导航,移动端横排滑动) ───────── */
#forum.forum-home{padding-bottom:40px}
.forum-home .forum-home__main{min-width:0}
.forum-home .content-layout{min-width:0}
.forum-home-tab .fixed-wrap-nav{margin-bottom:10px}
.forum-home-tab .tab-nav-theme{border-bottom:none;padding:0;margin:0}
.forum-home-tab .tab-nav-theme li{padding:0 2px}
.forum-home-tab .tab-nav-theme li > a{display:block;padding:10px 12px;font-size:16px;color:var(--muted-2-color)}
.forum-home-tab .tab-nav-theme li.active > a{color:var(--focus-color);font-weight:600}
.forum-home-tab .tab-nav-theme li{padding:0}
.forum-home-tab .tab-nav-theme li > a{display:block;padding:6px;margin:1px 0;font-size:16px;color:var(--muted-2-color);overflow:hidden}
.forum-home-tab .tab-nav-theme li > a:hover{color:var(--main-color)}
.forum-home-tab .tab-nav-theme li.active > a{color:var(--focus-color);font-weight:500;background:var(--focus-color-opacity05);border-radius:var(--mini-radius)}
.forum-home-tab .tab-nav-theme li::before{display:none}
.forum-home-tab .tab-content > .tab-pane{display:none}
.forum-home-tab .tab-content > .tab-pane.active{display:block}
.forum-main-tab-content{min-height:120px}
.forum-more{padding:20px 0;text-align:center}
.forum-more.is-loading{display:none}
.forum-tab-pane > .ajax-item:last-of-type{margin-bottom:0}
/* 首页栏目是横向 TAB,覆盖通用 .fixed-wrap 的竖排侧栏导航形态 */
@media (min-width:768px){
.forum-home-tab{--fixed-width:auto}
.forum-home-tab > .fixed-wrap-nav{position:static;width:auto}
.forum-home-tab > .fixed-wrap-nav + .fixed-wrap-content{margin-left:0}
.forum-home-tab .fixed-wrap-nav.affix{position:sticky;left:auto;right:auto;width:auto;z-index:11;background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow)}
.forum-home-tab .tab-nav-theme.mini-scrollbar,
.forum-home-tab .tab-nav-theme.swiper-scroll .swiper-wrapper{flex-direction:row;overflow-x:auto;overflow-y:hidden;text-align:left;white-space:nowrap;border-bottom:none;margin:0;padding:0}
.forum-home-tab .tab-nav-theme.mini-scrollbar > li,
.forum-home-tab .tab-nav-theme.swiper-scroll .swiper-wrapper > li{display:inline-block;padding:0;margin:0}
@media (max-width:767px){
.forum-home-tab .fixed-wrap-nav:not(.affix):not(.affix-bottom){margin-bottom:10px;padding:0 5px;background:transparent;box-shadow:none}
.forum-home-tab .tab-nav-theme{display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;text-align:left;white-space:nowrap;border-bottom:none;margin:0;padding:0}
.forum-home-tab .tab-nav-theme > li{display:inline-block;padding:0;margin:0;flex:0 0 auto}
.forum-home-tab .tab-nav-theme > li > a{padding:8px 10px;margin:0;font-size:15px;background:none!important}
}
.quick-posts-box{border-radius:var(--main-radius);padding:15px}
.quick-posts-box .title-theme{margin-bottom:10px}
.quick-input-group{padding:15px;border:1px solid var(--main-border-color);border-radius:var(--main-radius)}
.quick-posts-box .edit-posts-title{position:relative}
.quick-posts-box .edit-posts-title .line-form-line{display:none}
.quick-posts-box .edit-posts-title textarea{width:100%;color:var(--main-color);padding:0;margin-bottom:10px;font-weight:500;font-size:18px;border:0;border-bottom:1px solid var(--main-border-color);background:transparent;resize:none;outline:0}
.quick-posts-box .edit-posts-content textarea{outline:0!important;border:none;display:block;width:100%;padding:0;background:transparent;color:var(--main-color);resize:vertical;min-height:88px}
.quick-posts-box .edit-posts-title textarea{width:100%;color:var(--main-color);opacity:1;padding:0;margin-bottom:10px;font-weight:500;font-size:18px;border:0;border-bottom:1px solid var(--main-border-color);background:transparent;resize:none;outline:0}
.quick-posts-box .edit-posts-content textarea{outline:0!important;border:none;display:block;width:100%;padding:0;margin-bottom:10px;background:var(--main-bg-color);opacity:.9;color:var(--main-color);resize:vertical;min-height:88px}
.quick-posts-box .preview .add,.quick-posts-box .preview .preview-item{width:90px;height:90px;border:1px dashed var(--main-border-color);background:none;margin:2px;border-radius:var(--main-radius);position:relative}
.quick-posts-box .preview .add:before{content:"+";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:28px;color:var(--muted-3-color)}
.quick-posts-box .drop-select .dropdown-menu{min-width:320px}
.quick-more-btns{color:var(--muted-color);position:relative;flex-wrap:wrap;gap:6px}
.quick-more-btns .drop-btn{padding:6px 4px;cursor:pointer}
.quick-posts-box .dropdown-menu.fluid::before{left:20px}
.quick-posts-box .but-plate{font-size:14px;padding:5px 9px 6px 5px}
.quick-more-btns{color:var(--muted-color);position:relative;flex-wrap:wrap}
.quick-more-btns .drop-btn{padding:6px 4px;cursor:pointer;white-space:nowrap}
.quick-more-btns .drop-select{position:relative}
.quick-selected-tags > *{display:inline-block}
.quick-selected-tags > *:empty{display:none}
.quick-selected-tags [name="topics"]{color:var(--focus-color);margin-top:6px;font-size:13px}
.quick-posts-submit .but{padding:6px 5px;min-width:85px}
.quick-posts-submit .quick-captcha{margin-bottom:8px}
.hide-type-drop .select-drop-box .badg.active{--this-bg:var(--focus-color);--this-color:#fff}
@@ -75,6 +75,15 @@
.quick-posts-form .jio-forum__message:empty{display:none}
.forum-pending-plate{background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow);border-radius:var(--main-radius);padding:12px 15px;margin-bottom:10px}
/* ── 论坛首页 / 版块页的加载更多(与主题 AJAX 翻页按钮同构) ───────── */
.forum-tab-pane .theme-pagination,.plate-tab .theme-pagination{margin:0}
.forum-tab-pane .theme-pagination.ajax-pag,.plate-tab .theme-pagination.ajax-pag{padding:15px 5px 10px}
.forum-tab-pane .theme-pagination .ajax-next a,.plate-tab .theme-pagination .ajax-next a{color:var(--muted-color);opacity:.6;border-radius:30px;padding:5px 15px;display:inline-block}
.forum-tab-pane .theme-pagination .ajax-next a:hover,.plate-tab .theme-pagination .ajax-next a:hover{background:var(--main-border-color);opacity:1}
.forum-tab-pane .theme-pagination .ajax-next .fa,.plate-tab .theme-pagination .ajax-next .fa{margin-right:15px;transition:.3s}
.forum-tab-pane .theme-pagination .ajax-next a:hover .fa,.plate-tab .theme-pagination .ajax-next a:hover .fa{margin-right:8px}
.forum-tab-pane.is-loading .theme-pagination,.plate-tab .forum-tab-pane.is-loading .theme-pagination{display:none}
/* ── 版块面板 / 版块卡片 ────────────────────────────────────────── */
.panel.panel-plate{border-color:transparent;margin-bottom:10px;background:var(--main-bg-color);border-radius:var(--main-radius);box-shadow:0 0 10px var(--main-shadow);padding:0 15px}
.panel.panel-plate:first-of-type .panel-title{padding-top:10px}
@@ -94,9 +103,10 @@
.scroll-plate .plate-card.mini{padding:15px 5px;width:85px}
.scroll-plate .plate-card .plate-thumb{width:50px!important;height:50px!important}
.follow-plate .plate-card{width:90px}
.plate-item{display:inline-flex;align-items:flex-start}
.plate-item{display:inline-flex}
.plate-lists{display:flex;align-content:flex-start;flex-flow:row wrap;margin:-3px}
.plate-lists .plate-item{margin:3px;background:var(--main-bg-color);box-shadow:0 0 10px var(--main-shadow);border-color:transparent;border-radius:var(--main-radius);padding:15px 20px;width:calc(50% - 6px);position:relative;box-sizing:border-box}
.sidebar .plate-lists .plate-item{width:calc(100% - 6px)}
.plate-item .plate-thumb{margin-right:15px;flex-shrink:0;display:inline-block;width:60px;height:60px;position:relative}
.plate-item .plate-thumb > img,.plate-thumb > img{border-radius:100px;width:100%;height:100%}
.plate-item .forum-thumbnail{transition:all .2s;object-fit:cover;width:100%;height:100%}
@@ -165,10 +175,10 @@
.forum-posts.detail .user-info ~ *{margin-left:70px}
.forum-posts.detail .user-info .display-name{font-size:16px}
.forum-posts.detail .action-meta .btn-score:hover,.forum-posts.detail .action-meta a.item:hover{background:var(--main-border-color)}
.forum-header .buts .but{min-width:87px}
.blur-header .count-mates{--main-border-color:rgba(255,255,255,.08)}
}
@media(max-width:800px){
#forum .jio-forum__layout{grid-template-columns:1fr}
#forum .jio-forum__aside{border-left:0;padding-left:0}
.forum-home .sidebar{width:100%;margin-left:0;margin-top:20px}
.forum-home .content-layout{margin-right:0!important;margin-left:0!important}
}
@@ -301,35 +311,53 @@ body.dark-theme .panel.panel-plate,body.dark-theme .plate-lists .plate-item,body
body.dark-theme .forum-header,body.dark-theme .forum-header .header-content{background:var(--main-bg-color)}
/* ── 版块 / 分类页面 ──────────────────────────────────────────── */
.forum-listing .jio-forum__breadcrumbs{margin:0 0 12px}
.forum-listing .jio-forum__list-main{min-width:0}
.forum-listing .content-layout{min-width:0}
.term-main{max-width:790px;margin:0 auto 20px}
.plate-tab{padding:0}
.plate-tab .affix-header-sm{padding:0 15px;background:var(--main-bg-color);border-radius:var(--main-radius) var(--main-radius) 0 0}
.plate-tab .affix-header-sm.affix,.plate-tab .affix-header-sm.affix-bottom{padding:8px 25px}
.plate-tab .tab-nav-theme{margin:0;border-bottom:1px solid var(--main-border-color)}
.plate-tab .tab-nav-theme li a{font-size:16px;color:var(--muted-2-color);display:block;padding:12px 14px}
.plate-tab .tab-nav-theme li.active a{font-weight:bold;color:var(--focus-color)}
.plate-tab .tab-nav-theme{margin:0}
.plate-tab .tab-nav-theme li a{font-size:16px;color:var(--muted-2-color);display:block;padding:0 5px}
.plate-tab .tab-nav-theme li.active a{font-weight:700;color:var(--focus-color)}
.plate-tab .tab-content{padding:10px 15px}
.plate-tab .tab-content > .tab-pane{display:none}
.plate-tab .tab-content > .tab-pane.active{display:block}
.plate-tab .forum-tab-pane{min-height:120px}
.forum-header.blur-header{overflow:hidden;color:#fff}
.forum-header.blur-header .header-content{background:transparent;color:#fff;padding:28px 30px 22px}
.forum-header.blur-header .forum-title,.forum-header.blur-header .forum-title a{color:#fff}
.forum-header.blur-header{overflow:hidden;color:#ddd}
.forum-header.blur-header .header-content{background:none;color:#fff;padding:70px 50px 50px}
.forum-header.blur-header .forum-title,.forum-header.blur-header .forum-title a,.forum-header.blur-header a{color:#fff}
.forum-header.blur-header .desc,.forum-header.blur-header .px12-sm{color:rgba(255,255,255,.86)}
.forum-header .abs-blur-bg img{width:100%;height:100%;object-fit:cover}
.forum-header .forum-mask{position:absolute;inset:0;background:rgba(76,80,87,.6)}
.forum-header.blur-header .plate-thumb{width:90px;height:90px;flex-shrink:0}
.forum-header.blur-header .plate-thumb > img{border-radius:var(--main-radius)}
.forum-header.blur-header .plate-thumb{width:115px;height:115px;flex-shrink:0}
.forum-header.blur-header .plate-thumb > img{border-radius:4px}
.forum-header .more-btns{position:absolute;right:5px;top:3px;z-index:1;justify-content:flex-end}
.forum-header .more-btns .item{padding:5px 7px;opacity:.8;font-size:1.2em;color:#fff;border:0;background:none;cursor:pointer}
.forum-header .more-btns .item text{display:none}
.forum-header .moderator-btns{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.forum-header .moderator-btns .avatar-mini{--this-size:22px;margin-right:4px}
.forum-header .moderator-btns .avatar-mini img{border-radius:100px}
.forum-header .moderator-btns .but{font-size:12px;padding:3px 10px}
.forum-header .moderator-btns .avatar-mini{--this-size:22px;margin-right:4px;display:inline-block}
.forum-header .moderator-btns .avatar-mini img{border-radius:100px;width:100%;height:100%}
.forum-header .moderator-btns .but{font-size:12px;padding:3px 10px;line-height:21px;min-width:90px}
.forum-header .count-mates{margin-top:10px}
.forum-header .count-mates item{display:inline-block}
.forum-header .count-mates > item + item{border-left:1px solid rgba(255,255,255,.08);padding-left:20px;margin-left:20px}
.blur-header .c-white{--this-bg:rgba(255,255,255,.12);--this-color:#fff}
.forum-header .more-btns .btn-follow{color:#fff;border:0;background:none;cursor:pointer;opacity:.85;padding:5px 7px;font-size:1.2em}
.forum-header .more-btns .btn-follow.active{color:#ff7800;opacity:1}
/* ── 帖子详情页 ───────────────────────────────────────────────── */
.forum-post .single-wrap{width:100%}
.single-fixed-btns{display:none}
@media (min-width:768px){
.forum-post .fixed-wrap-nav.single-fixed-btns{display:block}
.single-fixed-btns .score-btns{display:block;text-align:center}
.single-fixed-btns .score-btns text{display:block;font-size:12px;color:var(--muted-2-color);min-width:30px;margin:5px}
.single-fixed-btns .btn-score{font-size:24px;color:var(--muted-color);display:inline-flex;align-items:center}
.single-fixed-btns .btn-score.extra.active{color:#40a1ff}
.single-fixed-btns .btn-score.deduct.active{color:#ff556d}
}
.forum-single-cover{border-radius:var(--main-radius);overflow:hidden}
.forum-article{padding:20px 26px}
.forum-article{padding:0 30px;overflow:hidden}
.forum-article .article-header{margin-bottom:15px;padding-bottom:12px;margin-top:5px;border-bottom:1px solid var(--main-border-color)}
.forum-article .article-title{font-size:24px;line-height:1.4;margin:0 0 10px;font-weight:600}
.forum-article .article-title a{color:var(--key-color)}
@@ -340,18 +368,32 @@ body.dark-theme .forum-header,body.dark-theme .forum-header .header-content{back
.forum-article .wp-posts-content{font-size:15px;line-height:1.9;overflow-wrap:anywhere}
.forum-article .article-tags{display:flex;flex-wrap:wrap;gap:6px}
.forum-article .article-tags .but{font-size:12px;padding:4px 10px}
.forum-article .score-box.single-footer{margin:10px 0 20px}
.forum-article .score-box .score-btns{margin-bottom:10px;border-radius:100px;padding:8px 24px;box-shadow:0 2px 10px 4px var(--main-shadow);display:inline-flex;align-items:center}
.forum-article .score-box .btn-score{font-size:24px;color:var(--muted-color);padding:2px}
.forum-article .score-box .btn-score.extra.active{color:#40a1ff}
.forum-article .score-box .btn-score.deduct.active{color:#ff556d}
.forum-article .score-box .score-btns text{font-size:12px;color:var(--muted-2-color);min-width:30px;margin:5px}
.forum-single-author{background-color:var(--muted-bg-2-color);box-shadow:none}
.forum-single-author .card-content{display:flex;gap:40px;padding:15px 40px}
.forum-single-author .user-content{display:flex;align-items:center;gap:20px}
.forum-single-author .count-info{display:flex;flex-direction:column;gap:6px}
.forum-single-author .user-info .border-bottom{padding-bottom:10px;margin-bottom:10px}
.forum-single-author .user-desc{font-size:13px}
.forum-single-author .more-posts-mini .item{padding:3px 0}
.forum-single-author .more-posts-mini a{display:block;color:var(--muted-2-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.footer-actions{margin:18px -10px 10px;padding-top:14px;border-top:1px solid var(--main-border-color)}
.footer-actions .item{display:flex;align-items:center;padding:4px 8px;margin:0 4px;color:var(--muted-color);border:0;background:none;cursor:pointer;border-radius:4px}
.footer-actions .item:hover{background:var(--muted-border-color)}
.footer-actions .item > i{font-size:18px;margin-right:5px}
.footer-actions .item{display:flex;align-items:center;padding:0 4px;margin:0 4px;color:var(--muted-color);border:0;background:none;cursor:pointer}
.footer-actions .item:hover{color:var(--focus-color)}
.footer-actions .item > i,.footer-actions .item > .icon{font-size:20px;margin-right:4px}
.footer-actions .item text{font-size:12px}
.single-footer .but{font-size:12px;padding:4px 12px}
.vote-box.forum-vote{padding:20px 0}
.vote-box.forum-vote{padding:15px 30px}
.vote-box.forum-vote h2{font-size:17px}
.vote-item{position:relative;overflow:hidden;padding:8px 3.5em 8px 15px;margin-bottom:6px;border-radius:50px;background:var(--muted-border-color);color:var(--muted-color);display:block;cursor:pointer;text-overflow:ellipsis;white-space:nowrap}
.vote-item{position:relative;overflow:hidden;padding:5px 3.5em 5px 15px;margin-bottom:6px;border-radius:50px;background:var(--main-bg-color);color:var(--muted-color);display:block;cursor:pointer;text-overflow:ellipsis;white-space:nowrap}
.vote-item input{margin-right:8px}
.vote-progress{position:absolute;left:0;top:0;bottom:0;background:rgba(130,130,130,.15);transition:width .6s,background .2s;border-radius:50px;width:0;z-index:-1}
.vote-item .vote-count{position:absolute;right:14px;font-size:.9em;opacity:.8}
.vote-progress{position:absolute;left:0;top:0;bottom:0;background:rgba(130,130,130,.15);transition:width 1s,background .2s;border-radius:50px;width:0;z-index:-1}
.vote-item .vote-count{position:absolute;right:14px;font-size:.9em;margin-top:.1em;opacity:.8}
.vote-box.forum-vote button{display:block;margin:16px auto 0}
/* ── 发帖 / 编辑页 ────────────────────────────────────────────── */
@@ -384,3 +426,21 @@ body.dark-theme .forum-header,body.dark-theme .forum-header .header-content{back
.forum-header.blur-header .plate-thumb{width:64px;height:64px}
}
body.dark-theme .forum-header.blur-header .forum-mask{background:rgba(20,22,26,.72)}
/* ── 详情页侧栏版块信息卡(参考 .plate-info-sidebar) ─────────────── */
.plate-info-sidebar .forum-header{box-shadow:0 0 10px var(--main-shadow);border-radius:var(--main-radius)}
.plate-info-sidebar .header-content{padding:55px 20px 25px;background:var(--main-bg-color);border-radius:var(--main-radius)}
.plate-info-sidebar .plate-thumb{width:100px;height:100px;margin:0 auto 10px}
.plate-info-sidebar .plate-thumb > img{border-radius:4px}
.plate-info-sidebar .forum-title{font-size:16px;text-align:center}
.plate-info-sidebar .count-mates{text-align:center;color:var(--muted-2-color)}
.plate-info-sidebar .count-mates > item + item{border-left:1px solid var(--main-border-color);padding-left:12px;margin-left:12px}
.plate-info-sidebar .follow-info{background:var(--main-border-color);box-shadow:none;color:var(--focus-color);padding:6px 12px;margin-top:38px;opacity:.9}
@media (max-width:640px){
.forum-single-author .card-content{flex-direction:column;gap:20px;padding:5px 12px}
.forum-single-author .user-info .border-bottom{padding-bottom:10px;margin-bottom:10px}
.forum-article{padding:0 15px}
.forum-article .article-title{font-size:20px}
.forum-header.blur-header .header-content{padding:60px 15px 30px}
.forum-header.blur-header .plate-thumb{width:105px;height:105px;order:2;margin:0 0 0 20px}
}
+23 -2
View File
@@ -359,6 +359,24 @@
const label = button.querySelector('text')
if (label) label.textContent = following ? '已关注' : '关注'
else button.textContent = result.data?.label || button.textContent
} else if (action === 'favorite') {
const active = result.data?.active === true
button.classList.toggle('active', active)
const label = button.querySelector('text')
if (label) label.textContent = active ? '已收藏' : '收藏'
} else if (action === 'score') {
// Card score group: flip the active arrow and refresh the shared counter.
const group = button.closest('.score-btns')
if (group) {
const isUp = button.dataset.direction !== 'down'
const userScore = Number(result.data?.user_score || 0)
group.querySelectorAll('.btn-score').forEach((item) => {
const own = (item.dataset.direction !== 'down') === isUp
item.classList.toggle('active', own && userScore !== 0)
})
const counter = group.querySelector('text')
if (counter) counter.textContent = Number(result.data?.score || 0) > 0 ? String(result.data.score) : '评分'
}
} else if (button.querySelector('text')) {
button.querySelector('text').textContent = result.data?.label || result.message || button.querySelector('text').textContent
} else {
@@ -403,7 +421,7 @@
const loadMore = async (link, pane) => {
if (pane.dataset.loading === '1') return
pane.dataset.loading = '1'
const more = link.closest('.forum-more')
const more = link.closest('.theme-pagination') || link.closest('.ajax-pag')
const loader = [...pane.children].find((item) => item.classList.contains('post_ajax_loader'))
more?.classList.add('is-loading')
loader?.classList.add('is-loading')
@@ -414,7 +432,7 @@
const source = doc.getElementById(pane.id)
if (!source) throw new Error('内容不存在')
const anchor = more || null
const incoming = [...source.children].filter((item) => !item.classList.contains('forum-tab-pane') && !item.classList.contains('forum-more') && !item.classList.contains('post_ajax_loader'))
const incoming = [...source.children].filter((item) => !item.classList.contains('forum-tab-pane') && !item.classList.contains('theme-pagination') && !item.classList.contains('post_ajax_loader'))
incoming.forEach((item) => pane.insertBefore(item, anchor))
const next = source.querySelector('[data-forum-more]')
if (next && anchor) anchor.querySelector('[data-forum-more]')?.setAttribute('href', next.getAttribute('href'))
@@ -449,7 +467,10 @@
}
const more = event.target.closest('[data-forum-more]')
if (more) {
// The wrapper also carries .ajax-next for the theme's pagination styles;
// stop the generic handler from firing a second request.
event.preventDefault()
event.stopPropagation()
const pane = more.closest('.forum-tab-pane')
if (pane) loadMore(more, pane)
}