npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sinsoft-common-form

v2.8.1

Published

参数介绍model

Readme

参数介绍model

表单 属性 | 参数 | 说明 | 类型 | 默认值 | |-----------|------------------------------------------------------------------------------------------|--------|--------| | v-model | 表单数据,双向绑定(字段需与 prop 属性一样) | Object | | | fieldList | 表单项配置列表 | Object | | | options | 属性labelPosition配置表单标签位置,isDisabled配置是否全部不可编辑,btnConfig配置按钮配置 | Object | |

表单项 配置属性

formItemList 配置属性 | 参数 | 说明 | 类型 | 默认值 | 必填项 | |-----------|------------------------------------------------------------------------------------------|--------|--------|--------| | type | 表单项类型 | String | | 是 | | label | 表单项标签名 为空的时候不显示但是标签高度在 | String | | 否 | | required | 是否显示标签名右边的*星号 | Boolean | | 否 | | disabled | 是否可编辑 | Boolean | | 否 | | field | 表单项字段 | String | | 是 | | rules | 表单验证规则 | Object | | 否 | | style | 表单项样式,可以在已有布局的基础上自定义宽度等样式 | String | | 否 | | options | 下拉、多选、单选必配置项,配置选项数据data数组 单项和多选属性:isDisabled 单项是否禁用 | Object | | 是 | | ways | 单选和多选的选项是横向排列row还是竖向排列column | String | | 否 | | prepend | 输入框前置内容 | String | | 否 | | append | 输入框后置内容 | String | | 否 | | isHide | 表单项是否显示 | Boolean | | 否 | | tipsBlow | 下拉框下的灰色提示 | String | | 否 | | tipsBlowStyle | 下拉框下的灰色提示样式 | String | | 否 | | maxlength | 最大输入长度 | string/ number | | 否 | | maxlengthNameEnFamily | 英文姓最大输入长度 | string/ number | | 否 | | maxlengthNameEn | 英文名最大输入长度 | string/ number | | 否 | | maxlengthNameChFamily | 中文姓最大输入长度 | string/ number | | 否 | | maxlengthNameCh | 中文名最大输入长度 | string/ number | | 否 | | isReadonlyNameEnFamily | 英文姓是否只读样式 | Boolean | | 否 | | isReadonlyNameEn | 英文名是否只读样式 | Boolean | | 否 | | isReadonlyNameChFamily | 中文姓是否只读样式 | Boolean | | 否 | | isReadonlyNameCh | 中文名是否只读样式 | Boolean | | 否 | | rows | 输入框行数,仅 type 为 'textarea' 时有效 | String | | 否 | | autosize | textarea 高度是否自适应,仅 type 为 'textarea' 时生效。 可以接受一个对象,比如: { minRows: 2, maxRows: 6 } | Object | | 否 | | disabledDate |一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。 | function(Date) | | 否 | | xs | 在小屏幕设备上的列宽,小于 576px的屏幕宽度 | Number | 24 | 否 | | sm | 在中等屏幕设备上的列宽,介于 576px 和 768px 之间的屏幕宽度 | Number | 24 | 否 | | md | 在大屏幕设备上的列宽,介于 768px 和 992px 之间的屏幕宽度 | Number | 8 | 否 | | lg | 在更大屏幕设备上的列宽,介于 992px 和 1200px 之间的屏幕宽度 | Number | 8 | 否 | | xl | 在最大屏幕设备上的列宽,大于等于 1200px 的屏幕宽度 | Number | 8 | 否 | | slotItemName | 表单项插槽名 | String | | 否 | | slotLabelName | 标签插槽名 | String | | 否 | | showWordLimit | 是否显示统计字数, 只在 type 为 'text' 或 'textarea' 的时候生效 | Boolean | | 否 | | showTo | 是否显示中间字段,并且传国际化的值如'to', 只在 type 为 'date' 的时候生效 | String | | 否 | | widthNation | 国家下拉宽度, 只在 type 为 'phone' 的时候生效 如300px | String | | 否 | | widthArea | 地区下拉宽度, 只在 type 为 'phone' 的时候生效 如300px | String | | 否 | | isReadonlyNation | 国家号是否只读样式 | Boolean | | 否 | | isReadonlyArea | 地区号是否只读样式 | Boolean | | 否 | | isReadonlyPhoneNumber | 手机号是否只读样式 | Boolean | | 否 | | isReadonly | 表单项是否只读样式 | Boolean | | 否 | | openDisabled | 表单项是否在全部禁用的时候打开,true为打开 | Boolean | false | 否 |

