Vue-Anfrage zugrunde liegendes Paket

Dieses Projekt verwendet vue3, gilt aber auch für vue2. Wenn die zugrunde liegende Kapselung der Schnittstellenanforderung gut ist, sind die späteren Entwicklungs- und Wartungskosten geringer. Der Entwickler dieses Code-Farmers arbeitet seit vielen Jahren an der Vereinfachung des Codes, und die späteren Wartungskosten sind gering. Die aktuelle Schnittstellenanforderung besteht darin, dass ich das Wesentliche aus der Schlacke heraushole, und ich empfehle jedem dringend, es so zu kapseln.

Anweisungen

<template>
</template>
<script>
import api from '@/apis/getdata.js'
export default {
      
      
  data() {
      
      
    return {
      
       }
  },
  mounted() {
      
      
    this.getlist()
  },
  methods: {
      
      
    getlist() {
      
      
      api.getlist().then(res => {
      
      
        if (res.code === 200) {
      
      
        } else {
      
      
        }
      })
    },
   },
}
</script>
<style lang="less" scoped>
</style>

apis/getdata.js

// getdata.js
import request from '@/libs/request.js';
export default {
    
    
    // 请求方法
    'getlist': function (data) {
    
    
        return request.get('/api/getdata/getlist', data, {
    
    }, 'pro')
    }, 
    'getDIST': function (options) {
    
    
        return request.post('/api/getdata/getDIST', {
    
    }, options, 'pro')
    }, 
};

Fordern Sie die zugrunde liegende Architektur an

Kopieren Sie den folgenden Code direkt und passen Sie den Pfad für jede Datei an

request.js

import axios from 'axios'
import Bus from './bus'
import util from './util.js';

import ViewUI from 'view-design';

// http request 拦截器
axios.interceptors.response.use(
    response => {
    
    
        return response
    },
    //接口错误状态处理,也就是说无响应时的处理
    error => {
    
    
        if (error.response.status == 403) {
    
    
            Bus.$emit('Illegalcalls');
        } else if (error.response.status == 400) {
    
    
            ViewUI.Notice.error({
    
     title: 'Service Error 400', desc: '参数错误,请检查参数信息' });
        } else if (error.response.status == 404) {
    
    
            ViewUI.Notice.error({
    
     title: 'Service Error 404', desc: '未找到接口,请检查链接地址' });
        } else if (error.response.status == 500) {
    
    
            ViewUI.Notice.error({
    
     title: 'Service Error 500', desc: '服务器出现错误' });
        } else if (error.response.status == 502) {
    
    
            ViewUI.Notice.error({
    
     title: 'Service Error 502', desc: '服务器响应出现错误' });
        } else {
    
    
            ViewUI.Notice.error({
    
     title: 'Service Error' + error.response.status, desc: '链接异常,请检查错误信息' });
        }
        return Promise.reject(error) // 返回接口返回的错误信息
        // return Promise.reject(error.response.status) // 返回接口返回的错误信息
    })

let AxiosEventCatch = {
    
    };

/**
 * 隐藏 loading 方法
 *
 * @param {*} id
 * @memberof Request
 */
const hideLoading = function (id) {
    
    
    delete AxiosEventCatch[id];
    if (Object.keys(AxiosEventCatch).length == 0) {
    
    
        Bus.$emit('loading-change', false)
    }
}

const Event = function (options) {
    
    
    var id = util.Guid();
    if (options.loading !== false) {
    
    
        AxiosEventCatch[id] = '';
        Bus.$emit('loading-change', true)
    }
    var baseUrlPath = ''
    if (process.env.NODE_ENV == 'development') {
    
    
        try {
    
    
            baseUrlPath = window.WIN_COMFIG.service[options.reqType]
        } catch (error) {
    
    
            baseUrlPath = window.WIN_COMFIG.service.pro
        }
    } else {
    
    
        // baseUrlPath = location.protocol
		baseUrlPath = window.WIN_COMFIG.service.pro
    }

    var _url = baseUrlPath + options.url;
    var _params = JSON.parse(JSON.stringify(options.params));
    _url = _url.replace(/\{\w+\}/g, function (i) {
    
    
        var _src = i.replace('{', '').replace('}', '');
        if (_params.hasOwnProperty(_src)) {
    
    
            var _value = _params[_src];
            delete _params[_src];
            return _value;
        }
    });

    return axios({
    
    
        method: options.type,
        url: _url,
        params: _params,
        data: options.data
    }).then(function (res) {
    
    
        if (options.loading !== false) {
    
    
            hideLoading(id);
        }
        return res.data;
    }).catch(function (err) {
    
    
        if (options.loading !== false) {
    
    
            hideLoading(id);
        }
        throw err.response
    });
}

