Loading

基于el-dialog封装全局弹窗

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
  }
}
posted @ 2022-09-26 14:33  资深if-else侠  阅读(414)  评论(0编辑  收藏  举报