step.vue 2.55 KB
<template>
    <div :class="wrapClasses">
        <div :class="[`${prefixCls}-tail`]"></div>
        <div :class="[`${prefixCls}-head`]">
            <div :class="[`${prefixCls}-head-inner`]">
                <span v-if="!icon && status != 'finish' && status != 'error'">{{ stepNumber }}</span>
                <span v-else :class="iconClasses"></span>
            </div>
        </div>
        <div :class="[`${prefixCls}-main`]">
            <div :class="[`${prefixCls}-title`]">{{ title }}</div>
            <div v-if="content" :class="[`${prefixCls}-content`]">{{ content }}</div>
        </div>
    </div>
</template>
<script>
    import { oneOf } from '../../utils/assist';

    const prefixCls = 'ivu-steps';
    const iconPrefixCls = 'ivu-icon';

    export default {
        props: {
            status: {
                validator (value) {
                    return oneOf(value, ['wait', 'process', 'finish', 'error']);
                }
            },
            title: {
                type: String,
                default: ''
            },
            content: {
                type: String
            },
            icon: {
                type: String
            }
        },
        data () {
            return {
                prefixCls: prefixCls,
                stepNumber: '',
                nextError: false
            }
        },
        computed: {
            wrapClasses () {
                return [
                    `${prefixCls}-item`,
                    `${prefixCls}-status-${this.status}`,
                    {
                        [`${prefixCls}-custom`]: !!this.icon,
                        [`${prefixCls}-next-error`]: this.nextError
                    }
                ]
            },
            iconClasses () {
                let icon = '';

                if (!!this.icon) {
                    icon = this.icon;
                } else {
                    if (this.status == 'finish') {
                        icon = 'ios-checkmark-empty';
                    } else if (this.status == 'error') {
                        icon = 'ios-close-empty';
                    }
                }

                return [
                    `${prefixCls}-icon`,
                    `${iconPrefixCls}`,
                    {
                        [`${iconPrefixCls}-${icon}`]: icon != ''
                    }
                ]
            }
        },
        watch: {
            status () {
                if (this.status == 'error') {
                    this.$parent.setNextError();
                }
            }
        }
    }
</script>