export default {
    
    

    /**
     * apis 接口调用参数
     *
     * @param {String} url  链接地址
     * @param {Object} params Url 传参对象
     * @param {Object} data PostData 传参对象
     * @param {String} reqType 开发模式下, 链接地址指向
     * @param {Blob} loading 是否显示loading 开关
     * @return {axios} 接口异步对象
     */
    post(url, params, data, reqType, loading) {
    
    
        var _data = {
    
    };
        _data.type = 'post';
        _data.data = data || {
    
    };
        _data.reqType = reqType;
        _data.params = params;
        _data.url = url;
        _data.loading = loading
        return Event(_data)
    },
    get(url, params, data, reqType, loading) {
    
    
        var _data = {
    
    };
        _data.type = 'get';
        _data.data = data || {
    
    };
        _data.reqType = reqType;
        _data.params = params;
        _data.url = url;
        _data.loading = loading
        return Event(_data)
    },
    put(url, params, data, reqType, loading) {
    
    
        var _data = {
    
    };
        _data.type = 'put';
        _data.data = data || {
    
    };
        _data.reqType = reqType;
        _data.params = params;
        _data.url = url;
        _data.loading = loading
        return Event(_data)
    },
    delete(url, params, data, reqType, loading) {
    
    
        var _data = {
    
    };
        _data.type = 'delete';
        _data.data = data || {
    
    };
        _data.reqType = reqType;
        _data.params = params;
        _data.url = url;
        _data.loading = loading
        return Event(_data)
    }
}

Das Problem von bus.js besteht nur darin, die Warteleiste für das Laden von Schnittstellenanforderungen anzuzeigen und auszublenden

import vue from 'vue'
// 全局通知事件
export default new vue({
    
    });

Globaler Anforderungsadresspfad /public/config.js

// 开发模式 全局配置文件
var WIN_COMFIG = {
    
    
    // 版本号
    version: '1.0.0',
    // 地址请求环境配置 (部署模式用)
    service: {
    
    
        pro: 'http://192.168.11.51:30771'
    },
};
console.log('当前版本 : ' + WIN_COMFIG.version);

Das Tool util.js kann die Guid()-Methode separat herausnehmen und die Guid()-Methode verwenden, um hauptsächlich das Problem des Ladens von Streifen zu lösen.

 // 整理基本库方法
