From 64b30fae7d99076fc51c6a15f2bf3942ec5b8d95 Mon Sep 17 00:00:00 2001 From: Takagi <1103069291@qq.com> Date: Wed, 27 Mar 2024 11:26:07 +0800 Subject: [PATCH] docs: add formkit verfiyForm documentation (#327) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 FormKit Schema 文档添加 verifyForm 的内容。相关改动查看 https://github.com/halo-dev/halo/pull/5464 /kind documentation ```release-note None ``` --- docs/developer-guide/form-schema.md | 77 +++++++++++++++++++++ static/img/formkit/formkit-verify-form.png | Bin 0 -> 18452 bytes 2 files changed, 77 insertions(+) create mode 100644 static/img/formkit/formkit-verify-form.png diff --git a/docs/developer-guide/form-schema.md b/docs/developer-guide/form-schema.md index 06f8126..744114a 100644 --- a/docs/developer-guide/form-schema.md +++ b/docs/developer-guide/form-schema.md @@ -67,6 +67,83 @@ spec: 除了 FormKit 官方提供的常用输入组件之外,Halo 还额外提供了一些输入组件,这些输入组件可以在 Form Schema 中使用。 +### verificationForm + +#### 描述 + +用于远程验证一组数据是否符合要求的组件。 + +#### 参数 + +- `action`:对目标数据进行验证的接口地址 +- `label`:验证按钮文本 +- `submitAttrs`:验证按钮的额外属性 + +#### 示例 + +```yaml +- $formkit: verificationForm + action: /apis/console.api.halo.run/v1alpha1/verify/verify-password + label: 账户校验 + children: + - $formkit: text + label: "用户名" + name: username + validation: required + - $formkit: password + label: "密码" + name: password + validation: required +``` + +:::tip +尽管 `verificationForm` 本身是一个输入组件,但与其他输入组件不同的是,它仅仅用于包装待验证的数据,所以并不会破坏原始数据的格式。例如上述示例中的值在保存后为: + +```json +{ + "username": "admin", + "password": "admin" +} +``` + +而不是 + +```json +{ + "verificationForm": { + "username": "admin", + "password": "admin" + } +} +``` + +::: + +示例中发送至验证地址的值为如下格式: + +```json +{ + "username": "admin", + "password": "admin" +} +``` + +当验证接口返回成功响应时,则验证通过,否则验证失败。 + +若用户在验证失败时想显示错误信息,可以在验证接口返回错误信息,该错误信息的结构定义需遵循 [RFC 7807 - Problem Details for HTTP APIs](https://datatracker.ietf.org/doc/html/rfc7807.html) 。例如: + +```json +{ + "title": "无效凭据", + "status": 401, + "detail": "用户名或密码错误。" +} +``` + +UI 效果: + + + ### repeater #### 描述 diff --git a/static/img/formkit/formkit-verify-form.png b/static/img/formkit/formkit-verify-form.png new file mode 100644 index 0000000000000000000000000000000000000000..b03ca1501bc768491258495a904f550d4552e093 GIT binary patch literal 18452 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

Q&gkr)u-mRL8QA7|Tf+jeX8aO)_* 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 Ua}QlwfVKzM*8j8Uk9&Xp7x>&yr2qf` literal 0 HcmV?d00001