• liang's avatar
    init · dad95e78
    liang authored
    dad95e78
SddDiagram.vue 4.96 KB
<template>
  <section class="diagram">
    <el-page-header @back="$emit('back')" :content="group.groupName">
    </el-page-header>
    <ul v-if="group.groupName">
      <li>
        <div>
          <img src="@/assets/hos_images/center.png" alt="" />
          <p>{{ group.groupName }}</p>
          <div class="operat">
            <el-button type="text" @click="$emit('editGroup', group)"
              >编辑</el-button
            >
            <el-button type="text" @click="handleAdd()">添加</el-button>
            <el-button
              type="text"
              style="color: #f56c6c"
              @click="handleDel(group, 1)"
              >删除</el-button
            >
          </div>
        </div>
        <ul :class="groupList.length ? 'line' : ''">
          <li v-for="row in groupList" :key="row.id">
            <div>
              <img src="@/assets/hos_images/sub-center.png" alt="" />
              <p>{{ row.groupName }}</p>
              <div class="operat">
                <el-button type="text" @click="$emit('editGroup', row)"
                  >编辑</el-button
                >
                <el-button type="text" @click="handleAdd('3', row.id, true)"
                  >添加</el-button
                >
                <el-button
                  type="text"
                  style="color: #f56c6c"
                  @click="handleDel(row)"
                  >删除</el-button
                >
              </div>
            </div>
            <ul :class="row.children && row.children.length ? 'line' : ''">
              <li v-for="child in row.children" :key="child.id">
                <div>
                  <img src="@/assets/hos_images/depart.png" alt="" />
                  <p>{{ child.groupName }}</p>
                  <div class="operat">
                    <el-button
                      type="text"
                      @click="$emit('editGroup', child, true)"
                      >编辑</el-button
                    >
                    <el-button
                      type="text"
                      style="color: #f56c6c"
                      @click="handleDel(child)"
                      >删除</el-button
                    >
                  </div>
                </div>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
    <el-empty v-else></el-empty>
  </section>
</template>

<script>
import { getAllGroupList } from "@/api/coop-group"
import { translateListToTree } from "@/utils/handleRoutes"
import { delCoopGroup } from "@/api/coop-group.js"
export default {
  props: ["group", "diseaseCode"],
  name: "SddDiagram",
  data() {
    return {
      groupList: [],
    }
  },
  methods: {
    update() {
      this.getAllGroupList()
    },
    getAllGroupList() {
      const id = this.group.id
      if (!id) return
      getAllGroupList({
        diseaseCode: this.diseaseCode,
        id,
      }).then((res) => {
        this.groupList = translateListToTree(res.data, id)
      })
    },
    handleAdd(level = "2", parentId = this.group.id, isLevel3 = false) {
      this.$emit("editGroup", { level, parentId }, isLevel3)
    },

    handleDel({ id, groupName }, type) {
      this.$confirm(`确定删除${groupName}吗?`, "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          delCoopGroup(id).then((res) => {
            if (res.code === 1) {
              this.$message.success("删除成功")
              if (type) {
                this.$emit("delete")
              } else {
                this.getAllGroupList()
              }
            }
          })
        })
        .catch(() => {})
    },
  },
  created() {
    this.getAllGroupList()
  },
}
</script>
<style lang="scss" scoped>
.diagram {
  height: 85vh;
  overflow-x: auto;
  ul {
    img {
      width: 80px;
      margin-left: 40px;
    }
    .operat {
      width: 160px;
      text-align: center;
    }
    display: flex;
    font-size: 16px;
    li {
      margin-top: 40px;
      padding-right: 40px;
      position: relative;

      p {
        width: 160px;
        text-align: center;
      }
      > ul {
        position: relative;

        &.line::before {
          content: " ";
          height: 20px;
          width: 1px;
          background-color: #ddd;
          left: 80px;
          position: absolute;
        }

        li {
          position: relative;
          > div {
            padding: 5px 0;
          }
          &::before {
            content: " ";
            height: 20px;
            width: 1px;
            background-color: #ddd;
            position: absolute;
            left: 80px;
            top: -20px;
          }
          &:not(:last-child)::after {
            content: " ";
            height: 1px;
            width: 100%;
            background-color: #ddd;
            position: absolute;
            left: 80px;
            top: -20px;
          }
        }
      }
    }
  }
}
ul,
li {
  list-style: none;
}
</style>