入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Element-ui框架修改-upload、step

创建时间:2017-09-04 投稿人: 浏览次数:3116

Element-ui框架修改-2017.09.04


upload

需求-照片墙只上传一张,上传之后上传按钮消失

修改地址-Packages-upload-src-index 

添加方法

hidePictureCardUpload() {
      document.getElementsByClassName("el-upload el-upload--picture-card")[0].style.display = "none";
    }

使用

<el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  list-type="picture-card"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove" ref="upload">
  <i class="el-icon-plus"></i>
</el-upload>
<el-dialog v-model="dialogVisible" size="tiny">
  <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>

this.$refs.upload.hidePictureCardUpload();

step

需求-在描述部分添加多行信息和按钮


修改地址-Package-steps-src-step.vue

修改后的如下

<template>
  <div
    class="el-step"
    :style="[style,  isLast ? "" : { marginRight: - $parent.stepOffset + "px" }]"
    :class="["is-" + $parent.direction]">
    <div
      class="el-step__head"
      :class="["is-" + currentStatus, { "is-text": !icon }]">
      <div
        class="el-step__line"
        :style="isLast ? "" : { marginRight: $parent.stepOffset + "px" }"
        :class="["is-" + $parent.direction, { "is-icon": icon }]">
        <i class="el-step__line-inner" :style="lineStyle"></i>
      </div>

      <span class="el-step__icon">
        <slot
          v-if="currentStatus !== "success" && currentStatus !== "error""
          name="icon">
          <i v-if="icon" :class="["el-icon-" + icon]"></i>
          <div v-else>{{ index + 1 }}</div>
        </slot>
        <i
          v-else
          :class="["el-icon-" + (currentStatus === "success" ? "check" : "close")]">
        </i>
      </span>
    </div>
    <div
      class="el-step__main"
      :style="{ marginLeft: mainOffset }">
      <div
        class="el-step__title"
        ref="title"
        :class="["is-" + currentStatus]">
        <slot name="title">{{ title }}</slot>
      </div>
      <div
        class="el-step__description"
        :class="["is-" + currentStatus]">
        <slot name="description">{{description}}</slot>
        <br>
        <slot name="dates">{{dates}}</slot>
        <br>
        <slot name="button">
          <el-button type="text" @click="buttonEnter">{{button}}</el-button>
        </slot>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "ElStep",
  props: {
    title: String,
    icon: String,
    description: String,
    dates: String,
    button: String,
    status: String
  },

  data() {
    return {
      index: -1,
      lineStyle: {},
      mainOffset: 0,
      internalStatus: ""
    };
  },

  beforeCreate() {
    this.$parent.steps.push(this);
  },

  beforeDestroy() {
    const steps = this.$parent.steps;
    const index = steps.indexOf(this);
    if (index >= 0) {
      steps.splice(index, 1);
    }
  },

  computed: {
    currentStatus() {
      return this.status || this.internalStatus;
    },
    prevStatus() {
      const prevStep = this.$parent.steps[this.index - 1];
      return prevStep ? prevStep.currentStatus : "wait";
    },
    isLast: function() {
      const parent = this.$parent;
      return parent.steps[parent.steps.length - 1] === this;
    },
    style: function() {
      const parent = this.$parent;
      const isCenter = parent.center;
      const len = parent.steps.length;

      if (isCenter && this.isLast) {
        return {};
      }

      const space = (typeof parent.space === "number"
        ? parent.space + "px"
        : parent.space
          ? parent.space
          : 100 / (isCenter ? len - 1 : len) + "%");
      if (parent.direction === "horizontal") {
        return { width: space };
      } else {
        if (!this.isLast) {
          return { height: space };
        }
      }
    }
  },

  methods: {
    updateStatus(val) {
      const prevChild = this.$parent.$children[this.index - 1];

      if (val > this.index) {
        this.internalStatus = this.$parent.finishStatus;
      } else if (val === this.index && this.prevStatus !== "error") {
        this.internalStatus = this.$parent.processStatus;
      } else {
        this.internalStatus = "wait";
      }

      if (prevChild) prevChild.calcProgress(this.internalStatus);
    },

    calcProgress(status) {
      let step = 100;
      const style = {};

      style.transitionDelay = 150 * this.index + "ms";
      if (status === this.$parent.processStatus) {
        step = this.currentStatus !== "error" ? 50 : 0;
      } else if (status === "wait") {
        step = 0;
        style.transitionDelay = (-150 * this.index) + "ms";
      }

      style.borderWidth = step ? "1px" : 0;
      this.$parent.direction === "vertical"
        ? style.height = step + "%"
        : style.width = step + "%";

      this.lineStyle = style;
    },
    buttonEnter(event) {
      this.$emit("button-enter", this, event);
    }
  },

  mounted() {
    const parent = this.$parent;

    if (parent.direction === "horizontal") {
      if (parent.alignCenter) {
        this.mainOffset = -this.$refs.title.getBoundingClientRect().width / 2 + 16 + "px";
      }
    }

    const unwatch = this.$watch("index", val => {
      this.$watch("$parent.active", this.updateStatus, { immediate: true });
      unwatch();
    });
  }
};
</script>

使用

<el-steps :space="200" :active="1">
  <el-step title="步骤 1" description="这是一段很长很长很长的描述性文字" dates="2018.10.10" button="确认" @button-enter="buttonEnter"></el-step>
  <el-step title="步骤 2" description="这是一段很长很长很长的描述性文字1" dates="2018.10.11" button="确认"></el-step>
  <el-step title="步骤 3" description="这是一段很长很长很长的描述性文字"></el-step>
</el-steps>


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像