elementUI Dialog 封装

119 阅读1分钟
<template>
  <el-dialog
    title="绑定设备"
    :visible="visible"
    width="50%"
    append-to-body
    close-on-click-modal
    @close="$emit('update:visible', false)"
  >
    <el-form class="demo-form-inline" :rules="rules" ref="form" :model="form"
             label-width="80px">
      <el-form-item label="人员:" prop="person">
        <el-select v-model="form.person" style="width: 100%">
          <el-option
            v-for="item in personOptions"
            :key="item.id"
            :label="item.name"
            :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
        <el-button @click="handleClose" size="mini">取 消</el-button>
        <el-button type="primary" @click="handleOk" size="mini">确 定</el-button>
      </span>
  </el-dialog>
</template>

<script>
import {mapState} from "vuex";
import {getBindPersonList} from '@/api/device'

export default {
  name: "bindDialog",
  props: {
    visible: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      form: {
        person: ''
      },
      personOptions: [],
      rules: {
        person: [{required: true, message: '请选择绑定人员', trigger: 'change'},]
      }
    }
  },
  computed: {
    ...mapState({
      // 这里的`myModule`是模块注册时的名字
      userInfo: state => state.user.userInfo,
      projectUserInfo: state => state.user.projectUserInfo,
    }),
  },
  mounted() {
    getBindPersonList(this.projectUserInfo.orgId).then((res) => {
      this.personOptions = res.data.data
    })
  },
  methods: {
    handleClose() {
      this.$refs['form'].resetFields()
      this.$emit('update:visible', false)
    },
    handleOk() {
      this.$refs['form'].validate((valid) => {
        if (valid) {
          this.$emit('handleOk', this.form.person)
          this.form.person = ''
          this.$emit('update:visible', false)
          this.$refs['form'].resetFields()
        }
      })

    },
  }
}
</script>

<style scoped>

</style>

父组件调用

<BindDialog :visible.sync="visible" @handleOk = "handleOk" />

记得加上sync修饰符 子组件就不需要去this.visible来改变值并且回调一个方法 直接使用this.$emit('update:visible', false)

问题

1.封装之后 会发现点击x按钮关不掉弹窗,在子组件增加一个方法如下: @close="$emit('update:visible', false)"