// 封装过滤器  调用方式 如：姓名脱敏 <!-- nameHide全局过滤器 --> {{ name | nameHide }}
// 用链式调用的方式在一个表达式中使用多个过滤器 {{productOneCost| round}}
// 过滤器同样可以接收参数，在下面这个例子中，输入的字符串会作为第二个参数传递给过滤器函数： {{productOneCost| numToFixed('$')}}

// 根据身份证号码判断男女
let sexIdcardFilter = value => {
    if (!value) {
        return "";
    } else {
        let data = value.substr(16, 1) % 2 === 1 ? "男" : "女";
        return data;
    }
};
  
// 身份证号脱敏('331082199708094687' 转换成 '33108219********87') 第8位开始替换8个
let IDcardHide = num => {
    let data = num.replace(/(\d{8})\d{8}(\d*)/, "$1********$2");
    return data;
};
  
// 手机号脱敏('13912345678' 转换成 '139****5678') 第3位开始替换4个
let telHide = num => {
    let data = num.replace(/(\d{3})\d{4}(\d*)/, "$1****$2");
    return data;
};
  
// 姓名脱敏(小明 转换成 *明   李小明 转换成 李*明   欧阳小明 转换成 欧**明)
let nameHide = name => {
    if (name.length === 2) {
        return new Array(name.length).join("*") + name.substr(-1);
    } else {
        return (
        name.substr(0, 1) + new Array(name.length - 1).join("*") + name.substr(-1)
        );
    }
};

//字符串循环复制,count->次数
let repeatStr = (value, count) => {
    var text = '';
    for (var i = 0; i < count; i++) {
        text += value;
    }
    return text;
}
  
// 数字/浮点数保留n位小数点 num 位数
let numToFixed = (value = 0, num = 2) => {
    value = Number(value)
    value = isNaN(value) ? 0 : value
    return value.toFixed(num)
}

//去除空格 type 1-所有空格 2-前后空格 3-前空格 4-后空格
let trim = (value, trim) => {
    switch (trim) {
    case 1:
    return value.replace(/\s+/g, "");
    case 2:
    return value.replace(/(^\s*)|(\s*$)/g, "");
    case 3:
    return value.replace(/(^\s*)/g, "");
    case 4:
    return value.replace(/(\s*$)/g, "");
    default:
    return value;
    }
}

//现金额大写转换函数
let upDigit = (n) => {
    var fraction = ['角', '分', '厘'];
    var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    var unit = [['元', '万', '亿'],['', '拾', '佰', '仟']];
    var head = n < 0 ? '欠' : '';
    n = Math.abs(n);
    var s = '';
    for (var k = 0; k < fraction.length; k++) {
        s += (digit[Math.floor(n * 10 * Math.pow(10, k)) % 10] + fraction[k]).replace(/零./, '');
    }

    s = s || '整';
    n = Math.floor(n);
    for (var i = 0; i < unit[0].length && n > 0; i++) {
        var p = '';
        for (var j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
        //s = p + unit[0][i] + s;
    }
    return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
} 

//任意格式日期处理
//使用格式：
// {{ '2021-04-26 11:05' | formaDate('yyyy-MM-dd hh:mm:ss') }} 
// {{ '2021-04-26 11:05' | formaDate('yyyy-MM-dd') }} 
// {{ '2021-04-26 11:05' | formaDate('MM/dd') }} 等
let formaDate = (value, fmt)  => {

    if(value == null || value == ''){return ''}
    var date = new Date(value);
    var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //日
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //秒
        "w+": date.getDay(), //星期
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o) {
        if(k === 'w+') {
            if(o[k] === 0) {
                fmt = fmt.replace('w', '周日');
            }else if(o[k] === 1) {
                fmt = fmt.replace('w', '周一');
            }else if(o[k] === 2) {
                fmt = fmt.replace('w', '周二');
            }else if(o[k] === 3) {
                fmt = fmt.replace('w', '周三');
            }else if(o[k] === 4) {
                fmt = fmt.replace('w', '周四');
            }else if(o[k] === 5) {
                fmt = fmt.replace('w', '周五');
            }else if(o[k] === 6) {
                fmt = fmt.replace('w', '周六');
            }
        }else if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
}

export default {
    sexIdcardFilter,
    IDcardHide,
    telHide,
    nameHide,
    repeatStr,
    numToFixed,
    trim,
    upDigit,
    formaDate
};