137 lines
170 KiB
HTML
137 lines
170 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>10.6 自定义模板开发 | 小蚂蚁云</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_generator_templates.md.AWt_lQ8w.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" 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 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>🔧 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_generator_templates" data-v-b97a2373><div><h1 id="_10-6-自定义模板开发" tabindex="-1">10.6 自定义模板开发 <a class="header-anchor" href="#_10-6-自定义模板开发" aria-label="Permalink to "10.6 自定义模板开发""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>代码生成器使用 PHP 原生模板引擎渲染代码,模板文件存放在 <code>resources/templates/</code> 目录下(由 <code>config/generator.php</code> 的 <code>template_dir</code> 配置)。修改模板即可自定义生成代码的格式。</p></div><h2 id="模板目录结构" tabindex="-1">模板目录结构 <a class="header-anchor" href="#模板目录结构" aria-label="Permalink to "模板目录结构""></a></h2><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>resources/templates/</span></span>
|
||
<span class="line"><span>├── controller.php.tpl # 控制器模板</span></span>
|
||
<span class="line"><span>├── service.php.tpl # 业务服务模板(含 serializeMaps、导入导出)</span></span>
|
||
<span class="line"><span>├── model.php.tpl # 模型模板</span></span>
|
||
<span class="line"><span>├── request.php.tpl # FormRequest 验证器模板</span></span>
|
||
<span class="line"><span>├── ui/ # 普通列表模板(6个前端文件)</span></span>
|
||
<span class="line"><span>│ ├── api.ts.tpl # API 接口模块模板</span></span>
|
||
<span class="line"><span>│ ├── index.vue.tpl # 列表页模板</span></span>
|
||
<span class="line"><span>│ ├── edit.vue.tpl # 编辑弹窗模板</span></span>
|
||
<span class="line"><span>│ ├── detail.vue.tpl # 详情弹窗模板</span></span>
|
||
<span class="line"><span>│ ├── columns.ts.tpl # 表格列配置模板</span></span>
|
||
<span class="line"><span>│ └── querySchemas.ts.tpl # 查询表单配置模板</span></span>
|
||
<span class="line"><span>└── ui2/ # 树形结构模板(4个前端文件)</span></span>
|
||
<span class="line"><span> ├── api.ts.tpl</span></span>
|
||
<span class="line"><span> ├── index.vue.tpl</span></span>
|
||
<span class="line"><span> ├── edit.vue.tpl</span></span>
|
||
<span class="line"><span> └── detail.vue.tpl</span></span></code></pre></div><p>后端 4 张模板的目标输出路径由 <code>config/generator.php</code> 的 <code>backend_outputs</code> 决定(<code>{ClassName}</code> 占位符替换为模型类名),前端输出路径由 <code>GeneratorLogic</code> 按 <code>app_name</code> 与模块名拼接。</p><h2 id="模板变量" tabindex="-1">模板变量 <a class="header-anchor" href="#模板变量" aria-label="Permalink to "模板变量""></a></h2><p>模板使用 PHP 原生语法,变量通过 <code>GeneratorService::buildTemplateVars()</code> 构建,渲染时通过 <code>extract($vars)</code> 注入。</p><h3 id="基础信息变量" tabindex="-1">基础信息变量 <a class="header-anchor" href="#基础信息变量" aria-label="Permalink to "基础信息变量""></a></h3><table tabindex="0"><thead><tr><th>变量</th><th>类型</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>$app_name</code></td><td>string</td><td>应用名(路由前缀、前端目录),读 <code>GENERATOR_APP_NAME</code></td><td><code>tool</code></td></tr><tr><td><code>$module_name</code></td><td>string</td><td>模块名(小写下划线,表名去前缀)</td><td><code>example</code></td></tr><tr><td><code>$module_comment</code></td><td>string</td><td>功能名称(表注释清洗后)</td><td><code>案例</code></td></tr><tr><td><code>$model_class_name</code></td><td>string</td><td>模型类名(大驼峰)</td><td><code>Example</code></td></tr><tr><td><code>$model_class_name_camel</code></td><td>string</td><td>模型类名(小驼峰)</td><td><code>example</code></td></tr><tr><td><code>$route_prefix</code></td><td>string</td><td>路由前缀</td><td><code>example</code></td></tr><tr><td><code>$api_path</code></td><td>string</td><td>API 路径</td><td><code>tool/example</code></td></tr><tr><td><code>$permission_prefix</code></td><td>string</td><td>权限码前缀</td><td><code>sys:example</code></td></tr><tr><td><code>$primary_key</code></td><td>string</td><td>主键字段名</td><td><code>id</code></td></tr><tr><td><code>$table_name</code></td><td>string</td><td>表名(不含前缀)</td><td><code>example</code></td></tr><tr><td><code>$parent_menu_id</code></td><td>int</td><td>菜单挂载父ID,读 <code>GENERATOR_PARENT_MENU_ID</code></td><td><code>189</code></td></tr></tbody></table><h3 id="树形结构变量" tabindex="-1">树形结构变量 <a class="header-anchor" href="#树形结构变量" aria-label="Permalink to "树形结构变量""></a></h3><table tabindex="0"><thead><tr><th>变量</th><th>类型</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>$is_tree</code></td><td>bool</td><td>是否为树形结构</td><td><code>true</code></td></tr><tr><td><code>$parent_id_field</code></td><td>string</td><td>父级字段名(pid 优先)</td><td><code>parent_id</code></td></tr><tr><td><code>$parent_id_field_camel</code></td><td>string</td><td>父级字段名(驼峰)</td><td><code>parentId</code></td></tr><tr><td><code>$display_field</code></td><td>string</td><td>显示字段名(按候选列表自动探测)</td><td><code>name</code></td></tr><tr><td><code>$display_field_camel</code></td><td>string</td><td>显示字段名(驼峰)</td><td><code>name</code></td></tr></tbody></table><h3 id="字段列表变量" tabindex="-1">字段列表变量 <a class="header-anchor" href="#字段列表变量" aria-label="Permalink to "字段列表变量""></a></h3><table tabindex="0"><thead><tr><th>变量</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>$fields</code></td><td>array</td><td>全部字段列表</td></tr><tr><td><code>$list_fields</code></td><td>array</td><td>列表页展示字段(排除隐藏字段)</td></tr><tr><td><code>$form_fields</code></td><td>array</td><td>表单字段(编辑弹窗用)</td></tr><tr><td><code>$filter_fields</code></td><td>array</td><td>筛选字段(搜索表单用)</td></tr><tr><td><code>$file_fields</code></td><td>array</td><td>文件/图片字段名列表</td></tr><tr><td><code>$content_fields</code></td><td>array</td><td>富文本字段名列表</td></tr><tr><td><code>$multi_file_fields</code></td><td>array</td><td>多文件字段名列表(逗号分隔的多条路径)</td></tr><tr><td><code>$like_fields</code></td><td>array</td><td>模糊搜索字段名列表</td></tr><tr><td><code>$eq_fields</code></td><td>array</td><td>精确匹配字段名列表</td></tr><tr><td><code>$unique_fields</code></td><td>array</td><td>唯一性校验字段名列表</td></tr><tr><td><code>$validate_rules</code></td><td>array</td><td>新增接口验证规则(必填 + 类型 + 长度约束,含 <code>id</code>)</td></tr><tr><td><code>$validate_rules_update</code></td><td>array</td><td>修改接口验证规则(required 降级为 nullable,其余约束保持)</td></tr><tr><td><code>$validate_messages</code></td><td>array</td><td>验证提示信息</td></tr><tr><td><code>$validate_fields</code></td><td>array</td><td>必填字段列表</td></tr><tr><td><code>$serialize_maps</code></td><td>array</td><td>枚举字段 → 字典编码映射</td></tr><tr><td><code>$field_labels</code></td><td>array</td><td>字段中文名映射(唯一性冲突提示用)</td></tr><tr><td><code>$casts</code></td><td>array</td><td>字段类型转换(时间列 → datetime / date)</td></tr><tr><td><code>$hidden_fields</code></td><td>array</td><td>需隐藏的敏感字段(密码、令牌等)</td></tr></tbody></table><h3 id="功能标记变量" tabindex="-1">功能标记变量 <a class="header-anchor" href="#功能标记变量" aria-label="Permalink to "功能标记变量""></a></h3><table tabindex="0"><thead><tr><th>变量</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>$has_import</code></td><td>bool</td><td>是否生成导入方法(当前恒为 true)</td></tr><tr><td><code>$has_export</code></td><td>bool</td><td>是否生成导出方法(当前恒为 true)</td></tr><tr><td><code>$has_image_field</code></td><td>bool</td><td>是否包含图片字段</td></tr><tr><td><code>$has_rich_text_field</code></td><td>bool</td><td>是否包含富文本字段</td></tr><tr><td><code>$has_sort</code></td><td>bool</td><td>是否包含排序字段</td></tr><tr><td><code>$is_tree_structure</code></td><td>bool</td><td>是否为树形结构(<code>$is_tree</code> 别名)</td></tr><tr><td><code>$template_type</code></td><td>string</td><td>模板类型:<code>ui</code> 或 <code>ui2</code></td></tr><tr><td><code>$tenant_scope</code></td><td>bool</td><td>表中是否含 <code>tenant_id</code>(决定继承 <code>BaseTenantService</code>)</td></tr></tbody></table><h3 id="排序变量" tabindex="-1">排序变量 <a class="header-anchor" href="#排序变量" aria-label="Permalink to "排序变量""></a></h3><table tabindex="0"><thead><tr><th>变量</th><th>类型</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>$order_field</code></td><td>string</td><td>默认排序字段</td><td><code>id</code> 或 <code>sort</code></td></tr><tr><td><code>$order_type</code></td><td>string</td><td>默认排序方向</td><td><code>desc</code> 或 <code>asc</code></td></tr></tbody></table><h3 id="字段结构" tabindex="-1">字段结构 <a class="header-anchor" href="#字段结构" aria-label="Permalink to "字段结构""></a></h3><p>每个字段为一个数组,包含以下属性:</p><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:#F6F6F4;--shiki-light:#999999;">$</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">field</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;">name</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">status</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 字段名(下划线)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">camel_name</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">status</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 字段名(驼峰)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">label</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></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:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 中文标签(注释清洗后,无注释回退字段名)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">comment</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">状态:1-正常 2-停用</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 原始字段注释</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">IntegerField</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 字段类型归一化后的配置类名</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rawType</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">int</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 原始数据库类型</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:#BF9EEE;--shiki-light:#2F798A;"> 0</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 默认值</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">required</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否必填(非空且无默认值)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">nullable</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> true</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 数据库是否允许 NULL</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">is_image</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否为图片字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">is_rich_text</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否为富文本字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">is_textarea</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否为多行文本</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">is_number</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否为数字字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">is_datetime</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否为时间字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">in_form</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> true</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否进表单</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">in_list</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> true</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否进列表</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">filterable</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 是否可筛选</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">filter_type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 筛选方式:'精确匹配' / '' / '模糊'</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">choices</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:#7B7F8B;--shiki-light:#A0ADA0;"> // 选项列表(有值时可生成 NTag 渲染)</span></span>
|
||
<span class="line"><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;">value</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 0</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;">label</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></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:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">success</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:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">value</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 1</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;">label</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></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:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">danger</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:#F6F6F4;--shiki-light:#999999;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span></code></pre></div><h2 id="模板语法" tabindex="-1">模板语法 <a class="header-anchor" href="#模板语法" aria-label="Permalink to "模板语法""></a></h2><p>模板使用 PHP 原生语法,通过 <code><?php echo ?></code> 输出变量,使用 <code><?php foreach ?></code> 等控制结构:</p><h3 id="后端模板示例-service-php-tpl-片段-" tabindex="-1">后端模板示例(service.php.tpl 片段) <a class="header-anchor" href="#后端模板示例-service-php-tpl-片段-" aria-label="Permalink to "后端模板示例(service.php.tpl 片段)""></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:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">namespace</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;"> App</span><span style="--shiki-dark:#F286C4;--shiki-dark-font-style:italic;--shiki-light:#999999;--shiki-light-font-style:inherit;">\</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;">Services</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">use</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> App</span><span style="--shiki-dark:#F286C4;--shiki-dark-font-style:italic;--shiki-light:#999999;--shiki-light-font-style:inherit;">\</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">Models</span><span style="--shiki-dark:#F286C4;--shiki-dark-font-style:italic;--shiki-light:#999999;--shiki-light-font-style:inherit;">\</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"><?</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">php</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> $</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">model_class_name</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#AB5959;--shiki-light-font-style:inherit;">class</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> <?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">model_class_name</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">Service</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> extends</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> <?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">is_tree</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">BaseService</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:#F6F6F4;--shiki-light:#B07D48;">tenant_scope</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">BaseTenantService</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> :</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">BaseService</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">{</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> use</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> HasCrudOperations</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> HasQueryScopes</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> HasSerializeMaps</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"><?</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">php</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> if</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> (!</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">empty</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">($</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;">unique_fields</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">)) </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">{</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> '</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#998418;--shiki-light-font-style:inherit;"> HasUniqueCheck</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> }</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">modelClass</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> <?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">model_class_name</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?>::</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">class</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> if</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">!</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">empty</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">($</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">file_fields</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">))</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> array</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">fileFields</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> echo</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> implode</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;">, </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;"> array_map</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">fn</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">($</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">f</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</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;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">$</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B56959;">f</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:#999999;">,</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">file_fields</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">))</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">]</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">fileSaveDir</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $module_name ?></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:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> endif</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> array</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">pageOrderBy</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</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;">field</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $order_field ?></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;">type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $order_type ?></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> if</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">!</span><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">empty</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">($</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">serialize_maps</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">))</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> array</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">serializeMaps</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:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> foreach</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> ($</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">serialize_maps</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> as</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">field</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">dict</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $field ?></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $dict ?></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:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> endforeach</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> ]</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> endif</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> if</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> ($</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">is_tree</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">treeParentField</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $parent_id_field ?></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:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">treeLikeField</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $display_field ?></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:#F286C4;--shiki-light:#AB5959;"><?</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;">php</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> endif</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">}</span></span></code></pre></div><h3 id="前端模板示例-columns-ts-tpl-片段-" tabindex="-1">前端模板示例(columns.ts.tpl 片段) <a class="header-anchor" href="#前端模板示例-columns-ts-tpl-片段-" aria-label="Permalink to "前端模板示例(columns.ts.tpl 片段)""></a></h3><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">import</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> {</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> h</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> }</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> from</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">vue</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:#F286C4;--shiki-light:#1E754F;">import</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> {</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> NTag</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> NAvatar</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> }</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> from</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">naive-ui</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">export</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> const</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> columns</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:#F6F6F4;--shiki-light:#999999;"> { </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">type</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">selection</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:#F6F6F4;--shiki-light:#999999;"> { </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">title</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ID</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">key</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">id</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">fixed</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">left</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">width</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 50</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> },</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> foreach</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">$list_fields</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> as</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;"> $field</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">></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:#998418;"> title</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $field[</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">label</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:#999999;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;"> key</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"><?php echo $field[</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">camel_name</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:#999999;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><?php </span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">if</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#B07D48;--shiki-light-font-style:inherit;">$field</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;">is_image</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">])</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</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:#62E884;--shiki-light:#59873A;"> render</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#B07D48;--shiki-light-font-style:inherit;">record</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">) {</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> return</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> h</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">NAvatar</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, { </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">size</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 48</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">src</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> record</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">.</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> $field</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;">camel_name</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">] </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">round</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> });</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> },</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> elseif</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">$field</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;">choices</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">])</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">:</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ?</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">></span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> render</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">record</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">) {</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> const </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">map</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:#F6F6F4;--shiki-light:#999999;"><?php </span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">foreach</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> (</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#B07D48;--shiki-light-font-style:inherit;">$field</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;">choices</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">] </span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#B07D48;--shiki-light-font-style:inherit;">as</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#B07D48;--shiki-light-font-style:inherit;"> $choice</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</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:#F6F6F4;--shiki-light:#999999;"> <</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;">php</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;"> echo</span><span style="--shiki-dark:#FFB86C;--shiki-dark-font-style:italic;--shiki-light:#2E8F82;--shiki-light-font-style:inherit;"> $choice</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;">value</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">] </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">>: { </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">text</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;"><?php echo $choice[</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">label</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:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">type</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;"><?php echo $choice[</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">type</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:#999999;"> },</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"><?php endforeach; ?></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;"> const </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">s</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> map</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">record</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">.</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> echo</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> $field</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;">camel_name</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">] </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</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:#F6F6F4;--shiki-light:#B07D48;"> return</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> h</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">NTag</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, { </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">bordered</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;"> false</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">, </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#998418;">type</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> s</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">?.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">type</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ||</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">info</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> }, { </span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">default</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">:</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:#B07D48;"> s</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">?.</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">text</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> });</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> },</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> endif</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">; </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> },</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"><</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">php</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;"> endforeach</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">; </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">?</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">></span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span></code></pre></div><h2 id="自定义模板步骤" tabindex="-1">自定义模板步骤 <a class="header-anchor" href="#自定义模板步骤" aria-label="Permalink to "自定义模板步骤""></a></h2><ol><li>修改 <code>resources/templates/</code> 目录下的 <code>.tpl</code> 文件(或调整 <code>config/generator.php</code> 的 <code>template_dir</code> 指向其它目录)</li><li>使用上述模板变量(<code>$model_class_name</code>、<code>$module_comment</code> 等)</li><li>下次生成时自动使用新模板</li></ol><div class="warning custom-block"><p class="custom-block-title">注意事项</p><ul><li>修改模板后,已生成的代码不会自动更新(需重新生成,且注意 <code>overwrite</code> 参数)</li><li>模板中使用 <code><?php echo ?></code> 输出变量,与现有模板保持一致(现有模板均不含短标签)</li><li>模板文件不能含 UTF-8 BOM 头,否则渲染结果开头会带不可见字符</li><li>树形结构模块使用 <code>ui2/</code> 模板,普通模块使用 <code>ui/</code> 模板</li><li>后端模板输出路径若调整 <code>backend_outputs</code>,注意同步 <code>GeneratorService::getGenerateFiles()</code> 的文件清单</li></ul></div><h2 id="模板选择逻辑" tabindex="-1">模板选择逻辑 <a class="header-anchor" href="#模板选择逻辑" aria-label="Permalink to "模板选择逻辑""></a></h2><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>表结构中包含 parent_id 或 pid 字段?</span></span>
|
||
<span class="line"><span> │</span></span>
|
||
<span class="line"><span> ├─ 是 → 使用 ui2/ 树形模板(自动,无需手动选择)</span></span>
|
||
<span class="line"><span> │</span></span>
|
||
<span class="line"><span> └─ 否 → 使用 ui/ 普通列表模板</span></span></code></pre></div><h2 id="生成的前端文件" tabindex="-1">生成的前端文件 <a class="header-anchor" href="#生成的前端文件" aria-label="Permalink to "生成的前端文件""></a></h2><p><code>ui/</code> 模板生成 6 个文件(<code>ui2/</code> 生成 4 个,无 columns.ts 和 querySchemas.ts):</p><table tabindex="0"><thead><tr><th>文件</th><th>说明</th><th>引用关系</th></tr></thead><tbody><tr><td><code>api.ts</code></td><td>API 接口模块</td><td>被 index.vue、edit.vue 导入</td></tr><tr><td><code>index.vue</code></td><td>列表页</td><td>导入 columns.ts、querySchemas.ts</td></tr><tr><td><code>edit.vue</code></td><td>编辑弹窗</td><td>被 index.vue 动态加载</td></tr><tr><td><code>detail.vue</code></td><td>详情弹窗</td><td>被 index.vue 动态加载</td></tr><tr><td><code>columns.ts</code></td><td>表格列配置</td><td>被 index.vue 导入,含 NTag/NAvatar 渲染</td></tr><tr><td><code>querySchemas.ts</code></td><td>查询表单配置</td><td>被 index.vue 导入,含 NSelect/NInput/NDatePicker 组件</td></tr></tbody></table><h2 id="相关文档" tabindex="-1">相关文档 <a class="header-anchor" href="#相关文档" aria-label="Permalink to "相关文档""></a></h2><ul><li><a href="/zh/generator/code-engine.html">10.5 代码生成引擎</a></li><li><a href="/zh/generator/config.html">10.7 配置文件详解</a></li><li><a href="/zh/generator/demo.html">10.8 实战案例</a></li></ul></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/generator/code-engine.html" data-v-11181de8><!--[--><span class="desc" data-v-11181de8>上一页</span><span class="title" data-v-11181de8>10.5 代码生成引擎</span><!--]--></a></div><div class="pager" data-v-11181de8><a class="VPLink link pager-link next" href="/zh/generator/config.html" data-v-11181de8><!--[--><span class="desc" data-v-11181de8>下一页</span><span class="title" data-v-11181de8>10.7 配置文件详解</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> |