当前位置:   article > 正文

Vue form-create的基本使用 和 后端返回动态表单组件_formcreate获取表单数据

formcreate获取表单数据
  1. <template>
  2. <section>
  3. <br />
  4. <el-row>
  5. <el-button type="primary" @click="ajaxSetDataFn"
  6. >Ajax请求初始化表单</el-button
  7. >
  8. <el-button type="danger" @click="getFormModelFn"
  9. >获取表单Model对象</el-button
  10. >
  11. </el-row>
  12. <br />
  13. <form-create v-model="fApi" :rule="rule" :option="option"></form-create>
  14. <br />
  15. <!-- 自定义 确定和取消按钮 -->
  16. <div class="bottomButton">
  17. <el-button @click="submitButton" type="primary">自定义的确定</el-button>
  18. <el-button @click="reset">重置</el-button>
  19. </div>
  20. </section>
  21. </template>
  22. <script>
  23. export default {
  24. data() {
  25. return {
  26. // 实例对象
  27. fApi: {},
  28. // 表单生成规则数组对象 生成规则:http://www.form-create.com/v2/guide/rule.html
  29. // 生成规则数组中一个对象就是一个表单项(是一个json对象),在里面可以对应的表单名称、类型、属性、值、样式、类名、是否必填、错误提示等。
  30. rule: [
  31. {
  32. type: "input", // 生成组件的名称(就是表单的名称:如input,radio,checkbox,select,slider等)
  33. field: "userName", // 表单组件的字段名称(就是表单的name属性,注:该必须唯一),自定义组件可以不配置
  34. className: "user-name-dom", // 设置组件的class属性
  35. title: "用户名称:", // 组件的名称, 选填
  36. value: "", // 表单组件的字段值(就是表单的value值),自定义组件可以不用设置
  37. props: {
  38. placeholder: "请输入用户名称!",
  39. disabled: false,
  40. readonly: false,
  41. clearable: true, // 是否显示清空按钮
  42. },
  43. validate: [
  44. {
  45. trigger: "blur",
  46. required: true,
  47. message: "用户名称不能为空!",
  48. },
  49. ],
  50. col: {
  51. md: { span: 12 }, // 支持每列布局
  52. },
  53. },
  54. {
  55. type: "input",
  56. field: "password",
  57. title: "用户密码:",
  58. value: "666",
  59. props: {
  60. // input的表单类型 <input type="">:注:有些表单类型form-create和element-ui专门做成了组件,可以在上面的type中直接用,所以下面有些类型如(radio)在这里会无效哦!!
  61. // text 默认。定义单行输入字段,用户可在其中输入文本。默认是 20 个字符。
  62. // button 定义可点击的按钮(大多与 JavaScript 使用来启动脚本)
  63. // checkbox 定义复选框。
  64. // color 定义拾色器。
  65. // date 定义日期字段(带有 calendar 控件)
  66. // datetime 定义日期字段(带有 calendar 和 time 控件)
  67. // datetime-local 定义日期字段(带有 calendar 和 time 控件)
  68. // month 定义日期字段的月(带有 calendar 控件)
  69. // week 定义日期字段的周(带有 calendar 控件)
  70. // time 定义日期字段的时、分、秒(带有 time 控件)
  71. // email 定义用于 e-mail 地址的文本字段
  72. // file 定义输入字段和 "浏览..." 按钮,供文件上传
  73. // hidden 定义隐藏输入字段
  74. // image 定义图像作为提交按钮
  75. // number 定义带有 spinner 控件的数字字段
  76. // password 定义密码字段。字段中的字符会被遮蔽。
  77. // radio 定义单选按钮。
  78. // range 定义带有 slider 控件的数字字段。
  79. // reset 定义重置按钮。重置按钮会将所有表单字段重置为初始值。
  80. // search 定义用于搜索的文本字段。
  81. // submit 定义提交按钮。提交按钮向服务器发送数据。
  82. // tel 定义用于电话号码的文本字段。
  83. // url 定义用于 URL 的文本字段。
  84. // type: "password",
  85. placeholder: "请输入用户密码!",
  86. },
  87. validate: [
  88. {
  89. trigger: "blur",
  90. required: true,
  91. message: "用户密码不能为空!",
  92. },
  93. ],
  94. col: {
  95. md: { span: 12 },
  96. },
  97. },
  98. {
  99. type: "input",
  100. field: "summary",
  101. title: "个人简介:",
  102. value: "",
  103. props: {
  104. type: "textarea",
  105. rows: 3,
  106. placeholder: "请输入个人简介!",
  107. },
  108. },
  109. {
  110. type: "DatePicker", // 日期选择器
  111. field: "date",
  112. title: "活动日期",
  113. // value: [],
  114. props: {
  115. type: "date",
  116. format: "yyyy-MM-dd",
  117. placeholder: "请选择活动日期",
  118. },
  119. },
  120. {
  121. type: "radio",
  122. field: "sex",
  123. title: "性 别:",
  124. value: 0,
  125. options: [
  126. { label: "先 生", value: 1 },
  127. { label: "女 士", value: 2 },
  128. { label: "人 妖", value: 3, disabled: true },
  129. { label: "未 知", value: 0 },
  130. ],
  131. },
  132. {
  133. type: "checkbox",
  134. field: "hobby",
  135. title: "爱 好:",
  136. value: [1, 3],
  137. options: [
  138. { label: "吃喝", value: 1 },
  139. { label: "上班", value: 2, disabled: true },
  140. { label: "旅游", value: 3 },
  141. { label: "运动", value: 4 },
  142. { label: "学习", value: 5, disabled: true },
  143. ],
  144. },
  145. {
  146. type: "select",
  147. field: "address",
  148. title: "想去哪里:",
  149. value: 6,
  150. col: {
  151. // sx: {span: 24},
  152. md: { span: 10 },
  153. },
  154. options: [
  155. { label: "内国走走", value: 1 },
  156. { label: "呆在公司", value: 2, disabled: true },
  157. { label: "非洲美洲", value: 3 },
  158. { label: "港澳台游", value: 4 },
  159. { label: "东南亚游", value: 5 },
  160. { label: "澳洲旅游", value: 6 },
  161. { label: "自驾游", value: 7 },
  162. ],
  163. },
  164. {
  165. type: "select",
  166. field: "address2",
  167. title: "想多选点:",
  168. value: [3, 5],
  169. col: {
  170. md: { span: 14 },
  171. },
  172. props: {
  173. multiple: true,
  174. placement: "bottom",
  175. },
  176. options: [
  177. { label: "内国走走", value: 1 },
  178. { label: "呆在公司", value: 2, disabled: true },
  179. { label: "非洲美洲", value: 3 },
  180. { label: "港澳台游", value: 4 },
  181. { label: "东南亚游", value: 5 },
  182. { label: "澳洲旅游", value: 6 },
  183. { label: "自驾游", value: 7 },
  184. ],
  185. },
  186. ],
  187. // 组件参数配置
  188. option: {
  189. // 显示重置表单按扭
  190. resetBtn: false,
  191. // 表单提交按扭事件
  192. submitBtn: {
  193. show: false,
  194. // 按钮内容
  195. innerText: "保存",
  196. },
  197. onSubmit: (formData) => {
  198. alert(JSON.stringify(formData));
  199. console.log("获取表单中的数据:", formData);
  200. //按钮进入提交状态
  201. // this.fApi.btn.loading();
  202. //重置按钮禁用
  203. // this.fApi.resetBtn.disabled();
  204. //按钮进入可点击状态
  205. // this.fApi.btn.finish();
  206. },
  207. },
  208. };
  209. },
  210. methods: {
  211. // 提交
  212. submitButton() {
  213. this.fApi.submit((formData, fApi) => {
  214. alert(JSON.stringify(formData));
  215. console.log(formData, "999参数啊");
  216. });
  217. },
  218. // 重置
  219. reset() {
  220. this.fApi.resetFields();
  221. },
  222. // 设置表单数据
  223. ajaxSetDataFn() {
  224. this.fApi.setValue({
  225. userName: "沐枫",
  226. password: "123456",
  227. summary: "我是请后端返回来的个人简介",
  228. sex: 1,
  229. hobby: [3, 4],
  230. address: 5,
  231. address2: [1, 4, 7],
  232. volume: 35,
  233. jiajie: 56,
  234. color: "#000DFF",
  235. date: "2020-02-01",
  236. rateNumber: 4,
  237. offon: false,
  238. });
  239. },
  240. //获取Form表单 model对象
  241. getFormModelFn() {
  242. console.log("Form表单 model对象:", this.fApi.model());
  243. },
  244. getUserNameChange(e) {
  245. this.$nextTick(() => {
  246. this.rule[2].value = this.rule[0].value;
  247. });
  248. console.log(this.fApi.getValue("userName"));
  249. },
  250. },
  251. };
  252. </script>
  253. <style lang="scss">
  254. .bottomButton {
  255. display: flex;
  256. justify-content: center; // flex-end
  257. align-items: center;
  258. }
  259. </style>

