zhengkaixin 2 سال پیش
کامیت
d8d6dd002a
100فایلهای تغییر یافته به همراه2545 افزوده شده و 0 حذف شده
  1. 2 0
      .gitignore
  2. 85 0
      App.vue
  3. 184 0
      apis/common.js
  4. 206 0
      apis/index.js
  5. 59 0
      apis/login.js
  6. 20 0
      apis/utils/AMap.js
  7. 31 0
      apis/utils/alipay.js
  8. 406 0
      apis/utils/index.js
  9. 101 0
      apis/utils/init.js
  10. 45 0
      apis/utils/initALI.js
  11. 130 0
      apis/utils/mixin-student.js
  12. 130 0
      apis/utils/mixin.js
  13. 94 0
      apis/utils/request.js
  14. 59 0
      apis/utils/requestNum.js
  15. 69 0
      apis/utils/requestSon.js
  16. 94 0
      apis/utils/requestStudent.js
  17. 94 0
      apis/utils/requestTeacher.js
  18. 76 0
      apis/utils/requestWhite.js
  19. 236 0
      apis/utils/wxJsApi.js
  20. 52 0
      apis/utils/wxpay.js
  21. 69 0
      apis/weixin.js
  22. 0 0
      assets/css/style.css
  23. 250 0
      assets/font/iconfont.css
  24. 7 0
      assets/font/jptime.css
  25. BIN
      assets/font/jptime.otf
  26. 22 0
      assets/icon/icon.vue
  27. BIN
      assets/img/Frame915.png
  28. BIN
      assets/img/Group (2).png
  29. BIN
      assets/img/JPG Copy@1x.png
  30. BIN
      assets/img/XLS Copy@1x.png
  31. 1 0
      assets/img/account-circle-fill.svg
  32. 6 0
      assets/img/antFill-crown2.svg
  33. BIN
      assets/img/antFill-crown@3x.png
  34. 1 0
      assets/img/cake-2-fill.svg
  35. 1 0
      assets/img/camera-fill.svg
  36. 1 0
      assets/img/car-fill.svg
  37. BIN
      assets/img/card@3.png
  38. BIN
      assets/img/card_normal.png
  39. BIN
      assets/img/card_operate.png
  40. BIN
      assets/img/charge.png
  41. BIN
      assets/img/circle.png
  42. BIN
      assets/img/classify1.png
  43. BIN
      assets/img/classschedule.png
  44. BIN
      assets/img/companyVIP.png
  45. BIN
      assets/img/coupons.png
  46. BIN
      assets/img/course.png
  47. BIN
      assets/img/courseD.png
  48. BIN
      assets/img/cover@3.png
  49. 1 0
      assets/img/customer-service-2-line.svg
  50. BIN
      assets/img/detaiimg.png
  51. 1 0
      assets/img/edit-box-fill.svg
  52. BIN
      assets/img/editPhoto.png
  53. BIN
      assets/img/fas fa-camera Copy@1x(1).png
  54. BIN
      assets/img/fas fa-camera Copy@1x.png
  55. BIN
      assets/img/fas fa-graduation-cap@1x.png
  56. BIN
      assets/img/fas fa-phone@3x.png
  57. BIN
      assets/img/finished.png
  58. BIN
      assets/img/head.png
  59. BIN
      assets/img/headPortrait.png
  60. BIN
      assets/img/icon_success.png
  61. BIN
      assets/img/iconfont-unie122 3 Copy@1x.png
  62. BIN
      assets/img/if-close-line-circled.png
  63. 6 0
      assets/img/if-flash.svg
  64. BIN
      assets/img/logout.png
  65. BIN
      assets/img/md-camera_alt@1x(1).png
  66. BIN
      assets/img/md-camera_alt@1x.png
  67. BIN
      assets/img/md-cancel@3x.png
  68. BIN
      assets/img/minePhoto.png
  69. BIN
      assets/img/photo2.png
  70. BIN
      assets/img/photo@1x.png
  71. BIN
      assets/img/photomine.png
  72. BIN
      assets/img/photowoman.png
  73. BIN
      assets/img/picture1.png
  74. BIN
      assets/img/reason.png
  75. BIN
      assets/img/result.png
  76. BIN
      assets/img/resultP.png
  77. BIN
      assets/img/riFill-award-fill@1x.png
  78. BIN
      assets/img/riFill-bank-card-fill@1x.png
  79. BIN
      assets/img/riFill-building-fill@3x.png
  80. BIN
      assets/img/riFill-building-fill@4x.png
  81. BIN
      assets/img/riFill-calendar-2-fill@1x.png
  82. BIN
      assets/img/riFill-calendar-todo-fill@1x.png
  83. BIN
      assets/img/riFill-cellphone-fill@1x.png
  84. BIN
      assets/img/riFill-contacts-book-fill@1x.png
  85. 6 0
      assets/img/riFill-coupon-3-fill.svg
  86. BIN
      assets/img/riFill-feedback-fill@1x.png
  87. BIN
      assets/img/riFill-file-edit-fill@1x.png
  88. BIN
      assets/img/riFill-folder-user-fill@1x(1).png
  89. BIN
      assets/img/riFill-folder-user-fill@1x.png
  90. BIN
      assets/img/riFill-lock-password-fill@1x.png
  91. BIN
      assets/img/riFill-mail-fill@1x.png
  92. BIN
      assets/img/riFill-mark-pen-fill@1x.png
  93. BIN
      assets/img/riFill-navigation-fill@1x.png
  94. BIN
      assets/img/riFill-notification-3-fill@1x.png
  95. BIN
      assets/img/riFill-notification-4-fill@1x.png
  96. BIN
      assets/img/riFill-quill-pen-fill@1x.png
  97. BIN
      assets/img/riFill-stack-fill@1x.png
  98. BIN
      assets/img/riFill-star-fill@1x.png
  99. BIN
      assets/img/riFill-temp-cold-fill@1x.png
  100. BIN
      assets/img/riFill-time-fill@1x.png

