131 lines
156 KiB
HTML
131 lines
156 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>4.9 数据库设计 | 小蚂蚁云</title>
|
||
<meta name="description" content="RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI">
|
||
<meta name="generator" content="VitePress v1.3.4">
|
||
<link rel="preload stylesheet" href="/assets/style.bvRZWfHW.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.Ccv6ul3o.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.BAYk2F26.js">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.BbmSSMjL.js">
|
||
<link rel="modulepreload" href="/assets/zh_architecture_database-design.md.CvsADRAM.lean.js">
|
||
<link rel="icon" type="image/svg+xml" href="/logo.svg">
|
||
<link rel="icon" type="image/png" href="/logo.png">
|
||
<meta property="og:type" content="website">
|
||
<meta property="twitter:card" content="summary_large_image">
|
||
<meta property="twitter:image" content="/social.png">
|
||
<script src="/banner.js" async type="text/javascript"></script>
|
||
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"light",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||
<meta property="og:url" content="https://www.rxthink.cn">
|
||
<meta property="og:description" content="RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI">
|
||
<meta property="twitter:url" content="https://www.rxthink.cn">
|
||
<meta property="twitter:title" content="RXThinkCMF Laravel13+NaiveUI 开发文档">
|
||
<meta property="twitter:description" content="RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI">
|
||
<script>var _hmt=_hmt||[];(function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?4f06f01017cdd5c1a95a58a6787f4d10";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})();</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-4dae6186><!--[--><!--]--><!--[--><span tabindex="-1" data-v-b1d023f7></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-b1d023f7> Skip to content </a><!--]--><!----><header class="VPNav" data-v-4dae6186 data-v-6677dd63><div class="VPNavBar" data-v-6677dd63 data-v-9ee283ce><div class="wrapper" data-v-9ee283ce><div class="container" data-v-9ee283ce><div class="title" data-v-9ee283ce><div class="VPNavBarTitle has-sidebar" data-v-9ee283ce data-v-a535d338><a class="title" href="/" data-v-a535d338><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.svg" alt data-v-6214f9fb><!--]--><span data-v-a535d338>小蚂蚁云</span><!--[--><!--]--></a></div></div><div class="content" data-v-9ee283ce><div class="content-body" data-v-9ee283ce><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9ee283ce><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9ee283ce data-v-b192e9c1><span id="main-nav-aria-label" class="visually-hidden" data-v-b192e9c1> Main Navigation </span><!--[--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.rxthink.cn" target="_blank" rel="noreferrer" tabindex="0" data-v-b192e9c1 data-v-5fb253b1><!--[--><span data-v-5fb253b1>官网</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.rxthink.cn/goods/detail/2" target="_blank" rel="noreferrer" tabindex="0" data-v-b192e9c1 data-v-5fb253b1><!--[--><span data-v-5fb253b1>授权</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-b192e9c1 data-v-223824a4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-223824a4><span class="text" data-v-223824a4><!----><span data-v-223824a4>部署文档</span><span class="vpi-chevron-down text-icon" data-v-223824a4></span></span></button><div class="menu" data-v-223824a4><div class="VPMenu" data-v-223824a4 data-v-b6be4b39><div class="items" data-v-b6be4b39><!--[--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp6.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版ThinkPHP6+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp6.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp6.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp6.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp8.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版ThinkPHP8+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp8.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp8.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.thinkphp8.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.laravel13.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版Laravel13+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.laravel13.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.laravel13.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://docs.laravel13.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+NaiveUI版本<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-b192e9c1 data-v-223824a4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-223824a4><span class="text" data-v-223824a4><!----><span data-v-223824a4>在线演示</span><span class="vpi-chevron-down text-icon" data-v-223824a4></span></span></button><div class="menu" data-v-223824a4><div class="VPMenu" data-v-223824a4 data-v-b6be4b39><div class="items" data-v-b6be4b39><!--[--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp6.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版ThinkPHP6+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp6.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp6.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp6.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp8.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版ThinkPHP8+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp8.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp8.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.thinkphp8.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.laravel13.layui.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF混编版Laravel13+Layui版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.laravel13.elevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+ElementPlus版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.laravel13.antdvue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+AntDesign版本<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="http://manage.laravel13.naivevue.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->RXThinkCMF前后端分离Laravel13+NaiveUI版本<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/other/sponsor.html" tabindex="0" data-v-b192e9c1 data-v-5fb253b1><!--[--><span data-v-5fb253b1>广告赞助</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-b192e9c1 data-v-223824a4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-223824a4><span class="text" data-v-223824a4><!----><span data-v-223824a4>相关链接</span><span class="vpi-chevron-down text-icon" data-v-223824a4></span></span></button><div class="menu" data-v-223824a4><div class="VPMenu" data-v-223824a4 data-v-b6be4b39><div class="items" data-v-b6be4b39><!--[--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="https://www.rxthink.cn" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->官方网站<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->Gitee 仓库<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="https://laravel.com/" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->Laravel 官网<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="https://cn.vuejs.org/" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->Vue3 文档<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b6be4b39 data-v-f956f3ad><a class="VPLink link vp-external-link-icon" href="https://www.naiveui.com/" target="_blank" rel="noreferrer" data-v-f956f3ad><!--[-->NaiveUI<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9ee283ce data-v-0b7bb029><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-0b7bb029 data-v-fef60102 data-v-3a5bff6c><span class="check" data-v-3a5bff6c><span class="icon" data-v-3a5bff6c><!--[--><span class="vpi-sun sun" data-v-fef60102></span><span class="vpi-moon moon" data-v-fef60102></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9ee283ce data-v-929d9abf data-v-9e0f05cc><!--[--><a class="VPSocialLink no-icon" href="https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue" aria-label="github" target="_blank" rel="noopener" data-v-9e0f05cc data-v-d8bc420f><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9ee283ce data-v-78391181 data-v-223824a4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-223824a4><span class="vpi-more-horizontal icon" data-v-223824a4></span></button><div class="menu" data-v-223824a4><div class="VPMenu" data-v-223824a4 data-v-b6be4b39><!----><!--[--><!--[--><!----><div class="group" data-v-78391181><div class="item appearance" data-v-78391181><p class="label" data-v-78391181>Appearance</p><div class="appearance-action" data-v-78391181><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-78391181 data-v-fef60102 data-v-3a5bff6c><span class="check" data-v-3a5bff6c><span class="icon" data-v-3a5bff6c><!--[--><span class="vpi-sun sun" data-v-fef60102></span><span class="vpi-moon moon" data-v-fef60102></span><!--]--></span></span></button></div></div></div><div class="group" data-v-78391181><div class="item social-links" data-v-78391181><div class="VPSocialLinks social-links-list" data-v-78391181 data-v-9e0f05cc><!--[--><a class="VPSocialLink no-icon" href="https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue" aria-label="github" target="_blank" rel="noopener" data-v-9e0f05cc data-v-d8bc420f><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9ee283ce data-v-9173bc9b><span class="container" data-v-9173bc9b><span class="top" data-v-9173bc9b></span><span class="middle" data-v-9173bc9b></span><span class="bottom" data-v-9173bc9b></span></span></button></div></div></div></div><div class="divider" data-v-9ee283ce><div class="divider-line" data-v-9ee283ce></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-4dae6186 data-v-b4df0add><div class="container" data-v-b4df0add><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-b4df0add><span class="vpi-align-left menu-icon" data-v-b4df0add></span><span class="menu-text" data-v-b4df0add>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-b4df0add data-v-3a3ce8d3><button data-v-3a3ce8d3>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-4dae6186 data-v-bf80c8a3><div class="curtain" data-v-bf80c8a3></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-bf80c8a3><span class="visually-hidden" id="sidebar-aria-label" data-v-bf80c8a3> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>📖 1. 了解项目</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/introduction.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.1 项目介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/why.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.2 为什么选择我们</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/directory.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.3 项目目录结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/course.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.4 新手入门指南</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tech-stack.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.5 技术栈说明</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/changelog.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>1.6 更新日志</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🚀 2. 快速入门</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/environment.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.1 开发环境准备</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/laragon.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.2 Laragon 环境搭建</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/backend-start.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.3 后端服务启动</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/frontend-start.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.4 前端服务启动</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/database-init.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.5 数据库初始化</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/env-vars.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.6 环境变量配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/first-api.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.7 第一个接口调试</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/docker.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.8 Docker 快速体验</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/quickstart/faq.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>2.9 常见问题 FAQ</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🧪 3. 模块开发实战</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/overview.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.1 概述与目标</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/database.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.2 数据库建表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/model.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.3 模型层开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/validator.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.4 FormRequest 验证器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/logic.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.5 Service 层开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/controller.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.6 控制器开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/route.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.7 路由注册</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/permission.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.8 权限节点配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/frontend-integration.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.9 前端联调指引</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/code-list.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.10 完整代码清单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/guide/faq.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>3.11 常见问题与排错</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible has-active" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🏛️ 4. 架构设计</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/overview.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.1 整体架构概览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/request-flow.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.2 请求处理链路</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/backend-layer.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.3 后端分层架构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/frontend-layer.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.4 前端分层架构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/directory-design.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.5 目录结构设计</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/base-classes.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.6 核心基类体系</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/cross-cutting.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.7 横切机制</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/cache.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.8 缓存架构设计</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/database-design.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.9 数据库设计</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/security.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.10 安全架构设计</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/architecture/extensibility.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>4.11 扩展性设计</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🔐 5. 核心功能</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>认证与安全</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/jwt.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.1 用户认证(JWT)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/auth-flow.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.2 认证流程实战</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/captcha.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.3 验证码机制</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/rbac.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.4 权限管理(RBAC)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/cors.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.5 跨域资源共享</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/password.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.6 密码加密服务</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/demo-mode.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.7 演示模式</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>数据与配置</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/tenant.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.8 多租户隔离</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/data-scope.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.9 数据权限</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/dict.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.10 字典模块</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/dict-guide.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.11 字典配置与使用</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/config.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.12 系统配置管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/param.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.13 系统参数管理</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>日志与监控</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/operation-log.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.14 操作日志</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/login-log.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.15 登录日志</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>响应与异常</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/exception.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.16 统一响应与异常抛出</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>注解系统</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/core/attributes.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>5.17 注解系统总览</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>📦 6. 业务模块</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/user.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.1 用户管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/role.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.2 角色管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/menu.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.3 菜单管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/dept.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.4 部门管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/level.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.5 职级管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/position.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.6 岗位管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/article.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.7 文章管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/content.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.8 公告与链接管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/city.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.9 行政区划管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/category.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.10 分类管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/job.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.11 定时任务</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/param.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.12 参数管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/tenant.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.13 租户管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/filetemplate.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.14 文件模板管理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/modules/index.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>6.15 首页与个人中心</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🧰 7. 文件处理</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/upload.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.1 文件上传全流程</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/upload-config.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.2 上传配置详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/rich-text.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.3 富文本处理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/excel.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.4 数据导入导出</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/file-components.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.5 前端文件组件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/tools/db-migrate.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>7.6 数据库迁移工具</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🔗 8. 接口规范与对接</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/response.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.1 统一响应格式</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/error-code.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.2 错误码对照表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/pagination.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.3 分页查询规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/upload.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.4 文件上传接口</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/dict-api.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.5 字典数据接口</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/token.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.6 Token 使用说明</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/api-spec/overview.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>8.7 API 接口总览</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🖥️ 9. 前端开发</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>工程基础</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/overview.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.1 前端工程概述</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/directory.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.2 目录结构详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/env-config.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.3 环境与构建配置</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>核心机制</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/http.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.4 HTTP 请求封装</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/router.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.5 路由与动态菜单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/store.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.6 状态管理(Pinia)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/permission.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.7 权限控制</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/login.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.8 登录流程</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>公共组件</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/display-components.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.9 数据展示组件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/form-components.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.10 数据录入组件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/excel-components.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.11 Excel 导入导出组件</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>开发实践</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/new-page.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.12 新增页面开发步骤</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/api-module.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.13 API 模块编写规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/style.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.14 样式与主题定制</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/layout.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.15 布局系统</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/frontend/utils.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>9.16 工具函数</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>🔧 10. 代码生成器</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/overview.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.1 概述与架构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/cli.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.2 CLI 命令行使用</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/web-ui.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.3 Web 管理界面</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/parser.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.4 表结构解析引擎</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/code-engine.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.5 代码生成引擎</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/templates.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.6 自定义模板开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/config.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.7 配置文件详解</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/demo.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.8 实战案例</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/generator/faq.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>10.9 常见问题</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>⚙️ 11. 运维部署</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/checklist.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.1 部署 Checklist</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/env-plan.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.2 环境规划</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/db-migrate.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.3 数据库迁移</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/backend.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.4 后端部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/frontend.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.5 前端部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/docker.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.6 Docker 生产部署</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/performance.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.7 性能调优</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/security.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.8 安全加固清单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/backup.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.9 备份与恢复</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/troubleshooting.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.10 故障排查手册</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/deploy/ci-cd.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>11.11 CI/CD 流水线</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>📋 12. 规范标准</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>⭐ 必须遵守</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/api-response.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.1 API 响应规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/pagination.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.2 分页查询规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/git.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.3 Git 提交规范</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible" data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h3 class="text" data-v-e32f8976>📌 建议遵守</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/deletion.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.4 数据删除规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/code-review.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.5 代码审查清单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/backend-code.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.6 后端编码规范</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/standards/frontend-code.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>12.7 前端编码规范</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-f04be081><section class="VPSidebarItem level-0 collapsible" data-v-f04be081 data-v-e32f8976><div class="item" role="button" tabindex="0" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><h2 class="text" data-v-e32f8976>📄 附录</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-e32f8976><span class="vpi-chevron-right caret-icon" data-v-e32f8976></span></div></div><div class="items" data-v-e32f8976><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/faq.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>A. 常见问题汇总</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/database-tables.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>B. 数据库表结构速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/config-reference.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>C. 配置项速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/functions.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>D. 公共函数速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/api-cheatsheet.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>E. API 接口速查表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/middleware.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>F. 中间件执行顺序</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/components.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>G. 前端组件速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/stores.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>H. 前端 Store 速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/enums.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>I. 前端 Enums 速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/glossary.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>J. 术语表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/appendix/commands.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>K. Artisan 命令速查</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/other/contributing.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>L. 贡献指南</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/other/declare.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>M. 免责声明</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link link" href="/zh/other/sponsor.html" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>N. 广告赞助</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e32f8976><div class="item" data-v-e32f8976><div class="indicator" data-v-e32f8976></div><a class="VPLink link vp-external-link-icon link" href="https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue" target="_blank" rel="noreferrer" data-v-e32f8976><!--[--><p class="text" data-v-e32f8976>O. 开源协议</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-4dae6186 data-v-e52db3a1><div class="VPDoc has-sidebar has-aside" data-v-e52db3a1 data-v-b97a2373><!--[--><!--]--><div class="container" data-v-b97a2373><div class="aside" data-v-b97a2373><div class="aside-curtain" data-v-b97a2373></div><div class="aside-container" data-v-b97a2373><div class="aside-content" data-v-b97a2373><div class="VPDocAside" data-v-b97a2373 data-v-c23100fe><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-c23100fe data-v-b5a1c08a><div class="content" data-v-b5a1c08a><div class="outline-marker" data-v-b5a1c08a></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-b5a1c08a>本页内容</div><ul class="VPDocOutlineItem root" data-v-b5a1c08a data-v-67a5fa10><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-c23100fe></div><!--[--><!--[--><!--[--><!--[--><!--[--><div class="VPDocAsideSponsors" data-v-46d2db61><div class="VPSponsors vp-sponsor aside"><!--[--><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid mini"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" href="https://www.rxthink.cn" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden">Become a sponsor</h4><img class="vp-sponsor-grid-image" src="/sponsor/rxthinkcmf.png" alt="Become a sponsor"></article></a></div><!--]--></div></section><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid xmini"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" href="https://www.rxthink.cn" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden">企业级中台解决方案</h4><img class="vp-sponsor-grid-image" src="/sponsor/rxthinkcmf.png" alt="企业级中台解决方案"></article></a></div><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" href="https://www.rxthink.cn" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden">企业级中台解决方案</h4><img class="vp-sponsor-grid-image" src="/sponsor/rxthinkcmf.png" alt="企业级中台解决方案"></article></a></div><!--]--></div></section><!--]--></div></div><a class="banner mp" href="https://www.rxthink.cn" target="_blank" data-v-46d2db61><img width="22" height="22" src="/sponsor/rxthinkcmf.png" data-v-46d2db61><span data-v-46d2db61><p class="extra-info" data-v-46d2db61>赋能开发者</p><p class="heading" data-v-46d2db61>企业级中台解决方案</p><p class="extra-info" data-v-46d2db61>助力企业发展</p></span></a><a class="banner cert" href="https://www.rxthink.cn" target="_blank" data-v-46d2db61><img width="22" height="22" src="/sponsor/rxthinkcmf.png" data-v-46d2db61><span data-v-46d2db61><p class="extra-info" data-v-46d2db61>赋能开发者</p><p class="heading" data-v-46d2db61>企业级中台解决方案</p><p class="extra-info" data-v-46d2db61>助力企业发展</p></span></a><!--]--><!--]--><!--]--><!--]--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-b97a2373><div class="content-container" data-v-b97a2373><!--[--><!--]--><main class="main" data-v-b97a2373><div style="position:relative;" class="vp-doc _zh_architecture_database-design" data-v-b97a2373><div><h1 id="_4-9-数据库设计" tabindex="-1">4.9 数据库设计 <a class="header-anchor" href="#_4-9-数据库设计" aria-label="Permalink to "4.9 数据库设计""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>项目支持 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 五种数据库,通过 <code>.env</code> 的 <code>DB_CONNECTION</code> 一键切换,<code>document/</code> 下提供五套初始化脚本。所有数据库共用同一套代码,无需修改业务逻辑。本章涵盖命名规范、表结构设计、字段说明、索引策略和多数据库适配。</p></div><h2 id="命名规范" tabindex="-1">命名规范 <a class="header-anchor" href="#命名规范" aria-label="Permalink to "命名规范""></a></h2><table tabindex="0"><thead><tr><th>对象</th><th>规范</th><th>示例</th></tr></thead><tbody><tr><td>表名</td><td>不含前缀的业务名 + <code>DB_PREFIX</code>(默认 <code>laravel_</code>)</td><td><code>laravel_user</code>、<code>laravel_article</code></td></tr><tr><td>模型 <code>$table</code></td><td><strong>不含前缀</strong></td><td><code>protected $table = 'user'</code></td></tr><tr><td>字段名</td><td>小写下划线</td><td><code>create_time</code>、<code>user_name</code></td></tr><tr><td>主键</td><td>统一 <code>id</code>,INT 自增</td><td><code>id INT PRIMARY KEY</code></td></tr><tr><td>外键</td><td><code>表名_id</code></td><td><code>user_id</code>、<code>role_id</code></td></tr><tr><td>索引</td><td><code>idx_字段名</code></td><td><code>idx_status</code>、<code>idx_tenant_id</code></td></tr><tr><td>唯一索引</td><td><code>uk_含义</code>(常含 <code>is_delete</code> 协同)</td><td><code>uk_tenant_username</code></td></tr></tbody></table><h2 id="公共字段" tabindex="-1">公共字段 <a class="header-anchor" href="#公共字段" aria-label="Permalink to "公共字段""></a></h2><p>所有业务表<strong>必须</strong>包含以下公共字段,由模型 Trait 自动维护:</p><div class="language-sql vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sql</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- MySQL 格式</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">id </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">INT</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> PRIMARY KEY</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> AUTO_INCREMENT COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">主键</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">is_delete </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">TINYINT</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">1</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 0</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">软删除 0=正常 1=已删除</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">create_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">VARCHAR</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">50</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">创建人</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">create_time </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATETIME</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">创建时间</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">update_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">VARCHAR</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">50</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">更新人</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">update_time </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATETIME</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">更新时间</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span></span></code></pre></div><table tabindex="0"><thead><tr><th>字段</th><th>自动维护方</th><th>说明</th></tr></thead><tbody><tr><td><code>is_delete</code></td><td><code>SoftDeletesByFlag</code></td><td><code>softDelete()</code> 设置为 1,<code>SoftDeleteFlagScope</code> 全局过滤</td></tr><tr><td><code>create_user</code></td><td><code>HasAuditColumns</code> creating 事件</td><td>取 <code>Auth::username()</code>,已传入则不覆盖</td></tr><tr><td><code>create_time</code></td><td><code>HasAuditColumns</code> creating 事件</td><td>取 <code>now()</code>,已传入则不覆盖</td></tr><tr><td><code>update_user</code></td><td><code>HasAuditColumns</code> updating 事件</td><td>取 <code>Auth::username()</code></td></tr><tr><td><code>update_time</code></td><td><code>HasAuditColumns</code> updating 事件</td><td>始终覆盖为当前时间</td></tr></tbody></table><h2 id="核心表清单-25-张-" tabindex="-1">核心表清单(25 张) <a class="header-anchor" href="#核心表清单-25-张-" aria-label="Permalink to "核心表清单(25 张)""></a></h2><h3 id="用户与权限-5-张-" tabindex="-1">用户与权限(5 张) <a class="header-anchor" href="#用户与权限-5-张-" aria-label="Permalink to "用户与权限(5 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_user</code></td><td>用户表</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_user_role</code></td><td>用户角色关联表(N:N 中间表)</td><td>—</td></tr><tr><td><code>laravel_role</code></td><td>角色表</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_role_menu</code></td><td>角色菜单关联表(N:N 中间表)</td><td>—</td></tr><tr><td><code>laravel_menu</code></td><td>菜单/权限表(菜单即权限)</td><td><code>BaseService</code></td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>laravel_user ──┐</span></span>
|
||
<span class="line"><span> │ N:N (laravel_user_role)</span></span>
|
||
<span class="line"><span>laravel_role ──┤</span></span>
|
||
<span class="line"><span> │ N:N (laravel_role_menu)</span></span>
|
||
<span class="line"><span>laravel_menu ──┘</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>laravel_dept ←── laravel_user.dept_id</span></span>
|
||
<span class="line"><span>laravel_tenant ←── laravel_user.tenant_id</span></span></code></pre></div><h3 id="组织架构-3-张-" tabindex="-1">组织架构(3 张) <a class="header-anchor" href="#组织架构-3-张-" aria-label="Permalink to "组织架构(3 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_dept</code></td><td>部门表(树形,parent_id)</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_position</code></td><td>岗位表</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_level</code></td><td>职级表</td><td><code>BaseTenantService</code></td></tr></tbody></table><h3 id="租户-1-张-" tabindex="-1">租户(1 张) <a class="header-anchor" href="#租户-1-张-" aria-label="Permalink to "租户(1 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_tenant</code></td><td>租户表(状态、过期时间、用户数限制)</td><td><code>BaseService</code></td></tr></tbody></table><h3 id="系统配置-5-张-" tabindex="-1">系统配置(5 张) <a class="header-anchor" href="#系统配置-5-张-" aria-label="Permalink to "系统配置(5 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_dict</code></td><td>字典表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_dict_item</code></td><td>字典项表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_config</code></td><td>配置组表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_config_item</code></td><td>配置项表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_param</code></td><td>系统参数表</td><td><code>BaseService</code></td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>laravel_dict ←── laravel_dict_item.dict_id</span></span>
|
||
<span class="line"><span>laravel_config ←── laravel_config_item.config_id</span></span></code></pre></div><h3 id="内容管理-4-张-" tabindex="-1">内容管理(4 张) <a class="header-anchor" href="#内容管理-4-张-" aria-label="Permalink to "内容管理(4 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_article</code></td><td>文章表</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_category</code></td><td>文章分类表(树形)</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_link</code></td><td>友情链接表</td><td><code>BaseTenantService</code></td></tr><tr><td><code>laravel_notice</code></td><td>通知公告表</td><td><code>BaseTenantService</code></td></tr></tbody></table><h3 id="日志审计-2-张-" tabindex="-1">日志审计(2 张) <a class="header-anchor" href="#日志审计-2-张-" aria-label="Permalink to "日志审计(2 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_login_log</code></td><td>登录日志表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_operation_log</code></td><td>操作日志表</td><td><code>BaseService</code></td></tr></tbody></table><h3 id="定时任务-2-张-" tabindex="-1">定时任务(2 张) <a class="header-anchor" href="#定时任务-2-张-" aria-label="Permalink to "定时任务(2 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_job</code></td><td>定时任务表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_job_log</code></td><td>定时任务执行日志表</td><td><code>BaseService</code></td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>laravel_job ←── laravel_job_log.job_id</span></span></code></pre></div><h3 id="基础数据-3-张-" tabindex="-1">基础数据(3 张) <a class="header-anchor" href="#基础数据-3-张-" aria-label="Permalink to "基础数据(3 张)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Service 基类</th></tr></thead><tbody><tr><td><code>laravel_city</code></td><td>城市行政区划表(树形)</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_file_template</code></td><td>文件模板表</td><td><code>BaseService</code></td></tr><tr><td><code>laravel_example</code></td><td>案例演示表(生成器参考模板)</td><td><code>BaseService</code></td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">租户隔离范围</p><p>继承 <code>BaseTenantService</code> 的 9 个服务:User / Role / Dept / Position / Level / Article / Category / Notice / Link——业务数据按租户隔离;系统共享数据(字典、配置、菜单、日志等)继承 <code>BaseService</code> 不隔离。</p></div><h2 id="关键表字段说明" tabindex="-1">关键表字段说明 <a class="header-anchor" href="#关键表字段说明" aria-label="Permalink to "关键表字段说明""></a></h2><h3 id="laravel-user-用户表-" tabindex="-1">laravel_user(用户表) <a class="header-anchor" href="#laravel-user-用户表-" aria-label="Permalink to "laravel_user(用户表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>tenant_id</code></td><td>INT</td><td>租户 ID(0=平台用户)</td></tr><tr><td><code>code</code></td><td>VARCHAR(100)</td><td>用户编码</td></tr><tr><td><code>username</code></td><td>VARCHAR(30)</td><td>用户名(登录账号)</td></tr><tr><td><code>password</code></td><td>VARCHAR(255)</td><td>密码(bcrypt 加密)</td></tr><tr><td><code>salt</code></td><td>VARCHAR(30)</td><td>加密盐(外部盐,与 password 分离存储)</td></tr><tr><td><code>realname</code></td><td>VARCHAR(150)</td><td>用户姓名</td></tr><tr><td><code>gender</code></td><td>INT</td><td>性别:1-男 2-女 3-保密</td></tr><tr><td><code>mobile</code> / <code>email</code></td><td>VARCHAR(30)</td><td>手机号 / 邮箱</td></tr><tr><td><code>avatar</code></td><td>VARCHAR(255)</td><td>用户头像</td></tr><tr><td><code>status</code></td><td>INT</td><td>状态:1-正常 2-禁用</td></tr><tr><td><code>dept_id</code> / <code>level_id</code> / <code>position_id</code></td><td>INT</td><td>部门 / 职级 / 岗位 ID</td></tr><tr><td><code>province_code</code> / <code>city_code</code> / <code>district_code</code> / <code>street_code</code></td><td>VARCHAR(30)</td><td>省市县街道编码</td></tr><tr><td><code>city_info</code></td><td>VARCHAR(255)</td><td>省市区信息拼接</td></tr><tr><td><code>address</code></td><td>VARCHAR(255)</td><td>详细地址</td></tr><tr><td><code>intro</code> / <code>note</code></td><td>VARCHAR(255)</td><td>个人简介 / 备注</td></tr><tr><td><code>sort</code></td><td>INT</td><td>排序</td></tr><tr><td><code>is_delete</code> + 四个审计字段</td><td></td><td>公共字段</td></tr></tbody></table><p><strong>唯一索引(与软删除协同):</strong></p><div class="language-sql vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sql</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UNIQUE</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> uk_tenant_username (tenant_id, username, is_delete)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UNIQUE</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> uk_tenant_mobile (tenant_id, mobile, is_delete)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UNIQUE</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> uk_tenant_code (tenant_id, code, is_delete)</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">为什么唯一索引含 is_delete?</p><p>软删除的用户 <code>is_delete=1</code> 仍占唯一索引——把 <code>is_delete</code> 纳入联合唯一后,同名账号删除后可重新注册(新记录 <code>is_delete=0</code> 不与已删记录冲突),同时保证<strong>同租户内未删数据</strong>用户名唯一。业务层的 <code>uniqueFields</code> 校验与数据库索引双保险。</p></div><h3 id="laravel-role-角色表-" tabindex="-1">laravel_role(角色表) <a class="header-anchor" href="#laravel-role-角色表-" aria-label="Permalink to "laravel_role(角色表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>name</code></td><td>VARCHAR(50)</td><td>角色名称</td></tr><tr><td><code>code</code></td><td>VARCHAR(50)</td><td>角色编码</td></tr><tr><td><code>tenant_id</code></td><td>INT</td><td>租户 ID(角色按租户隔离)</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态</td></tr><tr><td><code>remark</code> / <code>sort</code></td><td></td><td>备注 / 排序</td></tr></tbody></table><h3 id="laravel-menu-菜单-权限表-" tabindex="-1">laravel_menu(菜单/权限表) <a class="header-anchor" href="#laravel-menu-菜单-权限表-" aria-label="Permalink to "laravel_menu(菜单/权限表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>parent_id</code></td><td>INT</td><td>父级 ID(0=顶级)</td></tr><tr><td><code>name</code></td><td>VARCHAR(50)</td><td>菜单名称</td></tr><tr><td><code>permission</code></td><td>VARCHAR(100)</td><td>权限标识(如 <code>sys:user:add</code>,<strong>菜单即权限</strong>)</td></tr><tr><td><code>type</code></td><td>TINYINT</td><td>类型:0=菜单/目录(可导航) 1=权限节点</td></tr><tr><td><code>path</code></td><td>VARCHAR(200)</td><td>路由路径</td></tr><tr><td><code>icon</code></td><td>VARCHAR(100)</td><td>图标</td></tr><tr><td><code>sort</code> / <code>status</code> / <code>remark</code></td><td></td><td>排序 / 状态 / 备注</td></tr></tbody></table><h3 id="laravel-tenant-租户表-" tabindex="-1">laravel_tenant(租户表) <a class="header-anchor" href="#laravel-tenant-租户表-" aria-label="Permalink to "laravel_tenant(租户表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>name</code></td><td>VARCHAR(100)</td><td>租户名称</td></tr><tr><td><code>code</code></td><td>VARCHAR(50)</td><td>租户编码(系统自动生成)</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态(字典 tenant_status):0=禁用 1=启用</td></tr><tr><td><code>expire_time</code></td><td>DATETIME</td><td>过期时间(ResolveTenant 中间件校验)</td></tr><tr><td><code>max_user_num</code></td><td>INT</td><td>最大用户数限制</td></tr><tr><td><code>contact_name</code> / <code>contact_phone</code></td><td></td><td>联系人 / 联系电话</td></tr></tbody></table><h3 id="laravel-article-文章表-" tabindex="-1">laravel_article(文章表) <a class="header-anchor" href="#laravel-article-文章表-" aria-label="Permalink to "laravel_article(文章表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>title</code></td><td>VARCHAR(200)</td><td>标题</td></tr><tr><td><code>category_id</code></td><td>INT</td><td>分类 ID</td></tr><tr><td><code>cover</code></td><td>VARCHAR(500)</td><td>封面图路径</td></tr><tr><td><code>content</code></td><td>TEXT</td><td>内容(富文本,含 <code>[IMG_URL]</code> 占位符)</td></tr><tr><td><code>author</code></td><td>VARCHAR(50)</td><td>作者</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态(字典 article_status)</td></tr><tr><td><code>sort</code></td><td>INT</td><td>排序</td></tr><tr><td><code>tenant_id</code></td><td>INT</td><td>租户 ID</td></tr></tbody></table><h2 id="索引策略" tabindex="-1">索引策略 <a class="header-anchor" href="#索引策略" aria-label="Permalink to "索引策略""></a></h2><h3 id="推荐索引" tabindex="-1">推荐索引 <a class="header-anchor" href="#推荐索引" aria-label="Permalink to "推荐索引""></a></h3><div class="language-sql vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sql</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 用户表:高频查询字段(联合唯一索引见上文)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_tenant_id (tenant_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_dept_id (dept_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_status (</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">status</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 角色关联表:外键索引</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_user_role </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_user_id (user_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_user_role </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_role_id (role_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_role_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_role_id (role_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_role_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_menu_id (menu_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 文章表:常用过滤字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_category_id (category_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_status (</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">status</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_tenant_id (tenant_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 日志表:按时间查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_login_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_create_time (create_time);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_operation_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_create_time (create_time);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_job_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_job_id (job_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 菜单表:树形查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_parent_id (parent_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 字典项表:按字典 ID 查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_dict_item </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_dict_id (dict_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_config_item </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_config_id (config_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 城市表:按编码查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_city </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_area_code (area_code);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> laravel_city </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_parent_code (parent_code);</span></span></code></pre></div><h3 id="索引设计原则" tabindex="-1">索引设计原则 <a class="header-anchor" href="#索引设计原则" aria-label="Permalink to "索引设计原则""></a></h3><table tabindex="0"><thead><tr><th>原则</th><th>说明</th></tr></thead><tbody><tr><td>外键必加</td><td>所有 <code>_id</code> 外键字段都应加索引</td></tr><tr><td>过滤字段</td><td><code>pageEqFields</code> 中配置的精确匹配字段应加索引</td></tr><tr><td>模糊搜索</td><td><code>pageLikeFields</code> 中的字段可考虑全文索引,但 <code>LIKE '%xx%'</code> 无法用普通索引</td></tr><tr><td>排序字段</td><td><code>pageOrderBy</code> 中的默认排序字段可加索引</td></tr><tr><td>时间字段</td><td>日志表的 <code>create_time</code> 必加索引(按时间范围查询)</td></tr><tr><td>联合唯一</td><td>软删除表的唯一约束必须含 <code>is_delete</code>(见上文)</td></tr></tbody></table><h2 id="多数据库支持" tabindex="-1">多数据库支持 <a class="header-anchor" href="#多数据库支持" aria-label="Permalink to "多数据库支持""></a></h2><h3 id="支持的数据库" tabindex="-1">支持的数据库 <a class="header-anchor" href="#支持的数据库" aria-label="Permalink to "支持的数据库""></a></h3><table tabindex="0"><thead><tr><th>数据库</th><th><code>DB_CONNECTION</code> 值</th><th>默认端口</th><th>PHP 扩展</th></tr></thead><tbody><tr><td>MySQL</td><td><code>mysql</code></td><td>3306</td><td><code>pdo_mysql</code></td></tr><tr><td>PostgreSQL</td><td><code>pgsql</code></td><td>5432</td><td><code>pdo_pgsql</code></td></tr><tr><td>SQL Server</td><td><code>sqlsrv</code></td><td>1433</td><td><code>pdo_sqlsrv</code></td></tr><tr><td>Oracle</td><td><code>oracle</code></td><td>1521</td><td><code>pdo_oci</code>(自定义 oci 驱动接入)</td></tr><tr><td>SQLite</td><td><code>sqlite</code></td><td>-</td><td><code>pdo_sqlite</code></td></tr></tbody></table><h3 id="切换数据库" tabindex="-1">切换数据库 <a class="header-anchor" href="#切换数据库" aria-label="Permalink to "切换数据库""></a></h3><p>只需修改 <code>.env</code> 文件,无需改动任何代码:</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-EieVJ" id="tab-Gr8PYo7" checked><label for="tab-Gr8PYo7">MySQL(默认)</label><input type="radio" name="group-EieVJ" id="tab-6z5fdNt"><label for="tab-6z5fdNt">PostgreSQL</label><input type="radio" name="group-EieVJ" id="tab-8Me-kq9"><label for="tab-8Me-kq9">SQL Server</label><input type="radio" name="group-EieVJ" id="tab-CGyr6kp"><label for="tab-CGyr6kp">Oracle</label><input type="radio" name="group-EieVJ" id="tab-HPsyAGF"><label for="tab-HPsyAGF">SQLite</label></div><div class="blocks"><div class="language-ini vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">3306</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.naivevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">pgsql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">5432</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.naivevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">postgres</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">sqlsrv</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">1433</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.naivevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">sa</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">oracle</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_HOST</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">1521</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">rxthinkcmf.laravel13.naivevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_CONNECTION</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">sqlite</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DB_DATABASE 指向 database/database.sqlite(默认值)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DB_PREFIX</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">=</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">laravel_</span></span></code></pre></div></div></div><h3 id="配置文件结构" tabindex="-1">配置文件结构 <a class="header-anchor" href="#配置文件结构" aria-label="Permalink to "配置文件结构""></a></h3><div class="language-php vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">php</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// config/database.php</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">return</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">default</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">DB_CONNECTION</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">mysql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">connections</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">sqlite</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">mysql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">pgsql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">sqlsrv</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">oracle</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 自定义 oci 驱动(AppServiceProvider 注册 DB::extend)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">Oracle 接入说明</p><p>Laravel 核心不内置 Oracle 连接器,项目通过 <code>AppServiceProvider</code> 中 <code>DB::extend('oci', ...)</code> 注册自定义驱动,配套 <code>App\Support\Database\{OracleConnection, OracleGrammar, OracleProcessor}</code> 完成分页语法与自增主键回填适配。切换前需安装 <code>pdo_oci</code> 扩展(见 <a href="/zh/quickstart/environment.html">2.1 开发环境准备</a>)。</p></div><h3 id="字段类型映射" tabindex="-1">字段类型映射 <a class="header-anchor" href="#字段类型映射" aria-label="Permalink to "字段类型映射""></a></h3><table tabindex="0"><thead><tr><th>通用类型</th><th>MySQL</th><th>PostgreSQL</th><th>SQL Server</th><th>Oracle</th><th>SQLite</th></tr></thead><tbody><tr><td>自增主键</td><td><code>INT AUTO_INCREMENT</code></td><td><code>SERIAL</code></td><td><code>INT IDENTITY</code></td><td><code>NUMBER</code> + 序列/触发器</td><td><code>INTEGER PRIMARY KEY</code></td></tr><tr><td>字符串</td><td><code>VARCHAR(n)</code></td><td><code>VARCHAR(n)</code></td><td><code>NVARCHAR(n)</code></td><td><code>VARCHAR2(n)</code></td><td><code>TEXT</code></td></tr><tr><td>文本</td><td><code>TEXT</code></td><td><code>TEXT</code></td><td><code>NVARCHAR(MAX)</code></td><td><code>CLOB</code></td><td><code>TEXT</code></td></tr><tr><td>布尔</td><td><code>TINYINT(1)</code></td><td><code>BOOLEAN</code></td><td><code>BIT</code></td><td><code>NUMBER(1)</code></td><td><code>INTEGER</code></td></tr><tr><td>日期时间</td><td><code>DATETIME</code></td><td><code>TIMESTAMP</code></td><td><code>DATETIME2</code></td><td><code>TIMESTAMP</code></td><td><code>TEXT</code></td></tr><tr><td>小数</td><td><code>DECIMAL(m,n)</code></td><td><code>NUMERIC(m,n)</code></td><td><code>DECIMAL(m,n)</code></td><td><code>NUMBER(m,n)</code></td><td><code>REAL</code></td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">业务代码零修改</p><p>Eloquent 的方言层自动处理大部分 SQL 差异,切换数据库只需修改 <code>.env</code> 中的 <code>DB_CONNECTION</code>,业务代码无需任何修改。跨库 DDL 由 <code>DbSchemaBuilder</code> 按驱动生成(Oracle 自增序列与触发器自动创建)。</p></div><h3 id="各数据库安装" tabindex="-1">各数据库安装 <a class="header-anchor" href="#各数据库安装" aria-label="Permalink to "各数据库安装""></a></h3><p>数据库的安装与初始化步骤已在 <a href="/zh/quickstart/environment.html">2.1 开发环境准备</a>(含四平台安装命令、扩展启用、Oracle Instant Client)与 <a href="/zh/quickstart/database-init.html">2.5 数据库初始化</a>(建库、脚本导入、<code>.env</code> 配置)中完整说明,此处不再重复。</p><h2 id="SQL-脚本" tabindex="-1">SQL 脚本 <a class="header-anchor" href="#SQL-脚本" aria-label="Permalink to "SQL 脚本""></a></h2><p>项目为每种数据库提供了独立的 SQL 脚本,存放在 <code>document/</code> 目录下按数据库类型分组:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>document/</span></span>
|
||
<span class="line"><span>├── mysql/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.laravel13.naivevue.sql # MySQL 版本</span></span>
|
||
<span class="line"><span>├── postgresql/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.laravel13.naivevue.sql # PostgreSQL 版本</span></span>
|
||
<span class="line"><span>├── sqlserver/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.laravel13.naivevue.sql # SQL Server 版本</span></span>
|
||
<span class="line"><span>├── oracle/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.laravel13.naivevue.sql # Oracle 版本</span></span>
|
||
<span class="line"><span>└── sqlite/</span></span>
|
||
<span class="line"><span> └── rxthinkcmf.laravel13.naivevue.sql # SQLite 版本</span></span></code></pre></div><p>各数据库脚本包含完整的表结构定义和初始数据(用户、角色、菜单、字典、城市行政区划等),已针对各数据库的 SQL 语法做了适配,可直接导入使用。</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>本项目 <code>database/migrations/</code> 为空,<strong>建表以 SQL 脚本为准</strong>,<code>php artisan migrate</code> 不会创建业务表。导入方法详见 <a href="/zh/quickstart/database-init.html">2.5 数据库初始化</a>。</p></div><h2 id="慢查询排查" tabindex="-1">慢查询排查 <a class="header-anchor" href="#慢查询排查" aria-label="Permalink to "慢查询排查""></a></h2><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># MySQL my.cnf / my.ini</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">slow_query_log</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">slow_query_log_file</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /var/log/mysql/slow.log</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">long_query_time</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 2</span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">注意</p><p>项目所有查询都通过 Eloquent 查询构建器构建(参数绑定),不会出现原生 SQL 注入。如需排查慢查询,建议开启数据库慢查询日志,而非在代码层面埋点;同时核对 <a href="#索引策略">索引策略</a> 中的推荐索引是否缺失。</p></div></div></div></main><footer class="VPDocFooter" data-v-b97a2373 data-v-11181de8><!--[--><!--]--><div class="edit-info" data-v-11181de8><div class="edit-link" data-v-11181de8><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue" target="_blank" rel="noreferrer" data-v-11181de8><!--[--><span class="vpi-square-pen edit-link-icon" data-v-11181de8></span> 对本页提出修改建议<!--]--></a></div><!----></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-11181de8><span class="visually-hidden" id="doc-footer-aria-label" data-v-11181de8>Pager</span><div class="pager" data-v-11181de8><a class="VPLink link pager-link prev" href="/zh/architecture/cache.html" data-v-11181de8><!--[--><span class="desc" data-v-11181de8>上一页</span><span class="title" data-v-11181de8>4.8 缓存架构设计</span><!--]--></a></div><div class="pager" data-v-11181de8><a class="VPLink link pager-link next" href="/zh/architecture/security.html" data-v-11181de8><!--[--><span class="desc" data-v-11181de8>下一页</span><span class="title" data-v-11181de8>4.10 安全架构设计</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-4dae6186 data-v-04f60575><div class="container" data-v-04f60575><p class="message" data-v-04f60575>小蚂蚁云团队 · 提供技术支持</p><p class="copyright" data-v-04f60575>Copyright © 2018~2026 www.rxthink.cn. All rights reserved.</p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"claude.md\":\"CmwsTUDV\",\"index.md\":\"BfVev3oF\",\"readme.md\":\"C09rhUuk\",\"zh_api-spec_dict-api.md\":\"DDWerLVj\",\"zh_api-spec_error-code.md\":\"BaMdlFcG\",\"zh_api-spec_overview.md\":\"CJmp0iBV\",\"zh_api-spec_pagination.md\":\"CD3kk-p4\",\"zh_api-spec_response.md\":\"BR1SH64U\",\"zh_api-spec_token.md\":\"C8eA4flk\",\"zh_api-spec_upload.md\":\"tTgjlj7M\",\"zh_appendix_api-cheatsheet.md\":\"DCWbgKhm\",\"zh_appendix_commands.md\":\"BMuJZ489\",\"zh_appendix_components.md\":\"C4NOE5Ox\",\"zh_appendix_config-reference.md\":\"nnJb-uYE\",\"zh_appendix_database-tables.md\":\"DQRRHJAO\",\"zh_appendix_enums.md\":\"CHa54FfU\",\"zh_appendix_faq.md\":\"FINi6NjZ\",\"zh_appendix_functions.md\":\"DRlatkVI\",\"zh_appendix_glossary.md\":\"CYHL2mf_\",\"zh_appendix_middleware.md\":\"DaJw1rqi\",\"zh_appendix_stores.md\":\"WakVjBl-\",\"zh_architecture_backend-layer.md\":\"DL6NIOvW\",\"zh_architecture_base-classes.md\":\"BjZtEl_g\",\"zh_architecture_cache.md\":\"CeiGf4J5\",\"zh_architecture_cross-cutting.md\":\"DxOn90lE\",\"zh_architecture_database-design.md\":\"CvsADRAM\",\"zh_architecture_directory-design.md\":\"BdWF79zf\",\"zh_architecture_extensibility.md\":\"BdkIodwA\",\"zh_architecture_frontend-layer.md\":\"BTb5fo1h\",\"zh_architecture_overview.md\":\"DcE5KaMd\",\"zh_architecture_request-flow.md\":\"BCm7FLJF\",\"zh_architecture_security.md\":\"zD5PJKA2\",\"zh_changelog.md\":\"DStIxD4p\",\"zh_core_attributes.md\":\"Dxf-Lk5K\",\"zh_core_auth-flow.md\":\"CsyHMQGW\",\"zh_core_captcha.md\":\"QMW9xc-p\",\"zh_core_config.md\":\"B81O9WZO\",\"zh_core_cors.md\":\"ByOJcf5i\",\"zh_core_data-scope.md\":\"BqyY0NV-\",\"zh_core_demo-mode.md\":\"C0wamQs1\",\"zh_core_dict-guide.md\":\"CZXiT8Ag\",\"zh_core_dict.md\":\"BaqYSD1C\",\"zh_core_exception.md\":\"CrxM2cX-\",\"zh_core_jwt.md\":\"DgQb75oj\",\"zh_core_login-log.md\":\"DG154zhF\",\"zh_core_operation-log.md\":\"RQ85qwMA\",\"zh_core_param.md\":\"Bvhk-7TM\",\"zh_core_password.md\":\"BntXAdZB\",\"zh_core_rbac.md\":\"DijWsyoz\",\"zh_core_tenant.md\":\"K6ScUaAh\",\"zh_course.md\":\"CCEPzzlU\",\"zh_deploy_backend.md\":\"Cdzc4Bc1\",\"zh_deploy_backup.md\":\"DtITKH9r\",\"zh_deploy_checklist.md\":\"CQKt9KGj\",\"zh_deploy_ci-cd.md\":\"FFit-2qd\",\"zh_deploy_db-migrate.md\":\"D93GA9lH\",\"zh_deploy_docker.md\":\"D8Put12h\",\"zh_deploy_env-plan.md\":\"BNyeiZJf\",\"zh_deploy_frontend.md\":\"DKRH-5WD\",\"zh_deploy_performance.md\":\"Hn728dgB\",\"zh_deploy_security.md\":\"kihNF0uU\",\"zh_deploy_troubleshooting.md\":\"CJckLTaA\",\"zh_directory.md\":\"Dhamxx49\",\"zh_frontend_api-module.md\":\"CIo8WV2b\",\"zh_frontend_directory.md\":\"CDZ_NJnc\",\"zh_frontend_display-components.md\":\"6yamzql6\",\"zh_frontend_env-config.md\":\"Du5rmWen\",\"zh_frontend_excel-components.md\":\"s0ZizcdL\",\"zh_frontend_form-components.md\":\"CU5GmwCD\",\"zh_frontend_http.md\":\"DGhTiM86\",\"zh_frontend_layout.md\":\"C-xPG49T\",\"zh_frontend_login.md\":\"Cd03yqgJ\",\"zh_frontend_new-page.md\":\"Cmgik6NI\",\"zh_frontend_overview.md\":\"CsNqve6R\",\"zh_frontend_permission.md\":\"Dt7SbNpk\",\"zh_frontend_router.md\":\"Cb4WtU8g\",\"zh_frontend_store.md\":\"tGoYqIu8\",\"zh_frontend_style.md\":\"B0z_IP3L\",\"zh_frontend_utils.md\":\"COeAcmls\",\"zh_generator_cli.md\":\"BoDYsLF2\",\"zh_generator_code-engine.md\":\"DhDRl6aA\",\"zh_generator_config.md\":\"CW46mVW7\",\"zh_generator_demo.md\":\"BYHkGExa\",\"zh_generator_faq.md\":\"Bm5s34Ny\",\"zh_generator_overview.md\":\"BgPKwBEK\",\"zh_generator_parser.md\":\"UvQUB6Et\",\"zh_generator_templates.md\":\"AWt_lQ8w\",\"zh_generator_web-ui.md\":\"nMpjMNvK\",\"zh_guide_code-list.md\":\"CHhHtuIC\",\"zh_guide_controller.md\":\"BE9fZ12j\",\"zh_guide_database.md\":\"DAp8OT-x\",\"zh_guide_faq.md\":\"Bicj0pYB\",\"zh_guide_frontend-integration.md\":\"CBn2lKMC\",\"zh_guide_logic.md\":\"B76W2jcR\",\"zh_guide_model.md\":\"fgvcrXBy\",\"zh_guide_overview.md\":\"64HA48-e\",\"zh_guide_permission.md\":\"Bxxf1oIM\",\"zh_guide_route.md\":\"B9RFEXKZ\",\"zh_guide_validator.md\":\"C9bhgaRm\",\"zh_introduction.md\":\"eNRcdTBB\",\"zh_modules_article.md\":\"LPeUWzyJ\",\"zh_modules_category.md\":\"CNvSXO3h\",\"zh_modules_city.md\":\"CqNkAo1M\",\"zh_modules_content.md\":\"DsOkYZvD\",\"zh_modules_dept.md\":\"DjZqLPgi\",\"zh_modules_filetemplate.md\":\"DPH2nwER\",\"zh_modules_index.md\":\"aaATpoxP\",\"zh_modules_job.md\":\"DK6NCL1O\",\"zh_modules_level.md\":\"BZJvkqI9\",\"zh_modules_menu.md\":\"CBUBhsFY\",\"zh_modules_param.md\":\"Dg7bhSTv\",\"zh_modules_position.md\":\"D9rqZcZh\",\"zh_modules_role.md\":\"D2hQwyXY\",\"zh_modules_tenant.md\":\"CHKESGQX\",\"zh_modules_user.md\":\"CFLGMMZk\",\"zh_other_contributing.md\":\"4xlKv8BB\",\"zh_other_declare.md\":\"DHuZ7YkB\",\"zh_other_sponsor.md\":\"CMHRySP4\",\"zh_quickstart_backend-start.md\":\"CLJGSOAE\",\"zh_quickstart_database-init.md\":\"DAesTSl_\",\"zh_quickstart_docker.md\":\"DvE63qVu\",\"zh_quickstart_env-vars.md\":\"D2Miq5_X\",\"zh_quickstart_environment.md\":\"Ci1mzkEy\",\"zh_quickstart_faq.md\":\"CY12C6Ut\",\"zh_quickstart_first-api.md\":\"D8Q3WCqA\",\"zh_quickstart_frontend-start.md\":\"CmeeXuh1\",\"zh_quickstart_laragon.md\":\"jlt-NXUN\",\"zh_standards_api-response.md\":\"B0t-HsZ0\",\"zh_standards_backend-code.md\":\"CjaDe9TZ\",\"zh_standards_code-review.md\":\"DdUiyZfB\",\"zh_standards_deletion.md\":\"DL7wC1_i\",\"zh_standards_frontend-code.md\":\"Cffga4H9\",\"zh_standards_git.md\":\"a4ticXht\",\"zh_standards_pagination.md\":\"JDydSfsf\",\"zh_tech-stack.md\":\"CMuUu74U\",\"zh_tools_db-migrate.md\":\"BgZKYDUU\",\"zh_tools_excel.md\":\"pIKYeP9z\",\"zh_tools_file-components.md\":\"N8x8FmPa\",\"zh_tools_rich-text.md\":\"D12kT3xb\",\"zh_tools_upload-config.md\":\"CZsUkg1z\",\"zh_tools_upload.md\":\"CTM3IUUL\",\"zh_why.md\":\"CxzKxklC\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"小蚂蚁云\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"light\",\"themeConfig\":{\"logo\":\"/logo.svg\",\"outline\":[2,3],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue\"}],\"footer\":{\"copyright\":\"Copyright © 2018~2026 www.rxthink.cn. All rights reserved.\",\"message\":\"小蚂蚁云团队 · 提供技术支持\"},\"editLink\":{\"pattern\":\"https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue\",\"text\":\"对本页提出修改建议\"},\"search\":{\"provider\":\"local\"}},\"locales\":{\"root\":{\"label\":\"简体中文\",\"lang\":\"zh-CN\",\"link\":\"/\",\"description\":\"RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI\",\"head\":[[\"meta\",{\"property\":\"og:url\",\"content\":\"https://www.rxthink.cn\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI\"}],[\"meta\",{\"property\":\"twitter:url\",\"content\":\"https://www.rxthink.cn\"}],[\"meta\",{\"property\":\"twitter:title\",\"content\":\"RXThinkCMF Laravel13+NaiveUI 开发文档\"}],[\"meta\",{\"property\":\"twitter:description\",\"content\":\"RXThinkCMF 企业级前后端分离后台管理系统 - Laravel 13 + Vue3 + NaiveUI\"}],[\"script\",{},\"\\n var _hmt = _hmt || [];\\n (function() {\\n var hm = document.createElement(\\\"script\\\");\\n hm.src = \\\"https://hm.baidu.com/hm.js?4f06f01017cdd5c1a95a58a6787f4d10\\\";\\n var s = document.getElementsByTagName(\\\"script\\\")[0];\\n s.parentNode.insertBefore(hm, s);\\n })();\\n \"]],\"themeConfig\":{\"editLink\":{\"pattern\":\"https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue\",\"text\":\"对本页提出修改建议\"},\"outline\":{\"label\":\"本页内容\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"官网\",\"link\":\"https://www.rxthink.cn\"},{\"text\":\"授权\",\"link\":\"https://www.rxthink.cn/goods/detail/2\"},{\"text\":\"部署文档\",\"items\":[{\"text\":\"RXThinkCMF混编版ThinkPHP6+Layui版本\",\"link\":\"http://docs.thinkphp6.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本\",\"link\":\"http://docs.thinkphp6.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+AntDesign版本\",\"link\":\"http://docs.thinkphp6.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本\",\"link\":\"http://docs.thinkphp6.naivevue.rxthink.cn\"},{\"text\":\"RXThinkCMF混编版ThinkPHP8+Layui版本\",\"link\":\"http://docs.thinkphp8.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本\",\"link\":\"http://docs.thinkphp8.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+AntDesign版本\",\"link\":\"http://docs.thinkphp8.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本\",\"link\":\"http://docs.thinkphp8.naivevue.rxthink.cn\"},{\"text\":\"RXThinkCMF混编版Laravel13+Layui版本\",\"link\":\"http://docs.laravel13.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+ElementPlus版本\",\"link\":\"http://docs.laravel13.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+AntDesign版本\",\"link\":\"http://docs.laravel13.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+NaiveUI版本\",\"link\":\"http://docs.laravel13.naivevue.rxthink.cn\"}]},{\"text\":\"在线演示\",\"items\":[{\"text\":\"RXThinkCMF混编版ThinkPHP6+Layui版本\",\"link\":\"http://manage.thinkphp6.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+ElementPlus版本\",\"link\":\"http://manage.thinkphp6.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+AntDesign版本\",\"link\":\"http://manage.thinkphp6.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP6+NaiveUI版本\",\"link\":\"http://manage.thinkphp6.naivevue.rxthink.cn\"},{\"text\":\"RXThinkCMF混编版ThinkPHP8+Layui版本\",\"link\":\"http://manage.thinkphp8.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+ElementPlus版本\",\"link\":\"http://manage.thinkphp8.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+AntDesign版本\",\"link\":\"http://manage.thinkphp8.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离ThinkPHP8+NaiveUI版本\",\"link\":\"http://manage.thinkphp8.naivevue.rxthink.cn\"},{\"text\":\"RXThinkCMF混编版Laravel13+Layui版本\",\"link\":\"http://manage.laravel13.layui.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+ElementPlus版本\",\"link\":\"http://manage.laravel13.elevue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+AntDesign版本\",\"link\":\"http://manage.laravel13.antdvue.rxthink.cn\"},{\"text\":\"RXThinkCMF前后端分离Laravel13+NaiveUI版本\",\"link\":\"http://manage.laravel13.naivevue.rxthink.cn\"}]},{\"text\":\"广告赞助\",\"link\":\"/zh/other/sponsor.html\"},{\"text\":\"相关链接\",\"items\":[{\"text\":\"官方网站\",\"link\":\"https://www.rxthink.cn\"},{\"text\":\"Gitee 仓库\",\"link\":\"https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue\"},{\"text\":\"Laravel 官网\",\"link\":\"https://laravel.com/\"},{\"text\":\"Vue3 文档\",\"link\":\"https://cn.vuejs.org/\"},{\"text\":\"NaiveUI\",\"link\":\"https://www.naiveui.com/\"}]}],\"sidebar\":{\"/zh/\":[{\"text\":\"📖 1. 了解项目\",\"collapsed\":false,\"items\":[{\"text\":\"1.1 项目介绍\",\"link\":\"/zh/introduction.html\"},{\"text\":\"1.2 为什么选择我们\",\"link\":\"/zh/why.html\"},{\"text\":\"1.3 项目目录结构\",\"link\":\"/zh/directory.html\"},{\"text\":\"1.4 新手入门指南\",\"link\":\"/zh/course.html\"},{\"text\":\"1.5 技术栈说明\",\"link\":\"/zh/tech-stack.html\"},{\"text\":\"1.6 更新日志\",\"link\":\"/zh/changelog.html\"}]},{\"text\":\"🚀 2. 快速入门\",\"collapsed\":false,\"items\":[{\"text\":\"2.1 开发环境准备\",\"link\":\"/zh/quickstart/environment.html\"},{\"text\":\"2.2 Laragon 环境搭建\",\"link\":\"/zh/quickstart/laragon.html\"},{\"text\":\"2.3 后端服务启动\",\"link\":\"/zh/quickstart/backend-start.html\"},{\"text\":\"2.4 前端服务启动\",\"link\":\"/zh/quickstart/frontend-start.html\"},{\"text\":\"2.5 数据库初始化\",\"link\":\"/zh/quickstart/database-init.html\"},{\"text\":\"2.6 环境变量配置\",\"link\":\"/zh/quickstart/env-vars.html\"},{\"text\":\"2.7 第一个接口调试\",\"link\":\"/zh/quickstart/first-api.html\"},{\"text\":\"2.8 Docker 快速体验\",\"link\":\"/zh/quickstart/docker.html\"},{\"text\":\"2.9 常见问题 FAQ\",\"link\":\"/zh/quickstart/faq.html\"}]},{\"text\":\"🧪 3. 模块开发实战\",\"collapsed\":false,\"items\":[{\"text\":\"3.1 概述与目标\",\"link\":\"/zh/guide/overview.html\"},{\"text\":\"3.2 数据库建表\",\"link\":\"/zh/guide/database.html\"},{\"text\":\"3.3 模型层开发\",\"link\":\"/zh/guide/model.html\"},{\"text\":\"3.4 FormRequest 验证器\",\"link\":\"/zh/guide/validator.html\"},{\"text\":\"3.5 Service 层开发\",\"link\":\"/zh/guide/logic.html\"},{\"text\":\"3.6 控制器开发\",\"link\":\"/zh/guide/controller.html\"},{\"text\":\"3.7 路由注册\",\"link\":\"/zh/guide/route.html\"},{\"text\":\"3.8 权限节点配置\",\"link\":\"/zh/guide/permission.html\"},{\"text\":\"3.9 前端联调指引\",\"link\":\"/zh/guide/frontend-integration.html\"},{\"text\":\"3.10 完整代码清单\",\"link\":\"/zh/guide/code-list.html\"},{\"text\":\"3.11 常见问题与排错\",\"link\":\"/zh/guide/faq.html\"}]},{\"text\":\"🏛️ 4. 架构设计\",\"collapsed\":false,\"items\":[{\"text\":\"4.1 整体架构概览\",\"link\":\"/zh/architecture/overview.html\"},{\"text\":\"4.2 请求处理链路\",\"link\":\"/zh/architecture/request-flow.html\"},{\"text\":\"4.3 后端分层架构\",\"link\":\"/zh/architecture/backend-layer.html\"},{\"text\":\"4.4 前端分层架构\",\"link\":\"/zh/architecture/frontend-layer.html\"},{\"text\":\"4.5 目录结构设计\",\"link\":\"/zh/architecture/directory-design.html\"},{\"text\":\"4.6 核心基类体系\",\"link\":\"/zh/architecture/base-classes.html\"},{\"text\":\"4.7 横切机制\",\"link\":\"/zh/architecture/cross-cutting.html\"},{\"text\":\"4.8 缓存架构设计\",\"link\":\"/zh/architecture/cache.html\"},{\"text\":\"4.9 数据库设计\",\"link\":\"/zh/architecture/database-design.html\"},{\"text\":\"4.10 安全架构设计\",\"link\":\"/zh/architecture/security.html\"},{\"text\":\"4.11 扩展性设计\",\"link\":\"/zh/architecture/extensibility.html\"}]},{\"text\":\"🔐 5. 核心功能\",\"collapsed\":false,\"items\":[{\"text\":\"认证与安全\",\"collapsed\":false,\"items\":[{\"text\":\"5.1 用户认证(JWT)\",\"link\":\"/zh/core/jwt.html\"},{\"text\":\"5.2 认证流程实战\",\"link\":\"/zh/core/auth-flow.html\"},{\"text\":\"5.3 验证码机制\",\"link\":\"/zh/core/captcha.html\"},{\"text\":\"5.4 权限管理(RBAC)\",\"link\":\"/zh/core/rbac.html\"},{\"text\":\"5.5 跨域资源共享\",\"link\":\"/zh/core/cors.html\"},{\"text\":\"5.6 密码加密服务\",\"link\":\"/zh/core/password.html\"},{\"text\":\"5.7 演示模式\",\"link\":\"/zh/core/demo-mode.html\"}]},{\"text\":\"数据与配置\",\"collapsed\":false,\"items\":[{\"text\":\"5.8 多租户隔离\",\"link\":\"/zh/core/tenant.html\"},{\"text\":\"5.9 数据权限\",\"link\":\"/zh/core/data-scope.html\"},{\"text\":\"5.10 字典模块\",\"link\":\"/zh/core/dict.html\"},{\"text\":\"5.11 字典配置与使用\",\"link\":\"/zh/core/dict-guide.html\"},{\"text\":\"5.12 系统配置管理\",\"link\":\"/zh/core/config.html\"},{\"text\":\"5.13 系统参数管理\",\"link\":\"/zh/core/param.html\"}]},{\"text\":\"日志与监控\",\"collapsed\":false,\"items\":[{\"text\":\"5.14 操作日志\",\"link\":\"/zh/core/operation-log.html\"},{\"text\":\"5.15 登录日志\",\"link\":\"/zh/core/login-log.html\"}]},{\"text\":\"响应与异常\",\"collapsed\":false,\"items\":[{\"text\":\"5.16 统一响应与异常抛出\",\"link\":\"/zh/core/exception.html\"}]},{\"text\":\"注解系统\",\"collapsed\":false,\"items\":[{\"text\":\"5.17 注解系统总览\",\"link\":\"/zh/core/attributes.html\"}]}]},{\"text\":\"📦 6. 业务模块\",\"collapsed\":false,\"items\":[{\"text\":\"6.1 用户管理\",\"link\":\"/zh/modules/user.html\"},{\"text\":\"6.2 角色管理\",\"link\":\"/zh/modules/role.html\"},{\"text\":\"6.3 菜单管理\",\"link\":\"/zh/modules/menu.html\"},{\"text\":\"6.4 部门管理\",\"link\":\"/zh/modules/dept.html\"},{\"text\":\"6.5 职级管理\",\"link\":\"/zh/modules/level.html\"},{\"text\":\"6.6 岗位管理\",\"link\":\"/zh/modules/position.html\"},{\"text\":\"6.7 文章管理\",\"link\":\"/zh/modules/article.html\"},{\"text\":\"6.8 公告与链接管理\",\"link\":\"/zh/modules/content.html\"},{\"text\":\"6.9 行政区划管理\",\"link\":\"/zh/modules/city.html\"},{\"text\":\"6.10 分类管理\",\"link\":\"/zh/modules/category.html\"},{\"text\":\"6.11 定时任务\",\"link\":\"/zh/modules/job.html\"},{\"text\":\"6.12 参数管理\",\"link\":\"/zh/modules/param.html\"},{\"text\":\"6.13 租户管理\",\"link\":\"/zh/modules/tenant.html\"},{\"text\":\"6.14 文件模板管理\",\"link\":\"/zh/modules/filetemplate.html\"},{\"text\":\"6.15 首页与个人中心\",\"link\":\"/zh/modules/index.html\"}]},{\"text\":\"🧰 7. 文件处理\",\"collapsed\":false,\"items\":[{\"text\":\"7.1 文件上传全流程\",\"link\":\"/zh/tools/upload.html\"},{\"text\":\"7.2 上传配置详解\",\"link\":\"/zh/tools/upload-config.html\"},{\"text\":\"7.3 富文本处理\",\"link\":\"/zh/tools/rich-text.html\"},{\"text\":\"7.4 数据导入导出\",\"link\":\"/zh/tools/excel.html\"},{\"text\":\"7.5 前端文件组件\",\"link\":\"/zh/tools/file-components.html\"},{\"text\":\"7.6 数据库迁移工具\",\"link\":\"/zh/tools/db-migrate.html\"}]},{\"text\":\"🔗 8. 接口规范与对接\",\"collapsed\":false,\"items\":[{\"text\":\"8.1 统一响应格式\",\"link\":\"/zh/api-spec/response.html\"},{\"text\":\"8.2 错误码对照表\",\"link\":\"/zh/api-spec/error-code.html\"},{\"text\":\"8.3 分页查询规范\",\"link\":\"/zh/api-spec/pagination.html\"},{\"text\":\"8.4 文件上传接口\",\"link\":\"/zh/api-spec/upload.html\"},{\"text\":\"8.5 字典数据接口\",\"link\":\"/zh/api-spec/dict-api.html\"},{\"text\":\"8.6 Token 使用说明\",\"link\":\"/zh/api-spec/token.html\"},{\"text\":\"8.7 API 接口总览\",\"link\":\"/zh/api-spec/overview.html\"}]},{\"text\":\"🖥️ 9. 前端开发\",\"collapsed\":false,\"items\":[{\"text\":\"工程基础\",\"collapsed\":false,\"items\":[{\"text\":\"9.1 前端工程概述\",\"link\":\"/zh/frontend/overview.html\"},{\"text\":\"9.2 目录结构详解\",\"link\":\"/zh/frontend/directory.html\"},{\"text\":\"9.3 环境与构建配置\",\"link\":\"/zh/frontend/env-config.html\"}]},{\"text\":\"核心机制\",\"collapsed\":false,\"items\":[{\"text\":\"9.4 HTTP 请求封装\",\"link\":\"/zh/frontend/http.html\"},{\"text\":\"9.5 路由与动态菜单\",\"link\":\"/zh/frontend/router.html\"},{\"text\":\"9.6 状态管理(Pinia)\",\"link\":\"/zh/frontend/store.html\"},{\"text\":\"9.7 权限控制\",\"link\":\"/zh/frontend/permission.html\"},{\"text\":\"9.8 登录流程\",\"link\":\"/zh/frontend/login.html\"}]},{\"text\":\"公共组件\",\"collapsed\":false,\"items\":[{\"text\":\"9.9 数据展示组件\",\"link\":\"/zh/frontend/display-components.html\"},{\"text\":\"9.10 数据录入组件\",\"link\":\"/zh/frontend/form-components.html\"},{\"text\":\"9.11 Excel 导入导出组件\",\"link\":\"/zh/frontend/excel-components.html\"}]},{\"text\":\"开发实践\",\"collapsed\":false,\"items\":[{\"text\":\"9.12 新增页面开发步骤\",\"link\":\"/zh/frontend/new-page.html\"},{\"text\":\"9.13 API 模块编写规范\",\"link\":\"/zh/frontend/api-module.html\"},{\"text\":\"9.14 样式与主题定制\",\"link\":\"/zh/frontend/style.html\"},{\"text\":\"9.15 布局系统\",\"link\":\"/zh/frontend/layout.html\"},{\"text\":\"9.16 工具函数\",\"link\":\"/zh/frontend/utils.html\"}]}]},{\"text\":\"🔧 10. 代码生成器\",\"collapsed\":false,\"items\":[{\"text\":\"10.1 概述与架构\",\"link\":\"/zh/generator/overview.html\"},{\"text\":\"10.2 CLI 命令行使用\",\"link\":\"/zh/generator/cli.html\"},{\"text\":\"10.3 Web 管理界面\",\"link\":\"/zh/generator/web-ui.html\"},{\"text\":\"10.4 表结构解析引擎\",\"link\":\"/zh/generator/parser.html\"},{\"text\":\"10.5 代码生成引擎\",\"link\":\"/zh/generator/code-engine.html\"},{\"text\":\"10.6 自定义模板开发\",\"link\":\"/zh/generator/templates.html\"},{\"text\":\"10.7 配置文件详解\",\"link\":\"/zh/generator/config.html\"},{\"text\":\"10.8 实战案例\",\"link\":\"/zh/generator/demo.html\"},{\"text\":\"10.9 常见问题\",\"link\":\"/zh/generator/faq.html\"}]},{\"text\":\"⚙️ 11. 运维部署\",\"collapsed\":false,\"items\":[{\"text\":\"11.1 部署 Checklist\",\"link\":\"/zh/deploy/checklist.html\"},{\"text\":\"11.2 环境规划\",\"link\":\"/zh/deploy/env-plan.html\"},{\"text\":\"11.3 数据库迁移\",\"link\":\"/zh/deploy/db-migrate.html\"},{\"text\":\"11.4 后端部署\",\"link\":\"/zh/deploy/backend.html\"},{\"text\":\"11.5 前端部署\",\"link\":\"/zh/deploy/frontend.html\"},{\"text\":\"11.6 Docker 生产部署\",\"link\":\"/zh/deploy/docker.html\"},{\"text\":\"11.7 性能调优\",\"link\":\"/zh/deploy/performance.html\"},{\"text\":\"11.8 安全加固清单\",\"link\":\"/zh/deploy/security.html\"},{\"text\":\"11.9 备份与恢复\",\"link\":\"/zh/deploy/backup.html\"},{\"text\":\"11.10 故障排查手册\",\"link\":\"/zh/deploy/troubleshooting.html\"},{\"text\":\"11.11 CI/CD 流水线\",\"link\":\"/zh/deploy/ci-cd.html\"}]},{\"text\":\"📋 12. 规范标准\",\"collapsed\":false,\"items\":[{\"text\":\"⭐ 必须遵守\",\"collapsed\":false,\"items\":[{\"text\":\"12.1 API 响应规范\",\"link\":\"/zh/standards/api-response.html\"},{\"text\":\"12.2 分页查询规范\",\"link\":\"/zh/standards/pagination.html\"},{\"text\":\"12.3 Git 提交规范\",\"link\":\"/zh/standards/git.html\"}]},{\"text\":\"📌 建议遵守\",\"collapsed\":false,\"items\":[{\"text\":\"12.4 数据删除规范\",\"link\":\"/zh/standards/deletion.html\"},{\"text\":\"12.5 代码审查清单\",\"link\":\"/zh/standards/code-review.html\"},{\"text\":\"12.6 后端编码规范\",\"link\":\"/zh/standards/backend-code.html\"},{\"text\":\"12.7 前端编码规范\",\"link\":\"/zh/standards/frontend-code.html\"}]}]},{\"text\":\"📄 附录\",\"collapsed\":false,\"items\":[{\"text\":\"A. 常见问题汇总\",\"link\":\"/zh/appendix/faq.html\"},{\"text\":\"B. 数据库表结构速查\",\"link\":\"/zh/appendix/database-tables.html\"},{\"text\":\"C. 配置项速查\",\"link\":\"/zh/appendix/config-reference.html\"},{\"text\":\"D. 公共函数速查\",\"link\":\"/zh/appendix/functions.html\"},{\"text\":\"E. API 接口速查表\",\"link\":\"/zh/appendix/api-cheatsheet.html\"},{\"text\":\"F. 中间件执行顺序\",\"link\":\"/zh/appendix/middleware.html\"},{\"text\":\"G. 前端组件速查\",\"link\":\"/zh/appendix/components.html\"},{\"text\":\"H. 前端 Store 速查\",\"link\":\"/zh/appendix/stores.html\"},{\"text\":\"I. 前端 Enums 速查\",\"link\":\"/zh/appendix/enums.html\"},{\"text\":\"J. 术语表\",\"link\":\"/zh/appendix/glossary.html\"},{\"text\":\"K. Artisan 命令速查\",\"link\":\"/zh/appendix/commands.html\"},{\"text\":\"L. 贡献指南\",\"link\":\"/zh/other/contributing.html\"},{\"text\":\"M. 免责声明\",\"link\":\"/zh/other/declare.html\"},{\"text\":\"N. 广告赞助\",\"link\":\"/zh/other/sponsor.html\"},{\"text\":\"O. 开源协议\",\"link\":\"https://gitee.com/rxthinkcmf/RXThinkCMF_Laravel13_NaiveVue\"}]}]}}}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||
|
||
</body>
|
||
</html> |