Form 方法

| 事件名 | 说明 | 回调参数 | |------------------------|--------------------------|------------------------------| | submit等在按钮中配置的方法名 | 点击确认按钮拿到表单数据 | mode表单数据、code按钮编码 | | selectChange | 下拉选项点击触发方法 | code点击项对应编码,field对应字段 | | radioChange | 单选选项点击触发方法 | code点击项对应编码,field对应字段 | | checkChange | 多选选项点击触发方法 | code点击项对应编码,field对应字段 | | dateChange | 日期点击触发方法 | date对应选择日期,field对应字段 | | inputBlur | 当选择器的输入框失去焦点时触发 | val输入对应事件,field对应字段 | | inputFocus | 当选择器的输入框获得焦点时触发 | val输入对应事件,field对应字段 | | inputChange | 仅当 modelValue 改变时,当输入框失去焦点或用户按Enter时触发 | val输入对应事件,field对应字段 | | inputInput | 在 Input 值改变时触发 | val输入对应事件,field对应字段 |

Form 暴露的对象

| 对象名 | 说明 | |------------------------|----------------------| | formRef | 表单校验ref |

Slots 插槽

| 插槽名 | 说明 | |------------------------|--------------------------| | slotItemName(自己定义) | 表单类型type为slotItem时,在表单中组件标签中加插槽内容。v-model绑定的字段,需要和表单项中filed定义的名字一样才能校验成功。 | | buttons | 如果不使用默认的按钮可以使用插槽自定义内容, 插槽返回的model就是当前表单的数据,插槽返回的onBtnClick是表单提交方法,参数一code:按钮组件编码,参数二true or false:是否校验表单参数三'methodName'方法名自己取名定义,对应表单触发方法 |

btnConfig 配置

| 属性名 | 类型 | 说明 | 类型 | 默认值 | |----------------|------------|---------------------------|-------------------|---------------------| | isShow | boolean | "false"| 控制按钮是否显示。可选值: "true" 或 "false"。默认值为 "true"。| | plain | Boolean | 固定白色背景,红色文字(普通提交按钮) | 否 | false | | info | Boolean | 灰色背景 白色字体(置灰状态按钮) | 否 | false | | text | Boolean | 纯文字,带有宽度。 | 否 | false | | link | Boolean | 纯文字 无宽度,a链接式。 无任何背景颜色。 | 否 | false | | default | Boolean | 白色背景 深灰色字体(重置按钮) | 否 | false | | loading | Boolean | loading是否开启 | 否 | false | | height | String | 按钮高度 | 否 | '' | | Width | String | 按钮宽度 | 否 | '' | | color | String | 字体颜色(部分状态文字颜色可控制边框颜色) | 否 | '' | | circle | String | 圆角 | 否 | '' | | bgColor | String | 按钮背景颜色 | 否 | | | borderColor | String | 边框颜色(未设置相应同步字体颜色) | 否 | '' | | borderStyle | String | 边框类型 | 否 | solid | | borderWidth | String | 边框宽度 | | 1px | | loadingColor | String | loading icon颜色 | 否 | #333333 灰色 | | icon | String | icon名称及url | 否 | false | | loading | Boolean | loading是否开启 | 否 | false | | size | Number,String | icon大小 | 否 | auto | | fontSize | String | 字体大小 | | '' | | fontWeight | Number | 字体粗细 | | 500 | | btnCode | | code编码 | 是(存在请求) | | | style | object | 按钮样式对象。默认值为空对象 {}。 | | | | debounced | Boolean | 开启防抖 | 否 | false |

参考用例:

