123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005 |
- import ElementUI from 'element-ui';
- /* 工具类 */
- /**
- * @summary 获取数组对象成员某个字段的集合
- * @param {JSONArray} arrayObj 数组对象
- * @param {string} 对象的
- * @param {string} 分割符,默认中文'、'
- * @return {string} 字符串
- */
- export const getFieldsFromArray = (aData, sField, sSplit = '、') => {
- let str = '';
- if (aData && aData.length > 0) {
- for (let item of aData) {
- if (item[sField]) {
- str += sSplit + item[sField];
- }
- }
- }
- if (str.length > 0) { str = str.substring(1) }
- return str;
- };
- /**
- * @summary delItemFormArrayObject 删除部分数组对象
- * @param {array} arrayObj 数组对象
- * @param {array} arrayObj 需要删除的对象
- * @param {string} attrName 比对的参数名(如ID)
- * @return {array} 新的数组对象
- */
- export const delItemFormArrayObject = (arrayObj, arrayObj2, attrName) => {
- let aReturn = [];
- for (let item of arrayObj) {
- let f = true;
- for (let item2 of arrayObj2) {
- if (item[attrName] === item2[attrName]) {
- f = false;
- }
- }
- if (f) {
- aReturn.push(item);
- }
- }
- return aReturn;
- };
- /**
- * @summary 删除数组对象的某个成员(或添加成员)
- * @param {JSONArray} arrayObj 数组对象
- * @param {object} obj 需要删除的对象
- * @param {string} attrName 比对的参数名(如ID)
- * @return {JSONArray} 新的数组对象
- */
- export const toggleJSONArray = (arrayObj = [], obj, attrName) => {
- let iIndex = -1;
- for (let i = 0; i < arrayObj.length; i++) {
- if (arrayObj[i][attrName] && arrayObj[i][attrName] === obj[attrName]) {
- iIndex = i;
- break;
- }
- }
- if (iIndex >= 0) {
- arrayObj.splice(iIndex, 1);
- } else {
- // arrayObj.splice(0, 0, obj);
- arrayObj.push(obj);
- }
- return arrayObj;
- };
- /**
- * @summary 根据时间及格式获取时间的字符串
- * @param {int} iDate 时间
- * @param {string} sFormat 格式,默认:yyyy-MM-dd HH:mm:ss
- * @return {string} 格式化后的日期字符串
- * @example
- * formatDate(new Date(),'yyyy-MM-dd HH:mm:ss SSS');// 2017-6-6 11:11:11
- */
- export const formatDate = (iDate, sFormat = 'yyyy-MM-dd HH:mm:ss') => {
- if (!iDate) { return ''; }
- let dDate = new Date(iDate);
- let year = dDate.getFullYear();// 年
- let month = dDate.getMonth() + 1;// 月
- if (month < 10) { month = '0' + month; }
- let date = dDate.getDate();// 日
- if (date < 10) { date = '0' + date; }
- let hour = dDate.getHours();// 时
- if (hour < 10) { hour = '0' + hour; }
- let minute = dDate.getMinutes();// 分
- if (minute < 10) { minute = '0' + minute; }
- let second = dDate.getSeconds();// 秒
- if (second < 10) { second = '0' + second; }
- let millisecond = dDate.getMilliseconds();// 毫秒
- if (sFormat.indexOf('yyyy') >= 0) { sFormat = sFormat.replace('yyyy', year + ''); }
- if (sFormat.indexOf('MM') >= 0) { sFormat = sFormat.replace('MM', month + ''); }
- if (sFormat.indexOf('dd') >= 0) { sFormat = sFormat.replace('dd', date + ''); }
- if (sFormat.indexOf('HH') >= 0) { sFormat = sFormat.replace('HH', hour + ''); }
- if (sFormat.indexOf('mm') >= 0) { sFormat = sFormat.replace('mm', minute + ''); }
- if (sFormat.indexOf('ss') >= 0) { sFormat = sFormat.replace('ss', second + ''); }
- if (sFormat.indexOf('SSS') >= 0) { sFormat = sFormat.replace('SSS', millisecond + ''); }
- return sFormat;
- };
- /**
- * @summary 根据时间字符串转化为时间对象
- * @param {string} dateStr 时间字符串,年月日分隔支持(- /)
- * @example
- * convertDate('2017-11-11 11:11:111');
- */
- export const convertDate = (dateStr) => {
- if (dateStr) {
- return new Date(dateStr.replace(/-/, '/'));
- } else {
- return '';
- }
- };
- /**
- * 转化时间
- * @param {String} str
- * @returns {String} 转化后的时间
- */
- export const transDate = (str) => {
- if (!str) return '';
- let date = new Date(str)
- // 现在的时间-传入的时间 = 相差的时间(单位 = 毫秒)
- let time = new Date().getTime() - date.getTime();
- if (time < 0) {
- return '';
- } else if ((time / 1000 < 30)) {
- return '刚刚';
- } else if (time / 1000 < 60) {
- return parseInt((time / 1000)) + '秒前';
- } else if ((time / 60000) < 60) {
- return parseInt((time / 60000)) + '分钟前';
- } else if ((time / 3600000) < 24) {
- return parseInt(time / 3600000) + '小时前';
- } else if ((time / 86400000) < 31) {
- return parseInt(time / 86400000) + '天前';
- } else if ((time / 2592000000) < 12) {
- return parseInt(time / 2592000000) + '月前';
- } else {
- return parseInt(time / 31536000000) + '年前';
- }
- };
- /**
- * @summary 设置cookie
- * @param {string} name cookie名称
- * @param {string} value cookie值
- * @param {int} expires 保存时间(单位:小时)
- * @param {string} path
- * @param {string} domain
- * @param {string} secure
- */
- export const setCookie = (name, value, expires, path, domain, secure, domainFlag) => {
- let str = name + '=' + encodeURIComponent(value);
- if (path) { str += ';path=' + path; }
- if (domain) { str += ';domain=' + domain; }
- if (secure) { str += ';secure=' + secure; }
- let myDomain = window.top.document.domain;
- if (myDomain === 'localhost' || myDomain.indexOf('steerinfo.com') === -1 || domainFlag) {
- window.top.document.cookie = str;
- } else {
- window.top.document.cookie = str + ';domain=steerinfo.com;path=/';
- }
- };
- /**
- * @summary 读取cookie
- * @param {string} name cookie名称
- * @retrun {string} value cookie值
- * @example
- */
- export const getCookie = (name) => {
- let start = window.top.document.cookie.indexOf(name + '=');
- if ((!start) && (name !== window.top.document.cookie.substring(0, name.length))) { return ''; }
- if (start === -1) { return ''; }
- let len = start + name.length + 1;
- let end = window.top.document.cookie.indexOf(';', len);
- if (end === -1) { end = window.top.document.cookie.length; }
- return decodeURIComponent(window.top.document.cookie.substring(len, end));
- };
- /**
- * 存储localStorage
- * @param {string} sName
- * @param {string} sCntent
- * @example setLocalStore('name', '测试');
- */
- export const setLocalStore = (sName, sCntent) => {
- if (!sName) return;
- window.top.localStorage.setItem(sName, sCntent);
- };
- /**
- * 获取localStorage
- */
- export const getLocalStore = name => {
- if (!name) return null;
- return window.top.localStorage.getItem(name);
- };
- // 过滤url中的参数
- export const filterURL = (val, newVal) => {
- if (val !== null && typeof val !== 'undefined') {
- return val;
- } else {
- return newVal;
- }
- };
- /**
- * @summary 获取B数组中存在A数组值的自身索引
- * @param {array} A 已存在数组对象
- * @param {array} B 待比较数组对象
- * @param {array} str 待比较数组的id
- * **/
- export const compareArray = (A, B, str) => {
- let indexs = []; // 获取比较后的索引数组
- for (let i = 0; i < A.length; i++) {
- for (let j = 0; j < B.length; j++) {
- // console.log(A[i][str], B[j][str], A[i][str] === B[j][str]);
- if (A[i][str] === B[j][str]) {
- indexs.push(j);
- break;
- }
- }
- }
- return indexs
- };
- /**
- * @summary 删除数组对象的某个成员(或添加成员)
- * @param {array} arrayObj 数组对象
- * @param {object} obj 需要删除的对象
- * @param {string} attrName 比对的参数名(如ID)
- * @return {array} 新的数组对象
- */
- export const removeOrAddEleFormArrayObj = (arrayObj = [], obj, attrName) => {
- let iIndex = -1;
- for (let i = 0; i < arrayObj.length; i++) {
- if (arrayObj[i][attrName] && arrayObj[i][attrName] === obj[attrName]) {
- iIndex = i;
- break;
- }
- }
- if (iIndex >= 0) {
- arrayObj.splice(iIndex, 1);
- } else {
- // arrayObj.splice(0, 0, obj);
- arrayObj.push(obj);
- }
- return arrayObj;
- };
- /**
- * @summary 字符串去空格
- * @param {string} str 字符串
- * @return {string} 去掉空格后的字符串
- */
- export const trimStr = (str = '') => {
- return str.replace(/(^\s*)|(\s*$)/g, '');
- };
- /**
- * 千分表达式转换
- * @param num 要格式化的数字
- * @param n 保留小数位
- */
- export const changeNum = (num, n) => {
- if (num === null || num === 'null' || num === undefined || num === 'undefined') { return ''; }
- if (isNaN(num)) { return num; }
- if (n) {
- num = Number(num);
- num.toFixed(n);
- }
- num = String(num);
- var re = /(-?\d+)(\d{3})/;
- while (re.test(num)) {
- num = num.replace(re, '$1,$2');
- }
- return num;
- };
- /**
- * 拼音首字母转换
- */
- const strChineseFirstPY = 'YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY';
- export const makePy = (str) => {
- if (typeof (str) !== 'string') {
- throw new Error(-1, '函数makePy需要字符串类型参数!');
- }
- var result = ''; // 保存中间结果的数组
- str = str.toString().trim()
- for (var i = 0, len = str.length; i < len; i++) {
- // 获得unicode码
- var ch = str.charAt(i);
- // 检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理
- result += checkCh(ch);
- }
- // result,返回所有可能的拼音首字母串数组
- return result
- };
- function checkCh (ch) {
- var uni = ch.codePointAt(0);
- // 如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数
- if (uni > 40869 || uni < 19968) {
- return ch; // dealWithOthers(ch);
- }
- // (暂不做多音字处理) 检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母
- // return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)));
- return strChineseFirstPY.charAt(uni - 19968)
- };
- /**
- * @summary 上传文件转化为annex数组
- * @param {object} oUpload 上传文件对象
- * @param {string} idSqe 业务ID
- */
- export const annexTranslateForUpload = (oUpload, idSqe) => {
- let aoImg = oUpload.images;
- let aoFile = oUpload.files;
- let returnArray = [];
- /*
- {
- 'id_sqe': '20170620105934130084',
- 'annex_no': '20170620105934130001',
- 'annex_name': 'magazine-unlock-01-2.3.651-_32ba439c4cd94f89a4a89cba3e0a2eee.jpg',
- 'annex_path': 'group1/M00/00/07/wKgBSVlIj2GAQi6WAATzNeU1dqU155.jpg',
- 'is_image': '1',
- 'annex_type': '.jpg',
- 'annex_other_name': 'magazine-unlock-01-2.3.651-_32ba439c4cd94f89a4a89cba3e0a2eee'
- }
- */
- /*
- file对象格式:
- {
- 'name':'/image-temp/20170804/346835header背景.png',
- 'path':'MjAxNzA4MDQvMzQ2ODM1aGVhZGVy6IOM5pmvLnBuZw ==',
- 'filename':'header背景.png',
- 'filetime':'2017-08-07 11:16:09',
- 'filetype':'.png'
- }
- */
- for (let i = 0; i < aoImg.length; i++) {
- let oimg = aoImg[i];
- if (typeof (oimg.path) === 'undefined') {
- oimg.path = oimg.annex_path
- }
- if (typeof (oimg.filetype) === 'undefined') {
- oimg.filetype = oimg.annex_type
- }
- /* let spath = oimg.path;
- if(spath && spath.indexOf('/')===0){ spath = spath.substring(1);} */
- returnArray.push({
- id_sqe: idSqe,
- name: oimg.name,
- annex_name: oimg.filename,
- annex_path: oimg.path,
- save_path: oimg.path,
- is_image: '1',
- is_img: '1',
- annex_type: oimg.filetype,
- annex_other_name: 'image'
- });
- }
- for (let j = 0; j < aoFile.length; j++) {
- let ofile = aoFile[j];
- if (typeof (ofile.path) === 'undefined') {
- ofile.path = ofile.annex_path
- }
- if (typeof (ofile.filetype) === 'undefined') {
- ofile.filetype = ofile.annex_type
- }
- returnArray.push({
- id_sqe: idSqe,
- name: ofile.name,
- annex_name: ofile.filename,
- annex_path: ofile.path,
- save_path: ofile.path,
- is_image: '0',
- is_img: '0',
- annex_type: ofile.filetype,
- annex_other_name: 'file'
- });
- }
- return returnArray;
- };
- // 导入excel
- var wb; // 读取完成的数据
- var rABS = false; // 是否将文件读取为二进制字符串
- export const importExcel = (obj, callback) => {
- if (!obj.files) {
- return;
- }
- var f = obj.files[0];
- var reader = new FileReader();
- reader.onload = function (e) {
- var data = e.target.result;
- if (rABS) {
- wb = XLSX.read(btoa(fixdata(data)), { // 手动转化
- type: 'base64'
- });
- } else {
- wb = XLSX.read(data, {
- type: 'binary'
- });
- }
- // wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
- // wb.Sheets[Sheet名]获取第一个Sheet的数据
- callback(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
- };
- if (rABS) {
- reader.readAsArrayBuffer(f);
- } else {
- reader.readAsBinaryString(f);
- }
- };
- function fixdata (data) { // 文件流转BinaryString
- var o = '',
- l = 0,
- w = 10240;
- for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
- o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
- return o;
- };
- /**
- * @summary 内控模块使用,校验上、下限值的正确性
- * @param: min: 下限值
- * @param: max: 上限值
- * @param: len: 字符限制长度
- * @param: decimal: 小数位数
- * @return: Object 0:不弹出错误信息,1:只能填写正实数,最多保留四位小数!,2:数字的长度不能大于' + len + '位,3:下限值不能大于上限值
- * 如果只传了min没有传max,则为单个数字的校验
- * */
- export const validOrder = (len, min, max, decimal) => {
- let obj = {
- state: '',
- msg: ''
- };
- let reg = /^(0|[1-9][0-9]*)(\.[0-9]{1,4})?$/;
- if (decimal) {
- let str = '^(0|[1-9][0-9]*)(\\.[0-9]{1,' + decimal + '})?$';
- reg = new RegExp(str);
- }
- if (len && min) {
- if (reg.test(min)) {
- // 判断数字的长度
- if (min.length > len) {
- obj.state = '2';
- obj.msg = '数字的长度不能大于' + len + '位';
- return obj;
- } else {
- if (max) {
- if (reg.test(max)) {
- // 上下限都有值,则比较大小
- if (max.length <= len) {
- // 长度符合要求,比较大小
- if (parseFloat(min) > parseFloat(max)) {
- // 下限值大于上限值,报错
- obj.state = '3';
- obj.msg = '下限值不能大于上限值';
- return obj;
- } else {
- // 两个数字都校验通过
- obj.state = '0';
- obj.msg = '';
- return obj;
- }
- } else {
- obj.state = '2';
- obj.msg = '数字的长度不能大于' + len + '位';
- return obj;
- }
- } else {
- obj.state = '1';
- obj.msg = '只能填写正实数,最多保留四位小数!';
- return obj;
- }
- } else {
- // 没有传第二个数字,则为单个数字的校验,这个时候已经证明参数min是一个正实数且长度不大于len,校验通过
- obj.state = '0';
- obj.msg = '';
- return obj;
- }
- }
- } else {
- obj.state = '1';
- obj.msg = '只能填写正实数,最多保留四位小数!';
- return obj;
- }
- }
- };
- /**
- * @summary 内控模块使用,校验上、下限值的正确性
- * @param: min: 下限值
- * @param: max: 上限值
- * @param: len: 字符限制长度
- * @param: decimal: 小数位数
- * @return: Object 0:不弹出错误信息,1:只能填写正实数,最多保留四位小数!,2:数字的长度不能大于' + len + '位,3:下限值不能大于上限值
- * 如果只传了min没有传max,则为单个数字的校验
- * */
- export const validOrder2 = (len, min, max, decimal) => {
- let obj = {
- state: '',
- msg: ''
- };
- let reg = /^(0|[1-9][0-9]*)(\.[0-9]{1,7})?$/;
- if (decimal) {
- let str = '^(0|[1-9][0-9]*)(\\.[0-9]{1,' + decimal + '})?$';
- reg = new RegExp(str);
- }
- console.log('%c几个值', 'color:red', len, min, max, decimal);
- if (len && min) {
- if (reg.test(min)) {
- // 判断数字的长度
- if (min.length > len) {
- obj.state = '2';
- obj.msg = '数字的长度不能大于' + len + '位';
- return obj;
- } else {
- if (max) {
- if (reg.test(max)) {
- // 上下限都有值,则比较大小
- if (max.length <= len) {
- // 长度符合要求,比较大小
- if (parseFloat(min) > parseFloat(max)) {
- // 下限值大于上限值,报错
- obj.state = '3';
- obj.msg = '下限值不能大于上限值';
- return obj;
- } else {
- // 两个数字都校验通过
- obj.state = '0';
- obj.msg = '';
- return obj;
- }
- } else {
- obj.state = '2';
- obj.msg = '数字的长度不能大于' + len + '位';
- return obj;
- }
- } else {
- obj.state = '1';
- obj.msg = '只能填写正实数,最多保留七位小数!';
- return obj;
- }
- } else {
- // 没有传第二个数字,则为单个数字的校验,这个时候已经证明参数min是一个正实数且长度不大于len,校验通过
- obj.state = '0';
- obj.msg = '';
- return obj;
- }
- }
- } else {
- obj.state = '1';
- obj.msg = '只能填写正实数,最多保留七位小数!';
- return obj;
- }
- }
- };
- export const isStartEndDate = (startDate, endDate) => {
- let start = new Date(startDate);
- let end = new Date(endDate);
- if (start > end) {
- return true;
- }
- return false;
- };
- export const startEndate = (startDate, endDate) => {
- let startYear = new Date(startDate).getFullYear();
- let startMonth = new Date(startDate).getMonth();
- let startDay = new Date(startDate).getDate();
- let endYear = new Date(endDate).getFullYear();
- let endMonth = new Date(endDate).getMonth();
- let endDay = new Date(endDate).getDate();
- console.log(startYear, startMonth, startDay)
- console.log(endYear, endMonth, endDay)
- if (startYear > endYear) {
- return true
- } else if (startYear === endYear) {
- if (startMonth > endMonth) {
- return true;
- } else if (startMonth === endMonth) {
- if (startDay > endDay) {
- return true;
- } else {
- return false
- }
- } else {
- return false
- }
- } else {
- return false
- }
- }
- /**
- * @summary 比较一个对象前后的属性值是否相同
- * @param: before: 未改变的对象(备份)
- * @param: after: 可能改变了的对象
- * @return: Boolean true: 相同(未改变),false: 对象的属性值已经改变了
- * */
- export const compareObj = (before, after) => {
- let flag = true;
- // 首先获取对象的所有属性
- let propList = Object.keys(before);
- for (let item of propList) {
- if (before[item] !== after[item]) {
- flag = false;
- break;
- }
- }
- return flag;
- };
- // 浮点加法
- export const accAdd = function (arg1, arg2) {
- let r1, r2, m, c;
- try {
- r1 = arg1.toString().split('.')[1].length;
- } catch (e) {
- r1 = 0;
- }
- try {
- r2 = arg2.toString().split('.')[1].length;
- } catch (e) {
- r2 = 0;
- }
- c = Math.abs(r1 - r2);
- m = Math.pow(10, Math.max(r1, r2));
- if (c > 0) {
- let cm = Math.pow(10, c);
- if (r1 > r2) {
- arg1 = Number(arg1.toString().replace('.', ''));
- arg2 = Number(arg2.toString().replace('.', '')) * cm;
- } else {
- arg1 = Number(arg1.toString().replace('.', '')) * cm;
- arg2 = Number(arg2.toString().replace('.', ''));
- }
- } else {
- arg1 = Number(arg1.toString().replace('.', ''));
- arg2 = Number(arg2.toString().replace('.', ''));
- }
- return (arg1 + arg2) / m;
- };
- /*
- * 千分表达式转换
- * num 要格式化的数字 n 保留小数位
- */
- export const formatNum = function (num, n) {
- if (!n) {
- n = 2;
- }
- if (num === null || num === 'null' || num === undefined || num === 'undefined') { return ''; }
- if (isNaN(num)) { return num; }
- let data = (num + '').split('.');
- num = data[0];
- if (n) {
- num = Number(num);
- num.toFixed(n);
- }
- num = String(num);
- var re = /(-?\d+)(\d{3})/;
- while (re.test(num)) {
- num = num.replace(re, '$1,$2');
- // console.log('num: ', num);
- }
- if (data[1] !== '' && data[1] !== null && data[1] !== undefined) {
- num = num + '.' + data[1];
- }
- return num;
- };
- /*
- * 数字修改,千分表达式转换
- * num 要格式化的数字 n 保留小数位,不够补0, 如果数据小数位大于n,则显示原数据小数。
- */
- export const formatNum2 = function (num, n) {
- if (num === null || num === '' || num === undefined) {
- return ''
- }
- if (isNaN(num)) { return num; }
- let data = (num + '').split('.');
- let integer = data[0]
- let decimal = data[1]
- let decimal2 = ''
- let m = 0;
- if (typeof decimal !== 'undefined') {
- m = decimal.length;
- decimal2 = '.' + decimal;
- }
- let str = /^([1-9][0-9]*)$/
- if (n && str.test(n)) {
- num = Number(num);
- // num = num.toFixed(m > n ? m : n);
- num = num.toFixed(n);
- decimal2 = '.' + String(num).split('.')[1];
- }
- var re = /(-?\d+)(\d{3})/;
- while (re.test(integer)) {
- integer = integer.replace(re, '$1,$2');
- }
- return integer + decimal2;
- };
- /*
- *解析cookie值
- */
- export const getUserName = function (str) {
- let arr = str.split(';');
- let arr1 = [];
- let obj = {};
- for (let item of arr) {
- arr1 = item.split('=');
- obj[arr1[0].trim()] = arr1[1].trim();
- }
- return obj;
- };
- /**
- * @summary: 设置表格选中行
- * @param: row: 需要设置为选中状态的行数据,为{}、null时默认选中第一行
- * @param: id: 表格的主键
- * @param: ref: 表格的ref
- * @param: data: 表格绑定的数据源
- * @return: 被设置为选中的表格行
- * */
- export const commonCurrentRow = (row, id, ref, data) => {
- let _this = this;
- let index = 0;
- if (row && row[id]) {
- for (let i = 0; i < data.length; i++) {
- if (data[i][id] === row[id]) {
- index = i;
- }
- }
- }
- _this.$refs[ref].setCurrentRow(data[index]);
- return data[index];
- }
- // =============== wu 2018-07-28 ==================
- /**
- * 生成树
- * @param {Array} arr 带上级ID的数组
- * @param {String} id ID字符串
- * @param {String} pid 上级ID字符串
- * @param {String} children 子标志名
- * @param {String} root 取哪一个节点ID的树
- * @returns {Array} 为rootId的树
- */
- export const createTree = function (arr, id, pid, children, rootId) {
- let tree = [];
- //
- if (!(Object.prototype.toString.call(arr) === '[object Array]' && arr.length > 0)) {
- return tree;
- }
- //
- if (!id) id = 'id';
- if (!pid) pid = 'pid';
- if (!rootId && rootId !== null) rootId = '';
- if (!children) children = 'children';
- //
- let obj = {};
- // 清空原结构
- for (let item of arr) {
- delete item[children];
- }
- for (let item of arr) {
- if (!(children in item)) {
- item[children] = [];
- }
- obj[item[id]] = item;
- //
- if (Object.keys(obj).indexOf(item[pid] === null ? item[pid] : item[pid].toString()) > -1) {
- // 找到了
- obj[item[pid]][children].push(item);
- } else {
- // 没找到
- for (let obj of arr) {
- if (obj[id] === item[pid]) {
- if (!(children in obj)) {
- obj[children] = [];
- }
- obj[children].push(item);
- }
- }
- }
- }
- for (let id in obj) {
- if (obj[id][pid] === rootId) {
- tree.push(obj[id]);
- }
- }
- return tree;
- }
- /**
- * 递归树
- * @param {Array} tree 树数组
- * @param {String} children 子级属性名
- * @param {Function} fn 回调
- * @return void
- */
- const fnDgTree = function (tree, children, fn) {
- if (!children) {
- children = 'children';
- }
- for (let i = 0; i < tree.length; i++) {
- fn(tree[i]);
- if (tree[i] && tree[i][children] && tree[i][children].length > 0) {
- fnDgTree(tree[i][children], children, fn);
- }
- }
- }
- export const dgTree = fnDgTree;
- /**
- * 递归树 添加层级
- * @param {Array} tree 树数组
- * @param {String} children 子级属性名
- * @param {Function} fn 回调
- * @return void
- */
- const fnDgTreeLevel = function (tree, children, fn, level) {
- if (!children) {
- children = 'children';
- }
- for (let i = 0; i < tree.length; i++) {
- tree[i].tempLevel = level;
- fn(tree[i]);
- if (tree[i] && tree[i][children] && tree[i][children].length > 0) {
- fnDgTreeLevel(tree[i][children], children, fn, (+level + 1));
- }
- }
- }
- export const dgTreeLevel = fnDgTreeLevel;
- /**
- * 对象覆盖 忽略多余属性
- * @param {Object} obj1 基
- * @param {Object} obj2 覆盖
- */
- export const objAssign = function (obj1, obj2) {
- if (!(typeof obj1 === 'object' && typeof obj2 === 'object')) {
- return {};
- }
- for (let i in obj1) {
- if (i in obj2) {
- obj1[i] = obj2[i];
- }
- }
- return obj1;
- }
- /**
- * 对数据进行分页,返回分页后的页数据
- * @param {Array} allItems 需要分页数据
- * @param {Number} index 页码 1页开始
- * @param {Number} size 每页条数
- * @returns {Array} 返回页数据数组
- */
- export const allPagination = function (allItems, index, size) {
- if (!(Object.prototype.toString.call(allItems) === '[object Array]')) {
- return [];
- }
- index < 1 && (index = 1);
- let start = (index - 1) * size;
- let end = 1;
- if (size <= 1) {
- end = index * size;
- } else {
- end = index * size - 1;
- }
- return allItems.slice(start, end);
- }
- // =============== / wu 2018-07-28 ==================
- /**
- * 判断是否位为数字
- * @param: arr: 要检测的数据集合,元素为{id: '数字',text: '值对应的名称'}
- * @param:data:表格数据
- */
- export const doCheckNumber = (arr) => {
- let isNotNum = false;
- let reg = /^(?:0|[1-9]\d*)(?:\.\d*[1-9])?$/;
- let noDecReg = /^[0-9]+[0-9]*$/
- for (let item of arr) {
- if (item.id) {
- if (item.noDec) {
- // console.log('是否是正数', (item.id).toString(), (item.id).toString().indexOf('.'))
- if ((item.id).toString().indexOf('.') > -1 || !noDecReg.test(Number(item.id))) {
- ElementUI.Message({ message: item.text + '只能是整数', type: 'warning', dangerouslyUseHTMLString: true })
- isNotNum = true
- }
- } else {
- if (!reg.test(Number(item.id))) {
- // this.$message.warning(item.text + '只能位数字')
- ElementUI.Message({ message: item.text + '只能是数字', type: 'warning', dangerouslyUseHTMLString: true })
- isNotNum = true
- }
- }
- }
- }
- return isNotNum
- }
- /**
- * 表格合计函数
- * @param: param elememt-ui表格合计函数默认参数
- * @param: arr1: 根据计划车间模块实际情况,表示要合计 量 的字段,改数据包含的字段合计后会做一个单位转换 kg --> t 若是不做转换,该参可传一个空数组
- * @param:arr2: 表示要合计 数 的字段,不会做转换
- */
- export const commonSummaries = function (param, arr1 = [], arr2 = []) {
- // let _this = this
- const { columns, data } = param;
- const sums = [];
- columns.forEach((column, index) => {
- if (index === 0) {
- sums[index] = '合计';
- return;
- }
- const values = data.map(item => {
- Number(item[column.property])
- if (arr1.includes(column.property) || arr2.includes(column.property)) {
- return item[column.property];
- } else {
- return 'test';
- }
- });
- if (!values.every(value => isNaN(value))) {
- sums[index] = values.reduce((prev, curr) => {
- const value = Number(curr);
- if (!isNaN(value)) {
- // return prev + curr;
- return floatComputed(prev, curr, '+')
- } else {
- return prev;
- }
- }, 0);
- // sums[index] += ' 元'; changeNum
- arr1.includes(column.property) && (sums[index] = (sums[index] / 1000).toFixed(3))
- sums[index] = changeNum(sums[index]);
- } else {
- sums[index] = '';
- }
- });
- return sums;
- }
- function floatComputed (arg1, arg2, sign) {
- if (!arg1) {
- arg1 = 0;
- }
- if (!arg2) {
- arg2 = 0;
- }
- let val1 = arg1 + '';
- let val2 = arg2 + '';
- let rate = 1;
- let rate1 = 1;
- let rate2 = 1;
- if (val1.indexOf('.') < 0) {
- rate1 = 0;
- } else {
- rate1 = val1.length - val1.indexOf('.') - 1;
- }
- if (val2.indexOf('.') < 0) {
- rate2 = 0;
- } else {
- rate2 = val2.length - val2.indexOf('.') - 1;
- }
- rate = rate2;
- val2 = val2.replace('.', '');
- val1 = val1.replace('.', '');
- if (rate1 > rate2) {
- rate = rate1;
- for (let i = 0; i < rate1 - rate2; i++) {
- val2 = val2 + '0'
- }
- } else {
- for (let i = 0; i < rate2 - rate1; i++) {
- val1 = val1 + '0';
- }
- }
- let rateNum = Math.pow(10, rate);
- if (sign === '-') {
- return (Number(val1) - Number(val2)) / rateNum
- }
- if (sign === '+') {
- return (Number(val1) + Number(val2)) / rateNum
- }
- if (sign === '*') {
- return (Number(val1) * Number(val2)) / (rateNum * rateNum)
- }
- if (sign === '/') { // 默认保留4位
- let num = (Number(val1) / Number(val2)) + '';
- if (num.split('.').length > 0) {
- if (num[1].length > 4) {
- num = num.toFixed(4);
- }
- }
- return num;
- }
- return null;
- }
|