Element-ui confirm 按钮异步 isLoading

186 阅读1分钟

在使用 confirm 弹窗时,如果点击确定按钮,需要异步请求接口,请求成功后,需要关闭弹窗,此时需要设置 confirmButtonLoading 属性为 true,但是 element-ui 的 confirm 弹窗没有提供异步请求的回调函数,因此需要使用 beforeClose 属性,在点击确定按钮时,设置 confirmButtonLoading 属性为 true,然后异步请求接口,请求成功后,设置 confirmButtonLoading 属性为 false,然后关闭弹窗。

const title = '你当前处于【离线状态】无法正常使用批量拨打列表功能,请先切换到在线状态再进行操作'
const isConfirm = await this.$confirm(title, '提示', {
  confirmButtonText: '立即切换',
  cancelButtonText: '暂不切换',
  type: 'warning',
  closeOnPressEscape: false,
  closeOnClickModal: false,
  beforeClose: async (action, instance, done) => {
    if (action !== 'confirm') {
      done()
      return
    }

    try {
      instance.confirmButtonText = '切换中...'
      instance.confirmButtonLoading = true
      await changeCallOnline(this)
    } finally {
      instance.confirmButtonLoading = false
      done()
    }
  },
})
  .then(() => true)
  .catch(() => false)

if (!isConfirm) return
MessageBox.confirm(title, '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning',
  beforeClose: async (action, instance, done) => {
    if (action !== 'confirm') {
      done()
      return
    }

    try {
      instance.confirmButtonText = '分配中...'
      instance.confirmButtonLoading = true
      await myCommonServer.disableSigningBiz({ bizId: id })
    } finally {
      instance.confirmButtonLoading = false
      instance.confirmButtonText = '确定'
      done()
    }
  },
})
  .then(() => {})
  .catch(() => {})