|
|
@@ -1,36 +1,38 @@
|
|
|
<template>
|
|
|
<view class="ac-container">
|
|
|
<!-- 自定义导航栏 -->
|
|
|
- <view class="kc-nav">
|
|
|
- <view class="kc-nav-left" @click="onBack">
|
|
|
- <text class="kc-back-icon">←</text>
|
|
|
+ <view class="ac-nav">
|
|
|
+ <view class="ac-nav-left" @click="onBack">
|
|
|
+ <text class="ac-nav-back">←</text>
|
|
|
</view>
|
|
|
- <view class="kc-nav-search" @click="focusSearch">
|
|
|
- <text class="kc-search-icon">🔍</text>
|
|
|
- <input
|
|
|
- v-if="searchFocused || searchKeyword"
|
|
|
- class="kc-search-input"
|
|
|
- v-model="searchKeyword"
|
|
|
- placeholder="搜索文章..."
|
|
|
- confirm-type="search"
|
|
|
- @confirm="onSearch"
|
|
|
- @blur="onSearchBlur"
|
|
|
- />
|
|
|
- <text v-else class="kc-search-placeholder">搜索文章...</text>
|
|
|
- </view>
|
|
|
- <view class="kc-nav-right" @click="goEdit">
|
|
|
- <text class="kc-add-btn">+</text>
|
|
|
+ <text class="ac-nav-title">知识中心</text>
|
|
|
+ <view class="ac-nav-right">
|
|
|
+ <text class="ac-nav-search-icon" @click="focusSearch">🔍</text>
|
|
|
+ <text class="ac-nav-add" @click="goEdit">+</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <!-- Tab 导航 -->
|
|
|
+ <!-- 搜索栏(聚焦时展开) -->
|
|
|
+ <view v-if="searchFocused || searchKeyword" class="ac-search-bar">
|
|
|
+ <input
|
|
|
+ class="ac-search-input"
|
|
|
+ v-model="searchKeyword"
|
|
|
+ placeholder="搜索文章..."
|
|
|
+ confirm-type="search"
|
|
|
+ @confirm="onSearch"
|
|
|
+ @blur="onSearchBlur"
|
|
|
+ />
|
|
|
+ <text class="ac-search-cancel" @click="searchKeyword = ''; searchFocused = false; onSearch()">取消</text>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- Tab 导航(药丸式) -->
|
|
|
<view class="ac-tabs">
|
|
|
- <scroll-view scroll-x enable-flex show-scrollbar="false" class="tab-scroll">
|
|
|
+ <scroll-view scroll-x show-scrollbar="false" class="ac-tab-scroll">
|
|
|
<view
|
|
|
v-for="tab in tabList"
|
|
|
:key="tab.code"
|
|
|
- :class="['tab-item', currentTab === tab.code ? 'active' : '']"
|
|
|
- :style="currentTab === tab.code ? 'color:' + tab.color + ';border-bottom-color:' + tab.color : ''"
|
|
|
+ :class="['ac-tab', currentTab === tab.code ? 'active' : '']"
|
|
|
+ :style="currentTab === tab.code ? 'background:' + tab.color + ';color:#fff;border-color:' + tab.color : ''"
|
|
|
@click="onTabChange(tab.code)"
|
|
|
>
|
|
|
{{ tab.name }}
|
|
|
@@ -38,79 +40,81 @@
|
|
|
</scroll-view>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 文章列表 -->
|
|
|
- <scroll-view scroll-y class="ac-list" @scrolltolower="onLoadMore">
|
|
|
+ <!-- 文章列表区域 -->
|
|
|
+ <scroll-view scroll-y class="ac-scroll" @scrolltolower="onLoadMore">
|
|
|
<!-- 骨架屏 -->
|
|
|
- <view v-if="loading && articles.length === 0" class="ac-skeleton">
|
|
|
- <view v-for="n in 3" :key="n" class="skeleton-card">
|
|
|
- <view class="skeleton-cover"></view>
|
|
|
- <view class="skeleton-body">
|
|
|
- <view class="skeleton-line skeleton-title"></view>
|
|
|
- <view class="skeleton-line skeleton-summary"></view>
|
|
|
- <view class="skeleton-line skeleton-summary short"></view>
|
|
|
- <view class="skeleton-line skeleton-meta"></view>
|
|
|
+ <view v-if="loading && articles.length === 0" class="ac-skeleton-wrap">
|
|
|
+ <view v-for="n in 3" :key="n" class="sk-card">
|
|
|
+ <view class="sk-cover"></view>
|
|
|
+ <view class="sk-body">
|
|
|
+ <view class="sk-row sk-tag"></view>
|
|
|
+ <view class="sk-row sk-title"></view>
|
|
|
+ <view class="sk-row sk-desc"></view>
|
|
|
+ <view class="sk-row sk-footer"></view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<!-- 空状态 -->
|
|
|
<view v-else-if="articles.length === 0" class="ac-empty">
|
|
|
- <image class="empty-img" src="/static/empty-article.png" mode="aspectFit"></image>
|
|
|
- <text class="empty-text">暂无文章</text>
|
|
|
+ <image class="ac-empty-img" src="/static/empty-article.png" mode="aspectFit"></image>
|
|
|
+ <text class="ac-empty-text">暂无文章</text>
|
|
|
</view>
|
|
|
|
|
|
<!-- 文章列表 -->
|
|
|
- <view v-else class="article-list">
|
|
|
+ <view v-else class="ac-feed">
|
|
|
<view
|
|
|
v-for="item in articles"
|
|
|
:key="item.id"
|
|
|
- class="article-card"
|
|
|
+ class="ac-card"
|
|
|
+ hover-class="ac-card-pressed"
|
|
|
@click="goDetail(item.id)"
|
|
|
>
|
|
|
- <image
|
|
|
- class="card-cover"
|
|
|
- :src="item.coverImage || '/static/default-article.png'"
|
|
|
- mode="aspectFill"
|
|
|
- />
|
|
|
- <view class="card-body">
|
|
|
- <view class="card-tags">
|
|
|
- <text class="card-category">{{ item.categoryName || '' }}</text>
|
|
|
- <text class="card-readtime">{{ item.readTime || 3 }}分钟</text>
|
|
|
- </view>
|
|
|
- <text class="card-title">{{ item.title }}</text>
|
|
|
- <text class="card-summary">{{ item.summary || '' }}</text>
|
|
|
- <view class="card-footer">
|
|
|
- <text class="card-author">{{ item.author || '浠艾福' }}</text>
|
|
|
- <text class="card-date">{{ formatDate(item.publishedAt) }}</text>
|
|
|
- <text class="card-fav">收藏 {{ item.favCount || 0 }}</text>
|
|
|
- </view>
|
|
|
- <!-- 五维彩条 -->
|
|
|
- <view v-if="item.relatedDimensions" class="card-dimensions">
|
|
|
+ <view class="ac-card-media">
|
|
|
+ <image
|
|
|
+ class="ac-card-cover"
|
|
|
+ :src="item.coverImage || '/static/default-article.png'"
|
|
|
+ mode="aspectFill"
|
|
|
+ />
|
|
|
+ <view class="ac-card-dimension-tags" v-if="item.relatedDimensions">
|
|
|
<view
|
|
|
v-for="dim in parseDimensions(item.relatedDimensions)"
|
|
|
:key="dim.code"
|
|
|
- class="dim-dot"
|
|
|
+ class="ac-card-dim-tag"
|
|
|
:style="'background:' + dim.color"
|
|
|
- ></view>
|
|
|
+ >{{ dim.name }}</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="ac-card-body">
|
|
|
+ <view class="ac-card-meta-top">
|
|
|
+ <text class="ac-card-category" v-if="item.categoryName">{{ item.categoryName }}</text>
|
|
|
+ <text class="ac-card-readtime">📖 {{ item.readTime || 3 }}分钟</text>
|
|
|
+ </view>
|
|
|
+ <text class="ac-card-title">{{ item.title }}</text>
|
|
|
+ <text class="ac-card-summary" v-if="item.summary">{{ item.summary }}</text>
|
|
|
+ <view class="ac-card-footer">
|
|
|
+ <text class="ac-card-author">{{ item.author || '浠艾福' }}</text>
|
|
|
+ <text class="ac-card-sep">|</text>
|
|
|
+ <text class="ac-card-date">{{ formatDate(item.publishedAt) }}</text>
|
|
|
+ <text class="ac-card-fav">⭐ {{ item.favCount || 0 }}</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 加载更多 -->
|
|
|
- <view v-if="loadingMore" class="loading-more">
|
|
|
- <text class="loading-text">加载中...</text>
|
|
|
+ <!-- 加载更多 / 没有更多 -->
|
|
|
+ <view v-if="loadingMore" class="ac-loading-more">
|
|
|
+ <text class="ac-loading-text">加载中...</text>
|
|
|
</view>
|
|
|
- <view v-if="noMore && articles.length > 0" class="no-more">
|
|
|
- <text class="no-more-text">— 没有更多了 —</text>
|
|
|
+ <view v-if="noMore && articles.length > 0" class="ac-no-more">
|
|
|
+ <text class="ac-no-more-text">— 没有更多了 —</text>
|
|
|
</view>
|
|
|
- <!-- 底部占位 -->
|
|
|
- <view class="bottom-spacer"></view>
|
|
|
+ <view class="ac-bottom-gap"></view>
|
|
|
</scroll-view>
|
|
|
|
|
|
<!-- 浮动发布按钮 -->
|
|
|
<view class="ac-fab" @click="goEdit">
|
|
|
- <text class="fab-icon">+</text>
|
|
|
+ <text class="ac-fab-icon">+</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</template>
|
|
|
@@ -254,167 +258,325 @@ export default {
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
+/* ====================================
|
|
|
+ 知识中心 — 重设计
|
|
|
+ 白色导航 + 药丸Tab + 精装卡片
|
|
|
+ ==================================== */
|
|
|
+
|
|
|
.ac-container {
|
|
|
min-height: 100vh;
|
|
|
background: #f5f7fa;
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
-/* 自定义导航栏 */
|
|
|
-.kc-nav {
|
|
|
+/* ---- 导航栏(白色简约) ---- */
|
|
|
+.ac-nav {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- padding: 80rpx 20rpx 16rpx;
|
|
|
- background: linear-gradient(135deg, #F97316, #EA580C);
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 84rpx 28rpx 20rpx;
|
|
|
+ background: #fff;
|
|
|
position: sticky;
|
|
|
top: 0;
|
|
|
z-index: 100;
|
|
|
}
|
|
|
-.kc-nav-left {
|
|
|
- width: 50rpx;
|
|
|
- height: 50rpx;
|
|
|
+.ac-nav-left {
|
|
|
+ width: 60rpx;
|
|
|
+ height: 48rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
+ justify-content: flex-start;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
-.kc-back-icon {
|
|
|
+.ac-nav-back {
|
|
|
font-size: 36rpx;
|
|
|
- color: #fff;
|
|
|
+ color: #333;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
-.kc-nav-search {
|
|
|
+.ac-nav-title {
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #1a1a1a;
|
|
|
flex: 1;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+.ac-nav-right {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- background: rgba(255,255,255,0.25);
|
|
|
- border-radius: 32rpx;
|
|
|
- padding: 10rpx 20rpx;
|
|
|
- margin: 0 16rpx;
|
|
|
-}
|
|
|
-.kc-search-icon {
|
|
|
- font-size: 24rpx;
|
|
|
- margin-right: 10rpx;
|
|
|
+ gap: 20rpx;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
-.kc-search-placeholder {
|
|
|
- font-size: 24rpx;
|
|
|
- color: rgba(255,255,255,0.7);
|
|
|
-}
|
|
|
-.kc-search-input {
|
|
|
- flex: 1;
|
|
|
- font-size: 24rpx;
|
|
|
- color: #fff;
|
|
|
- background: transparent;
|
|
|
+.ac-nav-search-icon {
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #666;
|
|
|
}
|
|
|
-.kc-search-input::placeholder {
|
|
|
- color: rgba(255,255,255,0.7);
|
|
|
+.ac-nav-add {
|
|
|
+ font-size: 40rpx;
|
|
|
+ color: #F97316;
|
|
|
+ font-weight: 300;
|
|
|
+ line-height: 1;
|
|
|
}
|
|
|
-.kc-nav-right {
|
|
|
- width: 50rpx;
|
|
|
- height: 50rpx;
|
|
|
+
|
|
|
+/* ---- 搜索展开条 ---- */
|
|
|
+.ac-search-bar {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
- flex-shrink: 0;
|
|
|
+ padding: 12rpx 28rpx 16rpx;
|
|
|
+ background: #fff;
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
}
|
|
|
-.kc-add-btn {
|
|
|
- font-size: 48rpx;
|
|
|
- color: #fff;
|
|
|
- font-weight: 300;
|
|
|
- line-height: 1;
|
|
|
+.ac-search-input {
|
|
|
+ flex: 1;
|
|
|
+ height: 60rpx;
|
|
|
+ background: #f5f5f5;
|
|
|
+ border-radius: 30rpx;
|
|
|
+ padding: 0 28rpx;
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+.ac-search-cancel {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #999;
|
|
|
+ margin-left: 16rpx;
|
|
|
+ flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
+/* ---- Tab 药丸导航 ---- */
|
|
|
.ac-tabs {
|
|
|
+ padding: 16rpx 28rpx;
|
|
|
background: #fff;
|
|
|
- padding: 16rpx 0 12rpx;
|
|
|
- border-bottom: 1rpx solid #eee;
|
|
|
+ border-bottom: 1rpx solid #f0f0f0;
|
|
|
position: sticky;
|
|
|
- top: 0;
|
|
|
z-index: 10;
|
|
|
}
|
|
|
-.tab-scroll {
|
|
|
+.ac-tab-scroll {
|
|
|
white-space: nowrap;
|
|
|
- padding: 0 20rpx;
|
|
|
+ display: flex;
|
|
|
}
|
|
|
-.tab-item {
|
|
|
- display: inline-block;
|
|
|
- padding: 8rpx 24rpx;
|
|
|
- font-size: 26rpx;
|
|
|
+.ac-tab {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ height: 52rpx;
|
|
|
+ padding: 0 28rpx;
|
|
|
+ margin-right: 16rpx;
|
|
|
+ font-size: 24rpx;
|
|
|
color: #666;
|
|
|
- margin-right: 12rpx;
|
|
|
- border-bottom: 3rpx solid transparent;
|
|
|
+ background: #f0f0f0;
|
|
|
+ border-radius: 26rpx;
|
|
|
+ border: 2rpx solid #f0f0f0;
|
|
|
flex-shrink: 0;
|
|
|
+ transition: all 0.2s;
|
|
|
}
|
|
|
-.tab-item.active {
|
|
|
- font-weight: bold;
|
|
|
+.ac-tab.active {
|
|
|
+ font-weight: 600;
|
|
|
}
|
|
|
-.ac-list {
|
|
|
- height: calc(100vh - 230rpx);
|
|
|
+
|
|
|
+/* ---- 滚动列表区域 ---- */
|
|
|
+.ac-scroll {
|
|
|
+ height: calc(100vh - 200rpx);
|
|
|
}
|
|
|
-/* 骨架屏 */
|
|
|
-.ac-skeleton { padding: 20rpx 24rpx; }
|
|
|
-.skeleton-card {
|
|
|
+
|
|
|
+/* ---- 骨架屏 ---- */
|
|
|
+.ac-skeleton-wrap { padding: 24rpx 28rpx; }
|
|
|
+.sk-card {
|
|
|
background: #fff;
|
|
|
- border-radius: 16rpx;
|
|
|
+ border-radius: 24rpx;
|
|
|
overflow: hidden;
|
|
|
- margin-bottom: 20rpx;
|
|
|
-}
|
|
|
-.skeleton-cover { height: 280rpx; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; }
|
|
|
-.skeleton-body { padding: 20rpx; }
|
|
|
-.skeleton-line { height: 24rpx; background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); background-size: 200% 100%; border-radius: 4rpx; margin-bottom: 12rpx; }
|
|
|
-.skeleton-title { width: 60%; }
|
|
|
-.skeleton-summary { width: 90%; }
|
|
|
-.skeleton-summary.short { width: 50%; }
|
|
|
-.skeleton-meta { width: 40%; height: 18rpx; }
|
|
|
-@keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }
|
|
|
-/* 空状态 */
|
|
|
-.ac-empty { display: flex; flex-direction: column; align-items: center; padding-top: 200rpx; }
|
|
|
-.empty-img { width: 200rpx; height: 200rpx; margin-bottom: 24rpx; }
|
|
|
-.empty-text { font-size: 28rpx; color: #999; }
|
|
|
-/* 文章卡片 */
|
|
|
-.article-list { padding: 20rpx 24rpx; }
|
|
|
-.article-card {
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04);
|
|
|
+}
|
|
|
+.sk-cover {
|
|
|
+ height: 340rpx;
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e8e8e8 50%, #f0f0f0 75%);
|
|
|
+ background-size: 200% 100%;
|
|
|
+ animation: sk-shimmer 1.5s infinite;
|
|
|
+}
|
|
|
+.sk-body { padding: 24rpx; }
|
|
|
+.sk-row {
|
|
|
+ height: 22rpx;
|
|
|
+ background: linear-gradient(90deg, #f0f0f0 25%, #e8e8e8 50%, #f0f0f0 75%);
|
|
|
+ background-size: 200% 100%;
|
|
|
+ border-radius: 6rpx;
|
|
|
+ margin-bottom: 14rpx;
|
|
|
+ animation: sk-shimmer 1.5s infinite;
|
|
|
+}
|
|
|
+.sk-tag { width: 20%; }
|
|
|
+.sk-title { width: 65%; }
|
|
|
+.sk-desc { width: 90%; }
|
|
|
+.sk-footer { width: 40%; height: 18rpx; }
|
|
|
+@keyframes sk-shimmer {
|
|
|
+ 0% { background-position: -200% 0; }
|
|
|
+ 100% { background-position: 200% 0; }
|
|
|
+}
|
|
|
+
|
|
|
+/* ---- 空状态 ---- */
|
|
|
+.ac-empty {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ padding-top: 240rpx;
|
|
|
+}
|
|
|
+.ac-empty-img {
|
|
|
+ width: 200rpx;
|
|
|
+ height: 200rpx;
|
|
|
+ margin-bottom: 28rpx;
|
|
|
+}
|
|
|
+.ac-empty-text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #bbb;
|
|
|
+}
|
|
|
+
|
|
|
+/* ---- 文章卡片(新版) ---- */
|
|
|
+.ac-feed {
|
|
|
+ padding: 24rpx 28rpx;
|
|
|
+}
|
|
|
+.ac-card {
|
|
|
background: #fff;
|
|
|
- border-radius: 16rpx;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06);
|
|
|
+ transition: transform 0.15s;
|
|
|
+}
|
|
|
+.ac-card-pressed {
|
|
|
+ transform: scale(0.97);
|
|
|
+ opacity: 0.9;
|
|
|
+}
|
|
|
+/* 封面 + 维度浮标 */
|
|
|
+.ac-card-media {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+.ac-card-cover {
|
|
|
+ display: block;
|
|
|
+ width: 100%;
|
|
|
+ height: 340rpx;
|
|
|
+ background: #f0f0f0;
|
|
|
+}
|
|
|
+.ac-card-dimension-tags {
|
|
|
+ position: absolute;
|
|
|
+ bottom: 12rpx;
|
|
|
+ left: 16rpx;
|
|
|
+ display: flex;
|
|
|
+ gap: 8rpx;
|
|
|
+}
|
|
|
+.ac-card-dim-tag {
|
|
|
+ padding: 2rpx 14rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ font-size: 20rpx;
|
|
|
+ color: #fff;
|
|
|
+ font-weight: 500;
|
|
|
+ line-height: 1.4;
|
|
|
+}
|
|
|
+/* 正文区 */
|
|
|
+.ac-card-body {
|
|
|
+ padding: 24rpx 24rpx 28rpx;
|
|
|
+}
|
|
|
+.ac-card-meta-top {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+}
|
|
|
+.ac-card-category {
|
|
|
+ font-size: 20rpx;
|
|
|
+ color: #F97316;
|
|
|
+ background: rgba(249,115,22,0.08);
|
|
|
+ padding: 2rpx 14rpx;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ margin-right: 16rpx;
|
|
|
+}
|
|
|
+.ac-card-readtime {
|
|
|
+ font-size: 20rpx;
|
|
|
+ color: #aaa;
|
|
|
+}
|
|
|
+.ac-card-title {
|
|
|
+ display: block;
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #1a1a1a;
|
|
|
+ line-height: 1.45;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
overflow: hidden;
|
|
|
- margin-bottom: 20rpx;
|
|
|
- box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.06);
|
|
|
-}
|
|
|
-.card-cover { width: 100%; height: 280rpx; background: #f0f0f0; }
|
|
|
-.card-body { padding: 20rpx; }
|
|
|
-.card-tags { display: flex; align-items: center; margin-bottom: 10rpx; }
|
|
|
-.card-category { font-size: 20rpx; color: #5B9BD5; background: rgba(91,155,213,0.1); padding: 2rpx 12rpx; border-radius: 8rpx; margin-right: 12rpx; }
|
|
|
-.card-readtime { font-size: 20rpx; color: #999; }
|
|
|
-.card-title { display: block; font-size: 28rpx; font-weight: bold; color: #333; margin-bottom: 8rpx; line-height: 1.4; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
|
|
-.card-summary { display: block; font-size: 24rpx; color: #666; line-height: 1.5; margin-bottom: 12rpx; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
|
|
-.card-footer { display: flex; align-items: center; font-size: 20rpx; color: #999; }
|
|
|
-.card-author { margin-right: 16rpx; color: #5B9BD5; }
|
|
|
-.card-date { margin-right: 16rpx; }
|
|
|
-.card-fav { margin-left: auto; }
|
|
|
-/* 五维彩条 */
|
|
|
-.card-dimensions { display: flex; margin-top: 10rpx; gap: 8rpx; }
|
|
|
-.dim-dot { width: 20rpx; height: 20rpx; border-radius: 50%; }
|
|
|
-/* 加载更多 */
|
|
|
-.loading-more, .no-more { text-align: center; padding: 30rpx; }
|
|
|
-.loading-text { font-size: 24rpx; color: #999; }
|
|
|
-.no-more-text { font-size: 24rpx; color: #ccc; }
|
|
|
-.bottom-spacer { height: 120rpx; }
|
|
|
-/* 浮动按钮 */
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-line-clamp: 2;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+}
|
|
|
+.ac-card-summary {
|
|
|
+ display: block;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #999;
|
|
|
+ line-height: 1.5;
|
|
|
+ margin-bottom: 16rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ display: -webkit-box;
|
|
|
+ -webkit-line-clamp: 2;
|
|
|
+ -webkit-box-orient: vertical;
|
|
|
+}
|
|
|
+.ac-card-footer {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 20rpx;
|
|
|
+ color: #bbb;
|
|
|
+}
|
|
|
+.ac-card-author {
|
|
|
+ color: #888;
|
|
|
+}
|
|
|
+.ac-card-sep {
|
|
|
+ margin: 0 10rpx;
|
|
|
+ color: #ddd;
|
|
|
+}
|
|
|
+.ac-card-date {
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+.ac-card-fav {
|
|
|
+ color: #ccc;
|
|
|
+}
|
|
|
+
|
|
|
+/* ---- 加载更多 / 没有更多 ---- */
|
|
|
+.ac-loading-more,
|
|
|
+.ac-no-more {
|
|
|
+ text-align: center;
|
|
|
+ padding: 30rpx;
|
|
|
+}
|
|
|
+.ac-loading-text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #bbb;
|
|
|
+}
|
|
|
+.ac-no-more-text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #ddd;
|
|
|
+}
|
|
|
+.ac-bottom-gap {
|
|
|
+ height: 140rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* ---- 浮动发布按钮 ---- */
|
|
|
.ac-fab {
|
|
|
position: fixed;
|
|
|
- right: 40rpx;
|
|
|
+ right: 36rpx;
|
|
|
bottom: 100rpx;
|
|
|
- width: 100rpx;
|
|
|
- height: 100rpx;
|
|
|
+ width: 96rpx;
|
|
|
+ height: 96rpx;
|
|
|
background: linear-gradient(135deg, #F97316, #EA580C);
|
|
|
color: #fff;
|
|
|
border-radius: 50%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- box-shadow: 0 4rpx 16rpx rgba(249,115,22,0.4);
|
|
|
+ box-shadow: 0 6rpx 20rpx rgba(249,115,22,0.35);
|
|
|
z-index: 100;
|
|
|
}
|
|
|
-.fab-icon { font-size: 48rpx; font-weight: bold; line-height: 1; }
|
|
|
+.ac-fab:active {
|
|
|
+ transform: scale(0.92);
|
|
|
+ opacity: 0.85;
|
|
|
+}
|
|
|
+.ac-fab-icon {
|
|
|
+ font-size: 48rpx;
|
|
|
+ font-weight: 300;
|
|
|
+ line-height: 1;
|
|
|
+}
|
|
|
</style>
|