<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>项目 on 阿珏酱のBlog</title>
    <link>https://zh.moejue.cn/tags/%E9%A1%B9%E7%9B%AE/</link>
    <description>Recent content from 阿珏酱のBlog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
    <managingEditor>xxx@example.com (MoeJue)</managingEditor>
    <webMaster>xxx@example.com (MoeJue)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sat, 01 Aug 2026 13:12:42 +0000</lastBuildDate>
    
    
    <atom:link href="https://zh.moejue.cn/tags/%E9%A1%B9%E7%9B%AE/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>MoeKoe Music Mobile酷狗音乐第三方移动端播放器</title>
      <link>https://zh.moejue.cn/posts/342/</link>
      <pubDate>Sat, 01 Aug 2026 13:12:42 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/342/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music Mobile酷狗音乐第三方移动端播放器</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><img src="assets/images/icon.png" alt="MoeKoe Music"></p>
<p># MoeKoe Music Mobile</p>
<p>一款开源、简洁、高颜值的第三方酷狗音乐移动端播放器</p>
<p>基于 Expo / React Native 构建，是 [MoeKoeMusic](<a href="https://github.com/iAJue/MoeKoeMusic">https://github.com/iAJue/MoeKoeMusic</a>) 桌面版的移动端实现</p>
<p><a href="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile"><strong>🌎 GitHub仓库</strong></a>  |  <br>
<a href="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/releases"><strong>📦️ 下载安装包</strong></a>  |  <br>
<a href="https://MoeJue.cn"><strong>💬 访问博客</strong></a>  |  <br>
<a href="https://Music.MoeKoe.cn"><strong>🏠 项目主页</strong></a></p>
<p><a href="https://github.com/iAJue"><img src="https://img.shields.io/badge/%F0%9F%8E%89_Create_by_iAJue-with_Love_%E2%9D%A4-pink?style=flat-square" alt=""></a></p>
<p>一款开源、简洁、高颜值的第三方酷狗音乐移动端播放器</p>
<p>基于 Expo / React Native 构建，是 <a href="https://github.com/iAJue/MoeKoeMusic">MoeKoeMusic</a> 桌面版的移动端实现</p>
<p><a href="https://expo.dev/"><img src="https://img.shields.io/badge/Expo-SDK%2057-000020?logo=expo&amp;logoColor=white" alt="Expo SDK"></a> <a href="https://reactnative.dev/"><img src="https://img.shields.io/badge/React%20Native-0.86-61DAFB?logo=react&amp;logoColor=white" alt="React Native"></a> <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-6.0-3178C6?logo=typescript&amp;logoColor=white" alt="TypeScript"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-GPL--2.0-blue.svg" alt="License"></a> <a href=""><img src="https://img.shields.io/badge/Platform-iOS%20%7C%20Android-lightgrey" alt="Platform"></a></p>
<hr>
<h2 id="-特性">
<a class="header-anchor" href="#-%e7%89%b9%e6%80%a7"></a>
✨ 特性
</h2><ul>
<li>🎵 <strong>无需自建服务器</strong> — 酷狗 API 适配层直接直连官方，开箱即用，不依赖外部 API 地址</li>
<li>🏠 <strong>首页推荐</strong> — 每日推荐、精选歌单、排行榜</li>
<li>🧭 <strong>发现页</strong> — 分类歌单、新歌速递等内容探索</li>
<li>🔍 <strong>搜索</strong> — 快速检索歌曲、歌单、专辑</li>
<li>📀 <strong>歌单 / 专辑 / 排行榜</strong> — 完整的详情页与曲目列表</li>
<li>🎧 <strong>播放器</strong> — 滚动歌词、播放队列、迷你播放条（MiniPlayer）、后台播放</li>
<li>🎚️ <strong>音质检测</strong> — 自动探测并选择可用音质</li>
<li>📱 <strong>手机号登录</strong> — 同步酷狗账号的收藏与歌单</li>
<li>🌗 <strong>深色模式</strong> — 跟随系统自动切换明暗主题</li>
</ul>
<h2 id="-todo-list">
<a class="header-anchor" href="#-todo-list"></a>
📝 Todo List
</h2><ul>
<li>[x] 首页每日推荐 / 精选歌单 / 排行榜</li>
<li>[x] 发现页分类内容浏览</li>
<li>[x] 搜索歌曲、歌单、专辑</li>
<li>[x] 歌单 / 专辑 / 排行榜详情页</li>
<li>[x] 播放器：滚动歌词、播放队列、迷你播放条、后台播放</li>
<li>[x] 音质检测与自动选择</li>
<li>[x] 手机号登录</li>
<li>[x] 账号密码登录</li>
<li>[x] 扫码登录(其他设备)</li>
<li>[x] 我喜欢 / 收藏同步</li>
<li>[x] 用户歌单管理（创建 / 收藏 / 编辑）</li>
<li>[ ] 通知栏 / 锁屏播放控制</li>
<li>[ ] 歌曲详情浏览</li>
<li>[ ] 桌面歌词</li>
<li>[ ] 听歌识曲</li>
<li>[ ] 平板与横屏适配</li>
<li>[ ] 性能优化</li>
</ul>
<h2 id="-预览">
<a class="header-anchor" href="#-%e9%a2%84%e8%a7%88"></a>
📸 预览
</h2><table class="table"><tbody><tr><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-1.png" alt="Screenshot 1"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-2.png" alt="Screenshot 2"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-3.png" alt="Screenshot 3"></td></tr><tr><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-4.png" alt="Screenshot 4"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-5.png" alt="Screenshot 5"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-6.png" alt="Screenshot 6"></td></tr></tbody></table>
<h2 id="-快速开始">
<a class="header-anchor" href="#-%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"></a>
🚀 快速开始
</h2><h3 id="环境要求">
<a class="header-anchor" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82"></a>
环境要求
</h3><ul>
<li><a href="https://nodejs.org/">Node.js</a> ≥ 22</li>
<li><a href="https://git-scm.com/">Git</a></li>
<li>iOS 模拟器 / Android 模拟器，或安装了开发版客户端的真机</li>
</ul>
<h3 id="开发运行">
<a class="header-anchor" href="#%e5%bc%80%e5%8f%91%e8%bf%90%e8%a1%8c"></a>
开发运行
</h3><pre><code># 克隆仓库（包含 api submodule）
git clone --recurse-submodules https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile.git
cd MoeKoeMusic-Mobile

# 安装依赖
npm install
npm --prefix api install

# 生成移动端 API 入口（api/ 更新后需重新执行）
npm run generate:mobile-api

# 启动开发服务器
npx expo start
</code></pre>
<blockquote>
<p>如果克隆时遗漏了 submodule，可执行 <code>git submodule update --init</code> 补齐。</p>
        
        <hr><p>本文2026-08-01首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-08-01</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>MoeKoe Music浏览器插件版本,开箱即用</title>
      <link>https://zh.moejue.cn/posts/339/</link>
      <pubDate>Wed, 15 Jul 2026 17:48:40 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/339/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music浏览器插件版本,开箱即用</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><img src="https://github.com/MoeKoeMusic/MoeKoeMusic/raw/main/build/icons/linux/256x256.png" alt="MoeKoe Music"></p>
<h2 id="moekoe-music-extension">
<a class="header-anchor" href="#moekoe-music-extension"></a>
MoeKoe Music Extension
</h2><p>MoeKoe Music 浏览器插件版，基于 <a href="https://github.com/MoeKoeMusic/MoeKoeMusic/">MoeKoeMusic Web</a> 构建，并在浏览器扩展内完成 API 路由兼容。</p>
<p><img src="https://img.shields.io/badge/Manifest-V3-4285F4" alt="Manifest V3"> <img src="https://img.shields.io/badge/Vue-3-42b883" alt="Vue"> <img src="https://img.shields.io/badge/Vite-7-646CFF" alt="Vite"> <img src="https://img.shields.io/badge/License-GPL--2.0-blue" alt="License"></p>
<p><a href="https://github.com/MoeKoeMusic/MoeKoe-Music-Extension">🌎 GitHub仓库</a></p>
<h2 id="特性">
<a class="header-anchor" href="#%e7%89%b9%e6%80%a7"></a>
特性
</h2><ul>
<li>点击浏览器插件图标后打开独立窗口运行 MoeKoeMusic。</li>
<li>无需用户配置 API 地址，也无需额外启动本地 API 服务。</li>
<li>保留 MoeKoeMusic 原有 Web 页面与交互，兼容浏览器扩展运行环境。</li>
</ul>
<h2 id="快速开始">
<a class="header-anchor" href="#%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"></a>
快速开始
</h2><h3 id="环境要求">
<a class="header-anchor" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82"></a>
环境要求
</h3><ul>
<li>Node.js 20 或更高版本</li>
<li>Git</li>
<li>Chrome / Edge 等 Chromium 内核浏览器</li>
</ul>
<h3 id="安装依赖">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85%e4%be%9d%e8%b5%96"></a>
安装依赖
</h3><pre><code>git submodule update --init --recursive
npm install
npm run install:app
</code></pre>
<p><code>npm run install:app</code> 会分别安装 <code>MoeKoeMusic</code> 与 <code>MoeKoeMusic/api</code> 的依赖。安装后建议检查子模块工作区，避免把上游 lockfile 的非预期变化提交进去。</p>
        
        <hr><p>本文2026-07-15首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-07-15</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>MoeKoe Music 插件市场设计</title>
      <link>https://zh.moejue.cn/posts/337/</link>
      <pubDate>Sun, 05 Jul 2026 12:54:29 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/337/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music 插件市场设计</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>在做插件市场之前，先有的是 MoeKoe 的普通插件系统。</p>
<p>当时我想解决的问题不是某一个具体功能，而是一个更通用的问题：播放器里总会冒出很多小需求，有些人想改界面，有些人想加一个工具弹窗，有些人想接自己的服务。如果每个想法都往主程序里塞，主程序会越来越重，也越来越难维护。</p>
<p>所以我一开始给插件系统定的方向很明确：主程序只提供插件运行环境和管理入口，具体功能交给插件自己做。插件能独立安装、独立卸载，坏了也尽量不要影响播放器本体。</p>
<p>上一篇我写的是 <a href="https://moejue.cn/archives/334" title="&lt;code&gt;MoeKoeMusic-Plugins&lt;/code&gt;">MoeKoeMusic-Plugins</a> 这个插件登记仓库。那边解决的是“插件市场的数据怎么产生”：用户用 Issue 提交，Action 校验，维护者审核，通过后写进 <code>plugins.json</code>。</p>
<p>但光有登记仓库还不够。真正对用户来说，插件市场不是 GitHub 上的一份 JSON，而是客户端里一个能看、能搜、能安装、能更新的入口。<br>
所以这篇就换到 MoeKoe Music 主项目里，专门聊客户端的插件市场部分。</p>
<h2 id="为什么选-chrome-extension-这一套">
<a class="header-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-chrome-extension-%e8%bf%99%e4%b8%80%e5%a5%97"></a>
为什么选 Chrome Extension 这一套
</h2><p>MoeKoe 是 Electron 应用，Electron 本身就有加载扩展的能力。既然底层已经能跑 Chrome Extension，那就没必要再从零设计一套插件格式。</p>
<p>这样做有几个好处:</p>
<ul>
<li>第一，插件作者不用学一套完全陌生的格式。<code>manifest.json</code>、<code>popup.html</code>、<code>background.js</code> 都是浏览器扩展里很常见的概念。</li>
<li>第二，插件天然有清单文件。主程序可以先读 <code>manifest.json</code>，判断插件名称、版本、描述、权限、弹窗入口、最低支持版本这些信息。</li>
<li>第三，Electron 可以直接加载插件目录，不需要我自己写一个脚本沙箱。</li>
</ul>
<h2 id="展示搜索分页和状态">
<a class="header-anchor" href="#%e5%b1%95%e7%a4%ba%e6%90%9c%e7%b4%a2%e5%88%86%e9%a1%b5%e5%92%8c%e7%8a%b6%e6%80%81"></a>
展示、搜索、分页和状态
</h2><p>插件市场不是只要能安装就行，还要能快速判断：</p>
<ul>
<li>这个插件是干什么的</li>
<li>我有没有装过</li>
<li>我装的是不是旧版本</li>
<li>这个插件有没有更高版本要求</li>
<li>它有没有联网、文件访问、本地二进制这些风险点</li>
<li>分页,搜索,更新,状态</li>
</ul>
<p>所以市场卡片里展示的不只是“安装”按钮。</p>
<ol>
<li>确保插件目录存在</li>
<li>调用Electron下载安装、卸旧版、装新版</li>
<li>注册插件相关 IPC</li>
<li>加载 Chrome 扩展</li>
<li>加载 Native Host 索引和授权系统</li>
</ol>
<h2 id="已安装插件">
<a class="header-anchor" href="#%e5%b7%b2%e5%ae%89%e8%a3%85%e6%8f%92%e4%bb%b6"></a>
已安装插件
</h2><p>插件管理页里的“已安装插件”不是只读 Electron 当前加载的扩展。它会把两类信息合并：</p>
<ul>
<li><code>session.defaultSession.getAllExtensions()</code> 拿到已加载扩展</li>
<li><code>scanExtensions()</code> 扫描磁盘插件目录，读取 manifest、图标、popup、Native Host 声明</li>
</ul>
<p>前端拿到这些字段后，就能显示：</p>
        
        <hr><p>本文2026-07-05首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-07-05</p>]]>
      </description>
      
        <category>折腾代码</category><category>教程</category>
      
    </item>
    
    

    <item>
      <title>MoeKoeMusic-Plugins设计理念</title>
      <link>https://zh.moejue.cn/posts/334/</link>
      <pubDate>Sat, 20 Jun 2026 11:45:33 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/334/</guid>
      <description>
        <![CDATA[<h1>MoeKoeMusic-Plugins设计理念</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>一开始做 MoeKoe Music 插件生态的时候，还没有在线插件市场这个功能<br>
后来在社区的建议下便有了这个插件市场 <a href="https://github.com/orgs/MoeKoeMusic/discussions/888">增加官方/社区插件仓库以扩展产品功能</a></p>
<blockquote>
<p>插件可以由社区开发，那插件市场应该怎么管？</p>
</blockquote>
<p>最直接的做法当然是把所有插件源码都收进一个大仓库里。但这个方案越想越别扭。每个插件都有自己的作者、自己的发布节奏、自己的构建方式。把它们全塞进官方仓库，不仅维护成本高，也会把责任边界搞得很模糊。</p>
<p>所以这个仓库最后没有被设计成“插件源码仓库”，而是变成了一个“插件登记与索引仓库”。它只做几件事：</p>
<ul>
<li>接收插件上架、更新、下架和举报申请</li>
<li>自动做一轮基础校验和静态识别</li>
<li>把人工审核通过时的插件快照记录下来</li>
<li>维护客户端可以读取的 <code>plugins.json</code></li>
<li>顺手把 README 里的插件列表更新出来，方便人看</li>
</ul>
<p>一个可追溯的登记簿：谁提交的、审核的是哪个版本、下载地址是什么、是否有网络或文件权限，都落在一份清楚的数据里。</p>
<h2 id="市场索引而不是源码仓库">
<a class="header-anchor" href="#%e5%b8%82%e5%9c%ba%e7%b4%a2%e5%bc%95%e8%80%8c%e4%b8%8d%e6%98%af%e6%ba%90%e7%a0%81%e4%bb%93%e5%ba%93"></a>
市场索引，而不是源码仓库
</h2><p>仓库根目录最重要的文件是 <code>plugins.json</code>。它就是插件市场真正消费的数据源。</p>
<pre><code>{
  &quot;id&quot;: &quot;custom-app-background&quot;,
  &quot;name&quot;: &quot;自定义背景图&quot;,
  &quot;description&quot;: &quot;为MoeKoe Music提供自定义背景图能力，支持透明度调节。&quot;,
  &quot;iconUrl&quot;: &quot;...&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;minversion&quot;: &quot;1.6.1&quot;,
  &quot;...&quot;:&quot;....&quot;,
  &quot;buildRequired&quot;: false,
  &quot;networkAccess&quot;: false,
  &quot;fileAccess&quot;: false,
  &quot;binaryContent&quot;: false,
  &quot;snapshot&quot;: {
    &quot;iconUrl&quot;: &quot;...&quot;,
    &quot;repository&quot;: &quot;MoeKoeMusic/custom-app-background-plugin&quot;,
    &quot;commitSha&quot;: &quot;dbf72d38c8cf6b1d1cefdf8ce15798d565678995&quot;,
    &quot;downloadUrl&quot;: &quot;hxx.zip&quot;,
    &quot;release&quot;: null
  }
}
</code></pre>
<p>我不想让市场记录永远指向插件仓库“当前最新代码”。因为作者今天提交的代码，和审核那天看到的代码，可能已经不是同一份东西了。插件市场真正应该承认的是：审核通过时的那个版本。</p>
<p>所以这个项目里面有一个核心原则：</p>
<blockquote>
<p>上架的不是一个会漂移的仓库地址，而是一个已经锁定的快照。</p>
</blockquote>
<p>对于不需要编译的插件，快照锁到默认分支当时的 commit。对于需要编译的插件，快照锁到对应的 Release tag 和发行附件。这样后面真出了问题，也能回头知道当时到底审核了什么。</p>
<h2 id="action-先跑人最后拍板">
<a class="header-anchor" href="#action-%e5%85%88%e8%b7%91%e4%ba%ba%e6%9c%80%e5%90%8e%e6%8b%8d%e6%9d%bf"></a>
Action 先跑，人最后拍板
</h2><p>用户提交 Issue 时，需要选择：</p>
        
        <hr><p>本文2026-06-20首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-06-20</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>Web3 链上红包 DApp</title>
      <link>https://zh.moejue.cn/posts/303/</link>
      <pubDate>Sat, 10 Jan 2026 14:02:35 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/303/</guid>
      <description>
        <![CDATA[<h1>Web3 链上红包 DApp</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>这是一个<strong>100%去中心化</strong>的区块链红包应用。用户可以连接钱包，设定金额和数量发送红包，然后通过链接分享给他人领取。所有数据和操作都基于区块链，完全不需要中心化服务器，整个过程安全、透明、可追溯。</p>
<p>如果你感兴趣，可以在 GitHub 上看看我的代码：<a href="https://github.com/iAJue/redpacket-dapp">redpacket‑dapp</a></p>
<h2 id="功能亮点">
<a class="header-anchor" href="#%e5%8a%9f%e8%83%bd%e4%ba%ae%e7%82%b9"></a>
功能亮点
</h2><ul>
<li>🧧 <strong>发送红包</strong>: 连接钱包后，设置金额和数量发送红包到区块链</li>
<li>🎁 <strong>领取红包</strong>: 通过分享链接，别人可以连接钱包直接从区块链领取红包</li>
<li>🔗 <strong>智能合约</strong>: 使用 Solidity 编写的安全智能合约处理所有逻辑</li>
<li>🌐 <strong>多链支持</strong>: 支持本地测试网和 BSC 测试网</li>
<li>💼 <strong>Web3 集成</strong>: 使用 MetaMask 钱包连接</li>
<li>🚀 <strong>完全去中心化</strong>: 没有后端服务器，所有数据存储在区块链</li>
</ul>
<h2 id="技术栈">
<a class="header-anchor" href="#%e6%8a%80%e6%9c%af%e6%a0%88"></a>
技术栈
</h2><ul>
<li><strong>前端</strong>：React 19、React Router 6、TypeScript、Vite、Ethers v6</li>
<li><strong>合约层</strong>：Hardhat、Solidity 0.8.x</li>
<li><strong>工具</strong>：ESLint、Prettier</li>
<li><strong>不需要后端</strong>: 零依赖服务器 ❌</li>
</ul>
<h2 id="快速启动">
<a class="header-anchor" href="#%e5%bf%ab%e9%80%9f%e5%90%af%e5%8a%a8"></a>
快速启动
</h2><pre><code># 1. 安装项目依赖
npm install
cd react-dapp &amp;&amp; npm install &amp;&amp; cd ..

# 2. 启动本地区块链节点
npm run node

# 3. 编译智能合约
npx hardhat compile

# 4. 部署智能合约
npm run deploy

# 5. 启动前端
npm run frontend
</code></pre>
<h2 id="目录结构">
<a class="header-anchor" href="#%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84"></a>
目录结构
</h2><pre><code>redpacket-web3/
├─ contracts/                # Solidity 智能合约
│  └─ RedPacket.sol
├─ react-dapp/               # React + Vite 前端
│  ├─ src/
│  │  ├─ components/         # 通用组件（钱包按钮、创建表单等）
│  │  ├─ config/             # ABI、合约地址配置
│  │  ├─ hooks/              # 自定义 hooks（useWallet）
│  │  ├─ pages/              # 页面（Home、ClaimPacket）
│  │  ├─ styles/             # 全局样式
│  │  ├─ utils/              # Web3 工具函数
│  │  └─ App.tsx             # 路由与布局
│  ├─ .env.example           # 前端所需的环境变量说明
│  └─ package.json
├─ scripts/
│  └─ deploy.js              # Hardhat 部署脚本（会自动写入前端配置）
├─ hardhat.config.js
└─ package.json              # 根目录脚本（Hardhat + 前端一键启动）
</code></pre>
<h2 id="使用指南">
<a class="header-anchor" href="#%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97"></a>
使用指南
</h2><h3 id="创建红包">
<a class="header-anchor" href="#%e5%88%9b%e5%bb%ba%e7%ba%a2%e5%8c%85"></a>
创建红包
</h3><ol>
<li>打开前端并点击右上角「连接钱包」。</li>
<li>填写红包总金额与份数，应用会在前端随机拆分金额。</li>
<li>提交后在 MetaMask 中确认交易，等待区块确认。</li>
<li>成功后可复制系统生成的领取链接，分享给朋友。</li>
</ol>
<h3 id="领取红包">
<a class="header-anchor" href="#%e9%a2%86%e5%8f%96%e7%ba%a2%e5%8c%85"></a>
领取红包
</h3><ol>
<li>打开分享链接（URL 带有 <code>/claim/{packetId}</code>）。</li>
<li>同样先连接钱包，然后点击「点击领取」。</li>
<li>签名确认后等待区块打包，页面会显示结果与剩余份数。</li>
</ol>
<h2 id="环境变量">
<a class="header-anchor" href="#%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f"></a>
环境变量
</h2><ul>
<li><code>dapp/.env</code>（开发环境会自动忽略，请参考 <code>.env.example</code>）
<ul>
<li><code>VITE_RPC_URL</code>：前端直连节点 RPC，默认为 <code>http://127.0.0.1:8545</code></li>
<li><code>VITE_CONTRACT_ADDRESS</code>：可覆盖部署脚本写入的地址</li>
<li><code>VITE_CHAIN_ID</code>：前端提示使用的链 ID（十六进制）</li>
</ul>
</li>
<li><code>root/.env</code>：若需要在 Hardhat 中引用私钥或 BSC RPC，可继续沿用原有写法。</li>
</ul>
<h2 id="智能合约redpacketsol">
<a class="header-anchor" href="#%e6%99%ba%e8%83%bd%e5%90%88%e7%ba%a6redpacketsol"></a>
智能合约（RedPacket.sol）
</h2><p>核心方法：</p>
        
        <hr><p>本文2026-01-10首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-01-10</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>萌音商城移动端版本发售</title>
      <link>https://zh.moejue.cn/posts/256/</link>
      <pubDate>Thu, 17 Apr 2025 09:07:11 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/256/</guid>
      <description>
        <![CDATA[<h1>萌音商城移动端版本发售</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <h3 id="项目介绍">
<a class="header-anchor" href="#%e9%a1%b9%e7%9b%ae%e4%bb%8b%e7%bb%8d"></a>
项目介绍
</h3><p>萌音商城移动版是一个基于uniapp开发的多端商城系统，支持iOS、Android、H5及小程序等多个平台。系统采用PHP + MySQL + FastAdmin作为后端技术栈，实现了完整的电商功能。</p>
<h3 id="核心功能">
<a class="header-anchor" href="#%e6%a0%b8%e5%bf%83%e5%8a%9f%e8%83%bd"></a>
核心功能
</h3><ul>
<li>商品管理：分类、列表、详情展示</li>
<li>购物流程：购物车、结算、支付、订单管理</li>
<li>用户系统：会员中心、个人信息管理</li>
<li>多商户模式：商户独立管理商品与订单</li>
<li>发货系统: 支持推送订单至ERP(管家婆)系统处理</li>
<li>双模式交易：
<ul>
<li>线上下单快递发货</li>
<li>线上下单到店自取/骑手配送</li>
</ul>
</li>
</ul>
<h3 id="系统预览">
<a class="header-anchor" href="#%e7%b3%bb%e7%bb%9f%e9%a2%84%e8%a7%88"></a>
系统预览
</h3><h4 id="后台管理界面">
<a class="header-anchor" href="#%e5%90%8e%e5%8f%b0%e7%ae%a1%e7%90%86%e7%95%8c%e9%9d%a2"></a>
后台管理界面
</h4><p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111108_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111207_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111236_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111316_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111333_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111348_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-111425_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-114400_04_17_2025.jpg" alt=""></p>
<h4 id="小程序端界面">
<a class="header-anchor" href="#%e5%b0%8f%e7%a8%8b%e5%ba%8f%e7%ab%af%e7%95%8c%e9%9d%a2"></a>
小程序端界面
</h4><p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-115015_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-115348_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/Screenshot_2025-04-17-11-51-48-260_com.tencent.mm_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/Screenshot_2025-04-17-11-51-41-636_com.tencent.mm_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/Screenshot_2025-04-17-11-51-32-607_com.tencent.mm_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/Screenshot_2025-04-17-11-51-28-173_com.tencent.mm_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/Screenshot_2025-04-17-11-51-14-865_com.tencent.mm_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-115521_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-115423_04_17_2025.jpg" alt=""> <img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2025/04/17/QQ20250417-115405_04_17_2025.jpg" alt=""></p>
<h3 id="版本说明">
<a class="header-anchor" href="#%e7%89%88%e6%9c%ac%e8%af%b4%e6%98%8e"></a>
版本说明
</h3><p>当前版本为V1.0版，部分界面为预留规划，将根据实际需求持续更新完善。 由于没有正式发布版本，上线小程序运营，所以没有线上版本可供演示 目前程序处于V1.0初版，部分界面是提前预留规划的，后期会根据需求进行更新</p>
<h3 id="购买说明">
<a class="header-anchor" href="#%e8%b4%ad%e4%b9%b0%e8%af%b4%e6%98%8e"></a>
购买说明
</h3><ul>
<li>价格：188元 (版本更新后将会视情况调整价格，请以实际价格为准)</li>
<li>内容：完整源代码（含移动端和后台，无加密无授权）</li>
<li>推荐返利：推荐好友购买可获20%返利</li>
<li>更新服务：终身免费更新</li>
<li>使用须知：禁止私自转售，违规将停止更新服务</li>
<li>开发支持：源码含详细注释，方便二次开发</li>
<li>项目托管：代码托管于GitHub，更新日志完整透明</li>
<li>多端支持: 需要自行编译其他客户端，基于微信小程序环境开</li>
</ul>
<h3 id="联系方式">
<a class="header-anchor" href="#%e8%81%94%e7%b3%bb%e6%96%b9%e5%bc%8f"></a>
联系方式
</h3><ul>
<li>QQ交流群：<a href="https://qm.qq.com/q/Fhqk6HKUaQ">点击加入</a></li>
<li>由于没有个人QQ链接，加群后请@群主咨询购买事宜</li>
<li>项目滞销了，请帮帮阿珏酱</li>
</ul>
<h3 id="在线演示">
<a class="header-anchor" href="#%e5%9c%a8%e7%ba%bf%e6%bc%94%e7%a4%ba"></a>
在线演示
</h3><ul>
<li><a href="https://v.douyin.com/3l90gHoAf0A/">微信小程序端演示视频</a></li>
<li>后台演示环境请联系咨询</li>
<li>微信小程序可联系添加体验权限</li>
</ul>
        
        <hr><p>本文2025-04-17首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-09-06</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>幻想领域图床使用帮助</title>
      <link>https://zh.moejue.cn/posts/63/</link>
      <pubDate>Mon, 19 Mar 2018 11:56:29 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/63/</guid>
      <description>
        <![CDATA[<h1>幻想领域图床使用帮助</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>介于较多人在安装使用过程中遇到问题，所以还是得总结一下，如果还不能解决可以加群向万能的群友提问</p>
<h2 id="验证码不显示">
<a class="header-anchor" href="#%e9%aa%8c%e8%af%81%e7%a0%81%e4%b8%8d%e6%98%be%e7%a4%ba"></a>
验证码不显示
</h2><ol>
<li>查看服务器是否支持GD图形处理库</li>
<li>查看服务器WEB环境</li>
</ol>
<ul>
<li>Apache：如果你的程序是安装在二级目录下，修改程序根目录下的.htaccess文件</li>
</ul>
<p>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
Rewritebase /你的二级目录名/index.php
RewriteRule ^(.*)$ /你的二级目录名/index.php?/$1 [L]
</IfModule></p>
<ul>
<li>Nginx：找到配置文件nginx-conf，在location / 段中修改加入以下内容</li>
</ul>
<p>try_files $uri $uri/ /index.php?$query_string;</p>
<p>或者是这个</p>
<p>if (!-d $request_filename){
set $rule_0 1$rule_0;
}
if (!-f $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = &ldquo;21&rdquo;){
rewrite ^/(.*)$ /index.php?/$1 last;
}</p>
<ul>
<li>IIS伪静态同Apache一样</li>
<li>宝塔面板使用现成的thinkPHP的伪静态</li>
</ul>
<p><strong>邮件发送失败</strong></p>
<ol>
<li>先确定你的25端口是否被封禁，如果封掉，尝试让主机商启用(如果不启用就换服务器)</li>
<li>关掉注册验证或者等下个版本更新（注：改端口是没有用的，465端口需要ssl支持）</li>
</ol>
<h2 id="数据接口异常">
<a class="header-anchor" href="#%e6%95%b0%e6%8d%ae%e6%8e%a5%e5%8f%a3%e5%bc%82%e5%b8%b8"></a>
数据接口异常
</h2><ul>
<li>伪静态重定向失败，请参考上方的再做设置</li>
<li>如果是nginx服务器， 找到路径/framework/core/Framework.php第51行到第53行注释或者删除，具体代码如下(一般Apache服务器不会遇到这个问题，只有nginx的服务器才会)</li>
</ul>
<p>if ($path != &lsquo;&rsquo;) {
$path = strstr(trim($_SERVER[&lsquo;REQUEST_URI&rsquo;],&rsquo;/&rsquo;),$path);
}</p>
        
        <hr><p>本文2018-03-19首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-09-06</p>]]>
      </description>
      
        <category>教程</category>
      
    </item>
    
    

    <item>
      <title>我不会AE,但是我会Code</title>
      <link>https://zh.moejue.cn/posts/280/</link>
      <pubDate>Sat, 23 Aug 2025 12:29:01 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/280/</guid>
      <description>
        <![CDATA[<h1>我不会AE,但是我会Code</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <h2 id="-緒山まひろの小窝-">
<a class="header-anchor" href="#-%e7%b7%92%e5%b1%b1%e3%81%be%e3%81%b2%e3%82%8d%e3%81%ae%e5%b0%8f%e7%aa%9d-"></a>
✨ 緒山まひろの小窝 ✨
</h2><p><img src="https://mahiro.moejue.cn/static/images/onimai.png" alt="緒山まひろ"></p>
<h3 id="-欢迎来到緒山まひろの小窝-">
<a class="header-anchor" href="#-%e6%ac%a2%e8%bf%8e%e6%9d%a5%e5%88%b0%e7%b7%92%e5%b1%b1%e3%81%be%e3%81%b2%e3%82%8d%e3%81%ae%e5%b0%8f%e7%aa%9d-"></a>
🌸 欢迎来到緒山まひろの小窝 🌸
</h3><p><img src="https://mahiro.moejue.cn/static/images/Mahiro06.png" alt="緒山まひろ"></p>
<p>哇！你发现了我的秘密基地！(*≧ω≦)</p>
<p>这里是緒山まひろ的个人网站，充满了可爱的动画和有趣的内容！ 我会在这里分享我喜欢的动画、漫画、游戏和一些日常生活中的小确幸~</p>
<h3 id="-关于我-">
<a class="header-anchor" href="#-%e5%85%b3%e4%ba%8e%e6%88%91-"></a>
💕 关于我 💕
</h3><p>我是緒山まひろ，エロゲを愛する引きこもりのダメニート。 喜欢动画、漫画、轻小说和各种可爱的东西！ 最喜欢的颜色是粉色和淡蓝色！</p>
<pre tabindex="0"><code>  ∩∩
（･ω･）  &lt;- 这是我！
＿|　⊃／(＿＿
／ └-(＿＿＿／
</code></pre><p><img src="https://mahiro.moejue.cn/static/images/visual_chara_mahiro-mihari.webp" alt="緒山まひろ"></p>
<h3 id="-网站内容-">
<a class="header-anchor" href="#-%e7%bd%91%e7%ab%99%e5%86%85%e5%ae%b9-"></a>
🎀 网站内容 🎀
</h3><ul>
<li>🌟 精美动画展示</li>
<li>📚 我的私房照</li>
<li>🎵 好听的音乐</li>
<li>📷 日常生活的小片段</li>
</ul>
<h3 id="-关于-">
<a class="header-anchor" href="#-%e5%85%b3%e4%ba%8e-"></a>
🌈 关于 🌈
</h3><ul>
<li>🎭 演示: <a href="https://mahiro.moejue.cn/">https://mahiro.moejue.cn/</a></li>
<li>🏠 个人博客: <a href="https://MoeJue.cn/">https://MoeJue.cn/</a></li>
<li>🐱 GitHub: <a href="https://github.com/iAJue/Mahiro">https://github.com/iAJue/Mahiro</a></li>
<li>📧 官网: <a href="https://onimai.jp/">https://onimai.jp/</a></li>
</ul>
<h3 id="-版权声明-">
<a class="header-anchor" href="#-%e7%89%88%e6%9d%83%e5%a3%b0%e6%98%8e-"></a>
📝 版权声明 📝
</h3><ul>
<li>本网站由 @Moejue 设计和开发</li>
<li>网站中使用的所有动画片段、漫画图片、角色形象及相关内容的版权均归原作者(ねことうふ（Nekotofu）)及其发行公司(Studio Bind、Ichijinsha)所有</li>
<li>如有侵权，请通过以上联系方式告知，我会立即删除相关内容</li>
<li>GNU GENERAL PUBLIC LICENSE Version 2</li>
<li>Copyright © 2025 MoeJue. All rights reserved.</li>
</ul>
<h3 id="-特别感谢-">
<a class="header-anchor" href="#-%e7%89%b9%e5%88%ab%e6%84%9f%e8%b0%a2-"></a>
💌 特别感谢 💌
</h3><p>感谢所有喜欢緒山まひろ的朋友们！(●&rsquo;◡&rsquo;●)</p>
        
        <hr><p>本文2025-08-23首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-08-23</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>打造 macOS 风格的 Web 应用</title>
      <link>https://zh.moejue.cn/posts/260/</link>
      <pubDate>Sun, 11 May 2025 11:46:03 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/260/</guid>
      <description>
        <![CDATA[<h1>打造 macOS 风格的 Web 应用</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <h3 id="项目概述">
<a class="header-anchor" href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0"></a>
项目概述
</h3><p>在当今的 Web 开发领域，用户体验和界面设计变得越来越重要。</p>
<p>Mac Web Vue Template 这是一个受 macOS 设计启发的现代优雅的 Vue.js Web 模板, 是一个基于 Vue.js 的现代化 Web 应用模板，它的设计灵感来源于 macOS 的优雅界面。这个项目不仅提供了美观的 UI 设计，还包含了完整的项目结构和最佳实践。</p>
<h4 id="在线演示">
<a class="header-anchor" href="#%e5%9c%a8%e7%ba%bf%e6%bc%94%e7%a4%ba"></a>
在线演示
</h4><p>你可以通过访问 <a href="https://mac.moejue.cn/">WebAi</a> 来体验这个模板的实际效果。邀请码(MoeJue)</p>
<h3 id="核心特性">
<a class="header-anchor" href="#%e6%a0%b8%e5%bf%83%e7%89%b9%e6%80%a7"></a>
核心特性
</h3><ol>
<li>
<p><strong>macOS 风格的 UI 设计</strong></p>
<ul>
<li>采用 macOS 的设计语言</li>
<li>精致的毛玻璃效果</li>
<li>优雅的动画过渡</li>
</ul>
</li>
<li>
<p><strong>现代化的技术栈</strong></p>
<ul>
<li>Vue.js 作为核心框架</li>
<li>Vite 作为构建工具</li>
<li>Pinia 进行状态管理</li>
<li>Vue Router 处理路由</li>
<li>SCSS 预处理器</li>
<li>ES6+ 现代特性</li>
</ul>
</li>
<li>
<p><strong>响应式设计</strong></p>
<ul>
<li>完美适配各种屏幕尺寸</li>
<li>流畅的移动端体验</li>
</ul>
</li>
</ol>
<h3 id="项目结构解析">
<a class="header-anchor" href="#%e9%a1%b9%e7%9b%ae%e7%bb%93%e6%9e%84%e8%a7%a3%e6%9e%90"></a>
项目结构解析
</h3><p>项目采用了清晰且模块化的目录结构：</p>
<pre tabindex="0"><code>src/
├── assets/          # 静态资源
├── components/      # Vue 组件
│   ├── common/     # 通用组件
│   ├── system/     # 系统组件
│   └── apps/       # 应用组件
├── views/          # 页面视图
├── router/         # 路由配置
├── stores/         # 状态管理
└── utils/          # 工具函数
</code></pre><p>这种结构设计使得项目具有良好的可维护性和可扩展性。</p>
        
        <hr><p>本文2025-05-11首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2025-05-11</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>我的二次元相册又回来了</title>
      <link>https://zh.moejue.cn/posts/227/</link>
      <pubDate>Fri, 08 Nov 2024 09:52:39 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/227/</guid>
      <description>
        <![CDATA[<h1>我的二次元相册又回来了</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>从最早的<a href="https://moejue.cn/archives/10">图库</a>,到<a href="https://moejue.cn/archives/61">图床</a>,在到现在的相册.我对图片的执着已经可以说是跨越了好几个世纪了. 图库的图片是存在七牛云的,后来流量被刷就关闭了. 图床,现在转为为博客提供图片上传服务了. 相册,就是手机中相册的概念,它既可以存图片也可以放视频. 逐渐是越来越完善了</p>
<p>这两天就把平常保存的视频图片什么的上传到了服务器,写了个界面和接口,顺带开源出来.(我要做一个坚定的开源爱好者)</p>
<h4 id="我的二次元相册前端界面">
<a class="header-anchor" href="#%e6%88%91%e7%9a%84%e4%ba%8c%e6%ac%a1%e5%85%83%e7%9b%b8%e5%86%8c%e5%89%8d%e7%ab%af%e7%95%8c%e9%9d%a2"></a>
我的二次元相册前端界面
</h4><ol>
<li>这里是阿珏酱的私人相册,保存着阿珏在平常收集的图片,和各大平台中点赞收藏的视频.</li>
<li>包括但不限于B站,YouTube,抖音,X,facebook,pixiv等平台的视频或图片,相关的数据信息版权归原作者所有.</li>
<li>数据将不定期手动更新,如果你想要某些图片或者视频,请直接联系阿珏酱获取.</li>
</ol>
<h3 id="预览">
<a class="header-anchor" href="#%e9%a2%84%e8%a7%88"></a>
预览
</h3><p><a href="https://photo.moejue.cn">https://photo.moejue.cn</a></p>
<p><img src="https://github.com/iAJue/PhotoGallery/raw/main/public/images/1.png" alt="image"> <img src="https://github.com/iAJue/PhotoGallery/raw/main/public/images/2.png" alt="image"> <img src="https://github.com/iAJue/PhotoGallery/raw/main/public/images/3.png" alt="image"></p>
<h3 id="特性">
<a class="header-anchor" href="#%e7%89%b9%e6%80%a7"></a>
特性
</h3><ol>
<li>支持图片和视频的展示</li>
<li>支持相册的展示</li>
<li>支持相册的密码保护</li>
<li>支持18+保护</li>
<li>支持搜索</li>
</ol>
<h3 id="todo">
<a class="header-anchor" href="#todo"></a>
Todo
</h3><ol>
<li>优化特效展示</li>
<li>优化界面流畅度</li>
</ol>
<h3 id="安装说明">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85%e8%af%b4%e6%98%8e"></a>
安装说明
</h3><ol>
<li>
<p>克隆仓库到本地：</p>
<pre tabindex="0"><code>git clone https://github.com/iAJue/PhotoGallery.git
</code></pre></li>
<li>
<p>进入项目目录：</p>
<pre tabindex="0"><code>cd PhotoGallery
</code></pre></li>
<li>
<p>安装依赖：</p>
<pre tabindex="0"><code>npm install
</code></pre></li>
<li>
<p>打包项目</p>
<pre tabindex="0"><code>npm run build
</code></pre></li>
</ol>
<h3 id="后端接口">
<a class="header-anchor" href="#%e5%90%8e%e7%ab%af%e6%8e%a5%e5%8f%a3"></a>
后端接口
</h3><p>仅供参考 <a href="https://github.com/iAJue/wasteCode/tree/main/photo">https://github.com/iAJue/wasteCode/tree/main/photo</a></p>
<h3 id="返回数据格式">
<a class="header-anchor" href="#%e8%bf%94%e5%9b%9e%e6%95%b0%e6%8d%ae%e6%a0%bc%e5%bc%8f"></a>
返回数据格式
</h3><ol>
<li>
<p>照片接口</p>
<pre tabindex="0"><code>[
{
    &#34;date&#34;: &#34;\u6628\u5929&#34;,
    &#34;items&#34;: [
        {
            &#34;src&#34;: &#34;https:\/\/moejuevideo.pages.dev\/file\/1730957555106_ocgRCdDEA07fAILEKEFOA8ADAyETABBMffIBE6~tplv-dy-aweme-images_q75.webp&#34;,
            &#34;alt&#34;: &#34;ocgRCdDEA07fAILEKEFOA8ADAyETABBMffIBE6~tplv-dy-aweme-images_q75.webp&#34;,
            &#34;isVideo&#34;: false,
            &#34;duration&#34;: null
        }
    ]
}
]
</code></pre></li>
<li>
<p>相册接口</p>
        
        <hr><p>本文2024-11-08首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2024-12-04</p>]]>
      </description>
      
        <category>二次元</category><category>折腾代码</category>
      
    </item>
    
  </channel>
</rss>
