zhengkaixin 2 سال پیش
کامیت
2e0b079083
100فایلهای تغییر یافته به همراه2989 افزوده شده و 0 حذف شده
  1. 2 0
      .gitignore
  2. 80 0
      App.vue
  3. 197 0
      apis/common.js
  4. 172 0
      apis/index.js
  5. 59 0
      apis/login.js
  6. 106 0
      apis/pagejs/user.js
  7. 20 0
      apis/utils/AMap.js
  8. 31 0
      apis/utils/alipay.js
  9. 396 0
      apis/utils/index.js
  10. 104 0
      apis/utils/init.js
  11. 45 0
      apis/utils/initALI.js
  12. 130 0
      apis/utils/mixin.js
  13. 91 0
      apis/utils/request.js
  14. 69 0
      apis/utils/requestSon.js
  15. 76 0
      apis/utils/requestWhite.js
  16. 236 0
      apis/utils/wxJsApi.js
  17. 52 0
      apis/utils/wxpay.js
  18. 77 0
      apis/weixin.js
  19. 0 0
      assets/css/style.css
  20. 57 0
      assets/font/font.css
  21. 250 0
      assets/font/iconfont.css
  22. 7 0
      assets/font/jptime.css
  23. BIN
      assets/font/jptime.otf
  24. 22 0
      assets/icon/icon.vue
  25. BIN
      assets/img/Bronze Medal Copy@1x.png
  26. BIN
      assets/img/Gold Medal@1x.png
  27. BIN
      assets/img/Group Copy@1x.png
  28. BIN
      assets/img/Group@1x.png
  29. BIN
      assets/img/Silver Medal Copy@1x.png
  30. BIN
      assets/img/articlePic.png
  31. BIN
      assets/img/banner.png
  32. BIN
      assets/img/bgbg.png
  33. BIN
      assets/img/bgc.png
  34. BIN
      assets/img/computer.png
  35. BIN
      assets/img/default_img.png
  36. BIN
      assets/img/department.png
  37. BIN
      assets/img/department2.png
  38. BIN
      assets/img/dingmanrong.png
  39. BIN
      assets/img/djdt.png
  40. BIN
      assets/img/dmr.png
  41. BIN
      assets/img/fxkj.png
  42. BIN
      assets/img/fzxc.png
  43. BIN
      assets/img/hdjl.png
  44. BIN
      assets/img/hdzx.png
  45. BIN
      assets/img/honorPic1.png
  46. BIN
      assets/img/honorPic2.png
  47. BIN
      assets/img/jfyh.png
  48. BIN
      assets/img/jgsz.png
  49. BIN
      assets/img/jiguang.png
  50. BIN
      assets/img/jjjc.png
  51. BIN
      assets/img/lishuyi.png
  52. BIN
      assets/img/logo.png
  53. BIN
      assets/img/md-notifications@1x.png
  54. BIN
      assets/img/news.png
  55. BIN
      assets/img/newsPic.png
  56. BIN
      assets/img/orderPic.png
  57. BIN
      assets/img/overdue.png
  58. BIN
      assets/img/overend.png
  59. BIN
      assets/img/phb.png
  60. BIN
      assets/img/photo.png
  61. BIN
      assets/img/plane.png
  62. BIN
      assets/img/position.png
  63. BIN
      assets/img/position2.png
  64. BIN
      assets/img/prize2.png
  65. BIN
      assets/img/prize3.png
  66. BIN
      assets/img/prize4.png
  67. BIN
      assets/img/rankPhoto.png
  68. BIN
      assets/img/result.png
  69. BIN
      assets/img/riFill-bar-chart-2-fill@1x.png
  70. BIN
      assets/img/riFill-camera-fill@2x.png
  71. BIN
      assets/img/riFill-copper-diamond-fill@2x.png
  72. BIN
      assets/img/riFill-store-3-fill@1x.png
  73. BIN
      assets/img/riFill-vip-crown-2-fill@2x.png
  74. BIN
      assets/img/riFill-vip-diamond-fill Copy@1x.png
  75. BIN
      assets/img/riLine-account-box-line@2x.png
  76. BIN
      assets/img/riLine-coin-line@2x.png
  77. BIN
      assets/img/riLine-customer-service-2-line@2x.png
  78. BIN
      assets/img/riLine-file-edit-line@2x.png
  79. BIN
      assets/img/riLine-gift-2-line@1x.png
  80. BIN
      assets/img/riLine-gift-2-line@2x.png
  81. BIN
      assets/img/riLine-logout-box-r-line@2x.png
  82. BIN
      assets/img/riLine-smartphone-line@2x.png
  83. BIN
      assets/img/shareP.png
  84. BIN
      assets/img/sharePic1.png
  85. BIN
      assets/img/sharePic2.png
  86. BIN
      assets/img/sharePic3.png
  87. BIN
      assets/img/slideshow@2x.png
  88. BIN
      assets/img/tdry.png
  89. BIN
      assets/img/tlgk.png
  90. BIN
      assets/img/wmcj.png
  91. BIN
      assets/img/wnfw.png
  92. BIN
      assets/img/zwdt.png
  93. BIN
      assets/img/暂无数据-缺省页.png
  94. 34 0
      assets/js/font.js
  95. 160 0
      components/ShareServer.vue
  96. 95 0
      components/Tabbar.vue
  97. 227 0
      components/limeClipper/README.md
  98. 19 0
      components/limeClipper/images/photo.svg
  99. 15 0
      components/limeClipper/images/rotate.svg
  100. 160 0
      components/limeClipper/index.css

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+yarn.lock
+/node_modules/

+ 80 - 0
App.vue

