vue-filter.js 2.65 KB
let Vue = require('yoho-vue');
const moment = require('moment');

/**
 * 替换参数
 *
 * @example
 *   value = /{width}/{height}/{mode}
 *
 *   {value | resize 100 200 2}  ==> /100/200/2
 */
Vue.filter('resize', (value, width, height, mode)=> {
    return value ? value.replace(/(\{width}|\{height}|\{mode})/g, function($0) {
        const dict = {
            '{width}': width,
            '{height}': height,
            '{mode}': mode || 2
        };

        return dict[$0];
    }) : '';
});

/**
 * 性别款式
 *
 * @example
 *
 *  {value | gender}
 */
Vue.filter('clothingGenderIdentity', (value)=> {
    let ret = null;

    switch (value) {
        case 1:
            ret = '男款';
            break;
        case 2:
            ret = '女款';
            break;
        default:
            ret = '通用';
    }

    return ret;
});

/**
 * 品牌URL
 *
 * @param value brand domain
 */
Vue.filter('brandUrl', (value)=> {
    return `/brand?domain=${value}`;
});

/**
 * 产品 URL
 */
Vue.filter('goodsUrl', productId => {
    return `/product/${productId}`;
});

/**
 * 订单状态
 * @example
 *  {value | order}
 *  状态 0:待付款,1-3:待发货,4-5:待收货(0:未付款,1:已付款,2:备货中,3:配货中,4:已发货,5:运输中,6:已完成)
 */
Vue.filter('convertOrderState', (value) => {
    let stateTxt = '';

    if (typeof value === 'undefined') {
        value = parseInt(value, 10);
    }
    switch (value) {
        case 0:
            stateTxt = '待付款';
            break;
        case 1:
            stateTxt = '待发货';
            break;
        case 2:
            stateTxt = '待发货';
            break;
        case 3:
            stateTxt = '待发货';
            break;
        case 4:
            stateTxt = '待收货';
            break;
        case 5:
            stateTxt = '待发货';
            break;
        case 6:
            stateTxt = '已完成';
            break;
        default:
            stateTxt = '';
            break;
    }
    return stateTxt;
});

/**
 * 转换时间
 *      yyyy-MM-dd hh:mm:ss
 */
Vue.filter('convertTime', (value) => {
    if (typeof value === 'undefined') {
        return;
    }
    let date = new Date(parseFloat(value) * 1000);
    let Y = date.getFullYear() + '-';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    let D = date.getDate() + ' ';
    let h = date.getHours() + ':';
    let m = date.getMinutes() + ':';
    let s = date.getSeconds();

    return Y + M + D + h + m + s;
});


/**
 * 格式化时间
 */
Vue.filter('formatUnixTime', (value, format) => {
    return moment.unix(value).format(format || 'YYYY-MM-DD HH:mm:ss');
});