AvueAvue
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
  • Form属性文档
  • Object对象用法
  • Input 输入框
  • InputOtp 一次性密码输入
  • Number 数字输入框
  • Select选择框
  • Cascader级联选择器
  • Checkbox多选框
  • Radio单选框
  • Date日期
  • Time 时间
  • Switch开关
  • Upload附件上传
  • Title标题
  • Array数组框
  • Dynamic子表单
  • Tree树型选择框
  • Icon图标选择器
  • Table表格选择器
  • Map坐标选择器
  • Color颜色选择器
  • Input Cron Cron表达式编辑器
  • InputTag 输标签输入框
  • Mention 提及框
  • Rate评价
  • Slider滑块
  • 表单布局
  • 表单验证
  • 表单默认值
  • 表单操作按钮
  • 表单自定义
  • 表单数据字典
  • 表单多级联动
  • 表单数据格式
  • 表单组件事件
  • 表单高级用法

表单操作按钮

提交按钮

效果预览可直接操作下方示例

submit 是校验通过后的事件,参数为 (form, done)。输入用户名并提交,结果区显示本地保存内容;实际业务在请求成功或失败后通过 finally 调用 done() 结束提交状态。

正在加载示例…
<template>
  <avue-form :option="option" v-model="form" @submit="handleSubmit" @error="handleError" />
  <pre>{{ JSON.stringify(result, null, 2) }}</pre>
</template>

<script setup>
import { ref } from 'vue';
const form = ref({ username: '' });
const result = ref(null);
const option = {
  column: [{ label: '用户名', prop: 'username', span: 24,
    rules: [{ required: true, message: '请输入用户名', trigger: 'blur' }] }],
};
async function handleSubmit(values, done) {
  try {
    // Replace this local operation with your request function.
    const saved = await Promise.resolve({ ...values });
    result.value = { success: true, saved };
  } catch (error) {
    result.value = { success: false, message: String(error) };
  } finally {
    done();
  }
}
function handleError(errors) {
  result.value = { success: false, invalidFields: Object.keys(errors) };
}
</script>

清空按钮

效果预览可直接操作下方示例

reset-change方法为表单清空按钮回调

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"
             @reset-change="handleReset"></avue-form>
</template>

<script setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';

const form = ref({});
const option = ref({
  column: [{
    label: "用户名",
    prop: "username"
  }]
});

const handleReset = () => {
  ElMessage.success('清空成功回调');
};
</script>

隐藏按钮

效果预览可直接操作下方示例

利用submitBtn和emptyBtn属性去隐藏按钮

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"></avue-form>
</template>

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

const form = ref({});
const option = ref({
  submitBtn: false,
  emptyBtn: false,
  column: [
    {
      label: "用户名",
      prop: "username"
    }
  ]
});
</script>

按钮文案

效果预览可直接操作下方示例

利用 submitText 和 emptyText 设置按钮文案

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"></avue-form>
</template>
<script setup>
import { ref } from 'vue';
const form = ref({});
const optipn = ref({
  submitText: '完成',
  emptyText: '取消',
  column: [{
    label: "用户名",
    prop: "username"
  }]
})
</script>

行内按钮

效果预览可直接操作下方示例

利用列的span属性和menuSpan属性达到行内表单

正在加载示例…
<template>
  <avue-form :option="option"></avue-form>
</template>

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

const option = ref({
  menuSpan: 6,
  column: [
    {
      label: '姓名',
      prop: 'name',
      span: 6
    },
    {
      label: '年龄',
      prop: 'sex',
      span: 6
    }
  ]
});
</script>

按钮位置

效果预览可直接操作下方示例

利用menuPosition属性设置按钮的位置

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"></avue-form>
</template>

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

const form = ref({});
const option = ref({
  menuPosition: 'left',
  column: [{
    label: "用户名",
    prop: "username"
  }]
});
</script>

自定义按钮

效果预览可直接操作下方示例

利用menu-form卡槽去自定义按钮

正在加载示例…
<template>
  <avue-form ref="formRef"
             :option="option"
             v-model="form"
             @submit="handleSubmit">
    <template #menu-form-before="{ size }">
      <el-tag type="primary"
              :size="size">提示</el-tag>
    </template>
    <template #menu-form="{ size }">
      <el-button type="primary"
                 :size="size"
                 @click="submitForm">自定义提交</el-button>
      <el-button :size="size"
                 @click="resetForm">自定义清空</el-button>
    </template>
  </avue-form>
</template>

<script setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';

const form = ref({});
const formRef = ref(null)
const option = ref({
  submitBtn: false,
  emptyBtn: false,
  column: [{
    label: "用户名",
    prop: "username"
  }]
});