<template>
  <SinosoftCommonForm
    ref="formf"
    :fieldList="fieldList"
    :model="model"
    :options="options"
    @create="handleBaseSubmit"
    @cancel="cancelClick"
    @next="handleBaseNext"
    @nextttt="handleBaseSubmit"
    @last="handleLastClick"
    @selectChange="selectChange"
    @radioChange="radioChange"
    @checkChange="checkChange"
    @dateChange="dateChange"
    @inputBlur="inputBlur"
  >
    <!-- 小项插槽示例 -->
    <template v-slot:slotItemName1>
      <div @click="slotClick">
                      <el-input
                  v-model="model.testSlotValue"
                >
                </el-input>
      </div>
    </template>
    <template v-slot:slotItemName2>
      <div>{{  }}</div>
    </template>
    <!-- label插槽示例 -->
    <template v-slot:slotLabelNameTest>
      <div>{{ 'hhhahah' }}</div>
    </template>
    <!-- 如果不使用默认的按钮可以使用插槽自定义内容, 插槽返回的model就是当前表单的数据 -->
    <!-- <template #buttons="{ onBtnClick, model }">
      <sinosoft-common-button
        :size="15"
        :width="'90px'"
        :btnCode="''"
        @handleClick="
          (code) => {
            onBtnClick(code, true, 'next'); //,参数一code:按钮组件编码,参数二true or false:是否校验表单,
            //参数三'methodName'方法名自己取名定义,对应表单方法。如本次’next'触发@next对应的方法
          }
        "
        :style="''"
      >
        {{ "下一步" }}
      </sinosoft-common-button>
    </template> -->
  </SinosoftCommonForm>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from "vue";
