mirror of https://github.com/halo-dev/halo-admin
				
				
				
			
				
					
						
							#### What type of PR is this? /kind feature #### What this PR does / why we need it: 添加功能更为全面的文章分类选择器,支持以下特性: 1. 按层级展示分类 2. 支持搜索 3. 选中结果支持显示层级 todo list: - [x] 样式整理 - [x] 支持创建新分类 #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/2670 Fixes https://github.com/halo-dev/halo/issues/2485 #### Screenshots: <img width="832" alt="image" src="https://user-images.githubusercontent.com/21301288/211768419-087d9727-1468-41a1-868a-62d90eef9cca.png"> <img width="858" alt="image" src="https://user-images.githubusercontent.com/21301288/211768478-dcc70d79-127b-42b0-ae44-e48a6a22273a.png"> #### Special notes for your reviewer: #### Does this PR introduce a user-facing change? ```release-note 重构 Console 端的文章分类选择器。 ```  | 
			||
|---|---|---|
| .. | ||
| README.md | ||
		
			
				
				README.md
			
		
		
			
			
				
				
			
		
	
	自定义 FormKit 输入组件
原由
目前在 Console 端的所有表单都使用了 FormKit,但 FormKit 内置的 Input 组件并不满足所有的需求,因此需要自定义一些 Input 组件。此外,为了插件和主题能够更加方便的使用系统内的一些数据,所以同样需要自定义一些带数据的选择组件。
使用方式
目前已提供以下类型:
code: 代码编辑器- 参数
- language: 目前支持 
yaml,html,css,javascript,json - height: 编辑器高度,如:
100px 
 - language: 目前支持 
 
- 参数
 attachment: 附件选择repeater: 定义一个对象集合,可以让使用者可视化的操作集合。menuCheckbox:选择一组菜单menuRadio:选择一个菜单menuItemSelect:选择菜单项postSelect:选择文章singlePageSelect:选择自定义页面categorySelect:选择分类- 参数
- multiple: 是否多选,默认为 
false 
 - multiple: 是否多选,默认为 
 
- 参数
 categoryCheckbox:选择多个分类tagSelect:选择标签- 参数
- multiple: 是否多选,默认为 
false 
 - multiple: 是否多选,默认为 
 
- 参数
 tagCheckbox:选择多个标签
在 Vue 单组件中使用:
<script lang="ts" setup>
const postName = ref("")
</script>
<template>
  <FormKit
    v-model="postName"
    placeholder="请选择文章"
    label="文章"
    type="postSelect"
    validation="required"
  />
</template>
在 FormKit Schema 中使用(插件 / 主题设置表单定义):
- $formkit: menuRadio
  name: menus
  label: 底部菜单组
Repeater
Repeater 是一个集合类型的输入组件,可以让使用者可视化的操作集合。
在 Vue SFC 中以组件形式使用:
<script lang="ts" setup>
const users = ref([])
</script>
<template>
  <FormKit
    v-model="users"
    type="repeater"
    label="Users"
  >
    <FormKit
      type="text"
      label="Full Name"
      name="full_name"
      validation="required"
    />
    <FormKit
      type="email"
      label="Email"
      name="email"
      validation="required|email"
    />
  </FormKit>
</template>
在 FormKit Schema 中使用:
- $formkit: repeater
  name: users
  label: Users
  items:
    - $formkit: text
      name: full_name
      label: Full Name
      validation: required
    - $formkit: email
      name: email
      label: Email
      validation: required|email
最终得到的数据类似于:
[
  {
    "full_name": "Jack",
    "email": "jack@example.com"
  },
  {
    "full_name": "John",
    "email": "john@example.com"
  }
]