• liang's avatar
    init · dad95e78
    liang authored
    dad95e78
DialogToothBit.vue 3.79 KB
<template>
  <el-dialog
    center
    :title="title"
    :visible.sync="visible"
    :width="width"
    @close="close"
    :append-to-body="appendToBody"
    :close-on-click-modal="closeModal"
  >
    <div class="main">
      <div class="bit_item">
        <el-checkbox-group v-model="checkData[0]">
          <el-checkbox
            :label="label"
            v-for="(label, idx) in checkList[0]"
            :key="idx"
          ></el-checkbox>
        </el-checkbox-group>
      </div>
      <div class="bit_item">
        <el-checkbox-group v-model="checkData[1]">
          <el-checkbox
            :label="label"
            v-for="(label, idx) in checkList[1]"
            :key="idx"
          ></el-checkbox>
        </el-checkbox-group>
      </div>
      <div class="bit_item">
        <el-checkbox-group v-model="checkData[3]">
          <el-checkbox
            :label="label"
            v-for="(label, idx) in checkList[3]"
            :key="idx"
          ></el-checkbox>
        </el-checkbox-group>
      </div>
      <div class="bit_item">
        <el-checkbox-group v-model="checkData[2]">
          <el-checkbox
            :label="label"
            v-for="(label, idx) in checkList[2]"
            :key="idx"
          ></el-checkbox>
        </el-checkbox-group>
      </div>
    </div>
    <div slot="footer">
      <el-button size="mini" v-if="btnCancel" @click="visible = false"
        >取消</el-button
      >
      <el-button
        size="mini"
        type="primary"
        :loading="loading"
        @click="handleConfirm"
        >确认</el-button
      >
    </div>
  </el-dialog>
</template>

<script>
// 牙位选择组件
export default {
  name: "DialogToothBit",
  data() {
    return {
      loading: false,
      visible: false,
      checkList: [
        ["18", "17", "16", "15", "14", "13", "12", "11"],
        ["21", "22", "23", "24", "25", "26", "27", "28"],
        ["31", "32", "33", "34", "35", "36", "37", "38"],
        ["48", "47", "46", "45", "44", "43", "42", "41"],
      ],
      checkData: [[], [], [], []],
      defaultProps: {
        children: "children",
        label: "name",
      },
    }
  },
  props: {
    appendToBody: {
      type: Boolean,
      default: false,
    },
    closeModal: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: "系统提示",
    },
    width: {
      type: String,
      default: "960px",
    },

    btnCancel: {
      type: Boolean,
      default: true,
    },
    value: {},
  },
  methods: {
    open() {
      this.visible = true
    },

    close() {
      this.loading = false
      this.visible = false
    },

    handleConfirm() {
      const val = this.checkData
        .flat()
        .sort((a, b) => {
          return a - b
        })
        .join(",")
      this.$emit("input", val)
      this.visible = false
    },

    init() {
      const val = this.value || ""
      const data = [[], [], [], []]
      val.split(",").forEach((item) => {
        this.checkList.forEach((c, index) => {
          if (
            c.find((_) => _ === item) &&
            !data[index].find((_) => _ === item)
          ) {
            data[index].push(item)
          }
        })
      })
      this.checkData = data
    },
  },
  watch: {
    visible() {
      if (this.visible) {
        this.init()
      }
    },
  },
}
</script>

<style lang="scss" scoped>
.main {
  display: flex;
  flex-wrap: wrap;
  .bit_item {
    width: 50%;
    min-height: 30px;
    padding: 5px;
    .el-checkbox-group {
      ::v-deep .el-checkbox {
        margin-right: 15px !important;
      }
    }
    &:first-child {
      border-right: 1px solid #000;
      border-bottom: 1px solid #000;
    }
    &:nth-child(2) {
      border-bottom: 1px solid #000;
    }
    &:nth-child(3) {
      border-right: 1px solid #000;
    }
  }
}
</style>