首页 > 其他分享 >基于el-dialog封装全局弹窗

基于el-dialog封装全局弹窗

时间:2022-09-26 14:46:53浏览次数:53  
标签:el Vue instance store dialog import selectExamDialog 弹窗

dialog

<template>
  <div>
    <el-dialog title="切换考试" top="9vh" :modal="false" width="600px" :visible.sync="dialogVisible" @close="close" :append-to-body="true">
      <el-row>
        <el-table :data="examList" border style="width: 100%" height="500">
          <el-table-column prop="id" label="编码" width="100"> </el-table-column>
          <el-table-column prop="name" label="考试名称" width="300" show-overflow-tooltip> </el-table-column>
          <el-table-column prop="examDate" label="考试年月"> </el-table-column>
          <el-table-column fixed="right" label="操作" min-width="60">
            <template slot-scope="scope">
              <el-button @click="handleSelectExam(scope.row)" type="text" size="small">切换</el-button>
            </template>
          </el-table-column>
        </el-table>
      </el-row>
    </el-dialog>
  </div>
</template>

<script>
import { mapActions } from 'vuex'
import * as api from './api'
import store from '@/store'
export default {
  name: 'qz-exam-list',
  props: {
    close: {
      type: Function,
      default: () => {}
    }
  },
  data () {
    return {
      examList: [],
      dialogVisible: false
    }
  },
  mounted () {},
  methods: {
    ...mapActions('d2admin/theme', ['set']),
    open () {
      this.dialogVisible = true
      this.$nextTick(async () => {
        this.examList = await api.getExamList()
        // 找到当前的选中
      })
    },
    async handleSelectExam (data) {
      await store.dispatch('d2admin/user/setExam', data, { root: true })
      // 切换考试后清空导航栏
      await store.dispatch('d2admin/page/closeAll')
      this.dialogVisible = false
      this.close()
    }
  }
}
</script>

js

import Vue from 'vue'
import selectExamDialog from './dialog' // 引入弹窗组件

const SelectExamDialog = Vue.extend(selectExamDialog)
selectExamDialog.open = function (callback) {
  const instance = new SelectExamDialog().$mount()
  document.body.appendChild(instance.$el)
  instance.close = () => {
    callback && callback()
    document.body.removeChild(instance.$el)
    instance.$destroy()
  }
  Vue.nextTick(() => {
    instance.open()
  })
}
// 导出
export default selectExamDialog

全局挂载

import selectExam from '@/components/qz-select-exam'

export default {
  async install (Vue, options) {
 // 全局可使用
    Vue.prototype.$selectExam = selectExam
  }
}

标签:el,Vue,instance,store,dialog,import,selectExamDialog,弹窗
From: https://www.cnblogs.com/whh666/p/16730877.html

相关文章

  • 直播系统搭建,el-table更改某行背景及文字样式
    直播系统搭建,el-table更改某行背景及文字样式1、el-table标签添加属性:row-class-name="tableRowClassName"2、定义属性方法 //row是获取到某一行的数据orderTimeF......
  • vue 使用element表格报错 哪里报错滑动到哪里
    this.$nextTick(()=>{letisError=document.getElementsByClassName('is-error')isError[0].scrollInto......
  • elasticsearch 5.6.16 x-pack license过期处理
    elasticsearch5.6.16x-packlicense过期处理访问官网申请免费license即可,地址为:https://register.elastic.co/marvel_register升级至6.3+版本,高版本的基础版该功......
  • 直播平台软件开发,audriod studio 两种弹窗方法
    直播平台软件开发,audriodstudio两种弹窗方法一、根据日期判断软件是否超期,超期弹窗,按钮退出程序,不超期继续运行。方法:调用系统当前时期与设定日期进行比较(compareto),如......
  • delphi cxSplitter学习笔记
     //cxSplitter禁用移动和拖拽,只允许点击箭头按钮触发缩放(展开和收起)procedureTFraModleBase.cxSplitter3CanResize(Sender:TObject;varNewSize:Integer;varAcc......
  • label 多选 按钮 综合应用
    环境介绍:代码工具:VisualStudio2022开发框架:.netformwork4.7.2开发须知当前我所了解的有.netcore以及.netformwork两种框架.netformwork:这个是微软专......
  • EasyExcel单元格合并策略
    EasyExcel单元格合并策略自定义策略packagecn.most.rsgzglxt.utils;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.metadata.data.CellData;im......
  • leveldb versionSet 和 versionEdit
    前言Compaction和Version相关的部分交织在一起,不搞明白Version很难理解Compaction。其实这句话反过来说也是对的,如果不理解Compaction也很难理解VersionSet。versionEdit......
  • Xshell无法连接22端口问题解决办法汇总
    Xshell软件在进行远程连接过程中,会出现端口连接报错的问题,提示:“该IP地址的22端口连接失败”,这是怎么回事?今天小编就xshell软件无法连接22端口的问题,整理相关情形(ubuntu系......
  • hello world
    一个新文件夹,存放代码改成Java文件文件后缀名为:java后缀名可能要手动打开编译代码publicclasshello{ publicstaticvoidmain(String[]args){ System.......