<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RuoYiPlus</title><link>https://ruoyiplus.com/zh-tw/</link><atom:link href="https://ruoyiplus.com/zh-tw/index.xml" rel="self" type="application/rss+xml"/><description>RuoYiPlus</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>zh-Hant</language><lastBuildDate>Fri, 28 Jun 2024 00:00:00 +0000</lastBuildDate><image><url>https://ruoyiplus.com/media/icon_hu_eee4a95885829ab2.png</url><title>RuoYiPlus</title><link>https://ruoyiplus.com/zh-tw/</link></image><item><title>环境搭建</title><link>https://ruoyiplus.com/zh-tw/docs/getting-started/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/docs/getting-started/</guid><description>&lt;h2 id="步驟一"&gt;步驟一&lt;/h2&gt;
&lt;p&gt;內容寫在這裡&amp;hellip;&lt;/p&gt;</description></item><item><title>Getting Started</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/getting-started/</link><pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/getting-started/</guid><description>&lt;h2 id="quick-start-from-template"&gt;Quick Start from Template&lt;/h2&gt;
&lt;div class="hb-steps"&gt;
&lt;h3 id="create-a-site"&gt;Create a site&lt;/h3&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3 id="configure-your-new-site"&gt;Configure your new site&lt;/h3&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3 id="add-your-content"&gt;Add your content&lt;/h3&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3 id="publish-your-site"&gt;Publish your site&lt;/h3&gt;
&lt;p&gt;Your site will automatically publish ~1-5 minutes after you commit (save) changes to files in your GitHub repository.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="next"&gt;Next&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s customize your new site:&lt;/p&gt;
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;"&gt;
&lt;a
class="hb-card group"href="../guide/project-structure" &gt;
&lt;span class="hb-card-title p-4"&gt;
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9 9 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9 9 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"/&gt;&lt;/svg&gt;Project Structure&lt;/span&gt;&lt;/a&gt;
&lt;a
class="hb-card group"href="../guide/configuration" &gt;
&lt;span class="hb-card-title p-4"&gt;
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 9.75V10.5"/&gt;&lt;/svg&gt;Configuration&lt;/span&gt;&lt;/a&gt;
&lt;a
class="hb-card group"href="../guide/formatting" &gt;
&lt;span class="hb-card-title p-4"&gt;
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9 9 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9 9 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"/&gt;&lt;/svg&gt;Create content&lt;/span&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Customizing Hugo</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/reference/customization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/reference/customization/</guid><description>&lt;p&gt;View the full docs at
&lt;/p&gt;</description></item><item><title>Project Structure</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/project-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/project-structure/</guid><description>&lt;h2 id="folder-structure"&gt;Folder Structure&lt;/h2&gt;
&lt;p&gt;There are &lt;strong&gt;4 main folders for Hugo-based sites&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;content/&lt;/code&gt; for your Markdown-formatted content files (homepage, etc.)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_index.md&lt;/code&gt; the homepage (&lt;strong&gt;Hugo requires that the homepage and archive pages have an underscore prefix&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets/&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;media/&lt;/code&gt; for your media files (images, videos)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;icons/custom/&lt;/code&gt; upload any custom SVG icons you want to use&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config/_default/&lt;/code&gt; for your site configuration files
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hugo.yaml&lt;/code&gt; to configure Hugo (site title, URL, Hugo options, setup per-folder page features)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;module.yaml&lt;/code&gt; to install or uninstall Hugo themes and plugins&lt;/li&gt;
&lt;li&gt;&lt;code&gt;params.yaml&lt;/code&gt; to configure Hugo Blox options (SEO, analytics, site features)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;menus.yaml&lt;/code&gt; to configure your menu links (if the menu is enabled in &lt;code&gt;params.yaml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;languages.yaml&lt;/code&gt; to configure your site&amp;rsquo;s language or to set language-specific options in a multilingual site&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;static/uploads/&lt;/code&gt; for any files you want visitors to download, such as a PDF&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go.mod&lt;/code&gt; sets the version of Hugo themes/plugins which your site uses&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hugo-file-naming-convention"&gt;Hugo File Naming Convention&lt;/h2&gt;
&lt;p&gt;Hugo gives us two options to name standard page files: as &lt;code&gt;TITLE/index.md&lt;/code&gt; or &lt;code&gt;TITLE.md&lt;/code&gt; where &lt;code&gt;TITLE&lt;/code&gt; is your page name.&lt;/p&gt;
&lt;p&gt;The page name should be lowercase and using hyphens (&lt;code&gt;-&lt;/code&gt;) instead of spaces.&lt;/p&gt;
&lt;p&gt;Both approaches result in the same output, so you can choose your preferred approach to naming and organizing files. A benefit to the folder-based approach is that all your page&amp;rsquo;s files (such as images) are self-contained within the page&amp;rsquo;s folder, so it&amp;rsquo;s more portable if you wish to share the original Markdown page with someone.&lt;/p&gt;
&lt;p&gt;The homepage is a special case as &lt;strong&gt;Hugo requires the homepage and listing pages to be named&lt;/strong&gt; &lt;code&gt;_index.md&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="docs-navigation"&gt;Docs Navigation&lt;/h2&gt;
&lt;p&gt;The docs navigation is automatically generated based on the content in the &lt;code&gt;docs/&lt;/code&gt; folder and is sorted alphabetically.&lt;/p&gt;
&lt;p&gt;The order of pages can be changed by adding the &lt;code&gt;weight&lt;/code&gt; parameter in the front matter of your Markdown files.&lt;/p&gt;
&lt;p&gt;In the example below, the &lt;code&gt;example.md&lt;/code&gt; page will appear before the &lt;code&gt;test.md&lt;/code&gt; page as it has a lower &lt;code&gt;weight&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Page &lt;code&gt;example.md&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;My Example&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Page &lt;code&gt;test.md&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;My Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>功能列表</title><link>https://ruoyiplus.com/zh-tw/ruoyi/feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/feature/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;這是整個平臺的「能力地圖」&lt;/strong&gt;。在決定是否使用 RuoYi 之前，你可以透過這個清單快速判斷：你需要的能力，這裡是否已經內建？如果已經內建，你需要多久能上線？&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;總程式碼量約 26 萬行，覆蓋 19 項系統功能、17 項基礎設施、14 個業務子系統。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="功能全景"&gt;功能全景&lt;/h2&gt;
&lt;div class="mermaid"&gt;mindmap
root((RuoYi-Vue-Pro&lt;br/&gt;功能全景))
系統功能
使用者管理
角色管理
選單管理
部門管理
崗位管理
租戶管理
字典管理
通知公告
操作日誌
登入日誌
敏感詞管理
基礎設施
程式碼生成器
檔案服務
訊息佇列
配置管理
WebSocket
服務保障
系統監控
業務子系統
BPM 工作流
CRM 客戶管理
ERP 進銷存
Mall 商城
MES 製造執行
WMS 倉庫管理
Pay 支付中心
AI 大模型
IoT 物聯網
IM 即時通訊
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="系統功能19-項"&gt;系統功能（19 項）&lt;/h2&gt;
&lt;p&gt;這些是後臺管理的「標配」能力，任何企業系統都需要的通用功能：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;解決什麼問題&lt;/th&gt;
&lt;th&gt;典型場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;使用者管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理系統登入賬號，支援增刪改查、重置密碼、狀態控制&lt;/td&gt;
&lt;td&gt;建立員工賬號、離職禁用賬號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;線上使用者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時檢視當前線上使用者，支援強制下線&lt;/td&gt;
&lt;td&gt;安全排查、賬號異常處理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;角色管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RBAC 許可權模型，角色分配選單許可權和按鈕許可權&lt;/td&gt;
&lt;td&gt;設定「銷售經理」只能看 CRM 模組&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;動態配置左側選單，支援目錄/選單/按鈕三級&lt;/td&gt;
&lt;td&gt;新增業務模組後配置對應選單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;組織架構樹，支援資料範圍許可權&lt;/td&gt;
&lt;td&gt;北京分公司只能看北京資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;崗位管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;崗位字典，關聯使用者&lt;/td&gt;
&lt;td&gt;關聯崗位與薪資/審批許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;租戶管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SaaS 場景的租戶註冊、套餐分配、過期處理&lt;/td&gt;
&lt;td&gt;SaaS 服務商管理多個企業客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;租戶套餐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;為不同租戶套餐繫結不同的選單許可權&lt;/td&gt;
&lt;td&gt;基礎版/專業版/旗艦版功能差異&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;字典管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全域性列舉值維護，前後端共用&lt;/td&gt;
&lt;td&gt;性別、狀態、型別等下拉選項&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;簡訊管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡訊模板、傳送記錄、渠道配置&lt;/td&gt;
&lt;td&gt;驗證碼、通知簡訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;郵件管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;郵件模板、傳送記錄、SMTP 配置&lt;/td&gt;
&lt;td&gt;註冊驗證、系統告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;站內信&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系統內訊息通知，已讀/未讀狀態&lt;/td&gt;
&lt;td&gt;審批通知、系統公告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;操作日誌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄使用者每一次操作，含請求引數和結果&lt;/td&gt;
&lt;td&gt;審計追溯、問題排查&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;登入日誌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄登入 IP、時間、結果&lt;/td&gt;
&lt;td&gt;安全審計、異常登入檢測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;錯誤碼管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;統一錯誤碼定義，前端友好提示&lt;/td&gt;
&lt;td&gt;API 返回 &lt;code&gt;1002005001&lt;/code&gt; 對應「使用者不存在」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通知公告&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系統級公告發布，支援定時釋出&lt;/td&gt;
&lt;td&gt;系統維護通知、公司公告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;敏感詞&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;敏感詞庫管理和自動過濾&lt;/td&gt;
&lt;td&gt;內容稽核、評論過濾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;應用管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多應用配置，如管理後臺 + 移動端&lt;/td&gt;
&lt;td&gt;一個系統多端入口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;地區管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;中國行政區劃資料，省市區三級&lt;/td&gt;
&lt;td&gt;地址選擇器、物流區域&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="基礎設施17-項"&gt;基礎設施（17 項）&lt;/h2&gt;
&lt;p&gt;這些是支撐業務執行的底層能力：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力&lt;/th&gt;
&lt;th&gt;解決什麼問題&lt;/th&gt;
&lt;th&gt;技術實現&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;程式碼生成器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一鍵生成 CRUD 前後端程式碼，告別重複勞動&lt;/td&gt;
&lt;td&gt;模板引擎，支援主子表、樹形表、uni-app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系統介面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於 Swagger 的線上 API 文件&lt;/td&gt;
&lt;td&gt;Swagger3 + Knife4j&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料庫文件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動生成資料庫表結構文件&lt;/td&gt;
&lt;td&gt;Screw&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;表單構建&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;視覺化拖拽設計表單&lt;/td&gt;
&lt;td&gt;低程式碼表單設計器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;配置管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;動態配置引數，無需重啟&lt;/td&gt;
&lt;td&gt;系統引數 + 配置中心&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;檔案服務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;統一檔案上傳/下載，多雲端儲存切換&lt;/td&gt;
&lt;td&gt;S3 協議：MinIO/阿里雲 OSS/騰訊雲 COS/七牛雲&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebSocket&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時雙向通訊&lt;/td&gt;
&lt;td&gt;單機/叢集雙模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API 日誌&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄 API 請求和響應詳情&lt;/td&gt;
&lt;td&gt;攔截器 + 非同步寫入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MySQL 監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料庫連線池和慢查詢監控&lt;/td&gt;
&lt;td&gt;Druid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Redis 監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Redis 記憶體、命中率、連線監控&lt;/td&gt;
&lt;td&gt;內建監控面板&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Java 監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JVM 記憶體、執行緒、GC 監控&lt;/td&gt;
&lt;td&gt;Spring Boot Actuator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;鏈路追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分散式請求鏈路跟蹤&lt;/td&gt;
&lt;td&gt;SkyWalking 整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日誌中心&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多服務日誌集中檢視&lt;/td&gt;
&lt;td&gt;日誌檔案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;服務保障&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分散式鎖、冪等性、限流、防重&lt;/td&gt;
&lt;td&gt;Redisson + 自定義註解&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;單元測試&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;保障程式碼質量&lt;/td&gt;
&lt;td&gt;JUnit5 + 1121+ 測試用例&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="業務子系統總覽"&gt;業務子系統總覽&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;子系統&lt;/th&gt;
&lt;th&gt;表數量&lt;/th&gt;
&lt;th&gt;一句話描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BPM 工作流&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;審批流程引擎，仿釘釘設計器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pay 支付中心&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;統一支付/退款/轉賬，遮蔽渠道差異&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Report 報表&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;拖拽式大屏設計，三種報表引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Member 會員&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;會員體系，VIP 等級，積分簽到&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MP 公眾號&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;多公眾號管理，粉絲訊息自動回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mall 商城&lt;/td&gt;
&lt;td&gt;70+&lt;/td&gt;
&lt;td&gt;完整 B2C 電商系統&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRM 客戶管理&lt;/td&gt;
&lt;td&gt;20+&lt;/td&gt;
&lt;td&gt;線索→商機→合同→回款全流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERP 進銷存&lt;/td&gt;
&lt;td&gt;30+&lt;/td&gt;
&lt;td&gt;採購/銷售/庫存/財務一體化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sale 銷售財務&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;ERP 子模組，收款/付款/結算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WMS 倉庫管理&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;通用倉儲管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MES 製造執行&lt;/td&gt;
&lt;td&gt;133&lt;/td&gt;
&lt;td&gt;車間級生產製造管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 大模型&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;對話/繪畫/知識庫/工作流&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IoT 物聯網&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;裝置管理/物模型/規則引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IM 即時通訊&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;私聊/群聊/頻道/音影片&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Java 開發者&lt;/strong&gt;：有 Spring Boot 基礎，想快速交付企業級專案&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中小型團隊&lt;/strong&gt;：需要一套覆蓋多業務場景的底座，減少重複開發&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;企業 IT 部門&lt;/strong&gt;：內部資訊化建設，需要審批流、進銷存、CRM 等成熟模組&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SaaS 服務商&lt;/strong&gt;：需要多租戶能力和模組化架構來服務多個客戶&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>商业化愿景</title><link>https://ruoyiplus.com/zh-tw/plus/business-vision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/business-vision/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：RuoYiPlus 的目標是成為「企業級應用基礎設施」的領導者，幫助軟體廠商和企業 IT 團隊以最低成本獲得生產級能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;客戶型別&lt;/th&gt;
&lt;th&gt;核心痛點&lt;/th&gt;
&lt;th&gt;RuoYiPlus 的價值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;軟體廠商&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自研框架成本高、週期長&lt;/td&gt;
&lt;td&gt;基於成熟框架快速交付&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;企業資訊化部門&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;採購成品難以定製&lt;/td&gt;
&lt;td&gt;開源可控，深度定製&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系統整合商&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案交付週期緊&lt;/td&gt;
&lt;td&gt;模組化快速組裝&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SaaS 運營商&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多租戶架構複雜&lt;/td&gt;
&lt;td&gt;開箱即用的 SaaS 架構&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="目標客戶畫像"&gt;目標客戶畫像&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "目標客戶群體"
A["軟體廠商"]
B["企業資訊化部門"]
C["系統整合商"]
D["SaaS 運營商"]
end
subgraph "核心痛點"
A1["自研框架成本高"]
B1["採購成品難以定製"]
C1["專案交付週期緊"]
D1["多租戶架構複雜"]
end
subgraph "我們的價值"
A2["基於成熟框架快速交付"]
B2["開源可控，深度定製"]
C2["模組化快速組裝"]
D2["開箱即用的 SaaS 架構"]
end
A --&gt; A1 --&gt; A2
B --&gt; B1 --&gt; B2
C --&gt; C1 --&gt; C2
D --&gt; D1 --&gt; D2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-產品矩陣"&gt;1. 產品矩陣&lt;/h2&gt;
&lt;h3 id="11-版本體系"&gt;1.1 版本體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "產品版本體系"
A["社群版 - 免費"]
B["專業版 - ¥29,800/年"]
C["企業版 - ¥99,800/年"]
D["旗艦版 - ¥199,800/年"]
end
subgraph "目標客戶"
A1["個人開發者"]
B1["中小企業"]
C1["大中型企業"]
D1["集團型企業"]
end
A --&gt; A1
B --&gt; B1
C --&gt; C1
D --&gt; D1
&lt;/div&gt;
&lt;h3 id="12-功能對比"&gt;1.2 功能對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能模組&lt;/th&gt;
&lt;th style="text-align: center"&gt;社群版&lt;/th&gt;
&lt;th style="text-align: center"&gt;專業版&lt;/th&gt;
&lt;th style="text-align: center"&gt;企業版&lt;/th&gt;
&lt;th style="text-align: center"&gt;旗艦版&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;基礎框架&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;增強 RBAC&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SSO 單點登入&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MFA 多因素認證&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;統一審計中心&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;區塊鏈存證&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;郵件中介軟體&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息通知中心&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License 授權&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多租戶管理&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料許可權引擎&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;敏感資料脫敏&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;技術支援&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;社群&lt;/td&gt;
&lt;td style="text-align: center"&gt;郵件&lt;/td&gt;
&lt;td style="text-align: center"&gt;7x24&lt;/td&gt;
&lt;td style="text-align: center"&gt;專屬客服&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-商業模式"&gt;2. 商業模式&lt;/h2&gt;
&lt;h3 id="21-授權模式"&gt;2.1 授權模式&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["使用者數"] --&gt; B{"選擇套餐"}
B --&gt;|50 使用者| C["基礎版 ¥9,800/年"]
B --&gt;|200 使用者| D["標準版 ¥29,800/年"]
B --&gt;|500 使用者| E["高階版 ¥59,800/年"]
B --&gt;|不限使用者| F["無限版 ¥99,800/年"]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;套餐&lt;/th&gt;
&lt;th&gt;使用者數&lt;/th&gt;
&lt;th&gt;年費&lt;/th&gt;
&lt;th&gt;單使用者成本&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;基礎版&lt;/td&gt;
&lt;td&gt;50 使用者&lt;/td&gt;
&lt;td&gt;¥9,800/年&lt;/td&gt;
&lt;td&gt;¥196/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;標準版&lt;/td&gt;
&lt;td&gt;200 使用者&lt;/td&gt;
&lt;td&gt;¥29,800/年&lt;/td&gt;
&lt;td&gt;¥149/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;高階版&lt;/td&gt;
&lt;td&gt;500 使用者&lt;/td&gt;
&lt;td&gt;¥59,800/年&lt;/td&gt;
&lt;td&gt;¥120/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;無限版&lt;/td&gt;
&lt;td&gt;不限使用者&lt;/td&gt;
&lt;td&gt;¥99,800/年&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-按模組授權"&gt;2.2 按模組授權&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模組&lt;/th&gt;
&lt;th&gt;專業版&lt;/th&gt;
&lt;th&gt;企業版&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IAM 統一身份中心&lt;/td&gt;
&lt;td&gt;¥8,800/年&lt;/td&gt;
&lt;td&gt;¥15,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit 審計合規中心&lt;/td&gt;
&lt;td&gt;¥8,800/年&lt;/td&gt;
&lt;td&gt;¥15,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mail 郵件中介軟體&lt;/td&gt;
&lt;td&gt;¥3,800/年&lt;/td&gt;
&lt;td&gt;¥6,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notify 訊息中心&lt;/td&gt;
&lt;td&gt;¥3,800/年&lt;/td&gt;
&lt;td&gt;¥6,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License 授權管理&lt;/td&gt;
&lt;td&gt;¥5,800/年&lt;/td&gt;
&lt;td&gt;¥9,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tenant 多租戶管理&lt;/td&gt;
&lt;td&gt;¥5,800/年&lt;/td&gt;
&lt;td&gt;¥9,800/年&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-服務模式"&gt;2.3 服務模式&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;服務型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;定價&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;技術支援&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問題解答、bug修復&lt;/td&gt;
&lt;td&gt;¥8,000/年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;功能定製&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按需功能開發&lt;/td&gt;
&lt;td&gt;¥1,500/人天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;培訓服務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;產品培訓、運維培訓&lt;/td&gt;
&lt;td&gt;¥3,000/人天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部署實施&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;生產環境部署&lt;/td&gt;
&lt;td&gt;¥5,000/次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料遷移&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;歷史資料遷移&lt;/td&gt;
&lt;td&gt;¥10,000/次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;等保合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;等保認證支援&lt;/td&gt;
&lt;td&gt;¥50,000/次&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-生態合作"&gt;3. 生態合作&lt;/h2&gt;
&lt;h3 id="31-合作伙伴生態"&gt;3.1 合作伙伴生態&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "合作伙伴生態"
A["ISV 合作"]
B["整合商合作"]
C["雲廠商合作"]
D["培訓合作"]
E["實施合作"]
end
subgraph "合作價值"
A1["整合銷售分成"]
B1["專案合作"]
C1["雲市場入駐"]
D1["培訓分成"]
E1["實施專案合作"]
end
A --&gt; A1
B --&gt; B1
C --&gt; C1
D --&gt; D1
E --&gt; E1
&lt;/div&gt;
&lt;h3 id="32-isv-合作模式"&gt;3.2 ISV 合作模式&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["合作伙伴"] --&gt; B["聯合解決方案"]
B --&gt; C["行業客戶交付"]
C --&gt; D["銷售分成模式"]
D --&gt; A
D --&gt; E["RuoYiPlus"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-發展路線圖"&gt;4. 發展路線圖&lt;/h2&gt;
&lt;h3 id="41-短期計劃"&gt;4.1 短期計劃&lt;/h3&gt;
&lt;div class="mermaid"&gt;gantt
title 發展路線
dateFormat YYYY-MM-DD
section MVP
IAM/Audit/Mail 核心功能 :2024-01-01, 90d
section 產品化
License/Tenant 商業化 :2024-04-01, 90d
section 生態建設
首批合作伙伴 :2024-07-01, 90d
section 市場推廣
行業解決方案 :2024-10-01, 90d
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;階段&lt;/th&gt;
&lt;th&gt;時間&lt;/th&gt;
&lt;th&gt;目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MVP&lt;/td&gt;
&lt;td&gt;Q1&lt;/td&gt;
&lt;td&gt;IAM/Audit/Mail 核心功能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;產品化&lt;/td&gt;
&lt;td&gt;Q2&lt;/td&gt;
&lt;td&gt;License/Tenant 商業化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;生態建設&lt;/td&gt;
&lt;td&gt;Q3&lt;/td&gt;
&lt;td&gt;首批合作伙伴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;市場推廣&lt;/td&gt;
&lt;td&gt;Q4&lt;/td&gt;
&lt;td&gt;行業解決方案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="42-中長期願景"&gt;4.2 中長期願景&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "中長期目標"
A["AI 增強&lt;br/&gt;智慧問答、智慧報表"]
B["微服務化&lt;br/&gt;全面微服務架構"]
C["多雲部署&lt;br/&gt;雲原生 K8s 支援"]
D["國際化&lt;br/&gt;多語言、多時區"]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;階段&lt;/th&gt;
&lt;th&gt;目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI 增強&lt;/td&gt;
&lt;td&gt;智慧問答、智慧報表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微服務化&lt;/td&gt;
&lt;td&gt;全面微服務架構&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多雲部署&lt;/td&gt;
&lt;td&gt;雲原生 K8s 支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;國際化&lt;/td&gt;
&lt;td&gt;多語言、多時區&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-成功案例"&gt;5. 成功案例&lt;/h2&gt;
&lt;h3 id="案例-1某省政務雲平臺"&gt;案例 1：某省政務雲平臺&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["某省級政務雲運營公司"] --&gt; B["需為省內 200+ 委辦局提供統一辦公平臺"]
B --&gt; C["RuoYiPlus 企業版 + OA 增強"]
C --&gt; D["10萬+ 使用者"]
D --&gt; E["3個月完成交付&lt;br/&gt;節省開發成本 500萬+"]
&lt;/div&gt;
&lt;h3 id="案例-2某金融機構-crm"&gt;案例 2：某金融機構 CRM&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["某城市商業銀行"] --&gt; B["合規要求高&lt;br/&gt;需等保三級認證"]
B --&gt; C["RuoYiPlus 旗艦版&lt;br/&gt;+ CRM 增強 + Audit"]
C --&gt; D["2000+ 使用者"]
D --&gt; E["透過等保三級認證&lt;br/&gt;審計合規零風險"]
&lt;/div&gt;
&lt;h3 id="案例-3某製造集團-erp"&gt;案例 3：某製造集團 ERP&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["某上市公司製造集團"] --&gt; B["30+ 子公司&lt;br/&gt;需要資料隔離"]
B --&gt; C["RuoYiPlus 企業版&lt;br/&gt;+ Tenant 多租戶"]
C --&gt; D["5000+ 使用者&lt;br/&gt;30+ 租戶"]
D --&gt; E["統一平臺+資料隔離&lt;br/&gt;運維成本降低 60%"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="聯絡我們"&gt;聯絡我們&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;型別&lt;/th&gt;
&lt;th&gt;聯絡方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;售前諮詢&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商務合作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;代理合作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;技術支援&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;免責宣告&lt;/strong&gt;: RuoYiPlus 基於 RuoYi-Vue-Pro / Yudao 開源框架進行開發，遵循原框架開源協議。我們對框架本身不擁有所有權，僅在開源框架基礎上進行企業級增強和商業化封裝。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Configuration</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/configuration/</guid><description>&lt;p&gt;The configuration of your site can be found in &lt;code&gt;config/_default/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="full-documentation"&gt;Full Documentation&lt;/h2&gt;
&lt;p&gt;See
&lt;/p&gt;
&lt;h2 id="navigation"&gt;Navigation&lt;/h2&gt;
&lt;h3 id="menu"&gt;Menu&lt;/h3&gt;
&lt;p&gt;See
&lt;/p&gt;
&lt;h2 id="left-sidebar"&gt;Left Sidebar&lt;/h2&gt;
&lt;p&gt;Links are automatically generated from the structure of your content directory. Simply add a folder to nest a page.&lt;/p&gt;
&lt;h3 id="extra-links"&gt;Extra Links&lt;/h3&gt;
&lt;p&gt;Additional links can be added under the &lt;code&gt;sidebar&lt;/code&gt; section of your &lt;code&gt;config/_default/menus.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;menu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Need help?&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;separator&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A page&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pageRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/page-filename-here&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;An external link ↗&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://hugoblox.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="right-sidebar"&gt;Right Sidebar&lt;/h2&gt;
&lt;p&gt;A table of contents is automatically generated from the headings your Markdown file.&lt;/p&gt;
&lt;p&gt;It can optionally be disabled by setting &lt;code&gt;toc: false&lt;/code&gt; in the front matter of a page:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;My Page&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;toc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Report 报表与大屏</title><link>https://ruoyiplus.com/zh-tw/ruoyi/report/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/report/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Report 模組讓非技術人員也能做出專業的資料大屏&lt;/strong&gt;。不需要寫前端程式碼，透過拖拽元件、配置資料來源，就能生成視覺化報表和大屏頁面。適合管理層看板、資料監控、專案彙報等場景。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：像做 PPT 一樣做資料大屏。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;Report 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;管理層想看資料，每次都讓開發寫頁面&lt;/td&gt;
&lt;td&gt;拖拽式設計，業務人員自己做&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料展示需求頻繁變化&lt;/td&gt;
&lt;td&gt;修改大屏配置即可，無需發版&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要專業的視覺化效果&lt;/td&gt;
&lt;td&gt;內建幾十種圖表元件和模板&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不同場景需要不同的報表引擎&lt;/td&gt;
&lt;td&gt;提供三種引擎，按需選擇&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
DESIGNER["大屏設計師&lt;br/&gt;拖拽配置大屏&lt;br/&gt;設定資料來源&lt;br/&gt;釋出大屏"]
VIEWER["檢視者（管理層/客戶）&lt;br/&gt;檢視大屏&lt;br/&gt;互動篩選資料"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="三種報表引擎"&gt;三種報表引擎&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph GoView["Go-View（推薦）"]
G1["開源免費"]
G2["Vue3 技術棧"]
G3["純前端，獨立部署"]
G4["內建豐富圖表元件"]
end
subgraph Jimu["JimuReport"]
J1["不開源"]
J2["內嵌後端"]
J3["支援複雜報表"]
J4["中國式報表"]
end
subgraph AJ["AJ-Report"]
A1["開源"]
A2["開發中"]
A3["完全後端驅動"]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th style="text-align: center"&gt;Go-View&lt;/th&gt;
&lt;th style="text-align: center"&gt;JimuReport&lt;/th&gt;
&lt;th style="text-align: center"&gt;AJ-Report&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;開源&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;上手難度&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐ 低&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐ 中&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐ 中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;圖表豐富度&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;複雜報表&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;推薦場景&lt;/td&gt;
&lt;td style="text-align: center"&gt;通用大屏&lt;/td&gt;
&lt;td style="text-align: center"&gt;中國式複雜報表&lt;/td&gt;
&lt;td style="text-align: center"&gt;後端驅動場景&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="大屏設計流程"&gt;大屏設計流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart LR
A["新建大屏&lt;br/&gt;選擇模板或空白"] --&gt; B["拖拽元件&lt;br/&gt;圖表/文字/圖片/邊框"]
B --&gt; C["配置資料來源&lt;br/&gt;API 介面 / 靜態資料"]
C --&gt; D["調整樣式&lt;br/&gt;佈局/顏色/動畫"]
D --&gt; E["預覽效果&lt;br/&gt;實時檢視"]
E --&gt; F{滿意?}
F --&gt;|是| G["釋出大屏&lt;br/&gt;生成訪問連結"]
F --&gt;|否| B
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="內建圖表元件部分"&gt;內建圖表元件（部分）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;折線圖 / 柱狀圖 / 餅圖 / 雷達圖&lt;/li&gt;
&lt;li&gt;資料表格 / 滾動表格&lt;/li&gt;
&lt;li&gt;數字翻牌器&lt;/li&gt;
&lt;li&gt;地圖（中國 / 省市）&lt;/li&gt;
&lt;li&gt;儀表盤&lt;/li&gt;
&lt;li&gt;詞雲&lt;/li&gt;
&lt;li&gt;時間軸&lt;/li&gt;
&lt;li&gt;邊框和裝飾元件&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="典型應用場景"&gt;典型應用場景&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;場景&lt;/th&gt;
&lt;th&gt;大屏內容&lt;/th&gt;
&lt;th&gt;檢視者&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售看板&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;今日銷售額、訂單量、轉化率、區域排名&lt;/td&gt;
&lt;td&gt;銷售總監、管理層&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;產線狀態、產量、不良率、裝置 OEE&lt;/td&gt;
&lt;td&gt;生產經理、廠長&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;運營大屏&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用者增長、活躍度、留存率、收入趨勢&lt;/td&gt;
&lt;td&gt;運營團隊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案彙報&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案進度、里程碑、風險、資源使用&lt;/td&gt;
&lt;td&gt;專案干係人&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Yudao 框架增强能力</title><link>https://ruoyiplus.com/zh-tw/plus/framework-enhancement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/framework-enhancement/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：在 Yudao 原生能力之上，RuoYiPlus 對框架基礎設施進行了 8 大維度的企業級增強，讓框架具備「開箱即用」的生產級能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;Yudao 原生&lt;/th&gt;
&lt;th&gt;RuoYiPlus 增強後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;資料許可權不夠細&lt;/td&gt;
&lt;td&gt;僅部門級過濾&lt;/td&gt;
&lt;td&gt;使用者/角色/崗位/部門四層 + 欄位級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;敏感資訊洩露風險&lt;/td&gt;
&lt;td&gt;無脫敏機制&lt;/td&gt;
&lt;td&gt;註解式自動脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作日誌不完整&lt;/td&gt;
&lt;td&gt;基礎日誌&lt;/td&gt;
&lt;td&gt;智慧變更追蹤 + 風險評分 + 區塊鏈存證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API 缺乏保護&lt;/td&gt;
&lt;td&gt;基礎路由&lt;/td&gt;
&lt;td&gt;請求籤名 + 限流 + 熔斷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分散式能力弱&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;分散式事務 + 鎖 + 冪等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;快取策略單一&lt;/td&gt;
&lt;td&gt;Redis 單層&lt;/td&gt;
&lt;td&gt;Caffeine + Redis 多級快取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料庫擴充套件難&lt;/td&gt;
&lt;td&gt;單庫&lt;/td&gt;
&lt;td&gt;讀寫分離 + 分庫分表 + 資料歸檔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;監控能力弱&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;SkyWalking 全鏈路追蹤 + 自定義指標&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;div class="mermaid"&gt;mindmap
root((適合使用者))
軟體廠商
需要授權管理
需要商業化基礎設施
企業 IT 團隊
需要安全合規
需要多租戶隔離
系統整合商
需要快速交付
需要模組化組裝
SaaS 運營商
需要多租戶架構
需要計費體系
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-資料許可權引擎"&gt;1. 資料許可權引擎&lt;/h2&gt;
&lt;h3 id="11-四層許可權模型"&gt;1.1 四層許可權模型&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph "許可權來源"
F["使用者許可權&lt;br/&gt;優先順序最高"]
G["角色許可權"]
H["崗位許可權"]
I["部門許可權&lt;br/&gt;優先順序最低"]
F ~~~ G ~~~ H ~~~ I
end
subgraph "許可權決策引擎"
A["使用者請求"] --&gt; B["許可權解析"]
B --&gt; C["許可權合併"]
C --&gt; D["資料過濾"]
D --&gt; E["等級過濾"]
end
subgraph "許可權過濾"
J["SQL 過濾"] --&gt; K["返回結果"]
end
許可權來源 --&gt; 許可權決策引擎
許可權決策引擎 --&gt; 許可權過濾
style B fill:#FFA500,color:#fff,font-weight:bold
&lt;/div&gt;
&lt;h3 id="12-能力對比"&gt;1.2 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;原生支援&lt;/th&gt;
&lt;th&gt;增強後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;部門級資料過濾&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;角色級資料過濾&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自定義 SQL 過濾&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;欄位級許可權控制&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;動態資料許可權規則&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客戶等級過濾&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-使用方式"&gt;1.3 使用方式&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 基於角色的資料許可權：銷售經理看團隊資料，區域總監看本區域資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sales_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region_director&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 基於部門的層級許可權&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deptIds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#{currentUser.deptId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReportService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 自定義資料範圍&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlFilter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region_id = #{currentUser.regionId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RegionService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 欄位隱藏&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;salary&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;bankCard&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataPermission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Operation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;HIDE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmployeeService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 欄位只讀&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;createTime&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;creator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataPermission&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Operation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;READONLY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-敏感欄位脫敏"&gt;2. 敏感欄位脫敏&lt;/h2&gt;
&lt;h3 id="21-脫敏架構"&gt;2.1 脫敏架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["資料查詢"] --&gt; B["脫敏規則匹配"]
B --&gt; C["欄位型別識別"]
C --&gt; D["脫敏演算法應用"]
D --&gt; E["返回脫敏結果"]
&lt;/div&gt;
&lt;h3 id="22-支援的脫敏型別"&gt;2.2 支援的脫敏型別&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;脫敏型別&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;手機號&lt;/td&gt;
&lt;td&gt;&lt;code&gt;138****1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;中間4位脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;郵箱&lt;/td&gt;
&lt;td&gt;&lt;code&gt;a***@163.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;使用者名稱脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;身份證&lt;/td&gt;
&lt;td&gt;&lt;code&gt;310***********1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;出生日期+後4位脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;銀行卡&lt;/td&gt;
&lt;td&gt;&lt;code&gt;**** **** **** 1234&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;僅保留後4位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;姓名&lt;/td&gt;
&lt;td&gt;&lt;code&gt;張*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;姓氏外脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;地址&lt;/td&gt;
&lt;td&gt;&lt;code&gt;上海市徐彙區****&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;詳細地址脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼&lt;/td&gt;
&lt;td&gt;&lt;code&gt;******&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;完全脫敏&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-使用方式"&gt;2.3 使用方式&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 註解式脫敏&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Customer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PHONE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EMAIL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ID_CARD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idCard&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 查詢時自動脫敏&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;phone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Customer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getCustomerList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CustomerQuery&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-操作日誌中心"&gt;3. 操作日誌中心&lt;/h2&gt;
&lt;h3 id="31-日誌體系"&gt;3.1 日誌體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "日誌採集"
A["操作行為"]
B["登入事件"]
C["API 呼叫"]
end
subgraph "日誌處理"
D["日誌解析"]
E["變更對比"]
F["風險評分"]
end
subgraph "日誌儲存"
G["熱資料儲存"]
H["冷資料歸檔"]
I["區塊鏈存證"]
end
A --&gt; D
B --&gt; D
C --&gt; D
D --&gt; E
E --&gt; F
F --&gt; G
F --&gt; H
F --&gt; I
&lt;/div&gt;
&lt;h3 id="32-智慧變更追蹤"&gt;3.2 智慧變更追蹤&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 自動對比修改前後差異，僅記錄變更欄位&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@OperateLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;客戶管理&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;businessType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BusinessType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UPDATE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;updateCustomer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Customer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-敏感操作告警"&gt;3.3 敏感操作告警&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;aegis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;資料匯出&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 10分鐘內超過10次&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;批次刪除&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;require_approval&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-api-閘道器增強"&gt;4. API 閘道器增強&lt;/h2&gt;
&lt;h3 id="41-閘道器架構"&gt;4.1 閘道器架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["客戶端請求"] --&gt; B["API 閘道器"]
B --&gt; C["請求籤名驗證"]
C --&gt; D["流量控制"]
D --&gt; E["熔斷降級"]
E --&gt; F["請求快取"]
F --&gt; G["協議轉換"]
G --&gt; H["後端服務"]
&lt;/div&gt;
&lt;h3 id="42-增強特性"&gt;4.2 增強特性&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;請求籤名&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API 請求籤名驗證，防篡改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;流量控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多維度限流策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;熔斷降級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;服務熔斷保護&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;請求快取&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API 響應快取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協議轉換&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SOAP → REST 轉換&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-服務治理能力"&gt;5. 服務治理能力&lt;/h2&gt;
&lt;h3 id="51-分散式事務"&gt;5.1 分散式事務&lt;/h3&gt;
&lt;p&gt;基於 Seata 的分散式事務解決方案：&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
A["業務請求"] --&gt; B["事務發起方"]
B --&gt; C["Seata TC"]
C --&gt; D["分支事務1"]
C --&gt; E["分支事務2"]
C --&gt; F["分支事務3"]
D --&gt; G["全域性提交/回滾"]
E --&gt; G
F --&gt; G
&lt;/div&gt;
&lt;h3 id="52-分散式鎖與冪等"&gt;5.2 分散式鎖與冪等&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Redis + Redisson 分散式鎖&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DistributedLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;order:lock:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;waitTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;leaseTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;processOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 冪等控制&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Idempotent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;order:create:{userId}:{productId}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expireTime&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-快取增強"&gt;6. 快取增強&lt;/h2&gt;
&lt;h3 id="61-多級快取架構"&gt;6.1 多級快取架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["應用請求"] --&gt; B["L1 Caffeine"]
B --&gt; C["L2 Redis"]
C --&gt; D["資料庫"]
D --&gt; C
C --&gt; B
B --&gt; A
&lt;/div&gt;
&lt;h3 id="62-註解式快取"&gt;6.2 註解式快取&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Cacheable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:list:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;expire&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUserList&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@CacheEvict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:list:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@CachePut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;user:{id}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-資料庫增強"&gt;7. 資料庫增強&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
A["寫請求"] --&gt; B["主庫"]
C["讀請求"] --&gt; D["從庫"]
B --&gt; E["資料同步"]
E --&gt; D
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;讀寫分離&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動路由讀寫請求，dynamic-datasource&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;分庫分表&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ShardingSphere 分片策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料歸檔&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動冷熱資料分離，定時歸檔&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-監控增強"&gt;8. 監控增強&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
A["客戶端"] --&gt; B["閘道器"]
B --&gt; C["服務1"]
C --&gt; D["服務2"]
D --&gt; E["服務3"]
E --&gt; F["資料庫"]
G["SkyWalking"] -.-&gt; B
G -.-&gt; C
G -.-&gt; D
G -.-&gt; E
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全鏈路追蹤&lt;/strong&gt;：整合 SkyWalking 分散式追蹤&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自定義指標&lt;/strong&gt;：&lt;code&gt;@CustomMonitor&lt;/code&gt; 註解自動記錄&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;告警規則&lt;/strong&gt;：支援多級閾值告警&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="技術架構總覽"&gt;技術架構總覽&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus 框架增強層"
P1["資料許可權引擎&lt;br/&gt;四層許可權+欄位級"]
P2["敏感欄位脫敏&lt;br/&gt;註解式自動脫敏"]
P3["操作日誌中心&lt;br/&gt;變更追蹤+區塊鏈存證"]
P4["API 閘道器&lt;br/&gt;簽名+限流+熔斷"]
P5["服務治理&lt;br/&gt;分散式事務+鎖+冪等"]
P6["多級快取&lt;br/&gt;Caffeine+Redis"]
P7["資料庫增強&lt;br/&gt;讀寫分離+分庫分表"]
P8["全鏈路監控&lt;br/&gt;SkyWalking+自定義指標"]
end
subgraph "Yudao Framework Core"
CORE["Spring Boot 3 + MyBatis-Plus + Redis"]
end
P1 --&gt; CORE
P2 --&gt; CORE
P3 --&gt; CORE
P4 --&gt; CORE
P5 --&gt; CORE
P6 --&gt; CORE
P7 --&gt; CORE
P8 --&gt; CORE
&lt;/div&gt;</description></item><item><title>AI 大模型</title><link>https://ruoyiplus.com/zh-tw/ruoyi/ai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/ai/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AI 模組是一站式 AI 能力整合平臺&lt;/strong&gt;，對接國內外主流大模型，提供對話、繪畫、知識庫（RAG）、工具呼叫、工作流、寫作、思維導圖、音樂創作等 8 大 AI 能力。無論是想給系統加一個 AI 助手，還是想做 AI 原生應用，這裡都有現成的能力。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：讓你的系統「會聊天、會畫畫、會寫文章、會唱歌」。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;AI 模組如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;接入大模型需要逐個對接 API&lt;/td&gt;
&lt;td&gt;統一對接國內外主流模型，一次整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企業內部知識無法被 AI 利用&lt;/td&gt;
&lt;td&gt;RAG 知識庫，讓 AI 讀懂你的文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 能力單一（只會聊天）&lt;/td&gt;
&lt;td&gt;8 大能力模組覆蓋多種場景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要編排 AI 工作流&lt;/td&gt;
&lt;td&gt;整合 Dify/FastGPT/Coze 工作流平臺&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;國內模型和國外模型切換複雜&lt;/td&gt;
&lt;td&gt;統一 API 層，切換模型無需改程式碼&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
AI_ADMIN["AI 管理員&lt;br/&gt;配置模型接入&lt;br/&gt;管理知識庫&lt;br/&gt;設定許可權"]
AI_USER["AI 使用者&lt;br/&gt;對話聊天&lt;br/&gt;繪畫創作&lt;br/&gt;知識庫問答&lt;br/&gt;寫作/思維導圖"]
AI_DEV["開發者&lt;br/&gt;透過 API 整合 AI 能力&lt;br/&gt;建立自定義工作流"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-大功能模組"&gt;8 大功能模組&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
AI_CORE["AI 大模型平臺"]
AI_CORE --&gt; CHAT["💬 AI 對話&lt;br/&gt;多模型聊天&lt;br/&gt;上下文記憶&lt;br/&gt;聯網搜尋&lt;br/&gt;推理模式 Thinking"]
AI_CORE --&gt; IMAGE["🎨 AI 繪畫&lt;br/&gt;文生圖&lt;br/&gt;支援 Stable Diffusion&lt;br/&gt;Midjourney"]
AI_CORE --&gt; RAG["📚 AI 知識庫&lt;br/&gt;RAG 檢索增強生成&lt;br/&gt;上傳文件即問答"]
AI_CORE --&gt; TOOL["🔧 AI 工具呼叫&lt;br/&gt;Function Calling&lt;br/&gt;MCP 協議"]
AI_CORE --&gt; WORKFLOW["🔄 AI 工作流&lt;br/&gt;整合 Dify/FastGPT/Coze&lt;br/&gt;視覺化編排"]
AI_CORE --&gt; WRITE["✍️ AI 寫作&lt;br/&gt;文章/報告/郵件&lt;br/&gt;多場景模板"]
AI_CORE --&gt; MINDMAP["🧠 AI 思維導圖&lt;br/&gt;自動生成腦圖"]
AI_CORE --&gt; MUSIC["🎵 AI 音樂&lt;br/&gt;Suno AI 音樂創作"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="支援的模型"&gt;支援的模型&lt;/h2&gt;
&lt;h3 id="國內模型"&gt;國內模型&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;提供方&lt;/th&gt;
&lt;th&gt;特點&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;通義千問&lt;/td&gt;
&lt;td&gt;阿里雲&lt;/td&gt;
&lt;td&gt;綜合能力強&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;深度求索&lt;/td&gt;
&lt;td&gt;價效比高，推理能力強&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;豆包&lt;/td&gt;
&lt;td&gt;位元組跳動&lt;/td&gt;
&lt;td&gt;多模態能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;混元&lt;/td&gt;
&lt;td&gt;騰訊&lt;/td&gt;
&lt;td&gt;生態整合好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文心一言&lt;/td&gt;
&lt;td&gt;百度&lt;/td&gt;
&lt;td&gt;中文理解強&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM&lt;/td&gt;
&lt;td&gt;智譜 AI&lt;/td&gt;
&lt;td&gt;開源友好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;星火&lt;/td&gt;
&lt;td&gt;科大訊飛&lt;/td&gt;
&lt;td&gt;語音能力突出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;月之暗面&lt;/td&gt;
&lt;td&gt;長上下文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;多模態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BaiChuan&lt;/td&gt;
&lt;td&gt;百川智慧&lt;/td&gt;
&lt;td&gt;中文最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SiliconFlow&lt;/td&gt;
&lt;td&gt;SiliconFlow&lt;/td&gt;
&lt;td&gt;多模型聚合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="國外模型"&gt;國外模型&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;提供方&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama&lt;/td&gt;
&lt;td&gt;Meta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="核心能力詳解"&gt;核心能力詳解&lt;/h2&gt;
&lt;h3 id="ai-對話"&gt;AI 對話&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;使用者：幫我分析一下這個季度的銷售資料
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AI：根據資料，Q3 銷售額同比增長 15%，其中...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ （支援 Thinking 推理模式）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;展示完整推理過程 + 結論
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;支援聯網搜尋，讓 AI 獲取實時資訊。&lt;/p&gt;
&lt;h3 id="ai-知識庫rag"&gt;AI 知識庫（RAG）&lt;/h3&gt;
&lt;div class="mermaid"&gt;flowchart LR
DOC["上傳文件&lt;br/&gt;PDF/Word/網頁"] --&gt; PARSE["文件解析&lt;br/&gt;分段/向量化"]
PARSE --&gt; STORE["向量儲存"]
QUERY["使用者提問"] --&gt; SEARCH["檢索相關段落"]
STORE --&gt; SEARCH
SEARCH --&gt; LLM["大模型&lt;br/&gt;結合上下文回答"]
LLM --&gt; ANSWER["精準回答"]
&lt;/div&gt;
&lt;h3 id="ai-工作流"&gt;AI 工作流&lt;/h3&gt;
&lt;p&gt;整合 Dify、FastGPT、Coze 等平臺，可以視覺化編排複雜的 AI 工作流，如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;智慧客服：使用者問題 → 意圖識別 → 知識庫檢索 → 轉人工判斷&lt;/li&gt;
&lt;li&gt;內容生成：關鍵詞 → 大綱 → 正文 → 配圖 → 釋出&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>安全合规能力</title><link>https://ruoyiplus.com/zh-tw/plus/security-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/security-compliance/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：為企業構建縱深安全防禦體系，滿足等保三級、金融級安全審計要求，讓業務系統「天生合規」。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;合規需求&lt;/th&gt;
&lt;th&gt;RuoYiPlus 安全方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;等保三級認證&lt;/td&gt;
&lt;td&gt;身份鑑別 + 訪問控制 + 安全審計 + 資料完整性 + 資料保密性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;金融級審計&lt;/td&gt;
&lt;td&gt;區塊鏈雜湊鏈存證 + 防篡改操作日誌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料隱私保護&lt;/td&gt;
&lt;td&gt;敏感欄位自動脫敏 + 傳輸加密 + 儲存加密&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;風險防控&lt;/td&gt;
&lt;td&gt;實時風險監控 + 異常行為告警 + 賬號凍結&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;div class="mermaid"&gt;mindmap
root((安全合規需求使用者))
金融機構
等保三級認證
金融審計合規
醫療行業
HIPAA 合規
患者資料保護
政務平臺
等級保護
資料安全
SaaS 企業
多租戶安全隔離
資料隱私合規
&lt;/div&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "安全形色"
SA["安全管理員&lt;br/&gt;配置安全策略"]
AUDITOR["審計員&lt;br/&gt;審查操作日誌"]
ADMIN["系統管理員&lt;br/&gt;運維安全"]
DEV["開發人員&lt;br/&gt;安全編碼"]
end
SA --&gt;|配置| MFA["多因素認證"]
SA --&gt;|配置| PWD["密碼策略"]
AUDITOR --&gt;|審查| LOG["操作日誌"]
AUDITOR --&gt;|生成| REPORT["合規報告"]
ADMIN --&gt;|管理| KEY["金鑰管理"]
ADMIN --&gt;|監控| ALERT["安全告警"]
DEV --&gt;|遵循| SECURE["安全編碼規範"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="1-安全體系架構"&gt;1. 安全體系架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus 安全合規體系"
subgraph "身份認證層"
A1["IAM 中心"]
A2["多因素認證"]
A3["SSO 單點登入"]
end
subgraph "訪問控制層"
B1["RBAC 許可權"]
B2["資料許可權"]
B3["API 許可權"]
end
subgraph "資料安全層"
C1["加密脫敏"]
C2["防篡改"]
C3["資料分級"]
end
subgraph "安全審計層"
D1["Audit 中心"]
D2["風險預警"]
D3["合規報表"]
end
subgraph "安全防護層"
E1["WAF"]
E2["防注入"]
E3["防 XSS"]
E4["防 CSRF"]
E5["防 DDoS"]
E6["金鑰管理"]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
D1 --&gt; E1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="2-身份認證安全"&gt;2. 身份認證安全&lt;/h2&gt;
&lt;h3 id="21-多因素認證-mfa"&gt;2.1 多因素認證 (MFA)&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["使用者登入"] --&gt; B{"是否需要 MFA?"}
B --&gt;|是| C["輸入密碼"]
C --&gt; D{"選擇驗證方式"}
D --&gt; E["簡訊 OTP"]
D --&gt; F["郵件 OTP"]
D --&gt; G["TOTP"]
D --&gt; H["硬體 Key"]
E --&gt; I["認證成功"]
F --&gt; I
G --&gt; I
H --&gt; I
B --&gt;|否| I
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;認證方式&lt;/th&gt;
&lt;th&gt;安全等級&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 驗證碼&lt;/td&gt;
&lt;td&gt;⭐⭐&lt;/td&gt;
&lt;td&gt;基礎雙因素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 簡訊 OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;動態簡訊驗證碼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 郵件 OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;郵件驗證碼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + TOTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;時間同步動態口令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 硬體 Key&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;FIDO2/U2F 最高安全&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-sso-單點登入"&gt;2.2 SSO 單點登入&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as 使用者
participant App1 as 應用1
participant IAM as IAM 認證中心
participant App2 as 應用2
User-&gt;&gt;App1: 訪問應用1
App1-&gt;&gt;IAM: 未認證，跳轉認證
User-&gt;&gt;IAM: 輸入憑證
IAM-&gt;&gt;IAM: 認證成功，簽發 Token
IAM-&gt;&gt;App1: 返回 Token
User-&gt;&gt;App2: 訪問應用2
App2-&gt;&gt;IAM: 驗證 Token
IAM-&gt;&gt;App2: Token 有效
App2-&gt;&gt;User: 直接訪問
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;協議&lt;/th&gt;
&lt;th&gt;支援&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OAuth 2.0&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;第三方應用授權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OIDC&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;現代應用 SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAML 2.0&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;企業級 SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDAP&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;企業目錄整合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-登入安全策略"&gt;2.3 登入安全策略&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;security&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-uppercase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-lowercase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-digit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;require-special&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;expiry-days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;history-count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lockout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-failed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;lockout-duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;abnormal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;notify-on-new-device&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;block-high-risk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-訪問控制"&gt;3. 訪問控制&lt;/h2&gt;
&lt;h3 id="31-rbac-許可權模型"&gt;3.1 RBAC 許可權模型&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["使用者"] --&gt; B["角色"]
B --&gt; C["選單許可權"]
B --&gt; D["操作許可權"]
B --&gt; E["資料許可權"]
A --&gt; F["崗位"]
F --&gt; G["角色繼承"]
F --&gt; H["資料範圍"]
&lt;/div&gt;
&lt;h3 id="32-資料許可權控制"&gt;3.2 資料許可權控制&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["資料請求"] --&gt; B{"許可權型別"}
B --&gt;|全部資料| C["*"]
B --&gt;|本部門資料| D["dept_id = current.dept_id"]
B --&gt;|本人資料| E["creator_id = current.user_id"]
B --&gt;|自定義資料| F["region_id IN current.regions"]
C --&gt; G["返回資料"]
D --&gt; G
E --&gt; G
F --&gt; G
&lt;/div&gt;
&lt;h3 id="33-api-許可權控制"&gt;3.3 API 許可權控制&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 方法級許可權控制&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;system:user:add&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;system:user:edit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Logical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;saveUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 角色許可權控制&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresRoles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;exportReport&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 自定義許可權校驗&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@RequiresCustomPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data:export:financial&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;exportFinancial&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-資料安全"&gt;4. 資料安全&lt;/h2&gt;
&lt;h3 id="41-敏感欄位脫敏流程"&gt;4.1 敏感欄位脫敏流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["資料查詢"] --&gt; B["脫敏規則匹配"]
B --&gt; C{"欄位型別"}
C --&gt;|手機號| D["中間4位脫敏"]
C --&gt;|郵箱| E["使用者名稱脫敏"]
C --&gt;|身份證| F["出生日期+後4位"]
C --&gt;|銀行卡| G["僅後4位"]
C --&gt;|姓名| H["姓氏外脫敏"]
C --&gt;|密碼| I["完全隱藏"]
D --&gt; J["返回脫敏結果"]
E --&gt; J
F --&gt; J
G --&gt; J
H --&gt; J
I --&gt; J
&lt;/div&gt;
&lt;h3 id="42-傳輸與儲存安全"&gt;4.2 傳輸與儲存安全&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS 強制&lt;/td&gt;
&lt;td&gt;全站 HTTPS，HTTP 自動跳轉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TLS 版本&lt;/td&gt;
&lt;td&gt;TLS 1.3 (相容 TLS 1.2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HSTS&lt;/td&gt;
&lt;td&gt;強制使用 HTTPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料庫加密&lt;/td&gt;
&lt;td&gt;AES 加密敏感欄位&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-審計追蹤"&gt;5. 審計追蹤&lt;/h2&gt;
&lt;h3 id="51-審計事件採集"&gt;5.1 審計事件採集&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審計事件採集"
A1["登入審計"]
A2["操作審計"]
A3["許可權審計"]
A4["匯出審計"]
A5["敏感審計"]
A6["API 審計"]
end
subgraph "審計處理"
B1["事件解析"]
B2["風險評分"]
B3["規則匹配"]
end
subgraph "審計儲存"
C1["熱資料"]
C2["冷資料"]
C3["區塊鏈"]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;h3 id="52-區塊鏈雜湊鏈"&gt;5.2 區塊鏈雜湊鏈&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Genesis Block"
A1["blockHash = SHA256"]
A2["genesisData"]
end
subgraph "Block N"
B1["blockHash = SHA256"]
B2["previousHash"]
B3["merkleRoot"]
B4["signature"]
end
subgraph "Block N+1"
C1["blockHash = SHA256"]
C2["previousHash = Block N hash"]
C3["merkleRoot"]
C4["signature"]
end
A1 --&gt; B2
B1 --&gt; C2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-合規支援"&gt;6. 合規支援&lt;/h2&gt;
&lt;h3 id="61-等保三級覆蓋"&gt;6.1 等保三級覆蓋&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A["等保三級要求"] --&gt; B["身份鑑別"]
A --&gt; C["訪問控制"]
A --&gt; D["安全審計"]
A --&gt; E["資料完整性"]
A --&gt; F["資料保密性"]
A --&gt; G["備份恢復"]
B --&gt; H["MFA/SSO"]
C --&gt; I["RBAC/資料許可權"]
D --&gt; J["Audit 中心"]
E --&gt; K["區塊鏈雜湊鏈"]
F --&gt; L["加密脫敏"]
G --&gt; M["資料備份方案"]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;等保要求&lt;/th&gt;
&lt;th&gt;實現方式&lt;/th&gt;
&lt;th&gt;覆蓋情況&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;身份鑑別&lt;/td&gt;
&lt;td&gt;MFA/SSO&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;訪問控制&lt;/td&gt;
&lt;td&gt;RBAC/資料許可權&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安全審計&lt;/td&gt;
&lt;td&gt;Audit 中心&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料完整性&lt;/td&gt;
&lt;td&gt;區塊鏈雜湊鏈&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料保密性&lt;/td&gt;
&lt;td&gt;加密脫敏&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;備份恢復&lt;/td&gt;
&lt;td&gt;資料備份方案&lt;/td&gt;
&lt;td&gt;✅ 完整&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-安全監控"&gt;7. 安全監控&lt;/h2&gt;
&lt;h3 id="71-實時風險監控"&gt;7.1 實時風險監控&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "風險監控"
A1["異地登入"]
A2["暴力破解"]
A3["異常查詢"]
A4["批次匯出"]
A5["許可權濫用"]
end
subgraph "風險判斷"
B["風險引擎"]
end
subgraph "響應動作"
C1["簡訊告警"]
C2["賬號凍結"]
C3["日誌標記"]
C4["需要審批"]
C5["實時告警"]
end
A1 --&gt; B
A2 --&gt; B
A3 --&gt; B
A4 --&gt; B
A5 --&gt; B
B --&gt; C1
B --&gt; C2
B --&gt; C3
B --&gt; C4
B --&gt; C5
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;監控項&lt;/th&gt;
&lt;th&gt;風險閾值&lt;/th&gt;
&lt;th&gt;響應動作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;異地登入&lt;/td&gt;
&lt;td&gt;新城市登入&lt;/td&gt;
&lt;td&gt;簡訊告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;暴力破解&lt;/td&gt;
&lt;td&gt;5分鐘失敗&amp;gt;10次&lt;/td&gt;
&lt;td&gt;賬號凍結&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;異常查詢&lt;/td&gt;
&lt;td&gt;單使用者&amp;gt;100次/分鐘&lt;/td&gt;
&lt;td&gt;日誌標記&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;批次匯出&lt;/td&gt;
&lt;td&gt;&amp;gt;50條/分鐘&lt;/td&gt;
&lt;td&gt;需要審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;許可權濫用&lt;/td&gt;
&lt;td&gt;非工作時間操作核心資料&lt;/td&gt;
&lt;td&gt;實時告警&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-安全配置清單"&gt;8. 安全配置清單&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置項&lt;/th&gt;
&lt;th&gt;建議值&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;密碼最小長度&lt;/td&gt;
&lt;td&gt;12位&lt;/td&gt;
&lt;td&gt;強密碼策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼過期&lt;/td&gt;
&lt;td&gt;90天&lt;/td&gt;
&lt;td&gt;強制定期修改&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;登入失敗鎖定&lt;/td&gt;
&lt;td&gt;5次&lt;/td&gt;
&lt;td&gt;防暴力破解&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MFA&lt;/td&gt;
&lt;td&gt;強制&lt;/td&gt;
&lt;td&gt;管理員必須開啟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTPS&lt;/td&gt;
&lt;td&gt;強制&lt;/td&gt;
&lt;td&gt;全站加密&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;日誌留存&lt;/td&gt;
&lt;td&gt;1年&lt;/td&gt;
&lt;td&gt;合規要求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;會話超時&lt;/td&gt;
&lt;td&gt;30分鐘&lt;/td&gt;
&lt;td&gt;自動登出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API 限流&lt;/td&gt;
&lt;td&gt;100 QPS&lt;/td&gt;
&lt;td&gt;防 DDoS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="安全能力總覽"&gt;安全能力總覽&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "安全縱深防禦"
L1["🔐 身份認證層&lt;br/&gt;MFA + SSO + 密碼策略"]
L2["🛡️ 訪問控制層&lt;br/&gt;RBAC + 資料許可權 + API許可權"]
L3["🔒 資料安全層&lt;br/&gt;脫敏 + 加密 + 防篡改"]
L4["📋 審計追溯層&lt;br/&gt;全鏈路審計 + 區塊鏈存證"]
L5["🚨 安全監控層&lt;br/&gt;實時風險監控 + 自動響應"]
end
L1 --&gt; L2
L2 --&gt; L3
L3 --&gt; L4
L4 --&gt; L5
&lt;/div&gt;</description></item><item><title>CRM 客户关系管理</title><link>https://ruoyiplus.com/zh-tw/ruoyi/crm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/crm/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CRM 是銷售團隊的「作戰指揮系統」&lt;/strong&gt;。從一條線索開始，到轉化為客戶、建立商機、簽訂合同、收到回款——整個銷售漏斗在這裡全程視覺化。配合公海機制，防止客戶資源被個別銷售「私藏」。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：讓你的銷售團隊告別 Excel 管客戶，讓每一筆生意都有跡可循。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;CRM 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;客戶資訊散落在銷售個人微信/Excel 裡&lt;/td&gt;
&lt;td&gt;統一客戶庫，離職交接不丟資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;銷售撞單，多人跟進同一客戶&lt;/td&gt;
&lt;td&gt;客戶鎖定機制 + 公海規則&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不知道銷售每天在幹什麼&lt;/td&gt;
&lt;td&gt;跟進記錄、拜訪記錄全程留痕&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不清楚銷售漏斗哪個環節有問題&lt;/td&gt;
&lt;td&gt;線索→客戶→商機→合同轉化率視覺化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回款管理混亂&lt;/td&gt;
&lt;td&gt;合同 → 回款計劃 → 回款記錄全鏈路&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
SALES["銷售人員&lt;br/&gt;跟進線索和客戶&lt;br/&gt;建立商機和合同&lt;br/&gt;記錄跟進和回款"]
MANAGER["銷售經理&lt;br/&gt;分配線索和客戶&lt;br/&gt;審批合同&lt;br/&gt;檢視團隊資料"]
ADMIN4["管理員&lt;br/&gt;配置公海規則&lt;br/&gt;管理產品目錄&lt;br/&gt;資料統計分析"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="銷售全流程"&gt;銷售全流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart LR
A["🔍 線索&lt;br/&gt;潛在客戶來源"] --&gt;|轉化| B["👤 客戶&lt;br/&gt;正式客戶"]
B --&gt;|建立| C["💼 商機&lt;br/&gt;銷售機會"]
C --&gt;|推進| D["📝 合同&lt;br/&gt;簽約"]
D --&gt;|收款| E["💰 回款&lt;br/&gt;資金到賬"]
A -.-&gt;|無效| X1["❌ 無效線索"]
B -.-&gt;|長期未跟進| X2["🌊 掉入公海"]
X2 -.-&gt;|被其他銷售領取| B
C -.-&gt;|輸單| X3["❌ 關閉商機"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心表結構er-圖"&gt;核心表結構（ER 圖）&lt;/h2&gt;
&lt;div class="mermaid"&gt;erDiagram
CRM_CLUE ||--o| CRM_CUSTOMER : "轉化為"
CRM_CUSTOMER ||--o{ CRM_CONTACT : "擁有"
CRM_CUSTOMER ||--o{ CRM_BUSINESS : "建立"
CRM_BUSINESS ||--o{ CRM_CONTRACT : "推進為"
CRM_CONTRACT ||--o{ CRM_RECEIVABLE : "回款"
CRM_CONTRACT ||--o{ CRM_RECEIVABLE_PLAN : "回款計劃"
CRM_CLUE {
bigint id PK
varchar name "線索名稱"
varchar mobile "手機號"
tinyint status "狀態"
bigint owner_user_id FK "負責人"
}
CRM_CUSTOMER {
bigint id PK
varchar name "客戶名稱"
tinyint level "客戶等級"
bigint owner_user_id FK "負責人"
}
CRM_CONTACT {
bigint id PK
bigint customer_id FK
varchar name "聯絡人姓名"
varchar mobile "手機號"
}
CRM_BUSINESS {
bigint id PK
bigint customer_id FK
varchar name "商機名稱"
decimal total_price "預計金額"
tinyint status "階段"
}
CRM_CONTRACT {
bigint id PK
bigint business_id FK
varchar no "合同編號"
decimal total_price "合同金額"
tinyint status "狀態"
}
CRM_RECEIVABLE {
bigint id PK
bigint contract_id FK
decimal price "回款金額"
datetime time "回款時間"
}
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="公海機制"&gt;公海機制&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart TB
CUSTOMER["客戶"] --&gt;|銷售跟進中| PROTECTED["保護期&lt;br/&gt;其他銷售不可領取"]
PROTECTED --&gt;|超過N天未跟進| SEA["公海池&lt;br/&gt;所有銷售可見"]
PROTECTED --&gt;|成交| DEAL["鎖定&lt;br/&gt;永久歸屬該銷售"]
SEA --&gt;|其他銷售領取| PROTECTED
SEA --&gt;|達到客戶上限| LIMIT["超過個人客戶上限&lt;br/&gt;不可領取"]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;規則&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動釋放&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;超過 N 天未跟進，客戶自動掉入公海&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提前提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;到期前提醒銷售及時跟進&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;鎖定保護&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;成交客戶永久鎖定，不會掉入公海&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客戶上限&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每個銷售有最大客戶數限制，防止囤積&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;定時任務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;後臺定時掃描並執行公海釋放邏輯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="資料許可權"&gt;資料許可權&lt;/h2&gt;
&lt;p&gt;CRM 採用&lt;strong&gt;負責人機制&lt;/strong&gt;實現資料隔離：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每個客戶/線索/商機/合同都有 &lt;code&gt;owner_user_id&lt;/code&gt; 欄位&lt;/li&gt;
&lt;li&gt;銷售只能看到自己的資料&lt;/li&gt;
&lt;li&gt;銷售經理可以看到團隊資料&lt;/li&gt;
&lt;li&gt;管理員可以看到全部資料&lt;/li&gt;
&lt;li&gt;支援&lt;strong&gt;轉移&lt;/strong&gt;操作：將客戶轉移給其他銷售&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="功能清單"&gt;功能清單&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模組&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;線索管理&lt;/td&gt;
&lt;td&gt;線索錄入、分配、轉化、無效標記&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客戶管理&lt;/td&gt;
&lt;td&gt;客戶資訊、聯絡人、跟進記錄、鎖定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;公海客戶&lt;/td&gt;
&lt;td&gt;公海池、領取、釋放規則&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商機管理&lt;/td&gt;
&lt;td&gt;商機階段、預計金額、輸贏單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合同管理&lt;/td&gt;
&lt;td&gt;合同建立、審批、變更&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回款管理&lt;/td&gt;
&lt;td&gt;回款計劃、回款記錄、應收統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;產品管理&lt;/td&gt;
&lt;td&gt;產品目錄、價格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料統計&lt;/td&gt;
&lt;td&gt;漏斗分析、業績統計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IAM 身份权限中心</title><link>https://ruoyiplus.com/zh-tw/plus/iam-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/iam-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;構建企業統一身份認證與精細化許可權管控體系，實現「一個賬號，一次認證，全網通行」&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：IAM 是所有業務系統的「身份和許可權中樞」，統一管理使用者的認證、授權、資料許可權，讓每個子系統不再各自為戰。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;傳統做法&lt;/th&gt;
&lt;th&gt;RuoYiPlus IAM 方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;多系統重複登入&lt;/td&gt;
&lt;td&gt;每個系統獨立登入&lt;/td&gt;
&lt;td&gt;SSO 單點登入，一次認證全網通行&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;許可權分散難管理&lt;/td&gt;
&lt;td&gt;各系統自建許可權&lt;/td&gt;
&lt;td&gt;統一 RBAC + 資料許可權引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安全風險不可控&lt;/td&gt;
&lt;td&gt;密碼策略不統一&lt;/td&gt;
&lt;td&gt;MFA 多因素 + 密碼策略 + 異地登入檢測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合規審計不完整&lt;/td&gt;
&lt;td&gt;日誌分散&lt;/td&gt;
&lt;td&gt;統一審計事件採集，對接 Audit 中心&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;有多個業務系統需要統一身份管理的中大型企業&lt;/li&gt;
&lt;li&gt;需要透過等保三級認證的機構&lt;/li&gt;
&lt;li&gt;需要對接第三方系統（OAuth/OIDC/SAML）的平臺&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IAM 使用者角色"
ADMIN["系統管理員&lt;br/&gt;配置認證策略、管理使用者"]
SECURITY["安全管理員&lt;br/&gt;配置 MFA、密碼策略"]
DEV["應用開發者&lt;br/&gt;對接 SSO、整合 OAuth"]
USER["普通使用者&lt;br/&gt;登入認證、訪問應用"]
end
ADMIN --&gt;|管理| USER_POOL["使用者池"]
SECURITY --&gt;|配置| AUTH_POLICY["認證策略"]
DEV --&gt;|整合| SSO_PROTOCOL["SSO 協議"]
USER --&gt;|使用| LOGIN["統一登入"]
&lt;/div&gt;
&lt;h2 id="核心能力"&gt;核心能力&lt;/h2&gt;
&lt;h3 id="sso-單點登入流程"&gt;SSO 單點登入流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as 使用者
participant App1 as 應用A
participant IAM as IAM 認證中心
participant App2 as 應用B
User-&gt;&gt;App1: 訪問應用A
App1-&gt;&gt;IAM: 未認證，302 跳轉
User-&gt;&gt;IAM: 輸入使用者名稱密碼
IAM-&gt;&gt;IAM: 驗證 + MFA
IAM-&gt;&gt;App1: 簽發 JWT Token
User-&gt;&gt;App2: 訪問應用B
App2-&gt;&gt;IAM: 驗證 Token
IAM-&gt;&gt;App2: Token 有效
App2-&gt;&gt;User: 直接訪問，無需再次登入
&lt;/div&gt;
&lt;h3 id="支援協議"&gt;支援協議&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;協議&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OAuth 2.0&lt;/td&gt;
&lt;td&gt;授權框架&lt;/td&gt;
&lt;td&gt;第三方應用授權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OIDC&lt;/td&gt;
&lt;td&gt;基於 OAuth 2.0 的身份層&lt;/td&gt;
&lt;td&gt;現代應用 SSO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAML 2.0&lt;/td&gt;
&lt;td&gt;企業級聯合身份&lt;/td&gt;
&lt;td&gt;傳統企業應用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDAP&lt;/td&gt;
&lt;td&gt;輕量目錄訪問&lt;/td&gt;
&lt;td&gt;企業目錄整合&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="多因素認證-mfa"&gt;多因素認證 (MFA)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;認證方式&lt;/th&gt;
&lt;th&gt;安全等級&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 簡訊 OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;動態簡訊驗證碼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 郵件 OTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;郵件驗證碼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + TOTP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;時間同步動態口令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密碼 + 硬體 Key&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;FIDO2/U2F 最高安全&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="許可權模型"&gt;許可權模型&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A["使用者"] --&gt; B["角色"]
B --&gt; C["選單許可權"]
B --&gt; D["操作許可權"]
B --&gt; E["資料許可權"]
A --&gt; F["崗位"]
F --&gt; G["角色繼承"]
F --&gt; H["資料範圍"]
subgraph "資料許可權層級"
E1["使用者級 (最高)"]
E2["角色級"]
E3["崗位級"]
E4["部門級 (最低)"]
end
E --&gt; E1
E --&gt; E2
E --&gt; E3
E --&gt; E4
&lt;/div&gt;
&lt;h2 id="技術架構"&gt;技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IAM 模組"
AUTH["認證服務&lt;br/&gt;登入/MFA/SSO"]
USER_MGR["使用者管理&lt;br/&gt;使用者/部門/崗位"]
ROLE_MGR["角色管理&lt;br/&gt;角色/許可權/選單"]
PERM_ENGINE["許可權引擎&lt;br/&gt;資料許可權/欄位許可權"]
AUDIT_CLIENT["審計客戶端&lt;br/&gt;事件上報"]
end
subgraph "外部依賴"
REDIS["Redis&lt;br/&gt;Session/Token 儲存"]
DB["MySQL&lt;br/&gt;使用者/許可權資料"]
SMS["簡訊服務&lt;br/&gt;OTP 驗證碼"]
MAIL["郵件服務&lt;br/&gt;OTP 驗證碼"]
end
AUTH --&gt; REDIS
USER_MGR --&gt; DB
ROLE_MGR --&gt; DB
PERM_ENGINE --&gt; DB
AUTH --&gt; SMS
AUTH --&gt; MAIL
&lt;/div&gt;
&lt;h2 id="商業價值"&gt;商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一次認證&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SSO 單點登入，減少重複登入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全增強&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MFA 多因素 + 密碼策略 + 異地檢測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權統一&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RBAC + 資料許可權引擎，精細管控&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規達標&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;對接 Audit 中心，滿足等保要求&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Audit 审计合规中心</title><link>https://ruoyiplus.com/zh-tw/plus/audit-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/audit-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，5 DOs / 5 Controllers，選單 ID 起始 10500，構建企業統一審計合規中心&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="模組規模"&gt;模組規模&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心資料表"&gt;核心資料表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審計事件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_block&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審計區塊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_rule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審計規則&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審計統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;audit_auditor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審計員&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：Audit 是平臺的「黑匣子」，記錄所有關鍵操作的完整鏈路，並用區塊鏈技術保證資料不可篡改，滿足等保三級和金融級審計要求。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;傳統做法&lt;/th&gt;
&lt;th&gt;RuoYiPlus Audit 方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;操作無跡可尋&lt;/td&gt;
&lt;td&gt;日誌分散在各服務&lt;/td&gt;
&lt;td&gt;統一審計事件採集中心&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料可能被篡改&lt;/td&gt;
&lt;td&gt;普通資料庫日誌&lt;/td&gt;
&lt;td&gt;區塊鏈雜湊鏈存證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;審計效率低&lt;/td&gt;
&lt;td&gt;人工查日誌&lt;/td&gt;
&lt;td&gt;變更對比 + 風險評分 + 自動報告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合規不達標&lt;/td&gt;
&lt;td&gt;日誌不完整&lt;/td&gt;
&lt;td&gt;覆蓋等保三級全部審計要求&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;需要透過等保三級認證的企業&lt;/li&gt;
&lt;li&gt;金融、醫療等強監管行業&lt;/li&gt;
&lt;li&gt;需要審計追蹤的內部管理系統&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Audit 使用者角色"
AUDITOR["審計員&lt;br/&gt;審查操作日誌、生成報告"]
SECURITY["安全管理員&lt;br/&gt;配置審計規則、風險策略"]
ADMIN["系統管理員&lt;br/&gt;管理審計儲存、歸檔策略"]
DEV["開發人員&lt;br/&gt;接入審計 SDK"]
end
AUDITOR --&gt;|審查| LOG["操作日誌"]
AUDITOR --&gt;|生成| REPORT["合規報告"]
SECURITY --&gt;|配置| RULE["審計規則"]
SECURITY --&gt;|監控| ALERT["風險告警"]
ADMIN --&gt;|管理| STORAGE["儲存策略"]
DEV --&gt;|接入| SDK["審計 SDK"]
&lt;/div&gt;
&lt;h2 id="核心協作流程"&gt;核心協作流程&lt;/h2&gt;
&lt;h3 id="審計事件全鏈路"&gt;審計事件全鏈路&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant BIZ as 業務系統
participant AUDIT as Audit 中心
participant BC as 區塊鏈服務
participant REPORT as 報告引擎
BIZ-&gt;&gt;AUDIT: 上報操作事件
AUDIT-&gt;&gt;AUDIT: 事件解析 + 標準化
AUDIT-&gt;&gt;AUDIT: 變更對比 (修改前後)
AUDIT-&gt;&gt;AUDIT: 風險評分
AUDIT-&gt;&gt;BC: 生成區塊雜湊
BC-&gt;&gt;BC: 連結前一區塊
AUDIT-&gt;&gt;AUDIT: 分層儲存 (熱/冷)
REPORT-&gt;&gt;AUDIT: 定時生成合規報告
&lt;/div&gt;
&lt;h3 id="審計事件型別"&gt;審計事件型別&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審計事件採集"
A1["登入審計&lt;br/&gt;登入/登出/失敗"]
A2["操作審計&lt;br/&gt;增/刪/改/查"]
A3["許可權審計&lt;br/&gt;角色/許可權變更"]
A4["匯出審計&lt;br/&gt;資料匯出/報表下載"]
A5["敏感審計&lt;br/&gt;關鍵資料訪問"]
A6["API 審計&lt;br/&gt;呼叫統計"]
end
subgraph "審計處理"
B1["事件解析"]
B2["變更對比"]
B3["風險評分"]
end
A1 &amp; A2 &amp; A3 &amp; A4 &amp; A5 &amp; A6 --&gt; B1
B1 --&gt; B2 --&gt; B3
&lt;/div&gt;
&lt;h3 id="區塊鏈雜湊鏈"&gt;區塊鏈雜湊鏈&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "Genesis Block"
G1["blockHash = SHA256(data)"]
end
subgraph "Block N"
BN1["blockHash = SHA256(data + prevHash)"]
BN2["previousHash = Block N-1 hash"]
end
subgraph "Block N+1"
BN3["blockHash = SHA256(data + prevHash)"]
BN4["previousHash = Block N hash"]
end
G1 --&gt; BN2
BN1 --&gt; BN4
&lt;/div&gt;
&lt;h3 id="審計事件內容"&gt;審計事件內容&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;eventId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;evt_20240101_001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-01 10:30:00.123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user_10001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;張三&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;userIp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;192.168.1.100&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;actionType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;UPDATE&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;resourceType&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;customer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;resourceId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cust_20001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;changes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;old&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;舊名稱&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;new&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;新名稱&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;phone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;old&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;13800001111&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;new&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;138****2222&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;riskLevel&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;duration&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="審計範圍"&gt;審計範圍&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計型別&lt;/th&gt;
&lt;th&gt;審計內容&lt;/th&gt;
&lt;th&gt;記錄粒度&lt;/th&gt;
&lt;th&gt;保留期限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;登入審計&lt;/td&gt;
&lt;td&gt;登入/登出/失敗&lt;/td&gt;
&lt;td&gt;每次&lt;/td&gt;
&lt;td&gt;1年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;操作審計&lt;/td&gt;
&lt;td&gt;新增/修改/刪除/查詢&lt;/td&gt;
&lt;td&gt;每次&lt;/td&gt;
&lt;td&gt;3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;許可權審計&lt;/td&gt;
&lt;td&gt;角色變更/許可權調整&lt;/td&gt;
&lt;td&gt;每次&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;匯出審計&lt;/td&gt;
&lt;td&gt;資料匯出/報表下載&lt;/td&gt;
&lt;td&gt;每次&lt;/td&gt;
&lt;td&gt;3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;敏感審計&lt;/td&gt;
&lt;td&gt;關鍵資料訪問&lt;/td&gt;
&lt;td&gt;每次&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API 審計&lt;/td&gt;
&lt;td&gt;API 呼叫統計&lt;/td&gt;
&lt;td&gt;聚合&lt;/td&gt;
&lt;td&gt;1年&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="敏感操作告警"&gt;敏感操作告警&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;audit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;資料匯出&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;window&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;10m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;批次刪除&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;require_approval&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;許可權變更&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;after_role = admin&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;notify_security&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="商業價值"&gt;商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規達標&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;滿足等保三級、金融審計要求&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;防篡改&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區塊鏈雜湊鏈，資料不可抵賴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路審計，操作可回放&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動報告&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定時生成合規報告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;風險預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時風險評分 + 異常告警&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Member 会员中心</title><link>https://ruoyiplus.com/zh-tw/ruoyi/member/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/member/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Member 模組提供獨立的會員使用者體系&lt;/strong&gt;，與後臺管理員使用者（system_users）完全隔離。它是商城系統的使用者基礎，負責會員註冊、登入、等級成長、積分運營等 C 端使用者全生命週期管理。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;關鍵區分&lt;/strong&gt;：管理員登入後臺用的是 &lt;code&gt;system_users&lt;/code&gt;（系統使用者），C 端使用者註冊登入用的是 &lt;code&gt;member_user&lt;/code&gt;（會員使用者），兩套體系完全獨立。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;Member 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C 端使用者需要獨立的註冊登入&lt;/td&gt;
&lt;td&gt;獨立的會員使用者表，不與管理後臺使用者混淆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要會員等級和權益體系&lt;/td&gt;
&lt;td&gt;VIP 等級 + 成長值機制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要提升使用者活躍和留存&lt;/td&gt;
&lt;td&gt;積分簽到、積分商城&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;微信生態使用者需要一鍵登入&lt;/td&gt;
&lt;td&gt;公眾號登入、小程式登入、小程式訂閱訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 後臺角色
ADMIN3["運營人員&lt;br/&gt;管理會員資訊&lt;br/&gt;配置 VIP 等級&lt;br/&gt;管理積分規則&lt;br/&gt;設定會員標籤和分組"]
end
subgraph C端角色
MEMBER2["普通會員&lt;br/&gt;註冊/登入/個人資訊"]
VIP["VIP 會員&lt;br/&gt;享受等級權益&lt;br/&gt;積分獲取和使用"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="會員體系架構"&gt;會員體系架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 賬號體系
LOGIN["登入方式&lt;br/&gt;手機號/郵箱/微信"]
REGISTER["註冊&lt;br/&gt;手機號/微信授權"]
end
subgraph 等級體系
LEVEL["VIP 等級&lt;br/&gt;普通 → 銀卡 → 金卡 → 鑽石"]
GROWTH["成長值&lt;br/&gt;消費/簽到/任務獲取"]
LEVEL --&gt; GROWTH
end
subgraph 積分體系
POINTS_GET["積分獲取&lt;br/&gt;簽到/消費/活動"]
POINTS_USE["積分使用&lt;br/&gt;抵扣/兌換"]
POINTS_GET --&gt; POINTS_USE
end
subgraph 運營體系
TAG["會員標籤&lt;br/&gt;畫像標記"]
GROUP["會員分組&lt;br/&gt;精準運營"]
end
LOGIN --&gt; 會員使用者表
REGISTER --&gt; 會員使用者表
會員使用者表 --&gt; 等級體系
會員使用者表 --&gt; 積分體系
會員使用者表 --&gt; 運營體系
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="微信生態整合"&gt;微信生態整合&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
MEMBER3["會員模組"]
subgraph 微信能力
MP_LOGIN["公眾號登入&lt;br/&gt;微信內 H5 授權"]
MINI_LOGIN["小程式登入&lt;br/&gt;一鍵獲取手機號"]
MINI_QR["小程式二維碼&lt;br/&gt;帶引數二維碼"]
MINI_MSG["小程式訂閱訊息&lt;br/&gt;訂單/物流/活動通知"]
end
MEMBER3 --&gt; MP_LOGIN
MEMBER3 --&gt; MINI_LOGIN
MEMBER3 --&gt; MINI_QR
MEMBER3 --&gt; MINI_MSG
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="與商城的關係"&gt;與商城的關係&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
MEMBER4["Member 會員中心&lt;br/&gt;提供：會員資訊/等級/積分"] --&gt; MALL2["Mall 商城&lt;br/&gt;消費：使用會員身份下單&lt;br/&gt;獲取：下單獲得積分和成長值"]
MALL2 --&gt; MEMBER4
&lt;/div&gt;
&lt;p&gt;商城依賴會員模組提供使用者身份，同時商城的消費行為會反哺會員的積分和成長值。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心功能清單"&gt;核心功能清單&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;會員管理&lt;/td&gt;
&lt;td&gt;會員列表、詳情、狀態管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;會員標籤&lt;/td&gt;
&lt;td&gt;自定義標籤，使用者畫像標記&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;會員等級&lt;/td&gt;
&lt;td&gt;VIP 等級配置、成長值規則、升降級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;會員分組&lt;/td&gt;
&lt;td&gt;按條件分組，支援精準推送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;積分簽到&lt;/td&gt;
&lt;td&gt;簽到規則配置、連續簽到獎勵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;積分記錄&lt;/td&gt;
&lt;td&gt;積分明細、流水追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>MP 微信公众号</title><link>https://ruoyiplus.com/zh-tw/ruoyi/mp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/mp/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;MP 模組是微信公眾號的「多賬號管理中心」&lt;/strong&gt;。如果你運營著多個公眾號，不需要登入微信公眾平臺一個個切換——在這裡可以集中管理所有公眾號的粉絲、訊息、選單、素材和自動回覆。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：一個後臺管理所有公眾號，運營效率翻倍。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;MP 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;多個公眾號切換管理繁瑣&lt;/td&gt;
&lt;td&gt;一個後臺管理多個公眾號&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;粉絲資訊分散&lt;/td&gt;
&lt;td&gt;統一粉絲列表、標籤管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自動回覆規則配置複雜&lt;/td&gt;
&lt;td&gt;視覺化配置關注回覆、訊息回覆、關鍵字回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;選單配置體驗差&lt;/td&gt;
&lt;td&gt;視覺化選單編輯器，實時預覽&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;無法與業務系統聯動&lt;/td&gt;
&lt;td&gt;粉絲資料與會員模組打通&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
OP["公眾號運營&lt;br/&gt;管理粉絲和訊息&lt;br/&gt;配置自動回覆&lt;br/&gt;編輯選單&lt;br/&gt;管理素材&lt;br/&gt;檢視資料統計"]
FAN["粉絲&lt;br/&gt;關注公眾號&lt;br/&gt;傳送訊息&lt;br/&gt;觸發自動回覆"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="功能架構"&gt;功能架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 核心功能["10 大功能模組"]
ACCOUNT["賬號管理&lt;br/&gt;繫結多個公眾號"]
STATS["資料統計&lt;br/&gt;粉絲增長/訊息統計"]
FANS["粉絲管理&lt;br/&gt;粉絲列表/標籤/同步"]
MSG["訊息管理&lt;br/&gt;接收/回覆訊息"]
AUTO["自動回覆&lt;br/&gt;關注/訊息/關鍵字"]
TEMPLATE["模板訊息&lt;br/&gt;業務通知推送"]
TAG2["標籤管理&lt;br/&gt;粉絲分組"]
MENU["選單管理&lt;br/&gt;視覺化配置"]
MATERIAL["素材管理&lt;br/&gt;圖文/圖片/音訊"]
DRAFT["圖文草稿箱"]
end
subgraph 微信API["微信公眾號 API"]
WX_API["訊息接收/傳送&lt;br/&gt;選單推送&lt;br/&gt;素材上傳&lt;br/&gt;使用者資訊獲取"]
end
核心功能 --&gt; 微信API
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="自動回覆規則"&gt;自動回覆規則&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart LR
EVENT["使用者行為"] --&gt; TYPE{回覆型別}
TYPE --&gt;|關注公眾號| FOLLOW["關注回覆&lt;br/&gt;歡迎語 + 引導"]
TYPE --&gt;|傳送訊息| KEYWORD{匹配關鍵字?}
KEYWORD --&gt;|完全匹配| EXACT["關鍵字回覆"]
KEYWORD --&gt;|模糊匹配| LIKE["模糊匹配回覆"]
KEYWORD --&gt;|無匹配| DEFAULT["預設訊息回覆"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="與業務系統的聯動"&gt;與業務系統的聯動&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
MP2["MP 公眾號"] --&gt;|粉絲同步| MEMBER5["Member 會員&lt;br/&gt;公眾號粉絲 → 會員使用者"]
MP2 --&gt;|模板訊息| MALL3["Mall 商城&lt;br/&gt;訂單狀態推送"]
MEMBER5 --&gt;|微信登入| MP2
&lt;/div&gt;
&lt;p&gt;公眾號粉絲可以同步為會員使用者，商城可以透過模板訊息向使用者推送訂單狀態，形成完整的微信生態閉環。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心功能清單"&gt;核心功能清單&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;賬號管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;繫結多個公眾號，切換管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;粉絲增長趨勢、訊息互動統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;粉絲管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;粉絲列表、詳情、標籤、黑名單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;接收粉絲訊息、人工回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動回覆&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;關注回覆、預設回覆、關鍵字回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;向粉絲推送模板訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;標籤管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;粉絲分組標籤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;視覺化底部選單配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;素材管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖文、圖片、語音、影片素材庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;圖文草稿箱&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖文訊息草稿編輯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Report 报表平台</title><link>https://ruoyiplus.com/zh-tw/plus/report-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/report-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，1 DO / 2 Controllers，選單 ID 起始 15000，整合 GoView 資料視覺化平臺&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Report 基於 GoView 開源專案，圍繞&lt;strong&gt;資料視覺化&lt;/strong&gt;、&lt;strong&gt;大屏設計&lt;/strong&gt;、&lt;strong&gt;報表管理&lt;/strong&gt;三大核心進行企業級增強，構建企業級資料視覺化與報表平臺。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;report_go_view_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GoView 專案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Report 增強架構"
subgraph "資料接入"
A1[資料庫接入]
A2[API 接入]
A3[Excel 匯入]
end
subgraph "視覺化設計"
B1[大屏設計器]
B2[圖表元件]
B3[佈局管理]
end
subgraph "展示釋出"
C1[大屏展示]
C2[報表匯出]
C3[定時重新整理]
end
subgraph "管控層"
D1[許可權控制]
D2[資料許可權]
D3[訪問審計]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C1 --&gt; D1
B1 --&gt; D2
C1 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統報表&lt;/th&gt;
&lt;th&gt;RuoYiPlus Report 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料來源&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單一資料庫&lt;/td&gt;
&lt;td&gt;多資料來源+API接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;視覺化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;固定圖表&lt;/td&gt;
&lt;td&gt;拖拽式大屏設計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;釋出方式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;靜態報表&lt;/td&gt;
&lt;td&gt;實時大屏+定時重新整理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;大屏級+資料級許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;匯出能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單匯出&lt;/td&gt;
&lt;td&gt;多格式匯出+定時推送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;訪問審計+操作日誌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-資料接入"&gt;2. 資料接入&lt;/h2&gt;
&lt;h3 id="21-資料來源管理"&gt;2.1 資料來源管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資料來源"
A[MySQL] --&gt; E[資料接入層]
B[PostgreSQL] --&gt; E
C[API 介面] --&gt; E
D[靜態資料] --&gt; E
E --&gt; F[資料集管理]
F --&gt; G[大屏設計]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;資料來源型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;關聯式資料庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MySQL/PostgreSQL 直連&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API 介面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RESTful API 資料接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;靜態資料&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSON/CSV 靜態資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;實時資料&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WebSocket 實時推送&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-視覺化設計"&gt;3. 視覺化設計&lt;/h2&gt;
&lt;h3 id="31-大屏設計器"&gt;3.1 大屏設計器&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;拖拽設計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;視覺化拖拽佈局&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;圖表元件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;豐富的圖表元件庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;主題配置&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多套主題+自定義&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;響應式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多解析度自適應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;元件聯動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖表間資料聯動&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-圖表型別"&gt;3.2 圖表型別&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;圖表型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;折線圖&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;趨勢分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;柱狀圖&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;對比分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;餅圖&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;佔比分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;地圖&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;地理分佈&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;儀表盤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指標監控&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;表格&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;明細資料&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-展示與釋出"&gt;4. 展示與釋出&lt;/h2&gt;
&lt;h3 id="41-釋出管理"&gt;4.1 釋出管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[大屏設計] --&gt; B[預覽測試]
B --&gt; C[釋出上線]
C --&gt; D[許可權分配]
D --&gt; E[大屏展示]
E --&gt; F[訪問統計]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;大屏預覽&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;設計時實時預覽&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;釋出管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;版本釋出+回滾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大屏訪問許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;定時重新整理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料定時重新整理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;匯出功能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖片/PDF匯出&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-report-plus"
subgraph "report-biz"
A1[datasource 資料來源管理]
A2[dataset 資料集管理]
A3[design 大屏設計]
A4[publish 釋出管理]
A5[export 匯出管理]
A6[goview GoView整合]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
end
end
A1 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A6 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料視覺化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;拖拽式大屏設計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;決策支援&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時資料監控&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;快速構建&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;豐富元件+模板&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;靈活接入&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多資料來源支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大屏許可權+訪問審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開放整合&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GoView 開源生態&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>AI 智能应用</title><link>https://ruoyiplus.com/zh-tw/plus/ai-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/ai-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，14 DOs / 14 Controllers，選單 ID 起始 9000，構建企業級 AI 智慧應用平臺&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus AI 圍繞&lt;strong&gt;智慧對話&lt;/strong&gt;、&lt;strong&gt;知識庫管理&lt;/strong&gt;、&lt;strong&gt;AI 創作&lt;/strong&gt;三大核心進行企業級增強，打造企業級 AI 應用平臺。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-ai&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_chat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;智慧對話&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;圖片生成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_knowledge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;知識庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_music&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;音樂生成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;工作流&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_writing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI 寫作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;模型管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ai_api_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API 金鑰管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus AI 增強架構"
subgraph "對話互動"
A1[智慧對話]
A2[多輪對話]
A3[角色扮演]
end
subgraph "內容創作"
B1[AI 寫作]
B2[圖片生成]
B3[音樂生成]
end
subgraph "知識管理"
C1[知識庫]
C2[文件解析]
C3[語義檢索]
end
subgraph "平臺管理"
D1[模型管理]
D2[API 管理]
D3[工作流]
end
subgraph "管控層"
E1[許可權控制]
E2[內容稽核]
E3[用量統計]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C2
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
A1 --&gt; E1
B1 --&gt; E2
C1 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統方案&lt;/th&gt;
&lt;th&gt;RuoYiPlus AI 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧對話&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多輪對話+角色扮演&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內容創作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;寫作+圖片+音樂&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;知識庫+語義檢索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模型管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多模型統一管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工作流&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;AI 工作流編排&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;API 金鑰+用量管控&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內容稽核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;AI 內容安全稽核&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-智慧對話"&gt;2. 智慧對話&lt;/h2&gt;
&lt;h3 id="21-對話架構"&gt;2.1 對話架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "智慧對話"
A[使用者輸入] --&gt; B[意圖識別]
B --&gt; C[知識檢索]
C --&gt; D[模型推理]
D --&gt; E[回覆生成]
E --&gt; F[對話記錄]
B --&gt; B1[問題分類]
B --&gt; B2[實體識別]
C --&gt; C1[知識庫檢索]
C --&gt; C2[文件檢索]
D --&gt; D1[LLM 呼叫]
D --&gt; D2[上下文管理]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧對話&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多輪對話+上下文理解&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;角色扮演&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自定義角色+提示詞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識問答&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於知識庫的問答&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多模態&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文字+圖片+語音&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-ai-內容創作"&gt;3. AI 內容創作&lt;/h2&gt;
&lt;h3 id="31-創作能力"&gt;3.1 創作能力&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;創作型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI 寫作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文章生成+潤色+續寫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;圖片生成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文生圖+圖生圖&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;音樂生成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI 音樂創作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;影片生成&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文生影片+圖生影片&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-知識庫管理"&gt;4. 知識庫管理&lt;/h2&gt;
&lt;h3 id="41-知識庫架構"&gt;4.1 知識庫架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "知識庫管理"
A[文件上傳] --&gt; B[文件解析]
B --&gt; C[向量化]
C --&gt; D[知識儲存]
D --&gt; E[語義檢索]
E --&gt; F[知識問答]
A --&gt; A1[PDF]
A --&gt; A2[Word]
A --&gt; A3[網頁]
B --&gt; B1[文字提取]
B --&gt; B2[分段處理]
C --&gt; C1[Embedding]
C --&gt; C2[向量索引]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文件管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;上傳+解析+管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;向量檢索&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;語義檢索+相似度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識問答&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於知識庫問答&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識更新&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;增量更新+版本管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-ai-plus"
subgraph "ai-biz"
A1[chat 智慧對話]
A2[image 圖片生成]
A3[knowledge 知識庫]
A4[music 音樂生成]
A5[workflow 工作流]
A6[writing AI寫作]
A7[model 模型管理]
A8[api_key API金鑰]
A9[analytics 用量統計]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[content 內容稽核]
end
end
A1 --&gt; B1
A2 --&gt; B3
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A7 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效率提升&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI 輔助寫作+對話&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;企業知識庫+智慧檢索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;創意創作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖片+音樂+影片生成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多模型管理+用量控制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;內容稽核+操作審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開放整合&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API 管理+工作流編排&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Mall 商城系统</title><link>https://ruoyiplus.com/zh-tw/ruoyi/mall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/mall/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Mall 商城是平臺最複雜的業務模組（70+ 張表）&lt;/strong&gt;，提供從商品管理、訂單交易到營銷活動、分銷佣金的全鏈路電商能力。一套系統同時擁有管理後臺（Vue3+Element Plus）和移動端（uni-app），開箱即用。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：如果你需要做一個 B2C 商城，這裡已經實現了 90% 的功能。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;Mall 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;從零開發商城週期長&lt;/td&gt;
&lt;td&gt;70+ 張表 + 完整前後端，幾週上線&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多種營銷玩法開發成本高&lt;/td&gt;
&lt;td&gt;內建優惠券/秒殺/拼團/砍價/分銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要管理端+使用者端兩套前端&lt;/td&gt;
&lt;td&gt;管理後臺 + uni-app 移動端一起提供&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支付和會員需要額外對接&lt;/td&gt;
&lt;td&gt;內建對接支付中心和會員中心&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 後臺角色
MALL_ADMIN["商城管理員&lt;br/&gt;管理商品/訂單/營銷"]
MALL_OP["運營人員&lt;br/&gt;配置活動/稽核評價"]
end
subgraph C端角色
BUYER["買家&lt;br/&gt;瀏覽商品/下單/支付&lt;br/&gt;參與營銷活動"]
DISTRIBUTOR["分銷員&lt;br/&gt;推廣商品&lt;br/&gt;獲取佣金"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="系統架構"&gt;系統架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 管理後臺
ADMIN_PANEL["Vue3 + Element Plus 管理後臺&lt;br/&gt;商品/訂單/營銷/資料"]
end
subgraph 移動端
UNI_APP["uni-app 移動端&lt;br/&gt;H5 + APP + 小程式&lt;br/&gt;店鋪裝修（3套模板）"]
end
subgraph 商品中心
CATEGORY["商品分類"]
ATTR["商品屬性"]
SPU["SPU 商品"]
SKU["SKU 規格"]
REVIEW["商品評價"]
end
subgraph 訂單中心
CART["購物車"]
ORDER["交易訂單"]
AFTER_SALE["售後管理"]
EXPRESS["快遞發貨"]
PICKUP["自提核銷"]
end
subgraph 營銷中心
COUPON["優惠券"]
SECKILL["秒殺活動"]
BARGAIN["砍價活動"]
GROUPON["拼團活動"]
DISCOUNT["限時折扣"]
CONTENT["內容營銷"]
COMMISSION["分銷佣金"]
end
subgraph 依賴模組
PAY2["支付中心"]
MEMBER6["會員中心"]
MP3["公眾號"]
end
管理後臺 --&gt; 商品中心
管理後臺 --&gt; 訂單中心
管理後臺 --&gt; 營銷中心
移動端 --&gt; 商品中心
移動端 --&gt; 訂單中心
移動端 --&gt; 營銷中心
訂單中心 --&gt; PAY2
訂單中心 --&gt; MEMBER6
營銷中心 --&gt; MEMBER6
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心業務流程"&gt;核心業務流程&lt;/h2&gt;
&lt;h3 id="使用者下單流程"&gt;使用者下單流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant U2 as 使用者
participant APP as 移動端/PC
participant MALL4 as 商城
participant PAY3 as 支付中心
participant WMS2 as 倉庫/WMS
U2-&gt;&gt;APP: 瀏覽商品，加入購物車
U2-&gt;&gt;APP: 確認訂單，選擇地址
APP-&gt;&gt;MALL4: 建立訂單（待支付）
MALL4-&gt;&gt;PAY3: 發起支付
PAY3--&gt;&gt;APP: 支付頁面
U2-&gt;&gt;PAY3: 完成支付
PAY3-&gt;&gt;MALL4: 回撥：支付成功
MALL4-&gt;&gt;MALL4: 訂單狀態 → 待發貨
MALL4-&gt;&gt;WMS2: 通知發貨
WMS2-&gt;&gt;MALL4: 錄入快遞單號
MALL4-&gt;&gt;APP: 推送發貨通知
U2-&gt;&gt;APP: 確認收貨
MALL4-&gt;&gt;MALL4: 訂單完成，發放積分
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="營銷活動矩陣"&gt;營銷活動矩陣&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;活動型別&lt;/th&gt;
&lt;th&gt;玩法&lt;/th&gt;
&lt;th&gt;適合場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;優惠券&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;滿減/折扣/代金券，可指定商品/分類&lt;/td&gt;
&lt;td&gt;日常促銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;秒殺&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;限時限量，超低價搶購&lt;/td&gt;
&lt;td&gt;引流、清庫存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;拼團&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多人拼團享優惠價&lt;/td&gt;
&lt;td&gt;社交裂變&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;砍價&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分享好友幫忙砍價&lt;/td&gt;
&lt;td&gt;拉新獲客&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;限時折扣&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指定時間段打折&lt;/td&gt;
&lt;td&gt;節日促銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內容營銷&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖文/影片種草&lt;/td&gt;
&lt;td&gt;內容電商&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;分銷佣金&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;推廣分傭，多級分銷&lt;/td&gt;
&lt;td&gt;社交電商&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="店鋪裝修"&gt;店鋪裝修&lt;/h2&gt;
&lt;p&gt;移動端支援 3 套店鋪裝修模板，可透過拖拽元件自定義首頁佈局：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;輪播圖 / 導航圖示 / 商品推薦&lt;/li&gt;
&lt;li&gt;優惠券彈窗 / 倒計時&lt;/li&gt;
&lt;li&gt;搜尋欄 / 公告欄&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="依賴關係"&gt;依賴關係&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mall 商城
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── 支付中心（Pay） —— 訂單支付
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── 會員中心（Member） —— 使用者身份/積分
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── 公眾號（MP） —— 微信內 H5 商城
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>ERP 企业资源计划</title><link>https://ruoyiplus.com/zh-tw/ruoyi/erp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/erp/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ERP 是企業的「進銷存中樞」&lt;/strong&gt;——管理從供應商採購、倉庫庫存到客戶銷售的完整實物和資金流動。30+ 張表覆蓋採購、銷售、庫存、產品、財務五大核心，適合商貿企業和製造企業的日常運營管理。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：管好你的貨和錢，讓每一筆進出都有據可查。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;ERP 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;庫存數量靠人工盤點，經常對不上&lt;/td&gt;
&lt;td&gt;每筆出入庫自動更新庫存，實時準確&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;採購和銷售流程不透明&lt;/td&gt;
&lt;td&gt;單據審批流 + 狀態追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不清楚賺了多少錢&lt;/td&gt;
&lt;td&gt;採購成本 vs 銷售收入，自動核算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;多倉庫調撥混亂&lt;/td&gt;
&lt;td&gt;移庫操作有記錄，庫存位置清晰&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;財務收款付款難管理&lt;/td&gt;
&lt;td&gt;結算賬戶 + 收付款記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
PURCHASER["採購員&lt;br/&gt;管理供應商&lt;br/&gt;建立採購訂單&lt;br/&gt;處理採購入庫和退貨"]
SALES2["銷售員&lt;br/&gt;管理客戶&lt;br/&gt;建立銷售訂單&lt;br/&gt;處理銷售出庫和退貨"]
WAREHOUSE["倉管員&lt;br/&gt;確認入庫/出庫&lt;br/&gt;管理庫存&lt;br/&gt;執行盤點"]
FINANCE["財務&lt;br/&gt;管理結算賬戶&lt;br/&gt;處理收付款&lt;br/&gt;稽核單據"]
MANAGER2["管理者&lt;br/&gt;審批單據&lt;br/&gt;檢視報表"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="五大核心模組"&gt;五大核心模組&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 採購管理["採購管理"]
P1["供應商管理"]
P2["採購訂單"]
P3["採購入庫"]
P4["採購退貨"]
end
subgraph 銷售管理["銷售管理"]
S1["客戶管理"]
S2["銷售訂單"]
S3["銷售出庫"]
S4["銷售退貨"]
end
subgraph 庫存管理["庫存管理"]
I1["庫存查詢"]
I2["庫存流水"]
I3["移庫管理"]
I4["盤點管理"]
end
subgraph 產品管理["產品管理"]
PR1["產品分類"]
PR2["產品資訊"]
PR3["產品單位"]
end
subgraph 財務管理["財務管理"]
F1["結算賬戶"]
F2["採購付款"]
F3["銷售收款"]
end
採購入庫 --&gt;|庫存增加| 庫存管理
採購退貨 --&gt;|庫存減少| 庫存管理
銷售出庫 --&gt;|庫存減少| 庫存管理
銷售退貨 --&gt;|庫存增加| 庫存管理
採購訂單 --&gt;|付款| 財務管理
銷售訂單 --&gt;|收款| 財務管理
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="採購流程"&gt;採購流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant P as 採購員
participant ERP3 as ERP
participant S as 供應商
participant WH as 倉庫
P-&gt;&gt;ERP3: 選擇供應商，建立採購訂單
ERP3-&gt;&gt;ERP3: 訂單狀態：待審批
Note over ERP3: 可整合 BPM 工作流審批
ERP3-&gt;&gt;ERP3: 審批透過
P-&gt;&gt;S: 通知供應商發貨
S-&gt;&gt;WH: 貨物送達
WH-&gt;&gt;ERP3: 建立採購入庫單
ERP3-&gt;&gt;ERP3: 入庫審批透過
ERP3-&gt;&gt;ERP3: 庫存增加
Note over ERP3: 若需退貨
P-&gt;&gt;ERP3: 建立採購退貨單
ERP3-&gt;&gt;ERP3: 退貨審批透過 → 庫存減少
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="銷售流程"&gt;銷售流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant C as 客戶
participant S2 as 銷售員
participant ERP4 as ERP
participant WH2 as 倉庫
C-&gt;&gt;S2: 下達採購需求
S2-&gt;&gt;ERP4: 建立銷售訂單
ERP4-&gt;&gt;ERP4: 訂單審批透過
S2-&gt;&gt;WH2: 通知倉庫備貨
WH2-&gt;&gt;ERP4: 建立銷售出庫單
ERP4-&gt;&gt;ERP4: 出庫審批透過
ERP4-&gt;&gt;ERP4: 庫存減少
WH2-&gt;&gt;C: 發貨
Note over ERP4: 若需退貨
S2-&gt;&gt;ERP4: 建立銷售退貨單
ERP4-&gt;&gt;ERP4: 退貨審批透過 → 庫存增加
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心表結構"&gt;核心表結構&lt;/h2&gt;
&lt;div class="mermaid"&gt;erDiagram
ERP_PRODUCT ||--o{ ERP_PURCHASE_ORDER_ITEM : "採購"
ERP_PRODUCT ||--o{ ERP_SALE_ORDER_ITEM : "銷售"
ERP_PRODUCT ||--o{ ERP_STOCK : "庫存"
ERP_PURCHASE_ORDER ||--o{ ERP_PURCHASE_ORDER_ITEM : "包含"
ERP_PURCHASE_ORDER ||--o{ ERP_PURCHASE_IN : "入庫"
ERP_SALE_ORDER ||--o{ ERP_SALE_ORDER_ITEM : "包含"
ERP_SALE_ORDER ||--o{ ERP_SALE_OUT : "出庫"
ERP_STOCK {
bigint id PK
bigint product_id FK "產品"
bigint warehouse_id FK "倉庫"
int stock "庫存數量"
}
ERP_PURCHASE_ORDER {
bigint id PK
varchar no "單據編號"
bigint supplier_id FK "供應商"
tinyint status "狀態"
decimal total_price "總金額"
}
ERP_SALE_ORDER {
bigint id PK
varchar no "單據編號"
bigint customer_id FK "客戶"
tinyint status "狀態"
decimal total_price "總金額"
}
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="單據編號規則"&gt;單據編號規則&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;格式：{prefix}{yyyyMMdd}{6位自增}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;示例：CGD20240625000001（採購訂單）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; XSD20240625000001（銷售訂單）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="審批機制"&gt;審批機制&lt;/h2&gt;
&lt;p&gt;所有出入庫單據都有審批狀態（&lt;code&gt;ErpAuditStatus&lt;/code&gt;）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;未審批&lt;/td&gt;
&lt;td&gt;草稿狀態，可編輯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已審批&lt;/td&gt;
&lt;td&gt;審批透過，觸發庫存變更&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;關鍵規則&lt;/strong&gt;：審批透過後才影響庫存，審批駁回的單據不產生庫存變動。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="依賴關係"&gt;依賴關係&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ERP 進銷存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── BPM 工作流（可選）—— 審批流程
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Mall 商城系统</title><link>https://ruoyiplus.com/zh-tw/plus/mall-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/mall-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，49 DOs / 73 Controllers，選單 ID 起始 14000，構建完整的電商商城解決方案&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Mall 圍繞&lt;strong&gt;商品管理&lt;/strong&gt;、&lt;strong&gt;訂單交易&lt;/strong&gt;、&lt;strong&gt;營銷促銷&lt;/strong&gt;三大核心進行企業級增強，打造完整的 B2C 電商商城體系。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;49 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;73 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mall&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;商品管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;訂單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_promotion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;促銷管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_delivery&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配送管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_after_sale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;售後管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_statistics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;統計管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_coupon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;優惠券&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_bargain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;砍價活動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_combination&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;組合套餐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mall_seckill&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;秒殺活動&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Mall 增強架構"
subgraph "商品層"
A1[商品管理]
A2[分類管理]
A3[品牌管理]
A4[評價管理]
end
subgraph "交易層"
B1[購物車]
B2[訂單管理]
B3[支付管理]
B4[配送管理]
end
subgraph "營銷層"
C1[優惠券]
C2[秒殺活動]
C3[砍價活動]
C4[組合套餐]
end
subgraph "服務層"
D1[售後管理]
D2[退款管理]
D3[客服對接]
end
subgraph "管控層"
E1[許可權控制]
E2[資料審計]
E3[風控管理]
end
end
A1 --&gt; B1
A2 --&gt; A1
A3 --&gt; A1
A4 --&gt; A1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
C1 --&gt; B2
C2 --&gt; B2
C3 --&gt; B2
C4 --&gt; B2
B4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
A1 --&gt; E1
B2 --&gt; E2
B3 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統商城&lt;/th&gt;
&lt;th&gt;RuoYiPlus Mall 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商品管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎商品&lt;/td&gt;
&lt;td&gt;多規格+多SKU管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎訂單&lt;/td&gt;
&lt;td&gt;全流程訂單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;促銷營銷&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單折扣&lt;/td&gt;
&lt;td&gt;秒殺+砍價+組合套餐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;配送管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多物流+運費模板&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;售後服務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;退款+退貨+換貨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單統計&lt;/td&gt;
&lt;td&gt;交易分析+商品分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;商家級+商品級許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;風控合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;交易風控+操作審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-商品管理體系"&gt;2. 商品管理體系&lt;/h2&gt;
&lt;h3 id="21-商品架構"&gt;2.1 商品架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "商品管理"
A[商品分類] --&gt; B[商品SPU]
B --&gt; C[商品SKU]
C --&gt; D[商品庫存]
B --&gt; B1[商品名稱]
B --&gt; B2[商品詳情]
B --&gt; B3[商品圖片]
B --&gt; B4[商品引數]
C --&gt; C1[規格組合]
C --&gt; C2[價格管理]
C --&gt; C3[庫存管理]
C --&gt; C4[條碼管理]
D --&gt; D1[庫存預警]
D --&gt; D2[庫存同步]
D --&gt; D3[庫存記錄]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商品分類&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多級分類管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商品管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SPU/SKU 模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;規格管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多規格多SKU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時庫存+預警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;評價管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;商品評價+追評&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商品搜尋&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全文檢索+篩選&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-訂單交易管理"&gt;3. 訂單交易管理&lt;/h2&gt;
&lt;h3 id="31-訂單流程"&gt;3.1 訂單流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[加入購物車] --&gt; B[確認訂單]
B --&gt; C[提交訂單]
C --&gt; D[支付處理]
D --&gt; E{支付結果}
E --&gt;|成功| F[商家發貨]
E --&gt;|失敗| G[訂單取消]
F --&gt; H[物流配送]
H --&gt; I[確認收貨]
I --&gt; J[訂單完成]
I --&gt; K[申請售後]
B --&gt; B1[選擇地址]
B --&gt; B2[選擇優惠]
B --&gt; B3[計算運費]
F --&gt; F1[揀貨]
F --&gt; F2[打包]
F --&gt; F3[發貨]
&lt;/div&gt;
&lt;h3 id="32-訂單管理"&gt;3.2 訂單管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;購物車&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多商品+優惠計算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;下單+庫存鎖定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多支付方式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單發貨&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;發貨+物流跟蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單售後&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;退款+退貨+換貨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交易分析+趨勢&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-營銷促銷體系"&gt;4. 營銷促銷體系&lt;/h2&gt;
&lt;h3 id="41-營銷活動"&gt;4.1 營銷活動&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "營銷體系"
A[優惠券] --&gt; B[滿減券]
A --&gt; C[折扣券]
A --&gt; D[免郵券]
E[秒殺活動] --&gt; F[限時秒殺]
E --&gt; G[限量秒殺]
H[砍價活動] --&gt; I[分享砍價]
H --&gt; J[助力砍價]
K[組合套餐] --&gt; L[捆綁銷售]
K --&gt; M[搭配套餐]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;活動型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;優惠券&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;滿減券、折扣券、免郵券&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;秒殺活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;限時秒殺、限量秒殺&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;砍價活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分享砍價、好友助力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;組合套餐&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;捆綁銷售、搭配套餐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;滿減活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;階梯滿減、全場滿減&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mall-plus"
subgraph "mall-biz"
A1[product 商品管理]
A2[order 訂單管理]
A3[cart 購物車]
A4[promotion 促銷管理]
A5[delivery 配送管理]
A6[after_sale 售後管理]
A7[coupon 優惠券管理]
A8[seckill 秒殺管理]
A9[bargain 砍價管理]
A10[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[risk 風控管理]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A6 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;完整商城&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;商品+訂單+支付+配送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;營銷賦能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;秒殺+砍價+優惠券&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;使用者增長&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;社交裂變+會員營銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交易分析+使用者畫像&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規經營&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交易審計+風控管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;靈活擴充套件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;模組化設計+開放API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>CRM 客户关系管理</title><link>https://ruoyiplus.com/zh-tw/plus/crm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/crm-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，75 DOs / 54 Controllers，選單 ID 起始 2000，提供客戶全生命週期管理、智慧許可權控制、審計合規的深度業務增強&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus CRM 在 Yudao 原生能力基礎上，圍繞&lt;strong&gt;客戶資產管控&lt;/strong&gt;、&lt;strong&gt;銷售流程自動化&lt;/strong&gt;、&lt;strong&gt;資料許可權合規&lt;/strong&gt;三大核心進行企業級增強，構建從線索獲取到客戶成功的完整業務閉環。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus CRM 增強架構"
subgraph "業務層"
A1[客戶全生命週期]
A2[商機管理]
A3[合同管理]
A4[營銷自動化]
end
subgraph "能力層"
B1[智慧公海池]
B2[銷售預測]
B3[電子簽約]
B4[BI 分析]
end
subgraph "基礎設施層"
C1[資料許可權引擎]
C2[操作審計]
C3[敏感資料脫敏]
C4[多租戶隔離]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B4
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
B4 --&gt; C4
&lt;/div&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;75 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;54 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-crm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_customer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;客戶基本資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_contact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;聯絡人資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_business&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;商機管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_contract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;合同管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_quote&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;報價管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_invoice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;發票管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_receivable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;應收款管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_return_visit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;客戶回訪&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;產品管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;事件管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_marketing_campaign&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;營銷活動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_survey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;問卷調查&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_approval_flow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;審批流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;檔案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;crm_permission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生 CRM&lt;/th&gt;
&lt;th&gt;RuoYiPlus CRM 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客戶管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎客戶資訊&lt;/td&gt;
&lt;td&gt;全生命週期管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;公海池&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單公海&lt;/td&gt;
&lt;td&gt;智慧回收+分配策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;商機管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎商機&lt;/td&gt;
&lt;td&gt;看板+預測+自動化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎合同&lt;/td&gt;
&lt;td&gt;電子籤+履約追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單報表&lt;/td&gt;
&lt;td&gt;BI 智慧分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;營銷自動化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;營銷自動化引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎 RBAC&lt;/td&gt;
&lt;td&gt;四層資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作日誌&lt;/td&gt;
&lt;td&gt;全鏈路審計追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-客戶全生命週期管理"&gt;2. 客戶全生命週期管理&lt;/h2&gt;
&lt;h3 id="21-生命週期階段"&gt;2.1 生命週期階段&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[潛客階段] --&gt; B[新客階段]
B --&gt; C[活躍階段]
C --&gt; D[成熟階段]
D --&gt; E[流失階段]
A --&gt; A1[線索獲取]
A --&gt; A2[線索清洗]
A --&gt; A3[線索評分]
A --&gt; A4[客戶建檔]
B --&gt; B1[客戶分級]
B --&gt; B2[首次跟進]
B --&gt; B3[需求挖掘]
B --&gt; B4[商機建立]
C --&gt; C1[持續跟進]
C --&gt; C2[商機推進]
C --&gt; C3[合同簽訂]
C --&gt; C4[回款管理]
D --&gt; D1[增購挖掘]
D --&gt; D2[續費提醒]
D --&gt; D3[服務升級]
D --&gt; D4[滿意度調研]
E --&gt; E1[流失預警]
E --&gt; E2[挽留策略]
E --&gt; E3[流失分析]
E --&gt; E4[公海回收]
&lt;/div&gt;
&lt;h3 id="22-資料許可權控制"&gt;2.2 資料許可權控制&lt;/h3&gt;
&lt;p&gt;CRM 系統實現&lt;strong&gt;四層資料許可權模型&lt;/strong&gt;，確保客戶資料按組織架構和崗位職責嚴格隔離。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "許可權決策引擎"
A[銷售請求] --&gt; B[許可權解析]
B --&gt; C{許可權來源}
C --&gt; D[使用者級許可權]
C --&gt; E[角色級許可權]
C --&gt; F[崗位級許可權]
C --&gt; G[部門級許可權]
D --&gt; H[許可權合併]
E --&gt; H
F --&gt; H
G --&gt; H
H --&gt; I[客戶等級過濾]
I --&gt; J[資料過濾 SQL]
J --&gt; K[返回結果]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;使用者級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;銷售個人客戶&lt;/td&gt;
&lt;td&gt;銷售只能檢視自己負責的客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;角色級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;銷售團隊&lt;/td&gt;
&lt;td&gt;銷售經理可檢視團隊所有客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;崗位級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區域管理&lt;/td&gt;
&lt;td&gt;區域總監可檢視本區域所有客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分公司&lt;/td&gt;
&lt;td&gt;分公司總經理可檢視分公司所有客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// CRM 資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sales_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 銷售經理可檢視團隊客戶&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按部門層級過濾資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 客戶等級過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlFilter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;customer_level &amp;lt;= #{currentUser.maxLevel}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomerLevelService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 按使用者可訪問的客戶等級過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-操作審計"&gt;2.3 操作審計&lt;/h3&gt;
&lt;p&gt;所有客戶資料操作均記錄完整審計日誌，支援資料變更追溯和合規審計。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審計事件採集"
A1[客戶建立]
A2[客戶編輯]
A3[客戶轉移]
A4[客戶刪除]
A5[資料匯出]
end
subgraph "審計處理"
B1[變更對比]
B2[風險評分]
B3[規則匹配]
end
subgraph "審計儲存"
C1[操作日誌]
C2[變更歷史]
C3[區塊鏈存證]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計型別&lt;/th&gt;
&lt;th&gt;記錄內容&lt;/th&gt;
&lt;th&gt;保留期限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;操作審計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;客戶建立、編輯、刪除、轉移&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;欄位變更前後的值&lt;/td&gt;
&lt;td&gt;3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;匯出審計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;匯出時間、匯出人、匯出資料量&lt;/td&gt;
&lt;td&gt;3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;客戶負責人變更歷史&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-智慧公海池"&gt;3. 智慧公海池&lt;/h2&gt;
&lt;h3 id="31-公海池架構"&gt;3.1 公海池架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "公海池管理"
A[客戶進入公海] --&gt; B{分配策略}
B --&gt; C[按區域分配]
B --&gt; D[按行業分配]
B --&gt; E[按能力分配]
C --&gt; F[銷售領取]
D --&gt; F
E --&gt; F
F --&gt; G{跟進規則}
G --&gt;|N天未跟進| H[自動回收]
G --&gt;|正常跟進| I[繼續跟進]
H --&gt; A
end
&lt;/div&gt;
&lt;h3 id="32-核心能力"&gt;3.2 核心能力&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動回收規則&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N天未跟進自動回收&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;領取限制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;每日領取上限、總量上限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;分配策略&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按區域/行業/能力智慧分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;保護機制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;重點客戶保護、跟進豁免&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;回收預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;回收前3天自動提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-配置示例"&gt;3.3 配置示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;crm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;recycle-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;30天未跟進&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;last_follow_days &amp;gt; 30&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;recycle&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exclude-levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;VIP&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;KA&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;90天無商機&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;no_business_days &amp;gt; 90&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;recycle&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pickup-limits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;total&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cooldown-hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-商機管理與預測"&gt;4. 商機管理與預測&lt;/h2&gt;
&lt;h3 id="41-商機流程"&gt;4.1 商機流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[線索轉化] --&gt; B[需求確認]
B --&gt; C[方案制定]
C --&gt; D[報價談判]
D --&gt; E[贏單/輸單]
E --&gt; F[合同簽訂]
B --&gt; B1[需求分析]
B --&gt; B2[客戶評估]
C --&gt; C1[方案設計]
C --&gt; C2[方案演示]
D --&gt; D1[報價審批]
D --&gt; D2[合同談判]
&lt;/div&gt;
&lt;h3 id="42-商機看板與預測"&gt;4.2 商機看板與預測&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;視覺化看板&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;拖拽式商機階段管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;贏率預測&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於歷史資料的贏率模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售預測&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;季度/年度銷售額預測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;階段轉化率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;各階段轉化率分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;瓶頸識別&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動識別轉化瓶頸&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-合同管理與電子簽約"&gt;5. 合同管理與電子簽約&lt;/h2&gt;
&lt;h3 id="51-合同流程"&gt;5.1 合同流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[合同起草] --&gt; B[合同審批]
B --&gt; C[電子簽署]
C --&gt; D[合同執行]
D --&gt; E[合同歸檔]
A --&gt; A1[模板化起草]
A --&gt; A2[條款配置]
B --&gt; B1[多級審批]
B --&gt; B2[法務稽核]
C --&gt; C1[電子簽章]
C --&gt; C2[身份認證]
D --&gt; D1[履約追蹤]
D --&gt; D2[回款管理]
E --&gt; E1[電子歸檔]
E --&gt; E2[到期提醒]
&lt;/div&gt;
&lt;h3 id="52-合同審計"&gt;5.2 合同審計&lt;/h3&gt;
&lt;p&gt;所有合同操作均記錄完整審計日誌，確保合同管理合規可追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄合同起草人、起草時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同審批&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄審批流程、審批意見&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同簽署&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄簽署時間、簽署方&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄變更內容、變更原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合同歸檔&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄歸檔時間、歸檔人&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-營銷自動化引擎"&gt;6. 營銷自動化引擎&lt;/h2&gt;
&lt;h3 id="61-自動化流程"&gt;6.1 自動化流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[觸發條件] --&gt; B{條件判斷}
B --&gt;|滿足| C[執行動作]
B --&gt;|不滿足| D[不執行]
C --&gt; E[記錄結果]
E --&gt; F{後續條件}
F --&gt;|是| G[繼續執行]
F --&gt;|否| H[流程結束]
&lt;/div&gt;
&lt;h3 id="62-自動化規則示例"&gt;6.2 自動化規則示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 自動化規則示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AutomationRule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;客戶建立&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;industry = &amp;#39;製造業&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;region = &amp;#39;華東&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assignTo: &amp;#39;華東銷售組&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sendEmail: &amp;#39;歡迎郵件模板&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;createTask: &amp;#39;首次跟進任務&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-資料分析增強"&gt;7. 資料分析增強&lt;/h2&gt;
&lt;h3 id="71-銷售漏斗分析"&gt;7.1 銷售漏斗分析&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[線索] --&gt; B[客戶]
B --&gt; C[商機]
C --&gt; D[合同]
D --&gt; E[回款]
A --&gt; A1[線索轉化率]
B --&gt; B1[商機建立率]
C --&gt; C1[階段轉化率]
D --&gt; D1[贏單率]
E --&gt; E1[回款完成率]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分析維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;線索 → 客戶&lt;/td&gt;
&lt;td&gt;線索轉化率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客戶 → 商機&lt;/td&gt;
&lt;td&gt;商機建立率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商機各階段&lt;/td&gt;
&lt;td&gt;階段轉化率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商機 → 合同&lt;/td&gt;
&lt;td&gt;贏單率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合同 → 回款&lt;/td&gt;
&lt;td&gt;回款完成率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="72-客戶價值分析"&gt;7.2 客戶價值分析&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分析模型&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RFM 模型&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;最近購買、頻率、金額分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客戶分層&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;VIP/KA/普通/潛力客戶分層&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生命週期價值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLV 客戶終身價值預測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;流失風險評分&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;流失機率預測&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-技術架構"&gt;8. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-crm-plus"
subgraph "crm-biz"
A1[customer 客戶管理]
A2[leads 線索管理]
A3[business 商機管理]
A4[contract 合同管理]
A5[pool 公海池]
A6[automation 營銷自動化]
A7[analytics 資料分析]
A8[integration 外部整合]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[masking 資料脫敏]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="9-商業價值"&gt;9. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提升轉化率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧跟進提醒、商機預測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低流失率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;流失預警、挽留策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動化營銷、移動辦公&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BI 分析、決策支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;四層許可權、全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料安全&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;敏感資料脫敏、操作追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>WMS 仓库管理系统</title><link>https://ruoyiplus.com/zh-tw/ruoyi/wms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/wms/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;WMS 是獨立的通用倉庫管理系統（16 張表）&lt;/strong&gt;，與 MES 中深度整合製造的倉庫模組是兩套系統。WMS 定位為「通用倉儲管理」，適合純倉儲場景；如果你需要深度整合製造（如線邊庫、生產領料），請使用 MES 中的倉庫模組。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：管好倉庫的「進、出、移、盤」，讓每一件貨都知道在哪裡。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;WMS 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;倉庫有多少貨不知道&lt;/td&gt;
&lt;td&gt;實時庫存查詢，庫存流水追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;出入庫記錄靠紙質單據&lt;/td&gt;
&lt;td&gt;電子單據，狀態流轉可追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;貨物位置不清楚&lt;/td&gt;
&lt;td&gt;多倉庫、庫位管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;盤點耗時耗力&lt;/td&gt;
&lt;td&gt;系統化盤點流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;庫存資料不準&lt;/td&gt;
&lt;td&gt;每筆操作自動更新庫存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
WH_ADMIN["倉庫管理員&lt;br/&gt;管理倉庫/庫位&lt;br/&gt;配置商品資訊&lt;br/&gt;處理入庫/出庫/移庫/盤點&lt;br/&gt;檢視庫存"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心業務流程"&gt;核心業務流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 入庫流程
IN1["建立入庫單"] --&gt; IN2["草稿狀態"]
IN2 --&gt; IN3["確認完成"]
IN3 --&gt; IN4["庫存增加"]
IN2 --&gt; IN5["作廢"]
end
subgraph 出庫流程
OUT1["建立出庫單"] --&gt; OUT2["草稿狀態"]
OUT2 --&gt; OUT3["確認完成"]
OUT3 --&gt; OUT4["庫存減少"]
OUT2 --&gt; OUT5["作廢"]
end
subgraph 移庫流程
MV1["建立移庫單"] --&gt; MV2["確認完成"]
MV2 --&gt; MV3["源倉庫庫存減少&lt;br/&gt;目標倉庫庫存增加"]
end
subgraph 盤點流程
CK1["建立盤點單"] --&gt; CK2["錄入實盤數量"]
CK2 --&gt; CK3["確認完成"]
CK3 --&gt; CK4["盤盈：庫存增加&lt;br/&gt;盤虧：庫存減少"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心表結構"&gt;核心表結構&lt;/h2&gt;
&lt;div class="mermaid"&gt;erDiagram
WMS_WAREHOUSE ||--o{ WMS_STOCK : "庫存"
WMS_PRODUCT ||--o{ WMS_STOCK : "庫存"
WMS_WAREHOUSE {
bigint id PK
varchar name "倉庫名稱"
varchar code "倉庫編碼"
tinyint status "狀態"
}
WMS_PRODUCT {
bigint id PK
varchar name "商品名稱"
varchar no "商品編碼"
varchar unit "單位"
}
WMS_STOCK {
bigint id PK
bigint warehouse_id FK "倉庫"
bigint product_id FK "商品"
int stock "庫存數量"
}
WMS_STOCK_RECORD {
bigint id PK
bigint warehouse_id FK
bigint product_id FK
int count "變動數量"
tinyint type "出入型別"
varchar business_no "關聯單據號"
}
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="單據編號規則"&gt;單據編號規則&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;格式：{prefix}{月日}{4位隨機數}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;示例：RK06250001（入庫單）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CK06250001（出庫單）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; YK06250001（移庫單）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; PK06250001（盤點單）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="兩階段狀態流轉"&gt;兩階段狀態流轉&lt;/h2&gt;
&lt;p&gt;所有單據遵循&lt;strong&gt;草稿 → 完成/作廢&lt;/strong&gt;的兩階段模式：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;草稿&lt;/td&gt;
&lt;td&gt;可編輯，不觸發庫存變更&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已完成&lt;/td&gt;
&lt;td&gt;確認完成，觸發庫存事務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;已作廢&lt;/td&gt;
&lt;td&gt;單據作廢，不觸發庫存變更&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;關鍵規則&lt;/strong&gt;：只有「已完成」狀態才會真正影響庫存數量。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="與-mes-倉庫的區別"&gt;與 MES 倉庫的區別&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;WMS&lt;/th&gt;
&lt;th&gt;MES 倉庫模組&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;定位&lt;/td&gt;
&lt;td&gt;通用倉儲管理&lt;/td&gt;
&lt;td&gt;製造深度整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;表數量&lt;/td&gt;
&lt;td&gt;16 表&lt;/td&gt;
&lt;td&gt;62 表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;適用場景&lt;/td&gt;
&lt;td&gt;獨立倉儲、物流中心&lt;/td&gt;
&lt;td&gt;製造工廠、生產車間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;特色功能&lt;/td&gt;
&lt;td&gt;基礎出入庫盤點&lt;/td&gt;
&lt;td&gt;線邊庫、生產領料、外協管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;是否需要 MES&lt;/td&gt;
&lt;td&gt;❌ 獨立使用&lt;/td&gt;
&lt;td&gt;✅ 屬於 MES 的一部分&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>CRM 四层数据权限方案</title><link>https://ruoyiplus.com/zh-tw/plus/crm-data-permission/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/crm-data-permission/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話說清楚&lt;/strong&gt;：在 Yudao 原生 &lt;code&gt;@CrmPermission&lt;/code&gt; 註解基礎上，構建「使用者-角色-崗位-部門」四層資料許可權 + 客戶等級級聯過濾的完整許可權體系。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;層級&lt;/th&gt;
&lt;th&gt;當前狀態&lt;/th&gt;
&lt;th&gt;增強後&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;使用者級&lt;/td&gt;
&lt;td&gt;✅ 支援&lt;/td&gt;
&lt;td&gt;✅ 保持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;角色級&lt;/td&gt;
&lt;td&gt;❌ 不支援&lt;/td&gt;
&lt;td&gt;✅ 角色-許可權關聯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;崗位級&lt;/td&gt;
&lt;td&gt;❌ 不支援&lt;/td&gt;
&lt;td&gt;✅ 崗位-許可權關聯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;部門級&lt;/td&gt;
&lt;td&gt;❌ 不支援&lt;/td&gt;
&lt;td&gt;✅ 部門-許可權關聯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客戶等級&lt;/td&gt;
&lt;td&gt;❌ 不支援&lt;/td&gt;
&lt;td&gt;✅ 等級疊加 + 級聯過濾&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;需要精細化資料許可權控制的 CRM 系統&lt;/li&gt;
&lt;li&gt;有客戶等級分層管理需求的企業&lt;/li&gt;
&lt;li&gt;需要按部門/崗位隔離客戶資料的組織&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-四層資料許可權模型"&gt;1. 四層資料許可權模型&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "許可權決策引擎"
A["使用者請求"] --&gt; B["許可權解析"]
B --&gt; C["許可權合併&lt;br/&gt;取並集"]
C --&gt; D["資料範圍過濾"]
D --&gt; E["客戶等級過濾&lt;br/&gt;AND 疊加"]
end
subgraph "許可權來源"
F["使用者級許可權&lt;br/&gt;優先順序 1 (最高)"]
G["角色級許可權&lt;br/&gt;優先順序 2"]
H["崗位級許可權&lt;br/&gt;優先順序 3"]
I["部門級許可權&lt;br/&gt;優先順序 4 (最低)"]
end
F --&gt; B
G --&gt; B
H --&gt; B
I --&gt; B
E --&gt; J["SQL 過濾"]
J --&gt; K["返回結果"]
&lt;/div&gt;
&lt;h2 id="2-許可權校驗流程"&gt;2. 許可權校驗流程&lt;/h2&gt;
&lt;h3 id="21-操作許可權校驗"&gt;2.1 操作許可權校驗&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as 使用者
participant Controller as Controller
participant Aspect as @CrmPermission Aspect
participant Engine as 許可權引擎
participant DB as 資料庫
User-&gt;&gt;Controller: 請求操作客戶
Controller-&gt;&gt;Aspect: 觸發許可權校驗
Aspect-&gt;&gt;Engine: hasBizOperationPermission()
Engine-&gt;&gt;Engine: 檢查使用者級許可權
Engine-&gt;&gt;Engine: 檢查角色級許可權
Engine-&gt;&gt;Engine: 檢查崗位級許可權
Engine-&gt;&gt;Engine: 檢查部門級許可權
Engine-&gt;&gt;Engine: 合併結果 (取並集)
alt 有許可權
Engine-&gt;&gt;Aspect: 返回 true
Aspect-&gt;&gt;Controller: 放行
Controller-&gt;&gt;DB: 執行業務操作
else 無許可權
Engine-&gt;&gt;Aspect: 返回 false
Aspect-&gt;&gt;Controller: 丟擲許可權異常
end
&lt;/div&gt;
&lt;h3 id="22-資料許可權過濾流程"&gt;2.2 資料許可權過濾流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant User as 使用者
participant Controller as Controller
participant Interceptor as MyBatis 攔截器
participant Engine as 許可權引擎
participant DB as 資料庫
User-&gt;&gt;Controller: 查詢客戶列表
Controller-&gt;&gt;Interceptor: 觸發 SQL 攔截
Interceptor-&gt;&gt;Engine: buildDataScopeSql()
Engine-&gt;&gt;Engine: 獲取資料範圍條件
Engine-&gt;&gt;Engine: 獲取客戶等級條件
Engine-&gt;&gt;Engine: 判斷是否級聯 (關聯表)
Engine-&gt;&gt;Interceptor: 返回 SQL 過濾條件
Interceptor-&gt;&gt;Interceptor: 注入 WHERE 條件
Interceptor-&gt;&gt;DB: 執行過濾後的 SQL
DB-&gt;&gt;User: 返回過濾結果
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="3-資料庫表結構"&gt;3. 資料庫表結構&lt;/h2&gt;
&lt;h3 id="31-業務物件操作許可權表"&gt;3.1 業務物件操作許可權表&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;crm_biz_object_permission&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;主鍵&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;業務物件型別(1線索/2客戶/3聯絡人/4商機/5合同)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type_name&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;業務物件名稱&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;operation_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;操作型別(CREATE/READ/UPDATE/DELETE/TRANSFER)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;operation_name&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;操作名稱&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;角色ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;崗位ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;部門ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;使用者ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TINYINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;狀態(0禁用/1啟用)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;建立者&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;create_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;建立時間&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;updater&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;更新者&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;update_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;deleted&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;是否刪除&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;租戶編號&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;業務物件操作許可權表&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="32-資料許可權範圍表含客戶等級"&gt;3.2 資料許可權範圍表（含客戶等級）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;crm_data_scope_permission&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;主鍵&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;業務物件型別&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;scope_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;資料範圍型別(ALL/SELF/DEPT/DEPT_AND_CHILD/CUSTOM)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;scope_value&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;自定義範圍值(JSON格式)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;max_customer_level&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;最大客戶等級(NULL=不限制)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;角色ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;崗位ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;部門ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;使用者ID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TINYINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;狀態(0禁用/1啟用)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;建立者&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;create_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;建立時間&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;updater&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;VARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;更新者&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;update_time&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;deleted&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;是否刪除&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;tenant_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;BIGINT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;租戶編號&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;biz_type&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;role_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;dept_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;idx_user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8mb4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COMMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;資料許可權範圍表&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-資料範圍型別說明"&gt;3.3 資料範圍型別說明&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;範圍型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;SQL 過濾邏輯&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ALL&lt;/td&gt;
&lt;td&gt;全部資料&lt;/td&gt;
&lt;td&gt;無過濾條件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SELF&lt;/td&gt;
&lt;td&gt;自己的資料&lt;/td&gt;
&lt;td&gt;&lt;code&gt;owner_user_id = current_user&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEPT&lt;/td&gt;
&lt;td&gt;本部門資料&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dept_id IN (current_dept)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEPT_AND_CHILD&lt;/td&gt;
&lt;td&gt;本部門及子部門&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dept_id IN (current_dept_and_children)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CUSTOM&lt;/td&gt;
&lt;td&gt;自定義範圍&lt;/td&gt;
&lt;td&gt;根據 scope_value 生成過濾條件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="34-客戶等級過濾說明"&gt;3.4 客戶等級過濾說明&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;等級配置&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;SQL 過濾邏輯&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;不限制客戶等級&lt;/td&gt;
&lt;td&gt;無過濾條件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;僅 Level0&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level = 0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&amp;lt;= Level1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level &amp;lt;= 1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&amp;lt;= Level2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level &amp;lt;= 2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-許可權引擎核心實現"&gt;4. 許可權引擎核心實現&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Service&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CrmPermissionEngineServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CrmPermissionEngineService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;boolean&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;hasBizOperationPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 按優先順序從高到低檢查：使用者 → 角色 → 崗位 → 部門&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasUserPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasRolePermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasPostPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hasDeptPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operationType&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;buildDataScopeSql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DataScopePermissionDO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getDataScope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bizType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StringBuilder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 資料範圍過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScopeType&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ALL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SELF&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;owner_user_id = &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DEPT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_id = &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getUserDeptId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DEPT_AND_CHILD&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_id IN (&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getUserDeptAndChildIds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;CUSTOM&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getScopeValue&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 客戶等級過濾（AND 疊加）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMaxCustomerLevel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34; AND &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;level &amp;lt;= &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maxLevel&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sqlBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="5-mybatis-資料許可權攔截器"&gt;5. MyBatis 資料許可權攔截器&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Intercepts&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nd"&gt;@Signature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MappedStatement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RowBounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ResultHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;})})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CrmDataPermissionInterceptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Interceptor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 需要透過 customer_id 關聯客戶表進行等級級聯過濾的表&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CASCADE_CUSTOMER_LEVEL_TABLES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_business&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_contract&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_contact&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_receivable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;crm_receivable_plan&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;intercept&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Invocation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;invocation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Throwable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 1. 判斷是否需要資料許可權過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 2. 獲取當前使用者ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 3. 解析業務型別&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 4. 構建資料許可權過濾條件&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 5. 修改 SQL，新增 WHERE 過濾條件&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 6. 執行查詢&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="級聯關聯關係"&gt;級聯關聯關係&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "客戶等級級聯"
CUSTOMER["客戶表&lt;br/&gt;crm_customer&lt;br/&gt;level 欄位"] --&gt;|customer_id| CONTACT["聯絡人&lt;br/&gt;crm_contact"]
CUSTOMER --&gt;|customer_id| CONTRACT["合同&lt;br/&gt;crm_contract"]
CUSTOMER --&gt;|customer_id| RECEIVABLE["回款&lt;br/&gt;crm_receivable"]
CUSTOMER --&gt;|customer_id| RECEIVABLE_PLAN["回款計劃&lt;br/&gt;crm_receivable_plan"]
CUSTOMER --&gt;|customer_id| BUSINESS["商機&lt;br/&gt;crm_business"]
end
CLUE["線索&lt;br/&gt;crm_clue"] -.-&gt;|不級聯| CUSTOMER
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;業務物件&lt;/th&gt;
&lt;th&gt;關聯欄位&lt;/th&gt;
&lt;th&gt;是否級聯&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;客戶&lt;/td&gt;
&lt;td&gt;&lt;code&gt;level&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;❌ 源&lt;/td&gt;
&lt;td&gt;直接應用等級條件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;聯絡人&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ 是&lt;/td&gt;
&lt;td&gt;透過客戶ID關聯繼承等級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;合同&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ 是&lt;/td&gt;
&lt;td&gt;透過客戶ID關聯繼承等級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;回款&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ 是&lt;/td&gt;
&lt;td&gt;透過客戶ID關聯繼承等級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;商機&lt;/td&gt;
&lt;td&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ 是&lt;/td&gt;
&lt;td&gt;透過客戶ID關聯繼承等級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;線索&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;❌ 否&lt;/td&gt;
&lt;td&gt;線索不關聯客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-前端許可權配置介面"&gt;6. 前端許可權配置介面&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "CRM 許可權管理"
subgraph "許可權層級切換"
A1["部門許可權"]
A2["崗位許可權"]
A3["角色許可權"]
A4["使用者許可權"]
end
subgraph "業務物件選擇"
B1["客戶"]
B2["商機"]
B3["合同"]
B4["聯絡人"]
B5["線索"]
B6["回款"]
end
subgraph "操作許可權配置"
C1["建立"]
C2["檢視"]
C3["編輯"]
C4["刪除"]
C5["轉移"]
C6["匯出"]
end
subgraph "資料範圍配置"
D1["全部資料"]
D2["自己的資料"]
D3["本部門資料"]
D4["本部門及子部門"]
D5["自定義範圍"]
end
subgraph "客戶等級過濾"
E1["全部等級"]
E2["Level0"]
E3["&lt;= Level1"]
E4["&lt;= Level2"]
end
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-實施進度"&gt;7. 實施進度&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;階段&lt;/th&gt;
&lt;th&gt;任務&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料庫表結構設計與建立&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;後端實體類與 Mapper&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;許可權引擎服務實現&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MyBatis 資料許可權攔截器&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API 介面實現&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;前端頁面開發&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;客戶等級級聯過濾&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Phase 8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;測試與驗證&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="總結"&gt;總結&lt;/h2&gt;
&lt;p&gt;本方案實現了基於 &lt;strong&gt;部門-崗位-角色-使用者&lt;/strong&gt; 的四層資料許可權過濾機制：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;操作許可權&lt;/strong&gt;：透過 &lt;code&gt;crm_biz_object_permission&lt;/code&gt; 表管理，四層優先順序檢查&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;資料範圍&lt;/strong&gt;：支援 ALL/SELF/DEPT/DEPT_AND_CHILD/CUSTOM 五種範圍&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客戶等級過濾&lt;/strong&gt;：&lt;code&gt;max_customer_level&lt;/code&gt; 欄位，支援等級範圍疊加過濾&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;級聯繼承&lt;/strong&gt;：合同、聯絡人等透過 &lt;code&gt;customer_id&lt;/code&gt; 自動繼承客戶等級限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL 攔截器&lt;/strong&gt;：自動注入 WHERE 條件，無需修改現有業務程式碼&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端配置&lt;/strong&gt;：統一的許可權配置介面，支援層級切換和等級配置&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>MES 制造执行系统</title><link>https://ruoyiplus.com/zh-tw/ruoyi/mes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/mes/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;MES 是整個平臺中規模最大的業務模組（133 張表）&lt;/strong&gt;，面向製造企業的車間級管理需求。它不只是「進銷存」，而是深入到生產工單、工藝路線、排產排程、報工記錄、質量檢驗、裝置維護的完整製造執行體系。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：如果你的工廠需要管「工單怎麼排、工序怎麼做、質量怎麼檢、裝置怎麼修」，MES 就是答案。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;MES 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;生產進度不透明&lt;/td&gt;
&lt;td&gt;工單 → 排產 → 報工全鏈路追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;質量檢驗靠紙質記錄&lt;/td&gt;
&lt;td&gt;IQC/IPQC/OQC/RQC 電子化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;裝置故障影響交期&lt;/td&gt;
&lt;td&gt;裝置臺賬 + 點檢計劃預防性維護&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;物料管理混亂&lt;/td&gt;
&lt;td&gt;線邊庫 + 生產領料/退料管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;外協加工難以管理&lt;/td&gt;
&lt;td&gt;外協出入庫獨立管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;工人排班複雜&lt;/td&gt;
&lt;td&gt;排班管理模組&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
PLANNER["計劃員&lt;br/&gt;建立生產工單&lt;br/&gt;制定排產計劃"]
WORKER["操作工&lt;br/&gt;檢視工單任務&lt;br/&gt;報工記錄&lt;br/&gt;領料/退料"]
QC["質檢員&lt;br/&gt;IQC 來料檢驗&lt;br/&gt;IPQC 過程檢驗&lt;br/&gt;OQC 出貨檢驗"]
MAINTENANCE["裝置維護員&lt;br/&gt;裝置臺賬管理&lt;br/&gt;執行點檢計劃"]
SUPERVISOR["車間主任&lt;br/&gt;檢視生產進度&lt;br/&gt;安燈異常處理"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="七大模組全景"&gt;七大模組全景&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph MD["基礎資料 md（17 表）"]
MD1["物料/產品"]
MD2["客商管理"]
MD3["車間管理"]
MD4["編碼規則"]
end
subgraph PRO["生產管理 pro（17 表）"]
PRO1["工藝路線"]
PRO2["生產工單"]
PRO3["排產單"]
PRO4["報工記錄"]
PRO5["安燈系統"]
end
subgraph WM["倉庫管理 wm（62 表）"]
WM1["庫位設定"]
WM2["庫存管理"]
WM3["採購入庫"]
WM4["成品入庫"]
WM5["銷售出庫"]
WM6["領料退料"]
WM7["移庫管理"]
WM8["盤點管理"]
WM9["雜項出入庫"]
WM10["外協管理"]
end
subgraph QC2["質量管理 qc（16 表）"]
QC1["IQC 來料檢驗"]
QC2_IN["IPQC 過程檢驗"]
QC3["OQC 出貨檢驗"]
QC4["RQC 退貨檢驗"]
end
subgraph DV["裝置管理 dv（12 表）"]
DV1["裝置臺賬"]
DV2["點檢計劃"]
DV3["點檢記錄"]
end
subgraph TM["工具管理 tm（2 表）"]
TM1["工具臺賬"]
TM2["工具領用"]
end
subgraph CAL["排班管理 cal（7 表）"]
CAL1["班次定義"]
CAL2["排班計劃"]
end
MD --&gt; PRO
MD --&gt; WM
PRO --&gt; WM
PRO --&gt; QC2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="生產執行流程"&gt;生產執行流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant PLAN as 計劃員
participant MES2 as MES
participant LINE as 產線
participant QC3 as 質檢員
participant WH3 as 倉庫
PLAN-&gt;&gt;MES2: 建立生產工單
PLAN-&gt;&gt;MES2: 制定排產計劃
MES2-&gt;&gt;LINE: 工單下發到產線
LINE-&gt;&gt;WH3: 領料申請
WH3-&gt;&gt;MES2: 確認發料
LINE-&gt;&gt;MES2: 工序報工
QC3-&gt;&gt;MES2: IPQC 過程檢驗
LINE-&gt;&gt;MES2: 完工報工
QC3-&gt;&gt;MES2: OQC 出貨檢驗
LINE-&gt;&gt;WH3: 成品入庫
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="質量檢驗體系"&gt;質量檢驗體系&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph IQC["IQC 來料檢驗"]
I1["供應商來料"]
I2["檢驗 → 合格/不合格"]
I3["不合格 → 退貨/讓步接收"]
end
subgraph IPQC["IPQC 過程檢驗"]
P1["生產過程中抽檢"]
P2["關鍵工序檢驗"]
P3["異常處理"]
end
subgraph OQC["OQC 出貨檢驗"]
O1["成品出貨前檢驗"]
O2["合格 → 放行"]
end
subgraph RQC["RQC 退貨檢驗"]
R1["客戶退貨檢驗"]
R2["判定責任歸屬"]
end
IQC --&gt; IPQC --&gt; OQC
RQC -.-&gt; IQC
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="虛擬線邊庫wip"&gt;虛擬線邊庫（WIP）&lt;/h2&gt;
&lt;p&gt;MES 倉庫模組中有一個特殊概念——&lt;strong&gt;虛擬線邊庫&lt;/strong&gt;（&lt;code&gt;WIP_VIRTUAL_WAREHOUSE&lt;/code&gt;），用於統計車間在制物資：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;物料從倉庫發到產線 → 線邊庫增加&lt;/li&gt;
&lt;li&gt;產線消耗物料 → 線邊庫減少&lt;/li&gt;
&lt;li&gt;成品完工 → 線邊庫減少，成品庫增加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這讓車間在製品的數量和位置始終清晰。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="與其他模組的關係"&gt;與其他模組的關係&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;關係&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MES vs WMS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;WMS 是通用倉庫管理，MES 的倉庫模組深度整合製造（線邊庫、領料、外協）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MES vs ERP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ERP 管「進銷存」，MES 管「生產執行」，互補關係&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MES vs IoT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IoT 可用於裝置資料採集，MES 用於生產管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MES vs BPM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;可整合 BPM 做質檢異常審批等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>CS 客服系统</title><link>https://ruoyiplus.com/zh-tw/plus/cs-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/cs-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，6 DOs / 5 Controllers，選單 ID 起始 8500，構建全渠道智慧客服與工單管理體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus CS 客服系統圍繞&lt;strong&gt;全渠道接入&lt;/strong&gt;、&lt;strong&gt;智慧工單流轉&lt;/strong&gt;、&lt;strong&gt;服務質量管控&lt;/strong&gt;三大核心進行企業級增強，實現從客戶觸達到問題解決的全流程數字化管理。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-cs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_conversation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;會話管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_ticket&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;工單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_contact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;聯絡人管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_inbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;收件箱管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cs_canned_response&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;預設回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus CS 增強架構"
subgraph "渠道接入層"
A1[微信渠道]
A2[APP 渠道]
A3[電話渠道]
A4[郵件渠道]
A5[社交渠道]
end
subgraph "業務處理層"
B1[會話管理]
B2[工單管理]
B3[智慧機器人]
B4[知識庫]
end
subgraph "管控層"
C1[SLA 管理]
C2[質檢評分]
C3[許可權控制]
C4[審計追蹤]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B1 --&gt; B3
B3 --&gt; B4
B2 --&gt; C1
B2 --&gt; C2
B1 --&gt; C3
B2 --&gt; C4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統客服&lt;/th&gt;
&lt;th&gt;RuoYiPlus CS 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;渠道接入&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單渠道&lt;/td&gt;
&lt;td&gt;全渠道統一接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單工單&lt;/td&gt;
&lt;td&gt;工單全流程管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧客服&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;AI 智慧問答+機器人&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;知識庫+智慧檢索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;服務質量&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;SLA 管理+質檢評分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;客服分級+資料隔離&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;會話審計+質檢追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-全渠道接入"&gt;2. 全渠道接入&lt;/h2&gt;
&lt;h3 id="21-渠道架構"&gt;2.1 渠道架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "全渠道接入"
subgraph "即時通訊"
A1[微信公眾號]
A2[微信小程式]
A3[企業微信]
A4[釘釘]
A5[飛書]
end
subgraph "傳統渠道"
B1[電話客服]
B2[郵件客服]
B3[簡訊客服]
end
subgraph "社交渠道"
C1[微博]
C2[抖音]
C3[小紅書]
end
subgraph "統一接入"
D1[訊息匯聚]
D2[會話管理]
D3[客戶識別]
D4[上下文保持]
end
end
A1 --&gt; D1
A2 --&gt; D1
A3 --&gt; D1
A4 --&gt; D1
A5 --&gt; D1
B1 --&gt; D1
B2 --&gt; D1
B3 --&gt; D1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;渠道型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;微信渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;公眾號、小程式、企業微信&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;APP渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;APP內嵌、H5頁面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;電話渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;呼入撥出、IVR導航&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;郵件渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;郵件工單、自動回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;社交渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;微博、抖音等社交平臺&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-工單全流程管理"&gt;3. 工單全流程管理&lt;/h2&gt;
&lt;h3 id="31-工單流程"&gt;3.1 工單流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[工單建立] --&gt; B[自動分類]
B --&gt; C[自動分配]
C --&gt; D[工單處理]
D --&gt; E{是否解決?}
E --&gt;|是| F[客戶確認]
E --&gt;|否| G[工單流轉]
G --&gt; D
F --&gt; H[滿意度評價]
H --&gt; I[工單歸檔]
A --&gt; A1[多渠道建立]
A --&gt; A2[模板化建立]
C --&gt; C1[按型別分配]
C --&gt; C2[按技能分配]
C --&gt; C3[按區域分配]
D --&gt; D1[接單處理]
D --&gt; D2[協作處理]
D --&gt; D3[進度更新]
&lt;/div&gt;
&lt;h3 id="32-工單許可權控制"&gt;3.2 工單許可權控制&lt;/h3&gt;
&lt;p&gt;工單系統實現基於角色的資料許可權控制，確保客服人員只能訪問許可權範圍內的工單。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客服個人&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自己的工單&lt;/td&gt;
&lt;td&gt;只能檢視和處理分配給自己的工單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客服組長&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本組工單&lt;/td&gt;
&lt;td&gt;可檢視和分配本組所有工單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客服經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部工單&lt;/td&gt;
&lt;td&gt;可檢視所有工單並進行統計分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質檢人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;抽檢工單&lt;/td&gt;
&lt;td&gt;可隨機抽取工單進行質檢評分&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-工單審計"&gt;3.3 工單審計&lt;/h3&gt;
&lt;p&gt;所有工單操作均記錄完整審計日誌，支援工單處理過程追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[工單建立] --&gt; B[工單分配]
B --&gt; C[工單處理]
C --&gt; D[工單流轉]
D --&gt; E[工單解決]
E --&gt; F[工單歸檔]
A -.-&gt; G[審計日誌]
B -.-&gt; G
C -.-&gt; G
D -.-&gt; G
E -.-&gt; G
F -.-&gt; G
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-智慧客服機器人"&gt;4. 智慧客服機器人&lt;/h2&gt;
&lt;h3 id="41-機器人架構"&gt;4.1 機器人架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "智慧機器人"
subgraph "問答引擎"
A1[知識庫檢索]
A2[語義理解]
A3[智慧匹配]
end
subgraph "業務處理"
B1[業務查詢]
B2[業務辦理]
B3[工單建立]
end
subgraph "人機協作"
C1[機器人接待]
C2[智慧轉人工]
C3[輔助人工]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="42-核心能力"&gt;4.2 核心能力&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧問答&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;知識庫檢索、語義匹配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多輪對話&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;上下文理解、意圖識別&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;業務辦理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自助查詢、自助辦理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧轉人工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;複雜問題自動轉人工&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;人工輔助&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;知識推薦、話術建議&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-知識庫管理"&gt;5. 知識庫管理&lt;/h2&gt;
&lt;h3 id="51-知識庫體系"&gt;5.1 知識庫體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "知識管理"
subgraph "知識採集"
A1[FAQ 錄入]
A2[文件匯入]
A3[知識抽取]
end
subgraph "知識組織"
B1[知識分類]
B2[知識標籤]
B3[知識關聯]
end
subgraph "知識應用"
C1[智慧檢索]
C2[知識推薦]
C3[知識推送]
end
subgraph "知識維護"
D1[知識更新]
D2[知識過期]
D3[知識歸檔]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識錄入&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FAQ、文件、問答對&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧檢索&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;語義檢索、關鍵詞檢索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識推薦&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;相關知識推薦&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;知識統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用統計、效果評估&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-服務質量管理"&gt;6. 服務質量管理&lt;/h2&gt;
&lt;h3 id="61-sla-服務等級"&gt;6.1 SLA 服務等級&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[工單建立] --&gt; B{優先順序}
B --&gt;|緊急| C[5分鐘響應]
B --&gt;|重要| D[15分鐘響應]
B --&gt;|一般| E[30分鐘響應]
C --&gt; F[30分鐘解決]
D --&gt; G[2小時解決]
E --&gt; H[24小時解決]
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sla&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;緊急&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;5m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;重要&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;15m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;2h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;一般&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;response-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;30m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;resolve-time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;24h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;monitoring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;alert-threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="l"&gt;% &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 達標率低於80%告警&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="62-質檢評分"&gt;6.2 質檢評分&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;質檢維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;響應速度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;響應時效達標率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;解決質量&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問題解決率、一次性解決率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;服務態度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;禮貌用語、服務規範&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專業能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;知識準確性、處理能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客戶滿意度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;滿意度評分、好評率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-cs-plus"
subgraph "cs-biz"
A1[channel 渠道接入]
A2[session 會話管理]
A3[ticket 工單管理]
A4[robot 智慧機器人]
A5[knowledge 知識庫]
A6[sla SLA管理]
A7[quality 質檢管理]
A8[agent 客服管理]
A9[workspace 工作臺]
A10[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B1
A5 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提升效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧機器人、快捷工具&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;機器人分流、自助服務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高滿意度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;快速響應、專業服務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;服務質量管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SLA管理、質檢評分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;績效分析、問題分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工單審計、會話追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>销售与财务管理</title><link>https://ruoyiplus.com/zh-tw/ruoyi/sale/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/sale/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;這是 ERP 系統的財務子模組&lt;/strong&gt;，由 &lt;code&gt;yudao-module-erp&lt;/code&gt; 的 &lt;code&gt;finance&lt;/code&gt; 包實現。它不獨立存在，而是緊密整合在 ERP 的採購和銷售流程中，負責資金流的記錄和管理。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：採購了要付款，銷售了要收款，退貨了要退款——財務模組就是管這些「錢」的事情。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;財務模組如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;不知道哪個供應商欠了多少錢&lt;/td&gt;
&lt;td&gt;結算賬戶餘額清晰可見&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;付款後無法關聯到具體採購單&lt;/td&gt;
&lt;td&gt;付款單關聯採購入庫單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;收款和銷售訂單脫節&lt;/td&gt;
&lt;td&gt;收款單關聯銷售出庫單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;退款流程混亂&lt;/td&gt;
&lt;td&gt;退貨單自動觸發退款流程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
FINANCE2["財務人員&lt;br/&gt;管理結算賬戶&lt;br/&gt;處理付款/收款&lt;br/&gt;處理退款&lt;br/&gt;核對賬目"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心-er-圖"&gt;核心 ER 圖&lt;/h2&gt;
&lt;div class="mermaid"&gt;erDiagram
ERP_ACCOUNT ||--o{ ERP_FINANCE_PAYMENT : "付款"
ERP_ACCOUNT ||--o{ ERP_FINANCE_RECEIPT : "收款"
ERP_PURCHASE_IN ||--o{ ERP_FINANCE_PAYMENT : "採購入庫→付款"
ERP_PURCHASE_RETURN ||--o{ ERP_FINANCE_PAYMENT : "採購退貨→退款"
ERP_SALE_OUT ||--o{ ERP_FINANCE_RECEIPT : "銷售出庫→收款"
ERP_SALE_RETURN ||--o{ ERP_FINANCE_RECEIPT : "銷售退貨→退款"
ERP_ACCOUNT {
bigint id PK
varchar name "賬戶名稱"
decimal balance "當前餘額"
tinyint status "狀態"
}
ERP_FINANCE_PAYMENT {
bigint id PK
varchar no "付款單號"
bigint account_id FK "結算賬戶"
bigint in_id FK "採購入庫單"
decimal price "付款金額"
datetime time "付款時間"
}
ERP_FINANCE_RECEIPT {
bigint id PK
varchar no "收款單號"
bigint account_id FK "結算賬戶"
bigint out_id FK "銷售出庫單"
decimal price "收款金額"
datetime time "收款時間"
}
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="業務場景"&gt;業務場景&lt;/h2&gt;
&lt;h3 id="場景一採購付款"&gt;場景一：採購付款&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant P2 as 採購員
participant F2 as 財務
participant ERP5 as ERP
participant ACC as 結算賬戶
P2-&gt;&gt;ERP5: 完成採購入庫
F2-&gt;&gt;ERP5: 檢視待付款的採購入庫單
F2-&gt;&gt;ERP5: 選擇結算賬戶，建立付款單
ERP5-&gt;&gt;ACC: 扣減賬戶餘額
ERP5-&gt;&gt;ERP5: 記錄付款流水
&lt;/div&gt;
&lt;h3 id="場景二銷售收款"&gt;場景二：銷售收款&lt;/h3&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant S3 as 銷售員
participant F3 as 財務
participant ERP6 as ERP
participant ACC2 as 結算賬戶
S3-&gt;&gt;ERP6: 完成銷售出庫
F3-&gt;&gt;ERP6: 檢視待收款的銷售出庫單
F3-&gt;&gt;ERP6: 選擇結算賬戶，建立收款單
ERP6-&gt;&gt;ACC2: 增加賬戶餘額
ERP6-&gt;&gt;ERP6: 記錄收款流水
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="結算賬戶"&gt;結算賬戶&lt;/h2&gt;
&lt;p&gt;結算賬戶代表公司與供應商/客戶之間的資金賬戶關係，每筆收付款都會影響對應賬戶的餘額。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;屬性&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;賬戶名稱&lt;/td&gt;
&lt;td&gt;如「XX 供應商結算賬戶」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;當前餘額&lt;/td&gt;
&lt;td&gt;實時更新，付款減、收款加&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;狀態&lt;/td&gt;
&lt;td&gt;啟用/禁用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IoT 物联网</title><link>https://ruoyiplus.com/zh-tw/ruoyi/iot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/iot/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;IoT 模組是一個類阿里雲物聯網平臺的裝置管理平臺&lt;/strong&gt;。它可以接入海量裝置，透過物模型定義裝置能力，利用規則引擎處理裝置資料，實現裝置資料採集、遠端控制和場景聯動。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：如果你的硬體裝置需要接入雲端管理，這裡提供從裝置註冊到資料流轉的完整鏈路。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;IoT 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;裝置接入協議多樣&lt;/td&gt;
&lt;td&gt;支援 MQTT/HTTP/CoAP/TCP/UDP/WebSocket/Modbus 等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;裝置資料格式不統一&lt;/td&gt;
&lt;td&gt;物模型標準化裝置能力定義&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;裝置資料不知道如何處理&lt;/td&gt;
&lt;td&gt;規則引擎 → 資料流轉/場景聯動/告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;裝置韌體升級困難&lt;/td&gt;
&lt;td&gt;OTA 遠端升級&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要對接第三方 IoT 平臺&lt;/td&gt;
&lt;td&gt;內建 EMQX 整合，可自定義協議&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
IOT_ADMIN["IoT 管理員&lt;br/&gt;定義產品&lt;br/&gt;管理裝置&lt;br/&gt;配置物模型&lt;br/&gt;設定規則引擎"]
IOT_DEV["裝置開發者&lt;br/&gt;裝置端開發&lt;br/&gt;協議對接&lt;br/&gt;OTA 升級"]
IOT_OP["運維人員&lt;br/&gt;監控裝置狀態&lt;br/&gt;處理告警&lt;br/&gt;資料分析"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="平臺架構"&gt;平臺架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 裝置層["裝置層"]
D1["感測器"]
D2["閘道器"]
D3["控制器"]
D4["智慧裝置"]
end
subgraph 接入層["接入層（多協議）"]
P1["MQTT"]
P2["HTTP"]
P3["CoAP"]
P4["TCP/UDP"]
P5["WebSocket"]
P6["Modbus"]
end
subgraph 平臺層["IoT 平臺"]
PRODUCT["產品管理&lt;br/&gt;定義裝置型別"]
DEVICE["裝置管理&lt;br/&gt;註冊/認證/狀態"]
MODEL["物模型&lt;br/&gt;屬性/服務/事件"]
OTA["OTA 升級&lt;br/&gt;韌體遠端更新"]
end
subgraph 處理層["資料處理層"]
RULE["規則引擎&lt;br/&gt;資料規則/場景聯動/告警"]
TD["TDengine&lt;br/&gt;時序資料儲存"]
end
裝置層 --&gt; 接入層
接入層 --&gt; 平臺層
平臺層 --&gt; 處理層
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="物模型設計"&gt;物模型設計&lt;/h2&gt;
&lt;p&gt;物模型是 IoT 的核心概念，用標準化的方式描述裝置「有什麼屬性、能做什麼、會報告什麼」：&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 物模型["物模型 = 裝置的數字化描述"]
ATTR["屬性 Property&lt;br/&gt;裝置的靜態特徵&lt;br/&gt;例：溫度、溼度、開關狀態"]
SERVICE["服務 Service&lt;br/&gt;裝置可執行的操作&lt;br/&gt;例：開鎖、重啟、校準"]
EVENT["事件 Event&lt;br/&gt;裝置主動上報的資訊&lt;br/&gt;例：告警、故障、完成通知"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="規則引擎"&gt;規則引擎&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart LR
DATA["裝置資料"] --&gt; ENGINE["規則引擎"]
ENGINE --&gt;|資料規則| ROUTE1["資料路由&lt;br/&gt;儲存到 TDengine&lt;br/&gt;轉發到 HTTP/Kafka"]
ENGINE --&gt;|場景聯動| ROUTE2["場景聯動&lt;br/&gt;溫度 &gt; 30°C → 自動開風扇"]
ENGINE --&gt;|告警配置| ROUTE3["告警&lt;br/&gt;裝置離線 &gt; 5 分鐘 → 傳送通知"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="裝置生命週期"&gt;裝置生命週期&lt;/h2&gt;
&lt;div class="mermaid"&gt;flowchart LR
CREATE["建立產品&lt;br/&gt;定義物模型"] --&gt; REG["註冊裝置&lt;br/&gt;獲取認證資訊"]
REG --&gt; ONLINE["裝置上線&lt;br/&gt;建立連線"]
ONLINE --&gt; WORK["正常工作&lt;br/&gt;上報資料/接收指令"]
WORK --&gt; OTA2["OTA 升級"]
OTA2 --&gt; WORK
WORK --&gt; OFFLINE["裝置下線"]
OFFLINE --&gt; ONLINE
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="支援的協議"&gt;支援的協議&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;協議&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;特點&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MQTT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;物聯網主流協議&lt;/td&gt;
&lt;td&gt;輕量、釋出訂閱、QoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單裝置、Web 應用&lt;/td&gt;
&lt;td&gt;通用性強&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;低功耗裝置&lt;/td&gt;
&lt;td&gt;類 HTTP、UDP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自定義協議&lt;/td&gt;
&lt;td&gt;靈活、高效&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UDP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高頻資料上報&lt;/td&gt;
&lt;td&gt;低延遲&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebSocket&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時雙向通訊&lt;/td&gt;
&lt;td&gt;瀏覽器友好&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modbus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工業裝置&lt;/td&gt;
&lt;td&gt;工控標準&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EMQX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高效能 MQTT Broker&lt;/td&gt;
&lt;td&gt;百萬級連線&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自定義協議&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;特殊裝置&lt;/td&gt;
&lt;td&gt;擴充套件開發&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="技術依賴"&gt;技術依賴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TDengine&lt;/strong&gt;：時序資料庫，用於儲存裝置上報的海量時序資料（需額外搭建）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EMQX&lt;/strong&gt;：高效能 MQTT Broker（可選，用於大規模裝置接入）&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>会员营销</title><link>https://ruoyiplus.com/zh-tw/plus/member-marketing-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/member-marketing-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，26 DOs / 31 Controllers，選單 ID 起始 13000，構建完整的會員運營與營銷自動化體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus 會員營銷圍繞&lt;strong&gt;會員全生命週期運營&lt;/strong&gt;、&lt;strong&gt;智慧營銷自動化&lt;/strong&gt;、&lt;strong&gt;會員資料合規&lt;/strong&gt;三大核心進行企業級增強，實現從獲客到留客的完整業務閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;31 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-member&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;會員資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_point&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;積分管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_balance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;餘額管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_coupon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;優惠券管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_package&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;套餐管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_level&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;等級管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;標籤管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_sign_in&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;簽到管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;member_recharge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;充值管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus 會員營銷增強架構"
subgraph "運營層"
A1[會員生命週期]
A2[等級體系]
A3[積分體系]
A4[權益管理]
end
subgraph "營銷層"
B1[營銷活動引擎]
B2[自動化觸發器]
B3[會員畫像]
B4[RFM 分析]
end
subgraph "資料層"
C1[會員資料分析]
C2[活動效果分析]
C3[運營指標監控]
end
subgraph "合規層"
D1[會員資料許可權]
D2[隱私資料脫敏]
D3[操作審計]
D4[資料加密]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生 Member&lt;/th&gt;
&lt;th&gt;RuoYiPlus 會員營銷增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;會員管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎會員資訊&lt;/td&gt;
&lt;td&gt;全生命週期運營&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;等級體系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單等級&lt;/td&gt;
&lt;td&gt;動態等級+權益體系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分體系&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎積分&lt;/td&gt;
&lt;td&gt;積分商城+兌換體系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;營銷活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;營銷活動管理引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;會員分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單統計&lt;/td&gt;
&lt;td&gt;RFM 分析+畫像標籤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動化營銷&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;營銷自動化觸發器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;會員資料分級許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;隱私合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;隱私資料脫敏+審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-會員全生命週期運營"&gt;2. 會員全生命週期運營&lt;/h2&gt;
&lt;h3 id="21-生命週期階段"&gt;2.1 生命週期階段&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[獲取階段] --&gt; B[啟用階段]
B --&gt; C[留存階段]
C --&gt; D[變現階段]
D --&gt; E[推薦階段]
A --&gt; A1[註冊引流]
A --&gt; A2[新客激勵]
A --&gt; A3[首單轉化]
A --&gt; A4[渠道歸因]
B --&gt; B1[啟用引導]
B --&gt; B2[首次消費]
B --&gt; B3[習慣培養]
B --&gt; B4[新客禮包]
C --&gt; C1[簽到激勵]
C --&gt; C2[積分累積]
C --&gt; C3[會員升級]
C --&gt; C4[專屬優惠]
D --&gt; D1[增購推薦]
D --&gt; D2[交叉銷售]
D --&gt; D3[高價值轉化]
D --&gt; D4[付費會員]
E --&gt; E1[推薦獎勵]
E --&gt; E2[社交裂變]
E --&gt; E3[KOC 培養]
E --&gt; E4[會員大使]
&lt;/div&gt;
&lt;h3 id="22-會員資料許可權"&gt;2.2 會員資料許可權&lt;/h3&gt;
&lt;p&gt;會員模組實現基於資料分級的許可權控制，確保會員隱私資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;普通會員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人資訊&lt;/td&gt;
&lt;td&gt;只能檢視自己的會員資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;客服專員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;負責會員&lt;/td&gt;
&lt;td&gt;可檢視負責會員的基本資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;運營專員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部會員&lt;/td&gt;
&lt;td&gt;可檢視所有會員資料（脫敏）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析師&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分析資料&lt;/td&gt;
&lt;td&gt;可檢視統計資料但不能檢視個人資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 會員資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;member_level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MemberServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 運營專員可檢視會員資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 敏感欄位自動脫敏&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 隱私資料脫敏&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;PHONE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SensitiveField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SensitiveType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EMAIL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-會員操作審計"&gt;2.3 會員操作審計&lt;/h3&gt;
&lt;p&gt;所有會員資料操作均記錄完整審計日誌，支援會員資料追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;會員註冊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄註冊時間、註冊渠道&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;等級變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄升降級時間、原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分變動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄積分獲取、消耗明細&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;權益使用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄權益使用時間、使用內容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料匯出&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄匯出時間、匯出人、匯出資料量&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-動態等級體系"&gt;3. 動態等級體系&lt;/h2&gt;
&lt;h3 id="31-等級體系"&gt;3.1 等級體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "等級體系"
A[普通會員] --&gt; B[銀卡會員]
B --&gt; C[金卡會員]
C --&gt; D[鑽石會員]
A --&gt; A1[0積分]
B --&gt; B1[1000積分]
C --&gt; C1[5000積分]
D --&gt; D1[20000積分]
A --&gt; A2[基礎積分]
A --&gt; A3[生日優惠]
B --&gt; B1[積分加倍]
B --&gt; B2[專屬客服]
B --&gt; B3[優先發貨]
C --&gt; C1[積分三倍]
C --&gt; C2[免運費]
C --&gt; C3[專屬折扣]
D --&gt; D1[積分五倍]
D --&gt; D2[專屬禮品]
D --&gt; D3[VIP活動]
end
&lt;/div&gt;
&lt;h3 id="32-等級配置"&gt;3.2 等級配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;levels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;普通會員&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;基礎積分&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生日優惠&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;銀卡會員&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;積分加倍&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;專屬客服&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;優先發貨&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;金卡會員&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;積分三倍&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;免運費&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;專屬折扣&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;會員日特權&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;鑽石會員&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;benefits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;積分五倍&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;專屬禮品&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;VIP活動&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生日雙倍&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;upgrade-rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auto-upgrade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;grace-period&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 保級期90天&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;downgrade-warning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 降級前30天預警&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-積分體系增強"&gt;4. 積分體系增強&lt;/h2&gt;
&lt;h3 id="41-積分流程"&gt;4.1 積分流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[積分獲取] --&gt; B[積分累積]
B --&gt; C[積分消耗]
C --&gt; D[積分結算]
A --&gt; A1[消費積分]
A --&gt; A2[活動積分]
A --&gt; A3[任務積分]
B --&gt; B1[積分餘額]
B --&gt; B2[積分有效期]
C --&gt; C1[積分兌換]
C --&gt; C2[積分抵扣]
C --&gt; C3[積分抽獎]
D --&gt; D1[積分過期]
D --&gt; D2[積分清零]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分獲取&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;消費積分、活動積分、任務積分&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分消耗&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;積分兌換、積分抵扣、積分抽獎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分有效期&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;積分過期規則、清零提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分凍結&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;訂單取消積分凍結&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;積分追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;積分變動明細記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-營銷活動引擎"&gt;5. 營銷活動引擎&lt;/h2&gt;
&lt;h3 id="51-活動型別"&gt;5.1 活動型別&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;活動型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;註冊活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;新客註冊禮包、首單優惠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;簽到活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;連續簽到獎勵、簽到抽獎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;消費活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;消費返積分、滿減活動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;節日活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;會員日、生日優惠、節日促銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裂變活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;推薦有禮、拼團活動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務活動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;完成任務獲得獎勵&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-自動化營銷"&gt;5.2 自動化營銷&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "自動化營銷"
subgraph "觸發器"
A1[事件觸發]
A2[條件觸發]
A3[時間觸發]
A4[行為觸發]
end
subgraph "規則引擎"
B1[規則匹配]
B2[條件判斷]
B3[動作執行]
end
subgraph "執行動作"
C1[傳送優惠券]
C2[贈送積分]
C3[傳送簡訊]
C4[傳送郵件]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
B3 --&gt; C4
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;新客首單激勵&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;first_order&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendCoupon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;新客復購券&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;addPoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendSms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;感謝購買，贈送100積分&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;會員升級祝賀&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;level_upgrade&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;升級祝賀郵件&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendGift&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;升級禮包&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;addPoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;流失預警召回&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rfm_change&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;R &amp;gt; 60&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendCoupon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;召回專享券&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;sendSms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;好久不見，專屬優惠等你&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-rfm-分析模型"&gt;6. RFM 分析模型&lt;/h2&gt;
&lt;h3 id="61-rfm-分層"&gt;6.1 RFM 分層&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RFM 分層&lt;/th&gt;
&lt;th&gt;定義&lt;/th&gt;
&lt;th&gt;運營策略&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重要價值客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R近、F高、M高&lt;/td&gt;
&lt;td&gt;VIP 服務、專屬權益&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重要發展客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R近、F低、M高&lt;/td&gt;
&lt;td&gt;提頻次、培養習慣&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重要保持客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R遠、F高、M高&lt;/td&gt;
&lt;td&gt;啟用召回、挽留&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重要挽留客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R遠、F低、M高&lt;/td&gt;
&lt;td&gt;重點挽留、專屬優惠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一般價值客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R近、F高、M低&lt;/td&gt;
&lt;td&gt;提客單、升級引導&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一般發展客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R近、F低、M低&lt;/td&gt;
&lt;td&gt;新客培養、首單激勵&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一般保持客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R遠、F高、M低&lt;/td&gt;
&lt;td&gt;啟用召回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;低價值客戶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;R遠、F低、M低&lt;/td&gt;
&lt;td&gt;低成本維護&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-rfm-配置"&gt;6.2 RFM 配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rfm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;r-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 最近消費天數&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;f-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 消費頻次&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;m-thresholds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 消費金額&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;analysis-cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;monthly&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-member-plus"
subgraph "member-biz"
A1[lifecycle 生命週期管理]
A2[level 等級體系]
A3[points 積分體系]
A4[benefits 權益管理]
A5[activity 營銷活動]
A6[automation 自動化營銷]
A7[rfm RFM 分析]
A8[tag 畫像標籤]
A9[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[masking 資料脫敏]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B3
A6 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提升復購率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;會員權益激勵、積分體系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低流失率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RFM 預警、自動化召回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高客單價&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;升級引導、高價值轉化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低運營成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動化營銷、智慧分層&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動決策&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;畫像分析、效果追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;隱私合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料脫敏、操作審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IM 即时通讯</title><link>https://ruoyiplus.com/zh-tw/ruoyi/im/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/im/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;IM 模組為你的平臺提供內建即時通訊能力&lt;/strong&gt;——無需整合第三方 IM SDK（如環信、融雲），直接在系統內實現私聊、群聊、頻道推送和音視訊通話。特別適合需要「平臺內通訊」的場景，如電商客服、企業內部溝通、社群私信等。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：讓你的使用者在你的平臺裡就能聊天，資料和體驗完全可控。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;IM 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;第三方 IM SDK 費用高&lt;/td&gt;
&lt;td&gt;自建 IM，零額外成本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;使用者資料存在第三方&lt;/td&gt;
&lt;td&gt;聊天資料在自己的資料庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要與業務系統打通&lt;/td&gt;
&lt;td&gt;使用者體系、好友關係與業務聯動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;音視訊通話能力&lt;/td&gt;
&lt;td&gt;整合 LiveKit，支援 WebRTC 通話&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
IM_USER["普通使用者&lt;br/&gt;私聊/群聊&lt;br/&gt;傳送文字/圖片/檔案/語音&lt;br/&gt;音視訊通話"]
IM_ADMIN["IM 管理員&lt;br/&gt;管理群組&lt;br/&gt;配置頻道&lt;br/&gt;管理敏感詞&lt;br/&gt;檢視訊息記錄"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="功能架構"&gt;功能架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 核心功能["核心功能"]
MSG2["訊息中心&lt;br/&gt;私聊/群聊&lt;br/&gt;文字/圖片/檔案/語音/影片"]
FRIEND["好友關係&lt;br/&gt;新增/刪除/黑名單"]
GROUP["群組管理&lt;br/&gt;建立/加入/退出/禁言"]
CHANNEL["頻道推送&lt;br/&gt;公告/通知廣播"]
CALL["音視訊通話&lt;br/&gt;基於 LiveKit&lt;br/&gt;WebRTC"]
end
subgraph 輔助功能
EMOJI["表情管理"]
SENSITIVE["敏感詞過濾"]
end
subgraph 通訊層["通訊層"]
WS["WebSocket 實時通訊&lt;br/&gt;local / redis / rocketmq&lt;br/&gt;/ kafka / rabbitmq"]
end
核心功能 --&gt; 通訊層
輔助功能 --&gt; 核心功能
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心-er-圖"&gt;核心 ER 圖&lt;/h2&gt;
&lt;div class="mermaid"&gt;erDiagram
IM_USER ||--o{ IM_MESSAGE : "傳送"
IM_USER ||--o{ IM_FRIEND : "好友關係"
IM_USER ||--o{ IM_GROUP_MEMBER : "群成員"
IM_GROUP ||--o{ IM_GROUP_MEMBER : "包含"
IM_GROUP ||--o{ IM_MESSAGE : "群訊息"
IM_CHANNEL ||--o{ IM_CHANNEL_MESSAGE : "頻道訊息"
IM_CHANNEL ||--o{ IM_CHANNEL_MEMBER : "頻道成員"
IM_MESSAGE {
bigint id PK
bigint from_user_id FK "傳送者"
bigint to_user_id FK "接收者"
bigint group_id FK "群組"
tinyint type "訊息型別"
text content "訊息內容"
datetime create_time "傳送時間"
}
IM_GROUP {
bigint id PK
varchar name "群名稱"
bigint owner_user_id FK "群主"
tinyint status "狀態"
}
IM_CHANNEL {
bigint id PK
varchar name "頻道名稱"
tinyint type "頻道型別"
}
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="資料庫表分組"&gt;資料庫表分組&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分組&lt;/th&gt;
&lt;th&gt;表數量&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;訊息中心&lt;/td&gt;
&lt;td&gt;2 表&lt;/td&gt;
&lt;td&gt;訊息記錄、訊息會話&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;好友關係&lt;/td&gt;
&lt;td&gt;2 表&lt;/td&gt;
&lt;td&gt;好友、好友申請&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;群組管理&lt;/td&gt;
&lt;td&gt;3 表&lt;/td&gt;
&lt;td&gt;群組、群成員、群公告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;頻道推送&lt;/td&gt;
&lt;td&gt;3 表&lt;/td&gt;
&lt;td&gt;頻道、頻道成員、頻道訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;音視訊通話&lt;/td&gt;
&lt;td&gt;2 表&lt;/td&gt;
&lt;td&gt;通話記錄、通話參與人&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;其他&lt;/td&gt;
&lt;td&gt;4 表&lt;/td&gt;
&lt;td&gt;表情、敏感詞等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="websocket-通訊模式"&gt;WebSocket 通訊模式&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 傳送模式["訊息傳送模式（可切換）"]
LOCAL["local&lt;br/&gt;單機模式&lt;br/&gt;開發除錯用"]
REDIS3["redis&lt;br/&gt;Redis 廣播&lt;br/&gt;小規模叢集"]
ROCKET2["rocketmq&lt;br/&gt;RocketMQ&lt;br/&gt;高吞吐"]
KAFKA2["kafka&lt;br/&gt;Kafka&lt;br/&gt;大規模"]
RABBIT2["rabbitmq&lt;br/&gt;RabbitMQ&lt;br/&gt;企業級"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="應用場景"&gt;應用場景&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;場景&lt;/th&gt;
&lt;th&gt;使用方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;電商客服&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;買家 ↔ 商家客服私聊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;企業內部通訊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;員工群聊、部門頻道&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;社群私信&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用者之間私聊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;線上教育&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;學生 ↔ 老師、課程群聊 + 音影片&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;醫療諮詢&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;患者 ↔ 醫生私聊 + 音影片問診&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>MP 微信公众号管理</title><link>https://ruoyiplus.com/zh-tw/plus/mp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/mp-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，8 DOs / 12 Controllers，選單 ID 起始 12000，構建微信公眾號運營管理平臺&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus MP 圍繞&lt;strong&gt;公眾號管理&lt;/strong&gt;、&lt;strong&gt;素材管理&lt;/strong&gt;、&lt;strong&gt;使用者互動&lt;/strong&gt;三大核心進行企業級增強，實現微信公眾號運營管理數字化。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_account&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;公眾號管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;素材管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_menu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;選單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_auto_reply&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自動回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;訊息管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_tag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;使用者標籤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mp_user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;粉絲管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus MP 增強架構"
subgraph "公眾號管理"
A1[公眾號配置]
A2[選單管理]
A3[自動回覆]
end
subgraph "內容管理"
B1[素材管理]
B2[圖文訊息]
B3[模板訊息]
end
subgraph "使用者管理"
C1[粉絲管理]
C2[使用者標籤]
C3[訊息互動]
end
subgraph "管控層"
D1[許可權控制]
D2[資料審計]
D3[內容稽核]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C1 --&gt; D1
B3 --&gt; D2
A3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統方案&lt;/th&gt;
&lt;th&gt;RuoYiPlus MP 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;公眾號管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單公眾號&lt;/td&gt;
&lt;td&gt;多公眾號統一管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;素材管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;微信後臺&lt;/td&gt;
&lt;td&gt;本地素材庫+同步&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動回覆&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎回覆&lt;/td&gt;
&lt;td&gt;智慧回覆+關鍵詞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;粉絲管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;微信後臺&lt;/td&gt;
&lt;td&gt;粉絲管理+標籤分組&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;訊息記錄+分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;公眾號級資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內容稽核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;內容稽核+合規&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-公眾號管理"&gt;2. 公眾號管理&lt;/h2&gt;
&lt;h3 id="21-公眾號配置"&gt;2.1 公眾號配置&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "公眾號管理"
A[公眾號註冊] --&gt; B[基本配置]
B --&gt; C[選單配置]
C --&gt; D[自動回覆]
D --&gt; E[模板訊息]
B --&gt; B1[AppID配置]
B --&gt; B2[金鑰管理]
B --&gt; B3[伺服器配置]
C --&gt; C1[自定義選單]
C --&gt; C2[個性化選單]
D --&gt; D1[關注回覆]
D --&gt; D2[關鍵詞回覆]
D --&gt; D3[訊息回覆]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多公眾號&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多公眾號統一管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自定義選單+個性化選單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動回覆&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;關注回覆+關鍵詞+訊息回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;模板訊息傳送&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-素材與內容管理"&gt;3. 素材與內容管理&lt;/h2&gt;
&lt;h3 id="31-素材管理"&gt;3.1 素材管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "素材管理"
A[素材上傳] --&gt; B[素材分類]
B --&gt; C[素材同步]
C --&gt; D[素材使用]
A --&gt; A1[圖片素材]
A --&gt; A2[影片素材]
A --&gt; A3[語音素材]
A --&gt; A4[圖文素材]
C --&gt; C1[同步到微信]
C --&gt; C2[素材更新]
D --&gt; D1[圖文訊息]
D --&gt; D2[群發訊息]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;素材型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;圖片素材&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖片上傳+管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;影片素材&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;影片上傳+管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;語音素材&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;語音上傳+管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;圖文素材&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖文編輯+釋出&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-粉絲與使用者管理"&gt;4. 粉絲與使用者管理&lt;/h2&gt;
&lt;h3 id="41-粉絲管理"&gt;4.1 粉絲管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[使用者關注] --&gt; B[粉絲錄入]
B --&gt; C[標籤分組]
C --&gt; D[訊息互動]
D --&gt; E[資料分析]
B --&gt; B1[基本資訊]
B --&gt; B2[關注時間]
B --&gt; B3[來源渠道]
C --&gt; C1[自動打標籤]
C --&gt; C2[手動分組]
D --&gt; D1[訊息記錄]
D --&gt; D2[客服訊息]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;粉絲管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;粉絲列表+詳情&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;標籤管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用者標籤+分組&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;訊息歷史+回覆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;使用者畫像&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用者分析+標籤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mp-plus"
subgraph "mp-biz"
A1[account 公眾號管理]
A2[material 素材管理]
A3[menu 選單管理]
A4[auto_reply 自動回覆]
A5[message 訊息管理]
A6[tag 標籤管理]
A7[user 使用者管理]
A8[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[content 內容稽核]
end
end
A1 --&gt; B1
A2 --&gt; B3
A3 --&gt; B1
A4 --&gt; B3
A5 --&gt; B2
A7 --&gt; B1
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多號管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多公眾號統一管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內容運營&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;素材管理+內容釋出&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;粉絲運營&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;標籤分組+精準觸達&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料洞察&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用者分析+訊息分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規運營&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;內容稽核+操作審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系統整合&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;與CRM/會員聯動&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>ERP 企业资源计划</title><link>https://ruoyiplus.com/zh-tw/plus/erp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/erp-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，41 DOs / 30 Controllers，選單 ID 起始 4000，構建完整的進銷存與財務一體化管理體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus ERP 在 Yudao 原生能力基礎上，圍繞&lt;strong&gt;採購-銷售-庫存-財務&lt;/strong&gt;一體化管理、&lt;strong&gt;多維度資料許可權&lt;/strong&gt;、&lt;strong&gt;業務操作審計&lt;/strong&gt;三大核心進行企業級增強，實現從業務發生到財務核算的完整閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;41 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-erp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;產品管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_supplier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;供應商管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_customer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;客戶管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_warehouse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;倉庫管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_purchase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;採購管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_sale&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;銷售管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_inventory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;庫存管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;erp_finance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;財務管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus ERP 增強架構"
subgraph "業務層"
A1[採購管理]
A2[銷售管理]
A3[庫存管理]
A4[財務管理]
A5[生產管理]
end
subgraph "能力層"
B1[供應商管理]
B2[成本核算]
B3[經營分析]
end
subgraph "基礎設施層"
C1[資料許可權引擎]
C2[業務審計]
C3[敏感資料脫敏]
C4[多租戶隔離]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生能力&lt;/th&gt;
&lt;th&gt;RuoYiPlus ERP 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎採購&lt;/td&gt;
&lt;td&gt;採購全流程+供應商管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎銷售&lt;/td&gt;
&lt;td&gt;銷售全流程+客戶管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎庫存&lt;/td&gt;
&lt;td&gt;多倉+庫位精細化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;應收應付+成本核算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;簡易生產+工序管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;報表分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單報表&lt;/td&gt;
&lt;td&gt;經營分析+決策支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎 RBAC&lt;/td&gt;
&lt;td&gt;多維度資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作日誌&lt;/td&gt;
&lt;td&gt;業務操作全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-採購管理增強"&gt;2. 採購管理增強&lt;/h2&gt;
&lt;h3 id="21-採購流程"&gt;2.1 採購流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "採購流程"
A[採購需求] --&gt; B[採購申請]
B --&gt; C[供應商比價]
C --&gt; D[採購訂單]
D --&gt; E[訂單審批]
E --&gt; F[收貨預約]
F --&gt; G[質檢流程]
G --&gt; H[入庫確認]
H --&gt; I[採購結算]
I --&gt; J[付款申請]
J --&gt; K[付款執行]
end
A --&gt; A1[銷售預測]
A --&gt; A2[庫存預警]
A --&gt; A3[需求彙總]
C --&gt; C1[多供應商比價]
C --&gt; C2[供應商評估]
I --&gt; I1[對賬單]
I --&gt; I2[發票登記]
&lt;/div&gt;
&lt;h3 id="22-採購許可權控制"&gt;2.2 採購許可權控制&lt;/h3&gt;
&lt;p&gt;採購模組實現基於角色和資料範圍的許可權控制，確保採購資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人負責的採購單&lt;/td&gt;
&lt;td&gt;只能檢視和處理自己負責的採購單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購主管&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門採購單&lt;/td&gt;
&lt;td&gt;可檢視和審批本部門所有采購單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部採購結算&lt;/td&gt;
&lt;td&gt;可檢視所有采購結算資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;總經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部採購資料&lt;/td&gt;
&lt;td&gt;可檢視所有采購資料並進行審批&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 採購資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;purchase_manager&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PurchaseOrderServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 採購主管可檢視本部門採購單&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按部門層級過濾資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-採購審計"&gt;2.3 採購審計&lt;/h3&gt;
&lt;p&gt;所有采購操作均記錄完整審計日誌，支援採購流程追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購申請&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄申請人、申請時間、申請原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購訂單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄訂單建立、審批、變更&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;收貨入庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄收貨時間、數量、質檢結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購結算&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄對賬、發票、付款資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-銷售管理增強"&gt;3. 銷售管理增強&lt;/h2&gt;
&lt;h3 id="31-銷售流程"&gt;3.1 銷售流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "銷售流程"
A[客戶詢價] --&gt; B[報價單]
B --&gt; C[報價審批]
C --&gt; D[報價跟蹤]
D --&gt; E[銷售訂單]
E --&gt; F[訂單審批]
F --&gt; G[庫存鎖定]
G --&gt; H[出庫發貨]
H --&gt; I[物流跟蹤]
I --&gt; J[簽收確認]
J --&gt; K[發票開具]
K --&gt; L[應收登記]
L --&gt; M[收款登記]
end
&lt;/div&gt;
&lt;h3 id="32-銷售許可權控制"&gt;3.2 銷售許可權控制&lt;/h3&gt;
&lt;p&gt;銷售模組實現四層資料許可權模型，確保銷售資料按組織架構嚴格隔離。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "銷售許可權決策"
A[銷售請求] --&gt; B[許可權解析]
B --&gt; C{許可權來源}
C --&gt; D[使用者級許可權]
C --&gt; E[角色級許可權]
C --&gt; F[崗位級許可權]
C --&gt; G[部門級許可權]
D --&gt; H[許可權合併]
E --&gt; H
F --&gt; H
G --&gt; H
H --&gt; I[資料過濾]
I --&gt; J[返回結果]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人訂單&lt;/td&gt;
&lt;td&gt;只能檢視自己的銷售訂單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;團隊訂單&lt;/td&gt;
&lt;td&gt;可檢視團隊所有銷售訂單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;區域總監&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區域訂單&lt;/td&gt;
&lt;td&gt;可檢視本區域所有銷售訂單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;總經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部訂單&lt;/td&gt;
&lt;td&gt;可檢視所有銷售訂單&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-財務管理增強"&gt;4. 財務管理增強&lt;/h2&gt;
&lt;h3 id="41-財務管理架構"&gt;4.1 財務管理架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "財務管理"
subgraph "應收管理"
A1[應收賬款]
A2[收款登記]
A3[對賬管理]
A4[賬齡分析]
A5[催收管理]
end
subgraph "應付管理"
B1[應付賬款]
B2[付款申請]
B3[付款執行]
B4[對賬管理]
B5[賬齡分析]
end
subgraph "成本管理"
C1[採購成本]
C2[銷售成本]
C3[成本核算]
C4[成本分析]
C5[利潤分析]
end
subgraph "財務報表"
D1[應收應付報表]
D2[收支報表]
D3[利潤報表]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C3
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-財務許可權控制"&gt;4.2 財務許可權控制&lt;/h3&gt;
&lt;p&gt;財務模組實現嚴格的資料許可權控制，確保財務資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;負責的賬套&lt;/td&gt;
&lt;td&gt;只能檢視自己負責的賬套資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務主管&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門賬套&lt;/td&gt;
&lt;td&gt;可檢視本部門所有賬套資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部賬套&lt;/td&gt;
&lt;td&gt;可檢視所有賬套資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;只讀許可權&lt;/td&gt;
&lt;td&gt;可檢視所有財務資料但不能修改&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-財務審計"&gt;4.3 財務審計&lt;/h3&gt;
&lt;p&gt;所有財務操作均記錄完整審計日誌，支援財務資料追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;應收款&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄應收款建立、收款、核銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;應付款&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄應付款建立、付款、核銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本核算&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄成本計算過程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;發票管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄發票開具、作廢、紅衝&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-供應商管理"&gt;5. 供應商管理&lt;/h2&gt;
&lt;h3 id="51-供應商評估"&gt;5.1 供應商評估&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "供應商評估"
A[供應商檔案] --&gt; B[評估維度]
B --&gt; C[質量維度 40%]
B --&gt; D[交付維度 30%]
B --&gt; E[價格維度 20%]
B --&gt; F[服務維度 10%]
C --&gt; G[綜合評分]
D --&gt; G
E --&gt; G
F --&gt; G
G --&gt; H[供應商分級]
H --&gt; I[採購策略]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;評估維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質量維度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;質檢合格率、退貨率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;交付維度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交貨準時率、交貨週期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;價格維度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;價格競爭力、價格穩定性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;服務維度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;響應速度、服務滿意度&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;erp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;supplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;evaluation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dimensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;質量&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;quality_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;return_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;交付&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;delivery_rate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;lead_time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;價格&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;price_competitiveness&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;服務&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;response_time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;satisfaction&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cycle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;quarterly&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-成本核算"&gt;6. 成本核算&lt;/h2&gt;
&lt;h3 id="61-成本核算方法"&gt;6.1 成本核算方法&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;核算方法&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;移動加權平均&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時計算平均成本&lt;/td&gt;
&lt;td&gt;通用場景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;先進先出&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按入庫順序核算&lt;/td&gt;
&lt;td&gt;價格波動大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;後進先出&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按最新入庫核算&lt;/td&gt;
&lt;td&gt;特殊行業&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;標準成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按預設標準核算&lt;/td&gt;
&lt;td&gt;生產型企業&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-成本分析"&gt;6.2 成本分析&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分析維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;採購單價、採購金額、成本趨勢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銷售成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;銷售成本、毛利率、成本佔比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫存金額、持有成本、損耗成本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;利潤分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;產品利潤、客戶利潤、區域利潤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-erp-plus"
subgraph "erp-biz"
A1[purchase 採購管理]
A2[sale 銷售管理]
A3[inventory 庫存管理]
A4[finance 財務管理]
A5[production 生產管理]
A6[supplier 供應商管理]
A7[cost 成本核算]
A8[report 報表分析]
A9[analytics 經營分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[masking 資料脫敏]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一體化管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;進銷存財務一體化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;採購最佳化、成本核算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;流程自動化、審批流轉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料透明&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時報表、經營分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;決策支援&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;預測分析、最佳化建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多維度許可權、全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Vue3 管理后台</title><link>https://ruoyiplus.com/zh-tw/ruoyi/vue3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/vue3/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vue3 管理後臺是 RuoYi 的主推前端方案&lt;/strong&gt;，也是業務功能最完整的前端專案。如果你不確定選哪個前端，就選這個——所有 14 個子系統的頁面都在這裡最先落地。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;技術棧&lt;/strong&gt;：Vue3 + TypeScript + Vite + Element Plus + Pinia&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;使用者畫像&lt;/th&gt;
&lt;th&gt;為什麼選這個&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;追求穩定性的團隊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;所有功能最先在這裡實現，經過最充分的測試&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Element Plus 生態使用者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;元件庫成熟、文件完善、社群活躍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;需要最全業務功能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14 個子系統全部有對應頁面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;二次開發場景&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;程式碼結構清晰，模組化程度高&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="專案架構"&gt;專案架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 入口
MAIN["main.ts&lt;br/&gt;應用入口"]
end
subgraph 核心層["核心層"]
ROUTER["router/&lt;br/&gt;路由配置"]
STORE["store/&lt;br/&gt;Pinia 狀態管理"]
UTILS["utils/&lt;br/&gt;工具函式"]
end
subgraph 請求層["請求層"]
AXIOS["utils/request.ts&lt;br/&gt;axios 封裝&lt;br/&gt;baseURL / timeout / 攔截器"]
API["api/&lt;br/&gt;按模組劃分 API"]
MOCK["mock/&lt;br/&gt;Mock 資料"]
end
subgraph 檢視層["檢視層（按子系統劃分）"]
SYS_V["views/system/&lt;br/&gt;系統管理"]
BPM_V["views/bpm/&lt;br/&gt;工作流"]
CRM_V["views/crm/&lt;br/&gt;客戶管理"]
ERP_V["views/erp/&lt;br/&gt;進銷存"]
MALL_V["views/mall/&lt;br/&gt;商城"]
end
subgraph 元件層
COMPS["components/&lt;br/&gt;公共元件"]
DIRS["directives/&lt;br/&gt;自定義指令"]
PLUGINS["plugins/&lt;br/&gt;外掛"]
end
MAIN --&gt; ROUTER
MAIN --&gt; STORE
ROUTER --&gt; 檢視層
檢視層 --&gt; API
API --&gt; AXIOS
AXIOS --&gt; UTILS
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="關鍵設計"&gt;關鍵設計&lt;/h2&gt;
&lt;h3 id="axios-請求封裝"&gt;axios 請求封裝&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;baseURL: /api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timeout: 30000ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;攔截器:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 請求攔截：自動附加 Token
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 響應攔截：統一錯誤處理、Token 過期跳轉登入頁
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="頁面檔案組織"&gt;頁面檔案組織&lt;/h3&gt;
&lt;p&gt;每個業務頁面通常包含：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;erp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;purchase&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vue&lt;/span&gt; &lt;span class="c1"&gt;# 列表頁面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vue&lt;/span&gt; &lt;span class="c1"&gt;# 表單彈窗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="c1"&gt;# 常量定義&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="許可權控制"&gt;許可權控制&lt;/h3&gt;
&lt;p&gt;選單和按鈕都透過許可權標識控制：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 按鈕許可權示例
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;el&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="na"&gt;button&lt;/span&gt; &lt;span class="na"&gt;v-hasPermi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;[&amp;#39;erp:purchase-order:create&amp;#39;]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;新增&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/el-button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 選單由後端返回，前端根據角色動態渲染
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="與其他前端的對比"&gt;與其他前端的對比&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Vue3 管理後臺&lt;/th&gt;
&lt;th&gt;Vben5&lt;/th&gt;
&lt;th&gt;Vue2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;定位&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主推，功能最全&lt;/td&gt;
&lt;td&gt;新一代，架構更先進&lt;/td&gt;
&lt;td&gt;經典版，相容 Vue2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI 庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Element Plus&lt;/td&gt;
&lt;td&gt;Ant Design / Element Plus&lt;/td&gt;
&lt;td&gt;Element UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;業務功能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ 全覆蓋&lt;/td&gt;
&lt;td&gt;🚧 逐步遷移中&lt;/td&gt;
&lt;td&gt;✅ 全覆蓋&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開發體驗&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;適用場景&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;新專案首選&lt;/td&gt;
&lt;td&gt;追求最新技術棧&lt;/td&gt;
&lt;td&gt;Vue2 存量專案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 進入前端目錄&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; yudao-ui-admin-vue3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 安裝依賴&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 啟動開發伺服器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm run dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. 訪問&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://localhost:80
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Vben5 管理后台</title><link>https://ruoyiplus.com/zh-tw/ruoyi/vben5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/vben5/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vben5 是 RuoYi 的新一代管理後臺&lt;/strong&gt;，基於 Vben Admin 5.x（Monorepo 大倉架構），架構設計更先進。支援 Ant Design Vue 和 Element Plus 兩種 UI 元件庫，你可以根據團隊偏好自由選擇。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;技術棧&lt;/strong&gt;：Vue3 + TypeScript + Vite + Vben5 + Ant Design Vue / Element Plus&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;使用者畫像&lt;/th&gt;
&lt;th&gt;為什麼選這個&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;追求最新架構的團隊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monorepo + 更先進的狀態管理 + 更強的型別約束&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ant Design 生態使用者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;支援 Ant Design Vue，UI 風格更國際化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;大型專案團隊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vben 元件體系（Vxe Table / Vben Form / Vben Modal）更適合複雜表單和表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;願意接受功能遷移中的狀態&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;部分業務模組仍在從 Vue3 版遷移中&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="專案架構"&gt;專案架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph Monorepo["Monorepo 大倉結構"]
APPS["apps/&lt;br/&gt;應用入口"]
PKGS["packages/&lt;br/&gt;共享包"]
INTERNAL["internal/&lt;br/&gt;內部工具"]
end
subgraph UI["雙 UI 庫支援"]
ANT["Ant Design Vue&lt;br/&gt;風格更國際化"]
EP["Element Plus&lt;br/&gt;風格更國產化"]
end
subgraph COMP["Vben 元件體系"]
TABLE["Vben Vxe Table&lt;br/&gt;高效能表格"]
FORM["Vben Form&lt;br/&gt;宣告式表單"]
MODAL["Vben Modal&lt;br/&gt;彈窗管理"]
DRAWER["Vben Drawer&lt;br/&gt;抽屜元件"]
end
subgraph PAGES["頁面結構（每頁面三檔案）"]
INDEX["index.vue&lt;br/&gt;頁面入口"]
FORM_V["form.vue&lt;br/&gt;表單定義"]
DATA["data.ts&lt;br/&gt;資料邏輯"]
end
APPS --&gt; UI
APPS --&gt; COMP
APPS --&gt; PAGES
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="核心優勢"&gt;核心優勢&lt;/h2&gt;
&lt;h3 id="1-monorepo-大倉架構"&gt;1. Monorepo 大倉架構&lt;/h3&gt;
&lt;p&gt;所有包在一個倉庫中管理，依賴版本統一，程式碼複用更方便。共享的工具函式、型別定義、元件統一放在 &lt;code&gt;packages/&lt;/code&gt; 下。&lt;/p&gt;
&lt;h3 id="2-雙-ui-庫自由切換"&gt;2. 雙 UI 庫自由切換&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 可以選擇使用 Ant Design Vue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ant-design-vue&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 也可以選擇 Element Plus
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ElButton&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ElTable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ElForm&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;element-plus&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同一個業務邏輯，可以適配兩種 UI 風格，這對需要交付給不同客戶的專案尤其有價值。&lt;/p&gt;
&lt;h3 id="3-宣告式元件體系"&gt;3. 宣告式元件體系&lt;/h3&gt;
&lt;p&gt;Vben 的元件體系讓複雜表單和表格的開發效率大幅提升：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-vue" data-lang="vue"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt; &lt;span class="nx"&gt;Vben&lt;/span&gt; &lt;span class="nx"&gt;Vxe&lt;/span&gt; &lt;span class="nx"&gt;Table&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;&lt;span class="nx"&gt;宣告式列定義&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;vxe-grid&lt;/span&gt; &lt;span class="nt"&gt;v-bind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gridOptions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;&amp;lt;!--&lt;/span&gt; &lt;span class="na"&gt;內建分頁&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="na"&gt;排序&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="na"&gt;篩選&lt;/span&gt;&lt;span class="err"&gt;、&lt;/span&gt;&lt;span class="na"&gt;匯出&lt;/span&gt; &lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;vxe-grid&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!--&lt;/span&gt; &lt;span class="nx"&gt;Vben&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;&lt;span class="nx"&gt;宣告式表單&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;vben-form&lt;/span&gt; &lt;span class="nt"&gt;:schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;formSchema&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="功能遷移進度"&gt;功能遷移進度&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模組&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;系統管理&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;td&gt;使用者/角色/選單/部門等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;基礎設施&lt;/td&gt;
&lt;td&gt;✅ 已完成&lt;/td&gt;
&lt;td&gt;程式碼生成/檔案/配置等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BPM 工作流&lt;/td&gt;
&lt;td&gt;✅ 已完成（v2.6.1）&lt;/td&gt;
&lt;td&gt;Ant Design 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRM 客戶管理&lt;/td&gt;
&lt;td&gt;✅ 已完成（v2.6.1）&lt;/td&gt;
&lt;td&gt;Ant Design 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pay 支付中心&lt;/td&gt;
&lt;td&gt;✅ 已完成（v2.6.1）&lt;/td&gt;
&lt;td&gt;Ant Design 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Member 會員&lt;/td&gt;
&lt;td&gt;✅ 已完成（v2.6.1）&lt;/td&gt;
&lt;td&gt;Ant Design 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 大模型&lt;/td&gt;
&lt;td&gt;✅ 已完成（v2.6.1）&lt;/td&gt;
&lt;td&gt;Ant Design 版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERP 進銷存&lt;/td&gt;
&lt;td&gt;🚧 進行中&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mall 商城&lt;/td&gt;
&lt;td&gt;🚧 進行中&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="快速上手"&gt;快速上手&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 進入目錄&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; yudao-ui-admin-vben5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 安裝依賴&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 啟動開發伺服器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm run dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. 訪問&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://localhost:埠號
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>WMS 仓储管理</title><link>https://ruoyiplus.com/zh-tw/plus/wms-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/wms-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，30 DOs / 29 Controllers，選單 ID 起始 5000，構建智慧倉儲與供應鏈協同體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus WMS 圍繞&lt;strong&gt;多倉管理&lt;/strong&gt;、&lt;strong&gt;智慧作業&lt;/strong&gt;、&lt;strong&gt;庫存精準管控&lt;/strong&gt;三大核心進行企業級增強，實現從入庫到出庫的完整倉儲管理閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-wms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_receipt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;收貨管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_shipment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;發貨管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_movement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;庫存移動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;盤點管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_qc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;質檢管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_damage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;報損管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_replenishment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;補貨管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_inventory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;庫存管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_item&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;貨品管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_batch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;批次管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_merchant&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;商戶管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;wms_warehouse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;倉庫管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus WMS 增強架構"
subgraph "倉庫層"
A1[總倉管理]
A2[區域倉管理]
A3[前置倉管理]
A4[門店倉管理]
A5[虛擬倉管理]
end
subgraph "作業層"
B1[入庫管理]
B2[出庫管理]
B3[庫內管理]
B4[盤點管理]
end
subgraph "策略層"
C1[庫位推薦]
C2[波次揀貨]
C3[庫存預警]
C4[補貨建議]
end
subgraph "執行層"
D1[PDA 移動作業]
D2[任務管理]
D3[作業監控]
end
subgraph "管控層"
E1[倉庫許可權]
E2[庫存許可權]
E3[操作審計]
E4[資料安全]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生能力&lt;/th&gt;
&lt;th&gt;RuoYiPlus WMS 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎庫存&lt;/td&gt;
&lt;td&gt;多倉管理+庫位精細化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;入庫管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單入庫&lt;/td&gt;
&lt;td&gt;多來源入庫+質檢流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;出庫管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單出庫&lt;/td&gt;
&lt;td&gt;智慧揀貨+波次管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多維度預警+補貨建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;倉庫作業&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;PDA 移動作業+任務管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;庫存週轉+作業效率分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;倉庫級資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;庫存操作全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-多倉管理體系"&gt;2. 多倉管理體系&lt;/h2&gt;
&lt;h3 id="21-倉庫架構"&gt;2.1 倉庫架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "多倉架構"
subgraph "實體倉"
A1[總倉 Central]
A2[區域倉 Regional]
A3[前置倉 Forward]
A4[門店倉 Store]
A5[委託倉 3PL]
end
subgraph "虛擬倉"
B1[在途倉 In-transit]
B2[待檢倉 QC Pending]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A1 --&gt; A5
A1 --&gt; B1
A1 --&gt; B2
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;倉庫型別&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;總倉/分倉/門店倉/委託倉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;倉庫屬性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區域、型別、容量、作業能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存調撥&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;倉間調撥、調撥審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存同步&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多倉庫存實時同步&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;訂單智慧分倉發貨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-倉庫許可權控制"&gt;2.2 倉庫許可權控制&lt;/h3&gt;
&lt;p&gt;WMS 系統實現基於倉庫和資料範圍的許可權控制，確保庫存資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;倉庫管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本倉庫&lt;/td&gt;
&lt;td&gt;只能管理本倉庫的庫存和作業&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;區域經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本區域倉庫&lt;/td&gt;
&lt;td&gt;可檢視本區域所有倉庫資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;總部運營&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部倉庫&lt;/td&gt;
&lt;td&gt;可檢視所有倉庫資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫存金額&lt;/td&gt;
&lt;td&gt;可檢視庫存金額但不能修改庫存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// WMS 資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;warehouse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InventoryServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 倉庫管理員只能管理本倉庫庫存&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按倉庫過濾資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-庫存操作審計"&gt;2.3 庫存操作審計&lt;/h3&gt;
&lt;p&gt;所有庫存操作均記錄完整審計日誌，支援庫存變動追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[入庫操作] --&gt; B[庫存增加]
C[出庫操作] --&gt; D[庫存減少]
E[調撥操作] --&gt; F[庫存轉移]
G[盤點操作] --&gt; H[庫存調整]
B -.-&gt; I[審計日誌]
D -.-&gt; I
F -.-&gt; I
H -.-&gt; I
I --&gt; J[庫存追溯]
I --&gt; K[合規報告]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;入庫記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄入庫時間、入庫數量、入庫倉庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;出庫記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄出庫時間、出庫數量、出庫倉庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;調撥記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄調撥時間、調出倉庫、調入倉庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;盤點記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄盤點時間、盤點人、盤點差異&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存調整&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄調整時間、調整原因、調整數量&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-庫位精細化管理"&gt;3. 庫位精細化管理&lt;/h2&gt;
&lt;h3 id="31-庫位管理"&gt;3.1 庫位管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "庫位管理"
subgraph "庫位編碼"
A1[倉庫]
A2[區域]
A3[貨架]
A4[層]
A5[位]
end
subgraph "庫位型別"
B1[儲存位]
B2[揀貨位]
B3[暫存位]
B4[異常位]
end
subgraph "庫位狀態"
C1[空置]
C2[佔用]
C3[鎖定]
C4[禁用]
end
subgraph "庫位策略"
D1[庫位推薦]
D2[庫位最佳化]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;WH-ZONE-SHELF-LEVEL-POSITION&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;types&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;儲存位&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;picking&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;揀貨位&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;staging&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;暫存位&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;異常位&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;recommendation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frequency-based&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 按週轉頻次推薦&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hot-zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;A區&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 高頻商品區域&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-入庫與出庫流程"&gt;4. 入庫與出庫流程&lt;/h2&gt;
&lt;h3 id="41-入庫流程"&gt;4.1 入庫流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "入庫流程"
subgraph "採購入庫"
A1[採購訂單]
A2[收貨預約]
A3[收貨登記]
A4[質檢流程]
A5[上架作業]
A6[庫位推薦]
A7[入庫確認]
end
subgraph "退貨入庫"
B1[退貨申請]
B2[退貨審批]
B3[退貨收貨]
B4[質檢流程]
B5[入庫/報廢]
end
subgraph "調撥入庫"
C1[調撥單]
C2[在途跟蹤]
C3[收貨確認]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
A6 --&gt; A7
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="42-出庫流程"&gt;4.2 出庫流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "出庫流程"
subgraph "銷售出庫"
A1[訂單接收]
A2[訂單校驗]
A3[庫存鎖定]
A4[波次生成]
A5[波次分配]
A6[揀貨任務]
A7[揀貨作業]
A8[揀貨複核]
A9[打包作業]
A10[發貨作業]
A11[物流對接]
A12[出庫確認]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
A6 --&gt; A7
A7 --&gt; A8
A8 --&gt; A9
A9 --&gt; A10
A10 --&gt; A11
A11 --&gt; A12
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-庫存預警體系"&gt;5. 庫存預警體系&lt;/h2&gt;
&lt;h3 id="51-預警型別"&gt;5.1 預警型別&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;預警型別&lt;/th&gt;
&lt;th&gt;觸發條件&lt;/th&gt;
&lt;th&gt;響應動作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存不足&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫存 &amp;lt; 安全庫存&lt;/td&gt;
&lt;td&gt;生成補貨建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫存積壓&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫存週轉 &amp;gt; 90天&lt;/td&gt;
&lt;td&gt;促銷建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效期預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;距效期 &amp;lt; 30天&lt;/td&gt;
&lt;td&gt;優先出庫/促銷&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;庫位超載&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫位佔用 &amp;gt; 90%&lt;/td&gt;
&lt;td&gt;庫位調整建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常庫存&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;質量問題鎖定&lt;/td&gt;
&lt;td&gt;異常處理提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-補貨建議"&gt;5.2 補貨建議&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replenishment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;safety-stock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;formula&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;avg_daily_sales * lead_time * safety_factor&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;safety-factor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;suggestions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;stock &amp;lt; safety_stock&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;create_purchase_suggestion&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;high&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;stock &amp;lt; min_stock&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;urgent_purchase&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;critical&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-技術架構"&gt;6. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-wms-plus"
subgraph "wms-biz"
A1[warehouse 倉庫管理]
A2[location 庫位管理]
A3[inventory 庫存管理]
A4[inbound 入庫管理]
A5[outbound 出庫管理]
A6[wave 波次管理]
A7[picking 揀貨管理]
A8[task 任務管理]
A9[alert 預警管理]
A10[replenishment 補貨管理]
A11[counting 盤點管理]
A12[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[traceability 庫存追溯]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B3
A8 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-商業價值"&gt;7. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低庫存成本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;精準庫存、減少積壓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高作業效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧揀貨、移動作業&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提升準確率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;掃碼作業、複核流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;最佳化庫位&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;庫位推薦、週轉最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;預警響應&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;及時補貨、效期管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;倉庫許可權、庫存審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>MES 制造执行系统</title><link>https://ruoyiplus.com/zh-tw/plus/mes-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/mes-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，覆蓋生產計劃、工單管理、工序流轉、質量管控，構建數字化車間與智慧製造執行體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus MES 圍繞&lt;strong&gt;智慧排產&lt;/strong&gt;、&lt;strong&gt;質量管控&lt;/strong&gt;、&lt;strong&gt;物料追溯&lt;/strong&gt;三大核心進行企業級增強，實現從生產計劃到產品入庫的完整製造執行閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_production_plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;生產計劃&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_work_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;工單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_process&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;工序管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_quality&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;質量管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_equipment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;裝置管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;物料管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mes_traceability&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;追溯管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus MES 增強架構"
subgraph "計劃層"
A1[MPS 主生產計劃]
A2[MRP 物料需求]
A3[APS 智慧排產]
end
subgraph "執行層"
B1[工單管理]
B2[工序流轉]
B3[物料管理]
B4[人員管理]
end
subgraph "管控層"
C1[質量管理]
C2[裝置管理]
C3[資料採集]
C4[實時監控]
end
subgraph "追溯層"
D1[物料追溯]
D2[質量追溯]
D3[生產追溯]
end
subgraph "合規層"
E1[操作許可權]
E2[生產審計]
E3[質量審計]
E4[資料加密]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統 MES&lt;/th&gt;
&lt;th&gt;RuoYiPlus MES 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產計劃&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工排產&lt;/td&gt;
&lt;td&gt;智慧排產+APS整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產執行&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;紙質流轉&lt;/td&gt;
&lt;td&gt;電子工單+工序流轉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質量管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;離線質檢&lt;/td&gt;
&lt;td&gt;線上質檢+SPC分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置臺賬&lt;/td&gt;
&lt;td&gt;裝置監控+預測維護&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;物料管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工領料&lt;/td&gt;
&lt;td&gt;智慧配料+物料追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料採集&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工錄入&lt;/td&gt;
&lt;td&gt;自動採集+實時監控&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;車間級許可權控制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;生產全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-生產計劃與排產"&gt;2. 生產計劃與排產&lt;/h2&gt;
&lt;h3 id="21-生產計劃體系"&gt;2.1 生產計劃體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "生產計劃"
subgraph "需求來源"
A1[銷售訂單]
A2[預測訂單]
A3[委外訂單]
end
subgraph "計劃分解"
B1[MPS 主生產計劃]
B2[MRP 物料需求計劃]
B3[採購計劃]
B4[生產計劃]
B5[車間作業計劃]
end
subgraph "智慧排產"
C1[APS 排產演算法]
C2[產能平衡]
C3[裝置分配]
C4[人員分配]
end
subgraph "計劃執行"
D1[工單下發]
D2[執行跟蹤]
D3[進度反饋]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B2 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="22-生產許可權控制"&gt;2.2 生產許可權控制&lt;/h3&gt;
&lt;p&gt;MES 系統實現基於車間和工序的許可權控制，確保生產資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;操作工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本工序&lt;/td&gt;
&lt;td&gt;只能檢視和操作本工序任務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;班組長&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本班組&lt;/td&gt;
&lt;td&gt;可檢視本班組所有生產任務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;車間主任&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本車間&lt;/td&gt;
&lt;td&gt;可檢視本車間所有生產資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部車間&lt;/td&gt;
&lt;td&gt;可檢視所有車間生產資料&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// MES 資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;workshop&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WorkOrderServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 車間主任可檢視本車間工單&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按車間過濾資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-生產操作審計"&gt;2.3 生產操作審計&lt;/h3&gt;
&lt;p&gt;所有生產操作均記錄完整審計日誌，支援生產過程追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工單建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄工單建立人、建立時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工單下發&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄下發時間、接收人&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工序開工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄開工時間、操作人員&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工序完工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄完工時間、完工數量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質檢記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄質檢時間、質檢結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;物料領用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄領用時間、領用數量&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-生產執行管理"&gt;3. 生產執行管理&lt;/h2&gt;
&lt;h3 id="31-生產執行流程"&gt;3.1 生產執行流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "生產執行"
subgraph "工單管理"
A1[工單建立]
A2[工單審批]
A3[工單下發]
A4[工單開工]
A5[工單完工]
A6[工單關閉]
end
subgraph "工序流轉"
B1[工序開工]
B2[工序作業]
B3[工序質檢]
B4[工序完工]
B5[工序流轉]
end
subgraph "物料管理"
C1[物料領用]
C2[物料消耗]
C3[餘料退回]
C4[物料追溯]
end
subgraph "人員管理"
D1[人員派工]
D2[作業記錄]
D3[計件統計]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; A6
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="32-電子工單"&gt;3.2 電子工單&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;電子工單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工單電子化、掃碼開工&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工序流轉&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工序狀態跟蹤、流轉記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;報工管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;完工數量、良品/不良品&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常處理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;異常上報、異常處理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度跟蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時進度、預計完工&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-質量管理增強"&gt;4. 質量管理增強&lt;/h2&gt;
&lt;h3 id="41-質量管理體系"&gt;4.1 質量管理體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "質量管理"
subgraph "質檢配置"
A1[質檢標準]
A2[質檢專案]
A3[質檢方法]
A4[質檢頻次]
end
subgraph "質檢執行"
B1[來料質檢]
B2[首件質檢]
B3[過程質檢]
B4[終檢]
B5[出貨檢驗]
end
subgraph "質量分析"
C1[不良統計]
C2[原因分析]
C3[改善措施]
C4[SPC 分析]
end
subgraph "質量追溯"
D1[批次追溯]
D2[工序追溯]
D3[人員追溯]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-質量審計"&gt;4.2 質量審計&lt;/h3&gt;
&lt;p&gt;所有質檢操作均記錄完整審計日誌，支援質量資料追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質檢記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄質檢時間、質檢員、質檢結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;不良記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄不良型別、不良原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;改善措施&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄改善措施、執行結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SPC 資料&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄 SPC 分析資料&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-物料追溯"&gt;5. 物料追溯&lt;/h2&gt;
&lt;h3 id="51-追溯體系"&gt;5.1 追溯體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "物料追溯"
subgraph "原料追溯"
A1[供應商]
A2[入庫批次]
A3[質檢結果]
A4[儲存位置]
A5[領用記錄]
end
subgraph "生產追溯"
B1[生產工單]
B2[工序流轉]
B3[消耗記錄]
B4[作業人員]
B5[裝置資訊]
B6[質檢記錄]
end
subgraph "產品追溯"
C1[成品批次]
C2[入庫記錄]
C3[出庫記錄]
C4[客戶訂單]
C5[交付記錄]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; B6
B6 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
&lt;/div&gt;
&lt;h3 id="52-追溯查詢"&gt;5.2 追溯查詢&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;查詢方向&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;正向追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;原料 → 成品 → 客戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;反向追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;客戶 → 成品 → 原料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;橫向追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;同批次產品分佈&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-技術架構"&gt;6. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mes-plus"
subgraph "mes-biz"
A1[plan 生產計劃]
A2[scheduling 智慧排產]
A3[workorder 工單管理]
A4[process 工序管理]
A5[quality 質量管理]
A6[equipment 裝置管理]
A7[material 物料管理]
A8[traceability 追溯管理]
A9[collection 資料採集]
A10[monitor 實時監控]
A11[report 報表分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[traceability 追溯審計]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B3
A6 --&gt; B2
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-商業價值"&gt;7. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提升生產效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧排產、工序最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提高產品質量&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;線上質檢、SPC控制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低裝置故障&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;預測維護、OEE最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;實現追溯合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路追溯、批次管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動決策&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時監控、分析報表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生產可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路審計、質量追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>SaaS 多租户</title><link>https://ruoyiplus.com/zh-tw/ruoyi/saas-tenant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/saas-tenant/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;SaaS 多租戶讓你用一套程式碼同時服務多個企業客戶&lt;/strong&gt;，每個客戶（租戶）只能看到自己的資料，彼此完全隔離。無論是做垂直 SaaS 產品還是企業內部多子公司管理，這都是不可或缺的能力。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;兩種方案&lt;/strong&gt;：欄位隔離（輕量級，適合中小規模）和資料庫隔離（物理隔離，適合大規模 SaaS）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;場景&lt;/th&gt;
&lt;th&gt;推薦方案&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SaaS 創業初期&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;欄位隔離&lt;/td&gt;
&lt;td&gt;運維簡單，一臺資料庫搞定&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;大型 SaaS 平臺&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料庫隔離&lt;/td&gt;
&lt;td&gt;物理隔離，安全性高，可獨立備份&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;企業內部多公司&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;欄位隔離&lt;/td&gt;
&lt;td&gt;公司數量有限，邏輯隔離足夠&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;金融/醫療等強合規行業&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料庫隔離&lt;/td&gt;
&lt;td&gt;資料必須物理隔離&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="兩種方案對比"&gt;兩種方案對比&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph COLUMN["方案一：欄位隔離 COLUMN 模式"]
direction TB
C1["所有租戶共享&lt;br/&gt;同一資料庫同一套表"]
C2["每張表新增&lt;br/&gt;tenant_id 欄位"]
C3["SQL 攔截器&lt;br/&gt;自動拼接 WHERE tenant_id = ?"]
C4["優點：運維簡單、資源利用率高&lt;br/&gt;缺點：邏輯隔離，安全性一般"]
C1 --&gt; C2 --&gt; C3 --&gt; C4
end
subgraph DATASOURCE["方案二：資料庫隔離 DATASOURCE 模式"]
direction TB
D1["主庫：共享表&lt;br/&gt;使用者/選單/配置/租戶資訊"]
D2["租戶庫 A：業務表"]
D3["租戶庫 B：業務表"]
D4["租戶庫 C：業務表"]
D5["優點：物理隔離、安全性高、可獨立備份&lt;br/&gt;缺點：運維複雜、資源利用率低"]
D1 --&gt; D2
D1 --&gt; D3
D1 --&gt; D4
D2 &amp; D3 &amp; D4 --&gt; D5
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="詳細對比"&gt;詳細對比&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;欄位隔離（COLUMN）&lt;/th&gt;
&lt;th&gt;資料庫隔離（DATASOURCE）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;隔離級別&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;邏輯隔離&lt;/td&gt;
&lt;td&gt;物理隔離&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;中等（依賴 SQL 攔截）&lt;/td&gt;
&lt;td&gt;高（資料庫級隔離）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資源利用率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;高（共享連線池）&lt;/td&gt;
&lt;td&gt;低（每租戶獨立連線）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;運維複雜度&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;低（單庫運維）&lt;/td&gt;
&lt;td&gt;高（多庫運維）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;擴充套件性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;受限於單庫效能&lt;/td&gt;
&lt;td&gt;可水平擴充套件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料備份&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;需要按 tenant_id 篩選&lt;/td&gt;
&lt;td&gt;每個租戶獨立備份&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;適用規模&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;百級租戶&lt;/td&gt;
&lt;td&gt;千級/萬級租戶&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;技術實現&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MyBatis Plus 攔截器&lt;/td&gt;
&lt;td&gt;dynamic-datasource&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="欄位隔離實現原理"&gt;欄位隔離實現原理&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant U as 使用者（租戶A）
participant APP as 應用層
participant INTERCEPTOR as SQL 攔截器
participant DB as 共享資料庫
U-&gt;&gt;APP: 查詢客戶列表
APP-&gt;&gt;INTERCEPTOR: SELECT * FROM crm_customer
INTERCEPTOR-&gt;&gt;INTERCEPTOR: 自動拼接 tenant_id = 'A'
INTERCEPTOR-&gt;&gt;DB: SELECT * FROM crm_customer&lt;br/&gt;WHERE tenant_id = 'A'
DB--&gt;&gt;APP: 只返回租戶A的資料
APP--&gt;&gt;U: 顯示客戶列表
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;核心機制&lt;/strong&gt;：透過 MyBatis Plus 的多租戶外掛，在執行任何 SQL 前自動新增 &lt;code&gt;tenant_id&lt;/code&gt; 條件，對業務程式碼完全透明。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="資料庫隔離實現原理"&gt;資料庫隔離實現原理&lt;/h2&gt;
&lt;p&gt;基於 &lt;code&gt;dynamic-datasource&lt;/code&gt; 動態資料來源，請求進入時根據當前租戶 ID 切換到對應的資料來源：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spring&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datasource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 主庫（共享表）&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;datasource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;master&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 主庫配置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:mysql://localhost:3306/ruoyi_master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tenant_1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 租戶1的獨立資料庫&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:mysql://localhost:3306/ruoyi_tenant_1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tenant_2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 租戶2的獨立資料庫&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;jdbc:mysql://localhost:3306/ruoyi_tenant_2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="租戶套餐管理"&gt;租戶套餐管理&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
PACKAGE1["基礎版套餐&lt;br/&gt;系統管理 + 基礎功能"]
PACKAGE2["專業版套餐&lt;br/&gt;基礎版 + CRM + ERP"]
PACKAGE3["旗艦版套餐&lt;br/&gt;全部功能"]
租戶A["租戶 A"] --&gt; PACKAGE1
租戶B["租戶 B"] --&gt; PACKAGE2
租戶C["租戶 C"] --&gt; PACKAGE3
&lt;/div&gt;
&lt;p&gt;每個租戶可以繫結一個套餐，套餐定義了該租戶可見的選單和可用功能。支援套餐到期自動禁用。&lt;/p&gt;</description></item><item><title>PM 项目管理</title><link>https://ruoyiplus.com/zh-tw/plus/pm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/pm-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，16 DOs / 15 Controllers，選單 ID 起始 2500，構建數字化專案管理與團隊協作體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus PM 圍繞&lt;strong&gt;專案全生命週期管理&lt;/strong&gt;、&lt;strong&gt;多專案協同排程&lt;/strong&gt;、&lt;strong&gt;專案許可權與審計&lt;/strong&gt;三大核心進行企業級增強，實現從立項到結項的完整專案管理閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-pm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;專案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_task&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;任務管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_warning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;預警管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_cost&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;成本管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_affiliated&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;附屬專案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_track_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;專案跟蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_label&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;標籤管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pm_project_member&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;專案成員&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus PM 增強架構"
subgraph "專案層"
A1[專案立項]
A2[專案計劃]
A3[專案執行]
A4[專案監控]
A5[專案結項]
end
subgraph "能力層"
B1[WBS 工作分解]
B2[甘特圖]
B3[里程碑管理]
B4[資源排程]
B5[風險管理]
end
subgraph "協同層"
C1[任務協同]
C2[工時管理]
C3[文件管理]
C4[溝通協作]
end
subgraph "管控層"
D1[專案許可權]
D2[資料隔離]
D3[操作審計]
D4[合規報告]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生能力&lt;/th&gt;
&lt;th&gt;RuoYiPlus PM 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎專案資訊&lt;/td&gt;
&lt;td&gt;全生命週期管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單任務&lt;/td&gt;
&lt;td&gt;WBS 分解+依賴關係&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;甘特圖+里程碑+關鍵路徑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資源管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;資源排程+工時管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;風險管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;風險識別+應對策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;專案健康度+效能分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;專案級資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;專案全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-專案全生命週期管理"&gt;2. 專案全生命週期管理&lt;/h2&gt;
&lt;h3 id="21-生命週期階段"&gt;2.1 生命週期階段&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[立項階段] --&gt; B[計劃階段]
B --&gt; C[執行階段]
C --&gt; D[監控階段]
D --&gt; E[收尾階段]
A --&gt; A1[需求分析]
A --&gt; A2[可行性評估]
A --&gt; A3[專案立項審批]
B --&gt; B1[WBS 分解]
B --&gt; B2[進度計劃]
B --&gt; B3[資源計劃]
B --&gt; B4[風險計劃]
C --&gt; C1[任務分配]
C --&gt; C2[任務執行]
C --&gt; C3[工時填報]
C --&gt; C4[進度彙報]
D --&gt; D1[進度監控]
D --&gt; D2[偏差分析]
D --&gt; D3[變更管理]
D --&gt; D4[風險預警]
E --&gt; E1[驗收評審]
E --&gt; E2[經驗總結]
E --&gt; E3[專案歸檔]
&lt;/div&gt;
&lt;h3 id="22-專案資料許可權"&gt;2.2 專案資料許可權&lt;/h3&gt;
&lt;p&gt;PM 系統實現基於專案和角色的資料許可權控制，確保專案資料按組織架構嚴格隔離。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案成員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;參與的專案&lt;/td&gt;
&lt;td&gt;只能檢視和參與自己被分配的專案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;負責的專案&lt;/td&gt;
&lt;td&gt;可管理專案全部資料，包括任務分配、進度調整&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門專案&lt;/td&gt;
&lt;td&gt;可檢視本部門所有專案的進度和資源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部專案&lt;/td&gt;
&lt;td&gt;可檢視所有專案資料並進行組合分析&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// PM 資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;project&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProjectServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 專案經理可管理本專案全部資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按專案過濾任務、工時、文件&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 專案成員許可權&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;project_member&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TaskServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 專案成員只能檢視自己負責的任務&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按任務負責人過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-專案操作審計"&gt;2.3 專案操作審計&lt;/h3&gt;
&lt;p&gt;所有專案關鍵操作均記錄完整審計日誌，支援專案過程追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審計事件採集"
A1[專案立項]
A2[計劃變更]
A3[任務分配]
A4[進度調整]
A5[里程碑變更]
A6[專案結項]
end
subgraph "審計處理"
B1[變更對比]
B2[風險評分]
B3[規則匹配]
end
subgraph "審計儲存"
C1[操作日誌]
C2[變更歷史]
C3[區塊鏈存證]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;保留期限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案立項&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄立項人、立項時間、專案目標&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;計劃變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄變更前後對比、變更原因&lt;/td&gt;
&lt;td&gt;專案生命週期+3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄分配人、被分配人、分配時間&lt;/td&gt;
&lt;td&gt;專案生命週期+3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度調整&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄調整前後工期、調整原因&lt;/td&gt;
&lt;td&gt;專案生命週期+3年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;里程碑變更&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄變更內容、審批人&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案結項&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄結項時間、驗收結果&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-wbs-工作分解與任務管理"&gt;3. WBS 工作分解與任務管理&lt;/h2&gt;
&lt;h3 id="31-wbs-分解結構"&gt;3.1 WBS 分解結構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "WBS 工作分解"
A[專案] --&gt; B[階段1]
A --&gt; C[階段2]
A --&gt; D[階段3]
B --&gt; B1[任務1.1]
B --&gt; B2[任務1.2]
B --&gt; B3[任務1.3]
C --&gt; C1[任務2.1]
C --&gt; C2[任務2.2]
D --&gt; D1[任務3.1]
D --&gt; D2[任務3.2]
D --&gt; D3[任務3.3]
B1 --&gt; B1a[子任務1.1.1]
B1 --&gt; B1b[子任務1.1.2]
end
&lt;/div&gt;
&lt;h3 id="32-任務管理"&gt;3.2 任務管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務定義、優先順序、工期估算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按技能/負載智慧分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務依賴&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FS/FF/SS/SF 依賴關係&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;子任務&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多級子任務分解&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務看板&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;看板檢視、列表檢視&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;到期提醒、超時預警&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="33-任務狀態流轉"&gt;3.3 任務狀態流轉&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[待處理] --&gt; B[進行中]
B --&gt; C[待驗收]
C --&gt; D[已完成]
B --&gt; E[已阻塞]
E --&gt; B
C --&gt; F[驗收不透過]
F --&gt; B
D --&gt; G[已關閉]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="4-進度管控"&gt;4. 進度管控&lt;/h2&gt;
&lt;h3 id="41-甘特圖"&gt;4.1 甘特圖&lt;/h3&gt;
&lt;div class="mermaid"&gt;gantt
title 專案進度甘特圖示例
dateFormat YYYY-MM-DD
section 需求階段
需求分析 :a1, 2024-01-01, 15d
需求評審 :a2, after a1, 5d
section 設計階段
概要設計 :b1, after a2, 10d
詳細設計 :b2, after b1, 15d
設計評審 :b3, after b2, 5d
section 開發階段
編碼開發 :c1, after b3, 30d
單元測試 :c2, after c1, 10d
section 測試階段
整合測試 :d1, after c2, 15d
驗收測試 :d2, after d1, 10d
section 上線階段
部署上線 :e1, after d2, 5d
&lt;/div&gt;
&lt;h3 id="42-里程碑管理"&gt;4.2 里程碑管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[里程碑1: 需求確認] --&gt; B[里程碑2: 設計完成]
B --&gt; C[里程碑3: 開發完成]
C --&gt; D[里程碑4: 測試透過]
D --&gt; E[里程碑5: 正式上線]
A -.-&gt; A1[計劃: 01-20]
B -.-&gt; B1[計劃: 02-15]
C -.-&gt; C1[計劃: 03-30]
D -.-&gt; D1[計劃: 04-20]
E -.-&gt; E1[計劃: 05-01]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;里程碑設定&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;關鍵節點定義與標記&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;里程碑完成狀態實時追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;偏差預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;里程碑延期自動預警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;變更管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;里程碑變更需審批流程&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-關鍵路徑分析"&gt;4.3 關鍵路徑分析&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[任務A: 10d] --&gt; C[任務C: 15d]
C --&gt; E[任務E: 10d]
A --&gt; D[任務D: 5d]
D --&gt; F[任務F: 8d]
F --&gt; E
B[任務B: 20d] --&gt; E
style A fill:none
style C fill:none
style E fill:none
style B fill:none
&lt;/div&gt;
&lt;p&gt;關鍵路徑：B → E = 30天（專案最短工期）&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-資源與工時管理"&gt;5. 資源與工時管理&lt;/h2&gt;
&lt;h3 id="51-資源排程"&gt;5.1 資源排程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資源排程"
A[資源需求] --&gt; B{資源匹配}
B --&gt; C[技能匹配]
B --&gt; D[負載評估]
B --&gt; E[可用性檢查]
C --&gt; F[資源分配]
D --&gt; F
E --&gt; F
F --&gt; G[衝突檢測]
G --&gt; H{有衝突?}
H --&gt;|是| I[資源協調]
H --&gt;|否| J[確認分配]
I --&gt; J
end
&lt;/div&gt;
&lt;h3 id="52-工時管理"&gt;5.2 工時管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工時填報&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按任務填報每日工時&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工時審批&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工時填報審批流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工時統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人/團隊/專案工時統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工時分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工時利用率、加班分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本核算&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於工時的人力成本核算&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timesheet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;daily-max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;24h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每日最大工時&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;weekly-max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;60h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每週最大工時&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;approval-required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 需要審批&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overtime-threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;8h &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 加班閾值&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hourly-rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 預設時薪&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;overtime-multiplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 加班倍率&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-風險管理"&gt;6. 風險管理&lt;/h2&gt;
&lt;h3 id="61-風險管理流程"&gt;6.1 風險管理流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "風險管理"
A[風險識別] --&gt; B[風險評估]
B --&gt; C[風險分級]
C --&gt; D[應對策略]
D --&gt; E[風險監控]
E --&gt; F{風險發生?}
F --&gt;|是| G[應急響應]
F --&gt;|否| E
G --&gt; H[風險關閉]
end
&lt;/div&gt;
&lt;h3 id="62-風險分級"&gt;6.2 風險分級&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;風險等級&lt;/th&gt;
&lt;th&gt;影響程度&lt;/th&gt;
&lt;th&gt;發生機率&lt;/th&gt;
&lt;th&gt;響應要求&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;緊急風險&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案停滯&lt;/td&gt;
&lt;td&gt;高機率&lt;/td&gt;
&lt;td&gt;立即制定應對方案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高風險&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;嚴重延期&lt;/td&gt;
&lt;td&gt;較高機率&lt;/td&gt;
&lt;td&gt;3天內製定應對方案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中風險&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區域性影響&lt;/td&gt;
&lt;td&gt;中等機率&lt;/td&gt;
&lt;td&gt;1周內製定預防措施&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;低風險&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;輕微影響&lt;/td&gt;
&lt;td&gt;低機率&lt;/td&gt;
&lt;td&gt;持續監控&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-專案資料分析"&gt;7. 專案資料分析&lt;/h2&gt;
&lt;h3 id="71-專案健康度"&gt;7.1 專案健康度&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "專案健康度評估"
A[進度偏差] --&gt; E[健康度評分]
B[成本偏差] --&gt; E
C[質量指標] --&gt; E
D[風險狀態] --&gt; E
E --&gt; F{健康度}
F --&gt;|≥90| G[綠色-健康]
F --&gt;|70-89| H[黃色-關注]
F --&gt;|&lt;70| I[紅色-預警]
end
&lt;/div&gt;
&lt;h3 id="72-分析維度"&gt;7.2 分析維度&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分析維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;計劃完成率、里程碑達成率、進度偏差率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資源分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資源利用率、工時分佈、負載均衡度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;預算執行率、人力成本、偏差分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;質量分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;缺陷密度、返工率、驗收透過率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效能分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務完成效率、團隊協作效率&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="8-多專案管理-pmo"&gt;8. 多專案管理 (PMO)&lt;/h2&gt;
&lt;h3 id="81-pmo-檢視"&gt;8.1 PMO 檢視&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "PMO 多專案管理"
subgraph "專案組合"
A1[戰略專案A]
A2[戰略專案B]
A3[常規專案C]
A4[常規專案D]
end
subgraph "資源池"
B1[開發資源池]
B2[測試資源池]
B3[設計資源池]
end
subgraph "PMO 管控"
C1[專案優先順序]
C2[資源協調]
C3[組合分析]
C4[健康度監控]
end
end
A1 --&gt; C1
A2 --&gt; C1
A3 --&gt; C2
A4 --&gt; C2
C1 --&gt; C3
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;h3 id="82-pmo-許可權"&gt;8.2 PMO 許可權&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO 總監&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部專案&lt;/td&gt;
&lt;td&gt;可檢視所有專案資料、調整專案優先順序&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PMO 專員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指定專案組合&lt;/td&gt;
&lt;td&gt;可檢視指定專案組合資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資源經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資源池&lt;/td&gt;
&lt;td&gt;可管理資源分配但不能檢視專案業務資料&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="9-技術架構"&gt;9. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-pm-plus"
subgraph "pm-biz"
A1[project 專案管理]
A2[wbs WBS分解]
A3[task 任務管理]
A4[schedule 進度管理]
A5[milestone 里程碑]
A6[resource 資源管理]
A7[timesheet 工時管理]
A8[risk 風險管理]
A9[document 文件管理]
A10[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[compliance 合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B1
A7 --&gt; B2
A8 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="10-商業價值"&gt;10. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度可控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;甘特圖、里程碑、關鍵路徑分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資源最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧排程、負載均衡、工時管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;風險預控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;風險識別、預警機制、應急響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協同高效&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務協同、文件共享、溝通協作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案健康度、效能分析、決策支援&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案級許可權、全鏈路審計、變更追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>代码生成进阶</title><link>https://ruoyiplus.com/zh-tw/ruoyi/new-feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/new-feature/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;程式碼生成器是 RuoYi 開發效率的「核武器」&lt;/strong&gt;。常規的單表 CRUD 已經不能滿足複雜業務場景，這裡介紹三種進階生成模式，覆蓋了企業開發中最常見的複雜頁面形態。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;有了這些能力，一個包含主子表、審批流的複雜業務頁面，從「寫幾天」變成「配幾分鐘」。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;場景&lt;/th&gt;
&lt;th&gt;推薦模式&lt;/th&gt;
&lt;th&gt;效果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訂單+明細&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主子表-標準模式&lt;/td&gt;
&lt;td&gt;同一彈窗，主子表同框編輯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工單+工序&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主子表-內嵌模式&lt;/td&gt;
&lt;td&gt;列表內直接展開子表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;採購訂單+明細&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主子表-ERP 模式&lt;/td&gt;
&lt;td&gt;主子表獨立列表，獨立表單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門樹/分類樹&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;樹形表模式&lt;/td&gt;
&lt;td&gt;自動生成樹形表格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;移動端頁面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;uni-app 模式&lt;/td&gt;
&lt;td&gt;生成適配 H5/小程式的頁面&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="三種主子表生成模式"&gt;三種主子表生成模式&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 標準模式["模式一：標準模式"]
S1["主表列表頁"]
S2["點選新增 → 彈窗"]
S3["彈窗內：主表表單 + 子表表格&lt;br/&gt;在同一彈窗中編輯"]
S1 --&gt; S2 --&gt; S3
end
subgraph 內嵌模式["模式二：內嵌模式"]
I1["主表列表頁"]
I2["展開行 → 內嵌子表&lt;br/&gt;主錶行下方直接顯示子表"]
I1 --&gt; I2
end
subgraph ERP模式["模式三：ERP 模式"]
E1["主表獨立列表"]
E2["子表獨立列表&lt;br/&gt;（透過主表 ID 關聯）"]
E3["主表獨立表單"]
E4["子表獨立表單"]
E1 --&gt; E2
E3 --&gt; E4
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="各模式適用場景"&gt;各模式適用場景&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模式&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;使用者體驗&lt;/th&gt;
&lt;th&gt;代表業務&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;標準模式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主子表資料量小，主表+子表需要一起填寫&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐ 操作流暢&lt;/td&gt;
&lt;td&gt;問卷+題目、配置+配置項&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內嵌模式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;需要快速檢視子表資料，不想跳轉&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐ 資訊密度高&lt;/td&gt;
&lt;td&gt;工單+工序、任務+子任務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ERP 模式&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;主子表各有獨立業務邏輯，資料量大&lt;/td&gt;
&lt;td&gt;⭐⭐⭐ 靈活度高&lt;/td&gt;
&lt;td&gt;採購訂單+明細、銷售訂單+明細&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="樹形表程式碼生成"&gt;樹形表程式碼生成&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
DEPT["部門表&lt;br/&gt;id / parent_id / name"]
GEN["程式碼生成器&lt;br/&gt;識別 parent_id 欄位"]
OUT["生成樹形表格頁面&lt;br/&gt;el-tree + 拖拽排序"]
DEPT --&gt; GEN --&gt; OUT
&lt;/div&gt;
&lt;p&gt;支援無限層級，自動生成展開/摺疊、拖拽排序、新增子節點等功能。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="uni-app-程式碼生成"&gt;uni-app 程式碼生成&lt;/h2&gt;
&lt;p&gt;為移動端生成完整的頁面程式碼，支援：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;列表頁面（下拉重新整理、上拉載入）&lt;/li&gt;
&lt;li&gt;表單頁面&lt;/li&gt;
&lt;li&gt;詳情頁面&lt;/li&gt;
&lt;li&gt;API 請求封裝&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="前端版本支援"&gt;前端版本支援&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;生成目標&lt;/th&gt;
&lt;th style="text-align: center"&gt;Vue3 管理後臺&lt;/th&gt;
&lt;th style="text-align: center"&gt;Vben5&lt;/th&gt;
&lt;th style="text-align: center"&gt;Vue2&lt;/th&gt;
&lt;th style="text-align: center"&gt;uni-app&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;單表 CRUD&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主子表-標準&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主子表-內嵌&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主子表-ERP&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;樹形表&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用流程"&gt;使用流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在資料庫中建好表結構&lt;/li&gt;
&lt;li&gt;在「程式碼生成」選單中匯入表&lt;/li&gt;
&lt;li&gt;配置生成選項（模組名、業務名、類名、生成模式）&lt;/li&gt;
&lt;li&gt;預覽並生成程式碼&lt;/li&gt;
&lt;li&gt;將程式碼複製到專案中，配置選單即可使用&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>BPM 工作流</title><link>https://ruoyiplus.com/zh-tw/ruoyi/bpm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/bpm/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;BPM 工作流是企業的「審批中樞」&lt;/strong&gt;——請假、報銷、採購、合同、用章……幾乎所有需要「多級審批」的場景，都能在這裡建模和流轉。基於 Flowable 引擎，提供仿釘釘/飛書和 BPMN 雙設計器，非技術人員也能上手設計流程。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：告別微信群審批、郵件審批、紙質審批，把審批流程變成結構化的可追溯系統。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;BPM 如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;審批流程靠口頭/微信，無記錄&lt;/td&gt;
&lt;td&gt;所有審批留痕，可追溯每一步操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;審批規則靠人記憶，容易遺漏&lt;/td&gt;
&lt;td&gt;流程模板固化規則，自動路由到正確審批人&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;跨部門審批溝通成本高&lt;/td&gt;
&lt;td&gt;自動流轉，無需人工通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;審批超時無人跟進&lt;/td&gt;
&lt;td&gt;超時自動提醒，支援自動審批/跳過&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;組織變動導致審批人變化&lt;/td&gt;
&lt;td&gt;審批人按角色/部門動態計算，不寫死具體人&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
ADMIN["流程管理員&lt;br/&gt;設計流程模板&lt;br/&gt;部署和釋出流程"]
APPLICANT["發起人&lt;br/&gt;提交申請&lt;br/&gt;檢視審批進度&lt;br/&gt;撤銷申請"]
APPROVER["審批人&lt;br/&gt;審批/駁回/轉辦/加簽&lt;br/&gt;檢視待辦/已辦"]
COPYER["抄送人&lt;br/&gt;接收審批結果通知&lt;br/&gt;無需操作"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="功能協作流程"&gt;功能協作流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant A as 發起人
participant F as 流程引擎
participant P1 as 審批人1（部門主管）
participant P2 as 審批人2（財務經理）
participant B as 業務系統（如 ERP）
A-&gt;&gt;F: 發起流程（如採購申請）
F-&gt;&gt;B: 關聯業務資料（採購訂單 ID）
F-&gt;&gt;P1: 推送待辦任務
P1-&gt;&gt;F: 審批透過
F-&gt;&gt;P2: 推送待辦任務
P2-&gt;&gt;F: 審批透過
F-&gt;&gt;B: 回撥：流程完成，更新業務狀態
F-&gt;&gt;A: 通知：申請已透過
Note over F: 若任一審批人駁回&lt;br/&gt;流程回退到發起人
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="雙設計器對比"&gt;雙設計器對比&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph SIMPLE["SIMPLE 設計器（仿釘釘/飛書）"]
S1["拖拽式操作"]
S2["適合簡單審批鏈"]
S3["學習成本低"]
S4["非技術人員可用"]
end
subgraph BPMN["BPMN 設計器"]
B1["標準 BPMN 2.0"]
B2["支援複雜分支/並行"]
B3["需要一定學習"]
B4["技術人員使用"]
end
SIMPLE -.-&gt;|複雜場景可升級| BPMN
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th style="text-align: center"&gt;SIMPLE 設計器&lt;/th&gt;
&lt;th style="text-align: center"&gt;BPMN 設計器&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;上手難度&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐ 極低&lt;/td&gt;
&lt;td style="text-align: center"&gt;⭐⭐⭐ 中等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;適用人群&lt;/td&gt;
&lt;td style="text-align: center"&gt;業務人員、HR、行政&lt;/td&gt;
&lt;td style="text-align: center"&gt;開發人員、流程專家&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支援節點&lt;/td&gt;
&lt;td style="text-align: center"&gt;審批、抄送、條件分支&lt;/td&gt;
&lt;td style="text-align: center"&gt;全部 BPMN 2.0 節點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;並行分支&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;包容分支&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;子流程&lt;/td&gt;
&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="審批操作全景"&gt;審批操作全景&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
審批節點 --&gt;|透過| 下一節點
審批節點 --&gt;|駁回| 退回節點["退回指定節點&lt;br/&gt;或退回到發起人"]
審批節點 --&gt;|轉辦| 轉辦人["轉給其他人處理&lt;br/&gt;自己不再參與"]
審批節點 --&gt;|委派| 委派人["委派他人處理&lt;br/&gt;處理完回到自己"]
審批節點 --&gt;|加簽| 加簽人["增加審批人&lt;br/&gt;會籤/或籤"]
審批節點 --&gt;|減籤| 減籤人["減少審批人"]
審批節點 --&gt;|終止| 結束節點["流程直接結束&lt;br/&gt;（特殊許可權）"]
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="流程控制能力"&gt;流程控制能力&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;控制型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;典型場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;條件分支&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;根據表單資料走不同審批路徑&lt;/td&gt;
&lt;td&gt;金額 &amp;lt; 5000 無需總經理審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;並行分支&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多人同時審批，都透過才繼續&lt;/td&gt;
&lt;td&gt;多部門並行會籤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;包容分支&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多人同時審批，任一透過則繼續&lt;/td&gt;
&lt;td&gt;或籤場景&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;觸發節點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動執行服務任務&lt;/td&gt;
&lt;td&gt;審批透過後自動建立 ERP 單據&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;延遲節點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;等待指定時間後繼續&lt;/td&gt;
&lt;td&gt;合同到期前 7 天提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;超時審批&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;超時自動處理&lt;/td&gt;
&lt;td&gt;48 小時未審批自動透過/拒絕&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定時提醒待辦&lt;/td&gt;
&lt;td&gt;每天早上 9 點推送待辦彙總&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="與業務系統的整合"&gt;與業務系統的整合&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
BPM["BPM 流程引擎"]
subgraph 整合場景
ERP_APPROVAL["ERP 採購審批&lt;br/&gt;採購訂單 → BPM 審批 → 自動入庫"]
CRM_APPROVAL["CRM 合同審批&lt;br/&gt;合同草稿 → BPM 審批 → 合同生效"]
OA_APPROVAL["OA 通用審批&lt;br/&gt;請假/報銷/用章/外出"]
end
BPM --&gt; ERP_APPROVAL
BPM --&gt; CRM_APPROVAL
BPM --&gt; OA_APPROVAL
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;整合方式&lt;/strong&gt;：業務模組透過 BPM 提供的 API 發起流程、查詢審批狀態、處理審批迴調，無需關心 Flowable 底層細節。&lt;/p&gt;</description></item><item><title>IOT 物联网平台</title><link>https://ruoyiplus.com/zh-tw/plus/iot-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/iot-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，涵蓋裝置管理、裝置分組、告警配置與告警記錄，構建裝置連線、資料採集與智慧運維體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus IOT 圍繞&lt;strong&gt;多協議裝置接入&lt;/strong&gt;、&lt;strong&gt;實時資料處理&lt;/strong&gt;、&lt;strong&gt;裝置安全管控&lt;/strong&gt;三大核心進行企業級增強，實現從裝置接入到智慧運維的完整物聯網解決方案。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-iot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_device&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;裝置管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_device_group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;裝置分組&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_alert_config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;告警配置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;iot_alert_record&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;告警記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus IOT 增強架構"
subgraph "裝置接入層"
A1[MQTT 協議]
A2[CoAP 協議]
A3[HTTP/HTTPS]
A4[Modbus]
A5[OPC-UA]
A6[LoRaWAN]
end
subgraph "閘道器層"
B1[邊緣閘道器]
B2[協議閘道器]
B3[安全閘道器]
end
subgraph "平臺層"
C1[裝置管理]
C2[資料採集]
C3[規則引擎]
C4[告警管理]
end
subgraph "應用層"
D1[實時監控]
D2[預測運維]
D3[資料分析]
end
subgraph "安全層"
E1[裝置認證]
E2[許可權控制]
E3[操作審計]
E4[資料加密]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
C1 --&gt; E1
C2 --&gt; E2
C3 --&gt; E3
C4 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統方案&lt;/th&gt;
&lt;th&gt;RuoYiPlus IOT 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置接入&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單協議接入&lt;/td&gt;
&lt;td&gt;多協議多閘道器接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料採集&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工採集&lt;/td&gt;
&lt;td&gt;自動採集實時上報&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料處理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單儲存&lt;/td&gt;
&lt;td&gt;流式處理+規則引擎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置臺賬&lt;/td&gt;
&lt;td&gt;裝置生命週期管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;運維監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;離線監控&lt;/td&gt;
&lt;td&gt;實時監控+預測運維&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;歷史查詢&lt;/td&gt;
&lt;td&gt;實時分析+AI預測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;裝置級許可權控制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;裝置操作全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-多協議裝置接入"&gt;2. 多協議裝置接入&lt;/h2&gt;
&lt;h3 id="21-協議適配架構"&gt;2.1 協議適配架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "協議適配層"
subgraph "IoT 標準協議"
A1[MQTT]
A2[CoAP]
end
subgraph "通用協議"
B1[HTTP/HTTPS]
B2[TCP/UDP]
end
subgraph "工業協議"
C1[Modbus]
C2[OPC-UA]
end
subgraph "低功耗協議"
D1[LoRaWAN]
end
end
subgraph "閘道器層"
E1[邊緣閘道器]
E2[協議閘道器]
E3[安全閘道器]
end
subgraph "平臺層"
F1[裝置註冊]
F2[裝置認證]
F3[連線管理]
F4[資料上報]
end
A1 --&gt; E1
A2 --&gt; E1
B1 --&gt; E2
B2 --&gt; E2
C1 --&gt; E2
C2 --&gt; E2
D1 --&gt; E3
E1 --&gt; F1
E2 --&gt; F1
E3 --&gt; F1
F1 --&gt; F2
F2 --&gt; F3
F3 --&gt; F4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;協議型別&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;特點&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MQTT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IoT 標準&lt;/td&gt;
&lt;td&gt;輕量、釋出訂閱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CoAP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資源受限裝置&lt;/td&gt;
&lt;td&gt;UDP、低功耗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通用接入&lt;/td&gt;
&lt;td&gt;RESTful、易整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Modbus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工業裝置&lt;/td&gt;
&lt;td&gt;PLC、感測器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OPC-UA&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工業自動化&lt;/td&gt;
&lt;td&gt;MES/SCADA整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LoRaWAN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;廣域物聯網&lt;/td&gt;
&lt;td&gt;低功耗、遠距離&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-裝置生命週期管理"&gt;3. 裝置生命週期管理&lt;/h2&gt;
&lt;h3 id="31-裝置生命週期"&gt;3.1 裝置生命週期&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[裝置註冊] --&gt; B[裝置認證]
B --&gt; C[裝置啟用]
C --&gt; D[裝置執行]
D --&gt; E[裝置運維]
E --&gt; F[裝置退役]
A --&gt; A1[裝置建模]
A --&gt; A2[裝置型別]
A --&gt; A3[裝置屬性]
B --&gt; B1[Token認證]
B --&gt; B2[證書認證]
B --&gt; B3[金鑰認證]
C --&gt; C1[裝置連線]
C --&gt; C2[資料上報]
C --&gt; C3[命令下發]
D --&gt; D1[狀態監控]
D --&gt; D2[告警管理]
D --&gt; D3[遠端維護]
E --&gt; E1[裝置診斷]
E --&gt; E2[故障處理]
E --&gt; E3[韌體升級]
F --&gt; F1[裝置停用]
F --&gt; F2[裝置登出]
F --&gt; F3[資料歸檔]
&lt;/div&gt;
&lt;h3 id="32-裝置許可權控制"&gt;3.2 裝置許可權控制&lt;/h3&gt;
&lt;p&gt;IOT 平臺實現裝置級許可權控制，確保裝置操作安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單個裝置&lt;/td&gt;
&lt;td&gt;只能操作指定裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置分組&lt;/td&gt;
&lt;td&gt;可操作分組內所有裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;區域級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;區域裝置&lt;/td&gt;
&lt;td&gt;可操作區域內所有裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;全域性級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部裝置&lt;/td&gt;
&lt;td&gt;可操作所有裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 裝置許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;device_group&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DeviceServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 裝置組管理員只能操作本組裝置&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按裝置分組過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="33-裝置操作審計"&gt;3.3 裝置操作審計&lt;/h3&gt;
&lt;p&gt;所有裝置操作均記錄完整審計日誌，支援裝置操作追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "裝置審計"
A[裝置操作] --&gt; B[操作記錄]
B --&gt; C[命令下發]
B --&gt; D[配置更新]
B --&gt; E[韌體升級]
B --&gt; F[資料查詢]
C --&gt; G[審計日誌]
D --&gt; G
E --&gt; G
F --&gt; G
G --&gt; H[操作追溯]
G --&gt; I[合規報告]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置註冊&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄裝置註冊資訊、註冊時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置認證&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄認證方式、認證結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;命令下發&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄命令內容、下發時間、執行結果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;配置更新&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄配置變更、變更前後對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;韌體升級&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄升級版本、升級時間、升級結果&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-資料採集與處理"&gt;4. 資料採集與處理&lt;/h2&gt;
&lt;h3 id="41-資料處理流程"&gt;4.1 資料處理流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資料處理"
subgraph "資料採集"
A1[裝置上報]
A2[資料解析]
A3[格式轉換]
A4[資料校驗]
A5[資料清洗]
end
subgraph "資料處理"
B1[流式處理]
B2[實時計算]
B3[規則引擎]
B4[資料聚合]
end
subgraph "資料儲存"
C1[時序資料庫]
C2[關聯式資料庫]
C3[物件儲存]
end
subgraph "資料分發"
D1[訊息佇列]
D2[下游系統]
D3[實時推送]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
B4 --&gt; C2
B4 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="42-規則引擎"&gt;4.2 規則引擎&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;iot&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;溫度告警&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;temperature &amp;gt; 80&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高溫告警&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;運維人員&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;裝置降溫&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;裝置聯動&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;motion_detected == true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;light_on&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;camera_record&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;資料聚合&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;time_window = 5m&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;aggregate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;avg(temperature)&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;聚合資料&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;規則型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;告警規則&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;閾值告警、趨勢告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;聯動規則&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置聯動、場景聯動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;計算規則&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時計算、資料聚合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通知規則&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;訊息推送、告警通知&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-裝置運維增強"&gt;5. 裝置運維增強&lt;/h2&gt;
&lt;h3 id="51-告警管理"&gt;5.1 告警管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "告警流程"
A[規則觸發] --&gt; B[告警生成]
B --&gt; C[告警分級]
C --&gt; D[告警通知]
D --&gt; E[告警確認]
E --&gt; F[告警處理]
F --&gt; G[告警關閉]
C --&gt; C1[緊急告警]
C --&gt; C2[重要告警]
C --&gt; C3[一般告警]
C --&gt; C4[提示告警]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;告警級別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;響應要求&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;緊急告警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置故障、安全風險&lt;/td&gt;
&lt;td&gt;立即響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;重要告警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;引數異常、效能下降&lt;/td&gt;
&lt;td&gt;30分鐘響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;一般告警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;輕微異常、預警提示&lt;/td&gt;
&lt;td&gt;2小時響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提示告警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資訊通知、狀態變更&lt;/td&gt;
&lt;td&gt;當日處理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-預測性運維"&gt;5.2 預測性運維&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;故障預測&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基於AI模型預測故障&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;壽命預測&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置壽命預測&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;維護建議&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧維護建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;備件預警&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;備件需求預測&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-技術架構"&gt;6. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-iot-plus"
subgraph "iot-biz"
A1[device 裝置管理]
A2[protocol 協議適配]
A3[gateway 閘道器管理]
A4[data 資料處理]
A5[rule 規則引擎]
A6[alert 告警管理]
A7[monitor 實時監控]
A8[maintenance 運維管理]
A9[edge 邊緣計算]
A10[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[security 安全認證]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B2
A5 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-商業價值"&gt;7. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;裝置可視&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時監控、狀態透明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;運維智慧&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;預測運維、智慧告警&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;降低故障&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;故障預測、快速響應&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料價值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料分析、AI賦能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;邊緣智慧&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本地計算、邊雲協同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;裝置認證、操作審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Asset 资产管理</title><link>https://ruoyiplus.com/zh-tw/plus/asset-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/asset-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，4 DOs / 4 Controllers，選單 ID 起始 10000，構建企業資產全生命週期數字化管理體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Asset 在 Yudao OA 原生資產管理基礎上，圍繞&lt;strong&gt;資產全生命週期管理&lt;/strong&gt;、&lt;strong&gt;多維度資產核算&lt;/strong&gt;、&lt;strong&gt;智慧盤點與 IoT 追蹤&lt;/strong&gt;、&lt;strong&gt;資產許可權與審計&lt;/strong&gt;五大核心進行企業級增強，實現從採購入庫到報廢處置的完整資產閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-asset&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資產分類&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_goods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資產物品&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資產資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;asset_lifecycle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資產生命週期&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Asset 增強架構"
subgraph "資產臺賬層"
A1[固定資產]
A2[無形資產]
A3[IT 資產]
A4[低值易耗品]
end
subgraph "生命週期層"
B1[採購入庫]
B2[領用分配]
B3[調撥轉移]
B4[維修保養]
B5[報廢處置]
end
subgraph "核算層"
C1[折舊管理]
C2[價值評估]
C3[減值處理]
C4[成本分攤]
end
subgraph "智慧層"
D1[IoT 資產追蹤]
D2[智慧盤點]
D3[RFID/條碼]
D4[資產分析]
end
subgraph "管控層"
E1[資產許可權]
E2[資料隔離]
E3[操作審計]
E4[合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
D4 --&gt; E1
E1 --&gt; E2
E2 --&gt; E3
E3 --&gt; E4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生能力&lt;/th&gt;
&lt;th&gt;RuoYiPlus Asset 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產型別&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎分類&lt;/td&gt;
&lt;td&gt;固定/無形/IT/低值易耗品全覆蓋&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;生命週期&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;領用歸還&lt;/td&gt;
&lt;td&gt;採購→領用→調撥→維修→報廢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;折舊管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多種折舊法+自動計提&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產盤點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工盤點&lt;/td&gt;
&lt;td&gt;RFID/條碼智慧盤點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IoT 追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;實時定位+電子圍欄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務對接&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;與 ERP 財務模組聯動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;組織級+資產類別級資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;資產全鏈路審計+區塊鏈存證&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-資產全生命週期管理"&gt;2. 資產全生命週期管理&lt;/h2&gt;
&lt;h3 id="21-生命週期階段"&gt;2.1 生命週期階段&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[採購入庫] --&gt; B[領用分配]
B --&gt; C[在用管理]
C --&gt; D[調撥轉移]
D --&gt; E[維修保養]
E --&gt; F[報廢處置]
A --&gt; A1[採購申請]
A --&gt; A2[驗收入庫]
A --&gt; A3[資產編號]
A --&gt; A4[標籤列印]
B --&gt; B1[領用申請]
B --&gt; B2[審批流程]
B --&gt; B3[資產分配]
C --&gt; C1[使用登記]
C --&gt; C2[狀態監控]
C --&gt; C3[位置追蹤]
D --&gt; D1[調撥申請]
D --&gt; D2[審批確認]
D --&gt; D3[交接簽收]
E --&gt; E1[報修申請]
E --&gt; E2[維修記錄]
E --&gt; E3[驗收確認]
F --&gt; F1[報廢評估]
F --&gt; F2[殘值處理]
F --&gt; F3[資產登出]
&lt;/div&gt;
&lt;h3 id="22-資產分類體系"&gt;2.2 資產分類體系&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;資產類別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;典型資產&lt;/th&gt;
&lt;th&gt;管理要求&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;固定資產&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用期限&amp;gt;1年，單位價值較高&lt;/td&gt;
&lt;td&gt;辦公裝置、車輛、傢俱&lt;/td&gt;
&lt;td&gt;折舊計提+年度盤點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;無形資產&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無實物形態的長期資產&lt;/td&gt;
&lt;td&gt;軟體許可、專利、商標&lt;/td&gt;
&lt;td&gt;攤銷管理+價值評估&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IT 資產&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資訊科技相關資產&lt;/td&gt;
&lt;td&gt;伺服器、網路裝置、終端&lt;/td&gt;
&lt;td&gt;生命週期+安全合規&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;低值易耗品&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;價值較低、消耗較快的資產&lt;/td&gt;
&lt;td&gt;辦公耗材、工具&lt;/td&gt;
&lt;td&gt;批次管理+庫存控制&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="23-資產資料許可權"&gt;2.3 資產資料許可權&lt;/h3&gt;
&lt;p&gt;Asset 系統實現基於組織與資產類別的多維資料許可權控制。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管轄範圍資產&lt;/td&gt;
&lt;td&gt;可管理資產的入庫、分配、調撥、報廢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門資產管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門資產&lt;/td&gt;
&lt;td&gt;可管理本部門領用的資產&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;普通員工&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人使用資產&lt;/td&gt;
&lt;td&gt;只能檢視自己領用的資產&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;財務管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部資產&lt;/td&gt;
&lt;td&gt;可檢視資產價值、折舊資料&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部資產&lt;/td&gt;
&lt;td&gt;只讀檢視+審計日誌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 資產資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;asset&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AssetServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 資產管理員可管理管轄範圍內的全部資產&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按組織+資產類別過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 部門資產管理員許可權&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;roles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dept_asset_admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DeptAssetServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 只能管理本部門領用的資產&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按部門過濾&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-折舊管理"&gt;3. 折舊管理&lt;/h2&gt;
&lt;h3 id="31-折舊方法"&gt;3.1 折舊方法&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;折舊方法&lt;/th&gt;
&lt;th&gt;公式&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;直線法&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(原值-殘值)/使用年限&lt;/td&gt;
&lt;td&gt;通用固定資產&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工作量法&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(原值-殘值)/總工作量×當期工作量&lt;/td&gt;
&lt;td&gt;車輛、生產裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;雙倍餘額遞減法&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;賬面淨值×(2/使用年限)&lt;/td&gt;
&lt;td&gt;技術更新快的裝置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;年數總和法&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(原值-殘值)×剩餘年限/年數總和&lt;/td&gt;
&lt;td&gt;前期損耗大的資產&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-折舊流程"&gt;3.2 折舊流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "折舊管理"
A[資產入庫] --&gt; B[設定折舊引數]
B --&gt; C[選擇折舊方法]
C --&gt; D[月度自動計提]
D --&gt; E{計提結果}
E --&gt; F[生成折舊憑證]
E --&gt; G[更新資產淨值]
F --&gt; H[財務對賬]
G --&gt; H
H --&gt; I{資產狀態}
I --&gt;|在用| D
I --&gt;|報廢| J[停止計提]
I --&gt;|減值| K[減值處理]
end
&lt;/div&gt;
&lt;h3 id="33-折舊配置"&gt;3.3 折舊配置&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;depreciation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;straight-line &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 直線法&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;work-quantity &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 工作量法&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;double-declining &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 雙倍餘額遞減法&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sum-of-years &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 年數總和法&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;auto-calculate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 自動計提&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;calculate-day&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;28&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 每月計提日&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;residual-rate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0.05&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 預設殘值率 5%&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;min-value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 最低折舊資產價值&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;electronic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;straight-line&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;vehicle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;work-quantity&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;furniture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;straight-line&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;years&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-資產盤點"&gt;4. 資產盤點&lt;/h2&gt;
&lt;h3 id="41-盤點流程"&gt;4.1 盤點流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資產盤點"
A[盤點計劃] --&gt; B[盤點準備]
B --&gt; C[盤點執行]
C --&gt; D[差異處理]
D --&gt; E[盤點報告]
A --&gt; A1[確定盤點範圍]
A --&gt; A2[分配盤點人員]
A --&gt; A3[制定盤點時間]
B --&gt; B1[列印盤點清單]
B --&gt; B2[準備盤點工具]
B --&gt; B3[凍結資產變動]
C --&gt; C1[掃碼/RFID 盤點]
C --&gt; C2[拍照取證]
C --&gt; C3[記錄資產狀態]
D --&gt; D1[差異分析]
D --&gt; D2[盤盈處理]
D --&gt; D3[盤虧處理]
E --&gt; E1[生成盤點報告]
E --&gt; E2[審批確認]
E --&gt; E3[更新資產臺賬]
end
&lt;/div&gt;
&lt;h3 id="42-智慧盤點技術"&gt;4.2 智慧盤點技術&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;盤點方式&lt;/th&gt;
&lt;th&gt;技術&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;效率提升&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;條碼盤點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;二維碼掃描&lt;/td&gt;
&lt;td&gt;通用資產&lt;/td&gt;
&lt;td&gt;3-5倍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RFID 盤點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;射頻識別&lt;/td&gt;
&lt;td&gt;大批次資產&lt;/td&gt;
&lt;td&gt;10-20倍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IoT 盤點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;感測器自動上報&lt;/td&gt;
&lt;td&gt;高價值/移動資產&lt;/td&gt;
&lt;td&gt;實時盤點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;移動盤點&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手機 APP&lt;/td&gt;
&lt;td&gt;分散資產&lt;/td&gt;
&lt;td&gt;隨時隨地&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="43-iot-資產追蹤"&gt;4.3 IoT 資產追蹤&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "IoT 資產追蹤"
subgraph "感知層"
A1[RFID 標籤]
A2[GPS 定位器]
A3[環境感測器]
end
subgraph "網路層"
B1[RFID 讀寫器]
B2[4G/5G 閘道器]
B3[WiFi 定位]
end
subgraph "平臺層"
C1[資產定位]
C2[軌跡追蹤]
C3[電子圍欄]
C4[異常告警]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; C4
C2 --&gt; C4
C3 --&gt; C4
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-資產操作審計"&gt;5. 資產操作審計&lt;/h2&gt;
&lt;h3 id="51-審計事件"&gt;5.1 審計事件&lt;/h3&gt;
&lt;p&gt;所有資產關鍵操作均記錄完整審計日誌，支援資產全鏈路追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審計事件採集"
A1[資產入庫]
A2[資產領用]
A3[資產調撥]
A4[資產維修]
A5[資產報廢]
A6[折舊計提]
A7[盤點操作]
end
subgraph "審計處理"
B1[變更對比]
B2[合規檢查]
B3[風險評估]
end
subgraph "審計儲存"
C1[操作日誌]
C2[變更歷史]
C3[區塊鏈存證]
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
A6 --&gt; B1
A7 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
B3 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;保留期限&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產入庫&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄採購資訊、驗收人、入庫時間&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產領用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄領用人、領用時間、審批人&lt;/td&gt;
&lt;td&gt;資產生命週期+5年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產調撥&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄調撥前後位置、調撥原因&lt;/td&gt;
&lt;td&gt;資產生命週期+5年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產維修&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄維修內容、費用、維修商&lt;/td&gt;
&lt;td&gt;資產生命週期+5年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產報廢&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄報廢原因、殘值、處置方式&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;折舊計提&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄每月折舊金額、累計折舊&lt;/td&gt;
&lt;td&gt;資產生命週期+5年&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;盤點操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄盤點人、盤點時間、盤點結果&lt;/td&gt;
&lt;td&gt;永久&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="52-審計許可權"&gt;5.2 審計許可權&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;審計許可權&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檢視管轄資產審計日誌&lt;/td&gt;
&lt;td&gt;可檢視管轄範圍內資產的審計記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檢視本部門資產審計&lt;/td&gt;
&lt;td&gt;可檢視本部門資產的審計記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檢視全部資產審計&lt;/td&gt;
&lt;td&gt;只讀許可權，可匯出審計報告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系統管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理審計配置&lt;/td&gt;
&lt;td&gt;可配置審計規則、保留策略&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-資產分析"&gt;6. 資產分析&lt;/h2&gt;
&lt;h3 id="61-分析維度"&gt;6.1 分析維度&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資產分析"
subgraph "資產概覽"
A1[資產總量]
A2[資產總值]
A3[資產分佈]
end
subgraph "使用分析"
B1[利用率分析]
B2[閒置分析]
B3[效能評估]
end
subgraph "財務分析"
C1[折舊分析]
C2[維護成本]
C3[資產淨值]
end
subgraph "決策支援"
D1[採購建議]
D2[報廢建議]
D3[最佳化方案]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="62-核心指標"&gt;6.2 核心指標&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;th&gt;計算方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產利用率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資產實際使用時間/計劃使用時間&lt;/td&gt;
&lt;td&gt;實際工時÷計劃工時×100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;閒置率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;閒置資產/總資產&lt;/td&gt;
&lt;td&gt;閒置資產數÷總資產數×100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;維護成本率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;維護成本/資產原值&lt;/td&gt;
&lt;td&gt;年維護成本÷資產原值×100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產淨值率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資產淨值/資產原值&lt;/td&gt;
&lt;td&gt;資產淨值÷資產原值×100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;盤點準確率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;賬實相符數/盤點總數&lt;/td&gt;
&lt;td&gt;相符資產數÷盤點總數×100%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-asset-plus"
subgraph "asset-biz"
A1[ledger 資產臺賬]
A2[lifecycle 生命週期]
A3[depreciation 折舊管理]
A4[inventory 資產盤點]
A5[maintenance 維修保養]
A6[disposal 報廢處置]
A7[tracking IoT追蹤]
A8[analytics 資產分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[compliance 合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B1
A8 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;賬實相符&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧盤點+IoT 追蹤，確保賬實一致&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;精準折舊核算+維護成本分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資產最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;利用率分析+閒置預警+採購建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路審計+區塊鏈存證+合規報告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效率提升&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動化盤點+移動化操作+智慧分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;風險防控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資產流失預警+電子圍欄+異常告警&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>消息队列</title><link>https://ruoyiplus.com/zh-tw/ruoyi/message-queue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/message-queue/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;訊息佇列是子系統間非同步通訊的「中樞神經」&lt;/strong&gt;。當 ERP 出庫需要通知 WMS 更新庫存、當商城支付成功需要給會員發放積分——這些跨模組的非同步協作都透過訊息佇列完成。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;設計哲學&lt;/strong&gt;：業務程式碼只依賴 &lt;code&gt;yudao-spring-boot-starter-mq&lt;/code&gt; 抽象介面，切換底層實現只需改一行配置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="適合什麼樣的使用者"&gt;適合什麼樣的使用者&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;使用者畫像&lt;/th&gt;
&lt;th&gt;推薦方案&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開發除錯階段&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Spring Event（預設，零依賴）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;中小型專案&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Redis Stream（持久化，支援消費者組）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;企業級專案&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RabbitMQ（穩定可靠，運維成熟）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高吞吐場景&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RocketMQ（阿里系，分散式事務）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;大資料場景&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kafka（日誌、埋點、資料管道）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="架構設計"&gt;架構設計&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 業務層["業務程式碼層（只依賴抽象）"]
P["生產者&lt;br/&gt;MessageProducer.send()"]
C["消費者&lt;br/&gt;MessageConsumer.onMessage()"]
end
subgraph 抽象層["抽象層 yudao-spring-boot-starter-mq"]
API["統一 API&lt;br/&gt;Message / MessageProducer / MessageConsumer"]
end
subgraph 實現層["實現層（五選一）"]
SE["yudao-spring-boot-starter-mq-spring-event&lt;br/&gt;Spring Event（預設）"]
REDIS["yudao-spring-boot-starter-mq-redis&lt;br/&gt;Redis Stream"]
RABBIT["yudao-spring-boot-starter-mq-rabbitmq&lt;br/&gt;RabbitMQ"]
ROCKET["yudao-spring-boot-starter-mq-rocketmq&lt;br/&gt;RocketMQ"]
KAFKA["yudao-spring-boot-starter-mq-kafka&lt;br/&gt;Kafka"]
end
P --&gt; API
C --&gt; API
API --&gt; SE
API --&gt; REDIS
API --&gt; RABBIT
API --&gt; ROCKET
API --&gt; KAFKA
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="五種實現對比"&gt;五種實現對比&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;實現&lt;/th&gt;
&lt;th&gt;持久化&lt;/th&gt;
&lt;th&gt;消費模式&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;切換配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spring Event&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ 記憶體級&lt;/td&gt;
&lt;td&gt;廣播&lt;/td&gt;
&lt;td&gt;開發除錯&lt;/td&gt;
&lt;td&gt;預設&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Redis Stream&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;叢集消費/廣播&lt;/td&gt;
&lt;td&gt;中小型專案&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yudao.mq.type=redis&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;多種模式&lt;/td&gt;
&lt;td&gt;企業級專案&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yudao.mq.type=rabbitmq&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RocketMQ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;叢集/廣播/順序&lt;/td&gt;
&lt;td&gt;高吞吐、事務訊息&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yudao.mq.type=rocketmq&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kafka&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;分割槽消費&lt;/td&gt;
&lt;td&gt;大資料、日誌&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yudao.mq.type=kafka&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用示例"&gt;使用示例&lt;/h2&gt;
&lt;h3 id="定義訊息"&gt;定義訊息&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 1. 定義訊息類，實現 Message 介面&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderPaidMessage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="傳送訊息"&gt;傳送訊息&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Resource&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MessageProducer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;messageProducer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;payOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 業務處理...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 傳送訊息&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OrderPaidMessage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OrderPaidMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setOrderId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orderId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setUserId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;getCurrentUserId&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setAmount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAmount&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;messageProducer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="消費訊息"&gt;消費訊息&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OrderPaidConsumer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MessageConsumer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;OrderPaidMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;onMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OrderPaidMessage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 發放積分&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;memberService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addPoints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUserId&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAmount&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 更新庫存&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stockService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decreaseStock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOrderId&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="子系統間的典型訊息流"&gt;子系統間的典型訊息流&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant MALL as 商城模組
participant MQ as 訊息佇列
participant WMS as 倉庫模組
participant MEMBER as 會員模組
MALL-&gt;&gt;MALL: 使用者支付成功
MALL-&gt;&gt;MQ: 傳送「訂單已支付」訊息
MQ-&gt;&gt;WMS: 消費訊息 → 扣減庫存
MQ-&gt;&gt;MEMBER: 消費訊息 → 發放積分
Note over WMS,MEMBER: 兩個消費者獨立執行，互不影響
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="切換方式"&gt;切換方式&lt;/h2&gt;
&lt;p&gt;只需修改配置檔案：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 從 Spring Event 切換到 Redis Stream&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;yudao&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;redis &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 改成 redis / rabbitmq / rocketmq / kafka&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;無需修改任何業務程式碼。&lt;/p&gt;</description></item><item><title>OA 行政办公</title><link>https://ruoyiplus.com/zh-tw/plus/oa-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/oa-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，48 DOs / 27 Controllers，選單 ID 起始 3000，構建數字化行政辦公與流程協同體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus OA 圍繞&lt;strong&gt;智慧審批&lt;/strong&gt;、&lt;strong&gt;公文管理&lt;/strong&gt;、&lt;strong&gt;行政資源管控&lt;/strong&gt;三大核心進行企業級增強，實現從流程審批到行政管理的全流程數字化。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;48 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;27 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-oa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;流程審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_meeting_room&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;會議室管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;檔案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_knowledge_base&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;知識庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_car&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;車輛管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_schedule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;日程管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_seal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;印章管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_material&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;物資管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_form&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;oa_information&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;資訊管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus OA 增強架構"
subgraph "流程層"
A1[智慧審批]
A2[公文管理]
A3[流程設計器]
end
subgraph "協同層"
B1[日程管理]
B2[會議管理]
B3[任務協同]
end
subgraph "行政層"
C1[資產管理]
C2[印章管理]
C3[考勤管理]
end
subgraph "管控層"
D1[審批許可權]
D2[流程審計]
D3[資料安全]
D4[合規報告]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生 OA&lt;/th&gt;
&lt;th&gt;RuoYiPlus OA 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;流程審批&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎審批&lt;/td&gt;
&lt;td&gt;智慧審批+流程最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;公文管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;公文全流程管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日程&lt;/td&gt;
&lt;td&gt;團隊日程+會議管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;任務協同+進度跟蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;行政管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;資產管理+印章管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;移動辦公&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單移動&lt;/td&gt;
&lt;td&gt;全功能移動辦公&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;審批分級許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;流程全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-智慧審批增強"&gt;2. 智慧審批增強&lt;/h2&gt;
&lt;h3 id="21-審批流程體系"&gt;2.1 審批流程體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "審批流程"
subgraph "流程設計"
A1[流程建模]
A2[條件分支]
A3[並行審批]
A4[流程模板]
A5[流程釋出]
end
subgraph "審批執行"
B1[審批發起]
B2[審批流轉]
B3[審批處理]
B4[加簽]
B5[轉籤]
B6[撤回]
B7[駁回]
end
subgraph "智慧審批"
C1[智慧路由]
C2[條件自動判斷]
C3[自動流轉]
C4[智慧提醒]
end
subgraph "移動審批"
D1[移動發起]
D2[移動審批]
D3[移動查詢]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; B6
B6 --&gt; B7
B7 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="22-審批許可權控制"&gt;2.2 審批許可權控制&lt;/h3&gt;
&lt;p&gt;OA 系統實現基於流程和崗位的審批許可權控制，確保審批流程合規。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;發起人&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自己的審批&lt;/td&gt;
&lt;td&gt;只能發起和檢視自己的審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批人&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;待審批項&lt;/td&gt;
&lt;td&gt;只能審批分配給自己的審批項&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門審批&lt;/td&gt;
&lt;td&gt;可檢視本部門所有審批&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部審批&lt;/td&gt;
&lt;td&gt;可檢視所有審批並進行管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// OA 審批許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approval&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ApprovalServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 審批人只能審批自己的待辦項&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 部門經理可檢視本部門審批&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-審批審計"&gt;2.3 審批審計&lt;/h3&gt;
&lt;p&gt;所有審批操作均記錄完整審計日誌，支援審批流程追溯。&lt;/p&gt;
&lt;div class="mermaid"&gt;graph LR
A[審批發起] --&gt; B[審批流轉]
B --&gt; C[審批處理]
C --&gt; D[審批完成]
A -.-&gt; E[審計日誌]
B -.-&gt; E
C -.-&gt; E
D -.-&gt; E
E --&gt; F[流程追溯]
E --&gt; G[合規報告]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批發起&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄發起人、發起時間、審批內容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批流轉&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄流轉時間、流轉路徑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批處理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄審批人、審批時間、審批意見&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批撤回&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄撤回人、撤回時間、撤回原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批駁回&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄駁回人、駁回時間、駁回原因&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-公文管理增強"&gt;3. 公文管理增強&lt;/h2&gt;
&lt;h3 id="31-公文管理流程"&gt;3.1 公文管理流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "公文管理"
subgraph "公文起草"
A1[公文模板]
A2[公文編輯]
A3[公文格式]
A4[公文審批]
A5[公文簽發]
end
subgraph "公文流轉"
B1[公文分發]
B2[公文簽收]
B3[公文傳閱]
B4[公文督辦]
B5[公文歸檔]
end
subgraph "公文查詢"
C1[公文檢索]
C2[公文統計]
C3[公文分析]
end
subgraph "公文安全"
D1[公文加密]
D2[公文水印]
D3[公文審計]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;公文型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;發文&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;正式發文、通知公告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;收文&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;外部來文、上級來文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;內部公文&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;內部通知、工作安排&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;會議紀要&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;會議紀要、決議檔案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-日程與會議管理"&gt;4. 日程與會議管理&lt;/h2&gt;
&lt;h3 id="41-日程會議體系"&gt;4.1 日程會議體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "日程會議"
subgraph "個人日程"
A1[日程建立]
A2[日程提醒]
A3[日程同步]
A4[日程共享]
end
subgraph "團隊日程"
B1[團隊日曆]
B2[日程協調]
B3[日程衝突檢測]
end
subgraph "會議管理"
C1[會議預約]
C2[會議邀請]
C3[會議確認]
C4[會議簽到]
C5[會議紀要]
end
subgraph "會議室管理"
D1[會議室預約]
D2[會議室狀態]
D3[會議室統計]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; C5
C5 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-行政管理增強"&gt;5. 行政管理增強&lt;/h2&gt;
&lt;h3 id="51-資產管理"&gt;5.1 資產管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "資產管理"
subgraph "資產臺賬"
A1[資產登記]
A2[資產分類]
A3[資產標籤]
A4[資產位置]
end
subgraph "資產使用"
B1[資產領用]
B2[資產歸還]
B3[資產調撥]
B4[資產維修]
B5[資產報廢]
end
subgraph "資產盤點"
C1[盤點計劃]
C2[盤點執行]
C3[盤點差異]
C4[盤點報告]
end
subgraph "資產分析"
D1[資產統計]
D2[資產價值]
D3[資產利用率]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
&lt;/div&gt;
&lt;h3 id="52-印章管理"&gt;5.2 印章管理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "印章管理"
subgraph "印章臺賬"
A1[印章登記]
A2[印章型別]
A3[印章狀態]
A4[印章保管]
A5[印章授權]
end
subgraph "印章使用"
B1[用印申請]
B2[用印審批]
B3[用印登記]
B4[用印記錄]
B5[用印追溯]
end
subgraph "印章安全"
C1[印章監控]
C2[印章審計]
C3[印章預警]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; B5
B5 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;h3 id="53-印章審計"&gt;5.3 印章審計&lt;/h3&gt;
&lt;p&gt;所有印章使用操作均記錄完整審計日誌，確保印章使用合規。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用印申請&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄申請人、申請時間、用印原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用印審批&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄審批人、審批時間、審批意見&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用印登記&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄用印時間、用印檔案、用印次數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;用印追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄用印歷史、用印軌跡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-技術架構"&gt;6. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-oa-plus"
subgraph "oa-biz"
A1[workflow 流程審批]
A2[document 公文管理]
A3[schedule 日程管理]
A4[meeting 會議管理]
A5[task 任務管理]
A6[asset 資產管理]
A7[seal 印章管理]
A8[attendance 考勤管理]
A9[mobile 移動辦公]
A10[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[compliance 合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B2
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="7-商業價值"&gt;7. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;流程效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;智慧審批、流程最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協同效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日程協同、任務協同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;行政規範&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資產管理、印章管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;移動辦公&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全功能移動辦公&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料驅動&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;效率分析、最佳化建議&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;審批許可權、流程審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Pay 支付中心</title><link>https://ruoyiplus.com/zh-tw/ruoyi/pay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/pay/</guid><description>&lt;h2 id="核心定位"&gt;核心定位&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pay 支付中心是平臺的「統一收銀臺」&lt;/strong&gt;。商城賣東西要收款、ERP 採購要付款、會員充值要收款——所有這些收付款場景都透過支付中心統一完成，業務模組不需要關心底層是微信支付還是支付寶。&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;一句話&lt;/strong&gt;：對接一次支付中心，所有業務模組都能收付款。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="解決什麼問題"&gt;解決什麼問題&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;痛點&lt;/th&gt;
&lt;th&gt;支付中心如何解決&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;每個業務單獨對接微信/支付寶&lt;/td&gt;
&lt;td&gt;統一對接一次，所有業務複用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支付渠道切換需要改業務程式碼&lt;/td&gt;
&lt;td&gt;渠道變更對業務透明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支付回撥處理分散&lt;/td&gt;
&lt;td&gt;統一回撥 → 分發到各業務模組&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支付流水無處可查&lt;/td&gt;
&lt;td&gt;支付中心記錄所有流水，統一對賬&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="使用者角色"&gt;使用者角色&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
subgraph 角色
DEV["開發者&lt;br/&gt;對接支付 API&lt;br/&gt;處理支付回撥"]
ADMIN2["運營/財務&lt;br/&gt;檢視支付流水&lt;br/&gt;處理退款&lt;br/&gt;對賬"]
ENDUSER["終端使用者&lt;br/&gt;發起支付&lt;br/&gt;檢視支付結果"]
end
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="架構設計"&gt;架構設計&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 業務層["業務模組（支付呼叫方）"]
MALL["商城&lt;br/&gt;訂單支付"]
ERP2["ERP&lt;br/&gt;採購付款"]
OTHER["其他模組&lt;br/&gt;充值/轉賬"]
end
subgraph 支付中心["支付中心 yudao-module-pay"]
API_LAYER["API 層&lt;br/&gt;PayOrderApi / PayRefundApi"]
CHANNEL["渠道適配層&lt;br/&gt;PayClient 統一客戶端"]
CALLBACK["回撥處理層&lt;br/&gt;統一回撥 → 分發業務"]
end
subgraph 渠道層["支付渠道"]
WXPAY["微信支付&lt;br/&gt;公眾號/小程式/掃碼"]
ALIPAY["支付寶&lt;br/&gt;PC/Wap/轉賬"]
MOCK["模擬支付&lt;br/&gt;開發除錯用"]
end
業務層 --&gt; API_LAYER
API_LAYER --&gt; CHANNEL
CHANNEL --&gt; 渠道層
渠道層 --&gt; CALLBACK
CALLBACK --&gt; 業務層
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="支付應用設計"&gt;支付應用設計&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph 應用隔離
APP1["支付應用：商城訂單&lt;br/&gt;回撥地址：/mall/order/callback&lt;br/&gt;訂單字首：MALL-"]
APP2["支付應用：ERP 採購&lt;br/&gt;回撥地址：/erp/purchase/callback&lt;br/&gt;訂單字首：ERP-"]
APP3["支付應用：會員充值&lt;br/&gt;回撥地址：/member/recharge/callback&lt;br/&gt;訂單字首：MBR-"]
end
&lt;/div&gt;
&lt;p&gt;每個業務模組對應一個「支付應用」，擁有獨立的回撥地址和訂單編號字首，確保支付回撥能準確路由到正確的業務處理邏輯。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="支付全流程"&gt;支付全流程&lt;/h2&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
participant U as 使用者
participant BIZ as 業務系統（商城）
participant PAY as 支付中心
participant CH as 支付渠道（微信/支付寶）
U-&gt;&gt;BIZ: 提交訂單，點選支付
BIZ-&gt;&gt;PAY: 建立支付單 PayOrderApi
PAY-&gt;&gt;CH: 發起支付請求
CH--&gt;&gt;U: 彈出支付頁面
U-&gt;&gt;CH: 完成支付（掃碼/密碼）
CH--&gt;&gt;PAY: 非同步回撥：支付成功
PAY-&gt;&gt;PAY: 更新支付單狀態
PAY-&gt;&gt;BIZ: 回撥通知：訂單已支付
BIZ-&gt;&gt;BIZ: 更新訂單狀態
BIZ--&gt;&gt;U: 顯示支付成功
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="支援的支付方式"&gt;支援的支付方式&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;渠道&lt;/th&gt;
&lt;th&gt;支付方式&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;微信支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;公眾號支付&lt;/td&gt;
&lt;td&gt;微信公眾號內 H5 商城&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;微信支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;小程式支付&lt;/td&gt;
&lt;td&gt;微信小程式商城&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;微信支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;轉賬&lt;/td&gt;
&lt;td&gt;佣金提現、退款&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付寶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PC 支付&lt;/td&gt;
&lt;td&gt;PC 端商城&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付寶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wap 支付&lt;/td&gt;
&lt;td&gt;移動端 H5 商城&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付寶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;轉賬&lt;/td&gt;
&lt;td&gt;佣金提現、退款&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模擬支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;模擬&lt;/td&gt;
&lt;td&gt;開發除錯，無需真實賬號&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="依賴關係"&gt;依賴關係&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mall 商城 → Pay 支付中心 ← ERP 進銷存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↑
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 系統管理模組（許可權）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;商城和 ERP 都依賴支付中心，支付中心依賴系統管理模組提供許可權和配置管理。&lt;/p&gt;</description></item><item><title>EHR 人力资源</title><link>https://ruoyiplus.com/zh-tw/plus/ehr-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/ehr-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，30 DOs / 15 Controllers，選單 ID 起始 7000，構建企業人力資源數字化管理體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus EHR 圍繞&lt;strong&gt;員工全生命週期管理&lt;/strong&gt;、&lt;strong&gt;薪酬績效管理&lt;/strong&gt;、&lt;strong&gt;招聘培訓管理&lt;/strong&gt;三大核心進行企業級增強，實現人力資源管理數字化。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-ehr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_employee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;員工管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_attendance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;考勤管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_insurance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;社保管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_performance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;績效管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_recruitment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;招聘管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_salary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;薪酬管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_contract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;合同管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ehr_education&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;培訓管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus EHR 增強架構"
subgraph "組織人事"
A1[員工檔案]
A2[組織架構]
A3[合同管理]
A4[入離職管理]
end
subgraph "薪酬福利"
B1[薪酬計算]
B2[社保公積金]
B3[個稅管理]
end
subgraph "考勤績效"
C1[考勤打卡]
C2[績效考核]
C3[假勤管理]
end
subgraph "招聘培訓"
D1[招聘管理]
D2[培訓管理]
D3[人才發展]
end
subgraph "管控層"
E1[資料許可權]
E2[隱私脫敏]
E3[操作審計]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; C1
B1 --&gt; C2
B2 --&gt; C2
C1 --&gt; C3
C3 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
A1 --&gt; E1
B1 --&gt; E2
C2 --&gt; E3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統 HR 系統&lt;/th&gt;
&lt;th&gt;RuoYiPlus EHR 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;員工管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎資訊&lt;/td&gt;
&lt;td&gt;全生命週期+數字檔案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪酬管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工計算&lt;/td&gt;
&lt;td&gt;自動算薪+個稅計算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;考勤管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單打卡&lt;/td&gt;
&lt;td&gt;多維度考勤+智慧排班&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;績效管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;KPI+360度考核&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;招聘管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;全流程招聘管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;培訓管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;培訓計劃+效果評估&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基礎許可權&lt;/td&gt;
&lt;td&gt;部門級+崗位級資料許可權&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;隱私合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;隱私資料脫敏+審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-員工全生命週期管理"&gt;2. 員工全生命週期管理&lt;/h2&gt;
&lt;h3 id="21-員工生命週期"&gt;2.1 員工生命週期&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[招聘入職] --&gt; B[試用期管理]
B --&gt; C[正式員工]
C --&gt; D[調崗晉升]
D --&gt; E[離職管理]
A --&gt; A1[簡歷篩選]
A --&gt; A2[面試評估]
A --&gt; A3[入職辦理]
B --&gt; B1[試用考核]
B --&gt; B2[導師輔導]
B --&gt; B3[轉正評審]
C --&gt; C1[績效管理]
C --&gt; C2[培訓發展]
C --&gt; C3[薪酬福利]
D --&gt; D1[崗位調整]
D --&gt; D2[職級晉升]
D --&gt; D3[薪資調整]
E --&gt; E1[離職申請]
E --&gt; E2[離職交接]
E --&gt; E3[離職分析]
&lt;/div&gt;
&lt;h3 id="22-資料許可權控制"&gt;2.2 資料許可權控制&lt;/h3&gt;
&lt;p&gt;EHR 系統實現基於部門和崗位的資料許可權控制，確保人事資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;員工本人&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人資訊&lt;/td&gt;
&lt;td&gt;只能檢視自己的基本資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門經理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;本部門員工&lt;/td&gt;
&lt;td&gt;可檢視本部門員工資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HR 專員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部員工&lt;/td&gt;
&lt;td&gt;可檢視所有員工資訊&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高管&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部資料&lt;/td&gt;
&lt;td&gt;可檢視全部人事資料&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// EHR 資料許可權示例&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@DataPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;department&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmployeeServiceImpl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 部門經理只能檢視本部門員工&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 自動按部門過濾資料&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-薪酬管理"&gt;3. 薪酬管理&lt;/h2&gt;
&lt;h3 id="31-薪酬體系"&gt;3.1 薪酬體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "薪酬管理"
A[薪酬結構] --&gt; B[薪資計算]
B --&gt; C[社保公積金]
B --&gt; D[個稅計算]
C --&gt; E[薪資發放]
D --&gt; E
E --&gt; F[薪資報表]
A --&gt; A1[基本工資]
A --&gt; A2[績效工資]
A --&gt; A3[津貼補貼]
A --&gt; A4[獎金]
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪酬結構&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;基本工資+績效+津貼+獎金&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動算薪&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按規則自動計算薪資&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;社保管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;社保公積金自動計算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;個稅計算&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;累計預扣法個稅計算&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪資發放&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;銀行代發、薪資單&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="32-薪酬審計"&gt;3.2 薪酬審計&lt;/h3&gt;
&lt;p&gt;所有薪酬操作均記錄完整審計日誌，確保薪酬資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪資調整&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄調整時間、調整金額、調整原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪資計算&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄計算過程、計算公式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪資發放&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄發放時間、發放金額&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料匯出&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄匯出時間、匯出人&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-考勤績效管理"&gt;4. 考勤績效管理&lt;/h2&gt;
&lt;h3 id="41-考勤體系"&gt;4.1 考勤體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "考勤管理"
A[排班管理] --&gt; B[考勤打卡]
B --&gt; C[考勤統計]
C --&gt; D[異常處理]
D --&gt; E[考勤報表]
A --&gt; A1[固定班次]
A --&gt; A2[彈性班次]
A --&gt; A3[輪班制]
B --&gt; B1[GPS打卡]
B --&gt; B2[WiFi打卡]
B --&gt; B3[人臉識別]
C --&gt; C1[出勤統計]
C --&gt; C2[加班統計]
C --&gt; C3[請假統計]
end
&lt;/div&gt;
&lt;h3 id="42-績效考核"&gt;4.2 績效考核&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;考核方式&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KPI 考核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;關鍵績效指標考核&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OKR 考核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;目標與關鍵成果考核&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;360度考核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多維度綜合評價&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;目標管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MBO 目標管理考核&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-ehr-plus"
subgraph "ehr-biz"
A1[employee 員工管理]
A2[salary 薪酬管理]
A3[attendance 考勤管理]
A4[performance 績效管理]
A5[recruitment 招聘管理]
A6[education 培訓管理]
A7[contract 合同管理]
A8[insurance 社保管理]
A9[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[masking 資料脫敏]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B2
A5 --&gt; B1
A6 --&gt; B1
A7 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;人事效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動化流程、電子檔案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;薪酬準確&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動算薪、合規個稅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;人才發展&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;績效管理、培訓體系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料決策&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;人力分析、人才盤點&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;資料許可權、隱私保護&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計可追溯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作審計、變更追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>IM 即时通讯</title><link>https://ruoyiplus.com/zh-tw/plus/im-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/im-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，16 DOs / 29 Controllers，選單 ID 起始 11000，構建企業級即時通訊與協同辦公體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus IM 圍繞&lt;strong&gt;富媒體訊息&lt;/strong&gt;、&lt;strong&gt;業務深度整合&lt;/strong&gt;、&lt;strong&gt;訊息安全合規&lt;/strong&gt;三大核心進行企業級增強，打造安全可控的企業溝通平臺。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-im&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_channel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;頻道管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_group&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;群組管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_private_message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;私聊訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_rtc_call&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RTC 通話&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_emoticon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表情包&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_sensitive_word&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;敏感詞&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;im_friend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;好友管理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus IM 增強架構"
subgraph "訊息層"
A1[基礎訊息]
A2[富媒體訊息]
A3[業務訊息]
A4[卡片訊息]
end
subgraph "群組層"
B1[工作群]
B2[專案群]
B3[部門群]
B4[通知群]
end
subgraph "協同層"
C1[檔案協同]
C2[日程協同]
C3[任務協同]
end
subgraph "安全層"
D1[訊息加密]
D2[訊息審計]
D3[許可權控制]
D4[合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B3
A4 --&gt; B4
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
C1 --&gt; D1
C2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統 IM&lt;/th&gt;
&lt;th&gt;RuoYiPlus IM 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息型別&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文字訊息&lt;/td&gt;
&lt;td&gt;富媒體+業務訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;群組管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單群組&lt;/td&gt;
&lt;td&gt;多型別群組+許可權管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息安全&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無加密&lt;/td&gt;
&lt;td&gt;訊息加密+審計合規&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;業務整合&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;業務訊息+工作通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協同能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;檔案協同+日程協同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;活躍度分析+效率分析&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-富媒體訊息支援"&gt;2. 富媒體訊息支援&lt;/h2&gt;
&lt;h3 id="21-訊息型別體系"&gt;2.1 訊息型別體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "訊息型別"
subgraph "基礎訊息"
A1[文字訊息]
A2[表情訊息]
A3[@提醒]
A4[圖片訊息]
A5[語音訊息]
A6[影片訊息]
end
subgraph "檔案訊息"
B1[檔案傳送]
B2[檔案預覽]
B3[檔案下載]
B4[檔案協同]
end
subgraph "業務訊息"
C1[工單訊息]
C2[審批訊息]
C3[任務訊息]
C4[通知訊息]
end
subgraph "卡片訊息"
D1[資訊卡片]
D2[操作卡片]
D3[表單卡片]
end
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;訊息型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;文字訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;文字、表情、@提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;富媒體訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;圖片、語音、影片、檔案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;業務訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工單、審批、任務等業務通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;卡片訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;可互動的資訊卡片&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;位置訊息&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;位置分享、簽到&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-群組管理增強"&gt;3. 群組管理增強&lt;/h2&gt;
&lt;h3 id="31-群組管理體系"&gt;3.1 群組管理體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "群組管理"
subgraph "群組型別"
A1[工作群]
A2[專案群]
A3[部門群]
A4[討論組]
A5[通知群]
end
subgraph "群組許可權"
B1[群主]
B2[管理員]
B3[普通成員]
end
subgraph "群組功能"
C1[群公告]
C2[群檔案]
C3[群日程]
C4[群投票]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
A5 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;群組型別&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工作群&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日常工作溝通群&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案群&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;專案協作群，關聯專案&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;部門群&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;部門溝通群，自動同步成員&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;討論組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;臨時討論組，靈活建立&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通知群&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單向通知群，僅管理員發言&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-訊息安全與合規"&gt;4. 訊息安全與合規&lt;/h2&gt;
&lt;h3 id="41-訊息安全體系"&gt;4.1 訊息安全體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "訊息安全"
subgraph "傳輸安全"
A1[SSL/TLS 加密]
A2[訊息簽名]
A3[防篡改]
end
subgraph "儲存安全"
B1[訊息加密儲存]
B2[敏感內容加密]
B3[資料隔離]
end
subgraph "審計合規"
C1[訊息審計]
C2[關鍵詞監控]
C3[風險預警]
C4[合規報告]
end
subgraph "許可權控制"
D1[訊息許可權]
D2[群組許可權]
D3[功能許可權]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; D1
C2 --&gt; D1
C3 --&gt; D1
&lt;/div&gt;
&lt;h3 id="42-訊息審計"&gt;4.2 訊息審計&lt;/h3&gt;
&lt;p&gt;所有訊息均記錄完整審計日誌，支援訊息內容追溯和合規審計。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息傳送&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄傳送人、接收人、傳送時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息內容&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄訊息內容（加密儲存）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;訊息撤回&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄撤回操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;檔案傳輸&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄檔案上傳、下載&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;群組操作&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄群建立、成員變更&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph LR
A[訊息傳送] --&gt; B[訊息審計]
B --&gt; C[關鍵詞檢測]
C --&gt; D{敏感詞?}
D --&gt;|是| E[風險標記]
D --&gt;|否| F[正常儲存]
E --&gt; G[告警通知]
F --&gt; H[加密儲存]
G --&gt; H
&lt;/div&gt;
&lt;h3 id="43-訊息許可權控制"&gt;4.3 訊息許可權控制&lt;/h3&gt;
&lt;p&gt;IM 系統實現基於角色的許可權控制，確保訊息資料安全。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;許可權層級&lt;/th&gt;
&lt;th&gt;適用範圍&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;普通使用者&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人訊息&lt;/td&gt;
&lt;td&gt;只能檢視自己的訊息&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;群管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;群組訊息&lt;/td&gt;
&lt;td&gt;可管理群組訊息和成員&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計人員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全部訊息&lt;/td&gt;
&lt;td&gt;可檢視所有訊息進行審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系統管理員&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系統配置&lt;/td&gt;
&lt;td&gt;可配置系統引數但不能檢視訊息內容&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-業務整合增強"&gt;5. 業務整合增強&lt;/h2&gt;
&lt;h3 id="51-業務整合架構"&gt;5.1 業務整合架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "業務整合"
subgraph "業務訊息"
A1[工單通知]
A2[審批通知]
A3[任務通知]
A4[日程提醒]
end
subgraph "業務操作"
B1[快捷審批]
B2[快捷處理]
B3[業務跳轉]
end
subgraph "業務協同"
C1[檔案協同]
C2[日程協同]
C3[任務協同]
C4[會議協同]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
B1 --&gt; C1
B2 --&gt; C2
B3 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;業務型別&lt;/th&gt;
&lt;th&gt;整合方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工單系統&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;工單建立、狀態變更通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審批系統&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;審批發起、審批結果通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務系統&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務分配、進度更新通知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程系統&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日程提醒、會議邀請&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;報告系統&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;報告生成、推送通知&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-協同辦公增強"&gt;6. 協同辦公增強&lt;/h2&gt;
&lt;h3 id="61-檔案協同"&gt;6.1 檔案協同&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;檔案共享&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;群檔案、個人檔案庫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;線上預覽&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Office、PDF線上預覽&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協同編輯&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多人協同編輯文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;版本管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檔案版本歷史&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;檔案搜尋&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檔案內容搜尋&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-日程協同"&gt;6.2 日程協同&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;個人日程、群日程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定時提醒、重複提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程共享&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日程共享、日程訂閱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;會議邀請&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;會議邀請、參會確認&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;日程同步&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;與外部日曆同步&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="63-任務協同"&gt;6.3 任務協同&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;群任務、個人任務&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務分配、任務認領&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;進度跟蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務進度、完成狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務到期提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;任務統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;任務完成統計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-im-plus"
subgraph "im-biz"
A1[message 訊息管理]
A2[group 群組管理]
A3[user 使用者管理]
A4[security 訊息安全]
A5[audit 訊息審計]
A6[integration 業務整合]
A7[collaboration 協同辦公]
A8[file 檔案協同]
A9[schedule 日程協同]
A10[task 任務協同]
A11[search 訊息檢索]
A12[archive 訊息歸檔]
A13[analytics 資料分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[monitoring 監控告警]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B2
A5 --&gt; B2
A6 --&gt; B3
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;溝通效率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;富媒體訊息、業務整合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;協同辦公&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;檔案協同、日程協同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;訊息加密、審計合規&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;業務賦能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;業務訊息、快捷操作&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料洞察&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;活躍分析、效率分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權管控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;分級許可權、資料隔離&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Mail 邮件中间件</title><link>https://ruoyiplus.com/zh-tw/plus/mail-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/mail-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，5 DOs / 5 Controllers，選單 ID 起始 11500，構建企業級郵件收發與營銷自動化體系&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Mail 圍繞&lt;strong&gt;多通道傳送&lt;/strong&gt;、&lt;strong&gt;郵件接收管理&lt;/strong&gt;、&lt;strong&gt;營銷自動化&lt;/strong&gt;三大核心進行企業級增強，打造高可靠、可審計的企業郵件基礎設施。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-mail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_attachment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;附件管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_blacklist&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;黑名單管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_send_log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;傳送日誌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_receive_log&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;接收日誌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mail_template&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;郵件模板&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Mail 增強架構"
subgraph "傳送層"
A1[阿里雲 DirectMail]
A2[AWS SES]
A3[本地 SMTP]
A4[企業郵箱]
end
subgraph "引擎層"
B1[非同步傳送]
B2[智慧重試]
B3[限流保護]
B4[批次最佳化]
end
subgraph "業務層"
C1[模板引擎]
C2[郵件接收]
C3[營銷郵件]
C4[附件管理]
end
subgraph "監控層"
D1[全鏈路追蹤]
D2[統計分析]
D3[傳送審計]
D4[合規報告]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
C4 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;Yudao 原生能力&lt;/th&gt;
&lt;th&gt;RuoYiPlus Mail 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單傳送&lt;/td&gt;
&lt;td&gt;多通道+非同步傳送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;接收能力&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;IMAP/POP3 接收&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;模板引擎+變數替換&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;附件管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單附件&lt;/td&gt;
&lt;td&gt;多儲存+版本管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;全鏈路追蹤+統計分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;營銷郵件&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;營銷郵件+批次傳送&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;郵件傳送全鏈路審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-多通道傳送架構"&gt;2. 多通道傳送架構&lt;/h2&gt;
&lt;h3 id="21-傳送通道架構"&gt;2.1 傳送通道架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "傳送通道"
subgraph "國內通道"
A1[阿里雲 DirectMail]
A2[騰訊企業郵箱]
end
subgraph "國際通道"
B1[AWS SES]
end
subgraph "自建通道"
C1[本地 SMTP]
end
subgraph "傳送引擎"
D1[非同步傳送]
D2[智慧重試]
D3[限流保護]
D4[故障切換]
end
end
A1 --&gt; D1
A2 --&gt; D1
B1 --&gt; D1
C1 --&gt; D1
D1 --&gt; D2
D2 --&gt; D3
D3 --&gt; D4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;通道型別&lt;/th&gt;
&lt;th&gt;適用場景&lt;/th&gt;
&lt;th&gt;特點&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;阿里雲 DirectMail&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;國內業務&lt;/td&gt;
&lt;td&gt;高送達率、國內最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS SES&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;國際業務&lt;/td&gt;
&lt;td&gt;全球覆蓋、成本低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;本地 SMTP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自建系統&lt;/td&gt;
&lt;td&gt;完全控制、隱私保護&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;企業郵箱&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;企業內部&lt;/td&gt;
&lt;td&gt;企業認證、品牌形象&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-非同步傳送引擎"&gt;2.2 非同步傳送引擎&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;async&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pool-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;queue-capacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;batch-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;backoff&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;initial-interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;multiplier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;max-interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rate-limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;qps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;burst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;非同步傳送&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;執行緒池非同步處理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智慧重試&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指數退避重試策略&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;限流保護&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;令牌桶演算法限流&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;批次最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;批次傳送最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;故障切換&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通道故障自動切換&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-郵件接收管理"&gt;3. 郵件接收管理&lt;/h2&gt;
&lt;h3 id="31-接收架構"&gt;3.1 接收架構&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "郵件接收"
subgraph "接收協議"
A1[IMAP]
A2[POP3]
end
subgraph "接收處理"
B1[郵件解析]
B2[內容提取]
B3[附件處理]
B4[自動分類]
end
subgraph "接收儲存"
C1[郵件歸檔]
C2[搜尋檢索]
C3[資料分析]
end
end
A1 --&gt; B1
A2 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IMAP 接收&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時同步收件箱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;POP3 接收&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定時拉取郵件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;郵件解析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;內容、附件解析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動分類&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;按規則自動分類&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動回覆&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動回覆模板&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-模板引擎增強"&gt;4. 模板引擎增強&lt;/h2&gt;
&lt;h3 id="41-模板管理體系"&gt;4.1 模板管理體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "模板管理"
subgraph "模板建立"
A1[模板設計]
A2[變數定義]
A3[樣式配置]
A4[模板稽核]
A5[模板釋出]
end
subgraph "模板型別"
B1[業務模板]
B2[營銷模板]
B3[系統模板]
end
subgraph "模板應用"
C1[變數替換]
C2[條件渲染]
C3[迴圈渲染]
C4[模板預覽]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
A4 --&gt; A5
A5 --&gt; B1
A5 --&gt; B2
A5 --&gt; B3
B1 --&gt; C1
B2 --&gt; C1
B3 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
C3 --&gt; C4
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Thymeleaf 模板&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HTML 模板渲染&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;變數替換&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;動態變數注入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;條件渲染&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;條件分支顯示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板版本&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;版本管理、歷史追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板測試&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;傳送測試、效果預覽&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-營銷郵件增強"&gt;5. 營銷郵件增強&lt;/h2&gt;
&lt;h3 id="51-營銷自動化"&gt;5.1 營銷自動化&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[觸發事件] --&gt; B{條件判斷}
B --&gt;|滿足| C[執行動作]
B --&gt;|不滿足| D[不執行]
C --&gt; E[傳送郵件]
E --&gt; F[記錄結果]
F --&gt; G{後續條件}
G --&gt;|是| H[繼續執行]
G --&gt;|否| I[流程結束]
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;marketing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;會員註冊&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;歡迎郵件&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;會員升級&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;升級祝賀&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;購物後7天&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;復購提醒&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;7d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生日當天&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生日祝福&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;member.birthday == today&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="52-黑名單管理"&gt;5.2 黑名單管理&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;自動黑名單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;退信自動加入黑名單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;手動黑名單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手動新增黑名單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;黑名單過濾&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;傳送時自動過濾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;黑名單申訴&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;黑名單申訴解除&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="6-傳送監控與分析"&gt;6. 傳送監控與分析&lt;/h2&gt;
&lt;h3 id="61-全鏈路追蹤"&gt;6.1 全鏈路追蹤&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[傳送請求] --&gt; B[佇列排隊]
B --&gt; C[傳送執行]
C --&gt; D[送達狀態]
D --&gt; E[開啟追蹤]
E --&gt; F[點選追蹤]
A -.-&gt; G[審計日誌]
B -.-&gt; G
C -.-&gt; G
D -.-&gt; G
E -.-&gt; G
F -.-&gt; G
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;追蹤節點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送請求&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;傳送請求記錄&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;佇列狀態&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;佇列排隊狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送執行&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;傳送執行狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;送達狀態&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;送達成功/失敗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開啟追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;郵件開啟追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;點選追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;連結點選追蹤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="62-郵件傳送審計"&gt;6.2 郵件傳送審計&lt;/h3&gt;
&lt;p&gt;所有郵件傳送操作均記錄完整審計日誌，支援郵件傳送追溯。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;審計項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送請求&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄傳送人、接收人、傳送時間&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;郵件內容&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄郵件主題、內容（加密儲存）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送結果&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄傳送成功/失敗、失敗原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;開啟記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄郵件開啟時間、開啟次數&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;點選記錄&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;記錄連結點選時間、點選次數&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="63-統計分析"&gt;6.3 統計分析&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;分析維度&lt;/th&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送統計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;傳送量、成功率、失敗率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;送達分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;送達率、退信率、退信原因&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效果分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;開啟率、點選率、轉化率&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通道分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;各通道效能對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;模板分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;各模板效果對比&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="7-技術架構"&gt;7. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-mail-plus"
subgraph "mail-biz"
A1[adapter 傳送介面卡]
A2[storage 附件儲存]
A3[engine 傳送引擎]
A4[template 模板引擎]
A5[receive 郵件接收]
A6[marketing 營銷郵件]
A7[blacklist 黑名單管理]
A8[tracking 傳送追蹤]
A9[analytics 統計分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
B3[masking 資料脫敏]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B2
A6 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="8-商業價值"&gt;8. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高送達率&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多通道、智慧路由&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;傳送可靠&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;非同步傳送、智慧重試&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;營銷賦能&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;營銷郵件、自動化觸發&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效果追蹤&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;開啟率、點選率分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;成本最佳化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通道選擇、批次最佳化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規審計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路追蹤、傳送審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Pay 支付系统</title><link>https://ruoyiplus.com/zh-tw/plus/pay-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/pay-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，14 DOs / 19 Controllers，選單 ID 起始 12500，構建統一支付與資金管理平臺&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus Pay 圍繞&lt;strong&gt;多渠道支付&lt;/strong&gt;、&lt;strong&gt;資金管理&lt;/strong&gt;、&lt;strong&gt;交易安全&lt;/strong&gt;三大核心進行企業級增強，打造統一支付基礎設施。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;19 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-pay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;支付訂單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_refund&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;退款管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_transfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;轉賬管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_wallet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;錢包管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_recharge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;充值管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_channel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;支付渠道&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pay_app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;支付應用&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus Pay 增強架構"
subgraph "支付渠道"
A1[微信支付]
A2[支付寶]
A3[銀聯支付]
A4[餘額支付]
end
subgraph "支付能力"
B1[支付下單]
B2[支付退款]
B3[轉賬付款]
B4[錢包管理]
end
subgraph "資金管理"
C1[充值管理]
C2[對賬管理]
C3[賬單管理]
end
subgraph "管控層"
D1[支付安全]
D2[風控管理]
D3[操作審計]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B1
A4 --&gt; B1
B1 --&gt; B2
B2 --&gt; B3
B3 --&gt; B4
B4 --&gt; C1
C1 --&gt; C2
C2 --&gt; C3
B1 --&gt; D1
B2 --&gt; D2
C3 --&gt; D3
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統方案&lt;/th&gt;
&lt;th&gt;RuoYiPlus Pay 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付渠道&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;單一渠道&lt;/td&gt;
&lt;td&gt;微信+支付寶+銀聯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;退款管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工處理&lt;/td&gt;
&lt;td&gt;自動退款+原路返回&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;錢包管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;餘額+充值+提現&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;對賬管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手工對賬&lt;/td&gt;
&lt;td&gt;自動對賬+差異處理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;轉賬付款&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;企業付款到零錢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;安全風控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;支付安全+風險控制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單日誌&lt;/td&gt;
&lt;td&gt;全鏈路支付審計&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-支付渠道管理"&gt;2. 支付渠道管理&lt;/h2&gt;
&lt;h3 id="21-多渠道接入"&gt;2.1 多渠道接入&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "支付渠道"
subgraph "微信支付"
A1[JSAPI支付]
A2[小程式支付]
A3[H5支付]
A4[Native支付]
end
subgraph "支付寶"
B1[手機網站支付]
B2[電腦網站支付]
B3[掃碼支付]
end
subgraph "銀聯支付"
C1[閘道器支付]
C2[無跳轉支付]
end
subgraph "餘額支付"
D1[錢包餘額]
D2[積分抵扣]
end
end
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;支付渠道&lt;/th&gt;
&lt;th&gt;支援方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;微信支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JSAPI/小程式/H5/Native/APP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付寶&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手機網站/電腦網站/掃碼/APP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;銀聯支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;閘道器支付/無跳轉支付&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;餘額支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;錢包餘額/積分抵扣&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-支付交易管理"&gt;3. 支付交易管理&lt;/h2&gt;
&lt;h3 id="31-支付流程"&gt;3.1 支付流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[業務下單] --&gt; B[建立支付單]
B --&gt; C[選擇支付渠道]
C --&gt; D[發起支付]
D --&gt; E{支付結果}
E --&gt;|成功| F[支付回撥]
E --&gt;|失敗| G[支付關閉]
F --&gt; H[業務通知]
H --&gt; I[交易完成]
D --&gt; D1[獲取支付引數]
D --&gt; D2[調起支付]
D --&gt; D3[等待支付]
F --&gt; F1[驗籤]
F --&gt; F2[更新狀態]
F --&gt; F3[通知業務]
&lt;/div&gt;
&lt;h3 id="32-核心能力"&gt;3.2 核心能力&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付下單&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;統一支付下單介面&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付退款&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;原路退款+部分退款&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付查詢&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時查詢支付狀態&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付回撥&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;非同步通知+簽名驗證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付關閉&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;超時關閉+主動關閉&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-錢包與資金管理"&gt;4. 錢包與資金管理&lt;/h2&gt;
&lt;h3 id="41-錢包體系"&gt;4.1 錢包體系&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[充值] --&gt; B[錢包餘額]
B --&gt; C[消費支付]
B --&gt; D[提現]
C --&gt; E[交易記錄]
D --&gt; E
A --&gt; E
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;錢包充值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多渠道充值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;餘額支付&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;錢包餘額支付&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;提現管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;提現申請+稽核&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;賬單管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;交易流水+賬單&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;對賬管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動對賬+差異處理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="5-技術架構"&gt;5. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-pay-plus"
subgraph "pay-biz"
A1[order 支付訂單]
A2[refund 退款管理]
A3[transfer 轉賬管理]
A4[wallet 錢包管理]
A5[recharge 充值管理]
A6[channel 渠道管理]
A7[app 應用管理]
A8[notify 回撥通知]
A9[reconciliation 對賬管理]
end
subgraph "許可權與審計"
B1[security 支付安全]
B2[audit 審計日誌]
B3[risk 風控管理]
end
end
A1 --&gt; B1
A2 --&gt; B2
A3 --&gt; B2
A4 --&gt; B3
A5 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="6-商業價值"&gt;6. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;支付便捷&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多渠道統一接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資金安全&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;支付安全+風控管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;高效對賬&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動對賬+差異處理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資金管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;錢包+充值+提現&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;合規審計&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;全鏈路支付審計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;擴充套件靈活&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;外掛化支付渠道&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>FITS 问题反馈系统</title><link>https://ruoyiplus.com/zh-tw/plus/fits-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/plus/fits-plus/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;基於 RuoyiPlus 後端最新架構，7 DOs / 2 Controllers，選單 ID 起始 8000，構建企業級問題反饋與追蹤系統&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-增強定位與架構"&gt;1. 增強定位與架構&lt;/h2&gt;
&lt;h3 id="11-產品定位"&gt;1.1 產品定位&lt;/h3&gt;
&lt;p&gt;RuoYiPlus FITS 圍繞&lt;strong&gt;問題追蹤&lt;/strong&gt;、&lt;strong&gt;異常報告&lt;/strong&gt;、&lt;strong&gt;專案管理&lt;/strong&gt;三大核心進行企業級增強，構建高效的問題反饋與處理閉環。&lt;/p&gt;
&lt;h3 id="12-模組規模"&gt;1.2 模組規模&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料物件 (DO)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控制器 (Controller)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;選單 ID 起始&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maven 模組&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yudao-module-fits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-核心資料表"&gt;1.3 核心資料表&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;表名&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_issue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;問題管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_project&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;專案管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fits_exception_report&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;異常報告&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "RuoYiPlus FITS 增強架構"
subgraph "問題管理"
A1[問題建立]
A2[問題分配]
A3[問題處理]
A4[問題關閉]
end
subgraph "異常報告"
B1[異常捕獲]
B2[異常分類]
B3[異常統計]
end
subgraph "專案管理"
C1[專案配置]
C2[成員管理]
end
subgraph "管控層"
D1[許可權控制]
D2[操作審計]
end
end
A1 --&gt; A2
A2 --&gt; A3
A3 --&gt; A4
B1 --&gt; B2
B2 --&gt; B3
C1 --&gt; C2
A1 --&gt; D1
B1 --&gt; D2
&lt;/div&gt;
&lt;h3 id="14-能力對比"&gt;1.4 能力對比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;維度&lt;/th&gt;
&lt;th&gt;傳統方案&lt;/th&gt;
&lt;th&gt;RuoYiPlus FITS 增強&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;簡單記錄&lt;/td&gt;
&lt;td&gt;全流程追蹤+分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常報告&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;日誌分散&lt;/td&gt;
&lt;td&gt;統一異常捕獲+分類&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;專案管理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;多專案獨立管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;統計分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;問題趨勢+異常統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;許可權控制&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;專案級許可權隔離&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;無&lt;/td&gt;
&lt;td&gt;操作審計+變更追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="2-問題管理"&gt;2. 問題管理&lt;/h2&gt;
&lt;h3 id="21-問題流程"&gt;2.1 問題流程&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph TB
A[問題建立] --&gt; B[問題分配]
B --&gt; C[問題處理]
C --&gt; D{是否解決}
D --&gt;|是| E[驗證關閉]
D --&gt;|否| F[重新處理]
F --&gt; C
E --&gt; G[問題歸檔]
A --&gt; A1[問題描述]
A --&gt; A2[優先順序]
A --&gt; A3[附件上傳]
C --&gt; C1[處理記錄]
C --&gt; C2[狀態更新]
C --&gt; C3[通知相關人]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題建立&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;描述+優先順序+附件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題分配&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;手動分配+自動分配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題處理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;處理記錄+狀態流轉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題關閉&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;驗證+歸檔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;通知提醒&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;郵件+站內信通知&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-異常報告管理"&gt;3. 異常報告管理&lt;/h2&gt;
&lt;h3 id="31-異常處理"&gt;3.1 異常處理&lt;/h3&gt;
&lt;div class="mermaid"&gt;graph LR
A[異常捕獲] --&gt; B[異常分類]
B --&gt; C[異常聚合]
C --&gt; D[趨勢分析]
D --&gt; E[告警通知]
B --&gt; B1[系統異常]
B --&gt; B2[業務異常]
B --&gt; B3[效能異常]
C --&gt; C1[同類聚合]
C --&gt; C2[頻率統計]
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力項&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常捕獲&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動捕獲+手動上報&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常分類&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系統/業務/效能分類&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常聚合&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;同類異常聚合分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;趨勢分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;異常趨勢+頻率統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;告警通知&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;閾值告警+通知&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="4-技術架構"&gt;4. 技術架構&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TB
subgraph "yudao-module-fits-plus"
subgraph "fits-biz"
A1[issue 問題管理]
A2[project 專案管理]
A3[exception 異常報告]
A4[notification 通知管理]
A5[analytics 統計分析]
end
subgraph "許可權與審計"
B1[permission 許可權控制]
B2[audit 審計日誌]
end
end
A1 --&gt; B1
A2 --&gt; B1
A3 --&gt; B2
A4 --&gt; B2
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="5-商業價值"&gt;5. 商業價值&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;價值點&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;問題閉環&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;建立→分配→處理→關閉&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;異常監控&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;實時捕獲+趨勢分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;效率提升&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自動分配+通知提醒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;資料洞察&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;問題趨勢+異常統計&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;多專案支援&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多專案獨立管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;審計合規&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作審計+變更追溯&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>更新日志</title><link>https://ruoyiplus.com/zh-tw/ruoyi/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/ruoyi/changelog/</guid><description>&lt;h2 id="版本演進"&gt;版本演進&lt;/h2&gt;
&lt;p&gt;RuoYi-Vue-Pro 從 v2.0.0 起步，持續迭代至今，總程式碼量約 &lt;strong&gt;26 萬行&lt;/strong&gt;（原始碼 16 萬行，註釋 6 萬行，單元測試 1121+ 個）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="v2612025-07-19重點更新"&gt;v2.6.1（2025-07-19）重點更新&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Vben5 + Ant Design 大規模遷移&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;遷移模組&lt;/th&gt;
&lt;th&gt;狀態&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BPM 工作流&lt;/td&gt;
&lt;td&gt;✅ 完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRM 客戶管理&lt;/td&gt;
&lt;td&gt;✅ 完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pay 支付中心&lt;/td&gt;
&lt;td&gt;✅ 完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Member 會員中心&lt;/td&gt;
&lt;td&gt;✅ 完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI 大模型&lt;/td&gt;
&lt;td&gt;✅ 完成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vben5 + Element Plus 程式碼生成示例&lt;/td&gt;
&lt;td&gt;✅ 新增&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="月度更新記錄"&gt;月度更新記錄&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;時間&lt;/th&gt;
&lt;th&gt;主要更新&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-05&lt;/td&gt;
&lt;td&gt;系統最佳化和 Bug 修復&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-04&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-03&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-02&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-01&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-12&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-11&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-10&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-09&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-08&lt;/td&gt;
&lt;td&gt;功能迭代&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025-07&lt;/td&gt;
&lt;td&gt;v2.6.1：Vben5 + Ant Design 大規模遷移&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="技術指標"&gt;技術指標&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;指標&lt;/th&gt;
&lt;th&gt;數值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;總程式碼行數&lt;/td&gt;
&lt;td&gt;259,995&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;原始碼行數&lt;/td&gt;
&lt;td&gt;161,332&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;註釋行數&lt;/td&gt;
&lt;td&gt;59,755&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;單元測試數&lt;/td&gt;
&lt;td&gt;1,121+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;業務子系統&lt;/td&gt;
&lt;td&gt;14 個&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;資料庫表總數&lt;/td&gt;
&lt;td&gt;300+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;支援前端版本&lt;/td&gt;
&lt;td&gt;4 個（Vue3 / Vben5 / Vue2 / uni-app）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>⚡️ Turn Jupyter Notebooks into Blog Posts</title><link>https://ruoyiplus.com/zh-tw/blog/notebook-onboarding/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/notebook-onboarding/</guid><description>&lt;p&gt;As a researcher or data scientist, your work often lives in Jupyter Notebooks. But sharing those insights effectively usually means taking screenshots, messy copy-pasting, or exporting to PDF.&lt;/p&gt;
&lt;p&gt;Hugo Blox changes that. With the &lt;code&gt;{{&amp;lt; notebook &amp;gt;}}&lt;/code&gt; shortcode, you can render your actual &lt;code&gt;.ipynb&lt;/code&gt; files directly as beautiful, interactive blog posts or project pages. Keep your code, outputs, and narrative in one place.&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" open&gt;
&lt;summary&gt;目錄&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#why-publish-notebooks"&gt;Why publish notebooks?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#example-data-science-workflow"&gt;Example: Data Science Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#how-to-add-a-notebook"&gt;How to add a notebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#next-steps"&gt;Next steps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="why-publish-notebooks"&gt;Why publish notebooks?&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;提示&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;strong&gt;Reproducible Research&lt;/strong&gt;: By publishing the actual notebook, you allow others to download and run your code, verifying your results and building upon your work.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No more screenshots&lt;/strong&gt; – Render crisp code and vector plots directly from your source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theme consistent&lt;/strong&gt; – Notebooks automatically adapt to your site&amp;rsquo;s theme (including dark mode).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible sourcing&lt;/strong&gt; – Display notebooks from your &lt;code&gt;assets/&lt;/code&gt; folder, page bundles, or even directly from a remote GitHub URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive&lt;/strong&gt; – Users can copy code blocks or download the full notebook to run locally.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="example-data-science-workflow"&gt;Example: Data Science Workflow&lt;/h2&gt;
&lt;p&gt;Below is a live example of a notebook rendered right here in this post. Notice how the markdown, code, and outputs (text, HTML, and JSON) are all preserved and styled.&lt;/p&gt;
&lt;div id="hb-notebook-86b2483a72d99021c62bf6617361405b" class="hb-notebook not-prose" data-hb-component="notebook" aria-label="Notebook Launch Readiness Analysis" style="--hb-notebook-output-max-height:26rem;"&gt;
&lt;div class="hb-notebook-header"&gt;
&lt;div class="hb-notebook-heading"&gt;
&lt;p class="hb-notebook-title"&gt;Launch Readiness Analysis&lt;/p&gt;
&lt;p class="hb-notebook-subtitle"&gt;Python · Kernel: Python 3 · nbformat 4.5 · 6 cells&lt;/p&gt;
&lt;/div&gt;
&lt;a class="hb-notebook-download" href="https://ruoyiplus.com/zh-tw/blog/notebook-onboarding/hugoblox-onboarding.ipynb" download&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/&gt;&lt;/svg&gt;
&lt;span&gt;Download notebook&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;dl class="hb-notebook-metadata"&gt;
&lt;div&gt;
&lt;dt&gt;Language&lt;/dt&gt;
&lt;dd&gt;Python&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Version&lt;/dt&gt;
&lt;dd&gt;3.11&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Kernel&lt;/dt&gt;
&lt;dd&gt;Python 3 python3&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;nbformat&lt;/dt&gt;
&lt;dd&gt;4.5&lt;/dd&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;dt&gt;Authors&lt;/dt&gt;
&lt;dd&gt;Ownable CMS&lt;/dd&gt;
&lt;/div&gt;
&lt;/dl&gt;&lt;div class="hb-notebook-body"&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--markdown" data-cell-type="markdown"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;Markdown&lt;/span&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-markdown prose dark:prose-invert"&gt;
&lt;h1 id="ship-notebook-stories-in-minutes"&gt;Ship Notebook Stories in Minutes&lt;/h1&gt;
&lt;p&gt;Hugo Blox Notebook renderer turns your &lt;code&gt;.ipynb&lt;/code&gt; experiments into beautiful long-form posts.
Use this sample to see how markdown, code, and outputs flow together.&lt;/p&gt;
&lt;/div&gt;
&lt;/article&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--markdown" data-cell-type="markdown"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;Markdown&lt;/span&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-markdown prose dark:prose-invert"&gt;
&lt;ol&gt;
&lt;li&gt;Drop notebooks inside &lt;code&gt;assets/notebooks/&lt;/code&gt; (or import them as page resources).&lt;/li&gt;
&lt;li&gt;Reference them with &lt;code&gt;{{&amp;lt;/* notebook src=&amp;quot;your.ipynb&amp;quot; */&amp;gt;}}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Control code, outputs, metadata badges, and download links via shortcode params.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/article&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--code" data-cell-type="code"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;In [1]&lt;/span&gt;
&lt;div class="hb-notebook-tags"&gt;
&lt;span&gt;demo&lt;/span&gt;
&lt;span&gt;quickstart&lt;/span&gt;
&lt;/div&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-code" data-language="python"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;math&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;accuracy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.982&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Collecting data...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Training notebook-ready block...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Done!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;accuracy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="hb-notebook-outputs"&gt;&lt;pre class="hb-notebook-output hb-notebook-output--stream"&gt;&lt;code&gt;Collecting data...
Training notebook-ready block...
Done!
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class="hb-notebook-output hb-notebook-output--text"&gt;&lt;code&gt;0.982&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/article&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--code" data-cell-type="code"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;In [2]&lt;/span&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-code" data-language="python"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;IPython.display&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HTML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;div style=&amp;#39;font-family:Inter,ui-sans-serif;&amp;#39;&amp;gt;&amp;lt;strong&amp;gt;Launch Readiness:&amp;lt;/strong&amp;gt; &amp;lt;span style=&amp;#39;color:#22c55e;&amp;#39;&amp;gt;98.2&lt;/span&gt;&lt;span class="si"&gt;% c&lt;/span&gt;&lt;span class="s2"&gt;onfidence&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;em&amp;gt;Notebook blocks are theme-aware and dark-mode friendly.&amp;lt;/em&amp;gt;&amp;lt;/div&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="hb-notebook-outputs"&gt;
&lt;div class="hb-notebook-output hb-notebook-output--html"&gt;&lt;div style='font-family:Inter,ui-sans-serif;'&gt;&lt;strong&gt;Launch Readiness:&lt;/strong&gt; &lt;span style='color:#22c55e;'&gt;98.2% confidence&lt;/span&gt;&lt;br&gt;&lt;em&gt;Notebook blocks are theme-aware and dark-mode friendly.&lt;/em&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/article&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--code" data-cell-type="code"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;In [3]&lt;/span&gt;
&lt;div class="hb-notebook-tags"&gt;
&lt;span&gt;metrics&lt;/span&gt;
&lt;/div&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-code" data-language="python"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;metrics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;engagement_rate&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.73&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;read_time_minutes&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;4.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;subscribers&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1280&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div class="hb-notebook-outputs"&gt;&lt;pre class="hb-notebook-output hb-notebook-output--json"&gt;&lt;code&gt;{
"metrics": {
"engagement_rate": 0.73,
"read_time_minutes": 4.6,
"subscribers": 1280
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/article&gt;&lt;article class="hb-notebook-cell hb-notebook-cell--markdown" data-cell-type="markdown"&gt;
&lt;header class="hb-notebook-cell-header"&gt;
&lt;span class="hb-notebook-pill"&gt;Markdown&lt;/span&gt;
&lt;/header&gt;
&lt;div class="hb-notebook-markdown prose dark:prose-invert"&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Tip: Pair this block with Call-to-Action cards or the Embed shortcode to link to GitHub repos, datasets, or ARXIV preprints.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/article&gt;
&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="notebook" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="how-to-add-a-notebook"&gt;How to add a notebook&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Save your notebook.&lt;/strong&gt; Place your &lt;code&gt;.ipynb&lt;/code&gt; file in &lt;code&gt;assets/notebooks/&lt;/code&gt; (for global access) or inside a page bundle (like &lt;code&gt;content/blog/my-post/analysis.ipynb&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add the shortcode.&lt;/strong&gt; In any Markdown page, simply use:
&lt;code&gt;{{&amp;lt; notebook src=&amp;quot;analysis.ipynb&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize.&lt;/strong&gt; You can hide code cells for non-technical audiences (&lt;code&gt;show_code=false&lt;/code&gt;) or just show the output (&lt;code&gt;show_outputs=true&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="important"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;重要&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Hugo Blox respects your privacy. Notebook rendering happens statically at build time—no third-party services required.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="next-steps"&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Try it out:&lt;/strong&gt; Drop one of your existing notebooks into this site and see how it looks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Link your papers:&lt;/strong&gt; Use the Embed shortcode to link your notebook to your latest arXiv preprint or GitHub repository.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get help:&lt;/strong&gt; Join the community on
or check the
.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy researching! 🚀&lt;/p&gt;</description></item><item><title>RuoYiPlus 企业级增强方案</title><link>https://ruoyiplus.com/zh-tw/projects/ruoyi-plus/</link><pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/ruoyi-plus/</guid><description>&lt;p&gt;站在 RuoYi-Vue-Pro 和 Yudao 的肩膀上，為業務規模化運營提供開箱即用的增強方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14 大增強模組：&lt;/strong&gt; 安全合規增強、身份治理增強（IAM/SSO/OAuth2）、商業化增強（License/版本矩陣）、企業協同增強（IM/PM/CS）、郵件基礎設施等。覆蓋四大核心領域，填平開源框架到業務落地的「最後一公里」。&lt;/p&gt;</description></item><item><title>交易所撮合引擎</title><link>https://ruoyiplus.com/zh-tw/projects/exchange-engine/</link><pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/exchange-engine/</guid><description>&lt;p&gt;基於 Rust + Raft 協議的交易所撮合引擎。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心能力：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;訂單簿與撮合：實現嚴格的價格-時間優先匹配演算法，支援限價單/市價單全生命週期管理&lt;/li&gt;
&lt;li&gt;Raft 狀態機複製（SMR）：訂單指令經 Raft Log 複製，結合 Snapshot + WAL 機制&lt;/li&gt;
&lt;li&gt;多交易對動態管理：按 Symbol 做 Raft Group 分片，實現撮合引擎水平擴充套件&lt;/li&gt;
&lt;li&gt;賬戶與風控：Rate Limit / 倉位檢查 / 合約槓桿強平 / 期權 Greeks 計算&lt;/li&gt;
&lt;li&gt;清結算與行情：清結算流程設計、鏈上充提對接、Level 2/3 推送最佳化&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>PyRebuilderSharp</title><link>https://ruoyiplus.com/zh-tw/projects/pyrebuilder/</link><pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/pyrebuilder/</guid><description>&lt;p&gt;基於 .NET 10 + Avalonia UI 的跨平臺 Python 位元組碼反編譯器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心創新——塊級容錯架構：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;四階段模組化管道：PycReader → BlockScanner → ControlFlowScanner → AstBuilder → PythonCodeGenerator&lt;/li&gt;
&lt;li&gt;每個基本塊獨立棧機模擬和 AST 構建，單個塊失敗不影響其餘 99% 程式碼&lt;/li&gt;
&lt;li&gt;182 個真實 .pyc 基線測試集（Python 3.6–3.13），100% 透過率&lt;/li&gt;
&lt;li&gt;AI 輔助深度應用：思路驗證、邊界補全、模式匹配程式碼生成&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>QuantByQlib 量化选股</title><link>https://ruoyiplus.com/zh-tw/projects/quant-qlib/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/quant-qlib/</guid><description>&lt;p&gt;AI 驅動的量化選股系統，基於 Qlib + LightGBM + 雙 LLM 降級架構。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心能力：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;雙 LLM 降級架構（Claude 主力 + DeepSeek 降級），生成高質量個股分析報告&lt;/li&gt;
&lt;li&gt;RD-Agent 因子發現結果透過標準化 IC 驗證管道自動注入 LightGBM 策略&lt;/li&gt;
&lt;li&gt;&amp;ldquo;發現 → 驗證 → 實盤化&amp;rdquo; 閉環&lt;/li&gt;
&lt;li&gt;本地 ML 和雲端 LLM 的專精與通用結合&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Example Talk: Recent Work</title><link>https://ruoyiplus.com/zh-tw/slides/example/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/slides/example/</guid><description>&lt;!-- no-branding --&gt;
&lt;h1 id="example-talk"&gt;Example Talk&lt;/h1&gt;
&lt;h3 id="dr-alex-johnson--meta-ai"&gt;Dr. Alex Johnson · Meta AI&lt;/h3&gt;
&lt;hr&gt;
&lt;h2 id="research-overview"&gt;Research Overview&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Multimodal LLMs&lt;/li&gt;
&lt;li&gt;Efficient training&lt;/li&gt;
&lt;li&gt;Responsible AI&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="code--math"&gt;Code &amp;amp; Math&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;$$
E = mc^2
$$&lt;hr&gt;
&lt;h2 id="dual-column-layout"&gt;Dual Column Layout&lt;/h2&gt;
&lt;div class="r-hstack"&gt;
&lt;div style="flex: 1; padding-right: 1rem;"&gt;
&lt;h3 id="left-column"&gt;Left Column&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Point A&lt;/li&gt;
&lt;li&gt;Point B&lt;/li&gt;
&lt;li&gt;Point C&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="flex: 1; padding-left: 1rem;"&gt;
&lt;h3 id="right-column"&gt;Right Column&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Detail 1&lt;/li&gt;
&lt;li&gt;Detail 2&lt;/li&gt;
&lt;li&gt;Detail 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;!-- Alternative: Asymmetric columns --&gt;
&lt;div style="display: flex; gap: 2rem;"&gt;
&lt;div style="flex: 2;"&gt;
&lt;h3 id="main-content-23-width"&gt;Main Content (2/3 width)&lt;/h3&gt;
&lt;p&gt;This column takes up twice the space of the right column.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;example&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;code works too&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div style="flex: 1;"&gt;
&lt;h3 id="sidebar-13-width"&gt;Sidebar (1/3 width)&lt;/h3&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
Key points in smaller column&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="image--text-layout"&gt;Image + Text Layout&lt;/h2&gt;
&lt;div class="r-hstack" style="align-items: center;"&gt;
&lt;div style="flex: 1;"&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img src="https://images.unsplash.com/photo-1708011271954-c0d2b3155ded?w=400&amp;amp;dpr=2&amp;amp;h=400&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;q=60&amp;amp;ixid=M3wxMjA3fDB8MXxzZWFyY2h8MTh8fG1hdGhlbWF0aWNzfGVufDB8fHx8MTc2NTYzNTEzMHww&amp;amp;ixlib=rb-4.1.0" alt="" loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div style="flex: 1; padding-left: 2rem;"&gt;
&lt;h3 id="results"&gt;Results&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;95% accuracy&lt;/li&gt;
&lt;li&gt;10x faster inference&lt;/li&gt;
&lt;li&gt;Lower memory usage&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="fragment " &gt;
&lt;strong&gt;Breakthrough!&lt;/strong&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="speaker-notes"&gt;Speaker Notes&lt;/h2&gt;
&lt;p&gt;Press &lt;strong&gt;S&lt;/strong&gt; to open presenter view with notes!&lt;/p&gt;
&lt;p&gt;This slide has hidden speaker notes below.&lt;/p&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is a &lt;strong&gt;speaker note&lt;/strong&gt; (only visible in presenter view)&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;S&lt;/code&gt; key to open presenter console&lt;/li&gt;
&lt;li&gt;Perfect for remembering key talking points&lt;/li&gt;
&lt;li&gt;Can include reminders, timing, references&lt;/li&gt;
&lt;li&gt;Supports &lt;strong&gt;Markdown&lt;/strong&gt; formatting too!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="progressive-reveals"&gt;Progressive Reveals&lt;/h2&gt;
&lt;p&gt;Content appears step-by-step:&lt;/p&gt;
&lt;span class="fragment " &gt;
First point appears
&lt;/span&gt;
&lt;span class="fragment " &gt;
Then the second point
&lt;/span&gt;
&lt;span class="fragment " &gt;
Finally the conclusion
&lt;/span&gt;
&lt;span class="fragment highlight-red" &gt;
This one can be &lt;strong&gt;highlighted&lt;/strong&gt;!
&lt;/span&gt;
&lt;p&gt;Note:
Use fragments to control pacing and maintain audience attention. Each fragment appears on click.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="diagrams-with-mermaid"&gt;Diagrams with Mermaid&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph LR
A[Research Question] --&gt; B{Hypothesis}
B --&gt;|Valid| C[Experiment]
B --&gt;|Invalid| D[Revise]
C --&gt; E[Analyze Data]
E --&gt; F{Significant?}
F --&gt;|Yes| G[Publish]
F --&gt;|No| D
&lt;/div&gt;
&lt;p&gt;Perfect for: Workflows, architectures, processes&lt;/p&gt;
&lt;p&gt;Note:
Mermaid diagrams are created from simple text. They&amp;rsquo;re version-controllable and edit anywhere!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="research-results"&gt;Research Results&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;87.3%&lt;/td&gt;
&lt;td&gt;1.0x&lt;/td&gt;
&lt;td&gt;2GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ours (v1)&lt;/td&gt;
&lt;td&gt;92.1%&lt;/td&gt;
&lt;td&gt;1.5x&lt;/td&gt;
&lt;td&gt;1.8GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ours (v2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.3x&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.2GB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;Key Finding:&lt;/strong&gt; 8.5% improvement over baseline with 40% memory reduction&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note:
Tables are perfect for comparative results. Markdown tables are simple and version-control friendly.&lt;/p&gt;
&lt;hr&gt;
&lt;section data-noprocess data-shortcode-slide
data-background-color="#1e3a8a"
&gt;
&lt;h2 id="custom-backgrounds"&gt;Custom Backgrounds&lt;/h2&gt;
&lt;p&gt;This slide has a &lt;strong&gt;blue background&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;You can customize:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Background colors&lt;/li&gt;
&lt;li&gt;Background images&lt;/li&gt;
&lt;li&gt;Gradients&lt;/li&gt;
&lt;li&gt;Videos (yes, really!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use &lt;code&gt;{{&amp;lt; slide background-color=&amp;quot;#hex&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="vertical-navigation"&gt;Vertical Navigation&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;There&amp;rsquo;s more content below! ⬇️&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Press the &lt;strong&gt;Down Arrow&lt;/strong&gt; to see substeps.&lt;/p&gt;
&lt;p&gt;Note:
This demonstrates Reveal.js&amp;rsquo;s vertical slide feature. Great for optional details or deep dives.&lt;/p&gt;
&lt;hr&gt;
&lt;section data-noprocess data-shortcode-slide
id="substep-1"
&gt;
&lt;h3 id="substep-1-details"&gt;Substep 1: Details&lt;/h3&gt;
&lt;p&gt;This is additional content in a vertical stack.&lt;/p&gt;
&lt;p&gt;Navigate down for more, or right to skip to next topic →&lt;/p&gt;
&lt;hr&gt;
&lt;section data-noprocess data-shortcode-slide
id="substep-2"
&gt;
&lt;h3 id="substep-2-more-details"&gt;Substep 2: More Details&lt;/h3&gt;
&lt;p&gt;Even more detailed information.&lt;/p&gt;
&lt;p&gt;Press &lt;strong&gt;Up Arrow&lt;/strong&gt; to go back, or &lt;strong&gt;Right Arrow&lt;/strong&gt; to continue.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="citations--quotes"&gt;Citations &amp;amp; Quotes&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;The best way to predict the future is to invent it.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— Alan Kay&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Or reference research:&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Recent work by Smith et al. (2024) demonstrates that Markdown-based slides improve reproducibility by 78% compared to proprietary formats&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="media-youtube-videos"&gt;Media: YouTube Videos&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Note:
Embed YouTube videos with just the video ID. Perfect for demos, tutorials, or interviews.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="media-all-options"&gt;Media: All Options&lt;/h2&gt;
&lt;p&gt;Embed various media types with simple shortcodes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YouTube&lt;/strong&gt;: &lt;code&gt;{{&amp;lt; youtube VIDEO_ID &amp;gt;}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilibili&lt;/strong&gt;: &lt;code&gt;{{&amp;lt; bilibili id=&amp;quot;BV1...&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local videos&lt;/strong&gt;: &lt;code&gt;{{&amp;lt; video src=&amp;quot;file.mp4&amp;quot; controls=&amp;quot;yes&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio&lt;/strong&gt;: &lt;code&gt;{{&amp;lt; audio src=&amp;quot;file.mp3&amp;quot; &amp;gt;}}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Perfect for demos, interviews, tutorials, or podcasts!&lt;/p&gt;
&lt;p&gt;Note:
All media types work seamlessly in slides. Just use the appropriate shortcode.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="interactive-elements"&gt;Interactive Elements&lt;/h2&gt;
&lt;p&gt;Try these keyboard shortcuts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;→&lt;/code&gt; &lt;code&gt;←&lt;/code&gt; : Navigate slides&lt;/li&gt;
&lt;li&gt;&lt;code&gt;↓&lt;/code&gt; &lt;code&gt;↑&lt;/code&gt; : Vertical navigation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S&lt;/code&gt; : Speaker notes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F&lt;/code&gt; : Fullscreen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;O&lt;/code&gt; : Overview mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt; : Search&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ESC&lt;/code&gt; : Exit modes&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;!-- hide --&gt;
&lt;h2 id="hidden-slide-demo-inline-comment"&gt;Hidden Slide Demo (Inline Comment)&lt;/h2&gt;
&lt;p&gt;This slide is hidden using the &lt;code&gt;&amp;lt;!-- hide --&amp;gt;&lt;/code&gt; comment method.&lt;/p&gt;
&lt;p&gt;Perfect for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Speaker-only content&lt;/li&gt;
&lt;li&gt;Backup slides&lt;/li&gt;
&lt;li&gt;Work-in-progress content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note:
This slide won&amp;rsquo;t appear in the presentation but remains in source for reference.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="thanks"&gt;Thanks&lt;/h2&gt;
&lt;h3 id="questions"&gt;Questions?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;🌐 Website:
&lt;/li&gt;
&lt;li&gt;🐦 X/Twitter:
&lt;/li&gt;
&lt;li&gt;💬 Discord:
&lt;/li&gt;
&lt;li&gt;⭐ GitHub:
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;All slides created with Markdown&lt;/strong&gt; • No vendor lock-in • Edit anywhere&lt;/p&gt;
&lt;p&gt;Note:
Thank you for your attention! Feel free to reach out with questions or contributions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-branding-your-slides"&gt;🎨 Branding Your Slides&lt;/h2&gt;
&lt;p&gt;Add your identity to every slide with simple configuration!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What you can add:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Position Options&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Logo&lt;/td&gt;
&lt;td&gt;top-left, top-right, bottom-left, bottom-right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;Same as above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;Same as above&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Footer Text&lt;/td&gt;
&lt;td&gt;Same + bottom-center&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Edit the &lt;code&gt;branding:&lt;/code&gt; section in your slide&amp;rsquo;s front matter (top of file).&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-adding-your-logo"&gt;📁 Adding Your Logo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Place your logo in &lt;code&gt;assets/media/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Use SVG format for best results (auto-adapts to any theme!)&lt;/li&gt;
&lt;li&gt;Add to front matter:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;branding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-logo.svg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Must be in assets/media/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;top-right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;60px&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; SVGs with &lt;code&gt;fill=&amp;quot;currentColor&amp;quot;&lt;/code&gt; automatically match theme colors!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-title--author-overlays"&gt;📝 Title &amp;amp; Author Overlays&lt;/h2&gt;
&lt;p&gt;Show presentation title and/or author on every slide:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;branding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;show&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bottom-left&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Short Title&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Optional: override long page title&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;author&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;show&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bottom-right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Author is auto-detected from page front matter (&lt;code&gt;author:&lt;/code&gt; or &lt;code&gt;authors:&lt;/code&gt;).&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-footer-text"&gt;📄 Footer Text&lt;/h2&gt;
&lt;p&gt;Add copyright, conference name, or any persistent text:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;branding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;© 2026 RuoyiPlus · Ruoyi Plus 2026&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bottom-center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Supports Markdown! Use &lt;code&gt;[Link](url)&lt;/code&gt; for clickable links.&lt;/p&gt;
&lt;hr&gt;
&lt;!-- no-branding --&gt;
&lt;h2 id="-hiding-branding-per-slide"&gt;🔇 Hiding Branding Per-Slide&lt;/h2&gt;
&lt;p&gt;Sometimes you want a clean slide (title slides, full-screen images).&lt;/p&gt;
&lt;p&gt;Add this comment at the &lt;strong&gt;start&lt;/strong&gt; of your slide content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- no-branding --&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## My Clean Slide
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Content here...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;☝️ &lt;strong&gt;This slide uses &lt;code&gt;&amp;lt;!-- no-branding --&amp;gt;&lt;/code&gt;&lt;/strong&gt; — notice no logo or overlays!&lt;/p&gt;
&lt;hr&gt;
&lt;!-- no-header --&gt;
&lt;h2 id="-selective-hiding"&gt;🔇 Selective Hiding&lt;/h2&gt;
&lt;p&gt;Hide just the header (logo + title):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- no-header --&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or just the footer (author + footer text):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;!-- no-footer --&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;☝️ &lt;strong&gt;This slide uses &lt;code&gt;&amp;lt;!-- no-header --&amp;gt;&lt;/code&gt;&lt;/strong&gt; — footer still visible below!&lt;/p&gt;
&lt;hr&gt;
&lt;!-- no-footer --&gt;
&lt;h2 id="-quick-reference"&gt;✅ Quick Reference&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comment&lt;/th&gt;
&lt;th&gt;Hides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;!-- no-branding --&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Everything (logo, title, author, footer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;!-- no-header --&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logo + Title overlay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;!-- no-footer --&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Author + Footer text&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;☝️ &lt;strong&gt;This slide uses &lt;code&gt;&amp;lt;!-- no-footer --&amp;gt;&lt;/code&gt;&lt;/strong&gt; — logo still visible above!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-get-started"&gt;🚀 Get Started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Copy this example&amp;rsquo;s front matter as a starting point&lt;/li&gt;
&lt;li&gt;Replace logo with yours in &lt;code&gt;assets/media/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Customize positions and text&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;&amp;lt;!-- no-branding --&amp;gt;&lt;/code&gt; for special slides&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Set site-wide defaults in &lt;code&gt;config/_default/params.yaml&lt;/code&gt; under &lt;code&gt;slides.branding&lt;/code&gt;!&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Smith, J. et al. (2024). &lt;em&gt;Open Science Presentations&lt;/em&gt;. Nature Methods.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>🎉 Easily create your own simple yet highly customizable blog</title><link>https://ruoyiplus.com/zh-tw/blog/get-started/</link><pubDate>Fri, 27 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/get-started/</guid><description>&lt;p&gt;Welcome 👋&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" open&gt;
&lt;summary&gt;目錄&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#overview"&gt;Overview&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#get-started"&gt;Get Started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#crowd-funded-open-source-software"&gt;Crowd-funded open-source software&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#-click-here-to-become-a-sponsor-and-help-support-hugo-blox"&gt;❤️ Click here to become a sponsor and help support Hugo Blox’s future ❤️&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#ecosystem"&gt;Ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#inspiration"&gt;Inspiration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#features"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#themes"&gt;Themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#license"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;The Hugo Blox website builder for Hugo, along with its starter templates, is designed for professional creators, educators, and teams/organizations - although it can be used to create any kind of site&lt;/li&gt;
&lt;li&gt;The template can be modified and customised to suit your needs. It&amp;rsquo;s a good platform for anyone looking to take control of their data and online identity whilst having the convenience to start off with a &lt;strong&gt;no-code solution (write in Markdown and customize with YAML parameters)&lt;/strong&gt; and having &lt;strong&gt;flexibility to later add even deeper personalization with HTML and CSS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You can work with all your favourite tools and apps with hundreds of plugins and integrations to speed up your workflows, interact with your readers, and much more&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="get-started"&gt;Get Started&lt;/h3&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Quick Start Guide&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;New to Hugo Blox? Follow these steps to get your site up and running in minutes!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;👉
&lt;/li&gt;
&lt;li&gt;📚
&lt;/li&gt;
&lt;li&gt;💬
or
&lt;/li&gt;
&lt;li&gt;🐦 Twitter:
#MadeWithHugoBlox&lt;/li&gt;
&lt;li&gt;💡
&lt;/li&gt;
&lt;li&gt;⬆️ &lt;strong&gt;Updating Hugo Blox?&lt;/strong&gt; View the
and
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="important"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;重要&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Remember to backup your site before making major updates!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="crowd-funded-open-source-software"&gt;Crowd-funded open-source software&lt;/h2&gt;
&lt;p&gt;To help us develop this template and software sustainably under the MIT license, we ask all individuals and businesses that use it to help support its ongoing maintenance and development via sponsorship.&lt;/p&gt;
&lt;h3 id="-click-here-to-become-a-sponsor-and-help-support-hugo-blox"&gt;
&lt;/h3&gt;
&lt;p&gt;As a token of appreciation for sponsoring, you can &lt;strong&gt;unlock
awesome rewards and extra features 🦄✨&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="ecosystem"&gt;Ecosystem&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;
:&lt;/strong&gt; Automatically import publications from BibTeX&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="inspiration"&gt;Inspiration&lt;/h2&gt;
&lt;p&gt;
are building with this template.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Enhanced Markdown Support&lt;br&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Hugo Blox now supports GitHub and Obsidian-style callouts! Use standard Markdown alert syntax like &lt;code&gt;&amp;gt; [!NOTE]&lt;/code&gt; for better portability.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Page builder&lt;/strong&gt; - Create &lt;em&gt;anything&lt;/em&gt; with no-code
and
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit any type of content&lt;/strong&gt; - Blog posts, publications, talks, slides, projects, and more!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create content&lt;/strong&gt; in
,
, or
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin System&lt;/strong&gt; - Fully customizable
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Display Code and Math&lt;/strong&gt; - Code syntax highlighting and LaTeX math supported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrations&lt;/strong&gt; -
,
, Maps, Contact Forms, and more!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beautiful Site&lt;/strong&gt; - Simple and refreshing one-page design&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industry-Leading SEO&lt;/strong&gt; - Help get your website found on search engines and social media&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Media Galleries&lt;/strong&gt; - Display your images and videos with captions in a customizable gallery&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile Friendly&lt;/strong&gt; - Look amazing on every screen with a mobile friendly version of your site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-language&lt;/strong&gt; - 35+ language packs including English, 中文, and Português&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-user&lt;/strong&gt; - Each author gets their own profile page&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy Pack&lt;/strong&gt; - Assists with GDPR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stand Out&lt;/strong&gt; - Bring your site to life with animation, parallax backgrounds, and scroll effects&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-Click Deployment&lt;/strong&gt; - No servers. No databases. Only files.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-orange-100 dark:bg-orange-900 border-orange-500"
data-callout="warning"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-orange-600 dark:text-orange-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Version Requirements&lt;br&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;The new Markdown alert syntax requires Hugo v0.132.0 or later. Make sure you&amp;rsquo;re using a compatible version!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="themes"&gt;Themes&lt;/h2&gt;
&lt;p&gt;Hugo Blox and its templates come with &lt;strong&gt;automatic day (light) and night (dark) mode&lt;/strong&gt; built-in. Visitors can choose their preferred mode by clicking the sun/moon icon in the header.&lt;/p&gt;
&lt;p&gt;
for your site. Themes are fully customizable.&lt;/p&gt;
&lt;h2 id="license"&gt;License&lt;/h2&gt;
&lt;p&gt;Released under the
license.&lt;/p&gt;</description></item><item><title>PyTorch</title><link>https://ruoyiplus.com/zh-tw/projects/pytorch/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/pytorch/</guid><description>&lt;p&gt;PyTorch is a Python package that provides tensor computation (like NumPy) with strong GPU acceleration.&lt;/p&gt;</description></item><item><title>scikit-learn</title><link>https://ruoyiplus.com/zh-tw/projects/scikit/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/scikit/</guid><description>&lt;p&gt;scikit-learn is a Python module for machine learning built on top of SciPy and is distributed under the 3-Clause BSD license.&lt;/p&gt;</description></item><item><title>🧠 Sharpen your thinking with a second brain</title><link>https://ruoyiplus.com/zh-tw/blog/second-brain/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/second-brain/</guid><description>&lt;p&gt;Create a personal knowledge base and share your knowledge with your peers.&lt;/p&gt;
&lt;p&gt;Hugo Blox web framework empowers you with one of the most flexible note-taking capabilities out there.&lt;/p&gt;
&lt;p&gt;Create a powerful knowledge base that works on top of a local folder of plain text Markdown files.&lt;/p&gt;
&lt;p&gt;Use it as your second brain, either publicly sharing your knowledge with your peers via your website, or via a private GitHub repository and password-protected site just for yourself.&lt;/p&gt;
&lt;h2 id="mindmaps"&gt;Mindmaps&lt;/h2&gt;
&lt;p&gt;Hugo Blox supports a Markdown extension for mindmaps.&lt;/p&gt;
&lt;p&gt;With this open format, can even edit your mindmaps in other popular tools such as Obsidian.&lt;/p&gt;
&lt;p&gt;Simply insert a Markdown code block labelled as &lt;code&gt;markmap&lt;/code&gt; and optionally set the height of the mindmap as shown in the example below.&lt;/p&gt;
&lt;p&gt;Mindmaps can be created by simply writing the items as a Markdown list within the &lt;code&gt;markmap&lt;/code&gt; code block, indenting each item to create as many sub-levels as you need:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre class="chroma"&gt;
&lt;code&gt;
```markmap {height="200px"}
- Hugo Modules
- Hugo Blox
- netlify
- netlify-cms
- slides
```
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="markmap" style="height: 200px;"&gt;
&lt;pre&gt;- Hugo Modules
- Hugo Blox
- netlify
- netlify-cms
- slides&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Anh here&amp;rsquo;s a more advanced mindmap with formatting, code blocks, and math:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre class="chroma"&gt;
&lt;code&gt;
```markmap
- Mindmaps
- Links
- [Hugo Blox Docs](https://docs.hugoblox.com/)
- [Discord Community](https://discord.gg/z8wNYzb)
- [GitHub](https://github.com/HugoBlox/kit)
- Features
- Markdown formatting
- **inline** ~~text~~ *styles*
- multiline
text
- `inline code`
- Math: $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$
```
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="markmap" style="height: 500px;"&gt;
&lt;pre&gt;- Mindmaps
- Links
- [Hugo Blox Docs](https://docs.hugoblox.com/)
- [Discord Community](https://discord.gg/z8wNYzb)
- [GitHub](https://github.com/HugoBlox/kit)
- Features
- Markdown formatting
- **inline** ~~text~~ *styles*
- multiline
text
- `inline code`
- Math: $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id="highlighting"&gt;Highlighting&lt;/h2&gt;
&lt;p&gt;&lt;mark&gt;Highlight&lt;/mark&gt; important text with &lt;code&gt;mark&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Highlighted text&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;mark&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="callouts"&gt;Callouts&lt;/h2&gt;
&lt;p&gt;Use
(aka &lt;em&gt;asides&lt;/em&gt;, &lt;em&gt;hints&lt;/em&gt;, or &lt;em&gt;alerts&lt;/em&gt;) to draw attention to notes, tips, and warnings.&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;&amp;gt; [!NOTE]&lt;/code&gt; syntax to create a callout.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!NOTE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;A Markdown aside is useful for displaying notices, hints, or definitions to your readers.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;A Markdown aside is useful for displaying notices, hints, or definitions to your readers.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Or use the &lt;code&gt;warning&lt;/code&gt; callout type so your readers don&amp;rsquo;t miss critical details:&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-orange-100 dark:bg-orange-900 border-orange-500"
data-callout="warning"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-orange-600 dark:text-orange-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;警告&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;A Markdown aside is useful for displaying notices, hints, or definitions to your readers.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-"&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h2&gt;</description></item><item><title>📈 Communicate your results effectively with the best data visualizations</title><link>https://ruoyiplus.com/zh-tw/blog/data-visualization/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/data-visualization/</guid><description>&lt;p&gt;Hugo Blox is designed to give technical content creators a seamless experience. You can focus on the content and Hugo Blox handles the rest.&lt;/p&gt;
&lt;p&gt;Use popular tools such as Plotly, Mermaid, and data frames.&lt;/p&gt;
&lt;h2 id="embed-rich-content"&gt;Embed Rich Content&lt;/h2&gt;
&lt;p&gt;HuggingFace Model&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-7aa30c396b2f58a7972cf6a10cb190b4"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-yellow-400 to-orange-500 flex items-center justify-center"&gt;
&lt;svg class="w-6 h-6 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="currentColor" d="M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378c0 1.112.178 2.181.503 3.185c.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284c.278.173.48.408.71.694c.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542c.01.026.653 1.552 1.657 2.54c.616.605 1.01 1.223 1.082 1.912c.055.537-.096 1.059-.38 1.572c.637.121 1.294.187 1.967.187c.657 0 1.298-.063 1.921-.178c-.287-.517-.44-1.041-.384-1.581c.07-.69.465-1.307 1.081-1.913c1.004-.987 1.647-2.513 1.657-2.539c.021-.074.083-.285.233-.542c.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952c.23-.286.432-.52.71-.694c.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174a1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094c-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71c-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013a1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921a.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92a.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164c1.607-.007 2.984-1.155 3.572-1.164c.196-.003.305.12.305.454c0 .886-.424 2.328-1.563 3.202c-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026l-.01.008l-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116a1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243a1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444c-.034-.016-.104-.008-.2.022q-.094.03-.216.087q-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096a3 3 0 0 0-.26.219a2 2 0 0 0-.12.121a2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203c0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194c-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858s-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64c-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647s2.822 2.813 2.562 3.244s-1.176-.506-1.176-.506s-2.866-2.567-3.49-1.898s.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405c-.238.839-2.71-1.587-3.216-.642c-.506.946 3.49 2.056 3.522 2.064c1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194c1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858s.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64c.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647s-2.822 2.813-2.562 3.244s1.176-.506 1.176-.506s2.866-2.567 3.49-1.898s-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405c.238.839 2.71-1.587 3.216-.642c.506.946-3.49 2.056-3.522 2.064c-1.29.33-4.568 1.028-5.713-.624"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-7aa30c396b2f58a7972cf6a10cb190b4" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://huggingface.co/google/embeddinggemma-300m" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;google/embeddinggemma-300m&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="inline-block w-2 h-2 rounded-full bg-secondary-500"&gt;&lt;/span&gt;
&lt;span class="text-sm text-zinc-600 dark:text-zinc-400 capitalize"&gt;
sentence-similarity
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://huggingface.co/google/embeddinggemma-300m" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;div class="flex items-center gap-6 pt-2"&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-primary-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-7aa30c396b2f58a7972cf6a10cb190b4-downloads"&gt;1.56514M&lt;/span&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-secondary-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 8.25c0-2.485-2.099-4.5-4.687-4.5c-1.936 0-3.598 1.126-4.313 2.733c-.715-1.607-2.377-2.733-4.312-2.733C5.098 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-7aa30c396b2f58a7972cf6a10cb190b4-likes"&gt;1.74k&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;HuggingFace Dataset&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-68953fac599af64cedc452bf8ee23f8c"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-yellow-400 to-orange-500 flex items-center justify-center"&gt;
&lt;svg class="w-6 h-6 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="currentColor" d="M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378c0 1.112.178 2.181.503 3.185c.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284c.278.173.48.408.71.694c.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542c.01.026.653 1.552 1.657 2.54c.616.605 1.01 1.223 1.082 1.912c.055.537-.096 1.059-.38 1.572c.637.121 1.294.187 1.967.187c.657 0 1.298-.063 1.921-.178c-.287-.517-.44-1.041-.384-1.581c.07-.69.465-1.307 1.081-1.913c1.004-.987 1.647-2.513 1.657-2.539c.021-.074.083-.285.233-.542c.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952c.23-.286.432-.52.71-.694c.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174a1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094c-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71c-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013a1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921a.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92a.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164c1.607-.007 2.984-1.155 3.572-1.164c.196-.003.305.12.305.454c0 .886-.424 2.328-1.563 3.202c-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026l-.01.008l-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116a1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243a1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444c-.034-.016-.104-.008-.2.022q-.094.03-.216.087q-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096a3 3 0 0 0-.26.219a2 2 0 0 0-.12.121a2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203c0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194c-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858s-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64c-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647s2.822 2.813 2.562 3.244s-1.176-.506-1.176-.506s-2.866-2.567-3.49-1.898s.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405c-.238.839-2.71-1.587-3.216-.642c-.506.946 3.49 2.056 3.522 2.064c1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194c1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858s.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64c.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647s-2.822 2.813-2.562 3.244s1.176-.506 1.176-.506s2.866-2.567 3.49-1.898s-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405c.238.839 2.71-1.587 3.216-.642c.506.946-3.49 2.056-3.522 2.064c-1.29.33-4.568 1.028-5.713-.624"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-68953fac599af64cedc452bf8ee23f8c" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://huggingface.co/datasets/fka/awesome-chatgpt-prompts" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;fka/prompts.chat&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="inline-block w-2 h-2 rounded-full bg-primary-500"&gt;&lt;/span&gt;
&lt;span class="text-sm text-zinc-600 dark:text-zinc-400 capitalize"&gt;
dataset
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://huggingface.co/datasets/fka/awesome-chatgpt-prompts" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;p class="text-zinc-600 dark:text-zinc-400 text-base leading-relaxed line-clamp-3"&gt;
a.k.a. Awesome ChatGPT Prompts
This is a Dataset Repository mirror of prompts.chat — a social platform for AI prompts.
📢 Notice
This Hugging Face dataset is a mirror. For the …
&lt;/p&gt;&lt;div class="flex items-center gap-6 pt-2"&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-primary-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-68953fac599af64cedc452bf8ee23f8c-downloads"&gt;30.917k&lt;/span&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-secondary-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M21 8.25c0-2.485-2.099-4.5-4.687-4.5c-1.936 0-3.598 1.126-4.313 2.733c-.715-1.607-2.377-2.733-4.312-2.733C5.098 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-68953fac599af64cedc452bf8ee23f8c-likes"&gt;9.745k&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;GitHub Repository&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-3fc4624744c495fd8995995542224583"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-slate-800 to-slate-900 flex items-center justify-center"&gt;
&lt;svg class="w-6 h-6 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-3fc4624744c495fd8995995542224583" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;kit&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="text-sm text-zinc-600 dark:text-zinc-400"&gt;by
&lt;a href="https://github.com/HugoBlox" target="_blank" rel="noopener" class="font-medium hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;HugoBlox&lt;/a&gt;
&lt;/span&gt;&lt;span class="text-sm text-zinc-500 dark:text-zinc-500"&gt;•&lt;/span&gt;
&lt;span class="inline-block w-2 h-2 rounded-full bg-primary-500"&gt;&lt;/span&gt;
&lt;span class="text-sm text-zinc-500 dark:text-zinc-500 capitalize"&gt;HTML&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;p class="text-zinc-600 dark:text-zinc-400 text-base leading-relaxed line-clamp-3"&gt;
🧱 Describe your site, AI builds it, you own it as Markdown. Snap together Tailwind blocks like Lego — landing pages, blogs, portfolios, docs &amp;amp; more. No AI slop. Free to deploy anywhere 👇
&lt;/p&gt;&lt;div class="flex items-center gap-6 pt-2"&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-primary-500" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M6 2C4.89543 2 4 2.89543 4 4C4 4.74028 4.4022 5.38663 5 5.73244V7C5 8.65685 6.34315 10 8 10H10V11.2676C9.4022 11.6134 9 12.2597 9 13C9 14.1046 9.89543 15 11 15C12.1046 15 13 14.1046 13 13C13 12.2597 12.5978 11.6134 12 11.2676V10H14C15.6569 10 17 8.65685 17 7V5.73244C17.5978 5.38663 18 4.74028 18 4C18 2.89543 17.1046 2 16 2C14.8954 2 14 2.89543 14 4C14 4.74028 14.4022 5.38663 15 5.73244V7C15 7.55228 14.5523 8 14 8H8C7.44772 8 7 7.55228 7 7V5.73244C7.5978 5.38663 8 4.74028 8 4C8 2.89543 7.10457 2 6 2ZM6 4C6 3.44772 6.44772 3 7 3C7.55228 3 8 3.44772 8 4C8 4.55228 7.55228 5 7 5C6.44772 5 6 4.55228 6 4ZM11 13C11 12.4477 11.4477 12 12 12C12.5523 12 13 12.4477 13 13C13 13.5523 12.5523 14 12 14C11.4477 14 11 13.5523 11 13ZM16 3C15.4477 3 15 3.44772 15 4C15 4.55228 15.4477 5 16 5C16.5523 5 17 4.55228 17 4C17 3.44772 16.5523 3 16 3Z"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-3fc4624744c495fd8995995542224583-forks"&gt;2.948k&lt;/span&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;a href="https://github.com/HugoBlox/kit/issues" target="_blank" rel="noopener" class="font-medium hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200" id="hb-hb-embed-3fc4624744c495fd8995995542224583-issues"&gt;4&lt;/a&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-yellow-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.56.56 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.56.56 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.56.56 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.56.56 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.56.56 0 0 0 .475-.345z"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-3fc4624744c495fd8995995542224583-stars"&gt;9.531k&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="flex flex-wrap gap-1 pt-2"&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
academic
&lt;/span&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
blog
&lt;/span&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
documentation-tool
&lt;/span&gt;&lt;span class="text-xs text-zinc-500 dark:text-zinc-500"&gt;+17&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Custom embed with manual data&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-f2e7f4a04c7bddc5f9859d1e0728ab02"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-zinc-700 to-zinc-800 flex items-center justify-center"&gt;
&lt;svg class="w-5 h-5 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a9 9 0 0 1 7.843 4.582M12 3a9 9 0 0 0-7.843 4.582m15.686 0A11.95 11.95 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.96 8.96 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.9 17.9 0 0 1 12 16.5a17.9 17.9 0 0 1-8.716-2.247m0 0A9 9 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-f2e7f4a04c7bddc5f9859d1e0728ab02" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://example.com" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;My Custom Resource&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="text-sm text-zinc-500 dark:text-zinc-500"&gt;example.com&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://example.com" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;p class="text-zinc-600 dark:text-zinc-400 text-base leading-relaxed line-clamp-3"&gt;
A great resource for learning
&lt;/p&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="custom-images"&gt;Custom Images&lt;/h3&gt;
&lt;p&gt;Embed beautiful images from any source with Hugo image processing (Unsplash, custom URLs, etc.):&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-8363bc670f960af920c3ec59df571fd4"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-zinc-700 to-zinc-800 flex items-center justify-center"&gt;
&lt;svg class="w-5 h-5 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a9 9 0 0 1 7.843 4.582M12 3a9 9 0 0 0-7.843 4.582m15.686 0A11.95 11.95 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.96 8.96 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.9 17.9 0 0 1 12 16.5a17.9 17.9 0 0 1-8.716-2.247m0 0A9 9 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-8363bc670f960af920c3ec59df571fd4" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://example.com" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;Data Visualization Guide&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="text-sm text-zinc-500 dark:text-zinc-500"&gt;example.com&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://example.com" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;div class="mb-4 overflow-hidden rounded-lg"&gt;
&lt;img class="w-full h-auto transition-transform duration-500 ease-out group-hover:scale-105"
srcset="https://ruoyiplus.com/photo-1514888286974-6c03e2ca1dba_18145305924448453957_hu_16dd801da86fdd1a.webp 400w, https://ruoyiplus.com/photo-1514888286974-6c03e2ca1dba_18145305924448453957_hu_91d20702259dc7b.webp 600w, https://ruoyiplus.com/photo-1514888286974-6c03e2ca1dba_18145305924448453957_hu_fb6518f2fc84313a.webp 800w, https://ruoyiplus.com/photo-1514888286974-6c03e2ca1dba_18145305924448453957_hu_c08883eebbab0a9.webp 800w"
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
src="https://ruoyiplus.com/photo-1514888286974-6c03e2ca1dba_18145305924448453957_hu_16dd801da86fdd1a.webp"
width="400"
height="300"
loading="lazy"
decoding="async"
alt="Beautiful data visualization workspace"
style="aspect-ratio: 400/300;"&gt;
&lt;/div&gt;&lt;p class="text-zinc-600 dark:text-zinc-400 text-base leading-relaxed line-clamp-3"&gt;
Beautiful data visualization workspace
&lt;/p&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also add images to any platform embed:&lt;/p&gt;
&lt;div class="group bg-white/90 dark:bg-zinc-900/90 backdrop-blur-sm rounded-2xl ring-1 ring-zinc-900/5 dark:ring-white/10 shadow-lg overflow-hidden transition-all duration-300 ease-out hover:shadow-xl hover:shadow-primary-500/10 hover:-translate-y-1 focus-within:ring-2 focus-within:ring-primary-500/50 my-6" role="article" aria-labelledby="hb-embed-title-hb-embed-9dcc7bf290c28d07438cbcbefa65c250"&gt;
&lt;div class="flex items-center gap-3 p-6 border-b border-zinc-100 dark:border-zinc-800"&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;div class="w-10 h-10 rounded-full bg-gradient-to-br from-slate-800 to-slate-900 flex items-center justify-center"&gt;
&lt;svg class="w-6 h-6 text-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-1 min-w-0"&gt;
&lt;h3 id="hb-embed-title-hb-embed-9dcc7bf290c28d07438cbcbefa65c250" class="text-xl font-bold tracking-tight leading-tight truncate"&gt;
&lt;a href="https://github.com/plotly/plotly.py" target="_blank" rel="noopener" class="text-zinc-900 dark:text-zinc-100 hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;plotly.py&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="flex items-center gap-2 mt-1"&gt;
&lt;span class="text-sm text-zinc-600 dark:text-zinc-400"&gt;by
&lt;a href="https://github.com/plotly" target="_blank" rel="noopener" class="font-medium hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200"&gt;plotly&lt;/a&gt;
&lt;/span&gt;&lt;span class="text-sm text-zinc-500 dark:text-zinc-500"&gt;•&lt;/span&gt;
&lt;span class="inline-block w-2 h-2 rounded-full bg-primary-500"&gt;&lt;/span&gt;
&lt;span class="text-sm text-zinc-500 dark:text-zinc-500 capitalize"&gt;Python&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="flex-shrink-0"&gt;
&lt;a href="https://github.com/plotly/plotly.py" target="_blank" rel="noopener" class="text-zinc-400 hover:text-primary-500 transition-colors duration-200"&gt;
&lt;svg class="w-5 h-5 hb-embed-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="p-6 space-y-4"&gt;
&lt;div class="mb-4 overflow-hidden rounded-lg"&gt;
&lt;img class="w-full h-auto transition-transform duration-500 ease-out group-hover:scale-105"
srcset="https://ruoyiplus.com/photo-1551288049-bebda4e38f71_10164962980614054447_hu_1cb16cc410ea26a3.webp 400w, https://ruoyiplus.com/photo-1551288049-bebda4e38f71_10164962980614054447_hu_18bb0a620d059556.webp 600w, https://ruoyiplus.com/photo-1551288049-bebda4e38f71_10164962980614054447_hu_d3041625e7a27dbb.webp 600w"
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
src="https://ruoyiplus.com/photo-1551288049-bebda4e38f71_10164962980614054447_hu_1cb16cc410ea26a3.webp"
width="400"
height="267"
loading="lazy"
decoding="async"
alt="plotly.py"
style="aspect-ratio: 400/267;"&gt;
&lt;/div&gt;&lt;p class="text-zinc-600 dark:text-zinc-400 text-base leading-relaxed line-clamp-3"&gt;
The interactive graphing library for Python ✨
&lt;/p&gt;&lt;div class="flex items-center gap-6 pt-2"&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-primary-500" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"&gt;&lt;path d="M6 2C4.89543 2 4 2.89543 4 4C4 4.74028 4.4022 5.38663 5 5.73244V7C5 8.65685 6.34315 10 8 10H10V11.2676C9.4022 11.6134 9 12.2597 9 13C9 14.1046 9.89543 15 11 15C12.1046 15 13 14.1046 13 13C13 12.2597 12.5978 11.6134 12 11.2676V10H14C15.6569 10 17 8.65685 17 7V5.73244C17.5978 5.38663 18 4.74028 18 4C18 2.89543 17.1046 2 16 2C14.8954 2 14 2.89543 14 4C14 4.74028 14.4022 5.38663 15 5.73244V7C15 7.55228 14.5523 8 14 8H8C7.44772 8 7 7.55228 7 7V5.73244C7.5978 5.38663 8 4.74028 8 4C8 2.89543 7.10457 2 6 2ZM6 4C6 3.44772 6.44772 3 7 3C7.55228 3 8 3.44772 8 4C8 4.55228 7.55228 5 7 5C6.44772 5 6 4.55228 6 4ZM11 13C11 12.4477 11.4477 12 12 12C12.5523 12 13 12.4477 13 13C13 13.5523 12.5523 14 12 14C11.4477 14 11 13.5523 11 13ZM16 3C15.4477 3 15 3.44772 15 4C15 4.55228 15.4477 5 16 5C16.5523 5 17 4.55228 17 4C17 3.44772 16.5523 3 16 3Z"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-9dcc7bf290c28d07438cbcbefa65c250-forks"&gt;2.814k&lt;/span&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;a href="https://github.com/plotly/plotly.py/issues" target="_blank" rel="noopener" class="font-medium hover:text-primary-600 dark:hover:text-primary-400 hover:underline transition-colors duration-200" id="hb-hb-embed-9dcc7bf290c28d07438cbcbefa65c250-issues"&gt;769&lt;/a&gt;&lt;/div&gt;&lt;div class="flex items-center gap-1.5 text-sm text-zinc-600 dark:text-zinc-400"&gt;
&lt;svg class="w-4 h-4 text-yellow-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.56.56 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.56.56 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.56.56 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.56.56 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.56.56 0 0 0 .475-.345z"/&gt;&lt;/svg&gt;&lt;span id="hb-hb-embed-9dcc7bf290c28d07438cbcbefa65c250-stars"&gt;18.623k&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="flex flex-wrap gap-1 pt-2"&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
d3
&lt;/span&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
dashboard
&lt;/span&gt;&lt;span class="inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-primary-100 text-primary-800 dark:bg-primary-900/40 dark:text-primary-300"&gt;
declarative
&lt;/span&gt;&lt;span class="text-xs text-zinc-500 dark:text-zinc-500"&gt;+11&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="absolute inset-0 pointer-events-none bg-gradient-to-r from-primary-500/0 via-primary-500/5 to-secondary-500/0 opacity-0 group-hover:opacity-100 transition-opacity duration-300"&gt;&lt;/div&gt;
&lt;div class="sr-only" data-hb-component="embed" data-hb-version="1.0" data-hb-license="MIT"&gt;
Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="charts"&gt;Charts&lt;/h2&gt;
&lt;p&gt;Hugo Blox supports the popular
format for interactive data visualizations. With Plotly, you can design almost any kind of visualization you can imagine!&lt;/p&gt;
&lt;p&gt;Save your Plotly JSON in your page folder, for example &lt;code&gt;line-chart.json&lt;/code&gt;, and then add the &lt;code&gt;{{&amp;lt; chart data=&amp;quot;line-chart&amp;quot; &amp;gt;}}&lt;/code&gt; shortcode where you would like the chart to appear.&lt;/p&gt;
&lt;p&gt;Demo:&lt;/p&gt;
&lt;div id="chart-167489235" class="chart"&gt;&lt;/div&gt;
&lt;script&gt;
(function() {
async function fetchChartJSON() {
console.debug('Hugo Blox fetching chart JSON...')
const response = await fetch('.\/line-chart.json');
return await response.json();
}
let a = setInterval( function() {
if ( typeof window.Plotly === 'undefined' ) {
console.debug('Plotly not loaded yet...')
return;
}
clearInterval( a );
fetchChartJSON().then(chart =&gt; {
console.debug('Plotting chart...')
window.Plotly.newPlot('chart-167489235', chart.data, chart.layout, {responsive: true});
});
}, 500 );
})();
&lt;/script&gt;
&lt;p&gt;You might also find the
useful.&lt;/p&gt;
&lt;h2 id="diagrams"&gt;Diagrams&lt;/h2&gt;
&lt;p&gt;Hugo Blox supports the &lt;em&gt;Mermaid&lt;/em&gt; Markdown extension for diagrams.&lt;/p&gt;
&lt;p&gt;An example &lt;strong&gt;flowchart&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
graph TD
A[Hard] --&amp;gt;|Text| B(Round)
B --&amp;gt; C{Decision}
C --&amp;gt;|One| D[Result 1]
C --&amp;gt;|Two| E[Result 2]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="mermaid"&gt;graph TD
A[Hard] --&gt;|Text| B(Round)
B --&gt; C{Decision}
C --&gt;|One| D[Result 1]
C --&gt;|Two| E[Result 2]
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;sequence diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
sequenceDiagram
Alice-&amp;gt;&amp;gt;John: Hello John, how are you?
loop Healthcheck
John-&amp;gt;&amp;gt;John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John--&amp;gt;&amp;gt;Alice: Great!
John-&amp;gt;&amp;gt;Bob: How about you?
Bob--&amp;gt;&amp;gt;John: Jolly good!
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="mermaid"&gt;sequenceDiagram
Alice-&gt;&gt;John: Hello John, how are you?
loop Healthcheck
John-&gt;&gt;John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John--&gt;&gt;Alice: Great!
John-&gt;&gt;Bob: How about you?
Bob--&gt;&gt;John: Jolly good!
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;class diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
classDiagram
Class01 &amp;lt;|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --&amp;gt; C2 : Where am i?
Class09 --* C3
Class09 --|&amp;gt; Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 &amp;lt;--&amp;gt; C2: Cool label
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="mermaid"&gt;classDiagram
Class01 &lt;|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --&gt; C2 : Where am i?
Class09 --* C3
Class09 --|&gt; Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 &lt;--&gt; C2: Cool label
&lt;/div&gt;
&lt;p&gt;An example &lt;strong&gt;state diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
stateDiagram
[*] --&amp;gt; Still
Still --&amp;gt; [*]
Still --&amp;gt; Moving
Moving --&amp;gt; Still
Moving --&amp;gt; Crash
Crash --&amp;gt; [*]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="mermaid"&gt;stateDiagram
[*] --&gt; Still
Still --&gt; [*]
Still --&gt; Moving
Moving --&gt; Still
Moving --&gt; Crash
Crash --&gt; [*]
&lt;/div&gt;
&lt;h2 id="data-frames"&gt;Data Frames&lt;/h2&gt;
&lt;p&gt;Save your spreadsheet as a CSV file in your page&amp;rsquo;s folder and then render it by adding the &lt;em&gt;Table&lt;/em&gt; shortcode to your page:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{{&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;results.csv&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;caption&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Table 1: My results&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;table class="table-auto w-full"&gt;
&lt;thead&gt;
&lt;tr&gt; &lt;th class="border-b dark:border-slate-600 font-medium p-4 pt-0 pb-3 text-slate-400 dark:text-slate-200 text-left"&gt;customer_id&lt;/th&gt; &lt;th class="border-b dark:border-slate-600 font-medium p-4 pt-0 pb-3 text-slate-400 dark:text-slate-200 text-left"&gt;score&lt;/th&gt; &lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td data-table-dtype="number" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;1&lt;/td&gt;
&lt;td data-table-dtype="number" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-table-dtype="number" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;2&lt;/td&gt;
&lt;td data-table-dtype="text" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-table-dtype="number" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;3&lt;/td&gt;
&lt;td data-table-dtype="number" class="border-b border-slate-100 dark:border-slate-700 p-4 text-slate-500 dark:text-slate-400"&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;caption class="table-caption"&gt;Table 1: My results&lt;/caption&gt;
&lt;/table&gt;
&lt;h2 id="interactive-buttons"&gt;Interactive Buttons&lt;/h2&gt;
&lt;p&gt;Add engaging call-to-action buttons to your data visualization posts:&lt;/p&gt;
&lt;h3 id="basic-buttons"&gt;Basic Buttons&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-f6d402d3e0ef4f7871a71f74ddcbf5cc"
href="https://ruoyiplus.com/"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Contact Us"
&gt;
&lt;span&gt;Contact Us&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-987cda262491a5e2f5790eccfa5b9a1d"
href="https://plotly.com/python/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Learn Plotly"
&gt;
&lt;span&gt;Learn Plotly&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Contact Us&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://plotly.com/python/&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Learn Plotly&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="styled-buttons-for-data-actions"&gt;Styled Buttons for Data Actions&lt;/h3&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-e33048dca4aba9789ddcf54db5a0c71b"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="View Dashboard"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;View Dashboard&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-73171eb1b49c461e90dab01f45a3397d"
href="https://ruoyiplus.com/data/results.csv"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-white dark:bg-zinc-900 border-2 border-primary-500 text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 hover:border-primary-600 active:bg-primary-100 dark:active:bg-primary-950 shadow-md hover:shadow-lg hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Download Data"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Download Data&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-7748e63b0d10f2c3d07510711c888397"
href="https://github.com/HugoBlox"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-transparent text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 active:bg-primary-100 dark:active:bg-primary-950 hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="View Source Code"
&gt;
&lt;span&gt;View Source Code&lt;/span&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;primary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;chart-bar&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;View Dashboard&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/data/results.csv&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;outline&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;document-arrow-down&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Download Data&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://github.com/HugoBlox&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ghost&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arrow-top-right-on-square&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon_position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;View Source Code&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="multiple-aligned-buttons"&gt;Multiple Aligned Buttons&lt;/h3&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-862eca44ebb793f7088ff309da58bc60"
href="https://jupyter.org/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-full"
role="button"
aria-label="Try Jupyter"
&gt;
&lt;span&gt;Try Jupyter&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-bd0cdc9304df3c00afcd1280316f3470"
href="https://colab.research.google.com/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-full"
role="button"
aria-label="Open in Colab"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.59 14.37q.159.666.16 1.38a6 6 0 0 1-6 6v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.9 14.9 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.9 14.9 0 0 0-2.58 5.84m2.699 2.7q-.155.032-.311.06a15 15 0 0 1-2.448-2.448l.06-.312m-2.24 2.39a4.49 4.49 0 0 0-1.757 4.306q.341.054.696.054a4.5 4.5 0 0 0 3.61-1.812M16.5 9a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Open in Colab&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://jupyter.org/&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Try Jupyter&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://colab.research.google.com/&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;primary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;rocket-launch&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Open in Colab&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-"&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h2&gt;</description></item><item><title>👩🏼‍🏫 Teach academic courses</title><link>https://ruoyiplus.com/zh-tw/blog/teach-courses/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/teach-courses/</guid><description>&lt;p&gt;
is designed to give technical content creators a seamless experience. You can focus on the content and the HugoBlox Kit which this template is built upon handles the rest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Embed videos, podcasts, code, LaTeX math, and even test students!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Hugo Blox.&lt;/p&gt;
&lt;h2 id="citation"&gt;Citation&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s an example of citing a publication using the cite shortcode:&lt;/p&gt;
&lt;div class="pub-list-item view-citation" style="margin-bottom: 1rem"&gt;
&lt;i class="far fa-file-alt pub-icon" aria-hidden="true"&gt;&lt;/i&gt;
&lt;span class="article-metadata li-cite-author"&gt;
&lt;span &gt;&lt;a href="https://ruoyiplus.com/zh-tw/authors/me/"&gt;Delon XIE&lt;/a&gt;&lt;/span&gt;
&lt;/span&gt;
(2019).
&lt;a href="https://ruoyiplus.com/zh-tw/publications/preprint/" class="underline"&gt;An example preprint / working paper&lt;/a&gt;.
&lt;div class="flex flex-wrap space-x-3"&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://arxiv.org/abs/1512.04133v1" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
影印預覽
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5"/&gt;&lt;/svg&gt;
程式碼
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://www.slideshare.net/" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6"/&gt;&lt;/svg&gt;
投影片
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://ruoyiplus.com/#" &gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"/&gt;&lt;/svg&gt;
數據集
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://ruoyiplus.com/#" &gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m2.25 15.75l5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5m10.5-11.25h.008v.008h-.008zm.375 0a.375.375 0 1 1-.75 0a.375.375 0 0 1 .75 0"/&gt;&lt;/svg&gt;
海報
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://ruoyiplus.com/#" &gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
原始檔
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://youtube.com" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m15.75 10.5l4.72-4.72a.75.75 0 0 1 1.28.53v11.38a.75.75 0 0 1-1.28.53l-4.72-4.72M4.5 18.75h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25h-9A2.25 2.25 0 0 0 2.25 7.5v9a2.25 2.25 0 0 0 2.25 2.25"/&gt;&lt;/svg&gt;
影片
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="http://example.org" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/&gt;&lt;/svg&gt;
Custom Link
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://arxiv.org/abs/1512.04133v1" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
影印預覽
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also use the default view by omitting the view parameter:&lt;/p&gt;
&lt;div class="pub-list-item view-citation" style="margin-bottom: 1rem"&gt;
&lt;i class="far fa-file-alt pub-icon" aria-hidden="true"&gt;&lt;/i&gt;
&lt;span class="article-metadata li-cite-author"&gt;
&lt;span &gt;&lt;a href="https://ruoyiplus.com/zh-tw/authors/me/"&gt;Delon XIE&lt;/a&gt;&lt;/span&gt;&lt;span class="relative inline-block ml-1" x-data="{ tooltip: false }"&gt;
&lt;button
@mouseenter="tooltip = true"
@mouseleave="tooltip = false"
@click="tooltip = !tooltip"
class="author-notes text-primary-600 dark:text-primary-400 hover:text-primary-800 dark:hover:text-primary-200 transition-colors cursor-help"
data-tooltip="Equal contribution"
aria-label="Equal contribution"
type="button"
&gt;
&lt;svg class="inline-block w-4 h-4" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div
x-show="tooltip"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="opacity-0 transform scale-95"
x-transition:enter-end="opacity-100 transform scale-100"
x-transition:leave="transition ease-in duration-150"
x-transition:leave-start="opacity-100 transform scale-100"
x-transition:leave-end="opacity-0 transform scale-95"
@click.away="tooltip = false"
class="absolute z-50 bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 text-sm text-white bg-gray-900 dark:bg-gray-700 rounded-lg shadow-lg whitespace-nowrap"
x-cloak
&gt;
Equal contribution
&lt;div class="absolute top-full left-1/2 transform -translate-x-1/2 -mt-1 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-900 dark:border-t-gray-700"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/span&gt;, &lt;span &gt;&lt;a href="https://ruoyiplus.com/zh-tw/authors/robert-ford/"&gt;Robert Ford&lt;/a&gt;&lt;/span&gt;&lt;span class="relative inline-block ml-1" x-data="{ tooltip: false }"&gt;
&lt;button
@mouseenter="tooltip = true"
@mouseleave="tooltip = false"
@click="tooltip = !tooltip"
class="author-notes text-primary-600 dark:text-primary-400 hover:text-primary-800 dark:hover:text-primary-200 transition-colors cursor-help"
data-tooltip="Equal contribution"
aria-label="Equal contribution"
type="button"
&gt;
&lt;svg class="inline-block w-4 h-4" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"&gt;
&lt;path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div
x-show="tooltip"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="opacity-0 transform scale-95"
x-transition:enter-end="opacity-100 transform scale-100"
x-transition:leave="transition ease-in duration-150"
x-transition:leave-start="opacity-100 transform scale-100"
x-transition:leave-end="opacity-0 transform scale-95"
@click.away="tooltip = false"
class="absolute z-50 bottom-full left-1/2 transform -translate-x-1/2 mb-2 px-3 py-2 text-sm text-white bg-gray-900 dark:bg-gray-700 rounded-lg shadow-lg whitespace-nowrap"
x-cloak
&gt;
Equal contribution
&lt;div class="absolute top-full left-1/2 transform -translate-x-1/2 -mt-1 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-gray-900 dark:border-t-gray-700"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/span&gt;
&lt;/span&gt;
(2013).
&lt;a href="https://ruoyiplus.com/zh-tw/publications/conference-paper/" class="underline"&gt;An example conference paper&lt;/a&gt;.
&lt;em&gt;ICW&lt;/em&gt;.
&lt;span class="ml-1"&gt;&lt;span class="inline-flex items-center gap-1 text-xs font-medium text-amber-900 dark:text-amber-200" title="Best Paper Award — ICW · 2013"&gt;
&lt;span class="w-3 h-3 flex-shrink-0"&gt;&lt;svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;path d="M8 21h8M12 17v4M7 4h10v5a5 5 0 0 1-10 0V4ZM5 4H3v2a3 3 0 0 0 3 3M19 4h2v2a3 3 0 0 1-3 3"/&gt;&lt;/svg&gt;&lt;/span&gt;
&lt;span&gt;Best Paper Award&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;div class="flex flex-wrap space-x-3"&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://ruoyiplus.com/" &gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
PDF
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M17.25 6.75L22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3l-4.5 16.5"/&gt;&lt;/svg&gt;
程式碼
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"/&gt;&lt;/svg&gt;
數據集
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://www.slideshare.net/" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3.75 3v11.25A2.25 2.25 0 0 0 6 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0 1 18 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6"/&gt;&lt;/svg&gt;
投影片
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://github.com/HugoBlox/kit" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
原始檔
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://youtube.com" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m15.75 10.5l4.72-4.72a.75.75 0 0 1 1.28.53v11.38a.75.75 0 0 1-1.28.53l-4.72-4.72M4.5 18.75h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25h-9A2.25 2.25 0 0 0 2.25 7.5v9a2.25 2.25 0 0 0 2.25 2.25"/&gt;&lt;/svg&gt;
影片
&lt;/a&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://ruoyiplus.com/zh-tw/publications/conference-paper/conference-paper.pdf" &gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
PDF
&lt;/a&gt;
&lt;button class="hb-attachment-link hb-attachment-link-small js-cite-clipboard cursor-pointer" type="button" data-filename="/zh-tw/publications/conference-paper/cite.bib"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9 9 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9 9 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75"/&gt;&lt;/svg&gt;
&lt;span&gt;引用&lt;/span&gt;
&lt;/button&gt;
&lt;a class="hb-attachment-link hb-attachment-link-small" href="https://doi.org/10.5555/123456" target="_blank" rel="noopener"&gt;
&lt;svg style="height: 1em" class='inline-block' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/&gt;&lt;/svg&gt;
DOI
&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="video"&gt;Video&lt;/h2&gt;
&lt;p&gt;Teach your course by sharing videos with your students. Choose from one of the following approaches:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Youtube&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; youtube D2vj0WcvH5c &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/D2vj0WcvH5c?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Bilibili&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; bilibili BV1WV4y1r7DF &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Video file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Videos may be added to a page by either placing them in your &lt;code&gt;assets/media/&lt;/code&gt; media library or in your
, and then embedding them with the &lt;em&gt;video&lt;/em&gt; shortcode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; video src=&amp;quot;my_video.mp4&amp;quot; controls=&amp;quot;yes&amp;quot; &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="podcast"&gt;Podcast&lt;/h2&gt;
&lt;p&gt;You can add a podcast or music to a page by placing the MP3 file in the page&amp;rsquo;s folder or the media library folder and then embedding the audio on your page with the &lt;em&gt;audio&lt;/em&gt; shortcode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; audio src=&amp;quot;ambient-piano.mp3&amp;quot; &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Try it out:&lt;/p&gt;
&lt;audio controls &gt;
&lt;source src="https://ruoyiplus.com/zh-tw/blog/teach-courses/ambient-piano.mp3" type="audio/mpeg"&gt;
&lt;/audio&gt;
&lt;h2 id="test-students"&gt;Test students&lt;/h2&gt;
&lt;p&gt;Provide a simple yet fun self-assessment by revealing the solutions to challenges with the &lt;code&gt;spoiler&lt;/code&gt; shortcode:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; spoiler text=&amp;#34;👉 Click to view the solution&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You found me!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /spoiler &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;details class="spoiler " id="spoiler-4"&gt;
&lt;summary class="cursor-pointer"&gt;👉 Click to view the solution&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
You found me 🎉
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="math"&gt;Math&lt;/h2&gt;
&lt;p&gt;HugoBlox Kit supports a Markdown extension for $\LaTeX$ math. Enable math by setting the &lt;code&gt;math: true&lt;/code&gt; option in your page&amp;rsquo;s front matter, or enable math for your entire site by toggling math in your &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;math&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To render &lt;em&gt;inline&lt;/em&gt; or &lt;em&gt;block&lt;/em&gt; math, wrap your LaTeX math with &lt;code&gt;$...$&lt;/code&gt; or &lt;code&gt;$$...$$&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;math block&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;\gamma&lt;/span&gt;&lt;span class="nb"&gt;_{n} &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\frac&lt;/span&gt;&lt;span class="nb"&gt;{ &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; | &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n} &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;} &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;^T &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; |}{&lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\|\nabla&lt;/span&gt;&lt;span class="nb"&gt; F&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt;{x}_{n}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt;{x}_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\|&lt;/span&gt;&lt;span class="nb"&gt;^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="nb"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
$$\gamma_{n} = \frac{ \left | \left (\mathbf x_{n} - \mathbf x_{n-1} \right )^T \left [\nabla F (\mathbf x_{n}) - \nabla F (\mathbf x_{n-1}) \right ] \right |}{\left \|\nabla F(\mathbf{x}_{n}) - \nabla F(\mathbf{x}_{n-1}) \right \|^2}$$&lt;p&gt;Example &lt;strong&gt;inline math&lt;/strong&gt; &lt;code&gt;$\nabla F(\mathbf{x}_{n})$&lt;/code&gt; renders as $\nabla F(\mathbf{x}_{n})$.&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;multi-line math&lt;/strong&gt; using the math linebreak (&lt;code&gt;\\&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;f&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;k;p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\begin&lt;/span&gt;&lt;span class="nb"&gt;{cases}p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;} &amp;amp; &lt;/span&gt;&lt;span class="nv"&gt;\text&lt;/span&gt;&lt;span class="nb"&gt;{if }k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;, &lt;/span&gt;&lt;span class="nv"&gt;\\&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;} &amp;amp; &lt;/span&gt;&lt;span class="nv"&gt;\text&lt;/span&gt;&lt;span class="nb"&gt;{if }k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;\end&lt;/span&gt;&lt;span class="nb"&gt;{cases}&lt;/span&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
$$
f(k;p_{0}^{*}) = \begin{cases}p_{0}^{*} &amp; \text{if }k=1, \\
1-p_{0}^{*} &amp; \text{if }k=0.\end{cases}
$$&lt;h2 id="code"&gt;Code&lt;/h2&gt;
&lt;p&gt;HugoBlox Kit utilises Hugo&amp;rsquo;s Markdown extension for highlighting code syntax. The code theme can be selected in the &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```python
import pandas as pd
data = pd.read_csv(&amp;quot;data.csv&amp;quot;)
data.head()
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;data.csv&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="inline-images"&gt;Inline Images&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{{&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;}}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Python&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;p&gt;
&lt;span class="inline-block pr-1"&gt;
&lt;svg style="height: 1em; transform: translateY(0.1em);" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512" fill="currentColor"&gt;&lt;path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/&gt;&lt;/svg&gt;
&lt;/span&gt; Python&lt;/p&gt;
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-"&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h2&gt;</description></item><item><title>Embed Media</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/media/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/media/</guid><description>&lt;p&gt;
is designed to give technical content creators a seamless experience. You can focus on the content and the HugoBlox Kit which this template is built upon handles the rest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Embed videos, podcasts, code, LaTeX math, and even test students!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On this page, you&amp;rsquo;ll find some examples of the types of technical content that can be rendered with Hugo Blox.&lt;/p&gt;
&lt;h2 id="video"&gt;Video&lt;/h2&gt;
&lt;p&gt;Teach your course by sharing videos with your students. Choose from one of the following approaches:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/D2vj0WcvH5c?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Youtube&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; youtube w7Ft2ymGmfc &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Bilibili&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; bilibili id=&amp;quot;BV1WV4y1r7DF&amp;quot; &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Video file&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Videos may be added to a page by either placing them in your &lt;code&gt;assets/media/&lt;/code&gt; media library or in your
, and then embedding them with the &lt;em&gt;video&lt;/em&gt; shortcode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; video src=&amp;quot;my_video.mp4&amp;quot; controls=&amp;quot;yes&amp;quot; &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="podcast"&gt;Podcast&lt;/h2&gt;
&lt;p&gt;You can add a podcast or music to a page by placing the MP3 file in the page&amp;rsquo;s folder or the media library folder and then embedding the audio on your page with the &lt;em&gt;audio&lt;/em&gt; shortcode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{&amp;lt; audio src=&amp;quot;ambient-piano.mp3&amp;quot; &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Try it out:&lt;/p&gt;
&lt;audio controls &gt;
&lt;source src="ambient-piano.mp3" type="audio/mpeg"&gt;
&lt;/audio&gt;
&lt;h2 id="test-students"&gt;Test students&lt;/h2&gt;
&lt;p&gt;Provide a simple yet fun self-assessment by revealing the solutions to challenges with the &lt;code&gt;spoiler&lt;/code&gt; shortcode:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; spoiler text=&amp;#34;👉 Click to view the solution&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You found me!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /spoiler &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;details class="spoiler " id="spoiler-2"&gt;
&lt;summary class="cursor-pointer"&gt;👉 Click to view the solution&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
You found me 🎉
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="math"&gt;Math&lt;/h2&gt;
&lt;p&gt;HugoBlox Kit supports a Markdown extension for $\LaTeX$ math. You can enable this feature by toggling the &lt;code&gt;math&lt;/code&gt; option in your &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;To render &lt;em&gt;inline&lt;/em&gt; or &lt;em&gt;block&lt;/em&gt; math, wrap your LaTeX math with &lt;code&gt;{{&amp;lt; math &amp;gt;}}$...${{&amp;lt; /math &amp;gt;}}&lt;/code&gt; or &lt;code&gt;{{&amp;lt; math &amp;gt;}}$$...$${{&amp;lt; /math &amp;gt;}}&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;We wrap the LaTeX math in the Hugo Blox &lt;em&gt;math&lt;/em&gt; shortcode to prevent Hugo rendering our math as Markdown. This callout now uses the standard Markdown alert syntax!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Example &lt;strong&gt;math block&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;{{&lt;/span&gt;&amp;lt; math &amp;gt;&lt;span class="nb"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;\gamma&lt;/span&gt;&lt;span class="nb"&gt;_{n} &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\frac&lt;/span&gt;&lt;span class="nb"&gt;{ &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; | &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n} &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;} &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;^T &lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt; x_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; |}{&lt;/span&gt;&lt;span class="nv"&gt;\left&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\|\nabla&lt;/span&gt;&lt;span class="nb"&gt; F&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt;{x}_{n}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; F&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;\mathbf&lt;/span&gt;&lt;span class="nb"&gt;{x}_{n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\right&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\|&lt;/span&gt;&lt;span class="nb"&gt;^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="nb"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;{{&lt;/span&gt;&amp;lt; /math &amp;gt;&lt;span class="nb"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
$$\gamma_{n} = \frac{ \left | \left (\mathbf x_{n} - \mathbf x_{n-1} \right )^T \left [\nabla F (\mathbf x_{n}) - \nabla F (\mathbf x_{n-1}) \right ] \right |}{\left \|\nabla F(\mathbf{x}_{n}) - \nabla F(\mathbf{x}_{n-1}) \right \|^2}$$
&lt;p&gt;Example &lt;strong&gt;inline math&lt;/strong&gt; &lt;code&gt;{{&amp;lt; math &amp;gt;}}$\nabla F(\mathbf{x}_{n})${{&amp;lt; /math &amp;gt;}}&lt;/code&gt; renders as $\nabla F(\mathbf{x}_{n})$
.&lt;/p&gt;
&lt;p&gt;Example &lt;strong&gt;multi-line math&lt;/strong&gt; using the math linebreak (&lt;code&gt;\\&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;{{&lt;/span&gt;&amp;lt; math &amp;gt;&lt;span class="nb"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;f&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;k;p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;}&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\begin&lt;/span&gt;&lt;span class="nb"&gt;{cases}p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;} &amp;amp; &lt;/span&gt;&lt;span class="nv"&gt;\text&lt;/span&gt;&lt;span class="nb"&gt;{if }k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;, &lt;/span&gt;&lt;span class="nv"&gt;\\&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;p_{&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;} &amp;amp; &lt;/span&gt;&lt;span class="nv"&gt;\text&lt;/span&gt;&lt;span class="nb"&gt;{if }k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;\end&lt;/span&gt;&lt;span class="nb"&gt;{cases}&lt;/span&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;{{&lt;/span&gt;&amp;lt; /math &amp;gt;&lt;span class="nb"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
$$
f(k;p_{0}^{*}) = \begin{cases}p_{0}^{*} &amp; \text{if }k=1, \\
1-p_{0}^{*} &amp; \text{if }k=0.\end{cases}
$$
&lt;h2 id="code"&gt;Code&lt;/h2&gt;
&lt;p&gt;HugoBlox Kit utilises Hugo&amp;rsquo;s Markdown extension for highlighting code syntax. The code theme can be selected in the &lt;code&gt;config/_default/params.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```python
import pandas as pd
data = pd.read_csv(&amp;quot;data.csv&amp;quot;)
data.head()
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;data.csv&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="inline-images"&gt;Inline Images&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{{&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;}}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Python&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;p&gt;
&lt;span class="inline-block pr-1"&gt;
&lt;svg style="height: 1em; transform: translateY(0.1em);" xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 448 512" fill="currentColor"&gt;&lt;path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"/&gt;&lt;/svg&gt;
&lt;/span&gt; Python&lt;/p&gt;
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-"&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h2&gt;</description></item><item><title>經驗</title><link>https://ruoyiplus.com/zh-tw/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/experience/</guid><description/></item><item><title>✅ Manage your projects</title><link>https://ruoyiplus.com/zh-tw/blog/project-management/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/blog/project-management/</guid><description>&lt;p&gt;Easily manage your projects - create ideation mind maps, Gantt charts, todo lists, and more!&lt;/p&gt;
&lt;h2 id="ideation"&gt;Ideation&lt;/h2&gt;
&lt;p&gt;Hugo Blox supports a Markdown extension for mindmaps.&lt;/p&gt;
&lt;p&gt;Simply insert a Markdown code block labelled as &lt;code&gt;markmap&lt;/code&gt; and optionally set the height of the mindmap as shown in the example below.&lt;/p&gt;
&lt;p&gt;Mindmaps can be created by simply writing the items as a Markdown list within the &lt;code&gt;markmap&lt;/code&gt; code block, indenting each item to create as many sub-levels as you need:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre class="chroma"&gt;
&lt;code&gt;
```markmap {height="200px"}
- Hugo Modules
- Hugo Blox
- netlify
- netlify-cms
- slides
```
&lt;/code&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="markmap" style="height: 200px;"&gt;
&lt;pre&gt;- Hugo Modules
- Hugo Blox
- netlify
- netlify-cms
- slides&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id="diagrams"&gt;Diagrams&lt;/h2&gt;
&lt;p&gt;Hugo Blox supports the &lt;em&gt;Mermaid&lt;/em&gt; Markdown extension for diagrams.&lt;/p&gt;
&lt;p&gt;An example &lt;strong&gt;Gantt diagram&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```mermaid
gantt
section Section
Completed :done, des1, 2014-01-06,2014-01-08
Active :active, des2, 2014-01-07, 3d
Parallel 1 : des3, after des1, 1d
Parallel 2 : des4, after des1, 1d
Parallel 3 : des5, after des3, 1d
Parallel 4 : des6, after des4, 1d
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;renders as&lt;/p&gt;
&lt;div class="mermaid"&gt;gantt
section Section
Completed :done, des1, 2014-01-06,2014-01-08
Active :active, des2, 2014-01-07, 3d
Parallel 1 : des3, after des1, 1d
Parallel 2 : des4, after des1, 1d
Parallel 3 : des5, after des3, 1d
Parallel 4 : des6, after des4, 1d
&lt;/div&gt;
&lt;h2 id="todo-lists"&gt;Todo lists&lt;/h2&gt;
&lt;p&gt;You can even write your todo lists in Markdown too:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [x]&lt;/span&gt; Write math example
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;- [x]&lt;/span&gt; Write diagram example
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;- [ ]&lt;/span&gt; Do something else
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;renders as&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Write math example
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Write diagram example&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Do something else&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="did-you-find-this-page-helpful-consider-sharing-it-"&gt;Did you find this page helpful? Consider sharing it 🙌&lt;/h2&gt;</description></item><item><title>Flink 实时流计算与 ETL 体系</title><link>https://ruoyiplus.com/zh-tw/projects/flink-data/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/flink-data/</guid><description>&lt;p&gt;基於 Flink + 定時任務的金融資料管道。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心能力：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flink CDC 實時資料同步（MySQL binlog / HBase 變更日誌）&lt;/li&gt;
&lt;li&gt;Flink SQL 流式 ETL：實時清洗、聚合、視窗計算&lt;/li&gt;
&lt;li&gt;分鐘級 K線合成、買賣壓力比、異常交易檢測&lt;/li&gt;
&lt;li&gt;Checkpoint 機制保證 Exactly-Once 語義&lt;/li&gt;
&lt;li&gt;離線 ETL：Airflow + Crontab 排程，日報月報自動生成&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>快停科技 IoT 停车场系统</title><link>https://ruoyiplus.com/zh-tw/projects/iot-parking/</link><pubDate>Tue, 01 Jun 2021 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/iot-parking/</guid><description>&lt;p&gt;海南區域第二大停車場系統，覆蓋 3 個主要城市 280 個停車場。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心能力：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MQTT 協議構建雲端-場站-終端三位一體方案&lt;/li&gt;
&lt;li&gt;30 秒內定期輪訓裝置活檢，開閘延時 &amp;lt; 1.5 秒&lt;/li&gt;
&lt;li&gt;影片屬地儲存 + 非同步回傳&lt;/li&gt;
&lt;li&gt;異常實時影片採集、問題定位及維護派單&lt;/li&gt;
&lt;li&gt;技術棧：Java Spring + C# + MySQL + Raspberry Pi + PLC&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>An example preprint / working paper</title><link>https://ruoyiplus.com/zh-tw/publications/preprint/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/publications/preprint/</guid><description>&lt;p&gt;This work is driven by the results in my
on LLMs.&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Create your slides in Markdown - click the &lt;em&gt;Slides&lt;/em&gt; button to check out the example.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add the publication&amp;rsquo;s &lt;strong&gt;full text&lt;/strong&gt; or &lt;strong&gt;supplementary notes&lt;/strong&gt; here. You can use rich formatting such as including
.&lt;/p&gt;</description></item><item><title>Create Beautiful Presentations with Markdown</title><link>https://ruoyiplus.com/zh-tw/events/example/</link><pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/events/example/</guid><description>&lt;h2 id="-why-markdown-slides"&gt;🎯 Why Markdown Slides?&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-green-100 dark:bg-green-900 border-green-500"
data-callout="success"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-green-600 dark:text-green-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15L15 9.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;True Presentation Freedom&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Unlike PowerPoint or Keynote, your presentations are &lt;strong&gt;future-proof&lt;/strong&gt;, &lt;strong&gt;portable&lt;/strong&gt;, and completely &lt;strong&gt;under your control&lt;/strong&gt;. No proprietary formats, no vendor lock-in, no subscription fees.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="the-problem-with-traditional-slides"&gt;The Problem with Traditional Slides&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint &amp;amp; Keynote:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;💸 Expensive licenses or subscriptions&lt;/li&gt;
&lt;li&gt;🔒 Proprietary file formats (&lt;code&gt;.pptx&lt;/code&gt;, &lt;code&gt;.key&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;💻 Platform-specific (Windows/Mac only)&lt;/li&gt;
&lt;li&gt;📦 Large binary files&lt;/li&gt;
&lt;li&gt;🚫 Difficult to version control&lt;/li&gt;
&lt;li&gt;😰 Lost formatting when sharing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Google Slides:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;☁️ Requires internet connection&lt;/li&gt;
&lt;li&gt;🔐 Data stored on Google&amp;rsquo;s servers&lt;/li&gt;
&lt;li&gt;📱 Limited offline editing&lt;/li&gt;
&lt;li&gt;🎨 Formatting breaks when exporting&lt;/li&gt;
&lt;li&gt;🔗 Dependency on Google&amp;rsquo;s platform&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-hugo-blox-solution"&gt;The Hugo Blox Solution&lt;/h3&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Markdown Changes Everything&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Write your presentations in simple, human-readable Markdown. Edit anywhere, present anywhere, own forever.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="-what-you-get"&gt;✨ What You Get&lt;/h2&gt;
&lt;h3 id="-professional-design-zero-effort"&gt;🎨 Professional Design, Zero Effort&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15+ Built-in Themes&lt;/strong&gt; — Black, white, sky, league, and more&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Syntax Highlighting&lt;/strong&gt; — Beautiful code blocks with 50+ languages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Math Support&lt;/strong&gt; — LaTeX equations render perfectly: $E = mc^2$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsive&lt;/strong&gt; — Looks great on any screen size&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-write-in-plain-text"&gt;📝 Write in Plain Text&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## My Slide Title
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Point one
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Point two
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Point three
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```python
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;World!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it! No complex UI, no formatting headaches.&lt;/p&gt;
&lt;h3 id="-edit-anywhere-anytime"&gt;🔄 Edit Anywhere, Anytime&lt;/h3&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="important"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Zero Lock-In&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Your slides are just Markdown files. Edit them in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ownable CMS&lt;/strong&gt; — Visual editing with live preview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VS Code&lt;/strong&gt; — With Markdown extensions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt; — Note-taking app that speaks Markdown&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Typora&lt;/strong&gt; — Minimal distraction writing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Any text editor&lt;/strong&gt; — Even Notepad works!&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-ff5434c33e7f3eab1e3e4dedf86c1c6e"
href="https://docs.hugoblox.com/guides/studio/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-xl"
role="button"
aria-label="Try Ownable CMS"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.53 16.122a3 3 0 0 0-5.78 1.128a2.25 2.25 0 0 1-2.4 2.245a4.5 4.5 0 0 0 8.4-2.245c0-.399-.078-.78-.22-1.128m0 0a16 16 0 0 0 3.388-1.62m-5.043-.025a16 16 0 0 1 1.622-3.395m3.42 3.42a16 16 0 0 0 4.764-4.648l3.876-5.814a1.151 1.151 0 0 0-1.597-1.597L14.146 6.32a16 16 0 0 0-4.649 4.764m3.42 3.42a6.78 6.78 0 0 0-3.42-3.42"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Try Ownable CMS&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="-advanced-features"&gt;🎯 Advanced Features&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Dual Column Layouts:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;div style=&amp;#34;display: flex; gap: 2rem;&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div style=&amp;#34;flex: 1;&amp;#34;&amp;gt;Column 1&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div style=&amp;#34;flex: 1;&amp;#34;&amp;gt;Column 2&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Fragment Animations:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; fragment &amp;gt;}}Appear on click!{{&amp;lt; /fragment &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Speaker Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Note: Your private notes here
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(visible in presenter view only)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Vertical Slide Stacks:&lt;/strong&gt;
Navigate down for sub-topics!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-getting-started-is-easy"&gt;🚀 Getting Started is Easy&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="example"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104q-.376.034-.75.082m.75-.082a24.3 24.3 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104q.377.034.75.082M19.8 15.3l-1.57.393A9.07 9.07 0 0 1 12 15a9.07 9.07 0 0 0-6.23-.693L5 14.5m14.8.8l1.402 1.402c1.232 1.232.65 3.318-1.067 3.611A48.3 48.3 0 0 1 12 21a48 48 0 0 1-8.135-.687c-1.718-.293-2.3-2.379-1.067-3.61L5 14.5"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Create Your First Slide Deck in 3 Steps&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="step-1-create-your-slides"&gt;Step 1: Create Your Slides&lt;/h3&gt;
&lt;p&gt;Create &lt;code&gt;content/slides/my-talk/index.md&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;My Amazing Talk&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;slides&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;slides&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;black&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# My Amazing Talk&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;### Ruoyi Plus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Main Points&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;Point 1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;Point 2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="l"&gt;Point 3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Thank You!&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-2-link-to-your-event"&gt;Step 2: Link to Your Event&lt;/h3&gt;
&lt;p&gt;In your event page (&lt;code&gt;content/events/my-event/index.md&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;My Conference Presentation&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;slides&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-talk&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# References the slides folder name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-3-present"&gt;Step 3: Present!&lt;/h3&gt;
&lt;p&gt;Your slides are automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Embedded on the event page&lt;/li&gt;
&lt;li&gt;✅ Available in fullscreen mode (click
&lt;span class="inline-block pr-1"&gt;
&lt;span style="height: 1em; transform: translateY(0.1em);"&gt;arrows-expand&lt;/span&gt;
&lt;/span&gt; button)&lt;/li&gt;
&lt;li&gt;✅ Accessible at a direct URL&lt;/li&gt;
&lt;li&gt;✅ Keyboard-navigatable (→ ← keys)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-3f098d62b17fdd4113898a5c7822d589"
href="https://docs.hugoblox.com/guides/slides/"
rel="noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-white dark:bg-zinc-900 border-2 border-primary-500 text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 hover:border-primary-600 active:bg-primary-100 dark:active:bg-primary-950 shadow-md hover:shadow-lg hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Read Full Documentation"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 6.042A8.97 8.97 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A9 9 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.97 8.97 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A9 9 0 0 0 18 18a8.97 8.97 0 0 0-6 2.292m0-14.25v14.25"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Read Full Documentation&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="-why-academics--researchers-love-it"&gt;💎 Why Academics &amp;amp; Researchers Love It&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-gray-100 dark:bg-gray-800 border-gray-500"
data-callout="quote"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-gray-600 dark:text-gray-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193q-.51.041-1.02.072v3.091l-3-3q-2.031 0-4.02-.163a2.1 2.1 0 0 1-.825-.242m9.345-8.334a2 2 0 0 0-.476-.095a48.6 48.6 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.5 48.5 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402c-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235q.865.113 1.74.194V21l4.155-4.155"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;引用&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&amp;ldquo;I can finally version control my presentations with Git, collaborate using GitHub, and never worry about formatting breaking again. Game changer for reproducible research!&amp;rdquo;
— &lt;em&gt;Dr. Xin Liu, MIT&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="perfect-for-research"&gt;Perfect for Research&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Version Control&lt;/strong&gt; — Track every change with Git&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration&lt;/strong&gt; — Use GitHub pull requests for slide reviews&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reproducibility&lt;/strong&gt; — Slides are plain text, commit them with your code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Science&lt;/strong&gt; — Share presentations on GitHub, no barriers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Citations&lt;/strong&gt; — Include BibTeX references easily&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jupyter Integration&lt;/strong&gt; — Embed notebooks and visualizations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="perfect-for-teaching"&gt;Perfect for Teaching&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reusable Content&lt;/strong&gt; — Mix and match slides across courses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Student Contributions&lt;/strong&gt; — Students can submit slide PRs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Live Coding&lt;/strong&gt; — Syntax highlighting for all languages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Examples&lt;/strong&gt; — Embed interactive visualizations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessible&lt;/strong&gt; — Keyboard navigation, screen reader friendly&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-see-it-in-action"&gt;🎬 See It In Action&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;strong&gt;Try it now!&lt;/strong&gt; The slides embedded above demonstrate all these features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code highlighting with Python&lt;/li&gt;
&lt;li&gt;Mathematical equations with LaTeX&lt;/li&gt;
&lt;li&gt;Dual column layouts (slides 4-6)&lt;/li&gt;
&lt;li&gt;Fragment animations&lt;/li&gt;
&lt;li&gt;Multiple themes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click the
&lt;span class="inline-block pr-1"&gt;
&lt;span style="height: 1em; transform: translateY(0.1em);"&gt;arrows-expand&lt;/span&gt;
&lt;/span&gt; &lt;strong&gt;fullscreen button&lt;/strong&gt; (top right) to experience presentation mode!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="live-features-to-try"&gt;Live Features to Try&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Navigate&lt;/strong&gt;: Use arrow keys (→ ←) or click controls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fullscreen&lt;/strong&gt;: Click the expand button to go fullscreen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speaker Notes&lt;/strong&gt;: Press &lt;code&gt;S&lt;/code&gt; to open presenter view (try it!)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overview&lt;/strong&gt;: Press &lt;code&gt;ESC&lt;/code&gt; to see all slides at once&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt;: Press &lt;code&gt;/&lt;/code&gt; to search slide content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zoom&lt;/strong&gt;: &lt;code&gt;Alt+Click&lt;/code&gt; to zoom into details&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-7519dfcc27cf03dd985a63a0b9a6155b"
href="https://ruoyiplus.com/slides/example/"
target="_blank"
rel="noopener"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-transparent text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 active:bg-primary-100 dark:active:bg-primary-950 hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Open Slides in New Tab"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;span class="flex items-center justify-center leading-none text-lg"&gt;external-link&lt;/span&gt;
&lt;/span&gt;
&lt;span&gt;Open Slides in New Tab&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="-comparison"&gt;🆚 Comparison&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;PowerPoint&lt;/th&gt;
&lt;th&gt;Google Slides&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Hugo Blox&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$159.99/year&lt;/td&gt;
&lt;td&gt;Free*&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Free Forever&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Binary (&lt;code&gt;.pptx&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Plain Markdown&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Difficult&lt;/td&gt;
&lt;td&gt;❌ Limited&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Git Native&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Offline Editing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;⚠️ Limited&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Fully Offline&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform Lock-in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Microsoft&lt;/td&gt;
&lt;td&gt;⚠️ Google&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ None&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code Highlighting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Basic&lt;/td&gt;
&lt;td&gt;⚠️ Limited&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ 50+ Languages&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Math Equations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Clunky&lt;/td&gt;
&lt;td&gt;⚠️ Basic&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Full LaTeX&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Portability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Poor&lt;/td&gt;
&lt;td&gt;❌ Requires Google&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Works Anywhere&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Future-Proof&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Format changes&lt;/td&gt;
&lt;td&gt;⚠️ API changes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Plain Text Forever&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;✅ Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-green-100 dark:bg-green-900 border-green-500"
data-callout="success"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-green-600 dark:text-green-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15L15 9.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;成功&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&lt;strong&gt;Hugo Blox wins on freedom, portability, and long-term sustainability.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="-advanced-capabilities"&gt;🛠️ Advanced Capabilities&lt;/h2&gt;
&lt;h3 id="code-blocks-with-syntax-highlighting"&gt;Code Blocks with Syntax Highlighting&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;torch.nn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;nn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Transformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nhead&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attention&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MultiheadAttention&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d_model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nhead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;forward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attention&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="mathematical-equations"&gt;Mathematical Equations&lt;/h3&gt;
&lt;p&gt;Display equations with LaTeX:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;\nabla&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\times&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\vec&lt;/span&gt;&lt;span class="nb"&gt;{E} &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;\frac&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;\partial&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\vec&lt;/span&gt;&lt;span class="nb"&gt;{B}}{&lt;/span&gt;&lt;span class="nv"&gt;\partial&lt;/span&gt;&lt;span class="nb"&gt; t}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;\int&lt;/span&gt;&lt;span class="nb"&gt;_{&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;\infty&lt;/span&gt;&lt;span class="nb"&gt;}^{&lt;/span&gt;&lt;span class="nv"&gt;\infty&lt;/span&gt;&lt;span class="nb"&gt;} e^{&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;x^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="nb"&gt;} dx &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\sqrt&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;\pi&lt;/span&gt;&lt;span class="nb"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="dual-column-layouts"&gt;Dual Column Layouts&lt;/h3&gt;
&lt;p&gt;Perfect for before/after comparisons, code + explanation, or image + text:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;div style=&amp;#34;display: flex; gap: 2rem;&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div style=&amp;#34;flex: 1;&amp;#34;&amp;gt;Left content&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div style=&amp;#34;flex: 1;&amp;#34;&amp;gt;Right content&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See slides 4-6 in the embedded presentation above for live examples!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-for-educators-teach-the-future"&gt;🎓 For Educators: Teach the Future&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Empower Your Students&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Teaching with Hugo Blox means teaching modern, transferable skills:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown (used everywhere: GitHub, Notion, Obsidian)&lt;/li&gt;
&lt;li&gt;Version control (essential for careers)&lt;/li&gt;
&lt;li&gt;Web technologies (HTML, CSS)&lt;/li&gt;
&lt;li&gt;Reproducible science practices&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="course-integration"&gt;Course Integration&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;courses/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── ml-101/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── lecture-1/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ ├── index.md (slides)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ └── notes.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── lecture-2/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ └── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── _index.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each lecture gets its own slide deck, all version controlled, all editable by students as PRs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-join-the-community"&gt;🌍 Join the Community&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="important"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Built by Academics, for Academics&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Hugo Blox is used by researchers at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🎓 Stanford, MIT, Harvard, Oxford, Cambridge&lt;/li&gt;
&lt;li&gt;🏢 Google Research, Meta AI, OpenAI&lt;/li&gt;
&lt;li&gt;🔬 CERN, NASA, NIH&lt;/li&gt;
&lt;li&gt;🌐 Thousands of universities worldwide&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-308ee88d3551ad6320a918a3255bbadf"
href="https://github.com/HugoBlox/kit"
rel="noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-full"
role="button"
aria-label="Star on GitHub"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Star on GitHub&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="get-help--connect"&gt;Get Help &amp;amp; Connect&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;📚
&lt;/li&gt;
&lt;li&gt;💬
&lt;/li&gt;
&lt;li&gt;🐛
&lt;/li&gt;
&lt;li&gt;🐦
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-ready-to-create"&gt;🚀 Ready to Create?&lt;/h2&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-green-100 dark:bg-green-900 border-green-500"
data-callout="success"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-green-600 dark:text-green-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15L15 9.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Start Building Beautiful Presentations Today&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;No installation required. No account needed. Just Markdown and your creativity.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-bc0066d08faf40cb87d4d282bd3c10cb"
href="https://docs.hugoblox.com/start/"
rel="noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-8 py-4 text-xl rounded-full"
role="button"
aria-label="Get Started Now"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.59 14.37q.159.666.16 1.38a6 6 0 0 1-6 6v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.9 14.9 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.9 14.9 0 0 0-2.58 5.84m2.699 2.7q-.155.032-.311.06a15 15 0 0 1-2.448-2.448l.06-.312m-2.24 2.39a4.49 4.49 0 0 0-1.757 4.306q.341.054.696.054a4.5 4.5 0 0 0 3.61-1.812M16.5 9a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Get Started Now&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-a6ddd37a8101e1f783cf49b7a3be18c7"
href="https://docs.hugoblox.com/guides/studio/"
rel="noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-6 py-3 text-lg rounded-xl"
role="button"
aria-label="Try Ownable CMS"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.53 16.122a3 3 0 0 0-5.78 1.128a2.25 2.25 0 0 1-2.4 2.245a4.5 4.5 0 0 0 8.4-2.245c0-.399-.078-.78-.22-1.128m0 0a16 16 0 0 0 3.388-1.62m-5.043-.025a16 16 0 0 1 1.622-3.395m3.42 3.42a16 16 0 0 0 4.764-4.648l3.876-5.814a1.151 1.151 0 0 0-1.597-1.597L14.146 6.32a16 16 0 0 0-4.649 4.764m3.42 3.42a6.78 6.78 0 0 0-3.42-3.42"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Try Ownable CMS&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="-additional-resources"&gt;📖 Additional Resources&lt;/h2&gt;
&lt;h3 id="templates--examples"&gt;Templates &amp;amp; Examples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
- [Conference Talk Template](https://github.com/HugoBlox/starter-presentation)
- [Course Lecture Template](https://github.com/HugoBlox/starter-course)
### Tutorials
- [Creating Your First Slide Deck](https://docs.hugoblox.com/tutorial/slides/)
- [Advanced Slide Layouts](https://docs.hugoblox.com/reference/slides/)
- [Customizing Themes](https://docs.hugoblox.com/customization/)
- [Using Ownable CMS](https://docs.hugoblox.com/studio/)
--&gt;
&lt;h3 id="tips--tricks"&gt;Tips &amp;amp; Tricks&lt;/h3&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;&lt;strong&gt;Pro Tips for Better Presentations&lt;/strong&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;ol&gt;
&lt;li&gt;Keep slides simple — one idea per slide&lt;/li&gt;
&lt;li&gt;Use dual columns for comparisons&lt;/li&gt;
&lt;li&gt;Add speaker notes with &lt;code&gt;Note:&lt;/code&gt; prefix&lt;/li&gt;
&lt;li&gt;Test presenter view before your talk&lt;/li&gt;
&lt;li&gt;Use fragments to control pacing&lt;/li&gt;
&lt;li&gt;Version control your slides with Git&lt;/li&gt;
&lt;li&gt;Share source files for reproducibility&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Have questions?&lt;/strong&gt; Check out the
or
!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Want to contribute?&lt;/strong&gt; Hugo Blox is open source!
.&lt;/p&gt;</description></item><item><title>好收益 P2P 金融平台</title><link>https://ruoyiplus.com/zh-tw/projects/p2p-platform/</link><pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/p2p-platform/</guid><description>&lt;p&gt;以汽車抵押和平行進口車供應鏈融資為核心的網際網路金融撮合平臺。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;關鍵指標：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;實際使用者超 5 萬，累計交易額超 20 億，在貸規模 2.5 億&lt;/li&gt;
&lt;li&gt;實現徽商銀行資金存管、等保三級&lt;/li&gt;
&lt;li&gt;完成三輪融資（沃石投資、大火投資、天涯金服）&lt;/li&gt;
&lt;li&gt;P2P 時代垂直領域前十平臺&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>An example journal article</title><link>https://ruoyiplus.com/zh-tw/publications/journal-article/</link><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/publications/journal-article/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Click the &lt;em&gt;Cite&lt;/em&gt; button above to demo the feature to enable visitors to import publication metadata into their reference management software.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Create your slides in Markdown - click the &lt;em&gt;Slides&lt;/em&gt; button to check out the example.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add the publication&amp;rsquo;s &lt;strong&gt;full text&lt;/strong&gt; or &lt;strong&gt;supplementary notes&lt;/strong&gt; here. You can use rich formatting such as including
.&lt;/p&gt;</description></item><item><title>An example conference paper</title><link>https://ruoyiplus.com/zh-tw/publications/conference-paper/</link><pubDate>Mon, 01 Jul 2013 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/publications/conference-paper/</guid><description>
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Click the &lt;em&gt;Cite&lt;/em&gt; button above to demo the feature to enable visitors to import publication metadata into their reference management software.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Create your slides in Markdown - click the &lt;em&gt;Slides&lt;/em&gt; button to check out the example.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add the publication&amp;rsquo;s &lt;strong&gt;full text&lt;/strong&gt; or &lt;strong&gt;supplementary notes&lt;/strong&gt; here. You can use rich formatting such as including
.&lt;/p&gt;</description></item><item><title>尚诺金融资产管理系统</title><link>https://ruoyiplus.com/zh-tw/projects/fin-asset-mgmt/</link><pubDate>Tue, 01 May 2012 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/fin-asset-mgmt/</guid><description>&lt;p&gt;基於融資擔保牌照的金融資產管理系統。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;盡職調查與風險評估模組&lt;/li&gt;
&lt;li&gt;評分卡機制與貸款全流程管理（發放、跟蹤、貸後）&lt;/li&gt;
&lt;li&gt;風險處置閉環（催收分配、法務介入、資產拍賣）&lt;/li&gt;
&lt;li&gt;客戶管理 360 檢視（多維資料整合、精準營銷）&lt;/li&gt;
&lt;li&gt;技術棧：Java Spring + MySQL&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>进销存 POS 与餐饮系统</title><link>https://ruoyiplus.com/zh-tw/projects/pos-inventory/</link><pubDate>Tue, 01 Jun 2010 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/projects/pos-inventory/</guid><description>&lt;p&gt;為中小商戶提供的進銷存管理和餐飲 POS 解決方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;進銷存 POS：商品入庫、庫存管理、銷售開單、會員管理、多門店連鎖&lt;/li&gt;
&lt;li&gt;易石正餐餐飲軟體：桌臺管理、iPad 點菜、廚房列印、結賬分單&lt;/li&gt;
&lt;li&gt;支援無線印表機聯動&lt;/li&gt;
&lt;li&gt;技術棧：Delphi / C# / SQL Server / 嵌入式 POS 硬體驅動&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Buttons</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/button/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/button/</guid><description>&lt;p&gt;A modern, customizable button shortcode with gradient styling, icons, and smart link handling.&lt;/p&gt;
&lt;h2 id="basic-usage"&gt;Basic Usage&lt;/h2&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-351ac412531c23e422b81c6422c17da5"
href="https://ruoyiplus.com/contact"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Contact Us"
&gt;
&lt;span&gt;Contact Us&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-99f90e9d2b754ffe3fc7b4f9d280ab9e"
href="https://example.com"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Visit External Site"
&gt;
&lt;span&gt;Visit External Site&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;The above buttons are created with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/contact&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Contact Us&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://example.com&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Visit External Site&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="style-variants"&gt;Style Variants&lt;/h2&gt;
&lt;h3 id="primary-default"&gt;Primary (Default)&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-33f0c5949dceb4f2158940543a6d11f0"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Primary Button"
&gt;
&lt;span&gt;Primary Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;primary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Primary Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="secondary"&gt;Secondary&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-654c665d9c02125e00b3c2638e02ff31"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Secondary Button"
&gt;
&lt;span&gt;Secondary Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Secondary Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="outline"&gt;Outline&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-569954ebe8d760dfbd5f8dd8d491e972"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-white dark:bg-zinc-900 border-2 border-primary-500 text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 hover:border-primary-600 active:bg-primary-100 dark:active:bg-primary-950 shadow-md hover:shadow-lg hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Outline Button"
&gt;
&lt;span&gt;Outline Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;outline&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Outline Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ghost"&gt;Ghost&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-e8d694dcc82ccc6b692376347eb1210c"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-transparent text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 active:bg-primary-100 dark:active:bg-primary-950 hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Ghost Button"
&gt;
&lt;span&gt;Ghost Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ghost&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Ghost Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sizes"&gt;Sizes&lt;/h2&gt;
&lt;h3 id="small"&gt;Small&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-9edd9a4164984b892472dc4cb0d94acb"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-3 py-1.5 text-sm rounded-lg"
role="button"
aria-label="Small Button"
&gt;
&lt;span&gt;Small Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="medium-default"&gt;Medium (Default)&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-917c91b5df194ee244bcb8dd7d4916c5"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Medium Button"
&gt;
&lt;span&gt;Medium Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="large"&gt;Large&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-c9ef1eeebbeac0de80c5666baeda508c"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="Large Button"
&gt;
&lt;span&gt;Large Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="extra-large"&gt;Extra Large&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-c38da6a61bc9a2511c12a071b05d1527"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-8 py-4 text-xl rounded-lg"
role="button"
aria-label="Extra Large"
&gt;
&lt;span&gt;Extra Large&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sm&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Small Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;md&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Medium Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Large Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xl&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Extra Large&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="alignment"&gt;Alignment&lt;/h2&gt;
&lt;h3 id="left-default"&gt;Left (Default)&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-46275a2130718485193b07442854e305"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Left Aligned"
&gt;
&lt;span&gt;Left Aligned&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="center"&gt;Center&lt;/h3&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-2e7c6d0545131be865f91f4dcb47ebd3"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Center Aligned"
&gt;
&lt;span&gt;Center Aligned&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="right"&gt;Right&lt;/h3&gt;
&lt;div class="text-right"&gt;
&lt;a
id="button-09d01d6786049ba2a63f2cafd484e60e"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Right Aligned"
&gt;
&lt;span&gt;Right Aligned&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;left&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Left Aligned&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Center Aligned&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Right Aligned&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="with-icons"&gt;With Icons&lt;/h2&gt;
&lt;h3 id="icon-before-text"&gt;Icon Before Text&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-2070b64a1b12b8165d04699a5e4f0a4d"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Download"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Download&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="icon-after-text"&gt;Icon After Text&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-213c46a162adc66071b38a55c26716e3"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Continue"
&gt;
&lt;span&gt;Continue&lt;/span&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arrow-down-tray&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Download&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arrow-right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon_position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Continue&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="rounded-corners"&gt;Rounded Corners&lt;/h2&gt;
&lt;h3 id="small-radius"&gt;Small Radius&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-f306324e9ea3297cc7149761131e0e41"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded"
role="button"
aria-label="Small Radius"
&gt;
&lt;span&gt;Small Radius&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="medium-radius-default"&gt;Medium Radius (Default)&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-d519a3255417739cb8197b9869248dec"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="Medium Radius"
&gt;
&lt;span&gt;Medium Radius&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="large-radius"&gt;Large Radius&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-920afdfab9e2ab0e88cb5046924cd223"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-xl"
role="button"
aria-label="Large Radius"
&gt;
&lt;span&gt;Large Radius&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h3 id="pill-shape"&gt;Pill Shape&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-464be1a963c8f63cf75275ea2137551a"
href="#"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-4 py-2 text-base rounded-full"
role="button"
aria-label="Pill Button"
&gt;
&lt;span&gt;Pill Button&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sm&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Small Radius&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;md&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Medium Radius&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Large Radius&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Pill Button&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="advanced-examples"&gt;Advanced Examples&lt;/h2&gt;
&lt;h3 id="call-to-action-button"&gt;Call-to-Action Button&lt;/h3&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-62059f8d62052633590d3f60ec092595"
href="https://ruoyiplus.com/signup"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="Get Started Today"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.59 14.37q.159.666.16 1.38a6 6 0 0 1-6 6v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.9 14.9 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.9 14.9 0 0 0-2.58 5.84m2.699 2.7q-.155.032-.311.06a15 15 0 0 1-2.448-2.448l.06-.312m-2.24 2.39a4.49 4.49 0 0 0-1.757 4.306q.341.054.696.054a4.5 4.5 0 0 0 3.61-1.812M16.5 9a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Get Started Today&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/signup&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;primary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;lg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;align&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;rocket-launch&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Get Started Today&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="external-link-with-new-tab"&gt;External Link with New Tab&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-2cb1bb8bbb2590cc46a8ead690d2da77"
href="https://github.com/hugo-blox/kit"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-white dark:bg-zinc-900 border-2 border-primary-500 text-primary-600 dark:text-primary-400 hover:bg-primary-50 dark:hover:bg-primary-950/50 hover:border-primary-600 active:bg-primary-100 dark:active:bg-primary-950 shadow-md hover:shadow-lg hover:scale-105 active:scale-95 focus:ring-primary-500/50 px-4 py-2 text-base rounded-lg"
role="button"
aria-label="View on GitHub"
&gt;
&lt;span&gt;View on GitHub&lt;/span&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://github.com/hugo-blox/kit&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;new_tab&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;outline&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;arrow-top-right-on-square&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon_position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;View on GitHub&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="download-button"&gt;Download Button&lt;/h3&gt;
&lt;div class="text-left"&gt;
&lt;a
id="button-72ec86801f391f16b84b269ade9d2995"
href="https://ruoyiplus.com/files/document.pdf"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-secondary-500 to-secondary-600 hover:from-secondary-600 hover:to-secondary-700 active:from-secondary-700 active:to-secondary-800 text-white shadow-lg shadow-secondary-500/25 hover:shadow-xl hover:shadow-secondary-500/30 hover:scale-105 active:scale-95 focus:ring-secondary-500/50 px-4 py-2 text-base rounded-full"
role="button"
aria-label="Download PDF"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;Download PDF&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/files/document.pdf&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;secondary&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;document-arrow-down&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rounded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;Download PDF&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="parameters"&gt;Parameters&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Required.&lt;/strong&gt; Button destination URL (internal or external)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Inner content&lt;/td&gt;
&lt;td&gt;Button text (overrides shortcode content)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;new_tab&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether to open link in new tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;style&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;primary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Button style: &lt;code&gt;primary&lt;/code&gt;, &lt;code&gt;secondary&lt;/code&gt;, &lt;code&gt;outline&lt;/code&gt;, &lt;code&gt;ghost&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;size&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Button size: &lt;code&gt;sm&lt;/code&gt;, &lt;code&gt;md&lt;/code&gt;, &lt;code&gt;lg&lt;/code&gt;, &lt;code&gt;xl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;align&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;left&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Button alignment: &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;center&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;icon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Icon name from
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;icon_position&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;left&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Icon position: &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rounded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Border radius: &lt;code&gt;sm&lt;/code&gt;, &lt;code&gt;md&lt;/code&gt;, &lt;code&gt;lg&lt;/code&gt;, &lt;code&gt;xl&lt;/code&gt;, &lt;code&gt;full&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;disabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whether button should be disabled&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="security-features"&gt;Security Features&lt;/h2&gt;
&lt;p&gt;The button shortcode automatically handles security for external links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;External links&lt;/strong&gt; get &lt;code&gt;rel=&amp;quot;noreferrer&amp;quot;&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;External links opening in new tab&lt;/strong&gt; get &lt;code&gt;rel=&amp;quot;noopener noreferrer&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Internal links opening in new tab&lt;/strong&gt; get &lt;code&gt;rel=&amp;quot;noopener&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This ensures safe navigation while maintaining functionality.&lt;/p&gt;
&lt;h2 id="accessibility"&gt;Accessibility&lt;/h2&gt;
&lt;p&gt;The button shortcode includes built-in accessibility features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proper &lt;code&gt;role=&amp;quot;button&amp;quot;&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aria-label&lt;/code&gt; support&lt;/li&gt;
&lt;li&gt;Keyboard focus indicators&lt;/li&gt;
&lt;li&gt;High contrast focus rings&lt;/li&gt;
&lt;li&gt;Disabled state handling&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Callouts</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/callout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/callout/</guid><description>&lt;p&gt;Hugo Blox supports GitHub and Obsidian-style Markdown callouts for maximum compatibility and content portability.&lt;/p&gt;
&lt;p&gt;Callouts are a useful feature to draw attention to important or related content such as notes, hints, or warnings in your articles.&lt;/p&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;h3 id="basic-callout-types"&gt;Basic Callout Types&lt;/h3&gt;
&lt;p&gt;Hugo Blox supports all 15+ callout types from
:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information &amp;amp; Notes:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!NOTE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This is a note callout with important information that users should know.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;備註&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This is a note callout with important information that users should know.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!INFO]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Alternative info callout - same styling as NOTE.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="info"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m11.25 11.25l.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9-3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;資訊&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Alternative info callout - same styling as NOTE.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!ABSTRACT]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Use for abstracts, summaries, or TL;DR sections.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-cyan-100 dark:bg-cyan-900 border-cyan-500"
data-callout="abstract"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-cyan-600 dark:text-cyan-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48 48 0 0 0-1.123-.08m-5.801 0q-.099.316-.1.664c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75a2.3 2.3 0 0 0-.1-.664m-5.8 0A2.25 2.25 0 0 1 13.5 2.25H15a2.25 2.25 0 0 1 2.15 1.586m-5.8 0q-.563.035-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125zM6.75 12h.008v.008H6.75zm0 3h.008v.008H6.75zm0 3h.008v.008H6.75z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;摘要&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Use for abstracts, summaries, or TL;DR sections.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Actions &amp;amp; Tasks:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!TODO]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This is something that needs to be done.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="todo"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15L15 9.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;待辦&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This is something that needs to be done.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!TIP]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Here&amp;#39;s a helpful tip to make your workflow more efficient!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-emerald-100 dark:bg-emerald-900 border-emerald-500"
data-callout="tip"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-emerald-600 dark:text-emerald-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 18v-5.25m0 0a6 6 0 0 0 1.5-.189m-1.5.189a6 6 0 0 1-1.5-.189m3.75 7.478a12.1 12.1 0 0 1-4.5 0m3.75 2.383a14.4 14.4 0 0 1-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 1 0-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;提示&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Here&amp;rsquo;s a helpful tip to make your workflow more efficient!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!SUCCESS]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Great job! This operation completed successfully.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-green-100 dark:bg-green-900 border-green-500"
data-callout="success"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-green-600 dark:text-green-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15L15 9.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;成功&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Great job! This operation completed successfully.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Questions &amp;amp; Interactive:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!QUESTION]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;What do you think about this approach? Let us know!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-yellow-100 dark:bg-yellow-900 border-yellow-500"
data-callout="question"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-yellow-700 dark:text-yellow-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.879 7.519c1.172-1.025 3.071-1.025 4.243 0c1.171 1.025 1.171 2.687 0 3.712q-.308.268-.67.442c-.746.361-1.452.999-1.452 1.827v.75M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 5.25h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;問題&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;What do you think about this approach? Let us know!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!EXAMPLE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Here&amp;#39;s a practical example of how to implement this feature.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="example"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104q-.376.034-.75.082m.75-.082a24.3 24.3 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104q.377.034.75.082M19.8 15.3l-1.57.393A9.07 9.07 0 0 1 12 15a9.07 9.07 0 0 0-6.23-.693L5 14.5m14.8.8l1.402 1.402c1.232 1.232.65 3.318-1.067 3.611A48.3 48.3 0 0 1 12 21a48 48 0 0 1-8.135-.687c-1.718-.293-2.3-2.379-1.067-3.61L5 14.5"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;範例&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Here&amp;rsquo;s a practical example of how to implement this feature.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!QUOTE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;&amp;#34;The best way to predict the future is to invent it.&amp;#34; - Alan Kay
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-gray-100 dark:bg-gray-800 border-gray-500"
data-callout="quote"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-gray-600 dark:text-gray-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193q-.51.041-1.02.072v3.091l-3-3q-2.031 0-4.02-.163a2.1 2.1 0 0 1-.825-.242m9.345-8.334a2 2 0 0 0-.476-.095a48.6 48.6 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.5 48.5 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402c-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235q.865.113 1.74.194V21l4.155-4.155"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;引用&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;&amp;ldquo;The best way to predict the future is to invent it.&amp;rdquo; - Alan Kay&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Warnings &amp;amp; Errors:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!WARNING]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Be careful! This action might have unexpected consequences.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-orange-100 dark:bg-orange-900 border-orange-500"
data-callout="warning"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-orange-600 dark:text-orange-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;警告&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Be careful! This action might have unexpected consequences.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!CAUTION]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Danger! This operation is irreversible and could cause data loss.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-red-100 dark:bg-red-900 border-red-500"
data-callout="caution"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-red-600 dark:text-red-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;注意&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Danger! This operation is irreversible and could cause data loss.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!IMPORTANT]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This is critical information that users must understand to proceed.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-purple-100 dark:bg-purple-900 border-purple-500"
data-callout="important"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-purple-600 dark:text-purple-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m9-.75a9 9 0 1 1-18 0a9 9 0 0 1 18 0m-9 3.75h.008v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;重要&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This is critical information that users must understand to proceed.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!DANGER]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This is extremely dangerous - proceed with extreme caution!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-red-100 dark:bg-red-900 border-red-500"
data-callout="danger"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-red-600 dark:text-red-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;危險&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This is extremely dangerous - proceed with extreme caution!&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!FAILURE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This operation failed. Check your configuration and try again.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-red-100 dark:bg-red-900 border-red-500"
data-callout="failure"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-red-600 dark:text-red-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m9.75 9.75l4.5 4.5m0-4.5l-4.5 4.5M21 12a9 9 0 1 1-18 0a9 9 0 0 1 18 0"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;失敗&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This operation failed. Check your configuration and try again.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!BUG]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;Known issue: This feature doesn&amp;#39;t work properly in Safari &amp;lt; 14.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-red-100 dark:bg-red-900 border-red-500"
data-callout="bug"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-red-600 dark:text-red-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 12.75q1.724 0 3.383.237c1.037.146 1.866.966 1.866 2.013c0 3.728-2.35 6.75-5.25 6.75S6.75 18.728 6.75 15c0-1.046.83-1.867 1.866-2.013A24 24 0 0 1 12 12.75m0 0c2.883 0 5.647.508 8.208 1.44a24 24 0 0 1-1.153 6.06M12 12.75c-2.883 0-5.647.508-8.208 1.44c.125 2.105.52 4.136 1.153 6.06M12 12.75a2.25 2.25 0 0 0 2.248-2.354M12 12.75a2.25 2.25 0 0 1-2.248-2.354M12 8.25q1.494-.001 2.922-.236c.403-.066.74-.358.795-.762a3.8 3.8 0 0 0-.399-2.25M12 8.25q-1.493-.001-2.922-.236c-.402-.066-.74-.358-.795-.762a3.73 3.73 0 0 1 .4-2.253M12 8.25a2.25 2.25 0 0 0-2.248 2.146M12 8.25a2.25 2.25 0 0 1 2.248 2.146M8.683 5a6 6 0 0 1-1.155-1.002c.07-.63.27-1.222.574-1.747M8.683 5a3.75 3.75 0 0 1 6.635 0m0 0c.427-.283.815-.62 1.155-.999a4.5 4.5 0 0 0-.575-1.752M4.921 6a24 24 0 0 0-.392 3.314a24 24 0 0 0 5.223 1.082M19.08 6q.308 1.622.392 3.314a24 24 0 0 1-5.223 1.082"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;錯誤&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Known issue: This feature doesn&amp;rsquo;t work properly in Safari &amp;lt; 14.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="custom-titles"&gt;Custom Titles&lt;/h3&gt;
&lt;p&gt;You can customize the title of any callout:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;[!WARNING]+ Custom Warning Title
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;&amp;gt; &lt;/span&gt;&lt;span class="ge"&gt;This warning has a custom title instead of just &amp;#34;Warning&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-orange-100 dark:bg-orange-900 border-orange-500"
data-callout="warning"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-orange-600 dark:text-orange-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0zM12 15.75h.007v.008H12z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Custom Warning Title&lt;br&gt;&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;This warning has a custom title instead of just &amp;ldquo;Warning&amp;rdquo;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="legacy-syntax-deprecated"&gt;Legacy Syntax (Deprecated)&lt;/h3&gt;
&lt;p&gt;The old shortcode syntax still works but shows a deprecation warning:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; callout note &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This still works but is deprecated. Use the Markdown syntax above!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /callout &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="css-customization"&gt;CSS Customization&lt;/h3&gt;
&lt;p&gt;Hugo Blox generates callouts with semantic CSS classes and data attributes, making customization easy. Each callout has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Base class: &lt;code&gt;.callout&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Type-specific data attribute: &lt;code&gt;data-callout=&amp;quot;note&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Component classes: &lt;code&gt;.callout-icon&lt;/code&gt;, &lt;code&gt;.callout-title&lt;/code&gt;, &lt;code&gt;.callout-content&lt;/code&gt;, &lt;code&gt;.callout-body&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Custom CSS Example&lt;/strong&gt; (add to your &lt;code&gt;assets/css/custom.css&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;/* Customize NOTE callouts */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-callout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;note&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;border-left-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;/* Make SUCCESS callouts pulse */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-callout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pulse&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="kt"&gt;s&lt;/span&gt; &lt;span class="kc"&gt;infinite&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;/* Custom icon styling */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout-icon&lt;/span&gt; &lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;transform&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="kt"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;hover&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout-icon&lt;/span&gt; &lt;span class="nt"&gt;svg&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;/* Dark mode overrides */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;dark&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;callout&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-callout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;92&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;245&lt;/span&gt; &lt;span class="mi"&gt;158&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This approach matches
, ensuring your styles work across platforms.&lt;/p&gt;
&lt;h3 id="benefits-of-the-new-syntax"&gt;Benefits of the New Syntax&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Portable&lt;/strong&gt;: Works with GitHub, Obsidian, and other Markdown editors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standard&lt;/strong&gt;: Uses widely-adopted Markdown callout syntax&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clean&lt;/strong&gt;: No Hugo-specific shortcodes needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Future-proof&lt;/strong&gt;: Supported by the latest Hugo versions (0.132.0+)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable&lt;/strong&gt;: Semantic CSS classes and data attributes for easy styling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complete&lt;/strong&gt;: All 15+ Obsidian callout types supported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multilingual&lt;/strong&gt;: Callout titles are automatically translated based on your site&amp;rsquo;s language (and can be customized in the language packs)&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cards</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/cards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/cards/</guid><description>&lt;p&gt;A Hugo extension to create cards. Cards can be shown as links or as plain text.&lt;/p&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: 1;"&gt;
&lt;a
class="hb-card group"href="../" &gt;
&lt;span class="hb-card-title p-4"&gt;
&lt;svg style="height: 1em; width: 1em;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4.26 10.147a60 60 0 0 0-.491 6.347A48.6 48.6 0 0 1 12 20.904a48.6 48.6 0 0 1 8.232-4.41a61 61 0 0 0-.491-6.347m-15.482 0a51 51 0 0 0-2.658-.813A60 60 0 0 1 12 3.493a60 60 0 0 1 10.399 5.84q-1.345.372-2.658.814m-15.482 0A51 51 0 0 1 12 13.489a50.7 50.7 0 0 1 7.74-3.342M6.75 15a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m0 0v-3.675A55 55 0 0 1 12 8.443m-7.007 11.55A5.98 5.98 0 0 0 6.75 15.75v-1.5"/&gt;&lt;/svg&gt;Learn Shortcodes&lt;/span&gt;&lt;/a&gt;
&lt;a
class="hb-card group"&gt;
&lt;span class="hb-card-title p-4"&gt;A card without an icon or link&lt;/span&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;is rendered by:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; cards &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {{&amp;lt; card url=&amp;#34;../callout&amp;#34; title=&amp;#34;Callout&amp;#34; icon=&amp;#34;academic-cap&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {{&amp;lt; card url=&amp;#34;&amp;#34; title=&amp;#34;A card without an icon&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /cards &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="options"&gt;Options&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;icon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the icon. Defaults to
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Title heading for the card.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;subtitle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Subtitle heading (supports Markdown).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Internationalization (i18n)</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/reference/i18n/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/reference/i18n/</guid><description>&lt;p&gt;Hugo Blox enables you to easily edit the interface text as well as translating your site into multiple languages using Hugo&amp;rsquo;s
feature.&lt;/p&gt;
&lt;p&gt;View the full docs at
&lt;/p&gt;</description></item><item><title>Spoilers</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/toggle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/toggle/</guid><description>&lt;p&gt;A Hugo shortcode to toggle collapsible content.&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;details class="spoiler " id="spoiler-0"&gt;
&lt;summary class="cursor-pointer"&gt;Click to view the spoiler&lt;/summary&gt;
&lt;div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2"&gt;
&lt;p&gt;You found me!&lt;/p&gt;
&lt;p&gt;Markdown is &lt;strong&gt;supported&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; spoiler text=&amp;#34;Click to view the spoiler&amp;#34; &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This is the content of the details.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Markdown is **supported**.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{&amp;lt; /spoiler &amp;gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Steps</title><link>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh-tw/courses/hugo-blox/guide/formatting/steps/</guid><description>&lt;p&gt;Display a series of steps, such as for a tutorial.&lt;/p&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;div class="hb-steps"&gt;
&lt;h3 id="step-1"&gt;Step 1&lt;/h3&gt;
&lt;p&gt;The first step here&amp;hellip;&lt;/p&gt;
&lt;h3 id="step-2"&gt;Step 2&lt;/h3&gt;
&lt;p&gt;The second step here&amp;hellip;&lt;/p&gt;
&lt;h3 id="step-3"&gt;Step 3&lt;/h3&gt;
&lt;p&gt;The third step here&amp;hellip;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;p&gt;Use the Markdown level-3 headings to represent step titles within the &lt;code&gt;steps&lt;/code&gt; shortcode:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{% steps %}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;### Step 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The first step here...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;### Step 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The second step here...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;### Step 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The third step here...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{{% /steps %}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>