Skip to content

表单数据选择器组件

概述

FormSelector 是一个表单数据选择器组件,用于从已发布的表单中选择数据记录,支持单选/多选,通过弹窗展示表单数据列表。

组件路径web/apps/web-ele/src/components/zq-form/form-selector/

组件名称FormSelector

功能特性

  • 从指定表单选择数据记录
  • 支持单选/多选模式
  • 复用 FormDataList 组件展示数据
  • 支持自定义值字段和显示字段
  • 标签折叠显示
  • 自动加载已选数据的标签信息

Props

属性类型默认值说明
modelValuestring | string[] | null-选中的记录值
formCodestring-表单编码(必填)
multiplebooleanfalse是否多选
placeholderstring'点击选择'占位符
disabledbooleanfalse是否禁用
clearablebooleantrue是否可清除
collapseTagsbooleanfalse是否折叠标签
maxCollapseTagsnumber1最大显示标签数
dialogTitlestring'选择数据'弹窗标题
dialogWidthstring'1200px'弹窗宽度
valueFieldstring'id'值字段名
labelFieldstring'name'显示字段名

Events

事件参数说明
update:modelValuestring | string[] | null值更新
changestring | string[] | null值变化
select-itemobject | object[] | undefined选中项完整数据

使用示例

单选数据

vue
<template>
  <FormSelector
    v-model="selectedId"
    form-code="customer"
    placeholder="请选择客户"
  />
</template>

<script setup>
import { ref } from 'vue';

const selectedId = ref('');
</script>

多选数据

vue
<template>
  <FormSelector
    v-model="selectedIds"
    form-code="product"
    :multiple="true"
    :collapse-tags="true"
    :max-collapse-tags="3"
    placeholder="请选择产品"
  />
</template>

<script setup>
import { ref } from 'vue';

const selectedIds = ref([]);
</script>

自定义字段

vue
<template>
  <FormSelector
    v-model="selectedCode"
    form-code="material"
    value-field="code"
    label-field="material_name"
    placeholder="请选择物料"
  />
</template>

<script setup>
import { ref } from 'vue';

const selectedCode = ref('');
</script>

获取选中项完整数据

vue
<template>
  <FormSelector
    v-model="selectedId"
    form-code="customer"
    @select-item="handleSelectItem"
  />
</template>

<script setup>
import { ref } from 'vue';

const selectedId = ref('');

function handleSelectItem(item) {
  console.log('选中的完整数据:', item);
  // 可以获取选中记录的所有字段
}
</script>

与表单设计器集成

在表单设计器中,该组件作为 form-selector 类型的表单项使用:

json
{
  "type": "form-selector",
  "field": "customer_id",
  "label": "客户",
  "props": {
    "formCode": "customer",
    "multiple": false,
    "valueField": "id",
    "labelField": "name",
    "clearable": true,
    "placeholder": "请选择客户"
  }
}

弹窗布局

弹窗内部复用 FormDataList 组件,展示表单的数据列表:

+----------------------------------------------------------+
|  选择数据                                            [X] |
+----------------------------------------------------------+
|  ┌────────────────────────────────────────────────────┐ |
|  │  [查询条件]                                        │ |
|  │  ┌──────────────────────────────────────────────┐ │ |
|  │  │ ☐ │ 名称      │ 编码      │ 状态   │ 创建时间│ │ |
|  │  │ ☑ │ 客户A     │ C001      │ 正常   │ 2024... │ │ |
|  │  │ ☐ │ 客户B     │ C002      │ 正常   │ 2024... │ │ |
|  │  └──────────────────────────────────────────────┘ │ |
|  └────────────────────────────────────────────────────┘ |
+----------------------------------------------------------+
|  已选 2 条                       [取消]  [确认]          |
+----------------------------------------------------------+

典型应用场景

  • 关联数据选择:选择关联的客户、供应商、产品等
  • 主从表关联:子表中选择主表数据
  • 数据引用:引用其他表单的数据记录
  • 级联选择:配合虚拟字段实现级联数据展示

Released under the MIT License.