vue3中FormCreate封装

1.全局注册使用

2.

<template>

    <div class="dialog-form-wrap">

        <el-dialog :title="dialogTitle" v-model="dialogShow" @opened="openedDialog" @close="closeDialog" :width="width">

            <form-create v-model="formModelData" v-model:api="fApi" :rule="formModel.formItems" :option="formModel.formOption"></form-create>

            <template #footer>

                <div class="dialog-footer">

                    <el-button class="cancel_btn" @click="onCancel" size="small">{{ $t('message.form.cancel') }}</el-button>

                    <el-button class="search_btn" type="primary" @click="onSubmit" size="small">{{ $t('message.form.submit') }}</el-button>

                </div>

            </template>

        </el-dialog>

    </div>

</template>

<script lang="ts">

import { reactive, ref, toRefs, getCurrentInstance, computed } from 'vue';

import { useRoute } from 'vue-router';

import { ElMessage } from 'element-plus';

import { comApi } from '/@/api/common/index';

import { useStore } from '/@/store/index';

import _ from 'lodash';

export default {

    name: 'systemEditForm',

    components: {

        Editor,

    },

    props: {

        width: { type: String, default: '769px' },

        dialogShow: {

            type: Boolean,

            default: false,

        },

        formDisabled: {

            type: Boolean,

            default: false,

        },

        dialogFooterShow: {

            type: Boolean,

            default: true,

        },

        dialogTitle: {

            type: String,

            default: '表单操作',

        },

        formConfig: {

            type: Object,

        },

        formActionType: {

            type: String,

            default: '',

        },

        formModelData: {

            type: Object,

        },

    },

    emits: ['dialogOpened', 'dialogClose'],

    setup(props, { emit }) {

        const route = useRoute();

        const { proxy } = getCurrentInstance() as any;

        const formRef = ref();

        const projectRef = ref();

        const store = useStore();

        const state: any = reactive({

            //实例对象

            fApi: {},

            formModel: _.cloneDeep(props.formConfig),

            timer: '',

        });

        // 编辑

        const onSubmit = () => {

            console.log('操作类型', props.formActionType, state.fApi);

            state.fApi.validate((valid: Boolean) => {

                console.log('表单验证', valid);

                if (valid) {

                    state.fApi.submit((formData: Object) => {

                        console.log(formData, '编辑编辑');

                        formData.coverDescribe = props.formModelData.coverDescribe;

                        formData.projdesc = props.formModelData.projdesc;

                        formData.introduction = props.formModelData.introduction;

                        switch (props.formActionType) {

                            case 'add':

                                comApi({ url: props.formConfig.formApi.save.url, method: props.formConfig.formApi.save.method, data: formData })

                                    .then(async (res: any) => {

                                        ElMessage.success(res.message);

                                        proxy.mittBus.emit('onTagsViewRefreshRouterView', route.fullPath);

                                        closeDialog();

                                    })

                                    .catch((err) => {});

                                break;

                            case 'edit':

                                comApi({ url: props.formConfig.formApi.update.url, method: props.formConfig.formApi.update.method, data: formData })

                                    .then(async (res: any) => {

                                        ElMessage.success(res.message);

                                        proxy.mittBus.emit('onTagsViewRefreshRouterView', route.fullPath);

                                        closeDialog();

                                    })

                                    .catch((err) => {});

                                break;

                        }

                    });

                }

            });

        };

        //打开弹窗

        const openedDialog = () => {

            // console.log(props.formModelData, 13456);

            state.timer = new Date().getTime();

            //state.fApi.updateRules(state.formModel.formItems);

            emit('dialogOpened', state.fApi);

        };

        // 关闭弹窗

        const closeDialog = () => {

            //state.fApi.resetFields();

            state.fApi.clearValidateState();

            console.log('表单重设');

            state.timer = new Date().getTime();

            emit('dialogClose', false);

        };

        // 取消

        const onCancel = () => {

            closeDialog();

        };

        return {

            formRef,

            onSubmit,

            openedDialog,

            closeDialog,

            onCancel,

            projectRef,

            ...toRefs(state),

        };

    },

};

</script>

  • 49
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3,可以使用axios来进行网络请求的封装。首先,在根目录上新建一个api文件夹,并在其创建axios.js和httpHelper.js两个文件。引用的axios.js文件用于初始化axios实例。其,你需要安装axios和vue-axios这两个依赖。通过axios.create()方法创建axios实例,并设置一些配置,比如超时时间等。然后,在请求拦截器,你可以对请求进行一些处理,比如添加请求头等。在响应拦截器,你可以对响应进行一些处理,比如获取响应数据等。最后,导出axios实例供其他地方使用。 接下来,在httpHelper.js文件,你可以封装各种请求方法,比如get方法和post方法。在get方法,你可以设置一些请求头和请求参数,并使用axios实例发送get请求。在成功回调,你可以处理响应数据。如果请求失败,你也可以处理错误情况。最后,将封装好的请求方法导出供其他地方使用。 当你需要在页面调用接口时,可以导入httpHelper,并使用其提供的方法进行请求。比如在Vue 3的页面上,你可以使用<script setup>标签导入httpHelper,并调用其的get方法来获取接口数据。 通过以上步骤,你就可以在Vue 3封装axios,并使用它来进行网络请求了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【vue3】 axios封装使用(js/ts)](https://blog.csdn.net/zxsy19966/article/details/127686261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值