feat(Steps): use relation mixin (#4387)

This commit is contained in:
neverland 2019-09-06 15:34:11 +08:00 committed by GitHub
parent 42d408dc2c
commit 33652b1e84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 32 deletions

View File

@ -1,65 +1,57 @@
import { createNamespace } from '../utils';
import { BORDER } from '../utils/constant';
import { ChildrenMixin } from '../mixins/relation';
import Icon from '../icon';
const [createComponent, bem] = createNamespace('step');
export default createComponent({
beforeCreate() {
const { steps } = this.$parent;
const index = this.$parent.slots().indexOf(this.$vnode);
steps.splice(index === -1 ? steps.length : index, 0, this);
},
beforeDestroy() {
const index = this.$parent.steps.indexOf(this);
if (index > -1) {
this.$parent.steps.splice(index, 1);
}
},
mixins: [ChildrenMixin('vanSteps')],
computed: {
status() {
const index = this.$parent.steps.indexOf(this);
const { active } = this.$parent;
if (index < active) {
if (this.index < this.parent.active) {
return 'finish';
}
if (index === active) {
if (this.index === this.parent.active) {
return 'process';
}
}
},
render() {
const { slots, status } = this;
const { activeIcon, activeColor, inactiveIcon, direction } = this.$parent;
const titleStyle = status === 'process' && { color: activeColor };
methods: {
genCircle() {
const { activeIcon, activeColor, inactiveIcon } = this.parent;
function Circle() {
if (status === 'process') {
if (this.status === 'process') {
return (
slots('active-icon') || (
this.slots('active-icon') || (
<Icon class={bem('icon')} name={activeIcon} color={activeColor} />
)
);
}
const inactiveIconSlot = slots('inactive-icon');
const inactiveIconSlot = this.slots('inactive-icon');
if (inactiveIcon || inactiveIconSlot) {
return inactiveIconSlot || <Icon class={bem('icon')} name={inactiveIcon} />;
}
return <i class={bem('circle')} />;
}
},
render() {
const { status } = this;
const { activeColor, direction } = this.parent;
const titleStyle = status === 'process' && { color: activeColor };
return (
<div class={[BORDER, bem([direction, { [status]: status }])]}>
<div class={bem('title')} style={titleStyle}>
{this.slots()}
</div>
<div class={bem('circle-container')}>{Circle()}</div>
<div class={bem('circle-container')}>{this.genCircle()}</div>
<div class={bem('line')} />
</div>
);

View File

@ -1,9 +1,12 @@
import { createNamespace } from '../utils';
import { GREEN } from '../utils/constant';
import { ParentMixin } from '../mixins/relation';
const [createComponent, bem] = createNamespace('steps');
export default createComponent({
mixins: [ParentMixin('vanSteps')],
props: {
inactiveIcon: String,
active: {
@ -24,12 +27,6 @@ export default createComponent({
}
},
data() {
return {
steps: []
};
},
render() {
return (
<div class={bem([this.direction])}>