<?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/</link><atom:link href="https://ruoyiplus.com/zh/index.xml" rel="self" type="application/rss+xml"/><description>RuoYiPlus</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>zh-Hans</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/</link></image><item><title>环境搭建</title><link>https://ruoyiplus.com/zh/docs/getting-started/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/getting-started/</link><pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/reference/customization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/project-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/business-vision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/report/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/framework-enhancement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/ai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/security-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/crm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/iam-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/audit-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/member/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/mp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/report-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/ai-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/mall/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/erp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/mall-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/crm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/wms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/crm-data-permission/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/mes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/cs-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/sale/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/iot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/member-marketing-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/im/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/mp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/erp-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/vue3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/vben5/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/wms-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/mes-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/saas-tenant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/pm-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/new-feature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/bpm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/iot-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/asset-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/message-queue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/oa-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/pay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/ehr-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/im-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/mail-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/pay-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/plus/fits-plus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/ruoyi/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/blog/notebook-onboarding/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/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/projects/ruoyi-plus/</link><pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/exchange-engine/</link><pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/pyrebuilder/</link><pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/quant-qlib/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/slides/example/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/blog/get-started/</link><pubDate>Fri, 27 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/pytorch/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/scikit/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/blog/second-brain/</link><pubDate>Thu, 26 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/blog/data-visualization/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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-431729865" 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-431729865', 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/blog/teach-courses/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/authors/me/"&gt;Delon XIE&lt;/a&gt;&lt;/span&gt;
&lt;/span&gt;
(2019).
&lt;a href="https://ruoyiplus.com/zh/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/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/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/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/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/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/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/courses/hugo-blox/guide/formatting/media/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/experience/</guid><description/></item><item><title>✅ Manage your projects</title><link>https://ruoyiplus.com/zh/blog/project-management/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/flink-data/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/iot-parking/</link><pubDate>Tue, 01 Jun 2021 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/publications/preprint/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/events/example/</link><pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/p2p-platform/</link><pubDate>Fri, 01 Jan 2016 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/publications/journal-article/</link><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/publications/conference-paper/</link><pubDate>Mon, 01 Jul 2013 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/fin-asset-mgmt/</link><pubDate>Tue, 01 May 2012 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/projects/pos-inventory/</link><pubDate>Tue, 01 Jun 2010 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/formatting/button/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/formatting/callout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/formatting/cards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/reference/i18n/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/formatting/toggle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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/courses/hugo-blox/guide/formatting/steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ruoyiplus.com/zh/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>