/** @type {Object} 正则库 */
var regulars = {
    
    
    year: {
    
    
        regExp: /^(19|20)\d{2}$/,
        message: "只能为年份(四位,1900-2099)"
    },
    number: {
    
    
        regExp: /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/,
        message: "只能为数字"
    },
    bankNum: {
    
    
        regExp: /^\d{16}|\d{19}$/,
        message: "格式错误"
    },
    telephone: {
    
    
        regExp: /^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$/,
        message: "格式错误"
    },
    int: {
    
    
        regExp: /^[0-9]*$/,
        message: "只能为正整数"
    },
    phone: {
    
    
        regExp: /^[1][0-9]{10}$/,
        message: "格式错误"
    },
    allChinese: {
    
    
        regExp: /^([\u4E00-\u9FA5]+,?)+$/,
        message: "只能为中文"
    },
    haveChinese: {
    
    
        regExp: "[\\u4E00-\\u9FFF]+",
        message: "中含有汉字"
    },
    idCard15: {
    
    
        regExp: /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/,
        message: "格式错误"
    },
    idCard18: {
    
    
        regExp: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$/,
        message: "格式错误"
    },
    url: {
    
    
        regExp: /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/,
        message: "格式错误"
    },
    email: {
    
    
        regExp: /^[-_A-Za-z0-9]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/,
        message: "格式错误"
    },
    Special: {
    
    
        regExp: ["~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "{", "}", "[", "]", "(", ")", ":", ";", "'", "|", "\\", "<", ">", "?", "/", "<<", ">>", "||", "//", "administrators", "administrator", "管理员", "系统管理员", "admin", "select", "delete", "update", "insert", "create", "drop", "alter", "trancate"],
        message: "不能包含特殊字符"
    },
    null: {
    
    
        regExp: "^[ ]+$",
        message: "不能为空"
    },
};

/**
 *
 * 判断对象是否完全一致
 * @param {*} a
 * @param {*} b
 * @return {*} 
 */
const isEqual = function (a, b) {
    
    
    if (a === b) {
    
    
        return a !== 0 || 1 / a === 1 / b;
    };
    if (a == null || b == null) {
    
    
        return a === b;
    };
    var A = Object.prototype.toString.call(a);
    var B = Object.prototype.toString.call(b);
    if (A !== B) {
    
    
        return false;
    };
    switch (A) {
    
    
        case '[object RegExp]':
        case '[object String]':
            return '' + a === '' + b;
        case '[object Number]':
            if (+a !== +a) {
    
    
                return +b !== +b;
            };
            return +a === 0 ? 1 / +a === 1 / b : +a === +b;
        case '[object Date]':
        case '[object Boolean]':
            return +a === +b;
    };
    if (A == '[object Object]') {
    
    
        if (JSON.stringify(a) != JSON.stringify(b)) {
    
    
            return false;
        };
        return true;
    };
    if (A == '[object Array]') {
    
    
        if (a.toString() == b.toString()) {
    
    
            return true;
        }
        return false;
    };
};
/**
 * 判断是否在数组中,(
 *
 * @param {*} str
 * @param {*} _array
 * @return {*} 
 */
const inArray = function (str, _array) {
    
    
    let isInArray = -1;
    for (let i = 0; i < _array.length; i++) {
    
    
        const element = _array[i];
        if (isEqual(element, str)) {
    
    
            isInArray = i;
            break;
        };
    };
    return isInArray;
};

// 

/**
 * 获取对象key值列表
 *
 * @param {*} obj
 * @return {*} 
 */
const getKeyArray = function (obj) {
    
    
    var _array = [];
    eachObject(obj, function (item, key) {
    
    
        _array.push(key);
    });
    return _array;
};

// 
/**
 * 将数组以 key 对应属性 为键值 转换为对象,key值默认为ID;
 *
 * @param {*} _array
 * @param {*} key
 * @return {*} 
 */
const converArrayToObj = function (_array, key) {
    
    
    var obj = {
    
    };
    key = key || 'id';

    var canConver = true;
    for (let i = 0; i < _array.length; i++) {
    
    
        const element = _array[i];
        if (element.hasOwnProperty(key)) {
    
    
            obj[element[key].toString()] = element;
        } else {
    
    
            canConver = false;
        }
    };
    if (canConver) {
    
    
        return obj;
    } else {
    
    
        console.error('对象转换错误 :未找到对应Key值');
        return obj;
    };
};

// 

/**
 * 历遍对象,并执行方法
 *
 * @param {*} obj
 * @param {*} callback
 */
const eachObject = function (obj, callback) {
    
    
    for (const key in obj) {
    
    
        if (obj.hasOwnProperty(key)) {
    
    
            const element = obj[key];
            var value = callback(element, key);
            if (value === false) {
    
    
                break;
            };
        }
    };
};


/**
 * 验证方法
 *
 * @param {*} type
 * @param {*} str
 * @return {*} 
 */
function test(type, str) {
    
    
    var re = new RegExp(regulars[type].regExp);
    return !re.test(str) ? true : false;
};

// 验证用方法集合
var verifyObj = {
    
    
    year: {
    
    
        event: value => {
    
     return test('year', value) },
        message: regulars.year.message,
    },
    number: {
    
    
        event: value => {
    
     return test('number', value) },
        message: regulars.number.message
    },
    bankNum: {
    
    
        event: value => {
    
     return test('bankNum', value) },
        message: regulars.bankNum.message
    },
    telephone: {
    
    
        event: value => {
    
     return test('telephone', value) },
        message: regulars.telephone.message
    },
    int: {
    
    
        event: value => {
    
     return test('int', value) },
        message: regulars.int.message
    },
    phone: {
    
    
        event: value => {
    
     return test('phone', value) },
        message: regulars.phone.message
    },
    url: {
    
    
        event: value => {
    
     return test('url', value) },
        message: regulars.url.message
    },
    email: {
    
    
        event: value => {
    
     return test('email', value) },
        message: regulars.email.message
    },
    allChinese: {
    
    
        event: value => {
    
     return test('allChinese', value) },
        message: regulars.allChinese.message
    },
    haveChinese: {
    
    
        event: function (str) {
    
    
            var re = new RegExp(regulars.haveChinese.regExp);
            return re.test(str) ? true : false;
        },
        message: regulars.haveChinese.message
    },
    notNull: {
    
    
        event: function (str) {
    
    
            if (str == "" || str == undefined || str == null || str == NaN) return !false;
            var re = new RegExp(regulars.null.regExp);
            return re.test(str);
        },
        message: regulars.null.message
    },
    isSpecial: {
    
    
        event: function (str) {
    
    
            str = str.toLowerCase();
            for (var i = 0; i < regulars.Special.regExp.length; i++) {
    
    
                if (str.indexOf(regulars.Special.regExp[i]) >= 0) {
    
    
                    return false;
                }
            }
            return true;
        },
        message: regulars.Special.message
    },
    isIdCard: {
    
    
        event: function (str) {
    
    
            var re1 = new RegExp(regulars.idCard15.regExp);
            var re2 = new RegExp(regulars.idCard18.regExp);
            return !(re1.test(str) || re2.test(str) ? true : false);
        },
        message: regulars.idCard18.message
    }
};

// 

/**
 * 判断变量是否为某一值
 *
 * @param {*} obj
 * @param {*} type
 * @return {*} 
 */
const is = function (obj, type) {
    
    
    if (type) {
    
    
        var result = null;
        var objectString = Object.prototype.toString.call(obj);
        switch (type) {
    
    
            case "string":
                result = objectString == "[object String]";
                break;
            case "function":
                result = objectString == "[object Function]";
                break;
            case "array":
                result = objectString == "[object Array]";
                break;
            case "number":
                result = objectString == "[object Number]" && obj === obj;
                break;
            case "date":
                result = objectString == "[object Date]";
                break;
            case "object":
                result = objectString == "[object Object]";
                break;
            case "bool":
                result = objectString == "[object Boolean]";
                break;
            case "regExp":
                result = objectString == "[object RegExp]";
                break;
            case "null":
                result = objectString == "[object Null]";
                break;
            case "undefined":
                result = objectString == "[object Undefined]";
                break;
            case "NaN":
                result = (obj !== obj);
                break;
        };
        return result;
    } else {
    
    
        var mold = null;
        var objectString = Object.prototype.toString.call(obj);
        switch (objectString) {
    
    
            case "[object String]":
                mold = "string";
                break;
            case "[object Function]":
                mold = "function";
                break;
            case "[object Array]":
                mold = "array";
                break;
            case "[object Number]":
                if (obj !== obj) {
    
    
                    mold = "NaN";
                } else {
    
    
                    mold = "number"
                };
                break;
            case "[object Date]":
                mold = "date";
                break;
            case "[object Object]":
                mold = "object";
                break;
            case "[object Boolean]":
                mold = "bool";
                break;
            case "[object RegExp]":
                mold = "regExp";
                break;
            case "[object Null]":
                mold = "null";
                break;
            case "[object Undefined]":
                mold = "undefined";
                break;
        };
        return mold;
    };
};

/**
 * 自定义判断位数区间
 *
 * @param {*} type
 * @param {*} str
 * @return {*} 
 */
const customLength = function (type, str) {
    
    
    var name = type.split('$');
    var length = str.toString().length;
    var nums = parseInt(name[1]);
    if (name[0] == 'les') {
    
    
        return !(length > nums) ? '不能小于' + nums + '位' : false;
    } else if (name[0] == 'gre') {
    
    
        var nums = parseInt(name[1]);
        return !(length <= nums) ? '不能大于' + nums + '位' : false;
    } else {
    
    
        console.error('error => 未找到验证规则:' + type);
    };
};

// 

/**
 * 正则验证方法
 *
 * @param {*} value
 * @param {*} type
 * @return {*} 
 */
const jude = function (value, type) {
    
    
    var keyArray = getKeyArray(verifyObj);
    if (type.indexOf('$') != -1) {
    
    
        return customLength(type, value);
    } else if (inArray(type, keyArray) != -1) {
    
    
        var answer = verifyObj[type].event(value);
        return answer ? verifyObj[type].message : false;
    } else {
    
    
        console.error('error => 未找到验证规则:' + type);
    };
};


/**
 * 按照规则进行验证
 *
 * @param {*} singleRule
 * @param {*} value
 * @param {*} text
 * @return {*} 
 */
const verifyRule = function (singleRule, value, text) {
    
    
    // 返回对象类型
    var ruleType = is(singleRule);
    if (ruleType == 'string') {
    
    
        // 当为String类型时,去默认验证方法中寻找
        var result = jude(value, singleRule);
        if (result) {
    
    
            return text + result;
        } else {
    
    
            return false;
        };
    } else if (ruleType == 'function') {
    
    
        // 当为方法类型时,执行方法,并返回验证 (方法通过,返回false,否则返回错误语句);
        var result = singleRule(value);
        if (result) {
    
    
            return result;
        } else {
    
    
            return false;
        };
    } else if (ruleType == 'object' && singleRule.regExp && is(singleRule.regExp, 'regExp')) {
    
    
        // 当对象方法为正则表达式时,直接使用正则表达式进行判断
        var errorText = singleRule.errorText;
        var regular = singleRule.regExp;
        var re = new RegExp(regular);
        if (re.test(value)) {
    
    
            return false;
        } else {
    
    
            return errorText;
        };
    } else {
    
    
        // 其他类型直接跳过,控制台输出错误信息
        console.error('rule模块 : 未识别的判断类型');
        return false;
    };
};


/**
 * 规则验证
 *
 * @param {*} rulesObj
 * @param {*} value
 * @return {*} 
 */
const rules = function (rulesObj, value) {
    
    
    var text = rulesObj.text;
    var rulesArray = rulesObj.rules;
    if (!rulesArray) {
    
    
        return false;
    };
    // 判断是否为数组
    if (is(rulesArray, 'array')) {
    
    
        // 跳过非空验证
        // if ($.inArray("notNull", rulesArray) == -1 && (value == '' || value === null)) {
    
    
        //     return false;
        // };
        // 进行循环验证
        var _text = false;
        for (var i = 0; i < rulesArray.length; i++) {
    
    
            var element = rulesArray[i];
            var result = verifyRule(element, value, text);
            if (result) {
    
    
                _text = result;
                break;
            };
        };
        if (_text) {
    
    
            return _text;
        } else {
    
    
            return false;
        };
    } else if (is(rulesArray, 'string')) {
    
    
        // 进行单条验证
        var result = verifyRule(rulesArray, value, text);
        if (result) {
    
    
            return result;
        } else {
    
    
            return false;
        };
    } else if (is(rulesArray, 'function')) {
    
    
        // 进行单条验证
        var result = verifyRule(rulesArray, value, text);
        if (result) {
    
    
            return result;
        } else {
    
    
            return false;
        };
    }
};


/**
 * 深拷贝对象
 *
 * @param {*} obj
 * @return {*} 
 */
var clone = function (obj) {
    
    
    if (obj === null) return null
    if (typeof obj !== 'object') return obj;
    if (obj.constructor === Date) return new Date(obj);
    var newObj = new obj.constructor();  //保持继承链
    for (var key in obj) {
    
    
        if (obj.hasOwnProperty(key)) {
    
       //不遍历其原型链上的属性
            var val = obj[key];
            newObj[key] = typeof val === 'object' ? clone(val) : val;
        }
    }
    return newObj;
}

// 


/**
 * 添加验证方法
 *
 * @param {*} obj
 * @param {*} key
 * @return {*} 
 */
const setJudeRule = function (obj, key) {
    
    
    if (verifyObj.hasOwnProperty(key)) {
    
    
        console.error('key值重复,不可添加');
        return;
    };
    if (obj.hasOwnProperty('event') && obj.hasOwnProperty('message')) {
    
    
        verifyObj[key] = obj;
    } else {
    
    
        console.error('添加的验证方法不符合规范');
        return;
    }
};


/**
 * 获取嵌套层级
 *
 * @param {*} treeData
 * @param {*} key
 * @return {*} 
 */
var getMaxFloor = function (treeData, key) {
    
    
    let floor = 0
    let v = this
    let max = 0
    function each(data, floor) {
    
    
        data.forEach(e => {
    
    
            e.floor = floor
            if (floor > max) {
    
    
                max = floor
            }
            if (e.hasOwnProperty(key)) {
    
    
                const element = e[key];
                if (element.length > 0) {
    
    
                    each(element, floor + 1)
                }
            };
        })
    }
    each(treeData, 1)
    return max
};

/**
 * 生成GUID
 *
 * @return {*} 
 */
var Guid = function () {
    
    
    var guid = '';
    for (var i = 1; i <= 32; i++) {
    
    
        var n = Math.floor(Math.random() * 16.0).toString(16);
        guid += n;
        if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
            guid += '-';
    }
    return guid;
};


/**
 * 生成UUID
 *
 * @return {*} 
 */
var uuid = function () {
    
    
    var uuid = '';
    for (var i = 1; i <= 32; i++) {
    
    
        var n = Math.floor(Math.random() * 16.0).toString(16);
        uuid += n;
    }
    return uuid;
};

var fileType = {
    
    
    'image': ['webp', 'baidubmp', 'pcx', 'tif', 'gif', 'jpeg', 'jpg', 'tga', 'exif', 'fpx', 'svg', 'pcd', 'dxf', 'ufo', 'png', 'hdri', 'wmf', 'flic', 'emf', 'ico'],
    'psd': ['psd'],
    'cad': ['cdr', 'ai', 'eps', 'raw'],
    'text': ['txt'],
    'html': ['htm', 'html'],
    'mirror': ['iso', 'bin', 'img', 'tao', 'dao', 'cif', 'fcd'],
    'video': ['avi', 'mpeg', 'mpg', 'flv', 'dat', 'ra', 'rm', 'rmvb', 'mov', 'qt', 'asf', 'wmv', 'mkv'],
    'mp3': ['mp3', 'wma', 'mpg', 'wav', 'mv'],
    'zip': ['rar', 'zip', '7z', 'tar', 'xz', 'gz'],
    'xsl': ['xls', 'xlsx'],
    'ppt': ['ppt', 'pptx'],
    'doc': ['doc', 'docx'],
    'pdf': ['pdf'],
    'config': ['conf', 'config', 'ini'],
};

var fileTypeMapping = {
    
    };
for (const key in fileType) {
    
    
    if (fileType.hasOwnProperty(key)) {
    
    
        for (let i = 0; i < fileType[key].length; i++) {
    
    
            const element = fileType[key][i];
            fileTypeMapping[element] = key
        };
    }
}

/**
 * 获取后缀名图标类别
 *
 * @param {*} url
 * @return {*} 
 */
var getSuffixType = function (url) {
    
    
    var suffix = url.substring(url.lastIndexOf(".") + 1, url.length);
    if (fileTypeMapping.hasOwnProperty(suffix.toLowerCase())) {
    
    
        const element = fileTypeMapping[suffix.toLowerCase()];
        return element;
    } else {
    
    
        return 'file'
    }
};


/**
 * 获取Url参数
 *
 * @param {*} variable
 * @return {*} 
 */
function getQueryVariable(variable) {
    
    
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
    
    
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
    
     return pair[1]; }
    }
    return (false);
};