1 npm i @form-create/element-ui

2 在main.js 里面加入

// 引入form-create 表单生成器

import formCreate from "@form-create/element-ui"

Vue.use(formCreate);

代码如下

<div>

   <section>

    <h1>组件模式:使用&lt;form-create>&lt;/form-create> 或 &lt;FormCreate /> 标签来创建(生成)表单</h1>

    <br />

    <a href="http://www.form-create.com/v2/guide/rule.html" target="_blank">表单 rule[] 生成规则</a>

    <br />

    <br />

    <el-row>

      <el-button type="primary" @click="ajaxSetDataFn" icon="el-icon-edit">Ajax请求初始化表单</el-button>

      <el-button type="danger" @click="getFormModelFn" icon="el-icon-s-promotion">获取表单Model对象</el-button>

    </el-row>

    <br />

    <h3>使用&lt;form-create>&lt;/form-create>标签来创建(生成)表单:</h3>

    <form-create v-model="fApi" :rule="rule" :option="option"></form-create>

    <br />

  <!-- 自定义 确定和取消按钮 -->

  <el-row class="bottomButton">

    <el-col>

      <el-button @click="submitButton" type="primary">自定义确定</el-button>

    <el-button @click="reset">自定义重置</el-button>

    </el-col>

  </el-row>

   

  </section>

