1、Vue項目常用工具類-Untils

以下是項目中常用的工具類方法,大家可以收藏一下,方便日後使用。

-----------------------------------------------------------------------------------------

校驗項

-------------------------------------------------------------------------------------------------------------------------------------------------------------

//檢測是否爲管理員

export function isvalidUsername(str) {

const valid_map = ['admin', 'editor']

return valid_map.indexOf(str.trim()) >= 0

}

//電話號碼

export function isPhone(s) {

return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)

}

/* 小寫字母*/

export function validateLowerCase(str) {

const reg = /^[a-z]+$/

return reg.test(str)

}

 

/* 大寫字母*/

export function validateUpperCase(str) {

const reg = /^[A-Z]+$/

return reg.test(str)

}

 

/* 大小寫字母*/

export function validatAlphabets(str) {

const reg = /^[A-Za-z]+$/

return reg.test(str)

}

/*驗證pad還是pc*/

export const vaildatePc = function() {

const userAgentInfo = navigator.userAgent;

const Agents = ["Android", "iPhone",

"SymbianOS", "Windows Phone",

"iPad", "iPod"

];

let flag = true;

for (var v = 0; v < Agents.length; v++) {

if (userAgentInfo.indexOf(Agents[v]) > 0) {

flag = false;

break;

}

}

return flag;

}

/**

郵箱驗證

*/

export function validateEmail(email) {

const re = /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

return re.test(email)

}

 

/**

* 判斷身份證號碼

*/

export function cardid(code) {

let list = [];

let result = true;

let msg = '';

var city = {

11: "北京",

12: "天津",

13: "河北",

14: "山西",

15: "內蒙古",

21: "遼寧",

22: "吉林",

23: "黑龍江 ",

31: "上海",

32: "江蘇",

33: "浙江",

34: "安徽",

35: "福建",

36: "江西",

37: "山東",

41: "河南",

42: "湖北 ",

43: "湖南",

44: "廣東",

45: "廣西",

46: "海南",

50: "重慶",

51: "四川",

52: "貴州",

53: "雲南",

54: "西藏 ",

61: "陝西",

62: "甘肅",

63: "青海",

64: "寧夏",

65: "新疆",

71: "臺灣",

81: "香港",

82: "澳門",

91: "國外 "

};

if (!validatenull(code)) {

if (code.length == 18) {

if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) {

msg = "證件號碼格式錯誤";

} else if (!city[code.substr(0, 2)]) {

msg = "地址編碼錯誤";

} else {

//18位身份證需要驗證最後一位校驗位

code = code.split('');

//∑(ai×Wi)(mod 11)

//加權因子

var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];

//校驗位

var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x'];

var sum = 0;

var ai = 0;

var wi = 0;

for (var i = 0; i < 17; i++) {

ai = code[i];

wi = factor[i];

sum += ai * wi;

}

if (parity[sum % 11] != code[17]) {

msg = "證件號碼校驗位錯誤";

} else {

result = false;

}

 

}

} else {

msg = "證件號碼長度不爲18位";

}

 

} else {

msg = "證件號碼不能爲空";

}

list.push(result);

list.push(msg);

return list;

}

/**

* 判斷手機號碼是否正確

*/

export function isvalidatemobile(phone) {

let list = [];

let result = true;

let msg = '';

var isPhone = /^0\d{2,3}-?\d{7,8}$/;

//增加134 減少|1349[0-9]{7},增加181,增加145,增加17[678]

if (!validatenull(phone)) {

if (phone.length == 11) {

if (isPhone.test(phone)) {

msg = '手機號碼格式不正確';

} else {

result = false;

}

} else {

msg = '手機號碼長度不爲11位';

}

} else {

msg = '手機號碼不能爲空';

}

list.push(result);

list.push(msg);

return list;

}

/**

* 判斷姓名是否正確

*/

export function validatename(name) {

var regName = /^[\u4e00-\u9fa5]{2,4}$/;

if (!regName.test(name)) return false;

return true;

}

/**

* 判斷是否爲整數

*/

export function validatenum(num, type) {

let regName = /[^\d.]/g;

if (type == 1) {

if (!regName.test(num)) return false;

} else if (type == 2) {

regName = /[^\d]/g;

if (!regName.test(num)) return false;

}

return true;

}

/**

* 判斷是否爲小數

*/

export function validatenumord(num, type) {

let regName = /[^\d.]/g;

if (type == 1) {

if (!regName.test(num)) return false;

} else if (type == 2) {

regName = /[^\d.]/g;

if (!regName.test(num)) return false;

}

return true;

}

/**

* 判斷是否爲空

*/