+ 2 - 0
.gitignore

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

+ 85 - 0
App.vue

@@ -0,0 +1,85 @@
+<style lang="scss">
+	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
+	@import "@/uni_modules/uview-ui/index.scss";
+</style>
+<script>
+	import './config/.env.js'
+	import './assets/js/font.js'
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+			document.title="启航教培管家"
+			
+		},
+		onShow: function() {
+			
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+	html, body {
+	  background-color: #F2F4F4;  
+	  margin: 0;
+	  padding: 0;
+	} ygff
+	// 后退图标
+	.back{
+		display: inline-block;
+		font-size: 18px;
+		float: left;
+		margin-left: 11px;
+	}
+	.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;
+	}
+	@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
+	}
+	
+	/deep/.u-divider{
+		  background-color: #F2F4F4 !important;  
+		  
+		  
+		  
+	}
+	/deep/.u-divider-text{
+		  color: rgba(182, 189, 195, 1) !important;
+		  font-size: 12px !important;
+	}
+</style>

+ 184 - 0
apis/common.js

@@ -0,0 +1,184 @@
+import request from '@/apis/utils/request'
+ 
+import Qs from 'qs';
+
+
+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',
+	})
+}

+ 206 - 0
apis/index.js

@@ -0,0 +1,206 @@
+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) {
+	//http://localhost:8080/#/?jpcode=jp_team51_charge_id:A_111
+	var res=url
+	
+	
+	if(url&&url.indexOf("#/?jpcode=")>-1){
+		res=url.split("#/?jpcode=")[1]
+	}
+	if(url&&url.indexOf("#/?gunId=")>-1){
+		var gunId=url.split("#/?gunId=")[1]
+		res="jp_team51_charge_id:A_"+gunId
+	}
+	
+	
+	if(res&&res.length>22){
+		
+	}else if(res == 'toLogin') {
+		return	'/pages/login/login'
+	}else{
+		return false
+	}
+	var str1 = res.slice(0,19);
+	var str2 = res.slice(20,21);
+	var id = res.slice(22);
+	
+	if(str1 == 'jp_team51_charge_id') {
+		if(str2 == 'A') {
+			//carhelp.setGunId(id)
+			return	 '/pages/searchPile/stationAndPile/chargingPileDetails?id=' + id	
+		}
+		if(str2 == 'B') {
+			return	'/pages/user/finance/rechargeRes?id=' + id
+		}
+	} else {
+		return false;
+	}
+}
+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
+	})
+} 