/**
 * 获取浏览器信息
 *
 * @param {*} key
 * @return {*} 
 */
function device(key) {
    
    
    var agent = navigator.userAgent.toLowerCase();

    //获取版本号
    var getVersion = function (label) {
    
    
        var exp = new RegExp(label + '/([^\\s\\_\\-]+)');
        label = (agent.match(exp) || [])[1];
        return label || false;
    };

    //返回结果集
    var result = {
    
    
        os: function () {
    
     //底层操作系统
            if (/windows/.test(agent)) {
    
    
                return 'windows';
            } else if (/linux/.test(agent)) {
    
    
                return 'linux';
            } else if (/iphone|ipod|ipad|ios/.test(agent)) {
    
    
                return 'ios';
            } else if (/mac/.test(agent)) {
    
    
                return 'mac';
            }
        }(),
        ie: function () {
    
     //ie版本
            return (!!window.ActiveXObject || "ActiveXObject" in window) ? (
                (agent.match(/msie\s(\d+)/) || [])[1] || '11' //由于ie11并没有msie的标识
            ) : false;
        }(),
        weixin: getVersion('micromessenger')  //是否微信
    };

    //任意的key
    if (key && !result[key]) {
    
    
        result[key] = getVersion(key);
    }

    //移动设备
    result.android = /android/.test(agent);
    result.ios = result.os === 'ios';
    result.mobile = (result.android || result.ios) ? true : false;

    return result;
};