export function validatenull(val) {

if (typeof val == 'boolean') {

return false;

}

if (typeof val == 'number') {

return false;

}

if (val instanceof Array) {

if (val.length == 0) return true;

} else if (val instanceof Object) {

if (JSON.stringify(val) === '{}') return true;

} else {

if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;

return false;

}

return false;

}

------------------------------------------------------------------------------------------------

功能項

------------------------------------------------------------------------------------------------

一、list數據結構轉tree父子結構

export const translateDataToTree = (data) => {

let parents = data.filter(

value => value.parentId == "undefined" || value.parentId == 0

);

let children = data.filter(

value => value.parentId !== "undefined" && value.parentId != 0

);

let translator = (parents, children) => {

parents.forEach(parent => {

children.forEach((current, index) => {

if (current.parentId === parent.deptId) {

let temp = JSON.parse(JSON.stringify(children));

temp.splice(index, 1);

translator([current], temp);

typeof parent.children !== "undefined" ?

parent.children.push(current) :

// parent.push(current) :

(parent.children = [current]);

}

});

});

};

translator(parents, children);

return parents;

}

二、tree數據結構轉list數據結構

export default function treeToArray(data, children = 'children') {

let tmp = []

data.forEach((item, index) => {

Vue.set(item, '_index', index)

tmp.push(item)

if (item[children] && item[children].length > 0) {

const res = treeToArray(item[children], children)

tmp = tmp.concat(res)

}

})

return tmp

}

三、對象深拷貝

方案一:

export const deepClone = data => {

var type = getObjType(data);

var obj;

if (type === 'array') {

obj = [];

} else if (type === 'object') {

obj = {};

} else {

//不再具有下一層次

return data;

}

if (type === 'array') {

for (var i = 0, len = data.length; i < len; i++) {

obj.push(deepClone(data[i]));

}

} else if (type === 'object') {

for (var key in data) {

obj[key] = deepClone(data[key]);

}

}

return obj;

};

方案二:

export const  function deepClone(obj){
    let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
}    

四、深度遞歸搜索

/**
 * @param {Array} arr 你要搜索的數組
 * @param {Function} condition 回調函數,必須返回謂詞,判斷是否找到了。會傳入(item, index, level)三個參數
 * @param {String} children 子數組的key
 */
const deepFind = (arr, condition, children) => {
    // 即將返回的數組
    let main = []

    // 用try方案方便直接中止所有遞歸的程序
    try {
        // 開始輪詢
        (function poll(arr, level) {
            // 如果傳入非數組
            if (!Array.isArray(arr)) return

            // 遍歷數組
            for (let i = 0; i < arr.length; i++) {
                // 獲取當前項
                const item = arr[i]

                // 先佔位預設值
                main[level] = item

                // 檢驗是否已經找到了
                const isFind = condition && condition(item, i, level) || false

                // 如果已經找到了
                if (isFind) {
                    // 直接拋出錯誤中斷所有輪詢
                    throw Error

                // 如果存在children,那麼深入遞歸
                } else if (children && item[children] && item[children].length) {
                    poll(item[children], level + 1)

                // 如果是最後一個且沒有找到值,那麼通過修改數組長度來刪除當前項
                } else if (i === arr.length - 1) {
                   // 刪除佔位預設值
                   main.length = main.length - 1
                }
            }
        })(arr, 0)
    // 使用try/catch是爲了中止所有輪詢中的任務
    } catch (err) {}

    // 返回最終數組
    return main
}

let myarr = deepFind(fuck, (item, index, level) => item.value === 63, 'children')
console.log(20181115092957, myarr)  // [{…}, {…}, {…}]
console.log(20181115092957, myarr.map(_ => _.value)) // [32, 58, 63]

五、瀏覽器全屏、退出全屏

/**

* 瀏覽器全屏

*/

export const reqFullScreen = () => {

if (document.documentElement.requestFullScreen) {

document.documentElement.requestFullScreen();

} else if (document.documentElement.webkitRequestFullScreen) {

document.documentElement.webkitRequestFullScreen();

} else if (document.documentElement.mozRequestFullScreen) {

document.documentElement.mozRequestFullScreen();

}

};

/**

* 瀏覽器退出全屏

*/

export const exitFullScreen = () => {

if (document.documentElement.requestFullScreen) {

document.exitFullScreen();

} else if (document.documentElement.webkitRequestFullScreen) {

document.webkitCancelFullScreen();

} else if (document.documentElement.mozRequestFullScreen) {

document.mozCancelFullScreen();

}

};

六、根據數據字典的value查找對應的index

export const findArray = (dic, value) => {

for (let i = 0; i < dic.length; i++) {

if (dic[i].value == value) {

return i;

}

}

return -1;

};


備註:日後會繼續更新,希望持續關注,有好的方法可以在下邊留言,共同進步,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章