utils.js 11 KB
/**
 * Created by DEV005 on 2017/8/31.
 */

import React, { Component } from 'react';
import { BackHandler,AppState,StyleSheet,View,Text
    , NativeModules,AsyncStorage,NavigationActions,
    ActivityIndicator,TouchableOpacity,Image,Touch,Platform,Dimensions
} from 'react-native';

import Toast from 'react-native-root-toast';
import AppService from "../service/AppService";
/**
 * 冒一个时间比较短的Toast
 * @param content
 */
export const xnToast = (content) => {
    if (global.toast !== undefined) {
        Toast.hide(toast);
    };
    global.toast = Toast.show(content.toString(), {
        duration: Toast.durations.LONG,
        position: Toast.positions.CENTER,
        shadow: true,
        animation: true,
        hideOnPress: true,
        delay: 0
    });
};

export const formatStringWithHtml = (originString) => {
  if (originString === undefined) {
    return '';
  }
  const newString = originString
    .replace(/ /g, ' ')
    .replace(/"/g, '"')
    .replace(/&/g, '&')
    .replace(/&lt;/g, '<')
    .replace(/&gt;/g, '>');
  return newString;
};
// 获取主题色
export function getHomeColor(){
    if(global.homeColor == undefined){
        // #8A0886 紫色测试
        global.homeColor = "#3399ff";
        return String(global.homeColor);
    }else{
        return String(global.homeColor);
    }
}
// 获取app传入的配置参数,这个方法只需要调用一次
export async function getConfigTheme(){
    try {
        var result= await NativeModules.system.configTheme();
        global.isNew = true;
        global.role = (JSON.parse(result).role ||"" ).toString();
        global.homeColor = (JSON.parse(result).themeColor ||"#3399ff").toString();
        global.weChatBySmallProgramAppId = (JSON.parse(result).WeChatBySmallProgramAppId ||"" ).toString();
        if(Platform.OS === 'ios'){
            global.showWchatShare = JSON.parse(result).showWchatShare || false;
        }else{
            global.showWchatShare = JSON.parse(result).showWchatShare || false;
        }
        // 是否是导航进入
        global.navigateMode = JSON.parse(result).navigateMode || false;
        if(global.navigateMode === 'true' || global.navigateMode == true){
            global.navigateMode = true;
        }else{
            global.navigateMode = false;
        }
        // app分支,默认配置为测试环境
        global.appTarget = (JSON.parse(result).appTarget ||"xntalkTest" ).toString();

    }catch(e){
        global.isNew = false;
        // #8A0886 紫色测试
        global.homeColor = "#3399ff";
        global.showWchatShare = false;
        global.navigateMode = false;
    }finally{
        console.log('getConfigTheme 完成!!!');
        console.log(global.appTarget);
        console.log('-----------------------');
        console.log(global);
    }
}


export function isIphoneX() {
    let dimen = Dimensions.get('window');
    return (
        Platform.OS === 'ios' &&
        !Platform.isPad &&
        !Platform.isTVOS &&
        (dimen.height === 812 || dimen.width === 812)
    );
}

export function isIphoneMax() {
    let dimen = Dimensions.get('window');
    return (
        Platform.OS === 'ios' &&
        !Platform.isPad &&
        !Platform.isTVOS &&
        (dimen.height > 812 || dimen.width > 812)
    );
}


export function getHeaderHeight() {
    if( Platform.OS === 'android'){
        return 48;

    }else if(Platform.OS === 'ios') {

        if(isIphoneX()){
            return 88;

        }else {
            return 64;
        }
    }
}

export function xnBorderWidth() {
    if(isIphoneX()){
        return 1;
    }else if(isIphoneMax()){
        return 1;
    } else {
        return 0.5;
    }
}

export function getHeaderPadding() {
    if( Platform.OS === 'android'){
        return 0;
    }else if(Platform.OS === 'ios') {
        if(isIphoneX()){
            return 44;
        }else {
            return 20;
        }
    }
}

export function getFooterBottom() {
    if( Platform.OS === 'android'){
        return 0;
    }else if(Platform.OS === 'ios') {
        if(isIphoneX()){
            return 0;
        }else if(isIphoneMax()){
            return 34;
        }else{
            return 0;
        }
    }
}

export function toPersonalPageWithUserId(userId){
    if(!!!userId){
        xnToast('无法与该用户私信');
    }else if(userId == global.userId){
        xnToast('不能与自己私信');
    }else{
        let _this = this;
        let vm = {
            userId: userId,
        };
        AppService.getUnionByUserId(vm).then(data => {
            if (data.errors == null || data.errors.length > 0) {
                xnToast(data.errors[0].message);
                return
            }
            console.log(data);

            if(!!data.union){
                let union = data.union;
                if(!!union.imId){
                    NativeModules.system.presentPersonal(union.imId);
                }else{
                    xnToast('无法与该用户私信');
                }
            }else{
                xnToast('无法与该用户私信');
            }
        });
    }
}


//代码如下所示:
export function convertCurrency(money) {
    //汉字的数字
    var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    //基本单位
    var cnIntRadice = new Array('', '拾', '佰', '仟');
    //对应整数部分扩展单位
    var cnIntUnits = new Array('', '万', '亿', '兆');
    //对应小数部分单位
    var cnDecUnits = new Array('角', '分', '毫', '厘');
    //整数金额时后面跟的字符
    var cnInteger = '整';
    //整型完以后的单位
    var cnIntLast = '元';
    //最大处理的数字
    var maxNum = 999999999999999.9999;
    //金额整数部分
    var integerNum;
    //金额小数部分
    var decimalNum;
    //输出的中文金额字符串
    var chineseStr = '';
    //分离金额后用的数组,预定义
    var parts;
    if (money == '') { return ''; }
    money = parseFloat(money);
    if (money >= maxNum) {
        //超出最大处理数字
        return '';
    }
    if (money == 0) {
        chineseStr = cnNums[0] + cnIntLast + cnInteger;
        return chineseStr;
    }
    //转换为字符串
    money = money.toString();
    if (money.indexOf('.') == -1) {
        integerNum = money;
        decimalNum = '';
    } else {
        parts = money.split('.');
        integerNum = parts[0];
        decimalNum = parts[1].substr(0, 4);
    }
    //获取整型部分转换
    if (parseInt(integerNum, 10) > 0) {
        var zeroCount = 0;
        var IntLen = integerNum.length;
        for (var i = 0; i < IntLen; i++) {
            var n = integerNum.substr(i, 1);
            var p = IntLen - i - 1;
            var q = p / 4;
            var m = p % 4;
            if (n == '0') {
                zeroCount++;
            } else {
                if (zeroCount > 0) {
                    chineseStr += cnNums[0];
                }
                //归零
                zeroCount = 0;
                chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
                chineseStr += cnIntUnits[q];
            }
        }
        chineseStr += cnIntLast;
    }
    //小数部分
    if (decimalNum != '') {
        var decLen = decimalNum.length;
        for (var i = 0; i < decLen; i++) {
            var n = decimalNum.substr(i, 1);
            if (n != '0') {
                chineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
        }
    }
    if (chineseStr == '') {
        chineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (decimalNum == '') {
        chineseStr += cnInteger;
    }
    return chineseStr;
}

/**
 * add by hongpeng_dong  2007.05.12
 * 验证金额,成绩等可以带小数点数字的格式
 * @param str(要验证的字符串) num1(整数部分允许的最大长度) num2(小数点后允许的最大长度)
 * num1 num2 要求均为大于0的正整数 否则直接返回false
 * @return 格式正确true 不正确false
 * (正确格式可以为不含小数点的正整数,长度最大为传入的数值;如果str为空,返回true)
 */
export function validateResult(str,num1,num2){
    if('' == trim(str))
        return true;
    if(num1 ==0 || num2 == 0)
        return false;
    var v1 = '';
    var v2 = '';
    if(num1 != 1)
        v1=',' + num1;
    if(num2 != 1)
        v2 = ','+num2;
    var re = new RegExp('\(^[0-9]{1'+v1+'}\\.[0-9]{1'+v2+'}$)|(^[0-9]{1'+v1+'}$)');
    return re.test(str);
}

export function isNotANumber(inputData) {
    if (parseFloat(inputData).toString() == "NaN") {
        //alert(“请输入数字……”);
        return false;
    } else {
        return true;
    }
}

export function isJSONString(str) {
    try {
        let obj = JSON.parse(str);
        return !!obj && typeof obj === 'object';
    } catch (e) {
        return false;
    }
}

export function isIdCard(cardid) {
    var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
    //号码规则校验
    if (!format.test(cardid)) {
        return false;
    }
    //区位码校验
    //出生年月日校验  前正则限制起始年份为1900;
    var year = cardid.substr(6,4),//身份证年
        month = cardid.substr(10,2),//身份证月
        date = cardid.substr(12,2),//身份证日
        time = Date.parse(month+'-'+date+'-'+year),//身份证日期时间戳date
        now_time = Date.parse(new Date()),//当前时间戳
        dates = (new Date(year,month,0)).getDate();//身份证当月天数
    if(time>now_time||date>dates){
        return false
    }
    //校验码判断
    var c = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);  //系数
    var b = new Array('1','0','X','9','8','7','6','5','4','3','2'); //校验码对照表
    var id_array = cardid.split("");
    var sum = 0;
    for(var k=0;k<17;k++){
        sum+=parseInt(id_array[k])*parseInt(c[k]);
    }
    if(id_array[17].toUpperCase() != b[sum%11].toUpperCase()){
        return false;
    }
    return true;
}

export function LTrim(str)
{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(0)) != -1)
    {
        var j=0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
        {
            j++;
        }
        s = s.substring(j, i);
    }
    return s;
}
export function RTrim(str)
{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);
    if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
    {
        var i = s.length - 1;
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
        {
            i--;
        }
        s = s.substring(0, i+1);
    }
    return s;
}
export function trim(str)
{
    return RTrim(LTrim(str));
}

const xnUtils={
    xnToast:xnToast,
    isIphoneX:isIphoneX,
    getHeaderHeight:getHeaderHeight,
    getHeaderPadding:getHeaderPadding,
    getFooterBottom:getFooterBottom,
    xnBorderWidth:xnBorderWidth,
}
export default xnUtils;