首页 > 其他分享 >组件化对话框

组件化对话框

时间:2023-05-01 17:44:32浏览次数:23  
标签:const 对话框 formRef value label props 组件 false

引用处

<template>
<!--    利用obj传递参数-->
    <Dialog :obj="data.permissionDialog" ref="permissionDialog"/>
</template>
<script setup>
import Dialog from "@/components/Dialog.vue";
const data = reactive(
    {
       permissionDialog: {
            show: false,
            title: '添加权限',
            form: {
                title: '',
                name: '',
                method: "",
                router: 0
            },
            fields: [
                {
                    label: '权限名',
                    prop: 'title',
                    type: 'input',
                    placeholder: '请输入权限名',
                    required: true
                },
                {
                    label: '权限',
                    prop: 'name',
                    type: 'input',
                    placeholder: '请输入权限',
                    required: true,
                },
                {
                    label: '请求方式',
                    prop: 'method',
                    type: 'select',
                    placeholder: '请选择请求方式',
                    required: true,
                    ext: false,
                    options: [
                        {label: 'GET', value: '1'},
                        {label: 'POST', value: '2'},
                        {label: 'PUT', value: '3'},
                        {label: 'DELETE', value: '4'},
                        {label: 'PATCH', value: '5'},
                    ],
                }
            ],
            errors: {
                title: '',
                name: '',
                method: '',
            },
            submit: permissionSubmit
        }
    }
)
</script>

子组件

<template>
    <el-dialog
            v-model="obj.show"
            :title="obj.title"
            width="30%"
            :before-close="closeDialog"
    >
        <el-form
                :model="obj.form"
                ref="formRef"
        >
            <el-form-item v-for="field in obj.fields" :label="field.label" :prop="field.prop"
                          :error="obj.errors[field.prop]" :required="field.required">
                <el-input v-if="field.type==='input'" v-model="obj.form[field.prop]" :placeholder="field.placeholder"/>
                <el-select v-else-if="field.type==='select'" v-model="obj.form[field.prop]"
                           :placeholder="field.placeholder">
                    <el-option
                            v-for="item in field.options"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                    >
                        <div class="option_box" v-if="field.ext">
                            <div style="display: flex;align-items: center;justify-content: space-between">
                                <el-icon>
                                    <component :is="item.value"></component>
                                </el-icon>
                                <span v-text="item.label"></span>
                            </div>

                        </div>
                    </el-option>
                </el-select>
                <el-switch v-else-if="field.type==='switch'" v-model="obj.form[field.prop]"/>
            </el-form-item>
        </el-form>
        <template #footer>
      <span class="dialog-footer">
        <el-button type="primary" @click="submit">
          确定
        </el-button>
      </span>
        </template>
    </el-dialog>
</template>

<script setup>
import {defineProps, onMounted, ref} from 'vue'

const props = defineProps(['obj'])
const formRef = ref(null)
const submit = () => {
    formRef.value.validate((valid) => {
        if (valid) {
            props.obj.submit()
        } else {
            return false
        }
    })
}


function closeDialog(done) {
    formRef.value.resetFields()
    props.obj.show = false
    done()
}

function close() {
    formRef.value.resetFields()
    props.obj.show = false
}

defineExpose({close})
</script>

标签:const,对话框,formRef,value,label,props,组件,false
From: https://www.cnblogs.com/sherwin1995/p/17366759.html

相关文章

  • 11-react使用props.children 处理父子组件之间的传值
    //props.children组件传值import{Component}from"react"importreactDomfrom"react-dom"//床架一个createRef函数用来创建ref对象constHello=(props)=>{console.log(props)props.children('子组件传给父组件的值')//就是子组件标签之间的内容/......
  • 10-react不同层级的组件之间的数据传递数据 createContext 上下文
    //组件传值props接收传递过来的数据importReactDomfrom"react-dom"import{createContext,Component}from"react"//createContextisuseedtocreateacontextbojectionfromcontextproperties//返回一个对象//Provider提供状态Consumer使用状态......
  • 09-react的组件传值 props
    //组件传值props接收传递过来的数据importReactDomfrom"react-dom"import{Component}from"react"//类组件中使用函数组件和类组件注意区分不同的组件使用不同方式接收数据constHellow=(props)=>{console.log(props)return<h1>函数组件</h1>}cla......
  • Django的message组件(源码分析)
    Django的Message组件(源码分析)1.配置#MESSAGE_STORAGE='django.contrib.messages.storage.fallback.FallbackStorage'#MESSAGE_STORAGE='django.contrib.messages.storage.cookie.CookieStorage'MESSAGE_STORAGE='django.contrib.messages.stor......
  • Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件pagina
    1、应用程序命名空间app_namefromdjango.urlsimportpathfrom.importviewsfrom.viewsimportRepairDetailViewapp_name='repair'urlpatterns=[path('repair_types/',views.RepairTypeListView.as_view(),name='repair_type_list�......
  • 06 - react的类组件中的状态state render函数 this指向问题 事件绑定
    //注册事件importReactDomfrom"react-dom"import{Component}from"react"//类组件中的状态通过this.state.xxx来获取状态classHelloextendsComponent{//事件对象eventhandleClick(e){console.log(this)//udnefiend使用箭头函数解决this......
  • 使用 ChatGPT 生成 Vue3 响应式导航栏组件
    下面是ChartGPT生成的Vue3响应式导航栏组件。经过简单的调试。基本可实现描述的要求。Nav.vue<template><navclass="nav-container"><divclass="logo-container"><imgsrc="your-logo-here.svg"alt="logo"/></......
  • react的类组件和函数组件 -- 状态 state
    //函数组件是无状态的既没有数据的类似vue组件中的data数据//类组件是有状态的组件是有数据的是双向绑定的数据是数据驱动视图的负责UI的视图更新(单个组件的私有数据组件之间的数据是独立的)importReactDomfrom"react-dom"import{Component}from"react......
  • 微信小程序-icon组件
    icon组件icon组件,想必大家都应该清楚这个是图标组件吧,在微信小程序当中,为我们提供了一套icon图标类型。?>icon的类型,有效值:success,success_no_circle,info,warn,waiting,cancel,download,search,clear我们就来看一下icon当中的属性值即可。属性?>type:icon的类型......
  • vue2源码-十七、Vue组件间传值的方式及之间区别
    Vue组件间传值的方式及之间区别通过props传递:父组件传递数据给子组件使用//chilid,vueprops:{//字符串形式name:String//接收的类型参数//对象形式age:{type:Number,//接收的类型为数值defaule:18,//默认值为18r......