import { default as SinosoftCommonForm } from "../package/Index.vue";
import type { FormInstance } from "element-plus";
const formf = ref<FormInstance>();
const slotClick = () => {
  console.log(formf.value, formf.value.formRef);
  // formf.value.formRef.resetFields('others');
  formf.value.resetFieldsTest();
};
const fieldList = reactive<Form.FormItem[]>([
  { type: "title", title: "Client Information", xl: 24 },
  {
    type: "select",
    // labelStyle: '',
    required: false,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "jobbbbb",
    // labelStyle: 'height: 22px',
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "吃饭", code: "1" },
        { name: "睡觉", code: "2" },
        { name: "写代码", code: "3" },
      ],
    },
    xs:24,// 每行的表单项该属性值之和等于24
    sm:24,// 每行的表单项该属性值之和等于24
    md:8,// 每行的表单项该属性值之和等于24
    lg:8,// 每行的表单项该属性值之和等于24
    xl:24,// 每行的表单项该属性值之和等于24
  },
  {
    type: "slotItem",
    label: "插槽例1",
    isHide: false,
    field: "testSlotValue",
    slotItemName: "slotItemName1",
    required: true,
    rules: [{ required: false, message: "slotItemName is required" }],
    xl: 6,
  },
  {
    type: "select",
    label: "Non-Sales Meeting Type",
    isHide: false,
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "jobe",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "吃饭", code: "1" },
        { name: "睡觉", code: "2" },
        { name: "写代码", code: "3" },
      ],
    },
    xl: 6,
  },
  {
    type: "input",
    // label: "Othders",
    field: "others",
    required: false,
    disabled: false,
    isHide: false,
    prepend: 'prepend',
    // slotLabelName: 'slotLabelNameTest',
    append: 'append',
    rules: [{ required: true, message: "只读 is required" }],
    placeholder: "Others",
    xl: 6,
  },
  {
    type: "name",
    label: "姓名",
    required: true,
    span: 24,
    maxlength: 9,
    disabled: false,
    isHide: false,
    field: {
      nameEnFamily: "nameEnFamily",
      nameEn: "nameEn",
      nameChFamily: "nameChFamily",
      nameCh: "nameCh",
    },
    rules: {
      nameEnFamily: [{ required: true, message: "11 is required" }],
      nameEn: [{ required: true, message: "22 is required" }],
      nameChFamily: [{ required: true, message: "33 is required" }],
      nameCh: [{ required: true, message: "44 is required" }],
    },
    placeholderNameChFamily: "請輸入中文姓",
    placeholderNameEnFamily: "請輸入英文姓",
    placeholderNameEn: "請輸入英文名",
    placeholderNameCh: "請輸入中文名",
    xl: 24,
  },
  {
    type: "input",
    maxlength: 9,
    label: "inputinputinputinputinputinputf",
    labelStyle: "height:66px",
    required: false,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    style: "",
    placeholder: "Please select gender",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label:
      "inputinputinputinpinputinputinpu tinputinpuinputinputputinpuinputinputtinputin pututinput",
    required: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    style: "",
    placeholder: "Please enter HKID",
    xl: 12,
  },
  {
    type: "date",
    label: "Date of Birth",
    required: true,
    field: "datedd",
    rules: [{ required: false, message: "日期 is required" }],
    placeholder: "DD/MM/YYYY",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "HKID",
    required: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter HKID",
    xl: 12,
  },
  {
    type: "date",
    label: "Date of Birth",
    required: true,
    field: "datedd",
    rules: [{ required: false, message: "日期 is required" }],
    placeholder: "DD/MM/YYYY",
    xs:12,
    sm:12,
    md:12,
    lg:12,
    xl: 12,
    showTo: 'to'
  },
  {
    type: "date",
    label: "Date of Birth",
    required: true,
    field: "datedd",
    rules: [{ required: false, message: "日期 is required" }],
    placeholder: "DD/MM/YYYY",
    xs:12,
    sm:12,
    md:12,
    lg:12,
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "HKID",
    required: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter HKID",
    xl: 12,
  },
  {
    type: "select",
    label: "Country of birth",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Country",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "吃饭", code: "1" },
        { name: "睡觉", code: "2" },
        { name: "写代码", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "select",
    label: "City of birth",
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "birth",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "吃饭", code: "1" },
        { name: "睡觉", code: "2" },
        { name: "写代码", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "select",
    label: "Nationality",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Nationality",
    placeholder: "Please select country of birth",
    style: "width:33%;padding-right: 0px",
    tipsBlow: "tipsBlow tipsBlo ddaf ",
    tipsBlowStyle: "width:500px",
    options: {
      data: [
        { name: "吃饭", code: "1" },
        { name: "睡觉", code: "2" },
        { name: "写代码", code: "3" },
      ],
    },
    xl: 24,
  },
  { type: "line", xl: 24 },
  { type: "title", title: "Client Information", xl: 24 },
  {
    type: "phone",
    label: "Phone No. (Mobile)",
    maxlength: 9,
    required: true,
    rules: {
      phoneNumber: [{ required: true, message: 'phoneNumber1 is required' }],
    },
    field: { nationCode: "nationCode",areaCode: "areaCode", phoneNumber: "phoneNumber" },
    disabled: false,
    placeholder: "请输入手机号码",
    nationOptions: {
      placeholder: "",
      data: [
        { name: "852", code: "1" },
        { name: "654", code: "2" },
        { name: "765", code: "3" },
      ],
    },
    areaOptions: {
      placeholder: "",
      data: [
        { name: "+852", code: "1" },
        { name: "+654", code: "2" },
        { name: "+765", code: "3" },
      ],
    },
    xs: 24, // 小于 576px的屏幕宽度
    sm: 24, // 介于 576px 和 768px 之间的屏幕宽度
    md: 12, // 介于 768px 和 992px 之间的屏幕宽度
    lg: 12, // 介于 992px 和 12px 之间的屏幕宽度
    xl: 12, // 大于等于 1200px 的屏幕宽度
  },
  {
    type: "phone",
    label: " Phone No. (Residence)",
    required: true,
    rules: [{ required: true, message: "phoneNumber1 is required" }],
    field: { nationCode: "nationCode",areaCode: "areaCode", phoneNumber: "phoneNumber" },
    disabled: false,
    placeholder: "请输入手机号码",
    nationOptions: {
      placeholder: "",
      data: [
        { name: "852", code: "1" },
        { name: "654", code: "2" },
        { name: "765", code: "3" },
      ],
    },
    areaOptions: {
      placeholder: "",
      data: [
        { name: "+852", code: "1" },
        { name: "+654", code: "2" },
        { name: "+765", code: "3" },
      ],
    },
    xs: 24, // 小于 576px的屏幕宽度
    sm: 24, // 介于 576px 和 768px 之间的屏幕宽度
    md: 12, // 介于 768px 和 992px 之间的屏幕宽度
    lg: 12, // 介于 992px 和 12px 之间的屏幕宽度
    xl: 12, // 大于等于 1200px 的屏幕宽度
  },
  {
    type: "input",
    maxlength: 9,
    label: "Email Address",
    required: true,
    field: "readonly",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "这是一个只读输入框",
    xl: 8,
  },
  {
    type: "checkboxRadio",
    label: "Preferred Language - Written and Communication Preference ",
    required: true,
    field: "Preferred",
    rules: [{ required: false, message: "多选 is required" }],
    ways: "column",
    options: {
      data: [
        { name: "Cantonese", code: "0" },
        { name: "Mandarin", code: "2" },
        { name: "English", code: "3" },
        { name: "English", code: "3" },
        { name: "English", code: "3" },
        { name: "English", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "checkbox",
    label: "Preferred Language - Written and Communication Preference ",
    required: true,
    field: "Language",
    rules: [{ required: false, message: "多选 is required" }],
    ways: "row",
    options: {
      data: [
        { name: "Cantonese", code: "0", isDisabled: true },
        { name: "Mandarin", code: "2" },
        { name: "English", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "radioNote",
    label: "",
    required: true,
    field: "radioValue",
    labelBefore: "Preferred Appointment Notification Channel",
    rules: [{ required: false, message: "单选 is required" }],
    options: {
      data: [
        { name: "SMS", code: "1" },
        { name: "Email", code: "0" },
      ],
    },
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Email Address",
    required: true,
    field: "readonly",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "这是一个只读输入框",
    xl: 12,
  },
  { type: "line", required: true, xl: 24 },
  { type: "title", title: "Current Residential Address", xl: 24 },
  {
    type: "radio",
    label: "",
    required: false,
    field: "radioValue",
    rules: [{ required: false, message: "单选 is required" }],
    options: {
      data: [
        { name: "Chinese address", code: "1" },
        { name: "English address ", code: "0" },
      ],
    },
    xl: 24,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Flat",
    required: true,
    field: "addressFlat",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter flat",
    xl: 24,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Floor",
    required: true,
    field: "addressFloor",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 24,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Block",
    required: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    style: "width:33%;padding-right: 0px;",
    placeholder: "Please enter Block",
    xl: 24,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Building",
    required: true,
    field: "addressBuild",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Estate",
    required: true,
    field: "addressBlock",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter Block",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Street Number and Street Name",
    required: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 12,
  },
  {
    type: "select",
    label: "District/ Region",
    required: true,
    disabled: false,
    field: "Region",
    placeholder: "Please select country of birth",
    rules: [{ required: false, message: "下拉 is required" }],
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "select",
    label: "Area",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Region",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 8,
  },
  {
    type: "select",
    label: "City",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Region",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 8,
  },
  {
    type: "select",
    label: "Country or Territory",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Region",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 8,
  },
  {
    type: "select",
    label: "Country or Territory",
    required: true,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Region",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 24,
  },
  { type: "line", style: "width: 100%;", xl: 24 },
  // {
  //   type: "slotItem",
  //   label: "插槽例2",
  //   field: "value2",
  //   slotItemName: "slotItemName2",
  //   required: true,
  //   rules: [{ required: false, message: "slotItemName is required" }],
  //   xl: 8,
  // },
  {
    type: "select",
    label: "Occupation Status",
    required: false,
    disabled: false,
    rules: [{ required: false, message: "下拉 is required" }],
    field: "Region",
    placeholder: "Please select country of birth",
    options: {
      data: [
        { name: "1", code: "1" },
        { name: "2", code: "2" },
        { name: "3", code: "3" },
      ],
    },
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Nature of Business",
    required: false,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Nature of Business",
    required: false,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 12,
  },
  {
    type: "input",
    maxlength: 9,
    label: "Nature of Business",
    required: false,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    placeholder: "Please enter floor",
    xl: 12,
  },
  {
    type: "textarea",
    label: "Other occupation/title",
    required: false,
    maxlength: 200,
    showWordLimit: true,
    field: "Gender",
    rules: [{ required: false, message: "只读 is required" }],
    rows: 2,
    autosize: { minRows: 5, maxRows: 6 },
    placeholder: "Please enter floor",
    xl: 24,
  },
  { type: "line", style: "width: 100%;", xl: 24 },
]);
// 配置项
const options = reactive<Form.Options>({
  labelPosition: "top", //表单标签位置
  isDisabled: false,
  btnConfig: [
    //表单按钮配置
    {
      isShow: true,
      name: "Create",
      emitName: "create",
      btnCode: "11111",
      size: "90px",
      isRule: false,
      style: "margin-right: 30px",
      debounced: true,
    },
    {
      isShow: true,
      name: "上一步",
      emitName: "last",
      size: "90px",
      btnCode: "11111",
      isRule: true,
      // style: 'margin-right: 30px'
    },
    {
      isShow: true,
      name: "重置",
      emitName: "reset",
      size: "90px",
      btnCode: "11111",
      isRule: false,
      style: "margin-right: 30px",
    },
    {
      isShow: true,
      plain: "",
      name: "确认",
      emitName: "nextttt",
      btnCode: "001",
      size: 15,
      primary: "primary",
      info: "",
      text: "",
      link: "",
      loading: true,
      width: "100px",
      height: "50px",
      circle: "circle",
      color: "#3333",
      bgColor: "#6666",
      borderColor: "#336699",
      borderStyle: "solid",
      borderWidth: "1px",
      fontSize: "16px",
      fontWeight: 500,
      class: "custom-class",
      loadingColor: "#FFFFFF",
      icon: "",
      isRule: true,
      style: "width: 700px;",
    },
    // {
    //   isShow: true,
    //   name: '下一步',
    //   emitName: 'next',
    //   btnCode: '11111',
    //   size: '90px',
    //   isRule: false,
    //   style: 'margin-right: 30px'
    // },
  ],
});
const model = ref<Record<string, any>>({
  // 地址项字段
  testSlotValue: '',
  addressBlock: "1",
  addressBuild: "ww",
  addressCity: "wd",
  addressFlat: "d",
  addressFloor: "d",
  addressHouse: "d",
  addressLaguage: "d",
  addressNation: "d",
  addressNo: "d",
  addressRegion: "d",
  addressStreet: "dqqqq",
  addressSubregion: "d",
  addressType: "",
  //
  systemLaguage: "",
  value1: "",
  addressMansion: "",
  block: "",
  floor: "",
  flat: "",
  addressLang: "1",
  addressArea: "",
  addressAreaC: "",
  datedd: "",
  // 姓名项字段
  nameEnFamily: "",
  // nameEn: '',
  // nameChFamily: '',
  // nameCh: '',
  // 单选字段
  radioValue: "",
  // 性别字段
  gender: 1,
  // 多选字段
  hobbies: [1],
  // 下拉字段
  Nationality: "",
  jobe: "",
  // 密码字段
  password: "",
  // 只读字段
  readonly: "只读输入框",
  // 日期字段
  // date: new Date(2000, 1, 1, 12, 0, 0),
  date: "",
  // 留言板字段
  summary: "",
  // 地址插槽字段
  addressRadioV: "2q",
  // 手机输入字段
  areaCode: "+998",
  phoneNumber: "",
  // value2
  value2: "",
});
/**
 * 注意: model数据模型非必填项,如果仅仅是用于数据收集,model参数可以不用填,表单的submit事件会返回所有搜集的数据对象
 *       如果是编辑的情况下,页面需要回显数据,则model数据模型必须要填写
 */
const handleBaseSubmit = (model: Record<string, any>, code: any) => {
  console.log("handleBaseSubmit", model, code);
};
const handleLastClick = (model: Record<string, any>, code: any) => {
  console.log("handleLastClick", model, code);
};
const cancelClick = (model: Record<string, any>, code: any) => {
  console.log("cancleClick", model, code);
};
const handleBaseNext = (model: Record<string, any>, code: any) => {
  console.log("handleBaseNextClick", model, "fff", code, "ff");
};
const selectChange = (code: any, field: any) => {
  console.log("ssssssss", code, field);
};
const radioChange = (code: any, field: any) => {
  console.log("radioChange", code, field);
};
const checkChange = (code: any, field: any) => {
  console.log("checkChange", code, field);
};
const dateChange = (date: string, field: string) => {
  console.log("dateChange", date, field);
};
const inputBlur = (val: string, field: string) => {
  console.log("inputBlur", val, field);
};
</script>
<style lang="scss" scoped></style>

<!-- 表单域名配置列表示例 -->
<script>
// 自定义验证邮箱方法
const checkEmail = (rule: any, value: any, callback: any) => {
  if (!value) callback(new Error('Please input the email'))
  const regExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(com|cn|net)$/
  regExp.test(value) ? callback() : callback(new Error('Please input the correct email address'))
}
// 表单配置示例
export const exampleForm = {
// 基本全部表单项配置示例
  baseForExample: [
    // 标题项
    { title: '标题内容', type: 'title',  },
    // 姓名项
    {
      label: '姓名项',
      type: 'name',
      required: true,
      disabled: false,
      field: {
        nameEnFamily: 'nameEnFamily',
        nameEn: 'nameEn',
        nameChFamily: 'nameChFamily',
        nameCh: 'nameCh'
      },
      rules: {
        nameEnFamily: [{ required: true, message: '11 is required' }],
        nameEn: [{ required: true, message: '22 is required' }],
        nameChFamily: [{ required: true, message: '33 is required' }],
        nameCh: [{ required: true, message: '44 is required' }],
      },
      placeholderNameChFamily: '請輸入中文姓',
      placeholderNameEnFamily: '請輸入英文姓',
      placeholderNameEn: '請輸入英文名',
      placeholderNameCh: '請輸入中文名',
    },
    // 单选项
    {
      type: 'radio',
      label: '单选项',
      required: true,
      disabled: false,
      field: 'radioValue',
      rules: [{ required: true, message: '单选 is required' }],
      style: 'width: 100%',
      options: { data: [{ name: 'Chinese address', code: 1 }, { name: 'English address ', code: 0 }] }
    },
    // 单选项(带后缀说明)
    {
      type: 'radioNote',
      label: '单选(带后缀说明)',
      required: true,
      disabled: false,
      field: 'radioValue',
      labelBefore: 'Preferred Appointment Notification Channel',
      labelNode: ' (Note: The notifications will be sent to the first contact number you entered.)',
      style: 'width: 100%',
      rules: [{ required: true, message: '单选 is required' }],
      options: { data: [{ name: 'SMS', code: 1 }, { name: 'Email', code: 0 }] }
    },
    // 性别项
    {
      type: 'gender',
      label: '性别',
      required: true,
      disabled: false,
      field: 'gender',
      style: 'width: 100%',
      rules: [{ required: true, message: '性别 is required' }],
      options: { data: [{ name: '男', code: "F" }, { name: '女', code: "M" }] }
    },
    // 多选项
    {
      type: 'checkbox',
      label: '多选项',
      required: true,
      disabled: false,
      field: 'hobbies',
      style: 'width: 100%',
      rules: [{ required: true, message: '多选 is required' }],
      ways: 'column', //column or row
      options: { data: [{ name: 'Cantonese', code: 1 }, { name: 'Mandarin', code: 2 }, { name: 'English', code: 3 }] }
    },
    // 多选样式单选
    {
      type: "checkboxRadio",
      label: "多选样式单选 ",
      required: true,
      field: "Preferred",
      rules: [{ required: true, message: "多选 is required" }],
      ways: "row", //column or row
      options: {
        data: [
          { name: "Cantonese", code: '0' },
          { name: "Mandarin", code: '2' },
          { name: "English", code: '3' },
        ],
      },
    },
    // 下拉项
    {
      type: 'select',
      label: '下拉项',
      required: true,
      disabled: false,
      field: 'Region',
      placeholder: 'Please select country of birth',
      style: 'width:49%;padding-right: 0px;',//一行两个右边项的样式
      rules: [{ required: true, message: '下拉 is required' }],
      options: { data: [{ name: '1', code: 1 }, { name: '2', code: 2 }, { name: '3', code: 3 }] }
    },
    // 密码项
    {
      type: 'input',
      label: '密码',
      required: true,
      disabled: false,
      field: 'password',
      prepend: 'prepend',
      append: 'hdk',
      style: 'width:49%;padding-right: 0px;',//一行两个右边项的样式
      placeholder: '这是一个密码输入框',
      showPassword: true,
      rules: [{ required: true, message: '密码 is required' }],
    },
    // 只读项
    {
      type: 'input',
      label: '只读',
      required: true,
      disabled: false,
      field: 'readonly',
      rules: [{ required: true, message: '只读 is required' }],
      readonly: true,
      placeholder: '这是一个只读输入框'
    },
    // 日期项
    {
      type: 'date',
      label: '日期',
      required: true,
      disabled: false,
      field: 'date',
      rules: [{ required: true, message: '日期 is required' }],
      style: 'width:51%;padding-right: 20px;',//一行两个左边项的样式
      placeholder: 'DD/MM/YYYY',
      disabledDate:  (val: Date) => {
          return val.getTime() > new Date().getTime()
      },
    },
    // 日期选择项
  {
    type: "date",
    label: "Date of Birth",
    required: true,
    field: "datedd",
    rules: [{ required: false, message: "日期 is required" }],
    placeholder: "DD/MM/YYYY",
    xs:12,
    sm:12,
    md:12,
    lg:12,
    xl: 12,
    showTo: 'to'
  },
  {
    type: "date",
    label: "Date of Birth",
    required: true,
    field: "datedd",
    rules: [{ required: false, message: "日期 is required" }],
    placeholder: "DD/MM/YYYY",
    xs:12,
    sm:12,
    md:12,
    lg:12,
    xl: 12,
  },
    {
      type: 'daterange',
      label: '日期选择',
      required: true,
      disabled: false,
      field: 'dateRange',
      rules: [{ required: true, message: '日期 is required' }],
      startPlaceholder: '请选择开始日期',
      endPlaceholder: '请选择结束日期'
    },
    // 文本框项
    {
      type: 'textarea',
      label: '文本框',
      required: true,
      disabled: false,
      // rows: 5,
      autosize:{
        minRows: 2, maxRows: 6 
      }
      rules: [{ required: true, message: '文本框 is required' }],
      field: 'summary',
      placeholder: '文本框'
    },
    // 手机号码项
    {
      type: 'phone',
      label: '手机号码',
      required: true,
      disabled: false,
      field: {
        areaCode: 'areaCode',
        phoneNumber: 'phoneNumber'
      },
      style: 'width:33.5%;padding-right: 20px;',
      placeholder: '请输入手机号码',
      rules: {
        phoneNumber: [{ required: true, message: 'phoneNumber1 is required' }],
      },
      options: { placeholder: '', data: [{ name: '+852', code: 1 }, { name: '+654', code: 2 }, { name: '+765', code: 3 }] }
    },
    // LINE 横向线
    {
      type: 'line',
      style: 'width: 100%;',
    },
    // 插槽项
    {
      type: "slotItem",
      label: "插槽例1",
      field: "value1",
      slotItemName: 'slotItemName1',
      required: true,
      rules: [{ required: true, message: "slotItemName is required" }],
    },
  ],
  // 其他示例
  customkeyForm: [
    { label: '标题', field: 'name' },
    { label: '性别', field: 'gender', type: 'radio', options: { labelkey: 'title', valueKey: 'val', data: [{ title: '男', val: 1 }, { title: '女', val: 0 }] } }
  ],
  // 带自定义校验
  ruleForm: [
    { label: '姓名', field: 'name', rules: [{ required: true, message: 'name is required' }] },
    { label: '邮箱', field: 'email', rules: [{ required: true, validator: checkEmail }] }
  ]
} as Record<string, Form.FieldItem[]>
</script>