微信小程序
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

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