code-snippet.vue 2.38 KB
<template>
  <div class="eagle-code-snippet">
    <div class="eagle-code-snippet--demo">
      <slot name="source"></slot>
    </div>
    <div class="eagle-code-snippet--desc">
      <slot name="desc"></slot>
      <span class="eagle-code-snippet--icon-code"
            @click="showCode = !showCode"
            title="查看代码"
      >
        <img v-if="showCode"
             src="@/assets/images/icon/code-open.svg" />
        <img v-else
             src="@/assets/images/icon/code-close.svg" />
      </span>
    </div>
    <eagle-code-collapse>
      <div v-show="showCode"
           class="eagle-code-snippet--code">
        <slot name="code"></slot>
      </div>
    </eagle-code-collapse>
  </div>
</template>

<script>
import EagleCodeCollapse from "./code-collapse"

export default {
  components: { EagleCodeCollapse },
  data() {
    return {
      showCode: false
    };
  }
};
</script>
<style lang="scss">
.eagle-code-snippet {
  position: relative;
  box-sizing: border-box;
  width: 100%;
  margin: 0 0 16px;
  border-radius: 4px;
  transition: all 0.2s;
  border: 1px solid #e6e6e6;
  background-color: #ffffff;
  text-align: left;
  // element-ui样式冲突
  ul > li {
    list-style-type: none !important;
    margin: 0px !important;
    padding: 0px !important;
  }
  .el-pagination.is-background .el-pager li {
    margin: 0 5px !important;
  }
}
.eagle-code-snippet--demo {
  box-sizing: border-box;
  padding: 30px 35px;
  color: #333333;
  border-bottom: 1px solid #ebedf0;
}
.eagle-code-snippet--desc {
  position: relative;
  box-sizing: border-box;
  width: 100%;
  padding: 0 20px;
  font-size: 14px;
  transition: background-color 0.4s;
  line-height: 1.5;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.eagle-code-snippet--icon-code {
  cursor: pointer;
  min-width: 18px;
  width: 18px;
  height: 18px;
  text-align: center;

  > img {
    transition: all 0.4s;
    user-select: none;
    max-width: 100%;
    width: 100%;
    vertical-align: baseline;
    box-shadow: none;
  }
}

.eagle-code-snippet--code {
  box-sizing: border-box;
  border-top: 1px solid #ebedf0;

  code {
    background-color: #fff;
    font-family: Consolas, Menlo, Courier, monospace;
    border: none;
    display: block;
    font-size: 14px;
    padding: 16px 32px;
    line-height: 1.5;
  }

  .hljs {
    padding: 0;
    margin: 0;

    code {
      margin: 0;
    }

  }
}
</style>