跳转到内容

ProField ​

ProTable、ProDescriptions、表单字段共用的字段渲染器。mode="read" 展示值,edit / update 提供受控输入;Vue 通过 v-model 回传。

vue
<script setup lang="ts">
import { Input, Select } from 'antdv-next'
import { h, ref } from 'vue'
import {
  FieldMoney,
  ProConfigProvider,
  ProField,
  type ProValueTypeMap,
} from '@bubblesjs/antv-next-pro'

const mode = ref<'read' | 'edit' | 'update'>('read')
const title = ref('Hello Vue')
const amount = ref(1234.5)
const custom = ref('ABC')
const valueTypeMap: ProValueTypeMap = {
  uppercase: {
    render: (text) => String(text ?? '').toUpperCase(),
    formItemRender: (text, context) =>
      h(Input, {
        value: String(text ?? ''),
        'onUpdate:value': (value) => context.onChange(value),
      }),
  },
}
</script>

<template>
  <ProConfigProvider :value-type-map="valueTypeMap">
    <Select
      v-model:value="mode"
      :options="['read', 'edit', 'update'].map((value) => ({ label: value, value }))"
      style="width: 140px; margin-block-end: 16px"
    />
    <div style="display: grid; gap: 16px">
      <ProField v-model="title" value-type="text" :mode="mode" />
      <FieldMoney
        v-model="amount"
        locale="de-DE"
        custom-symbol="€"
        :mode="mode"
        :number-format-options="{
          currency: 'EUR',
          minimumFractionDigits: 2,
          maximumFractionDigits: 2,
        }"
      />
      <ProField v-model="custom" value-type="uppercase" :mode="mode" />
      <ProField
        :text="false"
        :value-enum="new Map([[false, { text: 'Disabled', status: 'Danger' }]])"
      />
    </div>
  </ProConfigProvider>
</template>

API ​

属性说明
text / modelValue / value展示或受控值;显式 modelValue 优先,其次 value、text
moderead(默认)、edit、update
readonly强制只读
valueType类型名称,或 { type, ...字段配置 };显式 fieldProps 覆盖同义配置
fieldProps原生控件配置;日期支持 format / valueFormat,金额支持 locale / customSymbol / numberFormatOptions
options / valueEnum标签与状态;支持 Map、状态 Success/Danger/Processing/Default/Warning 与颜色
request / params异步标签请求,读写模式均支持;不重复发送读写请求
debounceTime / proFieldKey / cacheForSwr请求防抖、共享键与缓存策略
render(text, context, dom) => VNodeChild,只读扩展
formItemRender同参数,编辑扩展;context.onChange(value) 回传受控值
copyable / ellipsis只读文本复制与省略配置
emptyText空值占位,默认 -,0 / false 保留
prefixCls / classes / styles实例前缀与 root/control 语义样式,支持对象和回调

公开 update:modelValue、change、requestError 事件,ref 的 refresh() 可重新加载选项。旧 renderFormItem 保留兼容,推荐 formItemRender。

42 个内置类型 ​

文本:text、password、textarea、code、jsonCode。数值:money、digit、digitRange、percent、progress、second。日期:date、dateWeek、dateMonth、dateQuarter、dateYear、dateTime、fromNow 及 dateRange、dateTimeRange、dateWeekRange、dateMonthRange、dateQuarterRange、dateYearRange。时间:time、timeRange。选项:select、checkbox、radio、radioButton、cascader、treeSelect、segmented。其余:rate、slider、switch、image、color、avatar、index、indexBorder、option。

index / indexBorder、option、avatar 在三种模式下始终展示。progress / second 编辑时为数字输入,fromNow 编辑时为日期时间,image 为 URL 输入,code / jsonCode 为多行文本。Schema 的 group / formList / formSet / divider / dependency 由 BetaSchemaForm 处理,直接作为 ProField 时不会生成输入框。

原子字段与金额 ​

FieldText、FieldSelect、FieldMoney、FieldDatePicker 等具名原子复用相同协议。FieldMoney 另外公开 locale、customSymbol、moneySymbol、numberFormatOptions、numberPopoverRender;默认两位小数,遵循 locale 的分组、小数符号和货币位置。numberPopoverRender=false 关闭编辑态金额提示。

vue
<FieldMoney
  :text="1234.5"
  locale="de-DE"
  custom-symbol="€"
  :number-format-options="{ currency: 'EUR' }"
/>

自定义类型与预加载 ​

通过 ProConfigProvider.valueTypeMap 注册 render / formItemRender。嵌套 Provider 按类型名继承,同名定义整体替换。示例中的 uppercase 类型可编辑并写回。

preloadProFieldValueType(type) 预加载内置类型,preloadAllProFieldValueTypes() 预加载全部内置类型;两者执行真实动态导入并复用请求 Promise,未知或自定义类型拒绝。当前根入口仍导出 ProField,预加载不代表每个 valueType 都有独立分包。

基于 MIT 许可发布