mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-07-27 00:17:42 +00:00
152 lines
88 KiB
HTML
152 lines
88 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>表单校验 | tmagic-editor</title>
|
||
<meta name="description" content="页面可视化平台">
|
||
<meta name="generator" content="VitePress v2.0.0-alpha.18">
|
||
<link rel="preload stylesheet" href="/tmagic-editor/docs/assets/style.Ch7UhAWw.css" as="style">
|
||
<link rel="preload stylesheet" href="/tmagic-editor/docs/vp-icons.css" as="style">
|
||
|
||
<script type="module" src="/tmagic-editor/docs/assets/app.C4PDWoQ9.js"></script>
|
||
<link rel="preload" href="/tmagic-editor/docs/assets/inter-roman-latin.Cy4MYw_J.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/tmagic-editor/docs/assets/chunks/theme.DjefmpVa.js">
|
||
<link rel="modulepreload" href="/tmagic-editor/docs/assets/chunks/framework.ECw2lWOt.js">
|
||
<link rel="modulepreload" href="/tmagic-editor/docs/assets/form-config_rules.md.BLmymsyx.lean.js">
|
||
<meta name="theme-color" content="#646cff">
|
||
<script id="check-dark-mode">(()=>{let e=localStorage.getItem(`vitepress-theme-appearance`)||`auto`,t=window.matchMedia(`(prefers-color-scheme: dark)`).matches;(!e||e===`auto`?t: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>
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-2932c6cf><!--[--><!--]--><!--[--><span tabindex="-1" data-v-f9a479f9></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-f9a479f9>Skip to content</a><!--]--><!----><header class="VPNav" data-v-2932c6cf data-v-5ec118a8><div class="VPNavBar has-sidebar top" data-v-5ec118a8 data-v-cd6df6d0><div class="wrapper" data-v-cd6df6d0><div class="container" data-v-cd6df6d0><div class="title" data-v-cd6df6d0><div class="VPNavBarTitle has-sidebar" data-v-cd6df6d0 data-v-22741a41><a class="title" href="/tmagic-editor/docs/" data-v-22741a41><!--[--><!--]--><!--[--><img class="VPImage logo" src="./favicon.png" alt data-v-4582fcab><!--]--><span data-v-22741a41>tmagic-editor</span><!--[--><!--]--></a></div></div><div class="content" data-v-cd6df6d0><div class="content-body" data-v-cd6df6d0><!--[--><!--]--><div class="VPNavBarSearch search" data-v-cd6df6d0 data-v-8cc82bae><!--[--><button type="button" class="VPNavBarSearchButton" aria-label="Search" aria-keyshortcuts="/ control+k meta+k" data-v-8cc82bae data-v-e341e05d><span class="vpi-search" aria-hidden="true" data-v-e341e05d></span><span class="text" data-v-e341e05d>Search</span><span class="keys" aria-hidden="true" data-v-e341e05d><kbd class="key-cmd" data-v-e341e05d>⌘</kbd><kbd class="key-ctrl" data-v-e341e05d>Ctrl</kbd><kbd data-v-e341e05d>K</kbd></span></button><!----><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-cd6df6d0 data-v-2cceaaa0><span id="main-nav-aria-label" class="visually-hidden" data-v-2cceaaa0> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/guide/" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>文档</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/api/editor/props.html" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>Editor API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/runtime-api/core/app.html" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>Runtime API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/tmagic-editor/docs/form-config/fields/text.html" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>表单配置</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="https://github.com/Tencent/tmagic-editor/releases" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>更新日志</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="https://tencent.github.io/tmagic-editor/playground/index.html" tabindex="0" data-v-2cceaaa0 data-v-1f52e8ac><!--[--><span data-v-1f52e8ac>Playground</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-cd6df6d0 data-v-11250d7e><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-11250d7e data-v-a274f63d data-v-091ddd52><span class="check" data-v-091ddd52><span class="icon" data-v-091ddd52><!--[--><span class="vpi-sun sun" data-v-a274f63d></span><span class="vpi-moon moon" data-v-a274f63d></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-cd6df6d0 data-v-67340789 data-v-882b9947><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="me noopener" data-v-882b9947 data-v-3899771d><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-cd6df6d0 data-v-ec4151bd data-v-8c70178b><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-8c70178b><span class="vpi-more-horizontal icon" data-v-8c70178b></span></button><div class="menu" data-v-8c70178b><div class="VPMenu" data-v-8c70178b data-v-d3c72699><!----><!--[--><!--[--><!----><div class="group" data-v-ec4151bd><div class="item appearance" data-v-ec4151bd><p class="label" data-v-ec4151bd>Appearance</p><div class="appearance-action" data-v-ec4151bd><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-ec4151bd data-v-a274f63d data-v-091ddd52><span class="check" data-v-091ddd52><span class="icon" data-v-091ddd52><!--[--><span class="vpi-sun sun" data-v-a274f63d></span><span class="vpi-moon moon" data-v-a274f63d></span><!--]--></span></span></button></div></div></div><div class="group" data-v-ec4151bd><div class="item social-links" data-v-ec4151bd><div class="VPSocialLinks social-links-list" data-v-ec4151bd data-v-882b9947><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="me noopener" data-v-882b9947 data-v-3899771d><span class="vpi-social-github"></span></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-cd6df6d0 data-v-baa7e450><span class="container" data-v-baa7e450><span class="top" data-v-baa7e450></span><span class="middle" data-v-baa7e450></span><span class="bottom" data-v-baa7e450></span></span></button></div></div></div></div><div class="divider" data-v-cd6df6d0><div class="divider-line" data-v-cd6df6d0></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-2932c6cf data-v-1c5126ae><div class="container" data-v-1c5126ae><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-1c5126ae><span class="vpi-align-left menu-icon" data-v-1c5126ae></span><span class="menu-text" data-v-1c5126ae>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-1c5126ae data-v-dd68c105><button data-v-dd68c105>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-2932c6cf data-v-42fb1f13><div class="curtain" data-v-42fb1f13></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42fb1f13><span class="visually-hidden" id="sidebar-aria-label" data-v-42fb1f13> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>基础配置</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/text.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Input输入框</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/textarea.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Textarea文本域</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/number.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>InputNumber计数器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/number-range.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>NumberRange数字范围</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/display.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Display只读文本</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/hidden.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Hidden隐藏域</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/link.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Link链接</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/checkbox.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Checkbox多选框</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/radio.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Radio单选框</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/switch.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Switch开关</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Select选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/cascader.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Cascader级联选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/color-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>ColorPicker颜色选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/date-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DatePick日期选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/daterange-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DateRangePick日期范围选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/datetime-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DatetimePick日期时间选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/time-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>TimePick时间选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/timerange-picker.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>TimeRangePick时间范围选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/fields/dynamic-field.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DynamicField动态表单</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>编辑器中可用配置</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/code.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>Code代码编辑器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/code-link.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>CodeLink代码链接</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/code-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>CodeSelect代码块选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/code-select-col.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>CodeSelectCol代码块选择列</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceSelect数据源选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-field-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceFieldSelect数据源字段选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-method-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceMethodSelect数据源方法选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-fields.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceFields数据源字段配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-input.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceInput数据源输入框</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-methods.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceMethods数据源方法配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/data-source-mocks.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DataSourceMocks数据源Mock配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/ui-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>UISelect组件选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/key-value.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>KeyValue键值对</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/page-fragment-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>PageFragmentSelect页面片选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/event-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>EventSelect事件选择器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/display-conds.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>DisplayConds显示条件配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/editor-fields/cond-op-select.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>CondOpSelect条件操作选择器</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>布局配置</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/layout.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>布局</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>联动配置</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/relate.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>联动</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0 has-active" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>表单校验</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/rules.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>表单校验</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-debffcca><section class="VPSidebarItem level-0" data-v-debffcca data-v-0f69b1fe><div class="item" role="button" tabindex="0" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><h2 class="text" data-v-0f69b1fe>表单对比</h2><!----></div><div class="items" data-v-0f69b1fe><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0f69b1fe><div class="item" data-v-0f69b1fe><div class="indicator" data-v-0f69b1fe></div><a class="VPLink link link" href="/tmagic-editor/docs/form-config/compare.html" data-v-0f69b1fe><!--[--><p class="text" data-v-0f69b1fe>表单对比</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-2932c6cf data-v-58117d44><div class="VPDoc has-sidebar has-aside" data-v-58117d44 data-v-6fc6448d><!--[--><!--]--><div class="container" data-v-6fc6448d><div class="aside" data-v-6fc6448d><div class="aside-curtain" data-v-6fc6448d></div><div class="aside-container" data-v-6fc6448d><div class="aside-content" data-v-6fc6448d><div class="VPDocAside" data-v-6fc6448d data-v-9ea761ae><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-9ea761ae data-v-d5e90846><div class="content" data-v-d5e90846><div class="outline-marker" data-v-d5e90846></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-d5e90846>On this page</div><ul class="VPDocOutlineItem root" data-v-d5e90846 data-v-c55a35f3><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-9ea761ae></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-6fc6448d><div class="content-container" data-v-6fc6448d><!--[--><!--]--><main class="main" data-v-6fc6448d><div style="position:relative;" class="vp-doc _tmagic-editor_docs_form-config_rules" data-v-6fc6448d><div><h1 id="表单校验" tabindex="-1">表单校验 <a class="header-anchor" href="#表单校验" aria-label="Permalink to “表单校验”"></a></h1><p><code>@tmagic/form</code> 字段可通过 <code>rules</code> 配置校验规则,兼容 <a href="https://github.com/yiminghe/async-validator" target="_blank" rel="noreferrer">async-validator</a>(Element Plus 内部使用)的常见能力,并额外支持按字段 <code>type</code> 做值类型 / 选项匹配校验(<code>typeMatch</code>)。</p><h2 id="基础用法" tabindex="-1">基础用法 <a class="header-anchor" href="#基础用法" aria-label="Permalink to “基础用法”"></a></h2><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'title'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> text</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'名称'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { required: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'请输入名称'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { typeMatch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'名称类型不合法'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><code>rules</code> 类型见下方 <a href="#类型定义"><code>Rule</code></a>。未配置 <code>typeMatch</code> 时,现有表单行为不变。</p><h2 id="typematch" tabindex="-1">typeMatch <a class="header-anchor" href="#typematch" aria-label="Permalink to “typeMatch”"></a></h2><p>开启 <code>typeMatch: true</code> 后,表单会按字段 <code>config.type</code>(及关联配置)校验当前值是否合法。空值(<code>undefined</code> / <code>null</code> / <code>''</code>,多选类空数组 <code>[]</code>)直接通过,必填请继续使用 <code>required</code>。</p><h3 id="内置映射" tabindex="-1">内置映射 <a class="header-anchor" href="#内置映射" aria-label="Permalink to “内置映射”"></a></h3><table tabindex="0"><thead><tr><th>字段 type</th><th>期望值</th></tr></thead><tbody><tr><td><code>text</code> / <code>textarea</code> / <code>color-picker</code> / <code>html</code> / 默认无 type</td><td><code>string</code>;若 <code>filter: 'number'</code> 则为 <code>number</code>;<code>filter</code> 为自定义函数时跳过内置类型校验</td></tr><tr><td><code>display</code> / <code>hidden</code></td><td>不校验</td></tr><tr><td><code>number</code></td><td><code>number</code>(非 NaN)</td></tr><tr><td><code>number-range</code></td><td>长度为 2 的数字数组</td></tr><tr><td><code>date</code> / <code>datetime</code> / <code>time</code></td><td>按 <code>valueFormat</code> 校验;<code>x</code> / <code>timestamp</code> 期望 <code>number</code>,其余按 <a href="https://day.js.org/docs/en/display/format" target="_blank" rel="noreferrer">Day.js format</a> 严格解析字符串</td></tr><tr><td><code>daterange</code> / <code>timerange</code></td><td>无 <code>names</code> 时为长度为 2 的数组,元素按 <code>valueFormat</code> 校验;有 <code>names</code> 时跳过</td></tr><tr><td><code>switch</code> / <code>checkbox</code></td><td>值必须是解析后的 <code>activeValue</code> / <code>inactiveValue</code> 之一(显式配置优先;未配置且 <code>filter === 'number'</code> 时为 <code>1</code>/<code>0</code>;否则为 <code>true</code>/<code>false</code>)</td></tr><tr><td><code>select</code></td><td>单选:值 ∈ options;<code>multiple</code>:数组且每项 ∈ options;<code>allowCreate</code> / <code>remote</code>:只校验基础形态,不做 options 枚举</td></tr><tr><td><code>radio-group</code> / <code>radioGroup</code></td><td>值 ∈ options</td></tr><tr><td><code>checkbox-group</code> / <code>checkboxGroup</code></td><td>数组且每项 ∈ options</td></tr><tr><td><code>cascader</code></td><td>有 <code>valueSeparator</code> 时可为 <code>string</code> 或 <code>array</code>;默认 <code>emitPath</code> 为路径数组;<code>emitPath: false</code> 为叶子值;<code>multiple</code> 为数组;静态 options 校验路径/叶子;<code>remote</code> 只做形态校验</td></tr><tr><td><code>table</code> / <code>group-list</code> / <code>groupList</code></td><td><code>array</code></td></tr><tr><td>容器类(<code>row</code> / <code>tab</code> / <code>fieldset</code> / <code>panel</code> / <code>step</code> / <code>flex-layout</code> / <code>link</code> / <code>component</code> / <code>dynamic-field</code> 等)</td><td>不校验</td></tr></tbody></table><p>日期类默认 <code>valueFormat</code> 与字段组件一致:</p><ul><li><code>date</code>:<code>YYYY/MM/DD</code></li><li><code>datetime</code> / <code>daterange</code>:<code>YYYY/MM/DD HH:mm:ss</code></li><li><code>time</code> / <code>timerange</code>:<code>HH:mm:ss</code></li></ul><h3 id="与自定义-validator-共存" tabindex="-1">与自定义 validator 共存 <a class="header-anchor" href="#与自定义-validator-共存" aria-label="Permalink to “与自定义 validator 共存”"></a></h3><p>同一条 rule 同时配置了 <code>typeMatch</code> 与 <code>validator</code> 时,会先做类型匹配校验,通过后再执行自定义 <code>validator</code>。</p><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'age'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'number'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> typeMatch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'年龄必须是数字'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> validator</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: ({ </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">callback</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (value </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> callback</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Error</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'年龄不能小于 0'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">));</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> callback</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="扩展自定义-type-规则" tabindex="-1">扩展自定义 type 规则 <a class="header-anchor" href="#扩展自定义-type-规则" aria-label="Permalink to “扩展自定义 type 规则”"></a></h2><p>业务可覆盖内置规则,或为自定义字段 type 注册校验。自定义规则优先于内置规则。</p><h3 id="运行时注册" tabindex="-1">运行时注册 <a class="header-anchor" href="#运行时注册" aria-label="Permalink to “运行时注册”"></a></h3><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> registerTypeMatchRule,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> registerTypeMatchRules,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> deleteTypeMatchRule,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> clearTypeMatchRules,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@tmagic/form'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;">// 覆盖内置 text</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">registerTypeMatchRule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'text'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, (</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">typeof</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">!==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'string'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '值类型应为字符串'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;">// 扩展业务字段</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">registerTypeMatchRule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'vs-code'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, (</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">typeof</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">!==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'string'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '代码字段应为字符串'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;">// 批量注册</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">registerTypeMatchRules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> foo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: (</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (Array.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">isArray</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(value) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '应为数组'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;">// 删除 / 清空</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">deleteTypeMatchRule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'foo'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">clearTypeMatchRules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">();</span></span></code></pre></div><p>自定义校验器签名:<code>(value, context) => string | undefined</code>。返回错误文案表示失败,返回 <code>undefined</code> 表示通过。<code>context</code> 包含 <code>fieldType</code>、<code>mForm</code>、<code>props</code>、<code>message</code>。</p><h3 id="安装时注册" tabindex="-1">安装时注册 <a class="header-anchor" href="#安装时注册" aria-label="Permalink to “安装时注册”"></a></h3><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MagicForm </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@tmagic/form'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">use</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(MagicForm, {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> typeMatchRules: {</span></span>
|
||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'my-field'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: (</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">message</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">typeof</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> value </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">!==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'string'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">||</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'my-field 应为字符串'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><h3 id="editor-字段内置规则" tabindex="-1">Editor 字段内置规则 <a class="header-anchor" href="#editor-字段内置规则" aria-label="Permalink to “Editor 字段内置规则”"></a></h3><p>安装 <code>@tmagic/editor</code> 时会自动 <code>registerTypeMatchRules</code> 注册编辑器自定义字段规则。服务数据(数据源 / 代码块 / 节点树)未就绪时,只做基础形态校验,不做枚举或存在性失败。</p><table tabindex="0"><thead><tr><th>字段 type</th><th>期望值</th></tr></thead><tbody><tr><td><code>key-value</code> / <code>style-setter</code></td><td>普通对象;<code>key-value</code> + <code>advanced</code> 且值为 <code>function</code> 时放行</td></tr><tr><td><code>cond-op-select</code></td><td>已知算子;能解析字段类型时按类型收窄</td></tr><tr><td><code>code-select-col</code></td><td><code>string</code>;有代码块 DSL 时须为已有 codeId</td></tr><tr><td><code>page-fragment-select</code> / <code>ui-select</code></td><td><code>string | number</code>;有节点树时须为已有页面片 / 组件 id</td></tr><tr><td><code>data-source-input</code></td><td><code>string</code>;<code>${...}</code> 绑定须指向已有数据源/字段</td></tr><tr><td><code>data-source-method-select</code></td><td><code>[dsId, methodName]</code>,方法须在该数据源可选方法集中</td></tr><tr><td><code>data-source-field-select</code></td><td>数据源路径 <code>string[]</code>;有 <code>fieldConfig</code> 且非路径值时跳过</td></tr><tr><td><code>data-source-select</code></td><td><code>value: 'id'</code> 为已有 ds id;否则为含 <code>isBindDataSource</code> + <code>dataSourceId</code> 的对象</td></tr><tr><td><code>code-select</code></td><td><code>{ hookType: 'code', hookData }</code> 的浅层结构校验(<code>codeId</code> 存在性 / 数据源方法存在性由内部 <code>code-select-col</code>、<code>data-source-method-select</code> 单元格各自校验,只标红出错单元格)</td></tr><tr><td><code>data-source-fields</code> / <code>data-source-mocks</code> / <code>data-source-methods</code></td><td>数组 + 浅层结构(<code>name</code>/<code>type</code>、<code>title</code>/<code>enable</code>/<code>data</code>、<code>content</code>/<code>params</code> 等)</td></tr><tr><td><code>event-select</code></td><td>数组;兼容新旧格式的浅层结构校验(<code>name</code> / 联动组件 <code>method</code> 是否 ∈ 可选项由字段内 <code>eventNameConfig.rules</code>、<code>compActionConfig.rules</code> 单独校验,只标红对应 select)</td></tr><tr><td><code>display-conds</code></td><td>数组 + <code>cond[].field</code>/<code>op</code> 浅层结构校验(<code>op</code> 是否为已知算子、字段路径是否存在由内部 <code>cond-op-select</code>、<code>field</code> 单元格各自校验,只标红出错单元格)</td></tr></tbody></table><blockquote><p>容器类字段(<code>event-select</code> / <code>code-select</code> / <code>display-conds</code>)遵循同一约定:容器级 typeMatch 只做结构校验,「枚举 / 存在性」下沉到内部单元格各自的 typeMatch/rules,避免单个子项非法导致整块表单标红。</p></blockquote><p>业务仍可用 <code>registerTypeMatchRule</code> 覆盖上述任一 type。</p><h2 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to “示例”"></a></h2><h3 id="select-选项匹配" tabindex="-1">select 选项匹配 <a class="header-anchor" href="#select-选项匹配" aria-label="Permalink to “select 选项匹配”"></a></h3><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'status'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'select'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> options</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { text: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'启用'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, value: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { text: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'禁用'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, value: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { required: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'请选择状态'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { typeMatch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'状态值不合法'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="date-按-valueformat-校验" tabindex="-1">date 按 valueFormat 校验 <a class="header-anchor" href="#date-按-valueformat-校验" aria-label="Permalink to “date 按 valueFormat 校验”"></a></h3><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'birthday'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'date'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> valueFormat</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'YYYY-MM-DD'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [{ typeMatch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'日期格式不正确'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="text-filter-number" tabindex="-1">text + filter: number <a class="header-anchor" href="#text-filter-number" aria-label="Permalink to “text + filter: number”"></a></h3><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'width'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'text'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> filter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'number'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [{ typeMatch: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'宽度应为数字'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="类型定义" tabindex="-1">类型定义 <a class="header-anchor" href="#类型定义" aria-label="Permalink to “类型定义”"></a></h2><details class="details custom-block"><summary>查看 Rule 类型定义</summary><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Rule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> message</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 系统提供的验证器类型。有:string,number,boolean,method,regexp,integer,float,array,object,enum,date,url,hex,email,any */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> type</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 是否按字段 config.type 校验值类型/选项匹配 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> typeMatch</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> boolean</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 是否必填 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> required</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> boolean</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> trigger</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 自定义验证器 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> validator</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> options</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> rule</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> value</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> callback</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Function</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> source</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Object</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> options</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> messages</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> };</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> data</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 表单的初始值 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> values</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 当前作用域下的值 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> model</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> parent</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 整个表单的值 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> formValue</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> prop</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> config</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> mForm</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormState</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> void</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></details><details class="details custom-block"><summary>查看 TypeMatchValidator / TypeMatchValidateContext 类型定义</summary><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;">/** 自定义 type 校验器:返回错误文案;通过则返回 undefined */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> TypeMatchValidator</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">value</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">context</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> TypeMatchValidateContext</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span></code></pre></div><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> TypeMatchValidateContext</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> fieldType</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> mForm</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormState</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> undefined</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> props</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> message</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></details><details class="details custom-block"><summary>查看 FormInstallOptions 类型定义</summary><div class="language-ts"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;"> interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> FormInstallOptions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> flat</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> boolean</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#62687b;--shiki-dark:#818e99;"> /** 自定义字段 type 的 typeMatch 校验规则,可覆盖内置规则或扩展业务字段 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;"> typeMatchRules</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">?:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Record</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">TypeMatchValidator</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [</span><span style="--shiki-light:#c13617;--shiki-dark:#FFAB70;">key</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span><span style="--shiki-light:#c62739;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></details></div></div></main><footer class="VPDocFooter" data-v-6fc6448d data-v-caf0f700><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-caf0f700><span class="visually-hidden" id="doc-footer-aria-label" data-v-caf0f700>Pager</span><div class="pager" data-v-caf0f700><a class="VPLink link pager-link prev" href="/tmagic-editor/docs/form-config/relate.html" data-v-caf0f700><!--[--><span class="desc" data-v-caf0f700>Previous page</span><span class="title" data-v-caf0f700>联动</span><!--]--></a></div><div class="pager" data-v-caf0f700><a class="VPLink link pager-link next" href="/tmagic-editor/docs/form-config/compare.html" data-v-caf0f700><!--[--><span class="desc" data-v-caf0f700>Next page</span><span class="title" data-v-caf0f700>表单对比</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-2932c6cf data-v-53df1d78><div class="container" data-v-53df1d78><p class="message" data-v-53df1d78>Powered by 腾讯视频会员平台技术中心</p><p class="copyright" data-v-53df1d78>Copyright (C) 2025 Tencent.</p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_editor_codeblockservicemethods.md\":\"B0JWNSG9\",\"api_editor_componentlistservicemethods.md\":\"CBP2S7wE\",\"api_editor_datasourceservicemethods.md\":\"Dqsgtsza\",\"api_editor_editorserviceevents.md\":\"D8xRN9za\",\"api_editor_editorservicemethods.md\":\"Bk-06sWx\",\"api_editor_events.md\":\"BRiMzDnt\",\"api_editor_eventsservicemethods.md\":\"dwupZk8N\",\"api_editor_historyserviceevents.md\":\"BtP81g1-\",\"api_editor_historyservicemethods.md\":\"BjNQp3OU\",\"api_editor_props.md\":\"BhoqoNOV\",\"api_editor_propsserviceevents.md\":\"Buhcztd1\",\"api_editor_propsservicemethods.md\":\"BzKNuOaj\",\"api_editor_slots.md\":\"CM6xNMn8\",\"api_editor_storageservicemethods.md\":\"efkyIGFc\",\"api_editor_uiserviceevents.md\":\"0dV3tgwH\",\"api_editor_uiservicemethods.md\":\"BYnnqy4l\",\"api_form_form-dialog-events.md\":\"uk6NOP07\",\"api_form_form-dialog-methods.md\":\"B6jmcnJU\",\"api_form_form-dialog-props.md\":\"bOkTzdnl\",\"api_form_form-events.md\":\"DMpt-Smk\",\"api_form_form-methods.md\":\"DwT7cEhd\",\"api_form_form-props.md\":\"Dg-76p7a\",\"api_form_submit-form.md\":\"nS0JshyL\",\"api_stage_coreevents.md\":\"Bf0PhKAQ\",\"api_stage_coremethods.md\":\"BfJ-Bzds\",\"api_table_events.md\":\"CmdGltTm\",\"api_table_methods.md\":\"CDy1hOhW\",\"api_table_props.md\":\"D0XbY-XC\",\"form-config_compare.md\":\"BZ2qHWJP\",\"form-config_editor-fields_code-link.md\":\"BpuuSraL\",\"form-config_editor-fields_code-select-col.md\":\"C54C6HBq\",\"form-config_editor-fields_code-select.md\":\"CdTMmJRk\",\"form-config_editor-fields_code.md\":\"DBDZ9aIQ\",\"form-config_editor-fields_cond-op-select.md\":\"0vX39ttH\",\"form-config_editor-fields_data-source-field-select.md\":\"-jRdW6U6\",\"form-config_editor-fields_data-source-fields.md\":\"CO7fjwNI\",\"form-config_editor-fields_data-source-input.md\":\"DpgkSVzn\",\"form-config_editor-fields_data-source-method-select.md\":\"CjX7GYAV\",\"form-config_editor-fields_data-source-methods.md\":\"YdiUw-3k\",\"form-config_editor-fields_data-source-mocks.md\":\"D3UjxvJ1\",\"form-config_editor-fields_data-source-select.md\":\"CF-Bi9Rd\",\"form-config_editor-fields_display-conds.md\":\"QPsgn3i7\",\"form-config_editor-fields_event-select.md\":\"O34LrrHB\",\"form-config_editor-fields_key-value.md\":\"PMq3b0FT\",\"form-config_editor-fields_page-fragment-select.md\":\"D3CJRip6\",\"form-config_editor-fields_ui-select.md\":\"BgtJ5AxZ\",\"form-config_fields_cascader.md\":\"DhJC40cS\",\"form-config_fields_checkbox.md\":\"nvv9BCrN\",\"form-config_fields_color-picker.md\":\"D31BXkuH\",\"form-config_fields_date-picker.md\":\"C0Jc2sM4\",\"form-config_fields_daterange-picker.md\":\"hZiPs5Uv\",\"form-config_fields_datetime-picker.md\":\"BAb8t3p_\",\"form-config_fields_display.md\":\"CwHJEg6e\",\"form-config_fields_dynamic-field.md\":\"1EuSDWFw\",\"form-config_fields_hidden.md\":\"kjCPK54I\",\"form-config_fields_link.md\":\"JBng1KBn\",\"form-config_fields_number-range.md\":\"pk4oxFSa\",\"form-config_fields_number.md\":\"B-L5x_DS\",\"form-config_fields_radio.md\":\"DQIt8zrV\",\"form-config_fields_select.md\":\"CvxobLp8\",\"form-config_fields_switch.md\":\"CaohlziY\",\"form-config_fields_text.md\":\"-xxYJ1yb\",\"form-config_fields_textarea.md\":\"JLm1vGhr\",\"form-config_fields_time-picker.md\":\"B0kEAtsi\",\"form-config_fields_timerange-picker.md\":\"BBWsAvYr\",\"form-config_layout.md\":\"BouY35z0\",\"form-config_relate.md\":\"QHBTFWrk\",\"form-config_rules.md\":\"BLmymsyx\",\"guide_advanced_code-block.md\":\"DzhFxdMX\",\"guide_advanced_coupling.md\":\"B_NEBwJV\",\"guide_advanced_data-source.md\":\"R6g6a5Js\",\"guide_advanced_history-list.md\":\"Dp7f-5wV\",\"guide_advanced_js-schema.md\":\"DURcb0gD\",\"guide_advanced_layout.md\":\"DfLeWfj5\",\"guide_advanced_page.md\":\"DZRwYmIT\",\"guide_advanced_prop-form-validate.md\":\"CfZaPKFi\",\"guide_advanced_tmagic-form.md\":\"BhAymOm7\",\"guide_component.md\":\"CHxd4qA-\",\"guide_conception.md\":\"r6YOd1Lq\",\"guide_editor-expand.md\":\"DGPm3bVd\",\"guide_index.md\":\"DHab0YEy\",\"guide_introduction.md\":\"Bs_e3Azr\",\"guide_migration.md\":\"GpzxeUHU\",\"guide_publish.md\":\"nlian04d\",\"guide_runtime.md\":\"C48c370I\",\"guide_tutorial_hello-world.md\":\"DY2j4gMO\",\"guide_tutorial_index.md\":\"DgGlEUue\",\"guide_tutorial_render.md\":\"Cp6KvBb3\",\"guide_tutorial_runtime.md\":\"B7CmcXE9\",\"index.md\":\"9RsHeZYQ\",\"runtime-api_core_app.md\":\"Dur674t2\",\"runtime-api_core_devtoolapi.md\":\"C1wqlpj3\",\"runtime-api_core_env.md\":\"wgvhhZGD\",\"runtime-api_core_eventhelper.md\":\"BcVTf8du\",\"runtime-api_core_flowstate.md\":\"Bd39Dl4m\",\"runtime-api_core_iteratorcontainer.md\":\"BjjzJUgF\",\"runtime-api_core_node.md\":\"DpKm8jlu\",\"runtime-api_core_page.md\":\"aMeRWFmG\",\"runtime-api_core_utils.md\":\"BNL-iA4H\",\"runtime-api_data-source_datasource.md\":\"CTrOiEBp\",\"runtime-api_data-source_datasourcemanager.md\":\"B0C4k-Pw\",\"runtime-api_data-source_httpdatasource.md\":\"C2nCaEQ4\",\"runtime-api_data-source_observeddata.md\":\"XXpQQO8h\",\"runtime-api_data-source_utils.md\":\"BeoHBz0Y\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"tmagic-editor\",\"description\":\"页面可视化平台\",\"base\":\"/tmagic-editor/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"./favicon.png\",\"search\":{\"provider\":\"local\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/Tencent/tmagic-editor\"}],\"footer\":{\"message\":\"Powered by 腾讯视频会员平台技术中心\",\"copyright\":\"Copyright (C) 2025 Tencent.\"},\"nav\":[{\"text\":\"文档\",\"link\":\"/guide/\",\"activeMatch\":\"/guide/\"},{\"text\":\"Editor API\",\"link\":\"/api/editor/props\",\"activeMatch\":\"/api/\"},{\"text\":\"Runtime API\",\"link\":\"/runtime-api/core/app\",\"activeMatch\":\"/runtime-api/\"},{\"text\":\"表单配置\",\"link\":\"/form-config/fields/text\",\"activeMatch\":\"/form-config/\"},{\"text\":\"更新日志\",\"link\":\"https://github.com/Tencent/tmagic-editor/releases\"},{\"text\":\"Playground\",\"link\":\"https://tencent.github.io/tmagic-editor/playground/index.html\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"文档\",\"items\":[{\"text\":\"介绍\",\"link\":\"/guide/introduction.md\"},{\"text\":\"快速开始\",\"link\":\"/guide/\"},{\"text\":\"RUNTIME\",\"link\":\"/guide/runtime.md\"},{\"text\":\"组件开发\",\"link\":\"/guide/component.md\"},{\"text\":\"基础概念\",\"link\":\"/guide/conception.md\"},{\"text\":\"页面发布\",\"link\":\"/guide/publish.md\"},{\"text\":\"编辑器扩展\",\"link\":\"/guide/editor-expand.md\"},{\"text\":\"升级到1.5.x\",\"link\":\"/guide/migration.md\"}]},{\"text\":\"进阶指南\",\"items\":[{\"text\":\"JS Schema\",\"link\":\"/guide/advanced/js-schema.md\"},{\"text\":\"布局原理\",\"link\":\"/guide/advanced/layout.md\"},{\"text\":\"页面渲染\",\"link\":\"/guide/advanced/page.md\"},{\"text\":\"联动原理\",\"link\":\"/guide/advanced/coupling.md\"},{\"text\":\"代码块\",\"link\":\"/guide/advanced/code-block.md\"},{\"text\":\"数据源\",\"link\":\"/guide/advanced/data-source.md\"},{\"text\":\"历史记录面板\",\"link\":\"/guide/advanced/history-list.md\"},{\"text\":\"@tmagic/form\",\"link\":\"/guide/advanced/tmagic-form.md\"},{\"text\":\"属性配置表单校验联动\",\"link\":\"/guide/advanced/prop-form-validate.md\"}]},{\"text\":\"教程\",\"items\":[{\"text\":\"写在前面\",\"link\":\"/guide/tutorial/\"},{\"text\":\"1.Hello World\",\"link\":\"/guide/tutorial/hello-world.md\"},{\"text\":\"2.Runtime\",\"link\":\"/guide/tutorial/runtime.md\"},{\"text\":\"3.DSL解析渲染\",\"link\":\"/guide/tutorial/render.md\"}]}],\"/api/\":[{\"text\":\"编辑器\",\"items\":[{\"text\":\"Editor组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/editor/props.md\"},{\"text\":\"slots\",\"link\":\"/api/editor/slots.md\"},{\"text\":\"events\",\"link\":\"/api/editor/events.md\"}]},{\"text\":\"editorService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/editorServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/editorServiceEvents.md\"}]},{\"text\":\"propsService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/propsServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/propsServiceEvents.md\"}]},{\"text\":\"historyService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/historyServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/historyServiceEvents.md\"}]},{\"text\":\"eventsService\",\"link\":\"/api/editor/eventsServiceMethods.md\"},{\"text\":\"uiService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/uiServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/uiServiceEvents.md\"}]},{\"text\":\"codeBlockService\",\"link\":\"/api/editor/codeBlockServiceMethods.md\"},{\"text\":\"componentListService\",\"link\":\"/api/editor/componentListServiceMethods.md\"},{\"text\":\"storageService\",\"link\":\"/api/editor/storageServiceMethods.md\"}]},{\"text\":\"表单\",\"items\":[{\"text\":\"Form组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/form/form-props\"},{\"text\":\"methods\",\"link\":\"/api/form/form-methods\"},{\"text\":\"events\",\"link\":\"/api/form/form-events\"}]},{\"text\":\"FormDialog组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/form/form-dialog-props\"},{\"text\":\"methods\",\"link\":\"/api/form/form-dialog-methods\"},{\"text\":\"events\",\"link\":\"/api/form/form-dialog-events\"}]},{\"text\":\"工具函数\",\"items\":[{\"text\":\"submitForm\",\"link\":\"/api/form/submit-form\"}]}]},{\"text\":\"表格\",\"items\":[{\"text\":\"Table组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/table/props\"},{\"text\":\"methods\",\"link\":\"/api/table/methods\"},{\"text\":\"events\",\"link\":\"/api/table/events\"}]}]},{\"text\":\"stage\",\"items\":[{\"text\":\"StageCore\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/stage/coreMethods\"},{\"text\":\"事件\",\"link\":\"/api/stage/coreEvents\"}]}]}],\"/form-config/\":[{\"text\":\"基础配置\",\"items\":[{\"text\":\"Input输入框\",\"link\":\"/form-config/fields/text.md\"},{\"text\":\"Textarea文本域\",\"link\":\"/form-config/fields/textarea.md\"},{\"text\":\"InputNumber计数器\",\"link\":\"/form-config/fields/number.md\"},{\"text\":\"NumberRange数字范围\",\"link\":\"/form-config/fields/number-range.md\"},{\"text\":\"Display只读文本\",\"link\":\"/form-config/fields/display.md\"},{\"text\":\"Hidden隐藏域\",\"link\":\"/form-config/fields/hidden.md\"},{\"text\":\"Link链接\",\"link\":\"/form-config/fields/link.md\"},{\"text\":\"Checkbox多选框\",\"link\":\"/form-config/fields/checkbox.md\"},{\"text\":\"Radio单选框\",\"link\":\"/form-config/fields/radio.md\"},{\"text\":\"Switch开关\",\"link\":\"/form-config/fields/switch.md\"},{\"text\":\"Select选择器\",\"link\":\"/form-config/fields/select.md\"},{\"text\":\"Cascader级联选择器\",\"link\":\"/form-config/fields/cascader.md\"},{\"text\":\"ColorPicker颜色选择器\",\"link\":\"/form-config/fields/color-picker.md\"},{\"text\":\"DatePick日期选择器\",\"link\":\"/form-config/fields/date-picker.md\"},{\"text\":\"DateRangePick日期范围选择器\",\"link\":\"/form-config/fields/daterange-picker.md\"},{\"text\":\"DatetimePick日期时间选择器\",\"link\":\"/form-config/fields/datetime-picker.md\"},{\"text\":\"TimePick时间选择器\",\"link\":\"/form-config/fields/time-picker.md\"},{\"text\":\"TimeRangePick时间范围选择器\",\"link\":\"/form-config/fields/timerange-picker.md\"},{\"text\":\"DynamicField动态表单\",\"link\":\"/form-config/fields/dynamic-field.md\"}]},{\"text\":\"编辑器中可用配置\",\"items\":[{\"text\":\"Code代码编辑器\",\"link\":\"/form-config/editor-fields/code.md\"},{\"text\":\"CodeLink代码链接\",\"link\":\"/form-config/editor-fields/code-link.md\"},{\"text\":\"CodeSelect代码块选择器\",\"link\":\"/form-config/editor-fields/code-select.md\"},{\"text\":\"CodeSelectCol代码块选择列\",\"link\":\"/form-config/editor-fields/code-select-col.md\"},{\"text\":\"DataSourceSelect数据源选择器\",\"link\":\"/form-config/editor-fields/data-source-select.md\"},{\"text\":\"DataSourceFieldSelect数据源字段选择器\",\"link\":\"/form-config/editor-fields/data-source-field-select.md\"},{\"text\":\"DataSourceMethodSelect数据源方法选择器\",\"link\":\"/form-config/editor-fields/data-source-method-select.md\"},{\"text\":\"DataSourceFields数据源字段配置\",\"link\":\"/form-config/editor-fields/data-source-fields.md\"},{\"text\":\"DataSourceInput数据源输入框\",\"link\":\"/form-config/editor-fields/data-source-input.md\"},{\"text\":\"DataSourceMethods数据源方法配置\",\"link\":\"/form-config/editor-fields/data-source-methods.md\"},{\"text\":\"DataSourceMocks数据源Mock配置\",\"link\":\"/form-config/editor-fields/data-source-mocks.md\"},{\"text\":\"UISelect组件选择器\",\"link\":\"/form-config/editor-fields/ui-select.md\"},{\"text\":\"KeyValue键值对\",\"link\":\"/form-config/editor-fields/key-value.md\"},{\"text\":\"PageFragmentSelect页面片选择器\",\"link\":\"/form-config/editor-fields/page-fragment-select.md\"},{\"text\":\"EventSelect事件选择器\",\"link\":\"/form-config/editor-fields/event-select.md\"},{\"text\":\"DisplayConds显示条件配置\",\"link\":\"/form-config/editor-fields/display-conds.md\"},{\"text\":\"CondOpSelect条件操作选择器\",\"link\":\"/form-config/editor-fields/cond-op-select.md\"}]},{\"text\":\"布局配置\",\"items\":[{\"text\":\"布局\",\"link\":\"/form-config/layout.md\"}]},{\"text\":\"联动配置\",\"items\":[{\"text\":\"联动\",\"link\":\"/form-config/relate.md\"}]},{\"text\":\"表单校验\",\"items\":[{\"text\":\"表单校验\",\"link\":\"/form-config/rules.md\"}]},{\"text\":\"表单对比\",\"items\":[{\"text\":\"表单对比\",\"link\":\"/form-config/compare.md\"}]}],\"/runtime-api/\":[{\"text\":\"@tmagic/core\",\"items\":[{\"text\":\"App\",\"link\":\"/runtime-api/core/app\"},{\"text\":\"Node\",\"link\":\"/runtime-api/core/node\"},{\"text\":\"Page\",\"link\":\"/runtime-api/core/page\"},{\"text\":\"EventHelper\",\"link\":\"/runtime-api/core/eventHelper\"},{\"text\":\"Env\",\"link\":\"/runtime-api/core/env\"},{\"text\":\"IteratorContainer\",\"link\":\"/runtime-api/core/iteratorContainer\"},{\"text\":\"FlowState\",\"link\":\"/runtime-api/core/flowState\"},{\"text\":\"DevtoolApi\",\"link\":\"/runtime-api/core/devtoolApi\"},{\"text\":\"工具函数\",\"link\":\"/runtime-api/core/utils\"}]},{\"text\":\"@tmagic/data-source\",\"items\":[{\"text\":\"DataSourceManager\",\"link\":\"/runtime-api/data-source/dataSourceManager\"},{\"text\":\"DataSource\",\"link\":\"/runtime-api/data-source/dataSource\"},{\"text\":\"HttpDataSource\",\"link\":\"/runtime-api/data-source/httpDataSource\"},{\"text\":\"观察者数据类\",\"link\":\"/runtime-api/data-source/observedData\"},{\"text\":\"工具函数\",\"link\":\"/runtime-api/data-source/utils\"}]}]}},\"locales\":{},\"cleanUrls\":false,\"additionalConfig\":{}}");</script>
|
||
|
||
</body>
|
||
</html> |