+ 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)
+	}
+}

+ 406 - 0
apis/utils/index.js

@@ -0,0 +1,406 @@
+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`
+
+ export const getWeixinRedirectURIInfo = (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;
+		}
+	}
+}
+
+
+const prefix = 'jp-employment-kfq_'+process.car.NODE_ENV;
+ 
+export const get = key => uni.getStorageInfoSync(prefix+key) 
+
+export const set = (key, value) => uni.setStorageInfoSync(prefix+key, value) 
+
+
+

+ 101 - 0
apis/utils/init.js

@@ -0,0 +1,101 @@
+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() {
+		 
+		if(isWeiXin()|| !(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.setToken(token);
+		 	 
+		 	} 
+		 }).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-student.js

@@ -0,0 +1,130 @@
+var prefix = 'jp-education-student-' + 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

+ 130 - 0
apis/utils/mixin.js

@@ -0,0 +1,130 @@
+var prefix = 'jp-education-teacher' + 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

+ 94 - 0
apis/utils/request.js

@@ -0,0 +1,94 @@
+import  carhelp from '@/apis/utils/mixin.js'
+import requestSon from './requestSon.js';
+import requestNum from './requestNum.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/login';
+				
+				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

+ 59 - 0
apis/utils/requestNum.js

@@ -0,0 +1,59 @@
+import  carhelp from '@/apis/utils/mixin.js'
+
+//记录请求次数和响应次数
+let reqCount = 0,
+	resCount = 0;
+var baseUrl=process.car.BASE_URL;
+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: 'post',
+			url: baseUrl + '/mobile/messageApi/readMessageNum',
+			//data: options.data?options.data:{},
+			
+			header: {
+				'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 != 200) {
+				reject(res.data.message)
+			} else {
+				if(!res.data.result){
+					uni.showToast({
+						title: res.data.message,
+						position:'bottom'
+					})
+					reject(res.data.message);
+				}else{
+					
+					carhelp.set("tabbar_show_num",res.data.data);
+					resolve(res.data);
+				}
+			
+			}
+		}).catch(error => {
+			resCount++
+		
+			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

+ 94 - 0
apis/utils/requestStudent.js

@@ -0,0 +1,94 @@
+import  carhelp from '@/apis/utils/mixin-student.js'
+import requestSon from './requestSon.js';
+import requestNum from './requestNum.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/login';
+				
+				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

+ 94 - 0
apis/utils/requestTeacher.js

@@ -0,0 +1,94 @@
+import  carhelp from '@/apis/utils/mixin.js'
+import requestSon from './requestSon.js';
+import requestNum from './requestNum.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/login';
+				
+				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

+ 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)
+	}
+}

+ 69 - 0
apis/weixin.js

@@ -0,0 +1,69 @@
+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',
+	})
+}

+ 0 - 0
assets/css/style.css


+ 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/Frame915.png


BIN
assets/img/Group (2).png


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


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


+ 1 - 0
assets/img/account-circle-fill.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#00B962" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2c5.52 0 10 4.48 10 10s-4.48 10-10 10S2 17.52 2 12 6.48 2 12 2zM6.023 15.416C7.491 17.606 9.695 19 12.16 19c2.464 0 4.669-1.393 6.136-3.584A8.968 8.968 0 0 0 12.16 13a8.968 8.968 0 0 0-6.137 2.416zM12 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/></svg>

+ 6 - 0
assets/img/antFill-crown2.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="64 64 896 896" width="12" height="12" style="border-color: rgba(0,0,0,0);border-width: bpx;border-style: undefined" filter="none">
+    
+    <g>
+    <path d="M899.6 276.5L705 396.4 518.4 147.5a8.06 8.06 0 0 0-12.9 0L319 396.4 124.3 276.5c-5.7-3.5-13.1 1.2-12.2 7.9L188.5 865c1.1 7.9 7.9 14 16 14h615.1c8 0 14.9-6 15.9-14l76.4-580.6c.8-6.7-6.5-11.4-12.3-7.9zM512 734.2c-62.1 0-112.6-50.5-112.6-112.6S449.9 509 512 509s112.6 50.5 112.6 112.6S574.1 734.2 512 734.2zm0-160.9c-26.6 0-48.2 21.6-48.2 48.3 0 26.6 21.6 48.3 48.2 48.3s48.2-21.6 48.2-48.3c0-26.6-21.6-48.3-48.2-48.3z" fill="rgba(42.075,44.114999999999995,48.96,1)"></path>
+    </g>
+  </svg>

BIN
assets/img/antFill-crown@3x.png


+ 1 - 0
assets/img/cake-2-fill.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#00B962" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M8 6v3.999h3V6h2v3.999h3V6h2v3.999L19 10a3 3 0 0 1 2.995 2.824L22 13v1c0 1.014-.377 1.94-.999 2.645L21 21a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-4.36a4.025 4.025 0 0 1-.972-2.182l-.022-.253L2 14v-1a3 3 0 0 1 2.824-2.995L5 10l1-.001V6h2zm11 6H5a1 1 0 0 0-.993.883L4 13v.971l.003.147A2 2 0 0 0 6 16a1.999 1.999 0 0 0 1.98-1.7l.015-.153.005-.176c.036-1.248 1.827-1.293 1.989-.134l.01.134.004.147a2 2 0 0 0 3.992.031l.012-.282c.124-1.156 1.862-1.156 1.986 0l.012.282a2 2 0 0 0 3.99 0L20 14v-1a1 1 0 0 0-.883-.993L19 12zM7 1c1.32.871 1.663 2.088 1.449 2.888a1.5 1.5 0 0 1-2.898-.776C5.85 2.002 7 2.5 7 1zm5 0c1.32.871 1.663 2.088 1.449 2.888a1.5 1.5 0 1 1-2.898-.776C10.85 2.002 12 2.5 12 1zm5 0c1.32.871 1.663 2.088 1.449 2.888a1.5 1.5 0 1 1-2.898-.776C15.85 2.002 17 2.5 17 1z"/></svg>

+ 1 - 0
assets/img/camera-fill.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#ffffff" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M9 3h6l2 2h4a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h4l2-2zm3 16a6 6 0 1 0 0-12 6 6 0 0 0 0 12zm0-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/></svg>

+ 1 - 0
assets/img/car-fill.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#00B962" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M19 20H5v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-9l2.513-6.702A2 2 0 0 1 6.386 4h11.228a2 2 0 0 1 1.873 1.298L22 12v9a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1zM4.136 12h15.728l-2.25-6H6.386l-2.25 6zM6.5 17a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm11 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/></svg>

BIN
assets/img/card@3.png


BIN
assets/img/card_normal.png


BIN
assets/img/card_operate.png


BIN
assets/img/charge.png


BIN
assets/img/circle.png


BIN
assets/img/classify1.png


BIN
assets/img/classschedule.png


BIN
assets/img/companyVIP.png


BIN
assets/img/coupons.png


BIN
assets/img/course.png


BIN
assets/img/courseD.png


BIN
assets/img/cover@3.png


+ 1 - 0
assets/img/customer-service-2-line.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M19.938 8H21a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-1.062A8.001 8.001 0 0 1 12 23v-2a6 6 0 0 0 6-6V9A6 6 0 1 0 6 9v7H3a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1.062a8.001 8.001 0 0 1 15.876 0zM3 10v4h1v-4H3zm17 0v4h1v-4h-1zM7.76 15.785l1.06-1.696A5.972 5.972 0 0 0 12 15a5.972 5.972 0 0 0 3.18-.911l1.06 1.696A7.963 7.963 0 0 1 12 17a7.963 7.963 0 0 1-4.24-1.215z"/></svg>

BIN
assets/img/detaiimg.png


+ 1 - 0
assets/img/edit-box-fill.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="#00B962" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.757 3l-7.466 7.466.008 4.247 4.238-.007L21 7.243V20a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h12.757zm3.728-.9L21.9 3.516l-9.192 9.192-1.412.003-.002-1.417L20.485 2.1z"/></svg>

BIN
assets/img/editPhoto.png


BIN
assets/img/fas fa-camera Copy@1x(1).png


BIN
assets/img/fas fa-camera Copy@1x.png


BIN
assets/img/fas fa-graduation-cap@1x.png


BIN
assets/img/fas fa-phone@3x.png


BIN
assets/img/finished.png


BIN
assets/img/head.png


BIN
assets/img/headPortrait.png


BIN
assets/img/icon_success.png


BIN
assets/img/iconfont-unie122 3 Copy@1x.png


BIN
assets/img/if-close-line-circled.png


+ 6 - 0
assets/img/if-flash.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="28" height="28" style="border-color: rgba(187,187,187,1);border-width: 0px;border-style: solid" filter="none">
+    
+    <g>
+    <path d="M15.488 14.656h8.192c-3.872 5.152-7.744 10.24-11.584 15.36l-0.064-0.032c1.408-3.84 2.784-7.648 4.224-11.552-2.656 0.128-5.248 0.224-7.936 0.352 3.936-5.632 7.84-11.2 11.744-16.8l0.064 0.032c-1.536 4.192-3.072 8.416-4.64 12.64z" fill="rgba(0,184.875,97.92,1)"></path>
+    </g>
+  </svg>

BIN
assets/img/logout.png


BIN
assets/img/md-camera_alt@1x(1).png


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


BIN
assets/img/md-cancel@3x.png


BIN
assets/img/minePhoto.png


BIN
assets/img/photo2.png


BIN
assets/img/photo@1x.png


BIN
assets/img/photomine.png


BIN
assets/img/photowoman.png


BIN
assets/img/picture1.png


BIN
assets/img/reason.png


BIN
assets/img/result.png


BIN
assets/img/resultP.png


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


BIN
assets/img/riFill-bank-card-fill@1x.png


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


BIN
assets/img/riFill-building-fill@4x.png


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


BIN
assets/img/riFill-calendar-todo-fill@1x.png


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


BIN
assets/img/riFill-contacts-book-fill@1x.png


+ 6 - 0
assets/img/riFill-coupon-3-fill.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="20" height="20" style="border-color: rgba(187,187,187,1);border-width: 0px;border-style: solid" filter="none">
+    
+    <g>
+    <path d="M14.667 28c0-1.105-0.895-2-2-2s-2 0.895-2 2v0h-6.667c-0.736 0-1.333-0.597-1.333-1.333v0-21.333c0-0.736 0.597-1.333 1.333-1.333v0h6.667c0 1.105 0.895 2 2 2s2-0.895 2-2v0h13.333c0.736 0 1.333 0.597 1.333 1.333v0 7.333c-1.841 0-3.333 1.492-3.333 3.333s1.492 3.333 3.333 3.333v0 7.333c0 0.736-0.597 1.333-1.333 1.333v0h-13.333zM12.667 14c1.105 0 2-0.895 2-2s-0.895-2-2-2v0c-1.105 0-2 0.895-2 2s0.895 2 2 2v0zM12.667 22c1.105 0 2-0.895 2-2s-0.895-2-2-2v0c-1.105 0-2 0.895-2 2s0.895 2 2 2v0z" fill="rgba(0,184.875,97.92,1)"></path>
+    </g>
+  </svg>

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


BIN
assets/img/riFill-file-edit-fill@1x.png


BIN
assets/img/riFill-folder-user-fill@1x(1).png


BIN
assets/img/riFill-folder-user-fill@1x.png


BIN
assets/img/riFill-lock-password-fill@1x.png


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


BIN
assets/img/riFill-mark-pen-fill@1x.png


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


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


BIN
assets/img/riFill-notification-4-fill@1x.png


BIN
assets/img/riFill-quill-pen-fill@1x.png


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


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


BIN
assets/img/riFill-temp-cold-fill@1x.png


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


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