微信小程序
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

583 行
16 KiB

  1. import * as API from './API';
  2. let APP = getApp();
  3. let FUNCTION_TEXT = 'function';
  4. /*判断是否iphonex*/
  5. function isIPhoneX() {
  6. let screenHeight = wx.getSystemInfoSync().screenHeight
  7. let bottom = wx.getSystemInfoSync().safeArea.bottom
  8. return screenHeight !== bottom
  9. }
  10. /*获取当前页url*/
  11. function getCurrentPageUrl() {
  12. var pages = getCurrentPages()
  13. var currentPage = pages[pages.length - 1]
  14. var url = currentPage.route
  15. return url
  16. }
  17. /*获取当前页带参数的url*/
  18. function getCurrentPageUrlWithArgs() {
  19. var pages = getCurrentPages()
  20. var currentPage = pages[pages.length - 1]
  21. var url = currentPage.route
  22. var options = currentPage.options
  23. var urlWithArgs = url + '?'
  24. for (var key in options) {
  25. var value = options[key]
  26. urlWithArgs += key + '=' + value + '&'
  27. }
  28. urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
  29. return urlWithArgs
  30. }
  31. /**
  32. * 无图标,纯文本Toast提示
  33. */
  34. function showToastNoneIcon(title) {
  35. if (title == undefined || title == '') {
  36. title = '';
  37. }
  38. return wx.showToast({
  39. title: title,
  40. icon: 'none',
  41. duration:3000
  42. });
  43. }
  44. /**
  45. * 显示Modal弹框(无取消按钮,只显示)
  46. * @param {标题} title
  47. * @param {内容} content
  48. * @param {按钮文字,默认确定} confirmText
  49. */
  50. function showModalNoneCancel(title, content, confirmText) {
  51. wx.showModal({
  52. title: title,
  53. showCancel: false,
  54. content: content,
  55. confirmText: (typeof confirmText == 'undefined' || confirmText == '') ? '确定' : confirmText,
  56. success: function (e) {
  57. }
  58. })
  59. }
  60. /**
  61. * 显示完整的Modal弹框提示
  62. * @param {标题} title
  63. * @param {内容} content
  64. * @param {确认} confirmText
  65. * @param {取消} cancelText
  66. * @param {回调} param4
  67. */
  68. function showModalOnClick(title, content, confirmText, cancelText, { confirm, cancel }) {
  69. wx.showModal({
  70. title: title,
  71. content: content,
  72. confirmText: (typeof confirmText == 'undefined' || confirmText == '') ? '确定' : confirmText,
  73. cancelText: (typeof cancelText == 'undefined' || cancelText == '') ? '取消' : cancelText,
  74. success: function (e) {
  75. if (e.confirm) {
  76. confirm();
  77. } else if (e.cancel) {
  78. cancel();
  79. }
  80. }
  81. })
  82. }
  83. /**
  84. * 有背景图层的loading
  85. * * @param {内容} content
  86. */
  87. function showLoadingHaveMask(content) {
  88. wx.showLoading({
  89. title: (typeof content == "undefined" || content == '') ? '加载中...' : content,
  90. mask: true
  91. })
  92. }
  93. /**
  94. * 隐藏loading
  95. */
  96. function hideLoadingHaveMask() {
  97. wx.hideLoading();
  98. }
  99. /**
  100. * 全局通用网络请求方法,默认post传输
  101. */
  102. function httpRequest(url, data, {
  103. success,
  104. fail,
  105. complete
  106. }) {
  107. wx.showNavigationBarLoading();
  108. let finalData = {};
  109. Object.assign(finalData, data);
  110. finalData.token = getApp().globalData.userInfo.token;
  111. wx.request({
  112. url:wx.getStorageSync('dressCode')+url,
  113. data: finalData,
  114. method:data.method,
  115. timeout: 60000,
  116. header: {
  117. 'Authorization':'Bearer '+getApp().globalData.userInfo.token
  118. },
  119. success: function (response) {
  120. if (response.data && response.data._code == API.INVALID_USER_TOKEN_CODE) {
  121. //微信登陆失效
  122. showToastNoneIcon(API.MSG_INVALID_USER_TOKEN);
  123. wx.navigateTo({
  124. url: API.USER_LOGIN_PAGE_PATH,
  125. })
  126. } else if (typeof success === FUNCTION_TEXT) {
  127. success(response.data);
  128. }
  129. },
  130. fail: function (response) {
  131. if (typeof fail === FUNCTION_TEXT) {
  132. fail(handleFail(response));
  133. } else {
  134. showToastNoneIcon(API.MSG_FAIL_HTTP);
  135. }
  136. },
  137. complete: function (response) {
  138. if (typeof complete === FUNCTION_TEXT) {
  139. if (response.data && response.data._code == API.SUCCESS_CODE) {
  140. complete(response.data);
  141. } else {
  142. complete(handleFail(response.data));
  143. }
  144. }
  145. wx.hideNavigationBarLoading();
  146. }
  147. })
  148. }
  149. /**
  150. * 网络访问(无其他处理)
  151. * @param {地址} url
  152. * @param {参数} data
  153. * @param {方法 get or post} method
  154. * @param {回调} param3
  155. */
  156. function httpRequestNoneDetal(url, data, method, {
  157. success,
  158. fail,
  159. complete
  160. }) {
  161. wx.showNavigationBarLoading();
  162. wx.request({
  163. url:wx.getStorageSync('dressCode')+url,
  164. data: data,
  165. method: method,
  166. success: function (response) {
  167. if (typeof success === FUNCTION_TEXT) {
  168. success(response.data);
  169. }
  170. },
  171. fail: function (response) {
  172. if (typeof fail === FUNCTION_TEXT) {
  173. fail(handleFail(response));
  174. } else {
  175. showToastNoneIcon(API.MSG_FAIL_HTTP);
  176. }
  177. },
  178. complete: function (response) {
  179. if (typeof complete === FUNCTION_TEXT) {
  180. if (response.data && response.data._code == API.SUCCESS_CODE) {
  181. complete(response.data);
  182. } else {
  183. complete(handleFail(response.data));
  184. }
  185. }
  186. wx.hideNavigationBarLoading();
  187. }
  188. })
  189. }
  190. /**
  191. * 调用失败
  192. */
  193. function handleFail(data = '') {
  194. let { _msg = API.MSG_FAIL_HTTP, _code = 10001, _data = '', } = data;
  195. return {
  196. _code,
  197. _data,
  198. _msg
  199. }
  200. }
  201. /**
  202. * 微信授权 获取信息
  203. */
  204. // function initSQFromWX() {
  205. // let that = this;
  206. // wx.getSetting({
  207. // success(res) {
  208. // // if (res.authSetting['scope.userInfo']) {
  209. // // console.log('个人信息:authSetting 已授权');
  210. // // } else {
  211. // // console.log('个人信息:authSetting 未授权');
  212. // // }
  213. // if (res.authSetting['scope.userLocation']) {
  214. // //定位已开启,暂不做功能处理
  215. // console.log('定位:authSetting 已授权');
  216. // getApp().globalData.setInfo.locationOpenIdWX = true;
  217. // } else {
  218. // //定位未开启,申请授权
  219. // wx.authorize({
  220. // scope: 'scope.userLocation',
  221. // success() {
  222. // //定位已开启,暂不做功能处理
  223. // console.log('定位:wx.authorize success');
  224. // getApp().globalData.setInfo.locationOpenIdWX = true;
  225. // }
  226. // ,
  227. // fail() {
  228. // //如果之前已经拒绝过,直接返回fail 不弹窗
  229. // console.log('定位:wx.authorize fail');
  230. // getApp().globalData.setInfo.locationOpenIdWX = false;
  231. // wx.navigateTo({
  232. // url: '/pages/wxAuth/wxAuth',
  233. // })
  234. // }
  235. // })
  236. // }
  237. // },
  238. // fail(e) {
  239. // },
  240. // complete() {
  241. // }
  242. // });
  243. // }
  244. /**
  245. * 获取微信Code
  246. */
  247. function getCOdeFromWX({ complate }) {
  248. showLoadingHaveMask('正在加载数据..');
  249. wx.login({
  250. success: function (data) {
  251. complate(data.code);
  252. hideLoadingHaveMask()
  253. },
  254. fail: function (err) {
  255. hideLoadingHaveMask();
  256. showModalNoneCancel("温馨提示", "登陆失败,建议请重新打开小程序")
  257. }
  258. })
  259. }
  260. /**
  261. * ,获取到的微信用户信息(昵称、头像、省市 赋值给globalData.wxUserInfo)
  262. */
  263. function getUserInfoFomWX() {
  264. wx.getUserProfile({
  265. desc: '用于完善会员资料',
  266. success: res => {
  267. getApp().globalData.wxUserInfo.nickName = res.userInfo.nickName;
  268. getApp().globalData.wxUserInfo.avatarUrl = res.userInfo.avatarUrl;
  269. //不再返回 强制返回“”
  270. // getApp().globalData.wxUserInfo.province = res.userInfo.province;
  271. // getApp().globalData.wxUserInfo.city = res.userInfo.city;
  272. console.log("获取到个人信息:" + res.userInfo.nickName);
  273. success(res);
  274. },
  275. complete: res => {
  276. }
  277. })
  278. }
  279. /**
  280. * 获取地理位置
  281. * @param {回调} param0
  282. */
  283. function getLocationFromWX() {
  284. // wx.getLocation({
  285. // type: 'wgs84',
  286. // success(res) {
  287. // console.log(res);
  288. // getApp().globalData.setInfo.latitude = res.latitude;
  289. // getApp().globalData.setInfo.longitude = res.longitude;
  290. // }
  291. // , fail(res) {
  292. // showToastNoneIcon('获取地理信息失败');
  293. // }
  294. // })
  295. }
  296. function convert_length(length) {
  297. return Math.round(wx.getSystemInfoSync().windowWidth * length / 750);
  298. }
  299. /**
  300. * 比较版本号(参数'1.11.0', '1.9.9',返回1)
  301. * @param {*} v1
  302. * @param {*} v2
  303. */
  304. function compareVersion(v1, v2) {
  305. v1 = v1.split('.')
  306. v2 = v2.split('.')
  307. const len = Math.max(v1.length, v2.length)
  308. while (v1.length < len) {
  309. v1.push('0')
  310. }
  311. while (v2.length < len) {
  312. v2.push('0')
  313. }
  314. for (let i = 0; i < len; i++) {
  315. const num1 = parseInt(v1[i])
  316. const num2 = parseInt(v2[i])
  317. if (num1 > num2) {
  318. return 1
  319. } else if (num1 < num2) {
  320. return -1
  321. }
  322. }
  323. return 0
  324. }
  325. /**
  326. * 获取当前年-月-日 时:分:秒
  327. */
  328. function js_date_time(unixtime) {
  329. var date = new Date(unixtime);
  330. var y = date.getFullYear();
  331. var m = date.getMonth() + 1;
  332. m = m < 10 ? ('0' + m) : m;
  333. var d = date.getDate();
  334. d = d < 10 ? ('0' + d) : d;
  335. var h = date.getHours();
  336. h = h < 10 ? ('0' + h) : h;
  337. var minute = date.getMinutes();
  338. var second = date.getSeconds();
  339. minute = minute < 10 ? ('0' + minute) : minute;
  340. second = second < 10 ? ('0' + second) : second;
  341. // return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;//年月日时分秒
  342. return y + '-' + m + '-' + d + ' ' + h + ':' + minute;
  343. }
  344. /**
  345. * 获取当前年-月-日
  346. */
  347. function formatDate(unixtime) {
  348. var date = new Date(unixtime);
  349. var y = date.getFullYear();
  350. var m = date.getMonth() + 1;
  351. m = m < 10 ? ('0' + m) : m;
  352. var d = date.getDate();
  353. d = d < 10 ? ('0' + d) : d;
  354. var h = date.getHours();
  355. h = h < 10 ? ('0' + h) : h;
  356. var minute = date.getMinutes();
  357. var second = date.getSeconds();
  358. minute = minute < 10 ? ('0' + minute) : minute;
  359. second = second < 10 ? ('0' + second) : second;
  360. // return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;//年月日时分秒
  361. return y + '-' + m + '-' + d;
  362. }
  363. /**
  364. * 获取当前年-月-日
  365. */
  366. function formatDates(unixtime) {
  367. var date = new Date(unixtime);
  368. var y = date.getFullYear();
  369. var m = date.getMonth() + 1;
  370. m = m < 10 ? ('0' + m) : m;
  371. var d = date.getDate();
  372. d = d < 10 ? ('0' + d) : d;
  373. var h = date.getHours();
  374. h = h < 10 ? ('0' + h) : h;
  375. var minute = date.getMinutes();
  376. var second = date.getSeconds();
  377. minute = minute < 10 ? ('0' + minute) : minute;
  378. second = second < 10 ? ('0' + second) : second;
  379. // return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;//年月日时分秒
  380. return y + '-' + m;
  381. }
  382. /**
  383. * 将数字(整数)转为汉字
  384. * @param num
  385. * @description 从零到一亿亿,需要小数的可自行截取小数点后面的数字直接替换对应arr1的读法就行了
  386. */
  387. function convertToChinaNum (num) {
  388. var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
  389. var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千','万', '十', '百', '千','亿');//可继续追加更高位转换值
  390. if(!num || isNaN(num)){
  391. return "零";
  392. }
  393. var english = num.toString().split("")
  394. var result = "";
  395. for (var i = 0; i < english.length; i++) {
  396. var des_i = english.length - 1 - i;//倒序排列设值
  397. result = arr2[i] + result;
  398. var arr1_index = english[des_i];
  399. result = arr1[arr1_index] + result;
  400. }
  401. //将【零千、零百】换成【零】 【十零】换成【十】
  402. result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  403. //合并中间多个零为一个零
  404. result = result.replace(/零+/g, '零');
  405. //将【零亿】换成【亿】【零万】换成【万】
  406. result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  407. //将【亿万】换成【亿】
  408. result = result.replace(/亿万/g, '亿');
  409. //移除末尾的零
  410. result = result.replace(/零+$/, '')
  411. //将【零一十】换成【零十】
  412. //result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
  413. //将【一十】换成【十】
  414. result = result.replace(/^一十/g, '十');
  415. return result;
  416. }
  417. function getTransform(dictValue,options){
  418. var dictLabel2 = "";
  419. options.map(item=>{
  420. if(item.dictValue == dictValue){
  421. dictLabel2 = item.dictLabel
  422. }
  423. })
  424. return dictLabel2;
  425. }
  426. function ToChinese(n){
  427.       if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)){
  428.         return "数据非法";  //判断数据是否大于0
  429.       }
  430.       let unit = "千百拾亿千百拾万千百拾元角分", str = "";
  431.       n += "00";
  432.       let indexpoint = n.indexOf('.');  // 如果是小数,截取小数点前面的位数
  433.       if (indexpoint >= 0){
  434.         n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2);   // 若为小数,截取需要使用的unit单位
  435.       }
  436.       unit = unit.substr(unit.length - n.length);  // 若为整数,截取需要使用的unit单位
  437.       for (let i=0; i < n.length; i++){
  438.         str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i);  //遍历转化为大写的数字
  439.       }
  440.       return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整"); // 替换掉数字里面的零字符,得到结果
  441. }
  442. /* 加载动画相关 */
  443. const showLoading = (tips = '加载中...') => {
  444. wx.showNavigationBarLoading()
  445. wx.showLoading({
  446. title: tips,
  447. })
  448. }
  449. const hideLoadings = () => {
  450. wx.hideLoading()
  451. wx.hideNavigationBarLoading()
  452. }
  453. const hideLoadingWithErrorTips = (err = '加载失败...') => {
  454. hideLoading()
  455. wx.showToast({
  456. title: err,
  457. icon: 'error',
  458. duration: 2000
  459. })
  460. }
  461. /**
  462. * @author Rui.Zhang
  463. * @description 判断是否为银行卡号
  464. * @param {String} str_cardNo 待校验的数据
  465. * @returns {Boolean}, true:是银行卡号
  466. **/
  467. function isBankCard (str_cardNo) {
  468. str_cardNo = str_cardNo || String(this);
  469. if ("" == str_cardNo.trim() || undefined == str_cardNo) {
  470. return false;
  471. }
  472. var lastNum = str_cardNo.substr(str_cardNo.length - 1, 1);//取出最后一位(与luhm进行比较)
  473. var first15Num = str_cardNo.substr(0, str_cardNo.length - 1);//前15或18位
  474. var newArr=new Array();
  475. for(var i=first15Num.length-1;i>-1;i--){ //前15或18位倒序存进数组
  476. newArr.push(first15Num.substr(i,1));
  477. }
  478. var arrJiShu=new Array(); //奇数位*2的积 <9
  479. var arrJiShu2=new Array(); //奇数位*2的积 >9
  480. var arrOuShu=new Array(); //偶数位数组
  481. for(var j=0;j<newArr.length;j++){
  482. if((j+1)%2==1){//奇数位
  483. if(parseInt(newArr[j])*2<9)
  484. arrJiShu.push(parseInt(newArr[j])*2);
  485. else
  486. arrJiShu2.push(parseInt(newArr[j])*2);
  487. }
  488. else //偶数位
  489. arrOuShu.push(newArr[j]);
  490. }
  491. var jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
  492. var jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
  493. for(var h=0;h<arrJiShu2.length;h++){
  494. jishu_child1.push(parseInt(arrJiShu2[h])%10);
  495. jishu_child2.push(parseInt(arrJiShu2[h])/10);
  496. }
  497. var sumJiShu=0; //奇数位*2 < 9 的数组之和
  498. var sumOuShu=0; //偶数位数组之和
  499. var sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
  500. var sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
  501. var sumTotal=0;
  502. for(var m=0;m<arrJiShu.length;m++){
  503. sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
  504. }
  505. for(var n=0;n<arrOuShu.length;n++){
  506. sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
  507. }
  508. for(var p=0;p<jishu_child1.length;p++){
  509. sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
  510. sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
  511. }
  512. //计算总和
  513. sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2);
  514. //计算Luhm值
  515. var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;
  516. var luhm= 10-k;
  517. if(lastNum==luhm){
  518. return true;
  519. }
  520. else{
  521. return false;
  522. }
  523. }
  524. export {
  525. getCurrentPageUrl,
  526. getCurrentPageUrlWithArgs,
  527. showToastNoneIcon,
  528. showModalNoneCancel,
  529. showModalOnClick,
  530. showLoadingHaveMask,
  531. hideLoadingHaveMask,
  532. httpRequest,
  533. httpRequestNoneDetal,
  534. getCOdeFromWX,
  535. getLocationFromWX,
  536. getUserInfoFomWX,
  537. convert_length,
  538. isIPhoneX,
  539. js_date_time,
  540. formatDate,
  541. formatDates,
  542. convertToChinaNum,
  543. getTransform,
  544. ToChinese,
  545. showLoading,
  546. hideLoadings,
  547. hideLoadingWithErrorTips,
  548. isBankCard
  549. }