feat: 类型帖互动、积分经济与发帖体验

补齐问答采纳/重开、投票匿名与有票禁编、悬赏过期退回、抽奖回帖开奖,并接入积分账本与发帖附件可见性。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-16 03:17:07 +08:00
parent 1ef3d8e299
commit b9ba8cb8c9
58 changed files with 6913 additions and 506 deletions

View File

@@ -331,7 +331,7 @@ export default function ChatShell({
className="w-8 h-8 flex items-center justify-center rounded-full hover:bg-[var(--accent-soft)] transition-colors"
style={{ color: "var(--accent)" }}
aria-label="新建群聊"
title="新建群聊"
data-tip="新建群聊"
>
<Plus size={18} />
</button>
@@ -480,7 +480,7 @@ export default function ChatShell({
background: "var(--accent-soft)",
color: "var(--accent)",
}}
title={room.is_default ? "强制置顶" : "置顶"}
data-tip={room.is_default ? "强制置顶" : "置顶"}
>
<Pin size={10} /> 置顶
</span>

View File

@@ -132,7 +132,7 @@ function RecallNotice({
href={`/u/${uid}`}
className="font-semibold transition-opacity hover:opacity-80"
style={nameStyle}
title={`查看 ${name} 的主页`}
data-tip={`查看 ${name} 的主页`}
>
{name}
</Link>
@@ -217,7 +217,7 @@ function highlightMentions(content: string, members: ChatRoomMember[]) {
key={`m-${i}`}
href={`/u/${user.id}`}
className="j13-mention-token"
title={`查看 ${user.nickname || user.username} 的主页`}
data-tip={`查看 ${user.nickname || user.username} 的主页`}
onClick={(e) => e.stopPropagation()}
onContextMenu={(e) => e.stopPropagation()}
>
@@ -1001,7 +1001,7 @@ export default function ChatRoomClient({
color: rightPanel === "members" ? "var(--accent)" : "var(--ink-2)",
background: rightPanel === "members" ? "var(--accent-soft)" : undefined,
}}
title="成员"
data-tip="成员"
>
<Users size={16} />
</button>
@@ -1015,7 +1015,7 @@ export default function ChatRoomClient({
color: rightPanel === "invite" ? "var(--accent)" : "var(--ink-2)",
background: rightPanel === "invite" ? "var(--accent-soft)" : undefined,
}}
title="邀请成员"
data-tip="邀请成员"
>
<UserPlus size={16} />
</button>
@@ -1029,7 +1029,7 @@ export default function ChatRoomClient({
color: rightPanel === "settings" ? "var(--accent)" : "var(--ink-2)",
background: rightPanel === "settings" ? "var(--accent-soft)" : undefined,
}}
title="群设置"
data-tip="群设置"
>
<Settings size={16} />
</button>
@@ -1040,7 +1040,7 @@ export default function ChatRoomClient({
aria-label={isDirect ? "关闭私聊" : "退出群聊"}
className="w-9 h-9 flex items-center justify-center rounded-full transition-colors hover:bg-[var(--danger-soft)]"
style={{ color: "var(--ink-3)" }}
title={isDirect ? "关闭私聊" : "退出群聊"}
data-tip={isDirect ? "关闭私聊" : "退出群聊"}
>
<LogOut size={16} />
</button>