@@ -0,0 +1,80 @@
+<style lang="scss">
+	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
+	@import "@/uni_modules/uview-ui/index.scss";
+	// @import '@/assets/font/font.css';
+	
+</style>
+<script>
+	
+	import './config/.env.js'
+	import './assets/js/font.js'
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+				
+		},
+		 
+		onShow: function() {
+			
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+	html, body {
+	  background-color: #F2F4F4;  
+	  margin: 0;
+	  padding: 0;
+	} 
+/deep/.u-divider{
+	color: rgba(182, 189, 195, 1);
+	font-size: 12px;
+	font-weight: bold;
+	font-family: 'Regular';
+}
+	.uni-icon-success-no-circle:before {
+	    content: "" !important ;
+		display: none;
+	}
+	.uni-toast .uni-toast__content{
+		margin: -10px 1px 10px 1px;
+	}
+	.uni-modal .uni-modal__btn{
+		flex: 1;
+		height: 43px;
+		line-height: 43px !important;;
+		font-size: 13px !important;
+		box-sizing: border-box;
+		cursor: pointer;
+		text-align: center;
+		border-radius: 1px;
+	}
+	/deep/.u-navbar-content-title{
+		font-family: 'Medium';
+		
+	}
+	@media screen and (min-width: 320px) {
+	   /deep/.u-tabbar__content {
+			height: 45px!important;
+	   }
+	}
+	@media screen and (min-width: 375px) {
+	   /deep/.u-tabbar__content {
+			height: 55px!important;
+	   }
+	}
+	@media screen and (min-width: 425px) {
+	   /deep/.u-tabbar__content {
+			height: 65px!important;
+	   }
+	}
+	.u-back-text{
+		color: #101010 !important;
+		font-size: 17px !important
+	}
+</style>

+ 197 - 0
apis/common.js

@@ -0,0 +1,197 @@
+import request from '@/apis/utils/request'
+ 
+import Qs from 'qs';
+
+export function uploadPicture(formData) {
+	return request({
+		url: '/uploadPicture',
+		header:{
+			   'Content-Type': 'application/x-www-form-urlencoded'
+
+		},
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+export function getBannerInfo(formData) {
+	return request({
+		url: '/mobile/bannerInfo/getBannerInfo',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+export function readMessageNum() {
+	return request({
+		url: '/mobile/messageApi/readMessageNum',
+		//data: formData,
+		method: 'post',
+		
+	})
+}
+
+export function getScreenList(formData) {
+	return request({
+		url: '/mobile/recruitmentApi/getScreenList',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+//字典表
+export function getData(id) {
+	return request({
+		url: '/sys/dataDictionary/queryChildrenApi',
+		data: {
+			parentId:id
+		},
+		method: 'post',
+		timeout: 60000,
+	})
+}
+//上传图片
+export function upload(formData) {
+	return request({
+		url: '/mobile/jobUserApi/upload',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+//上传图片
+export function uploadBase64(formData) {
+	var localData = formData.photoFile?formData.photoFile:formData.photoBase64Data;
+	
+	if (localData.indexOf('data:image') != 0) {
+	    //判断是否有这样的头部
+	    localData = 'data:image/jpeg;base64,' + localData
+	}
+	formData.photoBase64Data = localData.replace(/\r|\n/g, '').replace('data:image/jgp', 'data:image/jpeg')
+	
+	
+	return request({
+		url: '/mobile/jobUserApi/uploadBase64',
+		data: formData,
+		method: 'post',
+		timeout: 60000,
+	})
+}
+
+
+export function getSchoolServeList(params) {
+	return request({
+		url: '/mobile/companyInfoApi/schoolServeList',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+
+
+//综合订单
+export function mergeInfo(id) {
+	return request({
+		url: '/mobile/passengerApi/mergeInfo',
+		data: Qs.stringify({
+			outOrderNo: id
+		}),
+		method: 'post',
+	})
+}
+//发送短信
+export function sendMsg(params) {
+	return request({
+		url: '/mobile/personInfoApi/getVerifyCode',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//验证验证码并登录
+export function validateCode(params) {
+	return request({
+		url: '/mobile/personInfoApi/validateCode',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+//验证验证码并登录
+export function submitAuthentication(params) {
+	return request({
+		url: '/mobile/jobUserApi/submitAuthentication',
+		data: Qs.stringify(params),
+		method: 'post',
+	})
+}
+
+
+export function messageClassify(formData) {
+	return request({
+		url: '/mobile/messageApi/messageClassify',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+export function messageList(formData) {
+	return request({
+		url: '/mobile/messageApi/messageList',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+export function messageDetail(id) {
+	return request({
+		url: '/mobile/messageApi/messageDetail',
+		data: Qs.stringify({
+			messageId: id
+		}),
+		method: 'post',
+	})
+}
+
+export function messageClassifyHR(formData) {
+	return request({
+		url: '/mobile/messageApi/messageClassifyHR',
+		data:formData,
+		method: 'post',
+	})
+}
+
+
+export function changeAgree(formData) {
+	return request({
+		url: '/mobile/messageApi/changeAgree',
+		data:formData,
+		method: 'post',
+	})
+}
+
+
+//推荐简历
+export function positionResumeList(formData) {
+	return request({
+		url: '/mobile/resumeApi/positionResumeList',
+		data:formData,
+		method: 'post',
+	})
+}
+
+//推荐职位
+export function positionRecruitmentList(formData) {
+	return request({
+		url: '/mobile/recruitmentApi/positionRecruitmentList',
+		data:formData,
+		method: 'post',
+	})
+}

+ 172 - 0
apis/index.js

@@ -0,0 +1,172 @@
+import request from '@/apis/utils/request.js';
+import requestWhite from '@/apis/utils/requestWhite.js';
+import Qs from 'qs';
+ import  carhelp from '@/apis/utils/mixin.js'
+ 
+export function codeOperation(url) {
+	
+}
+export function scanCode(res) {
+	var url=codeOperation(res);
+	if(url){
+		uni.navigateTo({
+			url:url
+		})
+	}else{
+		uni.showToast({
+			title: '请扫描充电桩上的二维码'
+		})
+	}
+}
+
+export function activityInfoList(data) {
+	return requestWhite({
+		method: 'post',
+		data: data,
+		url: '/mobile/activityInfo/activityInfoList'
+	})
+}
+
+export function test(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/test/post'
+	})
+}
+
+
+export function chargingData(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/charging/chargingData'
+	})
+}
+
+export function marketingData(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/charging/marketingData'
+	})
+}
+export function findChargeData(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/chargingCar/findChargeData'
+	})
+}
+
+
+export function personalCenter(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/regUser/personalCenter'
+	})
+}
+export function logout(data) {
+	return request({
+		method: 'get',
+		data: data,
+		url: '/mobile/regUser/logout'
+	})
+}
+
+
+export function stopCharging(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/command/stopCharging'
+	})
+}
+export function startCharging(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/command/startCharging'
+	})
+}
+export function accountRecordData(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/accountRecord/accountRecordData'
+	})
+}
+export function accountDetail(id) {
+	return request({
+		method: 'get',
+		 
+		url: '/mobile/accountRecord/accountDetail?id='+id
+	})
+}
+
+
+export function chargingRecordData(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/mobile/chargingCar/chargingRecordData'
+	})
+}
+export function chargingDetail(id) {
+	return request({
+		method: 'get',
+		 
+		url: '/mobile/chargingRecord/chargingDetail?id='+id
+	})
+}
+
+export function passengerMessageNoReadNum(data) {
+	
+	return request({
+		url: '/mobile/passengerApi/passengerMessageNoReadNum',
+		data:data,
+		method: 'post',
+	})
+}
+  
+  export function chargingDeviceData(data) {
+  	return request({
+  		method: 'post',
+  		data: data,
+  		url: '/mobile/charging/chargingDeviceData'
+  	})
+  }
+  
+  export function findActivity(data) {
+  	return requestWhite({
+  		method: 'post',
+  		data: data,
+  		url: '/mobile/chargingCouponApi/findActivity'
+  	})
+  } 
+	
+	export function changeFont(data) {
+		return request({
+			method: 'get',
+			data: data,
+			url: '/mobile/regUser/changeFont'
+		})
+	}
+  
+	export function getTips(data) {
+		return requestWhite({
+			method: 'post',
+			data: data,
+			url: '/mobile/dataDictionary/getTips'
+		})
+	}
+	
+	export function readCoupon(data) {
+		return request({
+			method: 'post',
+			data: data,
+			url: '/mobile/chargingCouponApi/readCoupon'
+		})
+	}
+	

+ 59 - 0
apis/login.js

@@ -0,0 +1,59 @@
+ import requestWhite from '@/apis/utils/requestWhite.js';
+import Qs from 'qs';
+
+export function findByOpenId(data) {
+	var url='/mobile/regUser/findByOpenId';
+	return requestWhite({
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+ export function findNoLTextConfigure(data) {
+ 	var url='/mobile/dataDictionary/findNoLTextConfigure';
+ 	return requestWhite({
+ 		method: 'post',
+ 		data: data,
+ 		url: url
+ 	})
+ }
+
+
+export function validateCode(data) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:data ,
+		url: '/mobile/regUser/validateCode'
+	})
+} 
+
+export function getVerifyCode(tel) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:{
+			telephone:tel
+		} ,
+		url: '/mobile/regUser/getVerifyCode'
+	})
+} 
+
+export function passwordLogin(data) {
+	 
+	 var url=""
+	 if(data.form=="job"){
+	 	url='/mobile/jobUserApi/passwordLogin';
+	 }else if(data.form=="hr"){
+	 	url='/mobile/sysUserApi/passwordLogin';
+	 }else{
+	 	return 
+	 }
+	 
+	return requestWhite({
+		method: 'post',
+		data:data ,
+		url: url
+	})
+} 

+ 106 - 0
apis/pagejs/user.js

@@ -0,0 +1,106 @@
+import requestWhite from '@/apis/utils/requestWhite'
+ import request from '@/apis/utils/request'
+ 
+import Qs from 'qs';
+
+export function findByOpenId(data) {
+	var url='/mobile/regUser/findByOpenId';
+	return requestWhite({
+	
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+
+export function pointsNotes(data) {
+	
+	return requestWhite({
+		method: 'post',
+		data: data,
+		url: '/mobile/points/pointsNotes'
+	})
+}
+
+export function validateCode(data) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:data ,
+		url: '/mobile/regUser/validateCode'
+	})
+} 
+
+export function getVerifyCode(tel) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:{
+			telephone:tel
+		} ,
+		url: '/mobile/regUser/getVerifyCode'
+	})
+} 
+export function logout(data) {
+	var url='/mobile/regUser/logout';
+	return request({
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+export function deleteUser(data) {
+	var url='/mobile/regUser/deleteUser';
+	return request({
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+export function changePhone(data) {
+	var url='/mobile/regUser/changePhone';
+	return request({
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+export function changeData(data) {
+	var url='/mobile/regUser/changeData';
+	return request({
+		method: 'get',
+		data: data,
+		url: url
+	})
+}
+
+export function addFeedback(data) {
+	var url='/mobile/feedback/addFeedback';
+	return request({
+		method: 'post',
+		data: data,
+		url: url
+	})
+}
+
+export function myPointsNotes(data) {
+	var url='/mobile/points/myPointsNotes';
+	return request({
+		method: 'post',
+		data: data,
+		url: url
+	})
+}
+
+export function myPointsSort(data) {
+	var url='/mobile/points/myPointsSort';
+	return request({
+		method: 'post',
+		data: data,
+		url: url
+	})
+}

+ 20 - 0
apis/utils/AMap.js

@@ -0,0 +1,20 @@
+export default function MapLoader() {
+
+	return new Promise((resolve, reject) => {
+		 
+		if (window.AMap) {
+			resolve(window.AMap)
+		} else {
+//			console.log("map")
+			var script = document.createElement('script')
+			script.type = 'text/javascript'
+			script.async = true
+			script.src = 'https://webapi.amap.com/maps?v=1.4.15&callback=initAMap&key=de735ff06aec63f6bc109c9fb805fc3d'
+			script.onerror = reject
+			document.head.appendChild(script)
+		}
+		window.initAMap = () => {
+			resolve(window.AMap)
+		}
+	})
+}

+ 31 - 0
apis/utils/alipay.js

@@ -0,0 +1,31 @@
+function onBridgeReady(params) {
+	AlipayJSBridge.call("tradePay", {
+		tradeNO: params.tradeNo,
+	}, function(result) {
+		if (result.resultCode == '9000') {
+			location.href = params.succUrl
+		} else {
+			location.href = params.cancelUrl;
+		}
+		//alert(JSON.stringify(result));
+	});
+}
+
+export const aliPayJs = (params) => {
+	if (typeof window.WeixinJSBridge === 'undefined') {
+		if (document.addEventListener) {
+			document.addEventListener('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			}, false)
+		} else if (document.attachEvent) {
+			document.attachEvent('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+			document.attachEvent('AlipayJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+		}
+	} else {
+		onBridgeReady(params)
+	}
+}

+ 396 - 0
apis/utils/index.js

@@ -0,0 +1,396 @@
+export const currentTimeStamp = () => new Date().getTime()
+
+export const unixTimeStamp = (val) => new Date(val).getTime()
+
+// 苹果手机时间显示bug 
+export const newDate = (date) => {
+	var time=null;
+	if (date) {
+		var reg=new RegExp('-','gi')
+		time=new Date(date.replace(reg,'/'));	
+	}
+	return time
+}
+
+//今天多少天之前的时间
+export const beforeTimeStamp = (dayCount,date) => {
+	
+	if (date) {
+		var dd = new Date(date);
+	} else {
+		var dd = new Date();
+	}
+	dd.setDate(dd.getDate() - dayCount)
+	let time = dd.getTime()
+	return time
+}
+
+//今天多少天之后的时间
+export const afterTimeStamp = (dayCount, date) => {
+	if (date) {
+		var dd = new Date(date);
+	} else {
+		var dd = new Date();
+	}
+	dd.setDate(dd.getDate() + dayCount)
+	let time = dd.getTime()
+	return time
+}
+
+//今天多少年之后的时间
+export const afterYearTimeStamp = (yearCount, date) => {
+	if (date) {
+		var dd = new Date(date);
+	} else {
+		var dd = new Date();
+	}
+	dd.setFullYear(dd.getFullYear() + yearCount)
+	let time = dd.getTime()
+	return time
+}
+
+//计算某日期距当前的时间秒数
+export const secondsDistance = (date) => {
+	var now = new Date().getTime();
+	date = new Date(date).getTime();
+	var seconds = parseInt((now - date) / 1000);
+	return seconds;
+}
+
+//计算两个时间的相差天数
+export const daysDistance = (date1, date2) => {
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	var days = parseInt(Math.floor(ms / (24 * 3600 * 1000)));
+	return days;
+}
+//计算两个时间的相差小时数
+export const hourDistanceArr = (date1, date2) => {
+	if (!date1 || !date2) {
+		return '-';
+	}
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	ms = ms / 1000; //s
+	var Hour = parseInt(Math.floor(ms / (60 * 60)));
+	var Fen = parseInt(Math.floor(ms % (60 * 60) / 60));
+	var s = parseInt(Math.floor(ms % (60)));
+	//600000
+	return [Hour, Fen, s]
+}
+//计算两个时间的相差小时数
+export const hourDistance = (date1, date2) => {
+	if (!date1 || !date2) {
+		return '-';
+	}
+	date1 = Date.parse(date1);
+	date2 = Date.parse(date2);
+	var ms = date2 - date1;
+	ms = ms < 0 ? 0 : ms;
+	ms = ms / 1000; //s
+	var Hour = parseInt(Math.floor(ms / (60 * 60)));
+	var Fen = parseInt(Math.floor(ms % (60 * 60) / 60));
+	var s = parseInt(Math.floor(ms % (60)));
+	//600000
+	return Hour + '小时' + Fen + '分钟' + s + '秒';
+}
+
+export const parseUnixTime = (time, cFormat) => {
+	if (arguments.length === 0) {
+		return null
+	}
+	const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+	let date
+	if (typeof time === 'object') {
+		date = time
+	} else {
+		if (('' + time).length === 10) time = parseInt(time) * 1000
+		date = new Date(time)
+	}
+	const formatObj = {
+		y: date.getFullYear(),
+		m: date.getMonth() + 1,
+		d: date.getDate(),
+		h: date.getHours(),
+		i: date.getMinutes(),
+		s: date.getSeconds(),
+		a: date.getDay()
+	}
+	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+		let value = formatObj[key]
+		if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
+		if (result.length > 0 && value < 10) {
+			value = '0' + value
+		}
+		return value || 0
+	})
+
+	return time_str
+}
+
+//微信获取code
+export const getWeixinRedirectURI = (appid, url) =>
+	`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
+
+ 
+//支付宝获取code
+export const getAlipayRedirectURI = (appid, url) =>
+	`https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=${appid}&scope=auth_base&redirect_uri=${encodeURIComponent(url)}`
+
+
+//获取链接的?参数
+export const getUrlParam = (name) => {
+	var k =window.location.href.indexOf("?"+name+"=");
+	if(k==-1){
+		 k =window.location.href.indexOf("&"+name+"=");
+		 if(k==-1){
+			 return  ""
+		 }
+	}
+	var reg = new RegExp(name + "=([^&]*)(&|$)");
+	var r = window.location.href.match(reg);
+	var strValue = "";
+	if (r != null) {
+		strValue = unescape(r[1]);
+	}
+	return strValue;
+}
+
+
+//将base64图片码转file
+export const dataUrlToFile = (dataurl, filename) => {
+	var arr = dataurl.split(','),
+		mime = arr[0].match(/:(.*?);/)[1],
+		bstr = atob(arr[1]),
+		n = bstr.length,
+		u8arr = new Uint8Array(n);
+	while (n--) {
+		u8arr[n] = bstr.charCodeAt(n);
+	}
+	return new File([u8arr], filename, {
+		type: mime
+	});
+}
+
+//将canvas转换为image的src
+export const convertCanvasToImage = (canvas) => {
+	return canvas.toDataURL("image/png");;
+}
+
+//验证身份证
+export const checkIdCard = (value) => {
+	var identNumber = value;
+
+	if (identNumber != null) {
+		identNumber = (identNumber + "").toUpperCase();
+	}
+
+	if (!(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(identNumber))) {
+		return '身份证格式错误';
+	}
+	//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。  
+	if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(identNumber))) {
+		return '身份证格式错误';
+	}
+	//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+	//下面分别分析出生日期和校验位
+	var len, re;
+	len = identNumber.length;
+	//判断18位身份证号码,现在在国家统一身份证为18位。
+	if (len == 18) {
+		re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
+		var arrSplit = identNumber.match(re);
+
+
+		//检查生日日期是否正确
+		var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
+		var bGoodDay;
+		bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
+			(dtmBirth.getDate() == Number(arrSplit[4]));
+		if (!bGoodDay) {
+			return '身份证号码日期不匹配';
+		} else {
+			//检验18位身份证的校验码是否正确。
+			//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
+			var valnum;
+			var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
+			var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+			var nTemp = 0,
+				i;
+			for (i = 0; i < 17; i++) {
+				nTemp += identNumber.substr(i, 1) * arrInt[i];
+			}
+			valnum = arrCh[nTemp % 11];
+			if (valnum != identNumber.substr(17, 1)) {
+				return '身份证号码校验位不正确';
+			}
+			return true;
+		}
+	} else {
+		return '身份证号码位数不足';
+	}
+}
+
+// 字符串截取 包含对中文处理,str需截取字符串,start开始截取位置,n截取长度
+export const substrMb = (str, start, n) => {
+	if (str.replace(/[\u4e00-\u9fa5]/g, '**').length <= n) {
+		return str;
+	}
+	let len = 0;
+	let tmpStr = '';
+	for (let i = start; i < str.length; i++) { // 遍历字符串
+		if (/[\u4e00-\u9fa5]/.test(str[i])) { // 中文 长度为两字节
+			len += 2;
+		} else {
+			len += 1;
+		}
+		if (len > n) {
+			break;
+		} else {
+			tmpStr += str[i];
+		}
+	}
+	return tmpStr;
+}
+
+//验证手机号
+export const checkPhone = (value) => {
+	if (!value) {
+		return '手机号不能为空';
+	} else {
+		const reg = /^1[3-9]\d{9}$/
+		var result = reg.test(value);
+
+		if (result) {
+			return true;
+		} else {
+			return '请输入正确的手机号';
+		}
+	}
+};
+
+//验证社会信用代码
+export const checkCreditCode = (value) => {
+	if (!value) {
+		return '社会信用代码不能为空';
+	} else {
+		const reg = /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g
+		var result = reg.test(value);
+
+		if (result) {
+			return true;
+		} else {
+			return '不是有效的统一社会信用编码';
+		}
+	}
+};
+
+//是否为微信浏览器
+export const isWeiXin = () => {
+	return /MicroMessenger/.test(window.navigator.userAgent)
+}
+
+//获取当前根链接
+export const getBaseUrl = () => {
+	return window.location.href.split("#")[0]
+}
+
+//获取指定日期是否在指定时间之间
+export const inDateBetwen = (d, d1, d2) => {
+	//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
+	var dateBegin = new Date(d1.replace(/-/g, "/")); //将-转化为/,使用new Date
+	var dateEnd = new Date(d2.replace(/-/g, "/")); //将-转化为/,使用new Date
+	//var dateBegin = new Date(d1);//将-转化为/,使用new Date
+	//var dateEnd = new Date(d2);//将-转化为/,使用new Date
+	var dateNow = new Date(d.replace(/-/g, "/")); //获取当前时间
+
+	var beginDiff = dateNow.getTime() - dateBegin.getTime(); //时间差的毫秒数       
+	var beginDayDiff = Math.floor(beginDiff / (24 * 3600 * 1000)); //计算出相差天数
+
+	var endDiff = dateEnd.getTime() - dateNow.getTime(); //时间差的毫秒数
+	var endDayDiff = Math.floor(endDiff / (24 * 3600 * 1000)); //计算出相差天数       
+	if (endDayDiff < 0) {
+		//已过期
+		return false
+	}
+	if (beginDayDiff < 0) {
+		//没到开始时间
+		return false;
+	}
+	return true;
+}
+
+//type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,dates为数字类型,不传或0代表本周,-1代表上周,1代表下周
+export const getWeekTime = (type, dates) => {
+	var now = new Date();
+	var nowTime = now.getTime();
+	var day = now.getDay();
+	var longTime = 24 * 60 * 60 * 1000;
+	var n = longTime * 7 * (dates || 0);
+	if (type == "s") {
+		var dd = nowTime - (day) * longTime + n;
+	};
+	if (type == "e") {
+		var dd = nowTime + (7 - day - 1) * longTime + n;
+	};
+	dd = new Date(dd);
+	var y = dd.getFullYear();
+	var m = dd.getMonth() + 1;
+	var d = dd.getDate();
+	m = m < 10 ? "0" + m : m;
+	d = d < 10 ? "0" + d : d;
+	var day = y + "-" + m + "-" + d;
+	return day;
+}
+
+export const getDiffDate = (stime, etime) => {
+	//初始化日期列表,数组
+	var diffdate = new Array();
+	var i = 0;
+	//开始日期小于等于结束日期,并循环
+	while (stime <= etime) {
+		diffdate[i] = stime;
+
+		//获取开始日期时间戳
+		var stime_ts = new Date(stime).getTime();
+ 
+		//增加一天时间戳后的日期
+		var next_date = stime_ts + (24 * 60 * 60 * 1000);
+
+		//拼接年月日,这里的月份会返回(0-11),所以要+1
+		var next_dates_y = new Date(next_date).getFullYear() + '-';
+		var next_dates_m = (new Date(next_date).getMonth() + 1 < 10) ? '0' + (new Date(next_date).getMonth() + 1) + '-' : (
+			new Date(next_date).getMonth() + 1) + '-';
+		var next_dates_d = (new Date(next_date).getDate() < 10) ? '0' + new Date(next_date).getDate() : new Date(next_date).getDate();
+
+		stime = next_dates_y + next_dates_m + next_dates_d;
+
+		//增加数组key
+		i++;
+	}
+	return diffdate;
+}
+
+export const isJSON = (str) => {
+	if (typeof str == 'string') {
+		try {
+			var obj = JSON.parse(str);
+			if (typeof obj == 'object' && obj) {
+				return true;
+			} else {
+				return false;
+			}
+		} catch (e) {
+			console.log('error:' + str + '!!!' + e);
+			return false;
+		}
+	}
+}
+
+
+
+

+ 104 - 0
apis/utils/init.js

@@ -0,0 +1,104 @@
+import carhelp from '@/apis/utils/mixin.js'
+
+import * as API_WeiXin from '@/apis/weixin.js'
+
+import {
+	getUrlParam,
+	getWeixinRedirectURI,
+	isWeiXin
+} from '@/apis/utils'
+var checkOpenId = true; //是否需要获取openId
+var openId = carhelp.getOpenId();
+
+var app = {
+	init: function() {
+		// isWeiXin()|| 
+		if(!(process.env.NODE_ENV === "development") ){
+			if (isWeiXin()) {
+				if (checkOpenId) {
+					if (!openId) {
+						this.getOpenId();
+					} else {
+						this.getPersion(openId)
+					}
+				}
+			} else{
+				var NODE_NAME=  process.env['NODE_NAME']
+				if(NODE_NAME=="production"){
+					alert("请使用微信打开本页面")
+				}
+			}
+		}else{
+			carhelp.setOpenId(process.car.openId)
+			this.getPersion(process.car.openId)
+		}
+		
+		
+	},
+	 getPersion(thisopenId){
+		 var tdate=new Date( +new Date() + 8 * 3600 * 1000 ).toJSON().substr(0,15).replace("T"," ")
+		 var token_tdate=carhelp.get("token_tdate");//每10分钟存储一次token
+		 
+		  if(token_tdate&&token_tdate==tdate){
+			return
+		  }
+		  
+		 var loginurl="/mobile/regUser/findByOpenId"
+		  
+		 uni.request({
+		 	method:'get',
+		 	url: process.car.BASE_URL + loginurl,
+		 	data: {
+		 		openId:thisopenId,
+		 	},
+		 	header: {
+		 		'Content-Type': 'application/x-www-form-urlencoded',
+		 		'X-Requested-With': 'XMLHttpRequest',
+		 		//'Authorization':token
+		 	}
+		 }).then((response) => {
+		 	let [error, res] = response;
+		 	
+		 	if (res.data.code == 200&&res.data.result) {
+		 		
+		 		var token = res ? res.data.data.token : '';
+		 		carhelp.setPersonInfo(res.data.data.regUser );
+		 		carhelp.setPersonInfoPlus(res.data.data );
+		 		
+		 		carhelp.setToken(token);
+		 	 
+		 	}else{
+				carhelp.logoff();
+			}
+		 }).catch(error => {
+		 	
+		 	
+		 })
+	 },
+	getOpenId() {
+		
+		const code = getUrlParam('code');
+		var openId = carhelp.getOpenId()
+		if (!openId) {
+			if (!code) {
+				var url = document.URL;
+				var getUrl= getWeixinRedirectURI(process.car.VUE_APP_WXAPPID, url);
+				 
+				window.location.href = getUrl;
+			} else {
+				
+				API_WeiXin.getDataByCode(code).then(response => {
+					
+					carhelp.setOpenId(response.data.openid)
+					openId = response.data.openid;
+					carhelp.set("xpgj_wx_user_info",response.data)
+					
+					 location.reload();
+				}).catch(error => {
+					console.log(error);
+				});
+			}
+		}
+	}
+}
+module.exports = app

+ 45 - 0
apis/utils/initALI.js

@@ -0,0 +1,45 @@
+import carhelp from '@/apis/utils/mixin.js'
+import * as API_WeiXin from '@/apis/weixin.js'
+
+import {
+	getUrlParam,
+	getAlipayRedirectURI,
+ 
+} from '@/apis/utils'
+var checkOpenId = true; //是否需要获取openId
+var openId = carhelp.getOpenIdALI();
+
+var app = {
+	init: function() {
+		 
+		if (!openId) {
+			this.getOpenId();
+		} 
+		
+		
+	},
+	
+	getOpenId() {
+		
+		const code = getUrlParam('auth_code');
+		var openId= carhelp.getOpenIdALI()
+		
+		if (!openId) {
+			if (!code) {
+				
+				var authUrl = document.URL//.replace('pages/parking/search', 'pages/parking/auth');
+				window.location.href = getAlipayRedirectURI(process.car.VUE_APP_ALIAPPID, authUrl );
+			} else {
+				
+				API_WeiXin.getDataByCodeALI(code).then(response => {
+					
+					carhelp.setOpenIdALI(response.data.openid)
+					 location.reload();
+				}).catch(error => {
+					console.log(error);
+				});
+			}
+		}
+	}
+}
+module.exports = app

+ 130 - 0
apis/utils/mixin.js

@@ -0,0 +1,130 @@
+var prefix = 'jp-railway-' + process.car.NODE_ENV + '_';
+
+var app = {
+	getGzDate : (key) => {
+		var tdate=new Date( ).toJSON().substr(0,10).replace("T"," ")
+		var date= uni.getStorageSync( prefix + "is_gz_date")
+		
+		if(tdate==date){
+			return false
+		}else{
+			return  true;
+		}
+		
+	},
+	
+	setGzDate : () => uni.setStorageSync(prefix + "is_gz_date", new Date( ).toJSON().substr(0,10).replace("T"," ") ),
+	
+	getGunIdCharge :()=>{
+
+		var date= uni.getStorageSync( prefix + "GunId_Date_charge")
+		var now=new Date().getTime()
+		if(date+5*60*1000>now){
+			return  uni.getStorageSync(prefix +  "GunId_Date_Show_charge")
+		}else{
+			return "";
+		}
+	},
+	
+	setGunIdCharge : ( value) => {
+		uni.setStorageSync(prefix + "GunId_Date_Show_charge", value)
+		uni.setStorageSync(prefix + "GunId_Date_charge", new Date().getTime())
+		
+	},
+	// getGunId :()=>{
+	// 	var date= uni.get( "GunId_Date")
+	// 	var now=new Date().getTime()
+	// 	if(date+5*60*1000<now){
+	// 		return  uni.get( "GunId_Date_Show")
+	// 	}else{
+	// 		return "";
+	// 	}
+	// },
+	
+	// setGunId : ( value) => {
+	// 	uni.setStorageSync(prefix + "GunId_Date_Show", value)
+	// 	uni.setStorageSync(prefix + "GunId_Date", new Date().getTime())
+		
+	// },
+	
+	getPrefix:()=> prefix,
+	get : key =>  uni.getStorageSync(prefix + key),
+
+	set : (key, value) => uni.setStorageSync(prefix + key, value),
+	remove: key =>  uni.removeStorageSync(prefix + key),
+	setConfig : (value) => uni.setStorageSync(prefix + '_config_$', value),
+	getConfig : () => {
+		var config = uni.getStorageSync(prefix + '_config_$')
+		var configure={}
+		if(config){
+			for(var  i in config){
+				var con=config[i];
+				configure[con.key]=con.value
+			}
+		}
+		 return configure;
+	},
+	
+	setConfigMessage : (value) => uni.setStorageSync(prefix + '_config_tips_$', value),
+	getConfigMessage : () => {
+		var config = uni.getStorageSync(prefix + '_config_tips_$')
+		if(!config){
+			config=[]
+		}
+		 return config;
+	},
+	
+	logoff:()=>{
+		uni.removeStorageSync(prefix + 'token_tdate')
+		uni.removeStorageSync(prefix + 'token')
+		uni.removeStorageSync(prefix  + 'personInfo');
+		uni.removeStorageSync(prefix + 'personInfoPlus');
+	//	uni.removeStorageSync(prefix + 'getElderModeClass');
+		//uni.removeStorageSync(prefix+'wx_openId');
+		
+	},
+	
+	getPersonInfo : () => {
+		 return uni.getStorageSync(prefix + 'personInfo')
+	},
+	getPersonInfoPlus : () => {
+		 return uni.getStorageSync(prefix + 'personInfoPlus')
+	},
+	signOut:()=>  uni.removeStorageSync(prefix  + 'personInfo'),
+	getOpenId : () =>   uni.getStorageSync(prefix + 'wx_openId'+process.car.VUE_APP_WXAPPID),
+	setOpenId : (value) => uni.setStorageSync(prefix + 'wx_openId'+process.car.VUE_APP_WXAPPID, value),
+	
+	getOpenIdALI : () =>   uni.getStorageSync(prefix + 'ali_openId'+process.car.VUE_APP_WXAPPID),
+	setOpenIdALI : (value) => uni.setStorageSync(prefix + 'ali_openId'+process.car.VUE_APP_WXAPPID, value),
+	
+	getUserInfo : () => {
+		 return uni.getStorageSync(prefix + 'xpgj_wx_user_info')
+	},
+
+	setPersonInfo : (value) => uni.setStorageSync(prefix + 'personInfo', value),
+	setPersonInfoPlus : (value) => uni.setStorageSync(prefix + 'personInfoPlus', value),
+	
+	setUserInfo : (value) => uni.setStorageSync(prefix + 'xpgj_wx_user_info', value),
+	
+	getToken : (options) => {
+		//不同权限 ,不同token
+	
+		return uni.getStorageSync(prefix + 'token')
+	},
+	setToken : (value) => {
+		uni.setStorageSync(prefix + 'token', value)
+		
+		if(value){
+			var tdate=new Date( +new Date() + 8 * 3600 * 1000 ).toJSON().substr(0,15).replace("T"," ")
+			uni.setStorageSync(prefix + 'token_tdate', tdate)
+		}
+	}
+	,
+	getGetElderModeClass : () => {
+		 return uni.getStorageSync(prefix + 'getElderModeClass')
+	},
+	setGetElderModeClass : (value) => uni.setStorageSync(prefix + 'getElderModeClass', value),
+	
+}
+
+module.exports = app

+ 91 - 0
apis/utils/request.js

@@ -0,0 +1,91 @@
+import  carhelp from '@/apis/utils/mixin.js'
+import requestSon from './requestSon.js';
+
+
+const request = (options) => {
+	//记录请求次数和响应次数
+	var tdate=new Date( +new Date() + 8 * 3600 * 1000 ).toJSON().substr(0,15).replace("T"," ")
+	var token_tdate=carhelp.get("token_tdate");//每10分钟存储一次token
+	
+	var token=carhelp.getToken(options);
+	
+	 if(token_tdate&&token_tdate==tdate){
+	 	return requestSon(options);
+	 }
+	 var openId=carhelp.getOpenId()
+	var  urlindex="/wechat/findUserInfo"
+	var k=options.url.indexOf(urlindex)==-1;
+	
+	 if(!openId&&k){
+		 return
+	 }
+	if(!k){
+		return requestSon(options);
+	}
+	
+	return new Promise((resolve, reject) => {
+		 var loginurl="/mobile/regUser/findByOpenId"
+		 
+		uni.request({
+			method:'get',
+			url: process.car.BASE_URL + loginurl,
+			data: {
+				openId:openId,
+			
+			},
+			
+			header: {
+				'Content-Type': 'application/x-www-form-urlencoded',
+				'X-Requested-With': 'XMLHttpRequest',
+				//'Authorization':token
+			}
+		}).then((response) => {
+ 			let [error, res] = response;
+			
+			
+			if (res.data.code == 200&&res.data.result) {
+				
+				var token = res ? res.data.data.token : '';
+				carhelp.setPersonInfo(res.data.data.regUser );
+				
+				carhelp.setToken(token);
+				carhelp.setPersonInfoPlus(res.data.data);
+				
+				options.token=token
+				
+				var isson= requestSon(options)
+				//requestNum(options);
+				resolve(isson);
+				 
+			} else  if(res.data.code == 415||(res.data.code == 200&&!res.data.result)||res.data.code == 400){
+				
+				//var url=window.location.href.split("#")[1]
+			
+				console.log("没有免登陆 ----------------"+options.url)
+				//var url="/pages/login/index?message=请登录&back="+ url+"&phone="+options.data.phone
+				var thisurl='/pages/login/index';
+				
+				if(options&&options.data&&options.data.jpcode){
+					thisurl+="?jpcode="+options.data.jpcode
+				}
+				carhelp.signOut()
+				uni.redirectTo({
+					url: thisurl
+				})
+				
+				
+				
+			 
+				
+			}else{
+		
+				reject(res.data.message)
+			}
+		}).catch(error => {
+			
+			let [err, res] = error;
+			reject(err)
+		})
+	});
+}
+export default request

+ 69 - 0
apis/utils/requestSon.js

@@ -0,0 +1,69 @@
+import  carhelp from '@/apis/utils/mixin.js'
+
+//记录请求次数和响应次数
+let reqCount = 0,
+	resCount = 0;
+var baseUrl=process.car.BASE_URL;
+
+if (process.env.NODE_ENV === "development") {
+	//baseUrl="http://192.168.33.230:8086/jp-employment-server";
+}
+const request = (options) => {
+	var token=carhelp.getToken(options);
+	
+	reqCount++;
+	 
+	return new Promise((resolve, reject) => {
+		//如果特殊链接需要传入token
+		if(options&&options.token){
+			token=options.token;
+		}
+		uni.request({
+			method: options.method?options.method:'get',
+			url: baseUrl + options.url,
+			data: options.data?options.data:{},
+			
+			header: options.header?{
+				...options.header,
+				'Authorization':token
+			}:{
+				'Content-Type': 'application/x-www-form-urlencoded',
+				'X-Requested-With': 'XMLHttpRequest',
+				'Authorization':token
+			}
+		}).then((response) => {
+			//for(var t = Date.now(); Date.now() - t <= 2000;);
+			
+			resCount++
+			//防止连续请求多个接口时loading闪现
+			let [error, res] = response;
+			
+			
+			if (res.data.code == 415&&res.data.message=='请先注册信息') {
+				carhelp.signOut()
+				uni.redirectTo({
+					url: 'pages/login/index'
+				})
+				return;
+			}
+			
+			if (res.data.code != 200) {
+				reject(res.data.message)
+			} else {
+				if(!res.data.result){
+					
+					reject(res.data.message);
+				}else{
+					resolve(res.data);
+				}
+			
+			}
+		}).catch(error => {
+			resCount++
+		
+			let [err, res] = error;
+			reject(err)
+		})
+	});
+}
+export default request

+ 76 - 0
apis/utils/requestWhite.js

@@ -0,0 +1,76 @@
+import  carhelp from '@/apis/utils/mixin.js'
+
+//记录请求次数和响应次数
+let reqCount = 0,
+	resCount = 0;
+//var token=carhelp.getToken();
+var baseUrl=process.car.BASE_URL;
+
+if (process.env.NODE_ENV === "development") {
+	//baseUrl="http://192.168.33.90:8086/jp-employment-server";
+}
+const request = (options) => {
+	var token=carhelp.getToken(options);
+	
+	reqCount++;
+	 
+	return new Promise((resolve, reject) => {
+		//如果特殊链接需要传入token
+		if(options&&options.token){
+			token=options.token;
+		}
+		uni.request({
+			method: options.method?options.method:'get',
+			url: baseUrl + options.url,
+			data: options.data?options.data:{},
+			
+			header: options.header?{
+				...options.header,
+				'Authorization':token
+			}:{
+				'Content-Type': 'application/x-www-form-urlencoded',
+				'X-Requested-With': 'XMLHttpRequest',
+				'Authorization':token
+			}
+		}).then((response) => {
+			//for(var t = Date.now(); Date.now() - t <= 2000;);
+			
+			resCount++
+			//防止连续请求多个接口时loading闪现
+			let [error, res] = response;
+			
+			if (res.data.code == 415&&res.data.message=='请先注册信息') {
+				carhelp.signOut()
+				uni.redirectTo({
+					url: '/pages/login/index'
+				})
+				return;
+			}
+			
+			if (res.data.code != 200) {
+				reject(res.data.message)
+			} else {
+				
+				if(options.data&&options.data.noerror){
+					resolve(res.data);
+				}else{
+					if(!res.data.result){
+						uni.showToast({
+							title: res.data.message,
+							position:'bottom'
+						})
+					}
+					resolve(res.data);
+				}
+				
+			
+			}
+		}).catch(error => {
+			resCount++
+		
+			let [err, res] = error;
+			reject(err)
+		})
+	});
+}
+export default request

+ 236 - 0
apis/utils/wxJsApi.js

@@ -0,0 +1,236 @@
+import wx from 'weixin-js-sdk'
+import * as API_WeiXin from '@/apis/weixin.js'
+import * as API_Common from '@/apis/common.js'
+
+import Qs from 'qs';
+import request from './request.js'
+export function addSysLog(message) {
+
+	return request({
+		url: '/mobile/sysLogApi/submit',
+		data: Qs.stringify({
+			message: JSON.stringify(message)
+		}),
+		method: 'post',
+	})
+}
+//获取微信配置
+export function getWxConfig(jsApiList) {
+	var jsApiList = jsApiList || ['chooseImage', 'getLocalImgData', 'scanQRCode','openLocation'];
+	 
+	let promise = (jsApiList => {
+		return new Promise((resolve, reject) => {
+//			console.log(jsApiList);
+			API_WeiXin.getConfig().then(response => {
+				var wxconfig = response.data.wxConfig;
+			
+				wx.config({
+					debug: false, // 开启调试模式,
+					appId: wxconfig.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
+					timestamp: wxconfig.timestamp, // 必填,生成签名的时间戳
+					nonceStr: wxconfig.nonceStr, // 必填,生成签名的随机串
+					signature: wxconfig.signature, // 必填,签名,见附录1
+					jsApiList: jsApiList, // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+					openTagList:['wx-open-subscribe']
+				});
+				wx.ready(function() {
+					resolve(response.data);
+				})
+				wx.error(function(res) {
+					reject('微信api配置出错');
+				});
+			}).catch(error => {
+				//mui.toast(error);
+				reject(error);
+			})
+		})
+	})(jsApiList)
+
+	return promise;
+}
+
+//选择图片,多图上传和单图上传的回调处理不一样
+export function chooseImage(count,islocalId) {
+	var count = count || 1;
+	let promise = new Promise((resolve, reject) => {
+		wx.chooseImage({
+			count: count,
+			sizeType: ['compressed'],
+			sourceType: ['album', 'camera'],
+			success: function(res) {
+				 
+				var localIds = res.localIds;
+				
+				if(islocalId){
+					
+					resolve(localIds);
+				}else{
+					if (count == 1) {
+						wx.getLocalImgData({
+							localId: localIds[0],
+							success: function(res) {
+								resolve(res);
+							}
+						});
+					} else {
+						resolve(localIds);
+					}
+				}
+				
+			}
+		});
+	});
+	return promise;
+}
+
+
+
+
+//获取图片,用于多图上传时的递归处理
+export function getLocalImgData(localId, fun) {
+	wx.getLocalImgData({
+		localId: localId,
+		success: function(res) {
+			fun(res);
+		}
+	});
+}
+
+//上传图片
+export function uploadPic(imgBase64) {
+	let promise = new Promise((resolve, reject) => {
+		var formData = new FormData();
+		formData.append('photoName', '1.jpg');
+		formData.append('photoBase64Data', imgBase64);
+
+	
+		API_Common.uploadBase64(formData).then(response => {
+			resolve(response);
+		}).catch(error => {
+			//mui.toast(error);
+			reject(error);
+		})
+	});
+	return promise;
+}
+
+//获取坐标
+export function getLocation() {
+	if(process.env.NODE_ENV === "development" && process.car.SIMPLE_RUN){
+		
+		let promise =new Promise((resolve, reject) => {
+			var obj= {
+			longitude:112.28541,
+			latitude:30.308354,
+			errMsg:"getLocation:ok"
+			}
+			resolve(obj);
+		})
+		return promise
+	}
+	let promise = new Promise((resolve, reject) => {
+		
+		wx.ready(function() {
+			wx.getLocation({
+				type: 'gcj02', // 默认为wgs84的gps坐标,可传入'gcj02'
+				success: function(res) {
+					resolve(res);
+				},
+				faile: function(res) {
+					reject(res);
+				},
+				fail: function(res) {
+					if (res.errMsg == 'getLocation:timeout') {
+						
+						res="定位超时,请检查是否开启'定位'"
+					} else if (res.errMsg == 'getLocation:ERROR_NETWORK') {
+						//mui.alert("网络异常");
+						res="定位超时,请检查是否开启'定位'"
+					} else if (res.errMsg == 'getLocation:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') {
+						res="没开启系统定位"
+						//mui.alert("没开启系统定位");
+					} else if (res.errMsg == 'getLocation:system permission denied') {
+						res="未给微信位置授权"
+						//mui.alert("未给微信位置授权");
+					} else if (res.errMsg == 'getLocation:location permission') {
+						res="未给微信位置授权"
+						//mui.alert("未给微信位置授权");
+					} else if (res.errMsg == 'getLocation:auth denied') {
+						res="用户在小程序中未授权"
+						//mui.alert("用户在小程序中未授权");
+					} else if (res.errMsg == 'getLocation:fail authorize no response') {
+						res="用户在小程序中未授权"
+						//mui.alert("用户在小程序中未授权");
+					} else if (res.errMsg == 'getLocation:gps closed') {
+						res="用户已取消定位"
+						//mui.alert("用户已取消定位");
+					}
+					reject(res);
+				},
+				complete() {}
+			})
+		})
+	})
+	return promise;
+}
+
+//扫描二维码
+export function scanQRCode(needResult,obj) {
+	var needResult = needResult || 1;
+	let promise = new Promise((resolve, reject) => {
+		wx.scanQRCode({
+			needResult: needResult,
+			scanType: ["qrCode"],
+			success: function(res) {
+				var url = res.resultStr;
+				resolve(url);
+			},
+			faile: function(res) {
+				reject(res);
+			},
+			
+			fail: function(res) {
+
+				reject(res);
+			},
+			complete() {
+				if(obj){
+					obj.showLoading(false)	
+				}
+			}
+		})
+	});
+	return promise;
+}
+
+export function requestSubscribeMessage(sz) {
+	 
+	let promise = new Promise((resolve, reject) => {
+		wx.ready(function() {
+			wx.requestSubscribeMessage({
+			
+			tmplIds: sz,
+			
+				success(res) { 
+						resolve(res);
+				}
+				
+			})
+		})
+		
+
+	});
+	return promise;
+}
+
+
+
+
+//扫描二维码
+export function openLocation(obj) {
+ 
+	let promise = new Promise((resolve, reject) => {
+		wx.openLocation(obj)
+	});
+	return promise;
+}

+ 52 - 0
apis/utils/wxpay.js

@@ -0,0 +1,52 @@
+ 
+function onBridgeReady(params) {
+	console.log("onBridgeReady+"+new Date().getTime())
+	
+	uni.showLoading({
+		mask:true,title:'加载中...'
+	})
+	//记录要回跳的url
+	window.WeixinJSBridge.invoke(
+		'getBrandWCPayRequest', {
+			'appId': params.appId, // 公众号名称,由商户传入
+			'timeStamp': params.timeStamp, // 时间戳,自1970年以来的秒数
+			'nonceStr': params.nonceStr, // 随机串
+			'package': params.package,
+			'signType': params.signType, // 微信签名方式:
+			'paySign': params.paySign // 微信签名
+		},
+		(res) => {
+			//alert(JSON.stringify(res)); // 支付取消会执行 支付成功不会
+			if (res.err_msg == 'get_brand_wcpay_request:ok') {
+				//alert("支付成功") // 不会执行
+				//window.location.href = params.url
+			} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
+				//alert("支付取消") // 会执行
+				 uni.hideLoading();
+			} else {
+				 uni.hideLoading();
+			}
+		}
+	)
+}
+
+export const wxPayJs = (params) => {
+	console.log("wxPayJs+"+new Date().getTime())
+	
+	if (typeof window.WeixinJSBridge === 'undefined') {
+		if (document.addEventListener) {
+			document.addEventListener('WeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			}, false)
+		} else if (document.attachEvent) {
+			document.attachEvent('WeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+			document.attachEvent('onWeixinJSBridgeReady', function() {
+				onBridgeReady(params)
+			})
+		}
+	} else {
+		onBridgeReady(params)
+	}
+}

+ 77 - 0
apis/weixin.js

@@ -0,0 +1,77 @@
+import request from '@/apis/utils/request'
+import requestWhite from '@/apis/utils/requestWhite.js';
+// import requestAli from '../utils/requestParking.js';
+ 
+import Qs from 'qs';
+
+//微信支付
+export function wxpay(data) {
+	if(data){
+		data.type="E"
+	}
+	if(data&&!data.recordId){
+		data.recordId=''
+	}
+	return request({
+		url: '/wxPay/wxJsapiPay',
+		data: data,
+		method: 'post',
+	})
+}
+
+
+export function alpay(data) {
+	if(data&&!data.recordId){
+		data.recordId=''
+	}
+	return request({
+		url: '/aliPay/tradePrecreatePay',
+		data: data,
+		method: 'post',
+	})
+}
+
+//根据code换取openid
+export function getDataByCode(code) {
+	return request({
+		url: '/wechat/findUserInfo/' + code,
+		params: {},
+		method: 'get',
+	})
+}
+
+// export function getDataByCodeALI(code) {
+// 	return requestAli({
+// 		url: '/aliPay/findUserInfo/' + code,
+// 		params: {},
+// 		method: 'get',
+// 	})
+// }
+
+
+//获得配置
+export function getConfig() {
+	return requestWhite({
+		url: '/wechat/getConfig',
+		data: {
+			url: window.location.href.split('#')[0]
+		},
+		method: 'get',
+	})
+}
+
+export function checkSubscribe(data) {
+	return requestWhite({
+		url: '/wechat/checkSubscribe',
+		data: data,
+		method: 'post',
+	})
+}
+
+export function addPoint(data) {
+	return request({
+		url: '/mobile/points/addPoint',
+		data: data,
+		method: 'post',
+	})
+}

+ 0 - 0
assets/css/style.css


+ 57 - 0
assets/font/font.css

@@ -0,0 +1,57 @@
+@font-face {  
+
+    font-family: 'Bold';
+
+    src: url('http://www.jsrailway.com.cn/railroad-phone-font/SourceHanSerifSC-SemiBold.otf');
+
+    font-weight: normal;  
+
+    font-style: normal;  
+
+  }
+
+  @font-face {  
+
+    font-family: 'Medium';
+    src: url('http://www.jsrailway.com.cn/railroad-phone-font/SourceHanSerifSC-SemiBold.otf');
+
+
+    font-weight: normal;  
+
+    font-style: normal;  
+
+  }
+
+@font-face {  
+
+    font-family: 'SemiBold';
+
+    src: url('http://www.jsrailway.com.cn/railroad-phone-font/SourceHanSerifSC-SemiBold.otf');
+
+    font-weight: normal;  
+
+    font-style: normal;  
+
+  }
+@font-face {  
+
+    font-family: 'Regular';
+
+    src: url('http://www.jsrailway.com.cn/railroad-phone-font/SourceHanSerifSC-SemiBold.otf');
+
+    font-weight: normal;  
+
+    font-style: normal;  
+
+  }
+  @font-face {
+  
+      font-family: 'Light';
+  
+    src: url('http://www.jsrailway.com.cn/railroad-phone-font/SourceHanSerifSC-SemiBold.otf');
+  
+      font-weight: normal;  
+  
+      font-style: normal;  
+  
+    }

+ 250 - 0
assets/font/iconfont.css

@@ -0,0 +1,250 @@
+@font-face {
+  font-family: "custom-icon"; /* Project id 3394761 */
+  src: url('//at.alicdn.com/t/font_3394761_5uvbnito1fn.woff2?t=1653965408137') format('woff2'),
+       url('//at.alicdn.com/t/font_3394761_5uvbnito1fn.woff?t=1653965408137') format('woff'),
+       url('//at.alicdn.com/t/font_3394761_5uvbnito1fn.ttf?t=1653965408137') format('truetype');
+}
+
+.custom-icon {
+  font-family: "custom-icon" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.custom-icon-account-pin-circle-fill:before {
+  content: "\e638";
+}
+
+.custom-icon-question-answer-fill:before {
+  content: "\e635";
+}
+
+.custom-icon-gift-2-fill:before {
+  content: "\e636";
+}
+
+.custom-icon-wechat-fill:before {
+  content: "\e637";
+}
+
+.custom-icon-a-Frame211:before {
+  content: "\e634";
+}
+
+.custom-icon-chenggong:before {
+  content: "\e668";
+}
+
+.custom-icon-menu_cwcl:before {
+  content: "\e655";
+}
+
+.custom-icon-chongzhi:before {
+  content: "\e633";
+}
+
+.custom-icon-arrow-right-s-line:before {
+  content: "\e600";
+}
+
+.custom-icon-arrow-drop-right-line:before {
+  content: "\e601";
+}
+
+.custom-icon-arrow-left-s-line:before {
+  content: "\e602";
+}
+
+.custom-icon-arrow-drop-up-fill:before {
+  content: "\e603";
+}
+
+.custom-icon-arrow-drop-up-line:before {
+  content: "\e604";
+}
+
+.custom-icon-arrow-up-s-fill:before {
+  content: "\e605";
+}
+
+.custom-icon-charging-pile-fill:before {
+  content: "\e606";
+}
+
+.custom-icon-arrow-up-s-line:before {
+  content: "\e607";
+}
+
+.custom-icon-camera-fill:before {
+  content: "\e608";
+}
+
+.custom-icon-close-line:before {
+  content: "\e609";
+}
+
+.custom-icon-charging-pile-line:before {
+  content: "\e60a";
+}
+
+.custom-icon-close-circle-fill:before {
+  content: "\e60b";
+}
+
+.custom-icon-compass-3-fill:before {
+  content: "\e60c";
+}
+
+.custom-icon-customer-service-2-line:before {
+  content: "\e60d";
+}
+
+.custom-icon-compass-discover-line:before {
+  content: "\e60e";
+}
+
+.custom-icon-error-warning-line:before {
+  content: "\e60f";
+}
+
+.custom-icon-home-3-fill:before {
+  content: "\e610";
+}
+
+.custom-icon-feedback-fill:before {
+  content: "\e611";
+}
+
+.custom-icon-eye-fill:before {
+  content: "\e612";
+}
+
+.custom-icon-list-check-2:before {
+  content: "\e613";
+}
+
+.custom-icon-parking-box-fill:before {
+  content: "\e614";
+}
+
+.custom-icon-navigation-fill:before {
+  content: "\e615";
+}
+
+.custom-icon-customer-service-fill:before {
+  content: "\e616";
+}
+
+.custom-icon-information-fill:before {
+  content: "\e617";
+}
+
+.custom-icon-plug-line:before {
+  content: "\e618";
+}
+
+.custom-icon-home-3-line:before {
+  content: "\e619";
+}
+
+.custom-icon-qr-scan-2-line:before {
+  content: "\e61a";
+}
+
+.custom-icon-qr-scan-line:before {
+  content: "\e61b";
+}
+
+.custom-icon-parking-box-line:before {
+  content: "\e61c";
+}
+
+.custom-icon-question-line:before {
+  content: "\e61d";
+}
+
+.custom-icon-question-fill:before {
+  content: "\e61e";
+}
+
+.custom-icon-search-2-line:before {
+  content: "\e61f";
+}
+
+.custom-icon-road-map-fill:before {
+  content: "\e620";
+}
+
+.custom-icon-store-3-line:before {
+  content: "\e621";
+}
+
+.custom-icon-road-map-line:before {
+  content: "\e622";
+}
+
+.custom-icon-settings-4-fill:before {
+  content: "\e623";
+}
+
+.custom-icon-user-2-fill:before {
+  content: "\e624";
+}
+
+.custom-icon-todo-line:before {
+  content: "\e625";
+}
+
+.custom-icon-todo-fill:before {
+  content: "\e626";
+}
+
+.custom-icon-user-5-line:before {
+  content: "\e627";
+}
+
+.custom-icon-user-5-fill:before {
+  content: "\e628";
+}
+
+.custom-icon-wallet-3-line:before {
+  content: "\e629";
+}
+
+.custom-icon-arrow-drop-down-fill:before {
+  content: "\e62a";
+}
+
+.custom-icon-arrow-down-s-fill:before {
+  content: "\e62b";
+}
+
+.custom-icon-arrow-down-s-line:before {
+  content: "\e62c";
+}
+
+.custom-icon-wechat-pay-fill:before {
+  content: "\e62d";
+}
+
+.custom-icon-arrow-drop-down-line:before {
+  content: "\e62e";
+}
+
+.custom-icon-arrow-drop-left-fill:before {
+  content: "\e62f";
+}
+
+.custom-icon-alipay-fill:before {
+  content: "\e630";
+}
+
+.custom-icon-arrow-drop-left-line:before {
+  content: "\e631";
+}
+
+.custom-icon-arrow-drop-right-fill:before {
+  content: "\e632";
+}

+ 7 - 0
assets/font/jptime.css

@@ -0,0 +1,7 @@
+@font-face {
+	font-family: "JPTIME";
+	src:url("@/assets/font/jptime.otf");
+}
+.JPTIME {
+    font-family: JPTIME
+}

BIN
assets/font/jptime.otf


+ 22 - 0
assets/icon/icon.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

BIN
assets/img/Bronze Medal Copy@1x.png


BIN
assets/img/Gold Medal@1x.png


BIN
assets/img/Group Copy@1x.png


BIN
assets/img/Group@1x.png


BIN
assets/img/Silver Medal Copy@1x.png


BIN
assets/img/articlePic.png


BIN
assets/img/banner.png


BIN
assets/img/bgbg.png


BIN
assets/img/bgc.png


BIN
assets/img/computer.png


BIN
assets/img/default_img.png


BIN
assets/img/department.png


BIN
assets/img/department2.png


BIN
assets/img/dingmanrong.png


BIN
assets/img/djdt.png


BIN
assets/img/dmr.png


BIN
assets/img/fxkj.png


BIN
assets/img/fzxc.png


BIN
assets/img/hdjl.png


BIN
assets/img/hdzx.png


BIN
assets/img/honorPic1.png


BIN
assets/img/honorPic2.png


BIN
assets/img/jfyh.png


BIN
assets/img/jgsz.png


BIN
assets/img/jiguang.png


BIN
assets/img/jjjc.png


BIN
assets/img/lishuyi.png


BIN
assets/img/logo.png


BIN
assets/img/md-notifications@1x.png


BIN
assets/img/news.png


BIN
assets/img/newsPic.png


BIN
assets/img/orderPic.png


BIN
assets/img/overdue.png


BIN
assets/img/overend.png


BIN
assets/img/phb.png


BIN
assets/img/photo.png


BIN
assets/img/plane.png


BIN
assets/img/position.png


BIN
assets/img/position2.png


BIN
assets/img/prize2.png


BIN
assets/img/prize3.png


BIN
assets/img/prize4.png


BIN
assets/img/rankPhoto.png


BIN
assets/img/result.png


BIN
assets/img/riFill-bar-chart-2-fill@1x.png


BIN
assets/img/riFill-camera-fill@2x.png


BIN
assets/img/riFill-copper-diamond-fill@2x.png


BIN
assets/img/riFill-store-3-fill@1x.png


BIN
assets/img/riFill-vip-crown-2-fill@2x.png


BIN
assets/img/riFill-vip-diamond-fill Copy@1x.png


BIN
assets/img/riLine-account-box-line@2x.png


BIN
assets/img/riLine-coin-line@2x.png


BIN
assets/img/riLine-customer-service-2-line@2x.png


BIN
assets/img/riLine-file-edit-line@2x.png


BIN
assets/img/riLine-gift-2-line@1x.png


BIN
assets/img/riLine-gift-2-line@2x.png


BIN
assets/img/riLine-logout-box-r-line@2x.png


BIN
assets/img/riLine-smartphone-line@2x.png


BIN
assets/img/shareP.png


BIN
assets/img/sharePic1.png


BIN
assets/img/sharePic2.png


BIN
assets/img/sharePic3.png


BIN
assets/img/slideshow@2x.png


BIN
assets/img/tdry.png


BIN
assets/img/tlgk.png


BIN
assets/img/wmcj.png


BIN
assets/img/wnfw.png


BIN
assets/img/zwdt.png


BIN
assets/img/暂无数据-缺省页.png


+ 34 - 0
assets/js/font.js

@@ -0,0 +1,34 @@
+(function() {
+	
+		window.addEventListener('resize', () => {
+			if (document.activeElement.tagName == 'INPUT') {                      
+			window.setTimeout(() => { 
+				document.activeElement.scrollIntoViewIfNeeded();            
+			}, 100);        
+		}
+		})
+		
+				if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
+					handleFontSize();
+				} else {
+					if (document.addEventListener) {
+						document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
+					} else if (document.attachEvent) {
+						document.attachEvent("WeixinJSBridgeReady", handleFontSize);
+						document.attachEvent("onWeixinJSBridgeReady", handleFontSize);
+					}
+				}
+
+				function handleFontSize() {
+					/*设置网页字体为默认大小*/
+					WeixinJSBridge.invoke('setFontSizeCallback', {
+						'fontSize': 0
+					});
+					/*重写设置网页字体大小的事件*/
+					WeixinJSBridge.on('menu:setfont', function() {
+						WeixinJSBridge.invoke('setFontSizeCallback', {
+							'fontSize': 0
+						});
+					});
+				}
+			})();

+ 160 - 0
components/ShareServer.vue

@@ -0,0 +1,160 @@
+<template>
+	<view></view>
+</template>
+
+<script>
+
+	import wx from 'weixin-js-sdk'
+	import * as API_WeiXin from '@/apis/weixin'
+
+	export default {
+		name: 'Share',
+		props: {
+			 
+		},
+		data() {
+			return {
+				id:'',
+				title:'',
+				url:'',
+				isLoading: false,
+				nowItem: {
+					shareTitle: '',
+					shareImg: '',
+					shareDescription: ''
+				}
+			}
+		},
+		created() {},
+		methods: {
+			 addPoint(){
+				 
+				 API_WeiXin.addPoint({
+					 id:this.id,
+					 pointCode:"70007"
+				 }).then(response => {
+					 
+				 })
+			 },
+			
+			//获取微信jssdk配置信息
+			get_wx_config() {
+				
+				
+				API_WeiXin.getConfig(window.location.href.split("#")[0]).then(response => {
+					
+					
+					var wxconfig = response.data.wxConfig;
+					
+					console.log(wxconfig.nonceStr)
+					//this.wxConfig = wxconfig;
+				
+					wx.config({
+						debug: false, // 开启调试模式,
+						appId: wxconfig.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
+						timestamp: wxconfig.timestamp, // 必填,生成签名的时间戳
+						nonceStr: wxconfig.nonceStr, // 必填,生成签名的随机串
+						signature: wxconfig.signature, // 必填,签名,见附录1
+						jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 
+						'onMenuShareQQ', 'onMenuShareQZone'] ,// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+						//'checkJsApi',,'updateAppMessageShareData','updateTimelineShareData'
+					});
+					
+						console.log("aaa")
+					//this.wxShare()
+				}).catch(error => {
+					console.log(error)
+						console.log("errorerror")
+				})
+			},
+			setUrl(url){
+				this.url=process.car.IMG_URL+"railroad-phone/#"+url;
+			},
+			setTitle(text,id){
+				this.title=text;
+				this.id=id;
+				this.wxShare() 
+				
+			},
+			//微信分享自定义
+			wxShare() {
+				var userInfo=this.carhelp.getPersonInfo()
+				var img=process.car.IMG_URL+"railroad-phone/"+require("@/assets/img/logo.png")
+				
+				var title="[荆州市地方铁路有限公司微官网]"+this.title
+			//	var desc=
+				let joinUrl = this.url;
+				console.log(img);
+				console.log(title);
+				console.log(joinUrl);
+				var _this = this;
+				
+				wx.ready(function() {
+					
+					
+					// wx.updateTimelineShareData({
+					// 	title: title,
+					// //	desc:desc ,
+					// 	link: joinUrl,
+					// 	 imgUrl: img,
+					// 	success: function() {
+					// 		if(userInfo){
+					// 			//_this.addPoint()
+					// 		}
+					// 		// 设置成功
+					// 		_this.$emit("wxShare",null);
+					// 	}
+					// })
+					// wx.updateAppMessageShareData({
+					// 	title: title,
+					// //	desc:desc ,
+					// 	link: joinUrl,
+					// 	 imgUrl: img,
+					// 	success: function() {
+					// 		if(userInfo){
+					// 			//_this.addPoint()
+					// 		}
+					// 		// 设置成功
+					// 		_this.$emit("wxShare",null);
+					// 	}
+					// })
+					wx.onMenuShareAppMessage({
+						title: title,
+					//	desc:desc ,
+						link: joinUrl,
+						 imgUrl: img,
+						success: function() {
+							console.log('111')
+							if(userInfo){
+								_this.addPoint()
+							}
+							// 设置成功
+							_this.$emit("wxShare",null);
+						}
+					})
+					wx.onMenuShareTimeline({
+						title: title,
+						//desc:desc ,
+						link: joinUrl,
+						 imgUrl: img,
+						success: function() {
+								console.log('222')
+							if(userInfo){
+								_this.addPoint()
+							}
+							// 设置成功
+							_this.$emit("wxShare",null);
+						}
+					})
+				});
+			}
+		},
+		mounted() {
+			this.url=window.location.href;
+			this.get_wx_config();
+		},
+	}
+</script>
+
+<style>
+</style>

+ 95 - 0
components/Tabbar.vue

@@ -0,0 +1,95 @@
+<template >
+	<view>
+		<u-tabbar v-model="myCurrent" :list="tabbarList" 
+		:before-switch="beforeSwitch" active-color="#1F4A99"  ></u-tabbar>
+		
+	</view>
+</template>
+
+<script>
+ 	
+ 	export default {
+		name:"tabbarJob",
+		props:{
+			current: 0,
+			elderStatus: false
+		},
+		data() {
+			return {
+				activeColor:"#1F4A99",
+				oldindex:this.current,
+				 myCurrent:this.current,
+				 tabbarList: [
+					 {
+					 
+				 		iconPath: "home",
+				 		selectedIconPath: "home-fill",
+				 		text: '主页 ',
+						pagePath2:"/",
+						login:false,
+				 	},
+					{
+					 
+						iconPath: "heart",
+						selectedIconPath: "heart-fill",
+						text: '职工之家 ',
+						pagePath2:"/pages/staffHome/staffHome",
+					
+					},
+				 	{
+				 		iconPath: "account",
+				 		selectedIconPath: "account-fill",
+				 		text: '我的',
+						login:true,
+						pagePath2:"/pages/mine/mine",
+				 	}
+			 ],
+			};
+			
+		},methods:{
+			setcount(c){
+				//this.myCurrent=c
+			},
+			beforeSwitch(index){
+			
+				var bl=false
+				
+				if(index==this.current){
+					
+					return false
+				}
+				//this.myCurrent=index
+				var url =this.tabbarList[index].pagePath2;
+				
+				if(this.tabbarList[index].login){
+					var userInfo=this.carhelp.getPersonInfo()
+					if(userInfo){
+						
+					}else{
+						url="/pages/login/index"
+						bl=true	
+					}
+					
+				}
+				uni.navigateTo({
+					url: url
+				})
+			
+				
+				
+			},
+			
+		},
+		mounted(){
+			
+		},destroyed(){
+			
+		}
+		
+		
+	}
+</script>
+
+<style>
+	 
+</style>

+ 227 - 0
components/limeClipper/README.md

@@ -0,0 +1,227 @@
+> 插件来源:[https://ext.dcloud.net.cn/plugin?id=3594](https://ext.dcloud.net.cn/plugin?id=3594)
+##### 以下是作者写的插件介绍:
+
+# Clipper 图片裁剪
+> uniapp 图片裁剪,可用于图片头像等裁剪处理
+> [查看更多](http://liangei.gitee.io/limeui/#/clipper) <br>
+> Q群:458377637
+
+
+## 平台兼容
+
+| H5  | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | App |
+| --- | ---------- | ------------ | ---------- | ---------- | --------- | --- |
+| √   | √          | √         | 未测       | √          | √      | √   |
+
+
+## 代码演示
+### 基本用法
+`@success` 事件点击 👉 **确定** 后会返回生成的图片信息,包含 `url`、`width`、`height`
+
+```html
+<image :src="url" v-if="url" mode="widthFix"></image>
+<l-clipper v-if="show" @success="url = $event.url; show = false" @cancel="show = false"  ></l-clipper>
+<button @tap="show = true">裁剪</button>
+```
+
+```js
+// 非uni_modules引入
+import lClipper from '@/components/lime-clipper/'
+// uni_modules引入
+import lClipper from '@/uni_modules/lime-clipper/components/lime-clipper/'
+export default {
+	components: {lClipper},
+    data() {
+        return {
+            show: false,
+			url: '',
+        }
+    }
+}
+```
+
+
+### 传入图片
+`image-url`可传入**相对路径**、**临时路径**、**本地路径**、**网络图片**<br>
+
+* **当为网络地址时**
+* H5:👉 需要解决跨域问题。 <br>
+* 小程序:👉 需要配置 downloadFile 域名 <br>
+
+
+```html
+<image :src="url" v-if="url" mode="widthFix"></image>
+<l-clipper v-if="show" :image-url="imageUrl"  @success="url = $event.url; show = false" @cancel="show = false"  ></l-clipper>
+<button @tap="show = true">裁剪</button>
+```
+
+```js
+export default {
+	components: {lClipper},
+    data() {
+        return {
+			imageUrl: 'https://img12.360buyimg.com/pop/s1180x940_jfs/t1/97205/26/1142/87801/5dbac55aEf795d962/48a4d7a63ff80b8b.jpg',
+            show: false,
+			url: '',
+        }
+    }
+}
+```
+
+
+### 确定按钮颜色
+样式变量名:`--l-clipper-confirm-color`
+可放到全局样式的 `page` 里或节点的 `style`
+```html
+<l-clipper class="clipper" style="--l-clipper-confirm-color: linear-gradient(to right, #ff6034, #ee0a24)"  ></l-clipper>
+```
+```css
+// css 中为组件设置 CSS 变量
+.clipper {
+	--l-clipper-confirm-color: linear-gradient(to right, #ff6034, #ee0a24)
+}
+// 全局
+page {
+	--l-clipper-confirm-color: linear-gradient(to right, #ff6034, #ee0a24)
+}
+```
+
+
+### 使用插槽
+共五个插槽 `cancel` 取消按钮、 `photo` 选择图片按钮、 `rotate` 旋转按钮、 `confirm` 确定按钮和默认插槽。
+
+```html
+<image :src="url" v-if="url" mode="widthFix"></image>
+<l-clipper 
+	v-if="show" 
+	:isLockWidth="isLockWidth"
+	:isLockHeight="isLockHeight"
+	:isLockRatio="isLockRatio"
+	:isLimitMove="isLimitMove"
+	:isDisableScale="isDisableScale"
+	:isDisableRotate="isDisableRotate"
+	:isShowCancelBtn="isShowCancelBtn"
+	:isShowPhotoBtn="isShowPhotoBtn"
+	:isShowRotateBtn="isShowRotateBtn"
+	:isShowConfirmBtn="isShowConfirmBtn"
+	@success="url = $event.url; show = false" 
+	@cancel="show = false" >
+	<!-- 四个基本按钮插槽 -->
+	<view slot="cancel">取消</view>
+	<view slot="photo">选择图片</view>
+	<view slot="rotate">旋转</view>
+	<view slot="confirm">确定</view>
+	<!-- 默认插槽 -->
+	<view class="tools">
+		<view>显示取消按钮
+			<switch :checked="isShowCancelBtn" @change="isShowCancelBtn = $event.target.value" ></switch>
+		</view>
+		<view>显示选择图片按钮
+			<switch :checked="isShowPhotoBtn" @change="isShowPhotoBtn = $event.target.value" ></switch>
+		</view>
+		<view>显示旋转按钮
+			<switch :checked="isShowRotateBtn" @change="isShowRotateBtn = $event.target.value" ></switch>
+		</view>
+		<view>显示确定按钮
+			<switch :checked="isShowConfirmBtn" @change="isShowConfirmBtn = $event.target.value" ></switch>
+		</view>
+		<view>锁定裁剪框宽度
+			<switch :checked="isLockWidth" @change="isLockWidth = $event.target.value" ></switch>
+		</view>
+		<view>锁定裁剪框高度
+			<switch :checked="isLockHeight" @change="isLockHeight = $event.target.value" ></switch>
+		</view>
+		<view>锁定裁剪框比例
+			<switch :checked="isLockRatio" @change="isLockRatio = $event.target.value" ></switch>
+		</view>
+		<view>限制移动范围
+			<switch :checked="isLimitMove" @change="isLimitMove = $event.target.value" ></switch>
+		</view>
+		<view>禁止缩放
+			<switch :checked="isDisableScale" @change="isDisableScale = $event.target.value" ></switch>
+		</view>
+		<view>禁止旋转
+			<switch :checked="isDisableRotate" @change="isDisableRotate = $event.target.value" ></switch>
+		</view>
+	</view>
+</l-clipper>
+<button @tap="show = true">裁剪</button>
+```
+
+```js
+export default {
+	components: {lClipper},
+    data() {
+        return {
+            show: false,
+            url: '',
+            isLockWidth: false,
+            isLockHeight: false,
+            isLockRatio: true,
+            isLimitMove: false,
+            isDisableScale: false,
+            isDisableRotate: false,
+            isShowCancelBtn: true,
+            isShowPhotoBtn: true,
+            isShowRotateBtn: true,
+            isShowConfirmBtn: true
+        }
+    }
+}
+```
+
+
+## API
+
+### Props
+
+| 参数           | 说明         | 类型             | 默认值       |
+| ------------- | ------------ | ---------------- | ------------ |
+| image-url     | 图片路径     | <em>string</em>   |              |
+| quality       | 图片的质量,取值范围为 [0, 1],不在范围内时当作1处理   | <em>number</em>  |    `1`      |
+| source       | `{album: '从相册中选择'}`key为图片来源类型,value为选项说明   | <em>Object</em>  |         |
+| width | 裁剪框宽度,单位为 `rpx` | <em>number</em> | `400`      |
+| height | 裁剪框高度 | <em>number</em> | `400`      |
+| min-width | 裁剪框最小宽度 | <em>number</em> | `200`      |
+| min-height |裁剪框最小高度 | <em>number</em> | `200`  |
+| max-width | 裁剪框最大宽度 | <em>number</em> | `600`  |
+| max-height | 裁剪框最大宽度 | <em>number</em> | `600`  |
+| min-ratio | 图片最小缩放比 | <em>number</em> | `0.5`  |
+| max-ratio | 图片最大缩放比 | <em>number</em> | `2`  |
+| rotate-angle | 旋转按钮每次旋转的角度 | <em>number</em> | `90`  |
+| scale-ratio | 生成图片相对于裁剪框的比例, **比例越高生成图片越清晰**	 | <em>number</em> | `1`  |
+| is-lock-width | 是否锁定裁剪框宽度 | <em>boolean</em> | `false`  |
+| is-lock-height | 是否锁定裁剪框高度上 | <em>boolean</em> | `false`  |
+| is-lock-ratio | 是否锁定裁剪框比例 | <em>boolean</em> | `true`  |
+| is-disable-scale | 是否禁止缩放 | <em>boolean</em> | `false`  |
+| is-disable-rotate | 是否禁止旋转 | <em>boolean</em> | `false`  |
+| is-limit-move | 是否限制移动范围 | <em>boolean</em> | `false`  |
+| is-show-photo-btn | 是否显示选择图片按钮 | <em>boolean</em> | `true`  |
+| is-show-rotate-btn | 是否显示转按钮 | <em>boolean</em> | `true`  |
+| is-show-confirm-btn | 是否显示确定按钮 | <em>boolean</em> | `true`  |
+| is-show-cancel-btn | 是否显示关闭按钮 | <em>boolean</em> | `true`  |
+
+
+
+### 事件 Events
+
+| 事件名  | 说明         | 回调           |
+| ------- | ------------ | -------------- |
+| success | 生成图片成功 | {`width`, `height`, `url`} |
+| fail | 生成图片失败 | `error` |
+| cancel | 关闭 | `false` |
+| ready   | 图片加载完成 | {`width`, `height`, `path`, `orientation`, `type`} |
+| change | 图片大小改变时触发 | {`width`, `height`} |
+| rotate | 图片旋转时触发 | `angle` |
+
+## 常见问题
+> 1、H5端使用网络图片需要解决跨域问题。<br>
+> 2、小程序使用网络图片需要去公众平台增加下载白名单!二级域名也需要配!<br>
+> 3、H5端生成图片是base64,有时显示只有一半可以使用原生标签`<IMG/>`<br>
+> 4、IOS APP 请勿使用HBX2.9.3.20201014的版本!这个版本无法生成图片。<br>
+> 5、APP端无成功反馈、也无失败反馈时,请更新基座和HBX。<br>
+
+
+## 打赏
+如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。<br>
+![输入图片说明](https://images.gitee.com/uploads/images/2020/1122/222521_bb543f96_518581.jpeg "微信图片编辑_20201122220352.jpg")

+ 19 - 0
components/limeClipper/images/photo.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#606060;}
+	.st1{fill:none;stroke:#FFFFFF;stroke-width:2.4306;stroke-miterlimit:10;}
+	.st2{fill:#FFFFFF;}
+</style>
+<g>
+	<path class="st2" d="M11.6,11c0.4,0.4,0.6,0.9,0.6,1.5c0,0.6-0.2,1.1-0.6,1.4c-0.4,0.4-0.9,0.6-1.5,0.6c-0.6,0-1.1-0.2-1.5-0.6
+		c-0.4-0.4-0.6-0.9-0.6-1.4s0.2-1.1,0.6-1.5c0.4-0.4,0.9-0.6,1.5-0.6C10.8,10.4,11.2,10.6,11.6,11z M24.6,18.4V6.7H5.4v12l1.8-1.8
+		c0.3-0.3,0.6-0.4,1-0.4c0.4,0,0.7,0.1,1,0.4l1.8,1.8l5.8-7c0.3-0.3,0.6-0.5,1.1-0.5c0.4,0,0.8,0.2,1.1,0.5
+		C18.8,11.6,24.6,18.4,24.6,18.4z M25.6,5.7C25.9,6,26,6.3,26,6.7v16.1c0,0.4-0.1,0.7-0.4,1c-0.3,0.3-0.6,0.4-1,0.4H5.4
+		c-0.4,0-0.7-0.1-1-0.4c-0.3-0.3-0.4-0.6-0.4-1V6.7c0-0.4,0.1-0.7,0.4-1c0.3-0.3,0.6-0.4,1-0.4h19.3C25,5.3,25.3,5.4,25.6,5.7z"/>
+	<path class="st1" d="M24.3,21.5H5.7c-0.2,0-0.3-0.2-0.3-0.3V7c0-0.2,0.2-0.3,0.3-0.3h18.6c0.2,0,0.3,0.2,0.3,0.3v14.2
+		C24.6,21.3,24.5,21.5,24.3,21.5z"/>
+</g>
+</svg>

+ 15 - 0
components/limeClipper/images/rotate.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="30px" height="30px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:none;stroke:#FFFFFF;stroke-width:2.4306;stroke-miterlimit:10;}
+	.st1{fill:#FFFFFF;}
+</style>
+<g>
+	<path class="st0" d="M17.1,24.2h-12c-0.2,0-0.3-0.2-0.3-0.3v-9.3c0-0.2,0.2-0.3,0.3-0.3h12c0.2,0,0.3,0.2,0.3,0.3v9.3
+		C17.5,24.1,17.3,24.2,17.1,24.2z"/>
+	<path class="st0" d="M16.6,5.4c4.8,0,8.7,3.9,8.7,8.7"/>
+	<polyline class="st0" points="19.3,10.1 14.9,5.6 19.3,1.2 	"/>
+</g>
+</svg>

+ 160 - 0
components/limeClipper/index.css

@@ -0,0 +1,160 @@
+.flex-auto {
+  flex: auto;
+}
+.bg-transparent {
+  background-color: rgba(0,0,0,0.9);
+  transition-duration: 0.35s;
+}
+.l-clipper {
+  width: 100vw;
+  height: calc(100vh - var(--window-top));
+  background-color: rgba(0,0,0,0.9);
+  position: fixed;
+  top: var(--window-top);
+  left: 0;
+  z-index: 1;
+}
+.l-clipper-mask {
+  position: relative;
+  z-index: 2;
+  pointer-events: none;
+}
+.l-clipper__content {
+  pointer-events: none;
+  position: absolute;
+  border: 1rpx solid rgba(255,255,255,0.3);
+  box-sizing: border-box;
+  box-shadow: rgba(0,0,0,0.5) 0 0 0 80vh;
+  background: transparent;
+}
+.l-clipper__content::before,
+.l-clipper__content::after {
+  content: '';
+  position: absolute;
+  border: 1rpx dashed rgba(255,255,255,0.3);
+}
+.l-clipper__content::before {
+  width: 100%;
+  top: 33.33%;
+  height: 33.33%;
+  border-left: none;
+  border-right: none;
+}
+.l-clipper__content::after {
+  width: 33.33%;
+  left: 33.33%;
+  height: 100%;
+  border-top: none;
+  border-bottom: none;
+}
+.l-clipper__edge {
+  position: absolute;
+  width: 34rpx;
+  height: 34rpx;
+  border: 6rpx solid #fff;
+  pointer-events: auto;
+}
+.l-clipper__edge::before {
+  content: '';
+  position: absolute;
+  width: 40rpx;
+  height: 40rpx;
+  background-color: transparent;
+}
+.l-clipper__edge:nth-child(1) {
+  left: -6rpx;
+  top: -6rpx;
+  border-bottom-width: 0 !important;
+  border-right-width: 0 !important;
+}
+.l-clipper__edge:nth-child(1):before {
+  top: -50%;
+  left: -50%;
+}
+.l-clipper__edge:nth-child(2) {
+  right: -6rpx;
+  top: -6rpx;
+  border-bottom-width: 0 !important;
+  border-left-width: 0 !important;
+}
+.l-clipper__edge:nth-child(2):before {
+  top: -50%;
+  left: 50%;
+}
+.l-clipper__edge:nth-child(3) {
+  left: -6rpx;
+  bottom: -6rpx;
+  border-top-width: 0 !important;
+  border-right-width: 0 !important;
+}
+.l-clipper__edge:nth-child(3):before {
+  bottom: -50%;
+  left: -50%;
+}
+.l-clipper__edge:nth-child(4) {
+  right: -6rpx;
+  bottom: -6rpx;
+  border-top-width: 0 !important;
+  border-left-width: 0 !important;
+}
+.l-clipper__edge:nth-child(4):before {
+  bottom: -50%;
+  left: 50%;
+}
+.l-clipper-image {
+  width: 100%;
+  border-style: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  transform-origin: center;
+}
+.l-clipper-canvas {
+  position: fixed;
+  z-index: 10;
+  left: -200vw;
+  top: -200vw;
+  pointer-events: none;
+}
+.l-clipper-tools {
+  position: fixed;
+  left: 0;
+  bottom: 10px;
+  width: 100%;
+  z-index: 99;
+  color: #fff;
+}
+.l-clipper-tools__btns {
+  font-weight: bold;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  width: 100%;
+  padding: 20rpx 40rpx;
+  box-sizing: border-box;
+}
+.l-clipper-tools__btns .cancel {
+  width: 112rpx;
+  height: 60rpx;
+  text-align: center;
+  line-height: 60rpx;
+}
+.l-clipper-tools__btns .confirm {
+  width: 112rpx;
+  height: 60rpx;
+  line-height: 60rpx;
+  background-color: #07c160;
+  border-radius: 6rpx;
+  text-align: center;
+}
+.l-clipper-tools__btns image {
+  display: block;
+  width: 60rpx;
+  height: 60rpx;
+}
+.l-clipper-tools__btns {
+  flex-direction: row;
+}

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است