import { VxeUI } from 'vxe-pc-ui';

// 手机号校验
VxeUI.validators.add('ValidMobile', {
  itemValidatorMethod({ itemValue, rule }) {
    if ( itemValue && !/^1[3-9]\d{9}$/.test(itemValue) ) return new Error('手机号码格式不正确');
  },
});
// 身份证号
VxeUI.validators.add('ValidIdentityCard', {
  itemValidatorMethod({ itemValue, rule }) {
    if (!itemValue || typeof itemValue !== 'string') return;
    if (!/^[1-9]\d{5}(1[8-9]|2\d)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|X|x)$/.test(itemValue)) return new Error('身份证号格式不正确');
    // 加权因子
    const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校验码
    const check = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    const char = itemValue.split('');
    const value = char.slice(0, 17).reduce((c, v, i) => c + (+v * weights[i]), 0);
    if (check[value % 11] !== char[17].toUpperCase()) return new Error('身份证号校验不通过');
  },
});
VxeUI.validators.add('ValidPassword', {
  itemValidatorMethod({ itemValue, rule }) {
    if ( !rule.required ) return;
    if ( !itemValue ) return new Error(`请输入密码`);
    if ( !(
      itemValue.length >= 8 &&
      /\d/.test(itemValue) &&
      /[a-zA-Z]/.test(itemValue)
    ) ) {
      return new Error('密码格式不正确（由数字、字母组成，最少8位）');
    }
  },
});