//拆分整数与小数
function splits(tranvalue) {
    
    
    var value = new Array('', '');
    var temp = tranvalue.split(".");
    for (var i = 0; i < temp.length; i++) {
    
    
        value[i] = temp[i];
    }
    return value;
}

/**
 * 数字转汉字
 *
 * @param {*} tranvalue
 * @return {*} 
 */
function transformSmallNumber(tranvalue) {
    
    
    try {
    
    
        tranvalue = tranvalue.toString();
        var i = 1;
        var dw2 = new Array("", "万", "亿");//大单位
        var dw1 = new Array("十", "百", "千");//小单位
        var dw = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");//整数部分用
        //以下是小写转换成大写显示在合计大写的文本框中     
        //分离整数与小数
        var source = splits(tranvalue);
        var num = source[0];
        var dig = source[1];

        //转换整数部分
        var k1 = 0;//计小单位
        var k2 = 0;//计大单位
        var sum = 0;
        var str = "";
        var len = source[0].length;//整数的长度
        for (i = 1; i <= len; i++) {
    
    
            var n = source[0].charAt(len - i);//取得某个位数上的数字
            var bn = 0;
            if (len - i - 1 >= 0) {
    
    
                bn = source[0].charAt(len - i - 1);//取得某个位数前一位上的数字
            }
            sum = sum + Number(n);
            if (sum != 0) {
    
    
                str = dw[Number(n)].concat(str);//取得该数字对应的大写数字,并插入到str字符串的前面
                if (n == '0') sum = 0;
            }
            if (len - i - 1 >= 0) {
    
    //在数字范围内
                if (k1 != 3) {
    
    //加小单位
                    if (bn != 0) {
    
    
                        str = dw1[k1].concat(str);
                    }
                    k1++;
                } else {
    
    //不加小单位,加大单位
                    k1 = 0;
                    var temp = str.charAt(0);
                    if (temp == "万" || temp == "亿")//若大单位前没有数字则舍去大单位
                        str = str.substr(1, str.length - 1);
                    str = dw2[k2].concat(str);
                    sum = 0;
                }
            }
            if (k1 == 3)//小单位到千则大单位进一
            {
    
     k2++; }
        };
        // //转换小数部分
        var strdig = "";
        if (dig != "") {
    
    
            var n = dig.charAt(0);
            if (n != 0) {
    
    
                strdig += '点' + dw[Number(n)];//加数字
            }
            var n = dig.charAt(1);
            if (n != 0) {
    
    
                strdig += dw[Number(n)];//加数字
            };
            var n = dig.charAt(2);
            if (n != 0) {
    
    
                strdig += dw[Number(n)];//加数字
            };
            var n = dig.charAt(3);
            if (n != 0) {
    
    
                strdig += dw[Number(n)];//加数字
            };
            var n = dig.charAt(4);
            if (n != 0) {
    
    
                strdig += dw[Number(n)];//加数字
            }
        }
        str += strdig;

        str = str.replace(/^一十/, '十');

    } catch (e) {
    
    
        return "转换错误";
    }
    return str;
};

