Element-ui框架修改-upload、step
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。
- 上一篇:没有了
- 下一篇:没有了
