账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何关闭 element-ui 中的 $msgbox
    45
    0

    我用 $msgbox 配合 vnode 写了个上传插件, 运营的小伙伴用了之后纷纷表示, 能不能上传完了自动关闭浮层...

    我查了半天文档, 发现貌似没有办法, 在这里提个问, 看看能不能找到靠谱的解决方案...

    以下是主要代码:

    
    // 上传浮层
    
    import Vue from 'vue'
    import uploader from '~/lib/ks3upload'
    
    /**
     * 显示浮层弹框
     * @param {object}   options            参数
     * @param {array}    options.formats    [必传] 允许后缀, ['mp3', 'mp4', ...]
     * @param {boolean}  options.multiple   是否允许多个文件
     * @param {function} options.onSuccess  上传成功回调(所有文件), 传参 (fileList)
     */
    function show (options = {}) {
      const {
        formats,
        multiple = true,
        maxSize = 500 // 单位mb
      } = options
    
      const temVM = new Vue({
        data () {
          return {
            accept: formats.map(item => `.${item}`).join(','),
            multiple,
            maxSize,
            fileList: [],
            tip: `只能上传${formats.join('/')}文件,且不超过${maxSize}mb`
          }
        },
    
        methods: {
          // 单个请求
          onRequest: params => {
            // console.log(params)
            const { file } = params
        
            const typeArray = file.type.split('/')
            const fileType = typeArray[0]
            const fileName = file.name.replace(`.${typeArray[1]}`, '')
    
            const onSuccess = (url, info) => {
              // ...
    
              clearTimeout(temVM.checkAllSuccessTimer)
              temVM.checkAllSuccessTimer = setTimeout(() => temVM.checkAllSuccess(), 1000)
    
              this.$message.success('上传成功')
              params.onSuccess(item)
            }
    
            const onError = error => {
              console.log('upload error', error)
              this.$message.error('上传错误, 请查看console')
              params.onError(error)
            }
    
            const onProgress = data => {
              // ...
            }
    
            // ...
        
            uploader.put(file, fileType, onSuccess, onError, { progress: onProgress })
          },
    
          onRemove: params => {
            // ...
          },
    
          checkAllSuccess () {
            // ...
          }
        }
      })
    
      // 应对打包报错 (h is not defined)
      const h = this.$createElement
    
      this.$msgbox({
        title: '上传文件',
        center: true,
        message: 
          <el-upload
            class="upload-demo"
            drag
            action="/upload"
            accept={temVM.accept}
            multiple={temVM.multiple}
            // onChange 不好使
            // before-upload={onChange}
            file-list={temVM.fileList}
            http-request={temVM.onRequest}
            before-remove={temVM.onRemove} >
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
            <div class="el-upload__tip" slot="tip">{temVM.tip}</div>
          </el-upload>,
        showConfirmButton: true,
        showCancelButton: false
      })
    }
    
    Vue.use({
      install (Vue) {
        Vue.prototype.$dialogUpload = show
      }
    })
    

    感谢...

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部