// 定义转换函数

/**
 * 钱数转大写
 *
 * @param {*} tranvalue
 * @return {*} 
 */
function transformBigNumber(tranvalue) {
    
    
    try {
    
    
        tranvalue = tranvalue.toString();
        var i = 1;
        var dw2 = new Array("", "万", "亿");//大单位
        var dw1 = new Array("拾", "佰", "仟");//小单位
        var dw = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");//整数部分用
        //以下是小写转换成大写显示在合计大写的文本框中     
        //分离整数与小数
        var source = splits(tranvalue);
        var num = source[0];
        var dig = source[1];

        //转换整数部分
        var k1 = 0;//计小单位
        var k2 = 0;//计大单位
        var sum = 0;
        var str = "";
        var len = source[0].length;//整数的长度
        for (i = 1; i <= len; i++) {
    
    
            var n = source[0].charAt(len - i);//取得某个位数上的数字
            var bn = 0;
            if (len - i - 1 >= 0) {
    
    
                bn = source[0].charAt(len - i - 1);//取得某个位数前一位上的数字
            }
            sum = sum + Number(n);
            if (sum != 0) {
    
    
                str = dw[Number(n)].concat(str);//取得该数字对应的大写数字,并插入到str字符串的前面
                if (n == '0') sum = 0;
            }
            if (len - i - 1 >= 0) {
    
    //在数字范围内
                if (k1 != 3) {
    
    //加小单位
                    if (bn != 0) {
    
    
                        str = dw1[k1].concat(str);
                    }
                    k1++;
                } else {
    
    //不加小单位,加大单位
                    k1 = 0;
                    var temp = str.charAt(0);
                    if (temp == "万" || temp == "亿")//若大单位前没有数字则舍去大单位
                        str = str.substr(1, str.length - 1);
                    str = dw2[k2].concat(str);
                    sum = 0;
                }
            }
            if (k1 == 3)//小单位到千则大单位进一
            {
    
     k2++; }
        }

        //转换小数部分
        var strdig = "";
        if (dig != "") {
    
    
            var n = dig.charAt(0);
            if (n != 0) {
    
    
                strdig += dw[Number(n)] + "角";//加数字
            }
            var n = dig.charAt(1);
            if (n != 0) {
    
    
                strdig += dw[Number(n)] + "分";//加数字
            }
        }
        str += "元" + strdig;
    } catch (e) {
    
    
        return "0元";
    }
    return str;
}

