Utils.class.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. /**
  2. * @description 工具类 每个项目丢可以
  3. * */
  4. export default class Utils {
  5. /*获取数据类型*/
  6. static getDataType(value){
  7. let types = {
  8. '[object Number]': 'number',
  9. '[object String]': 'string',
  10. '[object Boolean]': 'boolean',
  11. '[object Undefined]': 'undefined',
  12. '[object Object]': 'object',
  13. '[object Array]': 'array',
  14. '[object Function]': 'function',
  15. }
  16. let type = Object.prototype.toString.call(value)
  17. return types[type];
  18. }
  19. /**
  20. * 对象转字符串 对字符串进行sort 排序
  21. * @param data {object} 需要拼接的对象
  22. * @param connector {string} 连接符
  23. * */
  24. static obj2str(data = {}, blank = '=', connector = '&') {
  25. let str = '';
  26. let keys = Object.keys(data);
  27. if (keys.length) {
  28. let sort_key_arr = keys.sort();
  29. sort_key_arr.forEach(v=>{
  30. str += connector + v + blank + data[v];
  31. });
  32. str = str.slice(1);
  33. }
  34. return str;
  35. }
  36. static objClone(obj) {
  37. let str = JSON.stringify(obj);
  38. return JSON.parse(str);
  39. }
  40. /*字符串转对象*/
  41. static str2obj(str, blank = '=', connector = '&') {
  42. let obj = {};
  43. if (str) {
  44. let arr = str.split(connector);
  45. arr.forEach(v => {
  46. let item = v.split(blank);
  47. obj[item[0]] = item[1] || '';
  48. });
  49. }
  50. return obj;
  51. }
  52. /*字符串切割成指定长度的字符串数组*/
  53. static strSlice2arr(str,count = 1) {
  54. str = String(str);
  55. let len = str. length;
  56. let str_arr = [];
  57. let s = 0;
  58. let times = Math.ceil(len / count);
  59. for (let i = 0; i < times; i++) {
  60. str_arr.push(str.slice(s,s + count));
  61. s = s + count;
  62. }
  63. return str_arr;
  64. }
  65. /*获取对象的值 可以通过a.b.c*/
  66. static getObjKey(obj, key) {
  67. let re = obj;
  68. if (key) {
  69. let is_point = key.includes('.');
  70. if (is_point) {
  71. let arr = key.split('.');
  72. arr.forEach(v => {
  73. re = re[v];
  74. });
  75. } else {
  76. re = obj[key];
  77. }
  78. }
  79. return re;
  80. }
  81. /*设置获取对象的值 可以通过a.b.c*/
  82. static setObjKey(obj, key ,value) {
  83. let re = obj;
  84. if (key) {
  85. let is_point = key.includes('.');
  86. if (is_point) {
  87. let arr = key.split('.');
  88. arr.forEach((v) => {
  89. if( this.getDataType( re[v]) === 'object' ){
  90. re = re[v]
  91. }else {
  92. re[v] = value
  93. }
  94. });
  95. } else {
  96. obj[key] = value;
  97. }
  98. }
  99. }
  100. /*校验格式*/
  101. static checkParams(val = '', type = 'pwd') {
  102. let re = {
  103. is_check: false,//是否通过校验
  104. msg: ''//提示
  105. };
  106. let r = '';
  107. switch (type) {
  108. case 'tel'://手机号类型检测
  109. if (typeof val !== 'string') {
  110. re.msg = '数据类型错误';
  111. }
  112. if (val.length !== 11) {
  113. re.msg = '手机号长度错误';
  114. } else {
  115. if (((/^1[3456789]\d{9}$/).test(val))) {
  116. re.is_check = true;
  117. re.msg = '';
  118. }else {
  119. re.msg = '手机号格式错误';
  120. }
  121. // if(val[0] ==='1'){
  122. // re.is_check=true;
  123. // re.msg='';
  124. // }
  125. }
  126. break;
  127. case 'pwd':
  128. r = (/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)])+$).{6,20}$/).test(val);
  129. if (r) {
  130. re.is_check = true;
  131. re.msg = '';
  132. } else {
  133. re.is_check = false;
  134. re.msg = '密码必须是6-20位字符,必须英文,数字,特殊字符两种及以上的混合';
  135. }
  136. break;
  137. }
  138. return re;
  139. }
  140. /**
  141. * @description 检测对象是否有包含关系
  142. * @return boolean
  143. * */
  144. static objInner(big_obj, inner_obj) {
  145. for (let i in inner_obj) {
  146. if (inner_obj[i] !== big_obj[i]) {
  147. return false;
  148. }
  149. }
  150. return true;
  151. }
  152. /*给数组对象的某个子对象 的某个属性赋值*/
  153. static editObjField(arr_obj, obj, new_obj) {
  154. for (let i = 0, len = arr_obj.length; i < len; i++) {
  155. let item = arr_obj[i];
  156. // 对象检测是否存在要修改的列
  157. let is_inner = this.objInner(arr_obj[i], obj);
  158. if (is_inner) {
  159. Object.assign(item, new_obj);
  160. }
  161. }
  162. // console.log(arr_obj)
  163. }
  164. /*值转化为数字*/
  165. static val2Number(val, fix) {
  166. // console.log(val,fix)
  167. let num = '';
  168. // if(fix){
  169. //
  170. // num = parseFloat(val);
  171. // if(this.isNunPoint(num)){
  172. // num=num.toFixed(fix)
  173. // }
  174. // }else {
  175. num = parseInt(val);
  176. // }
  177. // console.log(num)
  178. if (isNaN(num)) {
  179. num = '';
  180. }
  181. return num;
  182. }
  183. /*拼接地址*/
  184. static joinUrl(url, data = {}) {
  185. /*检测url 是否有参数 对原始参数不影响*/
  186. let is_w = url.includes('?');//地址中是否包含问号 http://asda.com?a=1 http://asda.com
  187. let url_split = url.split('?'),
  188. base_url = url_split[0],
  189. search_str = url_split[1] || '';
  190. let obj = this.str2obj(search_str, '=', '&');
  191. let new_obj = {...obj, ...data};
  192. return base_url + '?' + this.obj2str(new_obj, '=', '&');
  193. }
  194. /*获取时间格式
  195. * alert(new Date().format("yyyy年MM月dd日"));
  196. alert(new Date().format("MM/dd/yyyy"));
  197. alert(new Date().format("yyyyMMdd"));
  198. alert(new Date().format("yyyy-MM-dd hh:mm:ss"));
  199. * */
  200. static getDateTime(fmt,time) {
  201. if(this.getDataType(time) === 'string'){
  202. time = time.replace(/\-/g, '/')
  203. }
  204. let date = new Date(time || Date.now());
  205. var o = {
  206. 'M+': date.getMonth() + 1, //月份
  207. 'd+': date.getDate(), //日
  208. 'h+': date.getHours(), //小时
  209. 'm+': date.getMinutes(), //分
  210. 's+': date.getSeconds(), //秒
  211. 'q+': Math.floor((date.getMonth() + 3) / 3), //季度
  212. 'S': date.getMilliseconds() //毫秒
  213. };
  214. if ((/(y+)/).test(fmt)) {
  215. fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  216. }
  217. for (var k in o) {
  218. if (new RegExp('(' + k + ')').test(fmt)) {
  219. fmt = fmt.replace(
  220. RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
  221. }
  222. }
  223. return fmt;
  224. }
  225. /**
  226. * @description 获取倒计时格式时间
  227. * @param{number} val 时长 秒
  228. * @param{string} symbol 连接符
  229. * */
  230. static getTimeLong(val, symbol = ' : ') {
  231. /*获取秒*/
  232. let seconds = val % 60;
  233. // 获取分钟
  234. let minutes = parseInt(val / 60)%60;
  235. //获取小时
  236. let hours = parseInt(val / 3600);
  237. seconds = seconds < 10 ? '0' + seconds : seconds;
  238. minutes = minutes < 10 ? '0' + minutes : minutes;
  239. hours = hours < 10 ? '0' + hours : hours;
  240. console.log(111,hours,seconds,seconds)
  241. let str = '';
  242. if (hours/1) {
  243. str = hours + symbol
  244. }
  245. str = str+ minutes + symbol + seconds;
  246. console.log(str)
  247. return str;
  248. }
  249. /*计算两个时间相差的时间戳
  250. * data1 结束时间 开始时间
  251. * */
  252. static getReduceTime(data1,data2 = new Date().toString()){
  253. data1 = data1.replace(/-/g, '/');
  254. data2 = data2.replace(/-/g, '/');
  255. data1 = new Date(data1).getTime();
  256. data2 = new Date(data2).getTime();
  257. return data1 - data2
  258. }
  259. /*获取年月的天数*/
  260. static getMonthDays(year, month) {
  261. var next = new Date(year, month, 1, 0, 0, 0) //获取想要获取的那个月的后一个月第一天的时间戳
  262. var now = new Date(next-1000) //往回波一秒
  263. return now.getDate();// 波一秒之后就是想要获取的那个月的时间戳
  264. }
  265. /*获取地址参数*/
  266. static getUrlQuery(url){
  267. let url_search = url.split('?')[1];
  268. let re = {};
  269. if(!url_search){
  270. return re;
  271. }
  272. let url_search_arr = url_search.split('&');
  273. url_search_arr.forEach(v=>{
  274. let val_arr = v.split('=');
  275. re[val_arr[0]] = val_arr[1];
  276. });
  277. return re;
  278. }
  279. /*创建两个数之间的数组
  280. * */
  281. static getArrRange(min,max){
  282. let re = [];
  283. for(var i = min;i<=max;i++){
  284. re.push(i);
  285. }
  286. return re;
  287. }
  288. }