• 基于elelemt-ui封装一个表单


    子组件
    searchForm

    1. <script>
    2. import {
    3. defineComponent, ref, watch,
    4. } from 'vue';
    5. export default defineComponent({
    6. name: 'SearchForm',
    7. props: {
    8. value: {
    9. type: Object,
    10. default: () => ({}),
    11. },
    12. fields: {
    13. type: Array,
    14. default: () => [],
    15. },
    16. rules: {
    17. type: Object,
    18. default: () => ({}),
    19. },
    20. labelWidth: {
    21. type: String,
    22. default: '100px',
    23. },
    24. inline: {
    25. type: Boolean,
    26. default: true,
    27. },
    28. },
    29. setup(props, { emit }) {
    30. const form = ref(null);
    31. const formValue = ref({ ...props.value });
    32. watch(() => props.value, (newValue) => {
    33. formValue.value = { ...newValue };
    34. }, { deep: true });
    35. const submitForm = () => {
    36. form.value.validate((valid) => {
    37. if (valid) {
    38. emit('submit', props.value);
    39. } else {
    40. console.log('error submit!!');
    41. return false;
    42. }
    43. });
    44. };
    45. const resetForm = () => {
    46. form.value.resetFields();
    47. emit('reset');
    48. };
    49. const updateValue = (key, value) => {
    50. emit('input', {
    51. ...formValue.value,
    52. [key]: value,
    53. });
    54. };
    55. return {
    56. form,
    57. formValue,
    58. submitForm,
    59. resetForm,
    60. updateValue,
    61. };
    62. },
    63. });
    64. script>
    65. <style scoped>
    66. v-deep .el-button--primary{
    67. margin: 0;
    68. }
    69. style>

    父组件

    1. html
    2. 父{{ searchFormModel }}

    3. <search-form
    4. ref="searchFormRef"
    5. v-model="searchFormModel"
    6. :fields="searchFromFields"
    7. :rules="rules"
    8. @submit="onSearchFormSubmit"
    9. @reset="onSearchFormReset"
    10. >
    11. <template #ruleId>
    12. <el-select
    13. v-model="searchFormModel.ruleId"
    14. placeholder="请选择活动区域"
    15. >
    16. <el-option
    17. label="区域一"
    18. value="shanghai"
    19. />
    20. <el-option
    21. label="区域二"
    22. value="beijing"
    23. />
    24. el-select>
    25. template>
    26. <template #type>
    27. <el-checkbox-group v-model="searchFormModel.type">
    28. <el-checkbox
    29. label="美食/餐厅线上活动"
    30. name="type"
    31. />
    32. <el-checkbox
    33. label="地推活动"
    34. name="type"
    35. />
    36. <el-checkbox
    37. label="线下主题活动"
    38. name="type"
    39. />
    40. <el-checkbox
    41. label="单纯品牌曝光"
    42. name="type"
    43. />
    44. el-checkbox-group>
    45. template>
    46. search-form>
    47. // 引入
    48. import searchForm from './searchForm';
    49. // 注册
    50. components: {
    51. searchForm,
    52. },
    53. setup() {
    54. const initData = reactive({
    55. searchFormModel: {
    56. categoryIds: '666',
    57. ruleId: '',
    58. type: [],
    59. },
    60. searchFromFields: [
    61. { label: '活动名称', slot: 'categoryIds' },
    62. { label: '活动区域', slot: 'ruleId' },
    63. { label: '活动性质', slot: 'type' },
    64. ],
    65. rules: {
    66. categoryIds: [
    67. { required: true, message: '请输入用户名', trigger: 'blur' },
    68. ],
    69. ruleId: [
    70. { required: true, message: '请选择活动区域', trigger: 'change' },
    71. ],
    72. type: [
    73. {
    74. type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change',
    75. },
    76. ],
    77. },
    78. searchFormRef: null,
    79. });
    80. const onSearchFormSubmit = (form) => {
    81. console.log('表单提交了', form);
    82. };
    83. const onSearchFormReset = () => {
    84. console.log('表单重置了');
    85. // initData.searchFormRef.resetFields();
    86. };

  • 相关阅读:
    敏捷开发的特点及敏捷工具
    多目标应用:基于多目标灰狼优化算法MOGWO求解微电网多目标优化调度(MATLAB代码)
    3.前端调式
    python virtualenv创建虚拟环境
    华为云云耀云服务器L实例评测 | 实例评测使用之软件性能评测:华为云云耀云服务器下的 Redis 性能评测
    【Android笔记50】Android应用如何获取系统服务(软键盘管理器、闹钟管理器)
    DECIMAL 数据处理原理浅析
    409. 最长回文串
    电商前台项目(三):完成Search搜索模块业务
    力扣每日一题2022-09-05中等题:寻找重复的子树
  • 原文地址:https://blog.csdn.net/weixin_49035434/article/details/132839061