/**
 * 是否为链接地址 验证方法
 * 
 * @param {string} path
 * @returns {Boolean}
 */
function isExternal(path) {
    
    
    return /^(https?:|mailto:|tel:)/.test(path)
}


/**
 * 通过 URL 地址获取参数
 */
function getUrlParam() {
    
    
    let href = window.location.href
    if (href.indexOf('?') > -1) {
    
    
        let paramStr = href.split('?')[1]
        let paramArr = paramStr.split('&')
        let returnObj = {
    
    }
        for (let i = 0; i < paramArr.length; i++) {
    
    
            let paramItem = paramArr[i].split('=')
            returnObj[paramItem[0]] = paramItem[1]
        }
        return returnObj
    } else {
    
    
        return {
    
    }
    }
}

/**
 * 判断是否为数字
 *
 * @param {*} obj
 * @return {*} 
 */
function isNumber(obj) {
    
    
    return obj == +obj
}


/**
     * @param {Object} fmt 如:YYYY-mm-dd HH:MM:SS表示2019-06-06 19:45:00
     * @notice 苹果环境、safari 浏览器建议日期格式使用 YYYY/mm/dd
     */
function format(date, fmt) {
    
    
    let ret
    const opt = {
    
    
        "Y+": date.getFullYear().toString(), // 年
        "m+": (date.getMonth() + 1).toString(), // 月
        "d+": date.getDate().toString(), // 日
        "H+": date.getHours().toString(), // 时
        "M+": date.getMinutes().toString(), // 分
        "S+": date.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    }
    for (let k in opt) {
    
    
        ret = new RegExp("(" + k + ")").exec(fmt)
        if (ret) {
    
    
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        }
    }
    return fmt
}



export default {
    
    
    getUrlParam,
    device,
    rules,
    uuid,
    Guid,
    inArray,
    getKeyArray,
    eachObject,
    is,
    jude,
    isEqual,
    setJudeRule,
    converArrayToObj,
    clone,
    getMaxFloor,
    getSuffixType,// 获取文件后缀名
    getQueryVariable,
    transformBigNumber,
    transformSmallNumber,
    isExternal,
    isNumber,
    format
}

Supongo que te gusta

Origin blog.csdn.net/qq_38946996/article/details/128080906
Recomendado
Clasificación