tool.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. import moment from 'moment';
  2. // import Schema from 'async-validator';
  3. const BaseTool = {};
  4. BaseTool.UserUtil = {
  5. transImg(imgArr = []) {
  6. const temp = []
  7. if (BaseTool.Object.isBlank(imgArr)) {
  8. return temp
  9. }
  10. imgArr.forEach(item => {
  11. if (item.url.substr(0, 4) !== 'http') {
  12. item.url = BaseTool.UserUtil.getFileServerUrl() + item.url
  13. }
  14. temp.push(item)
  15. })
  16. return temp
  17. },
  18. getUploadUrl: () => {
  19. return BaseTool.UserUtil.getBaseUrl() + '/upms/files/upload';
  20. },
  21. getUploadUrlIgnores: () => {
  22. return BaseTool.UserUtil.getBaseUrl() + '/ignores/files/upload';
  23. },
  24. getFileUrl: url => {
  25. // #ifdef H5
  26. if (process.env.NODE_ENV === 'development') {
  27. return 'http://localhost:5000'+ url;
  28. } else if (process.env.NODE_ENV === 'production') {
  29. return 'https://xiamen.m.litian2017.com/api'+ url;
  30. }
  31. // #endif
  32. // #ifndef H5
  33. // eslint-disable-next-line no-unreachable
  34. return BaseTool.UserUtil.getBaseUrl() + url;
  35. // #endif
  36. },
  37. getImageCode: () => {
  38. return BaseTool.UserUtil.getBaseUrl() + '/verify/captcha/';
  39. },
  40. NOT_LOGIN: ['/verify/sms/code/send',
  41. '/upms/users/register',
  42. '/upms/users/check/',
  43. '/ignores/'],
  44. getUserInfo: () => {
  45. return uni.getStorageSync('userInfo').userInfo;
  46. },
  47. isRepairRole: () => {
  48. if (uni.getStorageSync('userInfo').userInfo == null) {
  49. return false;
  50. } else if (uni.getStorageSync('userInfo').userInfo.roleName === '维修人员') {
  51. return true;
  52. } else {
  53. return false;
  54. }
  55. },
  56. isManagerRole: () => {
  57. if (uni.getStorageSync('userInfo').userInfo == null) {
  58. return false;
  59. } else if (uni.getStorageSync('userInfo').userInfo.roleName === '超级管理员') {
  60. return true;
  61. } else {
  62. return false;
  63. }
  64. },
  65. isUseRole: () => {
  66. if (uni.getStorageSync('userInfo').userInfo == null) {
  67. return false;
  68. } else if (uni.getStorageSync('userInfo').userInfo.roleName === '使用人员') {
  69. return true;
  70. } else {
  71. return false;
  72. }
  73. },
  74. getStateUserInfo: (that) => {
  75. return that.$store.state.userInfo.userInfo;
  76. },
  77. getToken: url => {
  78. for (const notUrl of BaseTool.UserUtil.NOT_LOGIN) {
  79. if (url.indexOf(notUrl) !== -1) {
  80. return '';
  81. }
  82. }
  83. let token = '';
  84. const storeToken = uni.getStorageSync('accessToken');
  85. if (url.indexOf('/oauth/token') !== -1) {
  86. token = 'Basic ZnJvbnQ6ZnJvbnQ=';
  87. } else if (url.indexOf('/alipay') !== -1) {
  88. return false;
  89. } else if (storeToken) {
  90. token = 'Bearer ' + storeToken;
  91. }
  92. console.log(11221)
  93. console.log(token)
  94. return token;
  95. },
  96. getBaseUrl: () => {
  97. // #ifdef H5
  98. return '/api';
  99. },
  100. getFileServerUrl: () => {
  101. // #ifdef H5
  102. return '/api';
  103. }
  104. };
  105. // BaseTool.Validator = {
  106. // getParams: (dataMap = {}) => {
  107. // const params = {};
  108. // Object.keys(dataMap).forEach(key => {
  109. // params[key] = dataMap[key].value;
  110. // });
  111. // return params;
  112. // },
  113. // getListParams: (dataList = []) => {
  114. // const params = {};
  115. // dataList.forEach(item => {
  116. // params[item.name] = item.value;
  117. // });
  118. // return params;
  119. // },
  120. // getSchemaParams: (dataMap = {}) => {
  121. // return dataMap;
  122. // },
  123. // getListSchemaParams: (dataList = []) => {
  124. // const schemaParams = {};
  125. // dataList.forEach(item => {
  126. // schemaParams[item.name] = item;
  127. // });
  128. // return schemaParams;
  129. // },
  130. // validateRules: (dataMap = {}) => {
  131. // return new Promise((resolve, reject) => {
  132. // const schemaData = {};
  133. // const params = {};
  134. // Object.keys(dataMap).forEach(key => {
  135. // schemaData[key] = dataMap[key].rules;
  136. // params[key] = dataMap[key].value;
  137. // });
  138. // const validator = new Schema(schemaData);
  139. // validator
  140. // .validate(params, (errors, fields) => {
  141. // if (errors) {
  142. // uni.showToast({ icon: 'none', title: errors[0].message });
  143. // reject(errors);
  144. // } else {
  145. // resolve(params);
  146. // }
  147. // })
  148. // .then(
  149. // r => {},
  150. // ({ errors, fields }) => {}
  151. // );
  152. // });
  153. // },
  154. // validateParamsRules: (params = {}, rules = {}) => {
  155. // return new Promise((resolve, reject) => {
  156. // const validator = new Schema(rules);
  157. // validator
  158. // .validate(params, (errors, fields) => {
  159. // if (errors) {
  160. // uni.showToast({ icon: 'none', title: errors[0].message });
  161. // reject(errors);
  162. // } else {
  163. // resolve(params);
  164. // }
  165. // })
  166. // .then(
  167. // r => {},
  168. // ({ errors, fields }) => {}
  169. // );
  170. // });
  171. // },
  172. // validate: (dataMap = {}) => {
  173. // return new Promise((resolve, reject) => {
  174. // const validator = new Schema(dataMap);
  175. // const params = BaseTool.Validator.getParams(dataMap);
  176. // validator
  177. // .validate(params, (errors, fields) => {
  178. // if (errors) {
  179. // console.log(111111, errors);
  180. // uni.showToast({ icon: 'none', title: errors[0].message });
  181. // reject(errors);
  182. // } else {
  183. // resolve(params);
  184. // }
  185. // })
  186. // .then(
  187. // r => {},
  188. // ({ errors, fields }) => {}
  189. // );
  190. // });
  191. // },
  192. // validateListRules: (dataList = []) => {
  193. // return new Promise((resolve, reject) => {
  194. // const schemaData = {};
  195. // const params = {};
  196. // dataList.forEach(item => {
  197. // params[item.name] = item.value;
  198. // schemaData[item.name] = item.rules;
  199. // });
  200. // const validator = new Schema(schemaData);
  201. // validator
  202. // .validate(params, (errors, fields) => {
  203. // if (errors) {
  204. // uni.showToast({ icon: 'none', title: errors[0].message });
  205. // reject(errors);
  206. // } else {
  207. // resolve(params);
  208. // }
  209. // })
  210. // .then(
  211. // r => {},
  212. // ({ errors, fields }) => {}
  213. // );
  214. // });
  215. // },
  216. // validateList: (dataList = []) => {
  217. // return new Promise((resolve, reject) => {
  218. // const validator = new Schema(BaseTool.Validator.getListSchemaParams(dataList));
  219. // const params = BaseTool.Validator.getListParams(dataList);
  220. // validator
  221. // .validate(params, (errors, fields) => {
  222. // if (errors) {
  223. // uni.showToast({ icon: 'none', title: errors[0].message });
  224. // reject(errors);
  225. // } else {
  226. // resolve(params);
  227. // }
  228. // })
  229. // .then(
  230. // r => {},
  231. // err => {}
  232. // );
  233. // });
  234. // }
  235. // };
  236. /**
  237. * 时间对象
  238. * 转换时使用这个方法,因为moment暂用的空间还是有点大,小程序从936k->1.22M
  239. * h5:也多了100-200k
  240. */
  241. BaseTool.Date = {
  242. PICKER_NORM_YEAR: 'YYYY',
  243. PICKER_NORM_MONTH: 'MM',
  244. PICKER_NORM_YEAR_MONTH: 'YYYY-MM',
  245. PICKER_NORM_DATE_PATTERN: 'YYYY-MM-DD',
  246. PICKER_NORM_TIME_PATTERN: 'HH:mm:ss',
  247. PICKER_NORM_DATETIME_PATTERN: 'YYYY-MM-DD HH:mm:ss',
  248. /**
  249. * 将字符串日期格式化
  250. * @param date
  251. * @param pattern
  252. * @returns {string}
  253. */
  254. formatter(date, pattern) {
  255. if (BaseTool.Object.isBlank(date)) {
  256. return '';
  257. } else {
  258. return moment(date, BaseTool.Date.PICKER_NORM_DATETIME_PATTERN).format(pattern);
  259. }
  260. },
  261. getCountBetween(date1, date2, type = 1) {
  262. const startTime = new Date(date1); // 开始时间
  263. const endTime = new Date(date2); // 结束时间
  264. const usedTime = endTime - startTime; // 相差的毫秒数
  265. const days = Math.floor(usedTime / (24 * 3600 * 1000)); // 计算出天数
  266. const leavel = usedTime % (24 * 3600 * 1000); // 计算天数后剩余的时间
  267. const hours = Math.floor(leavel / (3600 * 1000)); // 计算剩余的小时数
  268. const leavel2 = leavel % (3600 * 1000); // 计算剩余小时后剩余的毫秒数
  269. const minutes = Math.floor(leavel2 / (60 * 1000)); // 计算剩余的分钟数
  270. if (type === 1) {
  271. return days;
  272. }
  273. if (type === 2) {
  274. return hours;
  275. }
  276. if (type === 2) {
  277. return minutes;
  278. }
  279. }
  280. };
  281. BaseTool.String = {
  282. isBlank(text) {
  283. return text === null || text === undefined || text === 'undefined' || text === '';
  284. },
  285. isNotBlank(text) {
  286. return !this.isBlank(text);
  287. }
  288. };
  289. BaseTool.Object = {
  290. isBlank(text) {
  291. if (typeof text === 'string') {
  292. return BaseTool.String.isBlank(text);
  293. }
  294. return text === null || text === undefined;
  295. },
  296. isNotBlank(text) {
  297. return !this.isBlank(text);
  298. },
  299. /**
  300. * 获取对象属性
  301. * @param obj
  302. * @param field
  303. * @returns {*}
  304. */
  305. getField(obj, field) {
  306. if (BaseTool.String.isBlank(obj) || BaseTool.String.isBlank(field)) {
  307. return '';
  308. }
  309. return obj[field];
  310. },
  311. /**
  312. * 深克隆
  313. * @param data
  314. * @returns {{}|any}
  315. */
  316. copy: function (data) {
  317. if (BaseTool.Object.isBlank(data)) {
  318. return {};
  319. }
  320. return JSON.parse(JSON.stringify(data));
  321. }
  322. };
  323. BaseTool.Amount = {
  324. /**
  325. * 元换算为万元
  326. * @param num :
  327. * @returns {number} :
  328. */
  329. divTenThousand(num) {
  330. if (num == null) {
  331. return 0;
  332. }
  333. return BaseTool.Number.div(num, 10000, 3);
  334. // return num
  335. },
  336. /**
  337. * 元换算为万元,并格式化
  338. * @param num :
  339. * @returns {string} :
  340. */
  341. divTenThousandFormatter(num) {
  342. if (BaseTool.String.isBlank(num)) {
  343. return num;
  344. }
  345. return this.formatter(this.divTenThousand(num));
  346. },
  347. /**
  348. * 格式化金额
  349. * @param value
  350. * @returns {string}
  351. */
  352. formatter: value => {
  353. if (BaseTool.String.isBlank(value)) {
  354. return '';
  355. }
  356. return `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  357. },
  358. /**
  359. * 格式化利率
  360. * @param value
  361. * @returns {string|*}
  362. */
  363. formatterRate: value => {
  364. if (BaseTool.String.isBlank(value)) {
  365. return value;
  366. }
  367. return value + '%';
  368. },
  369. /**
  370. * 去掉格式化金额
  371. * @param value
  372. * @returns {*}
  373. */
  374. parser: value => value.replace(/\$\s?|(,*)/g, ''),
  375. /**
  376. * 万元换算为元
  377. * @param num
  378. * @returns {*}
  379. */
  380. mulTenThousand(num) {
  381. if (BaseTool.String.isBlank(num)) {
  382. return 0;
  383. }
  384. return BaseTool.Number.mul(num, 10000, 6);
  385. // return num
  386. },
  387. /**
  388. * 元换算为万元,并格式化
  389. * @param num :
  390. * @returns {string} :
  391. */
  392. default(value) {
  393. if (BaseTool.String.isBlank(value) || value === 0) {
  394. return '0.00';
  395. }
  396. return value;
  397. },
  398. /**
  399. * 元换算为万元,并格式化
  400. * @param num :
  401. * @returns {string} :
  402. */
  403. defaultDivTenThousandFormatter(num) {
  404. if (BaseTool.String.isBlank(num) || num === 0) {
  405. return '0.00';
  406. }
  407. return this.formatter(this.divTenThousand(num));
  408. }
  409. };
  410. BaseTool.Number = {
  411. add(arg1, arg2) {
  412. if (BaseTool.String.isBlank(arg1)) {
  413. arg1 = 0;
  414. }
  415. if (BaseTool.String.isBlank(arg2)) {
  416. arg2 = 0;
  417. }
  418. let r1, r2;
  419. try {
  420. r1 = arg1.toString().split('.')[1].length;
  421. } catch (e) {
  422. r1 = 0;
  423. }
  424. try {
  425. r2 = arg2.toString().split('.')[1].length;
  426. } catch (e) {
  427. r2 = 0;
  428. }
  429. const m = Math.pow(10, Math.max(r1, r2));
  430. const n = r1 >= r2 ? r1 : r2;
  431. return ((arg1 * m + arg2 * m) / m).toFixed(n);
  432. },
  433. sub(arg1, arg2) {
  434. if (BaseTool.String.isBlank(arg1)) {
  435. arg1 = 0;
  436. }
  437. if (BaseTool.String.isBlank(arg2)) {
  438. arg2 = 0;
  439. }
  440. let re1, re2;
  441. try {
  442. re1 = arg1.toString().split('.')[1].length;
  443. } catch (e) {
  444. re1 = 0;
  445. }
  446. try {
  447. re2 = arg2.toString().split('.')[1].length;
  448. } catch (e) {
  449. re2 = 0;
  450. }
  451. const m = Math.pow(10, Math.max(re1, re2));
  452. const n = re1 >= re2 ? re1 : re2;
  453. return ((arg1 * m - arg2 * m) / m).toFixed(n);
  454. },
  455. mul(arg1, arg2) {
  456. if (BaseTool.String.isBlank(arg1)) {
  457. arg1 = 0;
  458. }
  459. if (BaseTool.String.isBlank(arg2)) {
  460. arg2 = 0;
  461. }
  462. let m = 0;
  463. const s1 = arg1.toString();
  464. const s2 = arg2.toString();
  465. try {
  466. m += s1.split('.')[1].length;
  467. } catch (e) {}
  468. try {
  469. m += s2.split('.')[1].length;
  470. } catch (e) {}
  471. return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / Math.pow(10, m);
  472. },
  473. /**
  474. * 除法 注意如果整除了 小数点将无效
  475. * @param arg1 : 被除数
  476. * @param arg2 : 除数
  477. * @param digit :精确位数
  478. * @returns {number}
  479. */
  480. div(arg1, arg2, digit) {
  481. if (BaseTool.String.isBlank(arg1)) {
  482. arg1 = 0;
  483. }
  484. if (BaseTool.String.isBlank(arg2)) {
  485. arg2 = 1;
  486. }
  487. let t1 = 0;
  488. let t2 = 0;
  489. try {
  490. t1 = arg1.toString().split('.')[1].length;
  491. } catch (e) {}
  492. try {
  493. t2 = arg2.toString().split('.')[1].length;
  494. } catch (e) {}
  495. const r1 = Number(arg1.toString().replace('.', ''));
  496. const r2 = Number(arg2.toString().replace('.', ''));
  497. // 获取小数点后的计算值
  498. const result = ((r1 / r2) * Math.pow(10, t2 - t1)).toString();
  499. let result2 = result.split('.')[1];
  500. if (result2 !== undefined) {
  501. result2 = result2.substring(0, digit > result2.length ? result2.length : digit);
  502. } else {
  503. result2 = '';
  504. }
  505. while (result2.length < digit) {
  506. result2 = result2 + '0';
  507. }
  508. if (digit === 0) {
  509. return Number(result.split('.')[0]);
  510. }
  511. return Number(result.split('.')[0] + '.' + result2);
  512. }
  513. };
  514. BaseTool.Util = {
  515. isPhone: value => {
  516. const reg = /^1[3456789]\d{9}$/;
  517. return reg.test(value);
  518. },
  519. isIdCard: value => {
  520. const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  521. return reg.test(value);
  522. },
  523. isBankCard: value => {
  524. const reg = /^\d+$/;
  525. return reg.test(value);
  526. },
  527. isAmount: value => {
  528. const reg = /((^[1-9]\d*)|^0)(\.\d{0,2})?$/;
  529. return reg.test(value);
  530. },
  531. isDev: () => {
  532. return process.env.NODE_ENV === 'development';
  533. },
  534. isProd: () => {
  535. return process.env.NODE_ENV === 'production';
  536. },
  537. isIOS: () => {
  538. const ua = navigator.userAgent;
  539. const isiOS = !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  540. if (isiOS) {
  541. return true;
  542. } else {
  543. return false;
  544. }
  545. }
  546. };
  547. export default BaseTool;