</div>

data里面

data() {

    return {

            // 实例对象

            fApi: {},

 // 表单生成规则数组对象  生成规则:http://www.form-create.com/v2/guide/rule.html

 // 生成规则数组中一个对象就是一个表单项(是一个json对象),在里面可以对应的表单名称、类型、属性、值、样式、类名、是否必填、错误提示等。

 rule: [

   {

     type: "input", // 生成组件的名称(就是表单的名称:如input,radio,checkbox,select,slider等)

     field: "userName", // 表单组件的字段名称(就是表单的name属性,注:该必须唯一),自定义组件可以不配置

     className: "user-name-dom", // 设置组件的class属性

     title: "用户名称:", // 组件的名称, 选填

     value: "", // 表单组件的字段值(就是表单的value值),自定义组件可以不用设置

     props: {

       placeholder: "请输入用户名称!",

       disabled: false,

       readonly: false,

       clearable: true // 是否显示清空按钮

     },

     validate: [

       {

         trigger: "blur",

         required: true,

         message: "用户名称不能为空!"

       }

     ],

     col: {

       md: { span: 12 } // 支持每列布局

     }

   },

   {

     type: "input",

     field: "password",

     title: "用户密码:",

     value: "666",

     props: {

       // input的表单类型 <input type="">:注:有些表单类型form-create和element-ui专门做成了组件,可以在上面的type中直接用,所以下面有些类型如(radio)在这里会无效哦!!

       // text  默认。定义单行输入字段,用户可在其中输入文本。默认是 20 个字符。

       // button  定义可点击的按钮(大多与 JavaScript 使用来启动脚本)

       // checkbox  定义复选框。

       // color 定义拾色器。

       // date  定义日期字段(带有 calendar 控件)

       // datetime  定义日期字段(带有 calendar 和 time 控件)

       // datetime-local  定义日期字段(带有 calendar 和 time 控件)

       // month 定义日期字段的月(带有 calendar 控件)

       // week  定义日期字段的周(带有 calendar 控件)

       // time  定义日期字段的时、分、秒(带有 time 控件)

       // email 定义用于 e-mail 地址的文本字段

       // file  定义输入字段和 "浏览..." 按钮,供文件上传

       // hidden  定义隐藏输入字段

       // image 定义图像作为提交按钮

       // number  定义带有 spinner 控件的数字字段

       // password  定义密码字段。字段中的字符会被遮蔽。

       // radio 定义单选按钮。

       // range 定义带有 slider 控件的数字字段。

       // reset 定义重置按钮。重置按钮会将所有表单字段重置为初始值。

       // search  定义用于搜索的文本字段。

       // submit  定义提交按钮。提交按钮向服务器发送数据。

       // tel 定义用于电话号码的文本字段。

       // url 定义用于 URL 的文本字段。

       type: "password",

       placeholder: "请输入用户密码!"

     },

     col: {

       md: { span: 12 }

     }

   },

   {

     type: "input",

     field: "summary",

     title: "个人简介:",

     value: "",

     props: {

       type: "textarea",

       rows: 3,

       placeholder: "请输入个人简介!"

     }

   },

   {

    type: "DatePicker", // 日期选择器

    field: "section_day",

    title: "活动日期",

    // value: [],

    props: {

        type: "date",

        format: "yyyy-MM-dd",

        placeholder:"请选择活动日期",

    }

},

   {

     type: "radio",

     field: "sex",

     title: "性 别:",

     value: 0,

     options: [

       { label: "先 生", value: 1 },

       { label: "女 士", value: 2 },

       { label: "人 妖", value: 3, disabled: true },

       { label: "未 知", value: 0 }

     ]

   },

   {

     type: "checkbox",

     field: "hobby",

     title: "爱 好:",

     value: [1, 3],

     options: [

       { label: "吃喝", value: 1 },

       { label: "上班", value: 2, disabled: true },

       { label: "旅游", value: 3 },

       { label: "运动", value: 4 },

       { label: "学习", value: 5, disabled: true }

     ]

   },

   {

     type: "select",

     field: "address",

     title: "想去哪里:",

     value: 6,

     col: {

        //  sx: {span: 24},

       md: { span: 10 }

     },

     options: [

       { label: "内国走走", value: 1 },

       { label: "呆在公司", value: 2, disabled: true },

       { label: "非洲美洲", value: 3 },

       { label: "港澳台游", value: 4 },

       { label: "东南亚游", value: 5 },

       { label: "澳洲旅游", value: 6 },

       { label: "自驾游", value: 7 }

     ]

   },

   {

     type: "select",

     field: "address2",

     title: "想多选点:",

     value: [3, 5],

     col: {

       md: { span: 14 }

     },

     props: {

       multiple: true,

       placement: "bottom"

     },

     options: [

       { label: "内国走走", value: 1 },

       { label: "呆在公司", value: 2, disabled: true },

       { label: "非洲美洲", value: 3 },

       { label: "港澳台游", value: 4 },

       { label: "东南亚游", value: 5 },

       { label: "澳洲旅游", value: 6 },

       { label: "自驾游", value: 7 }

     ]

   }

 ],

 // 组件参数配置

 option: {

   // 显示重置表单按扭

   resetBtn: false,

   // 表单提交按扭事件

   submitBtn: {

    show:false,

    // 按钮内容

     innerText: "保存",

   },

   onSubmit: formData => {

     alert(JSON.stringify(formData));

     console.log("获取表单中的数据:", formData);

     //按钮进入提交状态

     //   this.fApi.btn.loading();

     //重置按钮禁用

     //   this.fApi.resetBtn.disabled();

     //按钮进入可点击状态

     //   this.fApi.btn.finish();

   }

 },

}

}

  1. methods 方法里面

 methods: {

      // 提交

      submitButton(){

        this.fApi.submit((formData, fApi)=>{

          alert(JSON.stringify(formData))

          console.log(formData, '999参数啊')

        })

      },

      // 重置

      reset(){

        this.fApi.resetFields()

      },

      // 设置表单数据

      ajaxSetDataFn() {

      this.fApi.setValue({

        userName: "沐枫",

        password: "123456",

        summary: "我是请后端返回来的个人简介",

        sex: 1,

        hobby: [3, 4],

        address: 5,

        address2: [1, 4, 7],

        volume: 35,

        jiajie: 56,

        color: "#000DFF",

        dateTime: ["2020-02-01", "2020-02-30"],

        rateNumber: 4,

        offon: false,

        imgFile: [

          "https://inews.gtimg.com/newsapp_ls/0/11673675668_295195/0",

          "https://inews.gtimg.com/newsapp_ls/0/11673508745_295195/0"

        ]

      });

    },

    //获取Form表单 model对象

    getFormModelFn() {

      console.log("Form表单 model对象:", this.fApi.model());

    },

    getUserNameChange(e) {

      this.$nextTick(() => {

        this.rule[2].value = this.rule[0].value;

      });

      console.log(this.fApi.getValue("userName"));

    },

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/797302
推荐阅读
相关标签
  

闽ICP备14008679号