diff --git a/src/assets/community.css b/src/assets/community.css new file mode 100644 index 0000000..68506f4 --- /dev/null +++ b/src/assets/community.css @@ -0,0 +1,394 @@ +/* ============================================================ + * GVSDS 社区 · 阿里云开发者社区风格(developer.aliyun.com) + * + * 设计基调: + * - 主色:阿里云蓝 #0064c8(hover #0a7ae0),深蓝黑导航 #0d1b2a + * - 页面浅灰底 #f5f6f7 + 白卡片(4px 圆角、#e5e6eb 细边框) + * - 标签:浅蓝底(#e6f0ff)+ 蓝字;标题 hover 变蓝 + * - 信息密度高、克制、无装饰性大阴影 + * ============================================================ */ + +/* ---------- 1. 设计变量 ---------- */ +:root { + --ali-blue: #0064c8; + --ali-blue-hover: #0a7ae0; + --ali-blue-light: #e6f0ff; + --ali-blue-deep: #0d1b2a; + --ali-bg: #f5f6f7; + --ali-card-border: #e5e6eb; + --ali-text: #1a1a1a; + --ali-text-2: #666; + --ali-text-3: #999; +} + +/* ---------- 2. 页面骨架 ---------- */ +.gvs-community { + min-height: 100vh; + background: var(--ali-bg); + color: var(--ali-text); +} + +.gvs-community .gvs-container { + max-width: 1180px; + margin: 0 auto; + padding: 0 16px; +} + +/* ---------- 3. Hero 横幅 ---------- */ +.gvs-hero { + background: linear-gradient(120deg, #0d1b2a 0%, #123c5e 60%, #0064c8 130%); + color: #fff; + padding: 44px 0 40px; + position: relative; + overflow: hidden; +} +.gvs-hero::after { + content: ''; + position: absolute; + right: -120px; + top: -120px; + width: 360px; + height: 360px; + border-radius: 50%; + background: radial-gradient(circle, rgba(0, 161, 255, 0.25) 0%, transparent 70%); +} +.gvs-hero-title { + font-size: 28px; + font-weight: 700; + letter-spacing: 1px; +} +.gvs-hero-sub { + margin-top: 8px; + font-size: 14px; + color: rgba(255, 255, 255, 0.75); +} +.gvs-hero-entries { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 12px; + margin-top: 26px; + max-width: 860px; +} +.gvs-hero-entry { + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 4px; + padding: 14px 16px; + display: flex; + align-items: center; + gap: 12px; + cursor: pointer; + transition: all 0.2s; + color: #fff; +} +.gvs-hero-entry:hover { + background: rgba(255, 255, 255, 0.16); + transform: translateY(-1px); +} +.gvs-hero-entry i { + font-size: 20px; + color: #7cc0ff; + width: 22px; + text-align: center; +} +.gvs-hero-entry b { + font-size: 14px; + font-weight: 600; + display: block; +} +.gvs-hero-entry span { + font-size: 12px; + color: rgba(255, 255, 255, 0.6); +} + +/* ---------- 4. 卡片 ---------- */ +.gvs-card { + background: #fff; + border: 1px solid var(--ali-card-border); + border-radius: 4px; +} +.gvs-card-hd { + padding: 14px 16px; + border-bottom: 1px solid var(--ali-card-border); + font-size: 15px; + font-weight: 600; + display: flex; + align-items: center; + gap: 8px; +} +.gvs-card-hd i { + color: var(--ali-blue); +} + +/* ---------- 5. 标签 ---------- */ +.gvs-tag { + display: inline-flex; + align-items: center; + padding: 1px 8px; + border-radius: 2px; + font-size: 12px; + background: var(--ali-blue-light); + color: var(--ali-blue); + line-height: 20px; + white-space: nowrap; +} +.gvs-tag.gray { + background: #f2f3f5; + color: var(--ali-text-2); +} +.gvs-tag.red { + background: #fdecec; + color: #d54941; +} +.gvs-tag.green { + background: #e6f7ed; + color: #23a858; +} + +/* ---------- 6. 按钮 ---------- */ +.gvs-btn { + display: inline-flex; + align-items: center; + gap: 6px; + border: 1px solid var(--ali-blue); + border-radius: 4px; + padding: 7px 16px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + line-height: 1; +} +.gvs-btn-primary { + background: var(--ali-blue); + color: #fff; +} +.gvs-btn-primary:hover { + background: var(--ali-blue-hover); +} +.gvs-btn-ghost { + background: #fff; + color: var(--ali-blue); +} +.gvs-btn-ghost:hover { + border-color: var(--ali-blue-hover); + color: var(--ali-blue-hover); + background: var(--ali-blue-light); +} +.gvs-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* ---------- 7. 板块网格 ---------- */ +.gvs-board-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 12px; +} +.gvs-board-item { + border: 1px solid var(--ali-card-border); + border-radius: 4px; + padding: 16px; + background: #fff; + cursor: pointer; + transition: all 0.2s; + display: flex; + align-items: flex-start; + gap: 12px; +} +.gvs-board-item:hover { + border-color: var(--ali-blue); + box-shadow: 0 2px 8px rgba(0, 100, 200, 0.08); +} +.gvs-board-item.active { + border-color: var(--ali-blue); + background: var(--ali-blue-light); +} +.gvs-board-icon { + width: 40px; + height: 40px; + border-radius: 4px; + background: var(--ali-blue-light); + color: var(--ali-blue); + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + flex-shrink: 0; +} +.gvs-board-name { + font-size: 14px; + font-weight: 600; +} +.gvs-board-meta { + font-size: 12px; + color: var(--ali-text-3); + margin-top: 3px; +} + +/* ---------- 8. Feed 列表 ---------- */ +.gvs-feed-item { + display: flex; + gap: 14px; + padding: 16px; + border-bottom: 1px solid #f0f1f3; + cursor: pointer; + transition: background 0.2s; +} +.gvs-feed-item:last-child { + border-bottom: none; +} +.gvs-feed-item:hover { + background: #fafbfc; +} +.gvs-feed-avatar { + width: 40px; + height: 40px; + border-radius: 50%; + background: var(--ali-blue-light); + color: var(--ali-blue); + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + flex-shrink: 0; + overflow: hidden; +} +.gvs-feed-main { + flex: 1; + min-width: 0; +} +.gvs-feed-title { + font-size: 15px; + font-weight: 600; + color: var(--ali-text); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transition: color 0.2s; +} +.gvs-feed-item:hover .gvs-feed-title { + color: var(--ali-blue); +} +.gvs-feed-desc { + font-size: 13px; + color: var(--ali-text-2); + margin-top: 4px; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; +} +.gvs-feed-meta { + display: flex; + align-items: center; + gap: 14px; + margin-top: 8px; + font-size: 12px; + color: var(--ali-text-3); +} +.gvs-feed-meta i { + margin-right: 3px; +} + +/* ---------- 9. 分页 ---------- */ +.gvs-pager { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + padding: 18px 0; +} +.gvs-pager-btn { + border: 1px solid var(--ali-card-border); + background: #fff; + border-radius: 4px; + padding: 6px 14px; + font-size: 13px; + color: var(--ali-text-2); + cursor: pointer; + transition: all 0.2s; +} +.gvs-pager-btn:hover:not(:disabled) { + border-color: var(--ali-blue); + color: var(--ali-blue); +} +.gvs-pager-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} +.gvs-pager-info { + font-size: 13px; + color: var(--ali-text-3); +} + +/* ---------- 10. 表单 ---------- */ +.gvs-input { + width: 100%; + border: 1px solid var(--ali-card-border); + border-radius: 4px; + padding: 9px 12px; + font-size: 14px; + outline: none; + transition: all 0.2s; + background: #fff; + color: var(--ali-text); +} +.gvs-input:focus { + border-color: var(--ali-blue); + box-shadow: 0 0 0 2px rgba(0, 100, 200, 0.15); +} +.gvs-textarea { + width: 100%; + border: 1px solid var(--ali-card-border); + border-radius: 4px; + padding: 10px 12px; + font-size: 14px; + outline: none; + transition: all 0.2s; + background: #fff; + color: var(--ali-text); + resize: vertical; +} +.gvs-textarea:focus { + border-color: var(--ali-blue); + box-shadow: 0 0 0 2px rgba(0, 100, 200, 0.15); +} + +/* ---------- 11. 侧栏 ---------- */ +.gvs-side-list { + padding: 12px 16px; +} +.gvs-side-item { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 0; + font-size: 13px; + color: var(--ali-text-2); + cursor: pointer; + transition: color 0.2s; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.gvs-side-item:hover { + color: var(--ali-blue); +} +.gvs-side-num { + width: 22px; + height: 22px; + border-radius: 4px; + background: #f2f3f5; + color: var(--ali-text-2); + font-size: 12px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.gvs-side-item:nth-child(-n + 3) .gvs-side-num { + background: var(--ali-blue); + color: #fff; +} diff --git a/src/views/community/CommunityHomeView.vue b/src/views/community/CommunityHomeView.vue index 37e1bc1..f76dd29 100644 --- a/src/views/community/CommunityHomeView.vue +++ b/src/views/community/CommunityHomeView.vue @@ -1,101 +1,181 @@