美文网首页
确认框组件

确认框组件

作者: Jycoding | 来源:发表于2022-05-05 17:48 被阅读0次

import { createVNode, render } from 'vue-demi'

import XtxConfirm from './xtx-confirm.vue'

// 准备一个DOM

const div = document.createElement('div')

div.setAttribute('class', 'xtx-confirm-container')

document.body.appendChild(div)

// 返回的是promise对象,点取消销毁组件,点确认销毁组件

export default ({ title, text }) => {

  // 1. 导入被创建的组件

  // 2. 使用createVNode创建虚拟节点

  // 3. 准备一个dom容器装载组件

  // 4. 使用render函数渲染组件到容器

  return new Promise((resolve, reject) => {

    // 点击取消触发的函数

    const cancelCallback = () => {

      render(null, div)

      reject(new Error('点击取消'))

    }

    // 点击确认触发的函数

    const submitCallback = () => {

      render(null, div)

      resolve()

    }

    const vn = createVNode(XtxConfirm, { title, text, cancelCallback, submitCallback })

    render(vn, div)

  })

}

<template>

  <div class="xtx-confirm" :class="{fade}">

    <div class="wrapper" :class="{fade}">

      <div class="header">

        <h3>{{title}}</h3>

        <a @click="cancel" href="JavaScript:;" class="iconfont icon-close-new"></a>

      </div>

      <div class="body">

        <i class="iconfont icon-warning"></i>

        <span>{{text}}</span>

      </div>

      <div class="footer">

        <XtxButton @click="cancel" size="mini" type="gray">取消</XtxButton>

        <XtxButton @click="submit" size="mini" type="primary">确认</XtxButton>

      </div>

    </div>

  </div>

</template>

<script>

import { onMounted, ref } from 'vue'

import XtxButton from './xtx-button'

export default {

  name: 'XtxConfirm',

  components: { XtxButton },

  props: {

    title: {

      type: String,

      default: '温馨提示'

    },

    text: {

      type: String,

      default: ''

    },

    cancelCallback: {

      type: Function

    },

    submitCallback: {

      type: Function

    }

  },

  setup (props) {

    // 对话框默认隐藏

    const fade = ref(false)

    // 组件渲染完毕后

    onMounted(() => {

      // 过渡效果需要在元素创建完毕后延时一会加上才会触发

      setTimeout(() => {

        fade.value = true

      }, 0)

    })

    // 取消

    const cancel = () => {

      // 其他事情

      props.cancelCallback()

    }

    // 确认

    const submit = () => {

      // 其他事情

      props.submitCallback()

    }

    return { cancel, submit, fade }

  }

}

</script>

<style scoped lang="less">

.xtx-confirm {

  position: fixed;

  left: 0;

  top: 0;

  width: 100%;

  height: 100%;

  z-index: 8888;

  background: rgba(0,0,0,0);

  &.fade {

    transition: all 0.4s;

    background: rgba(0,0,0,.5);

  }

  .wrapper {

    width: 400px;

    background: #fff;

    border-radius: 4px;

    position: absolute;

    top: 50%;

    left: 50%;

    transform: translate(-50%,-60%);

    opacity: 0;

    &.fade {

      transition: all 0.4s;

      transform: translate(-50%,-50%);

      opacity: 1;

    }

    .header,.footer {

      height: 50px;

      line-height: 50px;

      padding: 0 20px;

    }

    .body {

      padding: 20px 40px;

      font-size: 16px;

      .icon-warning {

        color: @priceColor;

        margin-right: 3px;

        font-size: 16px;

      }

    }

    .footer {

      text-align: right;

      .xtx-button {

        margin-left: 20px;

      }

    }

    .header {

      position: relative;

      h3 {

        font-weight: normal;

        font-size: 18px;

      }

      a {

        position: absolute;

        right: 15px;

        top: 15px;

        font-size: 20px;

        width: 20px;

        height: 20px;

        line-height: 20px;

        text-align: center;

        color: #999;

        &:hover {

          color: #666;

        }

      }

    }

  }

}

</style>

相关文章

  • 确认弹框组件

    确认弹框组件

  • 确认框组件

    import { createVNode, render } from 'vue-demi' import Xtx...

  • 使用的组件

    确认弹框 使用密码框 让一个元素居中 删除提示使用到的组件 效果如下:确认按钮是组件自带的可以通过 confirm...

  • vue-弹出框组件

    创建一个公用的弹出框组件,包括消息弹出框,确认弹出框,自定义内容弹出框 一、创建 1、创建一个基础弹出框:dial...

  • Bootstrap - 弹出框制作

    弹出框(模态框)Modal.弹出框是一个经常使用的组件,一般用于弹出提示信息,确认信息,表单等内容。 代码: 解析...

  • element-ui常用组件

    // 顶部图标按钮组件 // 顶部图标按钮点击下拉 // 顶部图片下拉后样式 // 单击弹出确认框 // 引入左边...

  • 关于二次确认框文案的推敲

    确认框:您确认删除这条记录么? 取消 / 确认 确认框:您确认删除这条记录么? 取消 / 删除 ...

  • 解决el-tree-transfer在使用中出现的问题

    el-tree-transfer 是一个基于 VUE 和 element-ui 的树形穿梭框组件,使用前请确认已经...

  • element-ui 组件扩展 - ExSwitch

    开发过程中有这么一个需求,当switch组件切换状态的时候弹出确认框,确认的时候才切换,所以需要改造一下eleme...

  • vue使用element-ui简单封装一个消息确认框

    element中有这样一个组件,消息确认弹窗 用法也非常简单,在方法中触发就可以: 第一个参数为确认框的内容,第二...

网友评论

      本文标题:确认框组件

      本文链接:https://www.haomeiwen.com/subject/mxhgyrtx.html