const submitForm = () => {
  formRef.value.submit();
};

const resetForm = () => {
  formRef.value.resetForm();
};

const handleSubmit = (form, done) => {
  ElMessage.success('3s后关闭');
  setTimeout(() => {
    done();
  }, 3000);
};
</script>

打印按钮

你可以可以调用全局$Print打印方法

效果预览可直接操作下方示例

配置printBtn打开表单打印功能

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"
             @submit="handleSubmit"></avue-form>
</template>

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

const form = ref({});
const option = ref({
  printBtn: true,
  column: [{
    label: "用户名",
    prop: "username"
  }]
});

const handleSubmit = () => {
  // Your submit logic here
};
</script>

模拟数据按钮

一键生成模拟数据方便测试

<!-- 导入需要的包 (一定要放到index.html中的head标签里) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Mock.js/1.0.0/mock-min.js"></script>
效果预览可直接操作下方示例

mockBtn 设置 true,在列中配置对应的规则即可,当然你可以自己写模拟逻辑,在mock写方法,会返回当前表单的数据,最后return即可,详情参考如下例子

正在加载示例…
<template>
  <avue-form :option="option"
             v-model="form"></avue-form>
</template>

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

const DIC = {
  VAILD: [
    { label: '真', value: 'true' },
    { label: '假', value: 'false' }
  ],
  SEX: [
    { label: '男', value: 0 },
    { label: '女', value: 1 }
  ]
}

const form = ref({
  text: '动态内容1'
})

const option = {
  mockBtn: true,
  column: [
    {
      label: '头像',
      prop: 'video',
      type: 'upload',
      listType: 'picture-img',
      mock: { type: 'image' },
      span: 24
    },
    {
      label: 'id',
      prop: 'id',
      mock: { type: 'id', uuid: true }
    },
    {
      label: '手机号',
      prop: 'tel',
      mock: { type: 'tel' }
    },
    {
      label: '用户名',
      prop: 'username',
      mock: { type: 'name', en: true }
    },
    {
      label: '自定义',
      prop: 'text2',
      mock: (form) => '自定义逻辑' + form.name,
      span: 8
    },
    {
      label: '姓名',
      prop: 'name',
      mock: { type: 'name' },
      span: 8
    },
    {
      label: '类型',
      prop: 'type',
      type: 'select',
      dicData: DIC.VAILD,
      span: 6,
      mock: { type: 'dic' }
    },
    {
      label: '权限',
      prop: 'grade',
      span: 6,
      type: 'checkbox',
      dicData: DIC.VAILD,
      mock: { type: 'dic' }
    },
    {
      label: '开关',
      prop: 'switch',
      span: 6,
      type: 'switch',
      dicData: DIC.SEX,
      mock: { type: 'dic' },
      hide: true,
      row: true
    },
    {
      label: '性别',
      prop: 'sex',
      span: 6,
      type: 'radio',
      dicData: DIC.SEX,
      mock: { type: 'dic' }
    },
    {
      label: '数字',
      prop: 'number',
      type: 'number',
      span: 6,
      precision: 2,
      mock: { type: 'number', max: 1, min: 2, precision: 2 },
      min: 0,
      max: 3,
      row: true
    },
    {
      label: '网站',
      span: 12,
      prop: 'url',
      prepend: 'http://',
      mock: { type: 'url', header: false },
      append: 'com',
      row: true
    },
    {
      label: '日期',
      prop: 'date',
      type: 'date',
      span: 8,
      format: 'YYYY-MM-DD',
      valueFormat: 'YYYY-MM-DD',
      mock: { type: 'datetime', format: 'yyyy-MM-dd' }
    },
    {
      label: '日期时间',
      prop: 'datetime',
      type: 'datetime',
      span: 8,
      format: 'YYYY-MM-DD HH:mm:ss',
      valueFormat: 'YYYY-MM-DD HH:mm:ss',
      mock: { type: 'datetime', format: 'yyyy-MM-dd HH:mm:ss', now: true }
    },
    {
      label: '时间',
      prop: 'time',
      type: 'time',
      span: 8,
      format: 'HH:mm:ss',
      valueFormat: 'HH:mm:ss',
      mock: { type: 'datetime', format: 'HH:mm:ss' }
    },
    {
      label: '地址',
      span: 24,
      prop: 'address',
      mock: { type: 'county' }
    },
    {
      label: '建议',
      span: 24,
      prop: 'adit',
      mock: { type: 'word', min: 10, max: 30 }
    }
  ]
}
</script>
最后更新:
贡献者: smallwei
Prev
表单默认值
Next
表单自定义