vue-filter.js 4.09 KB
let Vue = require('vue');

/**
 * 替换参数
 *
 * @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/${value}`;
});

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

/**
 * 订单状态
 * @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() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
    let s = date.getSeconds();

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


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

    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() < 10 ? '0' + date.getDate() : date.getDate();
    let h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
    let m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();

    // let s = date.getSeconds();

    // return M + '.' + D + ' ' + h + ' ' + ' ' + m + ' ' + s;
    return `${M}.${D} ${h}:${m}`;
});

const zhDict = {
    color: '颜色',
    gender: '性别',
    size: '尺寸',
    brand: '品牌',
    priceRange: '价格',
    groupSort: '品类',
    discount: '折扣',
    style: '风格',
    ageLevel: '年龄'
};

const enDict = {
    color: 'Color',
    gender: 'Gender',
    size: 'Size',
    brand: 'Brand',
    priceRange: 'Price',
    groupSort: 'Category',
    discount: 'Sale',
    style: 'Style',
    ageLevel: 'Age'
};

Vue.filter('filter-cn', (value, prefix) => {
    prefix = prefix || '';
    value = zhDict[value] || '';
    return prefix + value || '';
});

Vue.filter('filter-en-cn', value => {
    const cn = zhDict[value] || '';
    const en = enDict[value] || '';

    return en + cn;
});