diff --git a/src/components/post-detail/uh-post-comment-panel.vue b/src/components/post-detail/uh-post-comment-panel.vue
index b579413..c41039e 100644
--- a/src/components/post-detail/uh-post-comment-panel.vue
+++ b/src/components/post-detail/uh-post-comment-panel.vue
@@ -1,84 +1,400 @@
-
-
-
-
-
-
- 记录点什么
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ 说点什么 ({{ commentCount }})
+
+
+
-
-
-
- 这里是评论记录
+
+
+
+
+
+
+
+
+
+
+
+ 快来抢沙发吧~
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ comment.owner.displayName || '匿名用户' }}
+ {{ timeFrom(comment.spec.creationTime || comment.metadata.creationTimestamp) }}
+
+
+
+
+
+
+
+
+
+
+ 回复
+
+
+
+
+ {{ expandedReplies.has(comment.metadata.name) ? '收起' : `${comment.status?.replyCount}条回复` }}
+
+
+
+
+
+
+
+
+
+
+ {{ reply.owner.displayName || '匿名用户' }}
+ {{ timeFrom(reply.spec.creationTime || reply.metadata.creationTimestamp) }}
+
+
+
+ 回复 {{ reply.spec.quoteReply }}:
+
+
+ {{ reply.spec.raw }}
+
+
+
+ 回复
+
+
+
+
+
+
+
+ {{ replyLoadingMap[comment.metadata.name] ? '加载中...' : '查看更多回复' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ commentLoading ? '加载中...' : '加载更多评论' }}
+
+
+
-
-
-
-
-
-
-
-
-
- 共 {{ response?.total || 0 }} 条记录 已加载 {{ list.length }} 条记录
+
+
+
+
+
+
+ 回复 {{ replyTarget.displayName }}
+
+
-
-
-
- 加载失败,点击重试
-
-
- 数据已全部加载
-
+
+
+
+
+
+
diff --git a/src/config/markdown/config.ts b/src/config/markdown/config.ts
index 786d141..c497341 100644
--- a/src/config/markdown/config.ts
+++ b/src/config/markdown/config.ts
@@ -97,8 +97,8 @@ font-size: 14px;
strong: `font-weight: 700;color: ${primaryColor};`,
video: 'width: 100%',
},
-// containStyle: 'font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 14px;color: #606266;word-spacing: 0.8px;letter-spacing: 0.8px; background-color:transparent;',
- containStyle: 'word-spacing: 0.8px;letter-spacing: 0.8px; background-color:transparent;',
+ // containStyle: 'font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 14px;color: #606266;word-spacing: 0.8px;letter-spacing: 0.8px; background-color:transparent;',
+ containStyle: 'padding:0 12px;word-spacing: 0.8px;letter-spacing: 0.8px; background-color:transparent;',
loadingGif: '',
emptyGif: '',
diff --git a/src/pages/home/home.vue b/src/pages/home/home.vue
index 72c9413..864ef8f 100644
--- a/src/pages/home/home.vue
+++ b/src/pages/home/home.vue
@@ -127,7 +127,7 @@ onPageScroll(() => { })
-
+
@@ -237,7 +237,7 @@ onPageScroll(() => { })
-
+
diff --git a/src/style/uh-styles.css b/src/style/uh-styles.css
index 25df3f9..ed8b672 100644
--- a/src/style/uh-styles.css
+++ b/src/style/uh-styles.css
@@ -11,11 +11,11 @@
}
.uh-backdrop-blur {
- backdrop-filter: blur(4rpx);
+ backdrop-filter: blur(2rpx);
}
.uh-backdrop-blur-xs {
- backdrop-filter: blur(8rpx);
+ backdrop-filter: blur(4rpx);
}
.uh-backdrop-blur-sm {
@@ -23,5 +23,5 @@
}
.uh-backdrop-blur-md {
- backdrop-filter: blur(24rpx);
+ backdrop-filter: blur(16rpx);
}
diff --git a/src/subpkg-blog/post-detail/post-detail.vue b/src/subpkg-blog/post-detail/post-detail.vue
index 933085b..809d5b7 100644
--- a/src/subpkg-blog/post-detail/post-detail.vue
+++ b/src/subpkg-blog/post-detail/post-detail.vue
@@ -10,6 +10,7 @@ import { formatNumberUnit } from '@/utils/base/digital'
import type { NavigationPostVo, PostV1alpha1PublicApiQueryPostByNameRequest, PostVo } from '@halo-dev/api-client'
import type { VoteRequest } from '@/api/halo-base/trackers'
import mpHtml from '@/components/mp-html/components/mp-html/mp-html.vue'
+import UhPostCommentPanel from '@/components/post-detail/uh-post-comment-panel.vue'
interface IPostDetailLoadOptions {
metadataName: string
@@ -154,22 +155,11 @@ onShareAppMessage(() => {
}
})
-const commentPanel = reactive<{
- show: boolean
- post: PostVo | undefined
-}>({
- show: false,
- post: undefined,
-})
+// --- 评论面板 ---
+const showCommentPanel = ref(false)
-function handleOpenCommentPanel(post: PostVo) {
- commentPanel.show = true
- commentPanel.post = post
-}
-
-function handleCloseCommentPanel() {
- commentPanel.show = false
- commentPanel.post = undefined
+function handleOpenCommentPanel() {
+ showCommentPanel.value = true
}
@@ -177,6 +167,7 @@ function handleCloseCommentPanel() {
@@ -203,12 +194,12 @@ function handleCloseCommentPanel() {
-
+
- {{ post?.spec?.title ?? '加载中...' }}
+ {{ post?.spec?.title ?? '加载中...' }}
-
+
-
+
{{ publishTime }}
·
浏览 {{ stats.visit }}
@@ -237,10 +228,10 @@ function handleCloseCommentPanel() {
-
+
-
+
-
+
+
+
@@ -311,8 +304,24 @@ function handleCloseCommentPanel() {
+
+
+
+
+
+
+ 返回
+
+
+
-
+
{{ stats.upvote }}
-
+
- {{ stats.comment }}
+ {{ stats.comment }}
@@ -343,13 +352,13 @@ function handleCloseCommentPanel() {
- 分享
+ 分享
@@ -358,24 +367,12 @@ function handleCloseCommentPanel() {
-
+
-
-
diff --git a/src/utils/imageHelper.ts b/src/utils/imageHelper.ts
index 81312c6..65627c8 100644
--- a/src/utils/imageHelper.ts
+++ b/src/utils/imageHelper.ts
@@ -1,5 +1,5 @@
import { completeUrl } from '@/utils/url'
-import { getRandomUrl } from '@/utils/randomResources'
+import { getCrAvatar, getRandomUrl } from '@/utils/randomResources'
/**
* 图片封面处理
@@ -7,10 +7,30 @@ import { getRandomUrl } from '@/utils/randomResources'
* @returns 处理后的图片封面
*/
export function cover(cover: string) {
+ const defaultCover = getRandomUrl()
+ if (!cover) {
+ return defaultCover
+ }
if (cover.trim()) {
return completeUrl(cover)
}
- return getRandomUrl()
+ return defaultCover
+}
+
+/**
+ * 头像处理
+ * @param avatar 头像
+ * @returns 处理后的头像, 默认返回复古头像
+ */
+export function avatar(avatar: string) {
+ const defaultAvatar = getCrAvatar('retro')
+ if (!avatar) {
+ return defaultAvatar
+ }
+ if (avatar.trim()) {
+ return completeUrl(avatar)
+ }
+ return defaultAvatar
}
/**
diff --git a/src/utils/randomResources.ts b/src/utils/randomResources.ts
index 8c00b5f..0da11a2 100644
--- a/src/utils/randomResources.ts
+++ b/src/utils/randomResources.ts
@@ -1,5 +1,3 @@
-import { sleep } from '@/utils/common'
-
export const randomImageUrl = {
ycy: 'https://t.alcy.cc/ycy',
pc: 'https://t.alcy.cc/pc',
@@ -7,6 +5,7 @@ export const randomImageUrl = {
picsum: 'https://picsum.photos/800/600',
bing: 'https://bing.img.run/rand_uhd.php',
xsot: 'https://api.xsot.cn/bing?jump=true',
+ boxmoe: 'https://api.boxmoe.com/random.php',
}
type randomUrlKeys = keyof typeof randomImageUrl
@@ -15,6 +14,12 @@ export const randomVideosUrl = {
acg: 'https://t.alcy.cc/acg',
}
+/**
+ * 获取 Picsum 随机图片URL
+ * @param width 图片宽度 默认800
+ * @param height 图片高度 默认600
+ * @returns 随机图片URL
+ */
export function getPicSumImages(width: number = 800, height?: number) {
const t = `${Date.now()}+${Math.random()}`
if (!height) {
@@ -23,6 +28,26 @@ export function getPicSumImages(width: number = 800, height?: number) {
return `https://picsum.photos/${width}/${height}?t=${t}`
}
+/**
+ * 获取 DiceURL
+ * @param avatar 头像名称 可选值:lorelei=简约卡通人脸, pixel-art=像素小人, adventurer=可爱大头, avataaars=极简线条
+ * @returns 头像URL
+ */
+export function getDiceBearAvatar(avatar: 'lorelei' | 'pixel-art' | 'adventurer' | 'avataaars', size?: number) {
+ const t = `${Date.now()}+${Math.random()}`
+ return `https://api.dicebear.com/9.x/${avatar}/svg?size=${size || 128}&random=${t}`
+}
+
+/**
+ * 获取 CravatarURL
+ * @param avatar 头像名称 可选值:monsterid=怪物头像, retro=复古头像, identicon=图标头像
+ * @returns 头像URL
+ */
+export function getCrAvatar(avatar: 'monsterid' | 'retro' | 'identicon', size?: number) {
+ const id = `${Date.now()}+${Math.random()}`
+ return `https://cravatar.cn/avatar/${id}?d=${avatar}&s=${size || 128}`
+}
+
/**
* 获取随机图片URL
* @param type 图片类型 默认pc