AI销管
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

704 line
17 KiB

  1. import * as CryptoJS from '../components/crypto-js'
  2. function formatLongTime(mss) {
  3. var days = parseInt(mss / (1000 * 60 * 60 * 24));
  4. var hours = parseInt(mss % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));
  5. var minutes = parseInt(mss % (1000 * 60 * 60) / (1000 * 60));
  6. var seconds = mss % (1000 * 60) / 1000;
  7. seconds = parseInt(seconds);
  8. if (minutes < 9) {
  9. minutes = "0" + minutes;
  10. }
  11. if (seconds < 9) {
  12. seconds = "0" + seconds;
  13. }
  14. return minutes + ":" + seconds + "";
  15. }
  16. /**
  17. * 格式化时间
  18. * @param {String} date 原始时间格式
  19. * 格式后的时间:yyyy/mm/dd hh:mm:ss
  20. **/
  21. /**
  22. * 格式化时间
  23. * @param {String} date 原始时间格式
  24. * 格式后的时间:yyyy/mm/dd hh:mm:ss
  25. **/
  26. const formatSecond = seconds=> {
  27. var h = Math.floor(seconds / 3600) < 10 ? '0'+Math.floor(seconds / 3600) : Math.floor(seconds / 3600);
  28. var m = Math.floor((seconds / 60 % 60)) < 10 ? '0' + Math.floor((seconds / 60 % 60)) : Math.floor((seconds / 60 % 60));
  29. var s = Math.floor((seconds % 60)) < 10 ? '0' + Math.floor((seconds % 60)) : Math.floor((seconds % 60));
  30. return h + ":" + m + ":" + s;
  31. }
  32. /**
  33. *加密处理
  34. */
  35. const encryption = (params) => {
  36. let {
  37. data,
  38. type,
  39. param,
  40. key
  41. } = params
  42. const result = JSON.parse(JSON.stringify(data))
  43. if (type === 'Base64') {
  44. param.forEach(ele => {
  45. result[ele] = btoa(result[ele])
  46. })
  47. } else {
  48. param.forEach(ele => {
  49. var data = result[ele]
  50. key = CryptoJS.enc.Latin1.parse(key)
  51. var iv = key
  52. // 加密
  53. var encrypted = CryptoJS.AES.encrypt(
  54. data,
  55. key, {
  56. iv: iv,
  57. mode: CryptoJS.mode.CBC,
  58. padding: CryptoJS.pad.ZeroPadding
  59. })
  60. result[ele] = encrypted.toString()
  61. })
  62. }
  63. return result
  64. }
  65. const formatTime = date => {
  66. const year = date.getFullYear();
  67. const month = date.getMonth() + 1;
  68. const day = date.getDate();
  69. const hour = date.getHours();
  70. const minute = date.getMinutes();
  71. const second = date.getSeconds();
  72. return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':');
  73. };
  74. /**
  75. * 格式化时间
  76. * @param {String} date 原始时间格式
  77. * 格式后的时间:hh:mm
  78. **/
  79. const formatDateTime = date => {
  80. const hour = date.getHours();
  81. const minute = date.getMinutes();
  82. return [hour, minute, second].map(formatNumber).join(':');
  83. };
  84. /**
  85. * 格式化时间
  86. * @param {String} date 原始时间格式
  87. * 格式后的时间:yyyy-mm-dd
  88. **/
  89. const formatDate = date => {
  90. const year = date.getFullYear();
  91. const month = date.getMonth() + 1;
  92. const day = date.getDate();
  93. return [year, month, day].map(formatNumber).join('-');
  94. };
  95. const formatNumber = n => {
  96. n = n.toString();
  97. return n[1] ? n : '0' + n;
  98. };
  99. /**
  100. * 获取指定日期前后N天的日期、前N个月日期、后N个月日期
  101. * @param {String} sdate 当前日期
  102. * @param {Number} interval 间隔天数
  103. * @param {String} caret 间隔符号
  104. * @example 获取当天日期 getNowFormatDate("",0,"-"); 结果为"2018-09-18";
  105. 获取前一天日期 getNowFormatDate("2018-03-01",-1,"-"); 结果为"2018-02-18";
  106. 获取后一天日期 getNowFormatDate("2018-02-28",1,"-"); 结果为"2018-03-01";
  107. **/
  108. function getNowFormatDate(sdate, interval, caret) {
  109. var patt1 = /^\d{4}-([0-1]?[0-9])-([0-3]?[0-9])$/; //判断输入的日期是否符合格式正则表达式
  110. if (!(sdate && typeof sdate == "string" && patt1.test(sdate))) {
  111. sdate = new Date(); //不满足日期的则使用当前年月日
  112. }
  113. interval = isNaN(parseInt(interval)) ? 0 : parseInt(interval); //若没有输入间隔,则使用当前日
  114. caret = caret && typeof caret == "string" ? caret : "";
  115. var gdate = new Date(sdate).getTime(); //获取指定年月日
  116. gdate = gdate + 1000 * 60 * 60 * 24 * interval; //加减相差毫秒数
  117. var speDate = new Date(gdate); //获取指定好毫秒数时间
  118. var preYear = speDate.getFullYear();
  119. var preMonth = speDate.getMonth() + 1;
  120. var preDay = speDate.getDate();
  121. preMonth = preMonth < 10 ? "0" + preMonth : preMonth;
  122. preDay = preDay < 10 ? "0" + preDay : preDay;
  123. var preDate = preYear + caret + preMonth + caret + preDay;
  124. return preDate;
  125. } // 获取某年某月的有多少周
  126. String.prototype.weekInMonthCount = function () {
  127. var date = new Date(new Date(this.replace(/-/g, "/")) || new Date());
  128. var firstWeekDate = 1; // 默认第一周是本月1号 为了模拟本月1号是否为本月第1周的判断
  129. if (date.getDay() === 1) {
  130. // 判断1号是周一
  131. firstWeekDate = 1;
  132. } else if (date.getDay() === 0) {
  133. // 判断1号是周日
  134. firstWeekDate = 8 - 7 + 1;
  135. } else {
  136. // 判断1号是周二至周六之间
  137. firstWeekDate = 8 - date.getDay() + 1;
  138. }
  139. date.setMonth(date.getMonth() + 1);
  140. date.setDate(0);
  141. var monthHasDays = date.getDate(); // 本月天数
  142. monthHasDays = date.getDate() - firstWeekDate + 1;
  143. var hasWeek = Math.ceil(monthHasDays / 7); // 计算本月有几周
  144. return hasWeek;
  145. }; // 获取今天是第几周 注:ios不支持2018-01-14 需转化为2018/01/14
  146. String.prototype.weekIndexInMonth = function () {
  147. var date_trim = (this.trim() != "" ? this : new Date()).replace(/-/g, "/");
  148. var date = new Date(date_trim);
  149. var dateStart_trim = new Date((this.trim() != "" ? this : new Date()).replace(/-/g, "/")).setDate(1);
  150. var dateStart = new Date(dateStart_trim); // 本月初
  151. var firstWeek = 1;
  152. if (dateStart.getDay() === 1) {
  153. firstWeek = 1;
  154. } else if (dateStart.getDay() === 0) {
  155. firstWeek = 8 - 7 + 1;
  156. } else {
  157. firstWeek = 8 - dateStart.getDay() + 1;
  158. }
  159. var weekIndex = 1;
  160. var c = date.getDate();
  161. if (date.getDay() === 1 && date.getDate() < 7) {
  162. weekIndex = 1;
  163. } else if (c < firstWeek) {
  164. weekIndex = -1;
  165. } else {
  166. if (c < 7) {
  167. weekIndex = Math.ceil(c / 7);
  168. } else {
  169. c = c - firstWeek + 1;
  170. if (c % 7 === 0) {
  171. if (dateStart.getDay() !== 6) {
  172. weekIndex = c / 7;
  173. } else {
  174. weekIndex = c / 7 + 1;
  175. }
  176. } else {
  177. weekIndex = Math.ceil(c / 7);
  178. }
  179. }
  180. }
  181. return weekIndex;
  182. };
  183. /**
  184. * 验证车牌号是否正确
  185. * @param number carNumber
  186. **/
  187. function isLicensePlate(carNumber) {
  188. if (carNumber == '') {
  189. return false;
  190. }
  191. if (/^[A-Za-z]+$/.test(carNumber.slice(1))) {
  192. //全为字母
  193. return false;
  194. }
  195. return /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(carNumber);
  196. }
  197. /**
  198. * 验证手机号
  199. */
  200. function checkPhone(phone) {
  201. let that = this;
  202. if (phone == '') {
  203. return false;
  204. }
  205. if (!/^1[3456789]\d{9}$/.test(phone)) {
  206. return false;
  207. }
  208. return true;
  209. }
  210. /**
  211. * 隐藏字符串
  212. * @param string str 字符串
  213. * @param int frontLen 前面需要保留几位
  214. * @param int endLen 后面需要保留几位
  215. */
  216. function hiddenString(str, frontLen, endLen) {
  217. var len = str.length - frontLen - endLen;
  218. var xing = '';
  219. for (var i = 0; i < len; i++) {
  220. xing += '*';
  221. }
  222. return str.substring(0, frontLen) + xing + str.substring(str.length - endLen);
  223. }
  224. /**
  225. * 从一个数组中随机取出若干个元素组成数组
  226. * @param {Array} arr 原数组
  227. * @param {Number} count 需要随机取得个数
  228. **/
  229. const getRandomArray = (arr, count) => {
  230. var shuffled = arr.slice(0),
  231. i = arr.length,
  232. min = i - count,
  233. temp,
  234. index;
  235. while (i-- > min) {
  236. index = Math.floor((i + 1) * Math.random());
  237. temp = shuffled[index];
  238. shuffled[index] = shuffled[i];
  239. shuffled[i] = temp;
  240. }
  241. return shuffled.slice(min);
  242. };
  243. /**
  244. * 从一个数组中随机取出一个元素
  245. * @param {Array} arr 原数组
  246. **/
  247. const getRandomArrayElement = arr => {
  248. return arr[Math.floor(Math.random() * arr.length)];
  249. };
  250. /**
  251. * 去除数组中重复的值
  252. * @param {Array} arr 原数组
  253. **/
  254. const getUnique = array => {
  255. var n = {},
  256. r = [],
  257. len = array.length,
  258. val,
  259. type;
  260. for (var i = 0; i < array.length; i++) {
  261. val = array[i];
  262. type = typeof val;
  263. if (!n[val]) {
  264. n[val] = [type];
  265. r.push(val);
  266. } else if (n[val].indexOf(type) < 0) {
  267. n[val].push(type);
  268. r.push(val);
  269. }
  270. }
  271. return r;
  272. };
  273. /**
  274. * 读取xml字符串
  275. * @param {String} xmlString 数据
  276. **/
  277. function loadXMLStr(xmlString) {
  278. var danmulist = [];
  279. if (xmlString.indexOf("<d p")) {
  280. var str = xmlString.substring(xmlString.indexOf("<d p"), xmlString.length);
  281. var reg = /<d p/g;
  282. var arr = str.match(reg);
  283. if (arr) {
  284. console.log(str);
  285. console.log(arr.length);
  286. for (var i = 0; i < arr.length; ++i) {
  287. var getstr = str.substring(0, str.indexOf("</d>") + "</d>".length);
  288. str = str.substring(str.indexOf("</d>") + "</d>".length, str.length);
  289. var danmu = {
  290. text: getstr.substring(getstr.indexOf(">") + ">".length, getstr.indexOf("</d>")),
  291. color: '#ff00ff',
  292. time: Math.floor(getstr.substring(getstr.indexOf("<d p=\"") + "<d p=\"".length, getstr.indexOf(",")))
  293. };
  294. danmulist.push(danmu);
  295. }
  296. }
  297. }
  298. return danmulist;
  299. } // 显示警告提示(7个汉字长度)
  300. var showWarn = text => uni.showToast({
  301. title: text,
  302. image: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/warn.png'
  303. }); // 显示错误提示(7个汉字长度)
  304. var showError = text => uni.showToast({
  305. title: text,
  306. image: 'https://qufang.oss-cn-beijing.aliyuncs.com/upload/icon/xcx/jjycrm/error.png'
  307. }); // 显示繁忙提示(7个汉字长度)
  308. var showBusy = text => uni.showToast({
  309. title: text,
  310. icon: 'loading',
  311. duration: 1500
  312. }); // 显示成功提示(7个汉字长度)
  313. var showSuccess = text => uni.showToast({
  314. title: text,
  315. icon: 'success'
  316. }); // 显示无图标提示(两行)
  317. var showNone = text => uni.showToast({
  318. title: text,
  319. icon: 'none',
  320. duration: 1500
  321. }); // 显示失败提示框
  322. var showModel = (title, content) => {
  323. uni.hideToast();
  324. uni.showModal({
  325. title,
  326. content: JSON.stringify(content),
  327. showCancel: false
  328. });
  329. }; //获取列表
  330. function getList(url, userinfo, page, pageSize, callback) {
  331. this.showBusy('加载中...');
  332. var token = uni.getStorageSync('weapp_session_login_data');
  333. uni.request({
  334. url: url,
  335. data: {
  336. skey: userinfo.skey,
  337. tel: userinfo.userinfo.mobile_phone,
  338. page: page,
  339. pageSize: pageSize
  340. },
  341. method: 'POST',
  342. header: {
  343. 'content-type': 'application/x-www-form-urlencoded',
  344. 'Authorization': "Bearer "+token.token
  345. },
  346. success: function (result) {
  347. if (result.data.code == '200') {
  348. uni.hideToast();
  349. var result = result.data;
  350. callback(result);
  351. }
  352. },
  353. fail(error) {
  354. this.showModel('请求失败', error);
  355. return false;
  356. }
  357. });
  358. } //请求数据
  359. function getRequest(url, params, callback) {
  360. this.showBusy('加载中...');
  361. var token = uni.getStorageSync('weapp_session_login_data');
  362. uni.request({
  363. url: url,
  364. data: params,
  365. method: 'POST',
  366. header: {
  367. 'content-type': 'application/json',
  368. 'Authorization': "Bearer "+token.token
  369. },
  370. success: function (result) {
  371. if (result.data.code == '10003' || result.data.code == '20006') {
  372. //未登录
  373. uni.hideToast();
  374. uni.showModal({
  375. title: '提示',
  376. content: '您的登录已失效,请重新登录',
  377. showCancel: false,
  378. success(res) {
  379. if (res.confirm) {
  380. try {
  381. uni.clearStorageSync();
  382. uni.reLaunch({
  383. url: '/pages/main/login/index' //绝对路径
  384. });
  385. } catch (e) {
  386. return false;
  387. }
  388. }
  389. }
  390. });
  391. return false;
  392. }
  393. if (result.data.code == '10000') {
  394. uni.hideToast();
  395. var result = result.data;
  396. callback(result.data);
  397. } else {
  398. uni.hideToast();
  399. uni.showModal({
  400. title: '提示',
  401. content: '加载失败,请重新刷新',
  402. showCancel: false
  403. });
  404. return false;
  405. }
  406. },
  407. fail(error) {
  408. uni.hideToast();
  409. uni.showModal({
  410. title: '提示',
  411. content: '网络异常,请重新刷新',
  412. showCancel: false
  413. });
  414. return false;
  415. }
  416. });
  417. } //请求数据(异步)
  418. function getRequestPromise(url, params, isNone,option) {
  419. var isNone = isNone ? true : false;
  420. if (!isNone) {
  421. this.showBusy('加载中...');
  422. }
  423. var token = uni.getStorageSync('weapp_session_login_data');
  424. return new Promise(function (resolve, reject) {
  425. uni.request({
  426. url: url,
  427. data: params,
  428. method: option?option:'POST',
  429. header: {
  430. 'content-type': 'application/json',
  431. 'Authorization': 'Bearer '+token.token
  432. },
  433. success: function (result) {
  434. if (result.data.code != 1) {
  435. uni.hideToast();
  436. var results = result.data;
  437. resolve(results.data);
  438. } else if (result.data.code == 1 || result.data.code == '20006') {
  439. //未登录
  440. uni.hideToast();
  441. uni.showModal({
  442. title: '提示',
  443. content: '您的登录已失效,请重新登录',
  444. showCancel: false,
  445. success(res) {
  446. if (res.confirm) {
  447. try {
  448. uni.clearStorageSync();
  449. uni.reLaunch({
  450. url: '/pages/main/login/index' //绝对路径
  451. });
  452. } catch (e) {
  453. return false;
  454. }
  455. }
  456. }
  457. });
  458. return false;
  459. } else if (result.data.code == '60001') {
  460. //已录入客户
  461. uni.hideToast();
  462. uni.showToast({
  463. title: '您已经录入了该客户!',
  464. icon: 'none',
  465. duration: 1500
  466. });
  467. return false;
  468. } else if (result.data.code == '20005') {
  469. //已录入客户
  470. uni.hideToast();
  471. uni.showModal({
  472. title: '提示',
  473. content: '原始密码错误',
  474. showCancel: false
  475. });
  476. return false;
  477. } else {
  478. uni.hideToast();
  479. uni.showModal({
  480. title: '提示',
  481. content: result.data.message ? result.data.message : '请求数据失败,请重新尝试',
  482. showCancel: false
  483. });
  484. return false;
  485. }
  486. },
  487. fail(error) {
  488. console.log(error);
  489. uni.hideToast();
  490. uni.showModal({
  491. title: '提示',
  492. content: '网络异常,请重新尝试',
  493. showCancel: false
  494. });
  495. return false;
  496. }
  497. });
  498. });
  499. } //请求数据自定义
  500. function getRequestCustom(url, params, isShow) {
  501. if (isShow != 1) {
  502. this.showBusy('加载中...');
  503. }
  504. var token = uni.getStorageSync('weapp_session_login_data');
  505. return new Promise(function (resolve, reject) {
  506. uni.request({
  507. url: url,
  508. data: params,
  509. method: 'POST',
  510. header: {
  511. 'content-type': 'application/x-www-form-urlencoded',
  512. 'Authorization': "Bearer "+token.token
  513. },
  514. success: function (result) {
  515. if (result.data.data == undefined) {
  516. resolve(result.data);
  517. } else {
  518. if (result.data.success) {
  519. resolve(result.data.data);
  520. } else {
  521. uni.hideToast();
  522. uni.showModal({
  523. title: '提示',
  524. content: result.data.message ? result.data.message : '请求数据失败,请重新尝试',
  525. showCancel: false
  526. });
  527. return false;
  528. }
  529. }
  530. },
  531. fail(error) {
  532. uni.showModal({
  533. title: '提示',
  534. content: '网络异常,请重新尝试',
  535. showCancel: false
  536. });
  537. return false;
  538. }
  539. });
  540. });
  541. } //请求数据(异步)-自定义
  542. function getRequestPromiseCustom(url, params,option) {
  543. this.showBusy('请求中...');
  544. var token = uni.getStorageSync('weapp_session_login_data');
  545. return new Promise(function (resolve, reject) {
  546. uni.request({
  547. url: url,
  548. data: params,
  549. method: option?option:'POST',
  550. header: {
  551. 'content-type': 'application/json',
  552. 'Authorization': "Bearer "+token.token
  553. },
  554. success: function (result) {
  555. uni.hideToast();
  556. var results = result.data;
  557. resolve(results);
  558. },
  559. fail(error) {
  560. uni.hideToast();
  561. uni.showModal({
  562. title: '提示',
  563. content: '网络异常,请重新尝试',
  564. showCancel: false
  565. });
  566. return false;
  567. }
  568. });
  569. });
  570. }
  571. module.exports = {
  572. formatSecond,
  573. formatTime,
  574. formatDate,
  575. encryption,
  576. formatDateTime,
  577. getRandomArray: getRandomArray,
  578. getRandomArrayElement: getRandomArrayElement,
  579. showWarn,
  580. showError,
  581. showBusy,
  582. showSuccess,
  583. showNone,
  584. showModel,
  585. getList: getList,
  586. getRequest: getRequest,
  587. getRequestPromise: getRequestPromise,
  588. getRequestCustom: getRequestCustom,
  589. getRequestPromiseCustom: getRequestPromiseCustom,
  590. getNowFormatDate: getNowFormatDate,
  591. isLicensePlate: isLicensePlate,
  592. checkPhone: checkPhone,
  593. hiddenString: hiddenString,
  594. getUnique: getUnique,
  595. loadXMLStr: loadXMLStr,
  596. formatLongTime: formatLongTime
  597. };