[{"data":1,"prerenderedAt":719},["ShallowReactive",2],{"\u002F2026\u002F04\u002Fhotnuxtpage":3,"index_posts":206,"surround-\u002F2026\u002F04\u002Fhotnuxtpage":714},{"id":4,"title":5,"body":6,"categories":179,"date":181,"description":182,"draft":183,"extension":184,"image":185,"meta":186,"navigation":188,"path":189,"permalink":190,"published":190,"readingTime":191,"recommend":196,"references":190,"seo":197,"sitemap":198,"stem":199,"subtitle":190,"tags":200,"type":203,"updated":204,"__hash__":205},"content\u002Fposts\u002F2026\u002F04\u002FhotNuxtPage.md","热搜页面（Nuxt版本）",{"type":7,"value":8,"toc":168},"minimark",[9,13,36,39,87,90,95,122,125],[10,11,12],"h2",{"id":12},"前言",[14,15,16,17,24,25,30,31,35],"p",{},"最近这段时间，我一直寻找一个新的功能而不需云服务器来进行托管的，而在",[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fblog.liushen.fun",[22],"nofollow","柳神","的博客中翻看时有这么一篇",[18,26,29],{"href":27,"rel":28},"https:\u002F\u002Fblog.liushen.fun\u002Fposts\u002F891edc78\u002F",[22],"文章","。里面正好有一类没尝试过的东西，并且还是用json数据类型的，在查看仓库并且通过",[32,33,34],"code",{"code":34},"codex","来为Nuxt适配，也就有这样一篇文章。",[10,37,38],{"id":38},"核心代码列表",[40,41,42,53,59,65,71,81],"ul",{},[43,44,45,48,49,52],"li",{},[32,46,47],{"code":47},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotPageMain.vue","：主体框架，将其他的",[32,50,51],{"code":51},"vue","模块进行链接减少整体难维护",[43,54,55,58],{},[32,56,57],{"code":57},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotPageHeader.vue","：卡片顶部栏，作为展示热搜来源、热搜类型、热搜总数、热搜更新时间四类数据",[43,60,61,64],{},[32,62,63],{"code":63},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotPageLoading.vue","：整体加载文件，在切换的时候加载",[43,66,67,70],{},[32,68,69],{"code":69},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotPagePagination.vue","：底部导航条，作为无损切换不同页面展示且无需重新加载",[43,72,73,76,77,80],{},[32,74,75],{"code":75},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotCardList.vue","：卡片列表，作为链接",[32,78,79],{"code":79},"hotCardShow.vue","的工具",[43,82,83,86],{},[32,84,85],{"code":85},"\u002Fapp\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotCardShow.vue","：展示出热搜",[10,88,89],{"id":89},"核心代码",[91,92,94],"h3",{"id":93},"主页面主模块","主页面&主模块",[96,97,99,113],"tab",{":tabs":98},"[\"主页面\", \"主模块\"]",[100,101,103],"template",{"v-slot:tab1":102},"",[104,105,111],"pre",{"className":106,"code":108,"filename":109,"language":51,"meta":110},[107],"language-vue","\u003Cscript setup lang=\"ts\">\nimport HotPageCardItem from '~\u002Fcomponents\u002Fyjluo\u002Fhot\u002FhotPageMain.vue';\n\nconst hotTab = ['哔哩哔哩', '微博', '抖音', '知乎', '36氪', '百度']\nconst layoutStore = useLayoutStore()\n\u002F\u002F 设置侧边栏组件\nlayoutStore.setAside(['blog-stats', 'blog-tech', 'blog-log'])\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"HotPageMain\">\n    \u003Ctab :tabs=\"hotTab\">\n      \u003Ctemplate v-slot:tab1>\n        \u003CHotPageCardItem -cache='true' -name-type='哔哩哔哩' -mini-name-type='bilibili' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate v-slot:tab2>\n        \u003CHotPageCardItem -cache='true' -name-type='微博' -mini-name-type='weibo' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate v-slot:tab3>\n        \u003CHotPageCardItem -cache='true' -name-type='抖音' -mini-name-type='douyin' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate v-slot:tab4>\n        \u003CHotPageCardItem -cache='true' -name-type='知乎' -mini-name-type='zhihu' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate v-slot:tab5>\n        \u003CHotPageCardItem -cache='true' -name-type='36氪' -mini-name-type='36kr' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n      \u003Ctemplate v-slot:tab6>\n        \u003CHotPageCardItem -cache='true' -name-type='百度' -mini-name-type='baidu' -categrory-type='热搜' \u002F>\n      \u003C\u002Ftemplate>\n    \u003C\u002Ftab>    \n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n.HotPageMain {\n  padding: 1rem;\n}\n\u003C\u002Fstyle>\n","hot.vue","lang=\"vue\"",[32,112,108],{"__ignoreMap":102},[100,114,115],{"v-slot:tab2":102},[104,116,120],{"className":117,"code":118,"filename":119,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\nimport type { ApiResponse } from '~\u002Ftypes\u002Fhot'\nimport HotPageHeader from '.\u002Fheader\u002FhotPageHeader.vue';\nimport HotPageLoading from '.\u002Fbody\u002FhotPageLoading.vue';\nimport HotCardList from '.\u002Fbody\u002FhotCardList.vue';\nimport HotPagePagination from '.\u002Fbody\u002FhotPagePagination.vue';\n\nconst appConfig = useAppConfig()\n\nconst props = defineProps\u003C{\n  Cache: 'true' | 'false'\n  NameType: '哔哩哔哩' | '微博' | '抖音' | '知乎' | '36氪' | '百度'\n  MiniNameType: 'bilibili' | 'weibo' | 'douyin' | 'zhihu' | '36kr' | 'baidu'\n  CategroryType: '热搜'\n}>()\n\nconst requestHeaders = {}\n\nconst requestUrl = computed(() =>\n  `${appConfig.hotGetConfig.Api}\u002F${props.MiniNameType}`\n)\n\nconst fetchKey = computed(() => `hot-${props.MiniNameType}-${props.Cache}`)\n\nconst {\n  data: responseData,\n  pending,\n  error,\n  refresh,\n} = useFetch\u003CApiResponse>(requestUrl, {\n  query: { cache: props.Cache },\n  headers: requestHeaders,\n  key: fetchKey,\n  default: () => ({ total: 0, updateTime: '', data: [] }),\n  server: false,\n  lazy: false,\n  watch: [requestUrl, () => props.Cache],\n})\n\nconst hotList = computed(() => {\n  const list = responseData.value?.data\n  return Array.isArray(list) ? list : []\n})\n\nconst hotTotal = computed(() => {\n  return typeof responseData.value?.total === 'number'\n    ? responseData.value.total\n    : hotList.value.length\n})\n\nconst updateTime = computed(() => responseData.value?.updateTime ?? '')\n\n\u002F\u002F 分页状态\nconst currentPage = ref(1)\nconst itemsPerPage = ref(20)\n\nconst totalPages = computed(() =>\n  Math.max(1, Math.ceil(hotList.value.length \u002F itemsPerPage.value))\n)\n\nconst paginatedList = computed(() => {\n  const start = (currentPage.value - 1) * itemsPerPage.value\n  const end = start + itemsPerPage.value\n  return hotList.value.slice(start, end)\n})\n\nfunction goToPage(page: number) {\n  if (page >= 1 && page \u003C= totalPages.value) {\n    currentPage.value = page\n  }\n}\n\nfunction nextPage() {\n  if (currentPage.value \u003C totalPages.value) {\n    currentPage.value++\n  }\n}\n\nfunction prevPage() {\n  if (currentPage.value > 1) {\n    currentPage.value--\n  }\n}\n\n\u002F\u002F 当平台或缓存参数变化时，重置页码\nwatch(\n  () => [props.MiniNameType, props.Cache],\n  () => {\n    currentPage.value = 1\n  }\n)\n\n\u002F\u002F 当数据变化时，修正页码\nwatch(hotList, () => {\n  if (currentPage.value > totalPages.value) {\n    currentPage.value = totalPages.value || 1\n  }\n})\n\n\u002F\u002F 状态消息\nconst statusMessage = computed(() => {\n  if (pending.value) return '加载中...'\n  if (error.value) {\n    return error.value instanceof Error\n      ? error.value.message\n      : '加载失败'\n  }\n  if (!hotList.value.length) return '暂无数据'\n  return ''\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"cardMain\">\n    \u003CHotPageHeader\n      :mini-name-type=\"MiniNameType\"\n      :name-type=\"NameType\"\n      :categrory-type=\"CategroryType\"\n      :hot-total=\"hotTotal\"\n      :update-time=\"updateTime\"\n    \u002F>\n\n    \u003Cdiv class=\"cardBody\">\n      \u003CHotPageLoading\n        v-if=\"pending || error || !hotList.length\"\n        :pending=\"pending\"\n        :error=\"error\"\n        :is-empty=\"!pending && !error && !hotList.length\"\n        :message=\"statusMessage\"\n        @retry=\"refresh\"\n      \u002F>\n\n      \u003Cdiv v-else class=\"contentArea\">\n        \u003CHotCardList\n          :items=\"paginatedList\"\n          :current-page=\"currentPage\"\n          :items-per-page=\"itemsPerPage\"\n        \u002F>\n\n        \u003CHotPagePagination\n          v-if=\"totalPages > 1\"\n          :current-page=\"currentPage\"\n          :total-pages=\"totalPages\"\n          @go=\"goToPage\"\n          @prev=\"prevPage\"\n          @next=\"nextPage\"\n        \u002F>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$border-light: #eee;\n$shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.05);\n$bg-white: #fff;\n$spacing-lg: 16px;\n$radius-xl: 12px;\n\n.cardMain {\n  border: 1px solid $border-light;\n  border-radius: $radius-xl;\n  padding: $spacing-lg;\n  background: $bg-white;\n  box-shadow: $shadow-sm;\n}\n\n.cardBody {\n  min-height: 120px;\n\n  .contentArea {\n    display: flex;\n    flex-direction: column;\n  }\n}\n\u003C\u002Fstyle>\n","hotPageMain.vue",[32,121,118],{"__ignoreMap":102},[91,123,124],{"id":124},"分模块",[96,126,128,136,144,152,160],{":tabs":127},"[\"hotPageHeader.vue\", \"hotPageLoading.vue\", \"hotPagePagination.vue\", \"hotCardList.vue\", \"hotCardShow.vue\"]",[100,129,130],{"v-slot:tab1":102},[104,131,134],{"className":132,"code":133,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{\n  miniNameType: 'bilibili' | 'weibo' | 'douyin' | 'zhihu' | '36kr' | 'baidu'\n  nameType: '哔哩哔哩' | '微博' | '抖音' | '知乎' | '36氪' | '百度'\n  categroryType: '热搜'\n  hotTotal: number\n  updateTime: string\n}>()\n\nconst nowTimestamp = ref(Date.now())\nlet timer: ReturnType\u003Ctypeof setInterval> | null = null\n\nonMounted(() => {\n  timer = setInterval(() => {\n    nowTimestamp.value = Date.now()\n  }, 60 * 1000)\n})\n\nonBeforeUnmount(() => {\n  if (timer) {\n    clearInterval(timer)\n    timer = null\n  }\n})\n\nconst relativeUpdateText = computed(() => {\n  if (!props.updateTime) return '暂无更新时间'\n\n  const updated = new Date(props.updateTime).getTime()\n  if (Number.isNaN(updated)) return '暂无更新时间'\n\n  const diff = nowTimestamp.value - updated\n  if (diff \u003C= 0) return '刚刚更新'\n\n  const totalMinutes = Math.floor(diff \u002F 1000 \u002F 60)\n  const days = Math.floor(totalMinutes \u002F (60 * 24))\n  const hours = Math.floor((totalMinutes % (60 * 24)) \u002F 60)\n  const minutes = totalMinutes % 60\n\n  if (days > 0) return `${days}天前更新`\n  if (hours === 0 && minutes === 0) return '刚刚更新'\n  if (hours \u003C= 0 && minutes > 0) return `${minutes}分钟前更新`\n  if (hours > 0 && minutes === 0) return `${hours}小时前更新}`\n\n  return `${hours}小时${minutes}分钟前更新`\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"cardMainHeader\">\n    \u003Cdiv class=\"mainHeaderIcon\">\n      \u003CNuxtImg\n        :src=\"`\u002Fimage\u002FPageImageAssets\u002Fhot\u002F${miniNameType}.avif`\"\n        :alt=\"nameType\"\n        width=\"32\"\n        height=\"32\"\n      \u002F>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"mainHeaderName\">\n      \u003Cspan>{{ nameType }}\u003C\u002Fspan>\n      \u003Csmall class=\"category\">{{ categroryType }}\u003C\u002Fsmall>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"mainHeaderData\">\n      \u003Cdiv class=\"headerData\">\n        共 {{ hotTotal }} 条 · {{ relativeUpdateText }}\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$text-tertiary: #999;\n$border-lighter: #f5f5f5;\n$spacing-md: 12px;\n$spacing-lg: 16px;\n\n.cardMainHeader {\n  display: flex;\n  align-items: center;\n  gap: $spacing-md;\n  margin-bottom: $spacing-lg;\n  padding-bottom: $spacing-md;\n  border-bottom: 1px solid $border-lighter;\n\n  .mainHeaderName {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n\n    .category {\n      color: $text-tertiary;\n      font-size: 12px;\n    }\n  }\n\n  .mainHeaderData {\n    display: flex;\n    align-items: flex-end;\n    font-size: 12px;\n\n    .headerData {\n      font-weight: bold;\n      position: relative;\n    }\n  }\n}\n\u003C\u002Fstyle>\n",[32,135,133],{"__ignoreMap":102},[100,137,138],{"v-slot:tab2":102},[104,139,142],{"className":140,"code":141,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{\n  pending: boolean\n  error: unknown\n  isEmpty: boolean\n  message: string\n}>()\n\nconst emit = defineEmits\u003C{\n  (e: 'retry'): void\n}>()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv\n    class=\"status\"\n    :class=\"{\n      loading: pending,\n      error: !!error,\n      empty: isEmpty\n    }\"\n  >\n    \u003Cspan>{{ message }}\u003C\u002Fspan>\n    \u003Cbutton\n      v-if=\"error\"\n      class=\"retryBtn\"\n      @click=\"emit('retry')\"\n    >\n      重试\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$primary-color: #409eff;\n$text-secondary: #666;\n$bg-white: #fff;\n$spacing-sm: 8px;\n$spacing-md: 12px;\n$spacing-xl: 20px;\n$radius-md: 6px;\n\n.status {\n  text-align: center;\n  color: $text-secondary;\n  padding: $spacing-xl 0;\n\n  &.error {\n    color: #e74c3c;\n  }\n\n  .retryBtn {\n    display: inline-block;\n    margin-top: $spacing-sm;\n    margin-left: $spacing-md;\n    padding: 4px $spacing-md;\n    border: none;\n    border-radius: $radius-md;\n    background: $primary-color;\n    color: $bg-white;\n    cursor: pointer;\n  }\n}\n\u003C\u002Fstyle>\n",[32,143,141],{"__ignoreMap":102},[100,145,146],{"v-slot:tab3":102},[104,147,150],{"className":148,"code":149,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{\n  currentPage: number\n  totalPages: number\n}>()\n\nconst emit = defineEmits\u003C{\n  (e: 'go', page: number): void\n  (e: 'prev'): void\n  (e: 'next'): void\n}>()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"pagination\">\n    \u003Cbutton\n      class=\"pageBtn\"\n      :disabled=\"currentPage === 1\"\n      @click=\"emit('prev')\"\n    >\n      上一页\n    \u003C\u002Fbutton>\n\n    \u003Cdiv class=\"pageNumbers\">\n      \u003Cbutton\n        v-for=\"page in totalPages\"\n        :key=\"page\"\n        class=\"pageNumber\"\n        :class=\"{ active: page === currentPage }\"\n        @click=\"emit('go', page)\"\n      >\n        {{ page }}\n      \u003C\u002Fbutton>\n    \u003C\u002Fdiv>\n\n    \u003Cbutton\n      class=\"pageBtn\"\n      :disabled=\"currentPage === totalPages\"\n      @click=\"emit('next')\"\n    >\n      下一页\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$primary-color: #409eff;\n$border-light: #eee;\n$border-lighter: #f5f5f5;\n$bg-white: #fff;\n$spacing-xs: 4px;\n$spacing-sm: 8px;\n$spacing-md: 12px;\n$spacing-lg: 16px;\n$radius-sm: 4px;\n\n.pagination {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: $spacing-sm;\n  margin-top: $spacing-lg;\n  padding-top: $spacing-lg;\n  border-top: 1px solid $border-lighter;\n\n  .pageBtn {\n    padding: $spacing-xs $spacing-md;\n    border: 1px solid $border-light;\n    border-radius: $radius-sm;\n    background: $bg-white;\n    cursor: pointer;\n    transition: all 0.2s;\n\n    &:disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n    }\n\n    &:not(:disabled):hover {\n      background: $border-lighter;\n    }\n  }\n\n  .pageNumbers {\n    display: flex;\n    gap: $spacing-xs;\n\n    .pageNumber {\n      width: 32px;\n      height: 32px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border: 1px solid $border-light;\n      border-radius: $radius-sm;\n      background: $bg-white;\n      cursor: pointer;\n      transition: all 0.2s;\n\n      &:hover {\n        background: $border-lighter;\n      }\n\n      &.active {\n        background: $primary-color;\n        color: $bg-white;\n        border-color: $primary-color;\n      }\n    }\n  }\n}\n\u003C\u002Fstyle>\n",[32,151,149],{"__ignoreMap":102},[100,153,154],{"v-slot:tab4":102},[104,155,158],{"className":156,"code":157,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\nimport type { HotItem } from '~\u002Ftypes\u002Fhot'\nimport HotCardShow from '.\u002FhotCardShow.vue';\n\ndefineProps\u003C{\n  items: HotItem[]\n  currentPage: number\n  itemsPerPage: number\n}>()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"hotList\">\n    \u003CHotCardShow\n      v-for=\"(item, index) in items\"\n      :key=\"item.id || index\"\n      :item=\"item\"\n      :rank=\"(currentPage - 1) * itemsPerPage + index + 1\"\n    \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$spacing-md: 12px;\n\n.hotList {\n  display: flex;\n  flex-direction: column;\n  gap: $spacing-md;\n}\n\u003C\u002Fstyle>\n",[32,159,157],{"__ignoreMap":102},[100,161,162],{"v-slot:tab5":102},[104,163,166],{"className":164,"code":165,"language":51,"meta":110},[107],"\u003Cscript setup lang=\"ts\">\nimport type { HotItem } from '~\u002Ftypes\u002Fhot'\n\nconst props = defineProps\u003C{\n  item: HotItem\n  rank: number\n}>()\n\nconst itemLink = computed(() => {\n  const url = props.item.url || props.item.mobileUrl || ''\n  return typeof url === 'string' ? url.trim() : ''\n})\n\nconst hasValidLink = computed(() => !!itemLink.value)\n\nconst rankClass = computed(() => ({\n  top1: props.rank === 1,\n  top2: props.rank === 2,\n  top3: props.rank === 3,\n}))\n\nconst descText = computed(() => {\n  return props.item.desc?.trim() || '暂无描述'\n})\n\nconst authorText = computed(() => {\n  return props.item.author?.trim() || ''\n})\n\nconst hotText = computed(() => {\n  return props.item.hot ? String(props.item.hot) : ''\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"hotItem\">\n    \u003Ccomponent\n      :is=\"hasValidLink ? 'a' : 'div'\"\n      class=\"hotItemLink\"\n      :href=\"hasValidLink ? itemLink : undefined\"\n      :target=\"hasValidLink ? '_blank' : undefined\"\n      :rel=\"hasValidLink ? 'noopener noreferrer' : undefined\"\n    >\n      \u003Cdiv class=\"rank\" :class=\"rankClass\">\n        {{ rank }}\n      \u003C\u002Fdiv>\n\n      \u003Cdiv class=\"content\">\n        \u003Cdiv class=\"title\">{{ item.title }}\u003C\u002Fdiv>\n        \u003Cdiv class=\"desc\">{{ descText }}\u003C\u002Fdiv>\n\n        \u003Cdiv v-if=\"authorText || hotText\" class=\"meta\">\n          \u003Cspan v-if=\"authorText\">作者：{{ authorText }}\u003C\u002Fspan>\n          \u003Cspan v-if=\"hotText\">热度：{{ hotText }}\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fcomponent>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cstyle lang=\"scss\" scoped>\n$text-primary: #222;\n$text-secondary: #666;\n$text-tertiary: #999;\n$border-lightest: #f2f2f2;\n$border-lighter: #f5f5f5;\n$spacing-xs: 4px;\n$spacing-md: 12px;\n$radius-md: 6px;\n\n.hotItem {\n  border-bottom: 1px solid $border-lightest;\n  padding-bottom: $spacing-md;\n\n  &:last-child {\n    border-bottom: none;\n  }\n\n  .hotItemLink {\n    display: flex;\n    gap: $spacing-md;\n    text-decoration: none;\n    color: inherit;\n\n    .rank {\n      width: 24px;\n      height: 24px;\n      min-width: 24px;\n      font-size: 12px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background-color: $border-lighter;\n      border-radius: $radius-md;\n      transition: all 0.3s;\n      color: #333;\n\n      &.top1 {\n        background-color: #ea444d;\n        color: #fff;\n      }\n\n      &.top2 {\n        background-color: #ed702d;\n        color: #fff;\n      }\n\n      &.top3 {\n        background-color: #eead3f;\n        color: #fff;\n      }\n    }\n\n    .content {\n      flex: 1;\n      min-width: 0;\n\n      .title {\n        font-size: 15px;\n        font-weight: 600;\n        color: $text-primary;\n        margin-bottom: $spacing-xs;\n        word-break: break-word;\n      }\n\n      .desc {\n        font-size: 13px;\n        color: $text-secondary;\n        margin-bottom: $spacing-xs;\n        word-break: break-word;\n      }\n\n      .meta {\n        display: flex;\n        flex-wrap: wrap;\n        gap: $spacing-md;\n        font-size: 12px;\n        color: $text-tertiary;\n      }\n    }\n  }\n}\n\u003C\u002Fstyle>\n",[32,167,165],{"__ignoreMap":102},{"title":102,"searchDepth":169,"depth":169,"links":170},4,[171,173,174],{"id":12,"depth":172,"text":12},2,{"id":38,"depth":172,"text":38},{"id":89,"depth":172,"text":89,"children":175},[176,178],{"id":93,"depth":177,"text":94},3,{"id":124,"depth":177,"text":124},[180],"站点魔改","2026-04-13 14:00:00","该文章主要写了对于低价机器的试水，并提醒是超开类型的机器。在测试的过程中发现机器性能较高，且展示出机器的具体价格，并单独列出只有精简版未采用完整版测试。",false,"md","\u002Fimage\u002FPostCover\u002FfooterNuxtMeihua.avif",{"slots":187},{},true,"\u002F2026\u002F04\u002Fhotnuxtpage",null,{"text":192,"minutes":193,"time":194,"words":195},"9 min read",8.985,539100,1797,1,{"title":5,"description":182},{"loc":189},"posts\u002F2026\u002F04\u002FhotNuxtPage",[201,202],"Nuxt","页面","tech","2026-04-13 22:00:00","OKYSxEIRFpIsCXYBWpN2Bae7nvxjBhqmUGYac7aQkk8",[207,224,238,251,265,278,291,303,317,329,340,354,369,384,397,414,428,443,458,473,488,504,521,537,549,563,576,588,602,614,624,636,647,659,670,674,683,696,705],{"categories":208,"date":210,"description":211,"image":190,"path":212,"readingTime":213,"recommend":190,"tags":218,"title":222,"type":203,"updated":223},[209],"技术探索","2023-12-06 12:45:00","本篇转载三种不同方案（已经放好原文章链接）","\u002F2023\u002F03\u002Fessaythree",{"text":214,"minutes":215,"time":216,"words":217},"48 min read",47.34,2840400,9468,[219,220,221],"hexo","butterfly","美化","即刻短文的三种部署方案","2023-12-07 14:09:00",{"categories":225,"date":226,"description":227,"image":228,"path":229,"readingTime":230,"recommend":196,"tags":235,"title":236,"type":203,"updated":237},[180],"2024-04-19 10:00:00","友链页面美化以及添加功能","\u002Fimage\u002FPostCover\u002FflinkPage.avif","\u002F2024\u002F04\u002Fflinkpagemeihua",{"text":231,"minutes":232,"time":233,"words":234},"11 min read",10.8,648000,2160,[219,220],"友链魔改","2025-04-19 12:09:00",{"categories":239,"date":240,"description":241,"image":242,"path":243,"readingTime":244,"recommend":196,"tags":248,"title":249,"type":203,"updated":250},[180],"2025-02-05 09:00:00","这篇文章讲述在博客中对导航栏进行修改，并添加多个产品页面地址，且采用安知鱼的导航栏CSS样式表。","\u002Fimage\u002FPostCover\u002FnavMuogai.avif","\u002F2025\u002F02\u002Fbutterflynavadd",{"text":192,"minutes":245,"time":246,"words":247},8.585,515100,1717,[219,220],"butterfly导航栏修改方案","2025-03-05 10:00:00",{"categories":252,"date":253,"description":254,"image":255,"path":256,"readingTime":257,"recommend":196,"tags":262,"title":263,"type":203,"updated":264},[180],"2025-02-27 10:10:55","本篇文章讲述了如何在博客的底部模块进行魔改添加图标、来源图片、返回顶部以及建站时间，对建站时间进行js内联到模块中。","\u002Fimage\u002FPostCover\u002FfooterMeihua.avif","\u002F2025\u002F02\u002Ffooterqcqxstyle",{"text":258,"minutes":259,"time":260,"words":261},"4 min read",3.31,198600,662,[219,220,221],"轻笑底部美化","2025-02-28 10:00:00",{"categories":266,"date":267,"description":268,"image":269,"path":270,"readingTime":271,"recommend":190,"tags":275,"title":276,"type":203,"updated":277},[180],"2025-03-24 08:00:09","这篇简述如何给自己博客中的归档、分类、标签页三个页面的文章卡片加上所属分类和标签，并说明了具体的实践环境，以最大限度的方式进行CSS美化。但也请注意要经常备份以免出现大量错误。","\u002Fimage\u002FPostCover\u002FarchiveMougai.avif","\u002F2025\u002F03\u002Farchivemougai",{"text":258,"minutes":272,"time":273,"words":274},3.08,184800,616,[219,220],"给页面加上所属分类和标签以及美化","2025-03-24 10:56:09",{"categories":279,"date":280,"description":281,"image":282,"path":283,"readingTime":284,"recommend":190,"tags":288,"title":289,"type":203,"updated":290},[180],"2025-03-05 08:00:00","这篇文章讲述如何给自己博客中的归档、分类、标签页三个页面的文章卡片添加数字来进行编排，以及对添加的数字进行CSS美化，但也请注意要经常备份以免出现错误。","https:\u002F\u002Fsourceimage.s3.bitiful.net\u002Fimg\u002Fdefault_cover_29.avif?v=20260104","\u002F2025\u002F03\u002Fartice-sort",{"text":258,"minutes":285,"time":286,"words":287},3.48,208800,696,[219,220],"美化文章卡片显示数字","2025-03-06 18:00:00",{"categories":292,"date":280,"description":293,"image":294,"path":295,"readingTime":296,"recommend":190,"tags":301,"title":302,"type":203,"updated":290},[180],"这篇文章讲述如何在页面中添加模块以及使用CSS添加颜色以及背景图片。","https:\u002F\u002Fsourceimage.s3.bitiful.net\u002Fimg\u002Fdefault_cover_21.avif","\u002F2025\u002F03\u002Fbackgroud-qcqx",{"text":297,"minutes":298,"time":299,"words":300},"1 min read",0.71,42600,142,[219,220],"轻笑风格背景",{"categories":304,"date":305,"description":306,"image":307,"path":308,"readingTime":309,"recommend":190,"tags":314,"title":315,"type":203,"updated":316},[180],"2025-03-24 09:00:00","本文章以安知鱼的页面文件为模版进行大幅度修改，仿轻笑的关于页面的模块摆放以及调整CSS样式来进行细致魔改。","\u002Fimage\u002FPostCover\u002FbtfAboutPage.avif","\u002F2025\u002F03\u002Fbtfaboutpage",{"text":310,"minutes":311,"time":312,"words":313},"24 min read",23.275,1396500,4655,[219,220],"关于页面(butterfly)","2025-03-25 11:20:00",{"categories":318,"date":280,"description":319,"image":320,"path":321,"readingTime":322,"recommend":190,"tags":327,"title":328,"type":203,"updated":290},[180],"这篇文章讲述了如何美化博客侧边栏，并调整各个卡片内容的样式表。","\u002Fimage\u002FPostCover\u002FcardMeihua.avif","\u002F2025\u002F03\u002Fcardmeihua",{"text":323,"minutes":324,"time":325,"words":326},"5 min read",4.77,286200,954,[219,220],"卡片美化",{"categories":330,"date":280,"description":331,"image":332,"path":333,"readingTime":334,"recommend":190,"tags":338,"title":339,"type":203,"updated":290},[180],"从零开始魔改butterfly","\u002Fimage\u002FPostCover\u002FfunctionMeihua.avif","\u002F2025\u002F03\u002Ffunctionmeihua",{"text":297,"minutes":335,"time":336,"words":337},0.345,20700,69,[219,220],"功能美化",{"categories":341,"date":342,"description":343,"image":344,"path":345,"readingTime":346,"recommend":190,"tags":351,"title":352,"type":203,"updated":353},[180],"2025-03-01 10:00:00","本文依照轻笑的部分内容，参考首页banner写法以及对首页banner添加鼠标滚动以及移动端滑动，通过CSS样式进行美化整个首页banner，此篇文章重点讲述了如何解决轻笑给的js内容在首页会出现不断加载的问题。","\u002Fimage\u002FPostCover\u002FrandomPost.avif","\u002F2025\u002F03\u002Frandompost",{"text":347,"minutes":348,"time":349,"words":350},"6 min read",5.595,335700,1119,[219,220,221],"Banner随机文章展示(轻笑同款)","2025-03-05 12:09:00",{"categories":355,"date":356,"description":357,"image":358,"path":359,"readingTime":360,"recommend":364,"tags":365,"title":367,"type":203,"updated":368},[180],"2025-08-11 10:00:00","本篇文章讲述了添加模块代码并在博客的友情链接中添加模块，且使用css美化","\u002Fimage\u002FPostCover\u002FlinkTop.avif","\u002F2025\u002F08\u002Flinktop",{"text":192,"minutes":361,"time":362,"words":363},8.88,532800,1776,11,[201,366,221],"魔改","在友链页面添加滚动头像banner","2025-08-11 20:49:00",{"categories":370,"date":371,"description":372,"image":373,"path":374,"readingTime":375,"recommend":380,"tags":381,"title":382,"type":203,"updated":383},[180],"2025-08-22 10:00:00","近期将博客迁移至Nuxt框架时，重新搭建了「关于页面」。过程中添加了技能展示组件（skillinfo.vue），实现标签分组渲染；新建about.vue页面，整合个人信息、技能、偏好等多模块内容，并通过ts定义数据接口（about.ts\u002Fcreativity.ts）。","\u002Fimage\u002FPostCover\u002FnuxtAboutPage.avif","\u002F2025\u002F08\u002Fnuxtaboutpage",{"text":376,"minutes":377,"time":378,"words":379},"16 min read",15.92,955200,3184,10,[201,366,221],"关于页面(Nuxt)","2025-09-01 20:49:00",{"categories":385,"date":386,"description":387,"image":388,"path":389,"readingTime":390,"recommend":394,"tags":395,"title":396,"type":203,"updated":383},[180],"2025-09-02 10:00:00","本篇文章主要简述了如何给Nuxt框架添加站点详情","https:\u002F\u002Fwww.yjluo.top\u002Fimage\u002FPostCover\u002FsiteInfo.avif","\u002F2025\u002F09\u002Fsitelinkpageadd",{"text":323,"minutes":391,"time":392,"words":393},4.38,262800,876,9,[201,366,221],"添加站点详情页面",{"categories":398,"date":400,"description":401,"image":402,"path":403,"readingTime":404,"recommend":190,"tags":408,"title":411,"type":412,"updated":413},[399],"日志记录","2025-12-28 10:00:00","该文章详细记录了2025年中的上下半年所做的事情，并且还透露出后续计划中会干什么。而在前言中也写到此文为水字数而出，上下半年均写到更换框架与服务有关于的内容。对于未来计划中提到了要对一些网站进行恢复、以及明年将在文章中加入与自创小说有关的内容","\u002Fimage\u002FPostCover\u002FannualSummary.avif","\u002F2025\u002F12\u002Fannualsummary",{"text":258,"minutes":405,"time":406,"words":407},3.855,231300,771,[409,410],"总结",2025,"年度总结：旧去新","story","2025-12-28 20:49:00",{"categories":415,"date":416,"description":417,"image":418,"path":419,"readingTime":420,"recommend":394,"tags":425,"title":426,"type":203,"updated":427},[180],"2025-12-01 10:00:00","该文章详细介绍了基于Vue3+TypeScript开发的豆瓣追更记录系统，采用组件化架构实现两栏筛选菜单、动态加载动画和卡片式作品展示，通过Pinia状态管理+Vite构建工具实现数据流管理，集成防抖加载、虚拟滚动等性能优化方案。","\u002Fimage\u002FPostCover\u002FbanguimPage.avif","\u002F2025\u002F12\u002Fbanguimpageadd",{"text":421,"minutes":422,"time":423,"words":424},"23 min read",22.175,1330500,4435,[201,366,221],"添加追更历史","2025-12-01 20:49:00",{"categories":429,"date":430,"description":431,"image":432,"path":433,"readingTime":434,"recommend":439,"tags":440,"title":441,"type":203,"updated":442},[180],"2025-12-23 10:00:00","该文章介绍Nuxt博客适配中评论模块的Vue组件实现与Artalk评论系统单例管理逻辑，并提供具体的适配评论表情包的Json信息，评论功能有着KaTeX数学公式渲染、图片灯箱、动态监听以及管理逻辑的初始化、计数、暗黑模式切换等方式。","\u002Fimage\u002FPostCover\u002FcommentMeihua.avif","\u002F2025\u002F12\u002Fcommentadd",{"text":435,"minutes":436,"time":437,"words":438},"32 min read",31.72,1903200,6344,8,[201,366,221],"评论优化","2026-03-01 20:49:00",{"categories":444,"date":445,"description":446,"image":447,"path":448,"readingTime":449,"recommend":454,"tags":455,"title":456,"type":203,"updated":457},[180],"2025-12-03 10:05:09","该博客持续维护Nuxt框架博客系统，新增装备页面实现硬件\u002F外设分类展示，支持动态过滤、标签筛选与规格参数渲染，通过TypeScript定义数据接口，结合Vue3响应式布局与SCSS响应式设计，完成设备卡片动态加载、悬停动效及跨端适配优化，集成评论跳转与购买信息展示功能。","\u002Fimage\u002FPostCover\u002FequipmentPage.avif","\u002F2025\u002F12\u002Fequipmentpageadd",{"text":450,"minutes":451,"time":452,"words":453},"8 min read",7.28,436800,1456,7,[201,366,221],"添加装备页面","2025-12-03 20:49:09",{"categories":459,"date":460,"description":461,"image":462,"path":463,"readingTime":464,"recommend":469,"tags":470,"title":471,"type":203,"updated":472},[180],"2025-12-09 10:00:00","该文章记录了项目版本迭代中的UI优化与功能调整，包括增加可后期换配置且内置移动到赞赏总览触发效果的打赏弹窗、优化头部封面移动端预览、增加版权图标虚化及打赏入口、将本地desc预览改ai摘要样式、增加版权卡片及更换头部信息样式。","\u002Fimage\u002FPostCover\u002FpostMeihua.avif","\u002F2025\u002F12\u002Fpostpagexiugai",{"text":465,"minutes":466,"time":467,"words":468},"12 min read",11.165,669900,2233,6,[201,366,221],"文章美化","2025-12-09 20:49:00",{"categories":474,"date":475,"description":476,"image":477,"path":478,"readingTime":479,"recommend":484,"tags":485,"title":486,"type":203,"updated":487},[180],"2025-12-04 10:00:00","该文章记录了项目版本迭代中的UI优化与功能调整，包括站点详情卡片组件化改造（采用Badge组件优化布局）、分类卡片新增文章数量统计功能（重新严重问题）、标签卡片新增文章标签统计功能、博主信息模块的拆分与重构，同时删除了冗余的左侧图片和完整博主卡片，最终形成模块化组件结构（涉及5个核心组件及数据调用逻辑调整）。","\u002Fimage\u002FPostCover\u002FsmallCard.avif","\u002F2025\u002F12\u002Fsmallcardadd",{"text":480,"minutes":481,"time":482,"words":483},"10 min read",9.745,584700,1949,5,[201,366,221],"侧边组件美化","2025-12-04 20:49:00",{"categories":489,"date":490,"description":491,"image":492,"path":493,"readingTime":494,"recommend":190,"tags":499,"title":502,"type":203,"updated":503},[180],"2026-01-27 10:00:00","自定义全局的样式颜色，具有对特定CSS中所具有的自定义样式颜色来进行整合，并且作者还顺便水了一篇文章","\u002Fimage\u002FPostCover\u002FcolorStyleAll.avif","\u002F2026\u002F01\u002Fcolorstyleall",{"text":495,"minutes":496,"time":497,"words":498},"14 min read",13.155,789300,2631,[500,501],"全局颜色","自定义","自定义全局颜色","2026-01-27 20:49:00",{"categories":505,"date":506,"description":507,"image":508,"path":509,"readingTime":510,"recommend":190,"tags":515,"title":519,"type":203,"updated":520},[209],"2026-01-11 10:00:00","这篇文章是一篇实战经验分享，主要讲解了如何利用腾讯云的EdgeOne边缘安全加速平台，为网站字体等静态资源搭建一个自定义的、高性能的镜像加速服务。","\u002Fimage\u002FPostCover\u002FjsdmEdge.avif","\u002F2026\u002F01\u002Fjsdmedge",{"text":511,"minutes":512,"time":513,"words":514},"3 min read",2.72,163200,544,[516,517,518],"镜像","EdgeOne","jsdmirror","使用EdgeOne CDN搭建自用Jsd镜像","2026-01-11 20:49:00",{"categories":522,"date":523,"description":524,"image":525,"path":526,"readingTime":527,"recommend":190,"tags":532,"title":535,"type":203,"updated":536},[209],"2026-01-28 19:00:00","本文是一篇关于 Komari Monitor（一款服务器监控系统）的详细介绍与实用指南。文章以作者个人经验为引，对比了哪吒监控（V0\u002FV1版本）与 Komari 在各方面的差异，并逐步演示了如何部署、配置和使用 Komari。","\u002Fimage\u002FPostCover\u002FkomariMonitor.avif","\u002F2026\u002F01\u002Fkomarimonitor",{"text":528,"minutes":529,"time":530,"words":531},"7 min read",6.86,411600,1372,[533,534],"探针","监控","komari：全新的探针站点","2026-01-29 13:00:00",{"categories":538,"date":539,"description":476,"image":540,"path":541,"readingTime":542,"recommend":169,"tags":546,"title":547,"type":203,"updated":548},[180],"2026-01-01 10:00:00","\u002Fimage\u002FPostCover\u002FNewYear.avif","\u002F2026\u002F01\u002Fnewyear",{"text":511,"minutes":543,"time":544,"words":545},2.15,129000,430,[201,366,221],"踏入2026：目标新方向","2026-01-01 20:49:00",{"categories":550,"date":551,"description":552,"image":553,"path":554,"readingTime":555,"recommend":190,"tags":560,"title":561,"type":412,"updated":562},[180],"2026-01-05 10:00:00","该文章记录了项目中对于字体、图片以及构建产物等静态资源的优化与处理，并且表示自身对于图片的存放位置进行优化。","\u002Fimage\u002FPostCover\u002FsiteAssets.avif","\u002F2026\u002F01\u002Fsiteassets",{"text":556,"minutes":557,"time":558,"words":559},"2 min read",1.82,109200,364,[201,366,221],"站点资源优化","2026-01-07 20:49:00",{"categories":564,"date":566,"description":182,"image":567,"path":568,"readingTime":569,"recommend":190,"tags":573,"title":574,"type":203,"updated":575},[565],"日常随笔","2026-01-12 10:00:00","\u002Fimage\u002FPostCover\u002FvpsTalk.avif","\u002F2026\u002F01\u002Fvpstalk",{"text":376,"minutes":570,"time":571,"words":572},15.545,932700,3109,[201,366,221],"随笔：低价主机试水","2026-01-12 20:49:00",{"categories":577,"date":578,"description":579,"image":567,"path":580,"readingTime":581,"recommend":190,"tags":585,"title":586,"type":203,"updated":587},[565],"2026-01-30 10:00:00","该文章主要写了对于大容量硬盘主机的试水。在测试的过程中发现机器性能较高，且展示出机器的具体价格，并单独列出只有精简版未采用完整版测试。","\u002F2026\u002F01\u002Fvpstalk-2",{"text":495,"minutes":582,"time":583,"words":584},13.965,837900,2793,[201,366,221],"随笔：大容量主机测试","2026-01-30 20:49:00",{"categories":589,"date":590,"description":591,"image":592,"path":593,"readingTime":594,"recommend":196,"tags":599,"title":600,"type":203,"updated":601},[180],"2026-02-20 10:00:00","该文章展示多个以鸣潮为主题的档案组件，包含具体代码、属性表格对应、预览整体组件、写法展示四种类型，并在文章末尾附加更新报告。","\u002Fimage\u002FPostCover\u002FWutheringWavesPostWidget.avif","\u002F2026\u002F02\u002Fwutheringwavespostwidget",{"text":595,"minutes":596,"time":597,"words":598},"100 min read",99.23,5953800,19846,[201,366,221],"【鸣潮】档案文章组件","2026-02-26 10:00:00",{"categories":603,"date":604,"description":182,"image":605,"path":606,"readingTime":607,"recommend":190,"tags":611,"title":612,"type":203,"updated":613},[209],"2026-02-03 10:00:00","\u002Fimage\u002FPostCover\u002FfnosInstall.avif","\u002F2026\u002F02\u002Ffnosinstall",{"text":192,"minutes":608,"time":609,"words":610},8.91,534600,1782,[201,366,221],"给老MAC升级为飞牛OS","2026-02-05 20:49:00",{"categories":615,"date":604,"description":182,"image":616,"path":617,"readingTime":618,"recommend":190,"tags":622,"title":623,"type":203,"updated":613},[180],"\u002Fimage\u002FPostCover\u002FmacBookPerformancTest.avif","\u002F2026\u002F02\u002Fmacbookperformanctest",{"text":511,"minutes":619,"time":620,"words":621},2.47,148200,494,[201,366,221],"【精简】测试老MAC性能",{"categories":625,"date":626,"description":182,"image":627,"path":628,"readingTime":629,"recommend":190,"tags":633,"title":634,"type":203,"updated":635},[180],"2026-02-04 10:00:00","\u002Fimage\u002FPostCover\u002FmusicInstall.avif","\u002F2026\u002F02\u002Fmusicinstall",{"text":192,"minutes":630,"time":631,"words":632},8.19,491400,1638,[201,366,221],"【本地+云端】搭建道理鱼音乐","2026-02-06 20:49:00",{"categories":637,"date":638,"description":182,"image":185,"path":639,"readingTime":640,"recommend":177,"tags":644,"title":645,"type":203,"updated":646},[180],"2026-03-03 10:00:00","\u002F2026\u002F03\u002Ffooternuxtmeihua",{"text":258,"minutes":641,"time":642,"words":643},3.235,194100,647,[201,366,221],"页脚魔改(Nuxt版本)","2026-03-06 10:00:00",{"categories":648,"date":649,"description":182,"image":185,"path":650,"readingTime":651,"recommend":172,"tags":656,"title":657,"type":203,"updated":658},[180],"2026-03-21 14:00:00","\u002F2026\u002F03\u002Fsteamgamepage",{"text":652,"minutes":653,"time":654,"words":655},"18 min read",17.265,1035900,3453,[201,202],"游戏展示页面","2026-03-22 10:00:00",{"categories":660,"date":661,"description":182,"image":185,"path":662,"readingTime":663,"recommend":196,"tags":667,"title":668,"type":203,"updated":669},[180],"2026-04-11 14:00:00","\u002F2026\u002F04\u002Fessaynuxtpage",{"text":347,"minutes":664,"time":665,"words":666},5.93,355800,1186,[201,202],"说说页面（Nuxt版本）","2026-04-11 22:00:00",{"categories":671,"date":181,"description":182,"image":185,"path":189,"readingTime":672,"recommend":196,"tags":673,"title":5,"type":203,"updated":204},[180],{"text":192,"minutes":193,"time":194,"words":195},[201,202],{"categories":675,"date":181,"description":182,"image":185,"path":676,"readingTime":677,"recommend":196,"tags":681,"title":682,"type":203,"updated":204},[180],"\u002F2026\u002F04\u002Fwebsite-essay",{"text":556,"minutes":678,"time":679,"words":680},1.685,101100,337,[201,202],"【杂谈】谈谈不受欢迎的博客技术特征",{"categories":684,"date":686,"description":401,"image":687,"path":688,"readingTime":689,"recommend":190,"tags":693,"title":694,"type":412,"updated":695},[685],"自设记录","2025-12-29 10:00:00","https:\u002F\u002Fsourceimage.s3.bitiful.net\u002Fpost\u002Fimg\u002FannualSummary\u002Fcover.webp","\u002Fnovel\u002Fworld\u002Fharmworld",{"text":556,"minutes":690,"time":691,"words":692},1.31,78600,262,[409,410],"世界志：鸿蒙界","2025-12-29 20:49:00",{"categories":697,"date":686,"description":401,"image":687,"path":698,"readingTime":699,"recommend":190,"tags":703,"title":704,"type":412,"updated":695},[685],"\u002Fnovel\u002Fworld\u002Flmmortalgod",{"text":528,"minutes":700,"time":701,"words":702},6.295,377700,1259,[409,410],"世界志：仙神界",{"categories":706,"date":686,"description":401,"image":687,"path":707,"readingTime":708,"recommend":190,"tags":712,"title":713,"type":412,"updated":695},[685],"\u002Fnovel\u002Fworld\u002Fdh",{"text":556,"minutes":709,"time":710,"words":711},1.65,99000,330,[409,410],"世界志：大荒",[715,717],{"title":668,"path":662,"stem":716,"date":661,"type":203,"children":-1},"posts\u002F2026\u002F04\u002FessayNuxtPage",{"title":682,"path":676,"stem":718,"date":181,"type":203,"children":-1},"posts\u002F2026\u002F04\u002Fwebsite-essay",1776607507868]