zhengkaixin %!s(int64=3) %!d(string=hai) anos
achega
6779540d17
Modificáronse 100 ficheiros con 10553 adicións e 0 borrados
  1. 12 0
      .env.dev.js
  2. 35 0
      .env.js
  3. 11 0
      .env.prod.js
  4. 12 0
      .env.test.js
  5. 35 0
      App.vue
  6. 66 0
      README.md
  7. 184 0
      apis/common.js
  8. 16 0
      apis/hr/index.js
  9. 73 0
      apis/hr/my.js
  10. 35 0
      apis/hr/news.js
  11. 16 0
      apis/hr/resume.js
  12. 22 0
      apis/index.js
  13. 12 0
      apis/job/company.js
  14. 36 0
      apis/job/index.js
  15. 80 0
      apis/job/install.js
  16. 97 0
      apis/job/job.js
  17. 18 0
      apis/job/resume.js
  18. 74 0
      apis/login.js
  19. 70 0
      apis/my.js
  20. 36 0
      apis/weixin.js
  21. 153 0
      bobo-router/README.md
  22. 362 0
      bobo-router/bobo-router.js
  23. 68 0
      bobo-router/index.js
  24. 62 0
      components/Common.vue
  25. 83 0
      components/TabbarHr.vue
  26. 89 0
      components/TabbarJob.vue
  27. 153 0
      components/hr/ResumeItem.vue
  28. 127 0
      components/job/RecruitmentItem.vue
  29. 212 0
      components/job/ResumeAuth.vue
  30. 482 0
      components/job/addResume.js
  31. 169 0
      components/job/addResume.vue
  32. 292 0
      components/job/companyInfo.vue
  33. 472 0
      console.js
  34. 25 0
      font.js
  35. 49 0
      main.js
  36. 87 0
      manifest.json
  37. 56 0
      package.json
  38. 547 0
      pages.json
  39. 148 0
      pages/hr/index/index.js
  40. 142 0
      pages/hr/index/index.vue
  41. 28 0
      pages/hr/index/recruitInfo/index.js
  42. 196 0
      pages/hr/index/recruitInfo/recruitInfo.vue
  43. 79 0
      pages/hr/index/resumeInfo/index.js
  44. 220 0
      pages/hr/index/resumeInfo/resumeInfo.vue
  45. 104 0
      pages/hr/my/collection/collection.vue
  46. 88 0
      pages/hr/my/collection/index.js
  47. 75 0
      pages/hr/my/enroll/enroll.vue
  48. 121 0
      pages/hr/my/enroll/index.js
  49. 45 0
      pages/hr/my/follow/follow.vue
  50. 74 0
      pages/hr/my/follow/index.js
  51. 52 0
      pages/hr/my/index.js
  52. 70 0
      pages/hr/my/look/index.js
  53. 104 0
      pages/hr/my/look/look.vue
  54. 156 0
      pages/hr/my/my.vue
  55. 123 0
      pages/hr/my/position/index.js
  56. 120 0
      pages/hr/my/position/position.vue
  57. 88 0
      pages/hr/newsIndex/index.js
  58. 81 0
      pages/hr/newsIndex/newsEntry/index.js
  59. 120 0
      pages/hr/newsIndex/newsEntry/newsEntry.vue
  60. 59 0
      pages/hr/newsIndex/newsIndex.vue
  61. 68 0
      pages/hr/newsIndex/newsList/index.js
  62. 87 0
      pages/hr/newsIndex/newsList/newsList.vue
  63. 71 0
      pages/hr/newsIndex/newsRecommend/index.js
  64. 127 0
      pages/hr/newsIndex/newsRecommend/newsRecommend.vue
  65. 50 0
      pages/hr/newsIndex/servicesInfo/index.js
  66. 66 0
      pages/hr/newsIndex/servicesInfo/servicesInfo.vue
  67. 83 0
      pages/hr/newsIndex/servicesList/index.js
  68. 57 0
      pages/hr/newsIndex/servicesList/servicesList.vue
  69. 364 0
      pages/hr/query/index.js
  70. 160 0
      pages/hr/query/query.vue
  71. 27 0
      pages/hr/query/queryResult/index.js
  72. 15 0
      pages/hr/query/queryResult/queryResult.vue
  73. 27 0
      pages/index.js
  74. 45 0
      pages/index/index.js
  75. 28 0
      pages/index/index.vue
  76. 88 0
      pages/job/company/index.js
  77. 302 0
      pages/job/company/index.vue
  78. 282 0
      pages/job/index/companyInfo/companyInfo.vue
  79. 28 0
      pages/job/index/companyInfo/index.js
  80. 195 0
      pages/job/index/index.js
  81. 145 0
      pages/job/index/index.vue
  82. 176 0
      pages/job/index/recruitInfo/index.js
  83. 297 0
      pages/job/index/recruitInfo/recruitInfo.vue
  84. 84 0
      pages/job/newsIndex/index.js
  85. 82 0
      pages/job/newsIndex/newsEntry/index.js
  86. 131 0
      pages/job/newsIndex/newsEntry/newsEntry.vue
  87. 59 0
      pages/job/newsIndex/newsIndex.vue
  88. 28 0
      pages/job/newsIndex/newsInvitationBefore/index.js
  89. 111 0
      pages/job/newsIndex/newsInvitationBefore/newsInvitationBefore.vue
  90. 28 0
      pages/job/newsIndex/newsInvitationPhone/index.js
  91. 111 0
      pages/job/newsIndex/newsInvitationPhone/newsInvitationPhone.vue
  92. 68 0
      pages/job/newsIndex/newsList/index.js
  93. 87 0
      pages/job/newsIndex/newsList/newsList.vue
  94. 71 0
      pages/job/newsIndex/newsRecommend/index.js
  95. 68 0
      pages/job/newsIndex/newsRecommend/newsRecommend.vue
  96. 15 0
      pages/job/personal/about/about.vue
  97. 27 0
      pages/job/personal/about/index.js
  98. 28 0
      pages/job/personal/index.js
  99. 19 0
      pages/job/personal/install/account/account.vue
  100. 27 0
      pages/job/personal/install/account/index.js

+ 12 - 0
.env.dev.js

@@ -0,0 +1,12 @@
+const UNI_APP = {  
+	
+    BASE_URL: 'http://192.168.33.90:8086/jp-employment-server' ,
+	NODE_ENV :"dev",
+	SIMPLE_RUN:true,// 无视权限控制跳转页面   , 用于样式人员快速访问各种功能 ,快速测试等
+	openId:"oHjCawigqi8SEAwutwkQ-VEgdp3k",//测试用openId  
+	//openId:"oHjCawmHqG44pqUW54iBlenaHYB8",
+	//小鹏管家appid
+	VUE_APP_WXAPPID:"wx7e70eb62a8459869"
+}  
+
+module.exports = UNI_APP;

+ 35 - 0
.env.js

@@ -0,0 +1,35 @@
+(function() {  
+    const NODE_ENV = 'dev'; // dev:开发环境 | test:测试环境  
+    let ENV_VAR = null;  
+	 
+	var NODE_NAME=  process.env['NODE_NAME']
+	console.log(NODE_NAME)
+    if (process.env.NODE_ENV === "development") {  
+
+        if (NODE_ENV === 'dev') {  
+            ENV_VAR = require('.env.dev.js');  
+        } else if (NODE_ENV === 'test') {  
+			ENV_VAR = require('.env.test.js'); 
+        } else{
+			 ENV_VAR = require('.env.dev.js');  
+		}
+		
+    } else if (process.env.NODE_ENV === "production") {  
+		
+		if(NODE_NAME=="test"){
+			ENV_VAR = require('.env.test.js'); 
+		}else if(NODE_NAME=="production"){
+			ENV_VAR = require('.env.prod.js');
+		} else  {  
+			ENV_VAR = require('.env.prod.js');  
+		} 
+      
+    }  
+
+    if (ENV_VAR) {  
+		process.car = {};  
+        for (let key in ENV_VAR) {  
+			process.car[key] = ENV_VAR[key];			
+        }  
+    }  
+})();

+ 11 - 0
.env.prod.js

@@ -0,0 +1,11 @@
+const UNI_APP = {  
+	
+    BASE_URL: 'http://121.37.187.149/jp-employment-server' ,
+	NODE_ENV :"prod",
+	SIMPLE_RUN:false,
+	openId:"oHjCawigqi8SEAwutwkQ-VEgdp3k",//测试用openId
+	//小鹏管家appid
+	VUE_APP_WXAPPID:"wx7e70eb62a8459869"
+}  
+
+module.exports = UNI_APP;

+ 12 - 0
.env.test.js

@@ -0,0 +1,12 @@
+const UNI_APP = {  
+	//BASE_URL: 'http://192.168.33.120:8087/smart-bus-server/' ,
+    BASE_URL: 'http://121.37.187.149/jp-employment-server',
+	NODE_ENV :"test",
+	SIMPLE_RUN:false,
+	//openId:"oHjCawigqi8SEAwutwkQ-VEgdp3k",//测试用openId
+	openId:"oHjCawmHqG44pqUW54iBlenaHYB8",
+	//小鹏管家appid
+	VUE_APP_WXAPPID:"wx7e70eb62a8459869"
+}  
+
+module.exports = UNI_APP;

+ 35 - 0
App.vue

@@ -0,0 +1,35 @@
+<script>
+	import '.env.js'
+	import 'font.js'
+	export default {
+		onLaunch: function() {
+			
+			
+		},
+		onShow: function() {
+			
+		
+		},
+		onReady: function() {
+			console.log("aaa")
+		},
+		onHide: function() {
+			
+		},
+		methods:{
+			
+		} 
+	}
+</script>
+<style lang="scss">
+	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
+	@import "uview-ui/index.scss";
+	//
+	/*每个页面公共css */
+	//@import 'static/css/style.css';
+	@import 'static/font/iconfont.css';
+	.uni-icon-success-no-circle:before {
+	    content: "" !important ;
+		display: none;
+	}
+</style>

+ 66 - 0
README.md

@@ -0,0 +1,66 @@
+#  jp_employment_kfq  荆开求职在线
+
+## 运行与安装
+建议使用uniapp的官方推荐开发工具HBuilder最新版本
+
+## 目录结构
+~~~
+www  WEB部署目录(或者子目录)
+├─apis             接口目录
+├─components       组件目录
+├─config           配置目录
+├─pages            页面目录
+├─static           静态文件目录
+├─utils            工具模块目录
+├─App.vue          主入口组件
+├─main.js          主入口模块
+├─mainifest.json   项目配置
+├─pages.json       页面及其他公共配置
+├─uni.scss         控制应用的风格样式文件
+├─vue.config.js    vue配置,多不可用,具体参见文档https://uniapp.dcloud.io/collocation/vue-config
+~~~
+
+## 编码风格
+- 文件命名建议使用驼峰命名,其中首字母小写,名字要语义清晰
+- data内参数或者函数参数使用驼峰命名,关键参数或者有歧义的参数应该有参考备注
+- 页面的命名使用驼峰命名,而组件的命名则使用中划线命名,将两者能够更好的分别
+- 在页面内定义函数和参数需要有备注,定义此方法的含义及其使用, 生命周期函数推荐使用uni-app的内置自带函数,不推荐使用vue的生命函数
+- 在页面中使用this 推荐在全局置顶设置_this 这样会保持风格统一 且节省代码
+- 在页面头部起一行注释,表明这个页面是什么页面 
+- 以前的html标签改了很多,请参照官方文档使用
+`div 改成 view`
+`span、font 改成 text`
+`a 改成 navigator`
+`img 改成 image`
+`input 还在,但type属性改成了confirmtype`
+`form、button、checkbox、radio、label、textarea、canvas、video 这些还在。`
+`select 改成 picker`
+`iframe 改成 web-view`
+`ul、li没有了,都用view替代`
+
+##插件引用
+#控制台
+yarn add vconsole
+###uniapp 路由站
+npm install uni-simple-router uni-read-pages(取消使用, 存在h5 刷新白屏问题)
+//双路由   uni-crazy-router 直接链接访问, 无法触发前置占点
+[uni-crazy-router](https://ext.dcloud.net.cn/plugin?id=1658)
+[bobo-router ](https://ext.dcloud.net.cn/plugin?id=904)
+
+
+
+[vue-router-uni ](https://ext.dcloud.net.cn/plugin?id=605)
+[mac80端口问题无法使用](https://blog.csdn.net/weixin_41047933/article/details/97765502)
+sudo pfctl -ef /etc/pf-tomcat.conf
+
+
+redirectTo
+
+
+u-loadmore//加载更多
+
+[在线示例 uview](https://h5.uviewui.com/)
+
+	uni.showLoading({
+					    title: '加载中'
+					});

+ 184 - 0
apis/common.js

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

+ 16 - 0
apis/hr/index.js

@@ -0,0 +1,16 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+ 
+
+export function loadAllResumes(formData) {
+	return request({
+		url: '/mobile/recruiterApi/loadAllResumes',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+ 

+ 73 - 0
apis/hr/my.js

@@ -0,0 +1,73 @@
+ import request from '@/utils/request'
+  
+ import Qs from 'qs';
+ 
+ 
+ export function loadOwnRecruitments(data) {
+ 	return request({
+ 		url: '/mobile/recruiterApi/loadOwnRecruitments',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+export function pageListHR(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/userBrowseHrApi/pageListHR'
+		
+	})
+}
+
+ export function loadCollectResumes(data) {
+ 	return request({
+ 		url: '/mobile/recruiterApi/loadCollectResumes',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ export function getAboutMe(data) {
+ 	return request({
+ 		url: '/mobile/recruiterApi/getAboutMe',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+
+ export function publishRecruitment(data) {
+ 	return request({
+ 		url: '/mobile/recruiterApi/publishRecruitment',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ export function loadInterestList(data) {
+ 	return request({
+ 		url: '/mobile/recruiterApi/loadInterestList',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+
+
+export function loadJobManagement(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/recruiterApi/loadJobManagement'
+		
+	})
+}
+
+
+
+export function cancelCollectResume(id) {
+	return request({
+		method: 'post',
+		data: {
+			resumeId:id
+		},
+		url: '/mobile/recruiterApi/cancelCollectResume'
+		
+	})
+}

+ 35 - 0
apis/hr/news.js

@@ -0,0 +1,35 @@
+ import request from '@/utils/request'
+  
+ import Qs from 'qs';
+ 
+ 
+ export function getLabourList(data) {
+ 	return request({
+ 		url: '/mobile/labourApi/getLabourList',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ 
+ export function positionResumeList(data) {
+ 	return request({
+ 		url: '/mobile/resumeApi/positionResumeList',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ 
+ export function positionRecruitmentList(data) {
+ 	return request({
+ 		url: '/mobile/recruitmentApi/positionRecruitmentList',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ 
+ export function getLabourDetails(id) {
+ 	return request({
+ 		url: '/mobile/labourApi/getLabourDetails/'+id,
+ 		method: 'post',
+ 	})
+ }

+ 16 - 0
apis/hr/resume.js

@@ -0,0 +1,16 @@
+ import request from '@/utils/request'
+  
+ import Qs from 'qs';
+ 
+ 
+ export function collectResume(id,status) {
+  	return request({
+  		url: '/mobile/recruitmentApi/collectResumeHR',
+  		data: {
+			resumeId:id,
+			status:status
+		},
+  		method: 'post',
+  		
+  	})
+  }

+ 22 - 0
apis/index.js

@@ -0,0 +1,22 @@
+import request from '../utils/request.js';
+import Qs from 'qs';
+
+
+export function test(data) {
+	return request({
+		method: 'post',
+		data: data,
+		url: '/test/post'
+	})
+}
+
+//未读信息
+export function passengerMessageNoReadNum(data) {
+	
+	return request({
+		url: '/mobile/passengerApi/passengerMessageNoReadNum',
+		data:data,
+		method: 'post',
+	})
+}
+  

+ 12 - 0
apis/job/company.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+export function getCompanyList(data) {
+	return request({
+		url: '/mobile/recruitmentApi/getCompanyList',
+	 	data: data,
+		method: 'post',
+		
+	})
+}

+ 36 - 0
apis/job/index.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+// 
+ 
+
+export function getRecruitmentList(formData) {
+	return request({
+		url: '/mobile/recruitmentApi/getRecruitmentList',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+
+export function authenticationStatus() {
+	return request({
+		url: '/mobile/jobUserApi/authenticationStatus',
+		method: 'post',
+		
+	})
+}
+
+export function resumeStatus() {
+	return request({
+		url: '/mobile/resumeApi/resumeStatus',
+
+		method: 'post',
+		
+	})
+}
+
+ 

+ 80 - 0
apis/job/install.js

@@ -0,0 +1,80 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+// 
+ 
+
+export function myInformation(formData) {
+	return request({
+		url: '/mobile/jobUserApi/myInformation',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+export function saveInformation(formData) {
+	return request({
+		url: '/mobile/jobUserApi/saveInformation',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+ export function logout() {
+ 	 
+ 	return request({
+ 		method: 'post',
+ 		url: '/mobile/jobUserApi/logout'
+ 	})
+ } 
+ 
+ export function getVerifyCode(tel) {
+ 	 
+ 	return request({
+ 		method: 'post',
+ 		data:{
+ 			telephone:tel
+ 		} ,
+ 		url: '/mobile/jobUserApi/getVerifyCodeByTel'
+ 	})
+ } 
+ 
+ 
+export function validateCode(formData) {
+	return request({
+		url: '/mobile/jobUserApi/validateCodeByTel',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+ 
+ 
+export function rebuildPassword(formData) {
+	return request({
+		url: '/mobile/jobUserApi/rebuildPassword',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+ 
+export function rebuildTel(formData) {
+	return request({
+		url: '/mobile/jobUserApi/rebuildTel',
+		data: formData,
+		method: 'post',
+		
+	})
+}
+
+
+ 

+ 97 - 0
apis/job/job.js

@@ -0,0 +1,97 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+export function getRelevantList(id) {
+	return request({
+		url: '/mobile/recruitmentApi/getRelevantList',
+	 	data: {
+			id:id
+		},
+		method: 'post',
+		
+	})
+}
+ export function getCompanyDetails(data) {
+ 	return request({
+ 		url: '/mobile/recruitmentApi/getCompanyDetails',
+ 	 	data: data,
+ 		method: 'post',
+ 		
+ 	})
+ }
+  
+ export function getCompany(data) {
+ 	return request({
+ 		url: '/mobile/recruitmentApi/getCompany',
+ 	 	data: data,
+ 		method: 'post',
+ 		
+ 	})
+ }
+  
+ 
+export function getRecruitmentDetails(id) {
+	return request({
+		url: '/mobile/recruitmentApi/getRecruitmentDetails',
+	 	data: {
+			recruitmentId:id
+		},
+		method: 'post',
+		
+	})
+}
+ 
+ //collectResume
+ export function deliverResume(id) {
+ 	return request({
+ 		url: '/mobile/resumeApi/deliverResume',
+ 		data: {
+			recruitmentId:id
+		},
+ 		method: 'post',
+ 		
+ 	})
+ }
+  
+  export function collectResume(id,status) {
+  	return request({
+  		url: '/mobile/recruitmentApi/collectRecruitment',
+  		data: {
+			recruitmentId:id,
+			status:status
+		},
+  		method: 'post',
+  		
+  	})
+  }
+   
+ export function myResumeDetail(id) {
+ 	return request({
+ 		url: '/mobile/resumeApi/myResumeDetail',
+ 	 	data: {
+ 			resumeId:id
+ 		},
+ 		method: 'post',
+ 		
+ 	})
+ }  
+ export function resumeDetail(id,bl) {
+	
+ 	return request({
+ 		url:bl?'/mobile/resumeApi/resumeDetail': "/mobile/resumeApi/myResumeDetail",
+ 	 	data: {
+ 			resumeId:id
+ 		},
+ 		method: 'post',
+ 		
+ 	})
+ }  
+   export function submitResume(data) {
+   	return request({
+   		url: '/mobile/resumeApi/submitResume',
+   	 	data:data,
+   		method: 'post',
+   		
+   	})
+   }

+ 18 - 0
apis/job/resume.js

@@ -0,0 +1,18 @@
+ import request from '@/utils/request'
+
+//collectResume
+ export function deliveryRecord(data) {
+ 	return request({
+ 		url: '/mobile/resumeApi/deliveryRecord',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ export function pagedLoad(data) {
+ 	return request({
+ 		url: '/mobile/userBrowseApi/pagedLoad',
+ 		data: data,
+ 		method: 'post',
+ 	})
+ }
+ 

+ 74 - 0
apis/login.js

@@ -0,0 +1,74 @@
+ import requestWhite from '../utils/requestWhite.js';
+import Qs from 'qs';
+
+ 
+export function findByOpenId(data) {
+	var url=""
+	if(data.form=="job"){
+		url='/mobile/jobUserApi/findByOpenId';
+	}else if(data.form=="hr"){
+		url='/mobile/sysUserApi/findByOpenId';
+	}else{
+		return 
+	}
+	return requestWhite({
+		method: 'post',
+		data: data,
+		url: url
+	})
+}
+
+export function wechatLogin(data) {
+	 
+	 var url=""
+	 if(data.form=="job"){
+	 	url='/mobile/jobUserApi/wechatLogin';
+	 }else if(data.form=="hr"){
+	 	url='/mobile/sysUserApi/wechatLogin';
+	 }else{
+	 	return 
+	 }
+	 
+	return requestWhite({
+		method: 'post',
+		data:data ,
+		url:url 
+	})
+} 
+export function validateCode(data) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:data ,
+		url: '/mobile/jobUserApi/validateCode'
+	})
+} 
+
+export function getVerifyCode(tel) {
+	 
+	return requestWhite({
+		method: 'post',
+		data:{
+			telephone:tel
+		} ,
+		url: '/mobile/jobUserApi/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
+	})
+} 

+ 70 - 0
apis/my.js

@@ -0,0 +1,70 @@
+import request from '../utils/request.js';
+import Qs from 'qs';
+
+export function passengerRecordList(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/passengerApi/passengerRecordList'
+	})
+}
+
+export function updateUserInfo(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/passengerApi/updateUserInfo'
+	})
+}
+
+
+export function problemFeedback(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/passengerApi/problemFeedback'
+		
+	})
+}
+
+export function userPhone(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/passengerApi/userPhone'
+		
+	})
+}
+
+export function userUpdatePhone(data) {
+	return request({
+		method: 'post',
+		data: Qs.stringify(data),
+		url: '/mobile/passengerApi/userUpdatePhone'
+		
+	})
+}
+
+
+
+export function passengerRecordDetail(id) {
+	return request({
+		method: 'post',
+		data: {
+			id:id
+		},
+		url: '/mobile/passengerApi/passengerRecordDetail'
+		
+	})
+}
+
+
+
+export function helpCenterList() {
+	return request({
+		method: 'post',
+	
+		url: '/mobile/passengerApi/helpCenterList'
+	})
+}
+

+ 36 - 0
apis/weixin.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+ 
+import Qs from 'qs';
+
+//微信支付
+export function wxpay(orderId) {
+	return request({
+		url: '/wxPay/wxJsapiPay',
+		data: {
+			id: orderId
+		},
+		method: 'get',
+	})
+}
+//根据code换取openid
+export function getDataByCode(code) {
+	return request({
+		url: '/wechat/findUserInfo/' + code,
+		params: {},
+		method: 'get',
+	})
+}
+
+
+
+//获得配置
+export function getConfig() {
+	
+	return request({
+		url: '/wechat/getConfig',
+		data: {
+			url: window.location.href.split('#')[0]
+		},
+		method: 'get',
+	})
+}

+ 153 - 0
bobo-router/README.md

@@ -0,0 +1,153 @@
+# bobo-router
+
+bobo-router 是一个基于uni-app框架的路由拦截插件,本项目借鉴了[uni-simple-router](https://github.com/SilurianYang/uni-simple-router)的思路,并对其进行简化,简化的原因是因为自己比较懒,不想每次新增页面就定义两遍路由表,所以`bobo-router`的特点就是纯粹的路由拦截,不再**定义两遍路由表**。
+
+当然,由于不再定义路由表,也损失了一些能力,比如不能使用命名路由,不能在路由表中自定义路由元信息等。
+
+> 本人不是大神,插件可能会存在各种各样的问题,望大家谨慎使用,并多多担待。
+
+## 安装
+
+下载插件后,在`main.js`中导入即可。
+
+```js
+// main.js
+
+import router from './utils/bobo-router'
+```
+
+## 基本使用
+
+同`uni-simple-router`一样,项目中的路由跳转要全部弃用`uni.navigateTo()`这样的系统跳转方法,转而使用插件提供的`this.$Router.push()`这样的方法。
+
+```js
+// *.vue
+
+// 跳转页面,保留当前页到页面栈,等同于 uni.navigateTo()
+this.$Router.push({
+	page: '/pages/index/index',
+	params: {}
+})
+
+// 跳转页面,替换当前页到页面栈,等同于 uni.redirectTo()
+this.$Router.replace({
+	page: '/pages/index/index',
+	params: {}
+})
+
+// 跳转页面,清空页面栈,等同于 uni.reLaunch()
+this.$Router.replaceAll({
+	page: '/pages/index/index',
+	params: {}
+})
+
+// 跳转 Tabbar,等同于 uni.switchTab()
+this.$Router.pushTab({
+	page: '/pages/index/index',
+	params: {}
+})
+```
+
+> Tips: 
+> 如果不需要传递参数,可以直接使用 this.$Router.push('/pages/index/index')
+
+> 注意:
+> pushTab传递的参数可通过this.$Route.params获取,但h5页面刷新之后就会丢失数据
+
+## 路由拦截
+
+支持路由前置守卫和路由后置守卫,并且提供一个路由跳转失败的回调,可以重写以实现自己的逻辑。
+
+在`bobo-router/index.js`中添加自己的拦截逻辑。
+
+```js
+// ./utils/bobo-router/index.js
+
+// 路由全局拦截器 在这里处理登录、授权等相关操作
+router.beforeEach(function(to, from, next) {
+	console.log('前置守卫')
+	// to.page不存在表示此次路由跳转仅为了执行路由守卫,若不需处理则直接放行,就不会执行任何路由操作了
+	if (from.page === '/pages/plugin/routers/r3' && !to.page) {
+	// 测试小程序跳转
+	// if (from.page === '/pages/index/index' && !to.page) {
+		next({page: '/pages/plugin/routers/r4', params: {
+			message: '我是从路由3刷新跳过来的'
+		}, method: 'redirectTo'})
+	} else {
+		next()
+	}
+})
+
+// 路由后置拦截器 在这里处理用户高频操作信息
+router.afterEach(function (to, from) {
+	console.log('后置守卫')
+})
+
+// 路由跳转出错处理
+router.onError(function(e) {
+	console.log('错误:', e.message || '路由跳转失败')
+})
+```
+
+参数解释:
+
+**to**:目标路由信息,包含`method`路由跳转方式、`page`页面地址和`params`页面参数
+
+> 注:在进入应用的第一个页面或h5刷新页面后会执行路由前置守卫,此时 to 中的属性均为 undefined
+
+**from**:当前路由信息,包含`page`页面地址和`params`页面参数
+
+**next**:下一步操作
+
+- `next(false)` 中断路由跳转
+- `next('/pages/index/index')` 执行指定页面的路由前置守卫,若当前操作指定过跳转方式,则使用该跳转方式,否则使用默认的push进行跳转
+- `next({page:'/pages/index/index',params:{},method:''})` 执行指定页面的路由前置守卫,method传入跳转方式,也可以不指定,效果同直接传入页面地址
+- `next()` 放行 执行跳转操作
+
+## 参数解析
+
+使用本插件的方法去跳转路由,会将对象的第一级属性转换到URL中,深层对象则转为json串放在对应的属性中。
+
+例如:
+
+```js
+// 转换前对象
+{
+	num: 19,
+	numStr: '19',
+	testParams: true,
+	deepObj: {
+		str: 'hahaha'
+	},
+	ignoreFun: function() {
+		console.log('i\'m hide.')
+	},
+	testUndefined: undefined,
+	testNull: null
+}
+
+// 转换后URL
+?num=19&numStr=19&testParams=true&deepObj=%7B"str"%3A"hahaha"%7D&testUndefined=&testNull=
+```
+
+如果要获取当前路由信息,可通过`this.$Route`获取。
+
+```js
+{
+    "path": "/pages/plugin/router?num=19&numStr=19&testParams=true&deepObj={\"str\":\"hahaha\"}&testUndefined=&testNull=",
+    "params": {
+        "num": 19,
+        "numStr": "19",
+        "testParams": true,
+        "deepObj": {
+            "str": "hahaha"
+        },
+        "testNull": null
+    },
+    "page": "/pages/plugin/router",
+    "pageTitle": "路由拦截插件"
+}
+```
+
+> 页面标题 pageTitle 是在页面中的 data(){}代码块中定义了之后才能正常显示,且只能在onload生命周期之后使用。
+> h5端则不需要定义pageTitle,插件可直接获取当前网页标题。

+ 362 - 0
bobo-router/bobo-router.js

@@ -0,0 +1,362 @@
+class Router {
+	constructor(arg) {
+		if (arg && arg.constructor !== Object) {
+			return console.error(`Routing configuration must be an Object`)
+		}
+		Router.$root = this;
+	}
+
+	// 路由跳转方法映射
+	routeMap = {
+		push: 'navigateTo',
+		replace: 'redirectTo',
+		replaceAll: 'reLaunch',
+		pushTab: 'switchTab'
+	}
+
+	/**
+	 * 执行路由跳转
+	 */
+	_pushTo() {
+		return new Promise((resolve, reject) => {
+			let {
+				page,
+				params,
+				method
+			} = this.tempRoute
+			// 对首次进入页面执行路由守卫时如果放行,method page params都为空 此时应该直接中断流程,无需抛出异常
+			if (!method && !page && !params) {
+				return
+			}
+
+			let urlParams = '?'
+			if (!page) {
+				reject(new Error('参数page未填写'))
+				return
+			} else if (params && typeof(params) === 'object') {
+				// 处理参数,转换为url字符串
+				Object.keys(params).forEach(k => {
+					// 深度对象转为json字符串(包含数组)
+					if (typeof(params[k]) === 'object') {
+						if (params[k]) {
+							const json = JSON.stringify(params[k])
+							urlParams += `${k}=${json}&`
+						} else {
+							urlParams += `${k}=&`
+						}
+					} else if (typeof(params[k]) === 'number' || typeof(params[k]) === 'string' || typeof(params[k]) ===
+						'boolean') {
+						// 基础值直接写入
+						urlParams += `${k}=${params[k]}&`
+					} else if (typeof(params[k]) === 'undefined') {
+						urlParams += `${k}=&`
+					}
+				})
+			}
+
+			// 参数组装
+			if (urlParams.length === 1) {
+				urlParams = ''
+			} else {
+				urlParams = urlParams.substr(0, urlParams.length - 1)
+			}
+
+			// 设置路由跳转方式
+			if (!method) {
+				method = 'navigateTo'
+			}
+			if (this.routeMap[method]) {
+				method = this.routeMap[method]
+			}
+
+			// 调用系统跳转方法
+			uni[method]({
+				url: page + urlParams,
+				success: () => {
+					// 执行路由后置守卫
+					if (this._afterEach && typeof(this._afterEach) === 'function') {
+						this._afterEach.call(this, this.tempRoute, this.route)
+					}
+
+					// 更新路由信息
+					this.route = {
+						path: page + urlParams,
+						params: params || {},
+						page
+					}
+					this.tempRoute = null
+					resolve()
+				},
+				fail: (e) => {
+					reject(new Error('路由跳转失败!'))
+				}
+			})
+		})
+	}
+
+	/**动态的导航到一个新 URL 保留浏览历史
+	 * navigateTo
+	 * @param {Object} rule
+	 */
+	push(arg) {
+		const rule = {
+			method: 'navigateTo'
+		}
+		if (typeof(arg) === 'string') {
+			rule.page = arg
+		} else if (typeof(arg) === 'object') {
+			rule.page = arg.page
+			rule.params = arg.params
+		}
+		this.next(rule)
+	}
+
+	/**动态的导航到一个新 URL 关闭当前页面,跳转到的某个页面。
+	 * redirectTo
+	 * @param {Object} rule
+	 */
+	replace(arg) {
+		const rule = {
+			method: 'redirectTo'
+		}
+		if (typeof(arg) === 'string') {
+			rule.page = arg
+		} else if (typeof(arg) === 'object') {
+			rule.page = arg.page
+			rule.params = arg.params
+		}
+		this.next(rule)
+	}
+
+	/**动态的导航到一个新 URL 关闭所有页面,打开到应用内的某个页面
+	 * 	reLaunch
+	 * @param {Object} rule
+	 */
+	replaceAll(arg) {
+		const rule = {
+			method: 'reLaunch'
+		}
+		if (typeof(arg) === 'string') {
+			rule.page = arg
+		} else if (typeof(arg) === 'object') {
+			rule.page = arg.page
+			rule.params = arg.params
+		}
+		this.next(rule)
+	}
+
+	/** 跳转Tabbar
+	 * 	switchTab
+	 * @param {Object} rule
+	 */
+	pushTab(arg) {
+		const rule = {
+			method: 'switchTab'
+		}
+		if (typeof(arg) === 'string') {
+			rule.page = arg
+		} else if (typeof(arg) === 'object') {
+			rule.page = arg.page
+			rule.params = arg.params
+		}
+		this.next(rule)
+	}
+
+
+	/**
+	 * 返回到指定层级页面上
+	 */
+	back(delta = 1) {
+		// 返回上级
+		if (delta.constructor != Number) {
+			this._errorHandler(new Error('返回层级参数必须是一个Number类型且必须大于0:'))
+			return
+		}
+		uni.navigateBack({
+			delta
+		})
+	}
+
+	/**
+	 * 分发路由
+	 * @param {Object} args
+	 */
+	_next() {
+		return new Promise((resolve, reject) => {
+			if (this._beforeEach && typeof(this._beforeEach) === 'function') {
+				// 需要传给守卫 to from next
+				this._beforeEach.call(this, this.tempRoute, this.route, resolve)
+			} else {
+				this._pushTo().catch(e => {
+					reject(e)
+				})
+			}
+		})
+	}
+
+	next(args) {
+		if (args) {
+			// 保存临时数据
+			if (typeof(args) === 'object') {
+				this.tempRoute = {
+					// 第一次调用next一定存在method,后续循环调用可能不会存在,不存在时使用上次缓存的method
+					method: args.method || this.tempRoute.method,
+					page: args.page,
+					params: args.params
+				}
+			} else if (typeof(args) === 'string') {
+				this.tempRoute = {
+					page: args
+				}
+			} else if (!args) {
+				// 中断路由 args = false
+				this.tempRoute = null
+				return
+			}
+
+			if (!this.route) {
+				this.route = {
+					page: '/' + getCurrentPages()[0].route
+				}
+			}
+
+			this._next().then(args => {
+				this.next(args)
+			}).catch(e => {
+				this.tempRoute = null
+				this._errorHandler(e)
+			})
+		} else {
+			this._pushTo().catch(e => {
+				this.tempRoute = null
+				this._errorHandler(e)
+			})
+		}
+	}
+
+	/**
+	 * 应用启动时执行一次路由检查(前置守卫,若通过则不做事情)
+	 */
+	doBeforeHooks() {
+		this.tempRoute = {}
+		this.next({})
+	}
+
+	// 设置路由前置/后置守卫
+	beforeEach(fn) {
+		this._beforeEach = fn
+	}
+	afterEach(fn) {
+		this._afterEach = fn
+	}
+	// 设置路由跳转错误处理
+	onError(fn) {
+		if (fn && typeof(fn) === 'function') {
+			this._errorHandler = fn
+		}
+	}
+
+	// 获取当前路由信息
+	getCurrentRoute() {
+		return this.route
+	}
+
+}
+
+// 路由对象属性定义
+Router.$root = null
+// 当前路由内容
+Router.route = null
+// 临时路由信息
+Router.tempRoute = null
+// 路由前置后置守卫
+Router._beforeEach = null
+Router._afterEach = null
+// 路由跳转错误处理
+Router._errorHandler = function(e) {
+	console.error(e)
+}
+
+Router.install = function(Vue) {
+	Vue.mixin({
+		onLaunch: function() {},
+		onLoad: function(props) {
+			// 首次进入页面时,缓存中不存在当前路由信息,需要初始化路由信息
+			if (!Router.$root.getCurrentRoute()) {
+				const rt = {
+					params: {},
+					page: '/' + getCurrentPages()[0].route
+				}
+				if (props) {
+					Object.keys(props).forEach(k => {
+						// url转的对象全部都是字符串,需要识别其中的对象和基本数据类型
+						try {
+							const obj = JSON.parse(props[k])
+							if (typeof(obj) === 'string') {
+								// 只有字符串还会是字符串,数字、布尔、数组均会转换为正常类型
+								rt.params[k] = props[k]
+							} else {
+								rt.params[k] = obj
+							}
+						} catch (e) {
+							rt.params[k] = props[k]
+						}
+					})
+				}
+				Router.$root.route = rt
+
+				// 执行路由前置守卫
+				Router.$root.doBeforeHooks()
+			}
+
+			// 自动获取页面标题(app端可能获取不到)
+			const pages = getCurrentPages()
+			let pageTitle = pages[pages.length - 1].pageTitle
+			// #ifdef H5
+			if (!pageTitle) {
+				pageTitle = document.title
+			}
+			// #endif
+			Router.$root.route.pageTitle = pageTitle
+		},
+
+		onShow() {
+			if (!getCurrentPages().length) {
+				return
+			}
+			// 获取当前路由信息
+			const pages = getCurrentPages()
+			const page = pages[pages.length - 1]
+			let pageTitle = page.pageTitle
+			const rt = {
+				params: {},
+				page: '/' + page.route,
+			}
+			if (!pageTitle) {
+				// #ifdef H5
+				rt.pageTitle = document.title
+				// #endif
+			} else {
+				rt.pageTitle = pageTitle
+			}
+			
+			const route = Router.$root.route
+			// 若当前页面地址不等于缓存中地址,则更新缓存路由信息
+			if (!route || route.page !== rt.page) {
+				Router.$root.route = rt
+			}
+		}
+	})
+	Object.defineProperty(Vue.prototype, "$Router", {
+		get: function() {
+			return Router.$root
+		}
+	})
+	Object.defineProperty(Vue.prototype, "$Route", {
+		get: function() {
+			return Router.$root.getCurrentRoute()
+		}
+	})
+}
+
+export default Router

+ 68 - 0
bobo-router/index.js

@@ -0,0 +1,68 @@
+ 
+// import  carhelp from '@/utils/mixin.js'
+
+import Vue from 'vue'
+import uniCrazyRouter from "uni-crazy-router";
+Vue.use(uniCrazyRouter)
+//** 有bug, 第一次直接敲链接访问, 是访问bobo-router 前置守卫
+//**  后续操作,访问的是 uniCrazyRouter的前置守卫
+
+
+uniCrazyRouter.beforeEach(async (to, from, next) => {
+
+
+	routerBeforeEach(to, from, next);
+	
+})
+
+uniCrazyRouter.afterEach((to, from) => {
+	// 逻辑代码
+	console.log("afterEach")
+	if(process.car.NODE_ENV=='dev'||process.car.NODE_ENV=='test'){
+		    uni.setNavigationBarTitle({
+		       		title:'荆开就业在线('+process.car.NODE_ENV+')',
+		    						
+		    }) 
+		}
+	
+})
+
+uniCrazyRouter['on' + 'Error']((to, from) => {
+	// 逻辑代码
+	console.log("Error+start")
+	console.log(to)
+	console.log(from)
+	console.log("Error+end")
+	
+})
+
+import Router from './bobo-router'
+
+Vue.use(Router)
+
+// 路由配置 页面中全部使用this.$Router来操作路由,以实现路由的全局管理
+const router = new Router()
+
+// 路由全局拦截器 在这里处理登录、授权等相关操作
+router.beforeEach(function(to, from, next) {
+	
+	console.log('前置守卫')
+	routerBeforeEach(to, from, next);
+
+})
+ 
+
+function routerBeforeEach(to, from, next) {
+	next();
+}
+// 路由后置拦截器
+router.afterEach(function(to, from) {
+	console.log('后置守卫')
+})
+
+// 路由跳转出错处理
+router.onError(function(e) {
+	console.log('错误:', e.message || '路由跳转失败')
+})
+
+export default router

+ 62 - 0
components/Common.vue

@@ -0,0 +1,62 @@
+<template >
+	<view>
+		<u-navbar v-if="mytitle" :title="mytitle" :is-back="noback" :border-bottom="!noback">
+				<view class="slot-wrap"></view>	
+		</u-navbar>
+	</view>
+</template>
+
+<script>
+	//import * as API from '@/apis/common.js'
+	
+	
+ 	export default {
+		name:"Common",
+		props:{
+			login: {
+				require: false,
+				default: true,
+			},
+			noback:{
+				require: false,
+				default: true,
+			},
+			mytitle: {
+				require: false,
+				default: false,
+			},
+		},
+		data() {
+			return {
+				 
+			};
+			
+		},methods:{
+			 
+			  
+		},mounted(){
+				console.log("common-mounted")
+				
+				
+		},destroyed(){
+			
+		}
+		
+	}
+</script>
+
+<style>
+	.navbar-right {
+				display: flex;
+				margin-right: 20rpx;
+				span{
+					color:rgb(96, 98, 102);
+					margin-left: 3px;
+				}
+			}
+			.slot-wrap {
+					display: flex;
+					align-items: center;
+					flex: 1;
+				}
+</style>

+ 83 - 0
components/TabbarHr.vue

@@ -0,0 +1,83 @@
+<template >
+	<view>
+		<u-tabbar v-model="myCurrent" :active-color="activeColor" :list="list" :before-switch="beforeSwitch" ></u-tabbar>
+
+	</view>
+</template>
+
+<script>
+ 	
+ 	export default {
+		name:"tabbarHr",
+		props:{
+			current: {
+				setIntervalId:"",
+				require: false,
+				default: 0,
+			},
+		},
+		data() {
+			return {
+				activeColor:"#5098FF",
+				 myCurrent:this.current,
+				list: [{
+										iconPath: "home",
+										selectedIconPath: "home",
+										text: '首页',
+										customIcon: false,
+										pagePath2:"/pages/hr/index/index"
+									},
+									 
+									
+									{
+									iconPath: "chat",
+									selectedIconPath: "chat",
+										text: '消息',
+											count:0,
+										customIcon: false,
+										pagePath2:"/pages/hr/newsIndex/newsIndex",
+									},
+									{
+										iconPath: "account",
+										selectedIconPath: "account",
+										text: '我的',
+										pagePath2:"/pages/hr/my/my",
+										customIcon: false,
+									},
+								],
+			};
+			
+		},methods:{
+			beforeSwitch(index){
+				clearInterval(this.setIntervalId)
+				if(index==this.current){
+					return false
+				}
+				var url =this.list[index].pagePath2;
+				uni.navigateTo({
+					url: url
+				})
+				return true;
+			},
+			 getNum(){
+				 
+			 				 this.list[1].count=this.carhelp.get("tabbar_show_num")
+			 				
+			 }
+		},mounted(){
+			
+			this.getNum()
+			this.setIntervalId=setTimeout(()=>{
+				this.getNum()
+			},1000*2)
+				
+		},destroyed(){
+			
+		}
+		
+	}
+</script>
+
+<style>
+	 
+</style>

+ 89 - 0
components/TabbarJob.vue

@@ -0,0 +1,89 @@
+<template >
+	<view>
+		<u-tabbar v-model="myCurrent" :active-color="activeColor" :list="list" :before-switch="beforeSwitch" ></u-tabbar>
+
+	</view>
+</template>
+
+<script>
+ 	
+ 	export default {
+		name:"tabbarJob",
+		props:{
+			current: {
+				setIntervalId:'',
+				require: false,
+				default: 0,
+			},
+		},
+		data() {
+			return {
+				activeColor:"#5098FF",
+				 myCurrent:this.current,
+				 num:0,
+				list: [{
+										iconPath: "home",
+										selectedIconPath: "home",
+										text: '首页',
+										customIcon: false,
+										pagePath2:"/pages/job/index/index"
+									},
+									 
+									{
+										iconPath: "/static/img/iconPark-city-one.svg",
+										selectedIconPath: "/static/img/iconPark-city-one-selected.svg",
+										text: '企业',
+										customIcon: false,
+										pagePath2:"/pages/job/company/index"
+									},
+									{
+										iconPath: "chat",
+										selectedIconPath: "chat",
+										text: '消息',
+										customIcon: false,
+										count:0,
+										pagePath2:"/pages/job/newsIndex/newsIndex",
+									},
+									{
+										iconPath: "account",
+										selectedIconPath: "account",
+										text: '我的',
+										pagePath2:"/pages/job/personal/my/my",
+										customIcon: false,
+									},
+								],
+			};
+			
+		},methods:{
+			beforeSwitch(index){
+				clearInterval(this.setIntervalId)
+				
+				if(index==this.current){
+					return false
+				}
+				var url =this.list[index].pagePath2;
+				uni.navigateTo({
+					url: url
+				})
+				return true;
+			},
+			 getNum(){
+				 this.list[2].count=this.carhelp.get("tabbar_show_num")
+				
+			 }
+		},mounted(){
+			this.getNum()
+			this.setIntervalId= setInterval(()=>{
+				this.getNum()
+			},1000*2)
+		
+			
+		},destroyed(){
+		}
+		
+	}
+</script>
+
+<style>
+	 
+</style>

+ 153 - 0
components/hr/ResumeItem.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="jp-work-item" @click="ckBtn">
+		<view class="jp-work-name">
+			<h3>{{item.positionCategoryName}}</h3>
+			<span>{{item.dreamMoney}}</span>
+		</view>
+		<view class="jp-work-tag" >
+			<u-tag   :text="item.jobStatus" mode="dark"
+				bg-color="#f1f1f7" color="#999" size="mini" />
+
+		</view>
+		<view class="jp-work-info">
+			<view class="u-flex">
+
+				<p>{{item.sex}}|{{item.age}}岁|{{item.workExp}}|{{item.education}}</p>
+			</view>
+
+		</view>
+		<view class="jp-work-info">
+			<view class="u-flex">
+				<u-avatar :src="item.headImage?item.headImage:item.headImageUrl" size="40"></u-avatar>
+				<p>{{item.realName}}</p>
+				<p v-if="mode==2" >{{item.address}}</p>
+			</view>
+			<p v-if="mode!=2" >{{item.address}}</p>
+			<u-button size="mini" style="margin:0;" v-if="mode==2" @click="$emit('mode2',item.resumeId)">删除</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "Common",
+		props: {
+			item: {
+				require: true,
+				default: {},
+			},
+			ck: {
+				require: false,
+				default: true
+			},
+			obj: {
+				require: false,
+				default: null
+			},
+			mode:{
+				require: false,
+				default: 1
+			},
+		},
+		data() {
+			return {
+
+			};
+
+		},
+		watch:{
+			item(newVal,oldVal){
+				this.setItem()
+			}
+		},
+		methods: {
+			setItem(){
+				if (this.obj) {
+					
+					var sz = this.obj.split(",");
+					for (var i in sz) {
+						var string1 = sz[i].split("=")[0];
+						var string2 = sz[i].split("=")[1];
+						this.item[string2] = this.item[string1];
+					}
+					this.$forceUpdate()
+				}
+			},
+			ckBtn() {
+				if (this.ck) {
+					this.gotoUrl('pages/hr/index/resumeInfo/resumeInfo?id=' + this.item.resumeId)
+				} else {
+					this.$emit("ckItem", this.item.resumeId)
+				}
+			},
+			spiltItem(text) {
+				if (text) {
+					return text.split(",")
+
+				} else {
+					return []
+				}
+			},
+
+		},
+		mounted() {
+			this.setItem()
+
+		},
+		
+		destroyed() {
+
+		}
+
+	}
+</script>
+
+<style scoped lang="scss">
+	.jp-work-item {
+		padding: 30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+
+		&:last-child {
+			border-bottom: none;
+		}
+
+		.jp-work-name {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			h3 {
+				font-size: 36rpx;
+			}
+
+			span {
+				font-size: 32rpx;
+				color: #FF1700
+			}
+		}
+
+		.jp-work-tag {
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+
+			* {
+				margin-right: 10rpx;
+			}
+		}
+
+		.jp-work-info {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+
+			p {
+				color: #999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 127 - 0
components/job/RecruitmentItem.vue

@@ -0,0 +1,127 @@
+<template >
+	<view class="jp-work-item"   @click="ckBtn">
+		<view class="jp-work-name">
+			<h3>{{item.title}}</h3>
+			<span>{{item.wageTypeN}}</span>
+		</view>
+		<view class="jp-work-tag" v-if="item.tagList">
+			<u-tag  v-for="(text,index) in item.tagList" :key="index"  :text="text" mode="dark" bg-color="#f1f1f7" color="#999" size="mini"/>
+			 
+		</view>
+		<view class="jp-work-info">
+			<view class="u-flex">
+				<u-avatar :src="item.logo" size="40"></u-avatar>
+				<p>{{item.name}} {{item.scaleName}}</p>
+			</view>
+			<p>{{item.cityName}}</p>
+		</view>
+	</view>	
+</template>
+
+<script>
+  	
+ 	
+ 	export default {
+		name:"Common",
+		props:{
+			item: {
+				require: true,
+				default: {},
+			},
+			ck:{
+				require: false,
+				default:true
+			},
+			obj:{
+				require: false,
+				default:null
+			}
+		},
+		data() {
+			return {
+				 
+			};
+			
+		},watch:{
+			item(newVal,oldVal){
+				this.setItem()
+			}
+		},methods:{
+			setItem(){
+				if (this.obj) {
+					var sz = this.obj.split(",");
+					for (var i in sz) {
+						var string1 = sz[i].split("=")[0];
+						var string2 = sz[i].split("=")[1];
+						this.item[string2] = this.item[string1];
+					}
+					this.$forceUpdate()
+				}
+			},
+			ckBtn(){
+				if(this.ck){
+					this.gotoUrl('pages/job/index/recruitInfo/recruitInfo?id='+this.item.id)
+				}else{
+					this.$emit("ckItem",this.item.id)
+				}
+			},
+			 spiltItem(text){
+			 	if(text){
+			 		return text.split(",")
+			 		
+			 	}else{
+			 		return []
+			 	}
+			 },
+			  
+		},mounted(){
+			this.setItem()
+				
+		},destroyed(){
+			
+		}
+		
+	}
+</script>
+
+<style scoped lang="scss">
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 212 - 0
components/job/ResumeAuth.vue

@@ -0,0 +1,212 @@
+<template>
+	<view>
+		<u-navbar title="实名认证" :is-back="false"></u-navbar>
+		<view class="id-input">
+			<view class="title">
+				真实姓名
+			</view>
+			<u-input v-model="authData.name" placeholder="请输入您的真实姓名" input-align="right" />
+		</view>
+		<view class="id-input">
+			<view class="title">
+				身份证号
+			</view>
+			<u-input v-model="authData.idCard" placeholder="请输入18位身份证号" input-align="right" />
+		</view>
+		<view class="id-upload">
+			<view class="title">
+				请上传身份证的正反面
+			</view>
+			<view class="id-upload-item"  @click="uploadPic('positiveUrl')">
+				<view class="id-upload-left">
+					<h4>头像面</h4>
+					<p>上传您的身份证头像面</p>
+				</view>
+				<view class="id-upload-right">
+					
+ 					
+					<u-image width="100%" height="220rpx"   :src="authData.positiveUrl?authData.positiveUrl:require('@/static/img/id2.png')"></u-image>
+					
+				</view>
+			</view>
+			<view class="id-upload-item"  @click="uploadPic('reverseUrl')">
+				<view class="id-upload-left">
+					<h4>国徽面</h4>
+					<p>上传您的身份证国徽面</p>
+				</view>
+				<view class="id-upload-right">
+					<u-image width="100%" height="220rpx"   :src="authData.reverseUrl?authData.reverseUrl:require('@/static/img/id1.png')"></u-image>
+					
+				</view>
+			</view>
+		</view>
+		<view class="jp-btn">
+			<u-button type="primary" @click="authSubmit">提交</u-button>
+		</view>
+	</view>
+</template>
+
+
+<script>
+	import * as API_Common from '@/apis/common.js'
+ 	
+ 	import * as WxJsApi from '@/utils/wxJsApi.js'
+	import {
+			checkIdCard
+		} from '@/utils'
+ 	export default {
+		name:"Common",
+		props:{
+			 
+		},
+		data() {
+			return {
+				isReady2:false,
+				authData:{} 
+			};
+			
+		},methods:{
+			uploadPic(key){
+				if(!this.isReady2){
+					return
+				}
+				 WxJsApi.chooseImage().then(res=>{
+					 
+					var formData = {
+						'photoName': '1.jpg',
+						'photoFile': res.localData
+					}
+					uni.showLoading({
+					  	title:"加载中",mask:true,
+					  })
+					
+						API_Common.uploadBase64(formData).then(response => {
+							
+							this.authData[key]=response.data
+							console.log(this.authData);
+ 							uni.showToast({
+										title:"上传成功",
+										icon:"none"
+							})
+							this.$forceUpdate()
+						}).catch(error => {
+							uni.showToast({
+										title:error,
+										icon:"none"
+							})	
+						})
+				 })
+			 
+			},
+			authSubmit(){
+				uni.showLoading({
+				  	title:"加载中",mask:true,
+				  })
+				  var checkIdCardResult = checkIdCard(this.authData.idCard);
+				  if (checkIdCardResult !== true) {
+				  	 uni.showToast({
+						 	icon:"none",
+				  	 	title:checkIdCardResult
+				  	 })
+					 
+				  } else if (!this.authData.name) {
+						uni.showToast({
+							icon:"none",
+							title:"请填写姓名"
+						})
+				  }else if (!this.authData.positiveUrl) {
+						uni.showToast({
+							icon:"none",
+							title:"请上传身份证人脸面"
+						})
+				  }else if (!this.authData.reverseUrl) {
+						uni.showToast({
+							icon:"none",
+							title:"请上传身份证国徽面"
+						})
+				  }else{
+					  API_Common.submitAuthentication(this.authData).then((response) => {
+					  		var obj=this.carhelp.getPersonInfo()
+							obj.isAuthentication="2";
+							this.carhelp.setPersonInfo(obj)
+							uni.hideLoading()
+					  	 this.$emit("authSubmit")
+					  }).catch(error => {
+					  	uni.showToast({
+					  				title:error,
+					  				icon:"none"
+					  	})
+					  })
+				  }
+				  
+				
+			},
+			  
+			  
+		},onReady(){
+			 
+			WxJsApi.getWxConfig(['chooseImage']).then(()=>{
+						 	 this.isReady2=true;
+			});
+		},mounted(){
+			  
+			  WxJsApi.getWxConfig(['chooseImage']).then(()=>{
+			 	 this.isReady2=true;
+			  });
+				
+		},destroyed(){
+			
+		}
+		
+	}
+</script>
+
+<style>
+	page{
+		background-color: #f7f7f7;
+	}
+</style>
+ 
+<style scoped lang="scss">
+	.id-input{
+		background-color: #fff;
+		margin: 20rpx;
+		padding: 20rpx 30rpx;
+		border-radius: 20rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.title{
+			font-size: 32rpx;
+		}
+	}
+	.id-upload{
+		margin:40rpx 20rpx;
+		.title{
+			font-size: 32rpx;
+		}
+	}
+	.id-upload-item{
+		margin-top: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		display: flex;
+		padding: 30rpx;
+		justify-content: space-between;
+		.id-upload-left{
+			h4{
+				margin-bottom: 10rpx;
+				font-size: 32rpx;
+			}
+			p{
+				color:#999;
+			}
+		}
+		.id-upload-right{
+			width: 340rpx;
+		}
+	}
+	.jp-btn{
+		margin: 20rpx;
+	}
+</style>

+ 482 - 0
components/job/addResume.js

@@ -0,0 +1,482 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+ import * as API from '@/apis/job/job.js'
+import * as API_common from '@/apis/common.js'
+ 	import * as WxJsApi from '@/utils/wxJsApi.js'
+
+
+export default {
+	data() {
+		return {
+			isReady:false,
+			isReady2:false,
+			action:process.car.BASE_URL+"/mobile/jobUserApi/upload",
+			header:{
+				'Authorization':this.carhelp.getToken()
+			},
+			fileList:[
+			
+			],
+			isObj:false,//是否是修改
+			picList:[],
+			form: {
+				name: '',
+				sex: '2',
+				value:'',
+				resumeUrls:"",
+				expJson:"",
+			},
+			formData:{},
+			endyear:2020,
+			nowyear:2020,
+			pickerShow:false,
+			pickerShowS:false,
+			pickerShowE:false,
+			pickerObj:{},
+			expJsonMap:{},
+			leftStyle:{
+				color: '#2979ff',
+				fontSize:'32rpx',
+			},
+			selectShowIndex:0,
+			selectShowTree:false,
+			popupList:[],
+			selectIndexList:[[],[],[],[]],
+			workExp:[],
+			educationExp:[],
+			actionSheetList: [
+				{
+					id:1,
+					text: '男'
+				},
+				{
+					id:0,
+					text: '女'
+				},
+				{
+					id:2,
+					text: '保密'
+				}
+			],
+			actionSheetShow: false,
+			dataList:[
+				
+				"0c3194dc-884d-4ea9-9966-dfb94f537f5c",//性别
+				"b5e4a52a-9f89-4e3b-976f-79207a40587d",//月薪
+				"7724a25f-a781-46f4-b048-d9812108ff02" , //工作经验
+				"c1887d9d-e945-4875-be3f-905195cd8a8e",//学历
+				"e03f43d0-46f8-4696-a6f2-331d353dccd8",//工作状态
+				"b974b7a8-3609-4717-aee7-67cd32461c22",//期望工作地
+			],
+			dataParam:[
+				
+				"sex",//性别
+				"dreamMoney",//月薪
+				"workExp" , //工作经验
+				"education",//学历
+				"jobStatus",//工作状态
+				"dreamAdd",//期望工作地
+			],
+			dataMap:{},
+			pickerShowEList:[],
+			pickerShowSList:[]
+		}
+	},
+	methods: {
+		uploadPic(){
+			if(!this.isReady2){
+				return
+			}
+			 WxJsApi.chooseImage().then(res=>{
+				 
+				var formData = {
+					'photoName': '1.jpg',
+					'photoFile': res.localData
+				}
+				uni.showLoading({
+				  	title:"加载中",mask:true,
+				  })
+				
+					API_common.uploadBase64(formData).then(response => {
+						
+						this.fileList.push(response.data)
+						
+						uni.showToast({
+									title:"上传成功",
+									icon:"none"
+						})
+						this.$forceUpdate()
+					}).catch(error => {
+						uni.showToast({
+									title:error,
+									icon:"none"
+						})	
+					})
+			 })
+		 
+		},
+		setObj(info,work,exp){
+			this.isObj=true;
+			this.form=info;
+			this.form.categoryName=info.positionCategoryName
+			this.form.categoryId=info.positionCategoryId;
+			if(info.resumeUrls){
+				this.pirList=info.resumeUrls.split(',');
+				this.fileList=this.pirList.map((item)=>{
+					return {
+						url:item
+					}
+				});
+			}
+		
+ 			this.workExp=work.map((item)=>{
+				item.timeS=item.startTime;
+				item.timeE=item.endTime;
+				item.name=item.companyName;
+				item.remark=item.job;
+				return item;
+			})
+			this.educationExp=exp.map((item)=>{
+				item.timeS=item.startTime;
+				item.timeE=item.endTime;
+				item.name=item.schoolName;
+				item.remark=item.education;
+				item.content=item.major
+				return item;
+			})
+			if(!this.isReady){
+				this.init();
+					this.isReady=true;
+			}
+			document.body.scrollTop = 0;
+			document.documentElement.scrollTop = 0;
+		},
+		submit(){
+			var form=this.form;
+			var error=""
+			if(!form.categoryId){
+				 error="请选择应聘职位"
+			}else if(!form.dreamMoney){
+				 error="请选择期望工资"
+			}else if(!form.workExp){
+				 error="请选择工作经验"
+			}else if(!form.jobStatus){
+				 error="请选择工作状态"
+			}else if(!form.birthday){
+				 error="请选择出生年月"
+			}else if(!form.dreamAdd){
+				 error="请填写期望工作地"
+			}else if(!form.introduction){
+				 error="请输入个人介绍"
+			}
+			
+			if(error){
+				uni.showToast({
+					title:error
+				})
+				return false;
+			}
+			
+			var b=false;
+			this.workExp.find((item)=>{
+				
+				if(!item.timeS||!item.timeE){
+					uni.showToast({
+						title:"请完善工作经历中的工作时间"
+						
+					})
+					b=true
+					return true;
+				}else if(!item.name||!item.remark||!item.content){
+					uni.showToast({
+						title:"请完善工作经历中的详细信息"
+					})
+					b=true
+					return true;
+				}else{
+					return false;
+				}
+			})
+			if(b){
+							 return false;
+			}
+			this.educationExp.find((item)=>{
+				
+				if(!item.timeS||!item.timeE){
+					uni.showToast({
+						title:"请完善教育经历中的在校时间"
+						
+					})
+					b=true
+					return true;
+				}else if(!item.name||!item.remark||!item.content){
+					uni.showToast({
+						title:"请完善教育经历中的详细信息"
+					})
+					b=true
+					return true;
+				}else{
+					return false;
+				}
+			})
+			 
+			 if(b){
+				 return false;
+			 }
+			
+			
+			
+			uni.showLoading({
+				title:"提交中"
+			})
+			var expJson={
+				workExp:this.workExp,
+				educationExp:this.educationExp,
+			}
+			this.form.expJson=JSON.stringify(expJson);
+			this.form.resumeUrls=this.picList.filter(item=>{
+				if(item){
+					return true;
+				}else{
+					return false;
+				}
+			}).join();
+			
+			 
+			API.submitResume(this.form).then((response) => {
+				
+				uni.showToast({
+					
+					title:response.data
+				})
+				this.$emit("submit")
+				
+			}).catch(error => {
+					uni.showToast({
+						
+						title:error
+					})
+			})
+		},
+		radioChange(e){
+			console.log(this.form.sex);
+
+		},
+		back(){
+			this.$emit("back")
+		},
+		getScreenList(){
+			
+			API_common.getScreenList().then((response) => {
+				
+				var list=response.data;
+				 var tree=[];
+				 var map=new Map();
+				 var max=0;
+				 var all={
+					 extra:0,
+					 name:"请选择岗位"
+				 }
+				 tree.push(all);
+				 
+				list.forEach((item)=>{
+					if(item.level>max){
+						max=item.level;
+					}
+					if(item.parentId){
+						
+					}else{
+						item.extra=tree.length,
+						tree.push(item);
+					}
+					
+					map.set(item.id,item);
+					this.setChildren(item,max,item);
+				})
+				this.setChildren(all,max,all);
+				
+				 list.forEach((item)=>{		
+				 	if(item.parentId){
+				 		var obj=map.get(item.parentId);
+						item.extra=obj.children.length
+						obj.children.push(item)
+				 	} 	
+				 })
+				
+				this.popupList=tree;
+					uni.hideLoading()
+				// .map((item)=>{
+				// 	return item.name;
+				// })
+			}).catch(error => {
+					uni.showToast({
+						
+						title:error
+					})
+			})
+		},
+		confirmSelectTree(obj){
+			
+			console.log(obj)
+			var list=[];
+			for(var i in obj){
+				if(i==0){
+					this.form.categoryId="";
+					this.form.categoryName="";
+					
+				}
+				if(obj[i].extra){
+					list.push(obj[i].extra);
+				}else{
+					list.push(0);
+					
+				}
+				if(obj[i].value){
+					this.form.categoryId=obj[i].value;
+					this.form.categoryName=obj[i].label;
+				}
+			}
+			this.selectIndexList[3]=list;
+			 
+		},
+		setChildren(item,i,it){
+			
+			if(i>1){
+				var i2=i-1;
+				var myit={extra:0}
+				it.children=[myit]
+				return this.setChildren(item,i2,myit);
+			}else{
+				return	item
+			}
+			
+		},
+		selectpicker(item){
+			
+			this.form.birthday=item.year+"-"+item.month+"-"+item.day;
+		},
+		selectpickerS(item){
+				
+			this.pickerObj.timeS=item[0].label+item[1].label;
+		},
+		selectpickerE(item){
+			
+			this.pickerObj.timeE=item[0].label+(item[1].label?item[1].label:'');
+		},
+		getDataMap(){
+			uni.showLoading({
+			    title: '加载中'
+			});
+			API_common.getData(this.dataList.join()).then((res) => {
+				
+				 this.dataMap=res.data;
+				 
+				 for(var key in this.dataMap){
+					this.dataMap[key].forEach((item,index)=>{
+					 	item.extra=(index+1);
+					 })
+				 }
+				 
+				 
+				this.getScreenList();
+					
+			}).catch(error => {
+					uni.showToast({
+						
+						title:error
+					})
+			})
+		},
+		// 点击actionSheet回调
+		actionSheetCallback(index) {
+			var obj=this.getShowDataList[index]
+			uni.hideKeyboard();
+			this.form[this.dataParam[this.selectShowIndex]] =obj.id
+			this.form[this.dataParam[this.selectShowIndex]+"Name"] =obj.text
+			
+		},
+		init(){
+			
+			// WxJsApi.getWxConfig(['chooseImage']).then(()=>{
+			// 		this.isReady2=true	 	
+			// });
+			var list=["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]
+				 list=list.map((item)=>{
+					 return {
+						 value:item,
+						 label:item,
+					 }
+				 })
+				var year=new Date().getYear()+1900;
+				
+				this.endyear=year-5;
+				
+				
+				console.log(this.endyear)
+				var list2=[];
+				
+				for(var i=0;i< 40;i++){
+					list2.push({
+						value:year-i+"年",
+						label:year-i+"年",
+						children:list
+					})
+				}
+				this.pickerShowSList.push(list2)
+				this.pickerShowSList.push(list)
+				
+				this.pickerShowEList=[
+					{
+						value:'至今',
+						label:'至今',
+						children:[{}]
+					},
+					...list2
+				]
+				
+				
+				this.getDataMap();
+		},
+		beforeUpload(index, list){
+			console.log(list);
+		},
+		onErrorUpload(){
+			this.picList.push("")
+		},
+		successUpload(data, index, lists, name){
+			console.log(this.picList);
+			this.picList.push(data.data)
+		},
+		removeUpload(data, index, lists, name){
+			
+			this.picList.splice(data,1)
+		}
+	},
+	mounted(){
+		 
+		 this.init();
+		 	this.isReady=true;
+	},
+	
+	onReady(){ 
+		
+		
+		this.init();
+			this.isReady=true;
+		
+		},computed:{
+			getShowDataList(){
+				
+				var list=this.dataMap[this.dataList[this.selectShowIndex]];
+				if(list){
+					var ls=list.map((it)=>{
+						it.text=it.name
+						return it
+					})
+					return ls;
+				}else{
+					return [];
+				}
+				
+			},
+		}
+}

+ 169 - 0
components/job/addResume.vue

@@ -0,0 +1,169 @@
+<template>
+	<view>
+		
+		<u-navbar title="创建简历"  v-if="!isObj" ></u-navbar>
+		
+		<u-navbar title="创建简历"  v-if="isObj"  :custom-back="back"></u-navbar>
+		<view class="myInfo-form">
+			<u-form :model="form" ref="uForm" label-width ="200">
+<!-- 				<u-form-item label="姓名">
+					<u-input v-model="form.name" placeholder="请输入报修人姓名"/>
+				</u-form-item>	 -->
+				<u-select v-model="selectShowTree"
+				 mode="mutil-column-auto" value-name="id"	
+				 @confirm="confirmSelectTree"
+				 :default-value="selectIndexList[3]"
+				  label-name="name"	 :list="popupList"></u-select>
+				
+				
+				<u-form-item label="应聘职位" :required ="true">
+					<u-input  type="select"  v-model="form.categoryName" placeholder="请选择应聘职位" @click="selectShowTree = true"></u-input>
+				</u-form-item>
+				<u-form-item label="性别" :required ="true">
+					<u-radio-group v-model="form.sex" @change="radioChange"  >
+								<u-radio 
+								@change="radioChange" 
+									v-for="(item, index) in actionSheetList" :key="index" 
+									:name="item.id"
+									
+								>
+									{{item.text}}
+								</u-radio>
+							</u-radio-group>
+ 				</u-form-item>
+				<u-form-item label="期望工资" :required ="true">
+					<u-input type="select" :select-open="actionSheetShow&&selectShowIndex==1" v-model="form.dreamMoneyName" placeholder="请选择期望工资" @click="actionSheetShow = true,selectShowIndex=1"></u-input>
+				</u-form-item>	
+				<u-form-item label="工作经验" :required ="true">
+					<u-input type="select" :select-open="actionSheetShow&&selectShowIndex==2" v-model="form.workExpName" placeholder="请选择工作经验" @click="actionSheetShow = true,selectShowIndex=2"></u-input>
+				</u-form-item>
+				<u-form-item label="学历" :required ="true">
+					<u-input type="select" :select-open="actionSheetShow&&selectShowIndex==3" v-model="form.educationName" placeholder="请选择学历" @click="actionSheetShow = true,selectShowIndex=3"></u-input>
+				</u-form-item>
+				<u-form-item label="工作状态" :required ="true">
+					<u-input type="select" :select-open="actionSheetShow&&selectShowIndex==4" v-model="form.jobStatusName" placeholder="请选择工作状态" @click="actionSheetShow = true,selectShowIndex=4"></u-input>
+				</u-form-item>
+					<u-picker v-model="pickerShow" :default-time="form.birthday?form.birthday:endyear+'-01'"	 :end-year="endyear" mode="time" @confirm="selectpicker"></u-picker>
+
+				<u-form-item label="出生年月" :required ="true">
+					<u-input type="select"   v-model="form.birthday" placeholder="请选择出生年月" :select-open="pickerShow" @click="pickerShow = true"></u-input>
+				</u-form-item>
+			 
+				
+				<u-form-item label="期望工作地" :required ="true">
+					<u-input type="select" :select-open="actionSheetShow&&selectShowIndex==5" v-model="form.dreamAddName" placeholder="请填写期望工作地" @click="actionSheetShow = true,selectShowIndex=5"></u-input>
+				</u-form-item>
+				
+				<u-form-item :required ="true" label="自我介绍" ><!--  -->
+					<u-input v-model="form.introduction" type="textarea" placeholder="请输入个人介绍,500字以内"/>
+				</u-form-item>
+				<u-form-item label="简历附件" label-position="top">
+					<u-upload :action="action" :file-list="fileList" :header="header" name="photoFile" :form-data="formData"  @on-remove="removeUpload" @on-error="onErrorUpload" @on-success="successUpload"	 >
+						
+						
+					</u-upload>
+				</u-form-item>
+				<u-cell-group  >
+					<u-cell-item   title="工作经历"  arrow-direction="top" :arrow="false">
+								<span @click="workExp.push({})"><u-icon name="plus-circle"></u-icon> 添加</span>
+					</u-cell-item>
+				</u-cell-group  >
+					<u-select v-model="pickerShowS" mode="mutil-column"  :list="pickerShowSList" @confirm="selectpickerS">
+						
+						 
+					</u-select>
+					<u-select v-model="pickerShowE" mode="mutil-column-auto"  :list="pickerShowEList" @confirm="selectpickerE"></u-select>
+					
+				<u-cell-group  v-for="(item,index) in workExp" :key="index" >
+					
+				 
+						<u-cell-item   title= "工作时间: "  arrow-direction="top" :arrow="false">
+ 								<u-button   size="mini" @click="pickerShowS=true,pickerObj=item" v-text="item.timeS?item.timeS:'开始时间'" ></u-button>
+								
+								-<u-button   size="mini" @click="pickerShowE=true,pickerObj=item"  v-text="item.timeE?item.timeE:'结束时间'"   >提交</u-button>
+						</u-cell-item>
+						<u-cell-item   title="公司名称: "  arrow-direction="top" :arrow="false">
+								<u-input   v-model="item.name" placeholder="请填写公司名称" ></u-input>
+						</u-cell-item>
+						<u-cell-item   title="担任职位: "  arrow-direction="top" :arrow="false">
+								<u-input   v-model="item.remark" placeholder="请填写职位" ></u-input>
+						</u-cell-item>
+						<u-cell-item     arrow-direction="top" :arrow="false">
+								<u-input type="textarea"   v-model="item.content" placeholder="工作内容描述"  ></u-input>
+						</u-cell-item>
+						<u-cell-item     arrow-direction="top" :arrow="false">
+								<u-button type="error" size="medium" @click="workExp.splice(index,1)" >删除</u-button>
+						</u-cell-item>
+				 
+					
+				</u-cell-group>
+				
+				<u-cell-group  >
+					<u-cell-item  title-width="130"  title="教育经历"  arrow-direction="top" :arrow="false">
+							
+								<span @click="educationExp.push({})" ><u-icon name="plus-circle"></u-icon> 添加</span>
+									
+					</u-cell-item>
+				</u-cell-group>
+					
+					<u-cell-group   v-for="(item,index) in educationExp" :key="index" >
+					
+					<u-cell-item  title-width="130"  title="在校时间:"  arrow-direction="top" :arrow="false">
+						<u-button   size="mini" @click="pickerShowS=true,pickerObj=item" v-text="item.timeS?item.timeS:'开始时间'" ></u-button>
+							
+							-<u-button   size="mini" @click="pickerShowE=true,pickerObj=item"  v-text="item.timeE?item.timeE:'结束时间'"   >提交</u-button>
+					</u-cell-item>
+					<u-cell-item   title="学校名称:"  arrow-direction="top" :arrow="false">
+								<u-input   v-model="item.name" placeholder="请填写学校名称" ></u-input>
+					
+					</u-cell-item>
+					<u-cell-item   title-width="130" title="学历:"  arrow-direction="top" :arrow="false">
+						<u-input   v-model="item.remark" placeholder="请填写学历" ></u-input>
+						
+					</u-cell-item>
+					<u-cell-item  title-width="130"  title="专业名称:"  arrow-direction="top" :arrow="false">
+						<u-input   v-model="item.content" placeholder="请填写专业名称" ></u-input>
+					
+					</u-cell-item>
+					<u-cell-item     arrow-direction="top" :arrow="false">
+							<u-button type="error" size="medium" @click="educationExp.splice(index,1)" >删除</u-button>
+					</u-cell-item>
+				</u-cell-group>			
+			</u-form>
+		</view> 
+		<u-action-sheet :list="getShowDataList" v-model="actionSheetShow" @click="actionSheetCallback"></u-action-sheet>
+		<view class="jp-btn">
+			<u-button type="primary" @click="submit()">提交</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './addResume.js'
+	export default api;
+	
+</script>
+
+ 
+<style scoped lang="scss">
+	.myInfo-form{
+		padding: 0 20px;
+		padding-bottom: 80px;
+	}
+	.myInfo-head{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin: 0 20px;
+		padding: 10px 0;
+		border-bottom: 1px solid #f3f4f7;
+	}
+	.jp-btn{
+		background-color:#fff;
+		position: fixed;
+		left: 20px;
+		right: 20px;
+		bottom: 20px;
+		z-index: 999;
+	}
+</style>

+ 292 - 0
components/job/companyInfo.vue

@@ -0,0 +1,292 @@
+<template>
+	<view>
+		<u-navbar title="公司详情" :custom-back="back" ></u-navbar>
+		<view class="resumeInfo">
+			<view class="resumeInfo-company">
+				<view class="resumeInfo-company-text">
+					<view class="resumeInfo-company-name">
+						<h3>{{companyInfo.name}}</h3>
+						<view class="u-flex">
+							<span>{{companyInfo.scaleName}}</span>
+							<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+							<span>{{companyInfo.industryName}}</span>
+						</view>
+					</view>	
+				</view>
+				<u-avatar :src="companyInfo.logo" size="100" mode="square"></u-avatar>
+			</view>
+			<view class="resumeInfo-info-foot">
+				<view class="resumeInfo-title">
+					公司地址
+				</view>
+				<view class="resumeInfo-address">
+					{{companyInfo.address}}
+				</view>
+			</view>
+		</view>
+		<view class="jp-work">
+			<view class="jp-work-title">
+				招聘岗位({{recordsTotal}})
+			</view>
+			<view class="jp-work-list">
+				  
+				 <RecruitmentItem v-for="(item ,index) in list" :key="item.id" :item="item" :ck="vck" @ckItem="ckBtn" ></RecruitmentItem>
+				 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 
+			</view>
+		</view>
+	</view>
+</template>
+
+
+<script>
+	import * as API from '@/apis/job/job.js'
+	
+	import RecruitmentItem from '@/components/job/RecruitmentItem.vue'
+	
+ 	export default {
+		name:"Common",
+		props:{
+			vshow: {
+				require: true,
+				default: false,
+			},
+			vck: {
+				require: false,
+				default: true,
+			},
+			companyId:{
+				require: false,
+				default:""
+			},
+			companyInfo:{
+				require: false,
+				default:{}
+			}
+		},
+		components:{RecruitmentItem},
+		
+		data() {
+			return {
+				pageIndex:0,
+				recordsTotal:0,
+				 myCompanyId:null,
+				list:[],
+			};
+			
+		},methods:{
+			
+			myLoadmore(){
+				 
+				 if(this.list.length<this.recordsTotal){
+				  this.pageIndex+=1;
+				  this.getInfo()
+				 }
+				
+			},
+			back(){
+				this.$emit("back")
+			},
+			ckBtn(id){
+				this.$emit("ckItem",id)
+			},
+			getInfo(){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				var data={
+					id:this.companyId,
+					pageIndex:this.pageIndex
+				};
+				API.getCompanyDetails(data).then((res)=>{
+					this.myCompanyId=this.companyId
+					  if(this.pageIndex==1){
+						  this.list=res.data.data;
+					  }else{
+						  this.list=[
+						  	...this.list,
+						  	...res.data.data
+						  ];
+					  }
+					  this.recordsTotal=res.data.recordsTotal
+					  
+					 //this.list=res
+					 uni.hideLoading()		
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+				
+			}
+		},mounted(){
+			 
+				
+		},destroyed(){
+			
+		},watch:{
+			vshow:function(val) {
+				
+				if(val&&this.companyId&&(!this.myCompanyId||(this.myCompanyId&&this.companyId!=this.myCompanyId))){
+					this.pageIndex=1;
+					this.getInfo()
+					document.getElementsByTagName('uni-page-wrapper')[0].style="background-color: #F7F7F7;"
+					
+				}else{
+					document.getElementsByTagName('uni-page-wrapper')[0].style=""
+					
+				}
+			}
+		}
+		
+	}
+</script>
+
+<style >
+	
+</style>
+ 
+<style scoped lang="scss">
+	
+	.resumeInfo-info{
+		padding-top: 20rpx;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+		}
+	}
+	.resumeInfo-info-foot{
+		margin-top: 40rpx;
+		.resumeInfo-title{
+			color:#999;
+		}
+		.resumeInfo-address{
+			flex: 1;
+			min-width: 0;
+			margin-top: 10rpx;
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;
+		.resumeInfo-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 10rpx;
+			h3{
+				font-size: 46rpx;
+			}
+			span{
+				color:#2295FF;
+				border: 1px solid #2295FF;
+				padding: 0 10rpx;
+				border-radius: 6rpx;
+			}
+			.jp-work-tag{
+				display: flex;
+				align-items: center;
+				*{
+					margin-right: 10rpx;
+				}
+			}
+			h2{
+				color:#FF6D58;
+				font-size: 36rpx;
+			}
+		}
+		
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		padding-top: 20rpx;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+		}
+		.resumeInfo-company-name{
+			h3{
+				margin-bottom: 10rpx;
+				font-size: 40rpx;
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-data{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
+		padding: 20rpx 0;
+		border-top: 1px solid #F7F7F7;
+		border-bottom: 1px solid #F7F7F7;
+		.resumeInfo-data-item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			p{
+				font-size: 24rpx;
+				color:#999;
+				margin-bottom: 10rpx;
+			}
+			span{
+				font-size: 32rpx;
+			}
+		}
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 32rpx;
+		padding: 20rpx 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 472 - 0
console.js

@@ -0,0 +1,472 @@
+ var list =[ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages	
+		
+		{
+			"name":"IndexIndex",
+			"path": "pages/index/index",
+			"style": {
+	
+				//"navigationStyle": "custom" // 隐藏系统导航栏
+			}
+		}
+
+      
+        ,{//微信登录
+            "path" : "pages/login/wxLogin/wxLogin",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "微信登录",
+                
+            }
+            
+        }
+        ,{//手机号登录
+            "path" : "pages/login/phoneLogin/phoneLogin",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "手机号登录",
+                
+            }
+            
+        }
+        ,{//填写验证码
+            "path" : "pages/login/vCode/vCode",
+            "style" :                                                                                    
+            {           
+                "navigationBarTitleText": "填写验证码",
+                
+            }
+            
+        }
+        ,{//密码登录
+            "path" : "pages/login/passwordLogin/passwordLogin",
+            "style" :                                                                                    
+            {              
+                "navigationBarTitleText": "密码登录",
+                
+            }
+            
+        }
+      
+        ,{
+            "path" : "pages/job/index/index",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "求职主页",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/index/recruitInfo/recruitInfo",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "招聘详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/index/companyInfo/companyInfo",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "企业详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/query/query",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "搜索",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/query/queryResult/queryResult",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "搜索结果",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsIndex",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "分类消息",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsList/newsList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "消息列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsRecommend/newsRecommend",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "推荐职位",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsInvitationPhone/newsInvitationPhone",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "沟通邀请通知",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsInvitationBefore/newsInvitationBefore",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "面试邀请通知",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsEntry/newsEntry",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "录用意向书详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/personal",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "个人中心",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/my",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "我的",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+     
+        ,{
+            "path" : "pages/job/personal/my/resumeMy/resumeMy",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "我的简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeAdd/resumeAdd",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "创建简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/resumeSelect/resumeSelect",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "选择职位输入",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/resumeEdit/resumeEdit",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "编辑自我介绍",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/resumeSucc/resumeSucc",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "简历提交成功",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/personal/my/resumeList/resumeList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "投递记录",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeLook/resumeLook",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "看过的职位",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeCollect/resumeCollect",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "职位收藏",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeAuth/resumeAuth",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "个人认证",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/job/personal/install/install",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "设置",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/personal/install/myInfo/myInfo",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "个人信息",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/account",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "账号管理",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordA/passwordA",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "忘记密码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordB/passwordB",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "验证码找回",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordC/passwordC",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "重设密码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneA/phoneA",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "填写验证码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneB/phoneB",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "绑定手机号",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneC/phoneC",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "绑定验证码 Copy",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/about/about",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "关于我们",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/index/index",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "招聘主页",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/index/resumeInfo/resumeInfo",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "简历详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/query/query",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "搜索",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/query/queryResult/queryResult",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "搜索结果",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsIndex",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "消息分类",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsList/newsList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "消息列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsRecommend/newsRecommend",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "推荐简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+       
+        ,{
+            "path" : "pages/hr/newsIndex/servicesList/servicesList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "劳务对接列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/servicesInfo/servicesInfo",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "劳务对接详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/my",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "我的",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/position/position",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "职位管理",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/follow/follow",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "对您感兴趣",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/enroll/enroll",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "求职管理",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/collection/collection",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "收藏简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+    ];
+	var my=[];
+	for(var i in list){
+		var obj=list[i];
+		my.push(obj.style.navigationBarTitleText);
+	}
+	console.log(my);

+ 25 - 0
font.js

@@ -0,0 +1,25 @@
+(function() {
+				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
+						});
+					});
+				}
+			})();

+ 49 - 0
main.js

@@ -0,0 +1,49 @@
+import Vue from 'vue'
+import App from './App'
+//import MyCommon from '@/components/Common.vue'
+//import CarLoading from '@/components/Loading.vue'
+import  getOpenId from './utils/init.js'
+getOpenId.init()
+
+import  mixin from './utils/mixin.js'
+
+Vue.config.ignoredElements.push("wx-open-subscribe") ;
+Vue.prototype.carhelp=mixin
+
+import Vconsole from 'vconsole'
+ //import './router' // 引入路由
+import router from './bobo-router'
+
+
+// main.js
+import uView from "uview-ui";
+Vue.use(uView);
+
+Vue.config.productionTip = false
+App.mpType = 'app'
+
+const app = new Vue({
+
+    ...App
+})
+//Vue.component('my-common',MyCommon)
+//Vue.component('car-loading',CarLoading)
+//Vue.use(mixin)
+Vue.mixin({ 
+    onLoad( option){  
+        if (option.test == 'test') {
+        	let vConsole = new Vconsole()
+        }
+		
+    } ,methods:{
+	
+		gotoUrl(url){
+			uni.navigateTo({
+				url:"/"+url
+			})
+		}
+	}
+})
+
+
+app.$mount()

+ 87 - 0
manifest.json

@@ -0,0 +1,87 @@
+{
+    "name" : "jp-employment-kfq",
+    "appid" : "__UNI__B831E6D",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wxa8954f417fa7c32f",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "h5" : {
+        "devServer" : {
+            "port" : 8080,
+            "https" : false,
+            "disableHostCheck" : true
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "title" : "荆开就业在线",
+        "router" : {
+            "base" : "./"
+        }
+    }
+}

+ 56 - 0
package.json

@@ -0,0 +1,56 @@
+{
+ "scripts": {
+  "test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
+  "serve": "vue-cli-service serve",
+  "build": "vue-cli-service build",
+  "test": "vue-cli-service build --mode test"
+ },
+ "dependencies": {
+  "compression-webpack-plugin": "^8.0.1",
+  "uni-crazy-router": "0.0.31",
+  "uni-simple-router": "^2.0.1",
+  "uview-ui": "^1.8.4",
+  "vconsole": "^3.4.0",
+  "vue-cli": "^2.9.6",
+  "vue-cropper": "^0.5.6",
+  "vuex": "^3.6.2",
+  "weixin-js-sdk": "^1.6.0"
+ },
+ "devDependencies": {
+  "node-sass": "^5.0.0",
+  "sass-loader": "^11.0.1",
+  "@vue/cli-plugin-babel": "^4.0.0",
+  "@vue/cli-plugin-eslint": "^4.0.0",
+  "@vue/cli-service": "^4.0.0",
+  "babel-eslint": "^10.0.3",
+  "eslint": "^5.16.0",
+  "eslint-plugin-vue": "^5.0.0",
+  "vue-template-compiler": "^2.6.10"
+ },
+   "uni-app": {
+         "scripts": {
+             "test-platform": { 
+                 "title":"test", 
+                 "BROWSER":"Chrome", 
+                 "env": {
+                     "UNI_PLATFORM": "h5",  
+                     "NODE_NAME": "test"
+                  },
+                 "define": { 
+                     "CUSTOM-CONST": true 
+                 }
+             },
+			 "production-platform": {
+			     "title":"production", 
+			     "BROWSER":"Chrome", 
+			     "env": {
+			         "UNI_PLATFORM": "h5",  
+			         "NODE_NAME": "production"
+			      },
+			     "define": { 
+			         "CUSTOM-CONST": true 
+			     }
+			 }
+         }    
+     }
+}

+ 547 - 0
pages.json

@@ -0,0 +1,547 @@
+{
+	"easycom": {
+			"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+		},
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages	
+		
+		{
+			"name":"IndexIndex",
+			"path": "pages/index/index",
+			"style": {
+	
+				//"navigationStyle": "custom" // 隐藏系统导航栏
+			}
+		}
+
+      
+        ,{//微信登录
+            "path" : "pages/login/wxLogin/wxLogin",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "微信登录"
+                
+            }
+            
+        }
+        ,{//手机号登录
+            "path" : "pages/login/phoneLogin/phoneLogin",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "手机号登录"
+                
+            }
+            
+        }
+        ,{//填写验证码
+            "path" : "pages/login/vCode/vCode",
+            "style" :                                                                                    
+            {           
+                //"navigationBarTitleText": "填写验证码"
+                
+            }
+            
+        }
+        ,{//密码登录
+            "path" : "pages/login/passwordLogin/passwordLogin",
+            "style" :                                                                                    
+            {              
+                //"navigationBarTitleText": "密码登录"
+                
+            }
+            
+        }
+      
+        ,{
+            "path" : "pages/job/index/index",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "求职主页",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/index/recruitInfo/recruitInfo",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "招聘详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/hr/index/recruitInfo/recruitInfo",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "招聘详情",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/index/companyInfo/companyInfo",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "企业详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/query/query",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "搜索",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/query/queryResult/queryResult",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "搜索结果",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsIndex",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "分类消息",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsList/newsList",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "消息列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsRecommend/newsRecommend",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "推荐职位",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsInvitationPhone/newsInvitationPhone",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "沟通邀请通知",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsInvitationBefore/newsInvitationBefore",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "面试邀请通知",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/newsIndex/newsEntry/newsEntry",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "录用意向书详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/hr/newsIndex/newsEntry/newsEntry",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "录用意向书详情",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/personal/personal",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "个人中心",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/my",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "我的",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+     
+        ,{
+            "path" : "pages/job/personal/my/resumeMy/resumeMy",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "我的简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeAdd/resumeAdd",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "创建简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/workAdd/workAdd",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "添加工作经历",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/workEdit/workEdit",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "编辑工作经历",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},{
+		    "path" : "pages/job/personal/my/resumeAdd/eduAdd/eduAdd",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "添加教育经历",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/eduEdit/eduEdit",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "编辑教育经历",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/job/personal/my/resumeAdd/resumeSucc/resumeSucc",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "简历提交成功",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/personal/my/resumeList/resumeList",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "投递记录",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeLook/resumeLook",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "看过的职位",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeCollect/resumeCollect",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "职位收藏",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/my/resumeAuth/resumeAuth",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "个人认证",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/job/personal/install/install",
+		    "style" :                                                                                    
+		    {
+		        //"navigationBarTitleText": "设置",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+        ,{
+            "path" : "pages/job/personal/install/myInfo/myInfo",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "个人信息",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/account",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "账号管理",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordA/passwordA",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "忘记密码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordB/passwordB",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "验证码找回",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/passwordC/passwordC",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "重设密码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneA/phoneA",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "填写验证码",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneB/phoneB",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "绑定手机号",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/install/account/phoneC/phoneC",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "绑定验证码 Copy",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/personal/about/about",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "关于我们",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/index/index",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "招聘主页",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/index/resumeInfo/resumeInfo",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "简历详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/query/query",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "搜索",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/query/queryResult/queryResult",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "搜索结果",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsIndex",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "消息分类",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsList/newsList",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "消息列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/newsRecommend/newsRecommend",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "推荐简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+       
+        ,{
+            "path" : "pages/hr/newsIndex/servicesList/servicesList",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "劳务对接列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/newsIndex/servicesInfo/servicesInfo",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "劳务对接详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/my",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "我的",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/position/position",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "职位管理",
+                "enablePullDownRefresh": false
+            }
+            
+        } ,{
+            "path" : "pages/hr/my/look/look",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "看过的人才",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/follow/follow",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "对您感兴趣",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/enroll/enroll",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "求职管理",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/hr/my/collection/collection",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "收藏简历",
+                "enablePullDownRefresh": false
+            }
+            
+        },{
+            "path" : "pages/job/personal/install/resume/resume",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "我的简历",
+                "enablePullDownRefresh": false
+            }
+            
+        },{
+            "path" : "pages/job/personal/install/addResume/addResume",
+            "style" :                                                                                    
+            {
+                //"navigationBarTitleText": "创建简历",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/job/company/index",
+            "style" :                                                                                    
+            {
+                              
+            }
+            
+        }
+    ],
+
+	 
+	"globalStyle": {
+			"navigationStyle": "custom", // 隐藏系统导航栏
+			"navigationBarTitleText": "荆开就业在线",
+			"enablePullDownRefresh": false
+			
+	}
+  
+}

+ 148 - 0
pages/hr/index/index.js

@@ -0,0 +1,148 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API_common from '@/apis/common.js'
+
+import * as API from '@/apis/hr/index.js'
+
+import TabbarHr from '@/components/TabbarHr.vue'
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				//islogin:false,
+				showpopup:false,
+				querypopup:"全部",
+				popupList:["全部","一丘之貉1","一丘之貉2","一丘之貉3","一丘之貉4","一丘之貉5","一丘之貉6"
+				,"其他"],
+				
+				keyword: '遥看瀑布挂前川',
+				bannerList: [{
+						image: 'https://cdn.uviewui.com/uview/swiper/1.jpg',
+						title: '昨夜星辰昨夜风,画楼西畔桂堂东'
+					},
+					{
+						image: 'https://cdn.uviewui.com/uview/swiper/2.jpg',
+						title: '身无彩凤双飞翼,心有灵犀一点通'
+					},
+					{
+						image: 'https://cdn.uviewui.com/uview/swiper/3.jpg',
+						title: '谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
+					}
+				],
+				list: [{
+					name: '最新',
+					list:[{}],
+					
+					isend:false
+				}, {
+
+					name: '最热',
+					list:[{},{},{},{}],
+					isend:false
+				}],
+				current: 0,
+				src: '/static/img/head/png',
+
+			}
+		},
+		components: {
+		TabbarHr,ResumeItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			getBanner(){
+				API_common.getBannerInfo({
+					type:"hr"
+				}).then((response) => {
+					var list=response.data;
+					this.bannerList=list.map((item)=>{
+						 var obj={
+							image:item.picUrl,
+							 title:item.name,
+							 url:item.linkUrl,
+						 }
+						return obj
+					})
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			ckBanner(i){
+				var obj=this.bannerList[i];
+				if(obj.url){
+					if(obj.url.indexOf("http")==0){
+						window.location.href=obj.url;
+					}
+					if(obj.url.indexOf("pages/")==0){
+						this.gotoUrl(obj.url)
+					}
+				}
+				//console.log(current);
+			},
+			loadAllResumes(i){
+				var sz=["new","hot"];
+				API.loadAllResumes({
+					orderType:sz[i],pageSize:5
+				}).then((response) => {
+					
+					var list=response.data.data;
+					this.list[i].list=list;
+					this.list[i].isend=(response.data.totalPage>1)
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			getList(){
+				for(var i in this.list){
+					
+					this.loadAllResumes(i)
+					
+				}
+			},
+			getScreenList(){
+				
+				API_common.getScreenList().then((response) => {
+					
+					var list=response.data;
+					this.popupList=list.map((item)=>{
+						return item.name;
+					})
+					this.getBanner()
+					this.getList();
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			changeTab(i){
+				this.current=i
+				//console.log(current);
+			},
+			ckPopup(item){
+							//this.querypopup=item;
+							 this.showpopup=false;
+							 this.gotoUrl('pages/hr/query/query?key='+item);
+			}
+			
+		},onReady(){ 
+			
+			this.getScreenList();
+			
+		
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 142 - 0
pages/hr/index/index.vue

@@ -0,0 +1,142 @@
+<template>
+	<view>
+		<u-navbar :is-back="false">
+			<view class="jp-search">
+				<u-search placeholder="输入想找的简历吧" :disabled="true" @click="gotoUrl('pages/hr/query/query')" :show-action="false"></u-search>
+			</view>
+		</u-navbar>
+		<view class="jp-banner">
+			<u-swiper :list="bannerList"  @click="ckBanner" ></u-swiper>
+		</view>
+		 
+		<view class="jp-work">
+			<view class="jp-work-tab">
+				<u-tabs :list="list" :is-scroll="false" :current="current" @change="changeTab" :item-width="100"></u-tabs>
+				<view class="screen" @click="showpopup=true">
+					<span>筛选</span>
+					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+				</view>
+			</view>
+			<view class="jp-work-list">
+				
+			 	<ResumeItem v-for="(item ,index) in list[current].list" :key="item.id" :item="item"
+					obj="eduName=education"
+				></ResumeItem>
+			 	
+			 	<view class="jp-work-item" style="margin-top: 6px;">
+			 		<view style="text-align: center;color:#101010;"   @click="gotoUrl('pages/hr/query/query?all=1')" >查看全部</view>
+			 	</view>
+			</view>
+		</view>
+		<u-popup v-model="showpopup" mode="center" width="100%"  >
+			<view class="content">
+				<view class="popup-title">
+					<h3>招聘岗位</h3>
+				</view>
+				<view class="jp-search-tag">
+					<u-tag  v-for="(item,index) in popupList" :key="index" :text="item" mode="dark" 
+					:color="querypopup==item?'#FFFFFF':'#666666'"  :bg-color="querypopup==item?'#2295FF':'#f1f1f1'"
+					@click="ckPopup(item)"
+					/>
+					 
+				</view>
+			</view>
+			
+			</u-popup>
+		<Tabbar-Hr :current="0" ></Tabbar-Hr>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ <style>
+	 page{
+		 background-color: #f7f7f7;
+	 }
+ </style>
+<style scoped lang="scss">
+	.popup-title{
+		padding: 20rpx;
+	}
+	.jp-search-tag{
+			padding: 20rpx;
+			*{
+				margin-right: 10rpx;
+				margin-bottom: 10rpx;
+			}
+	}
+	
+	.jp-search{
+		padding: 0 20rpx;
+		width: 100%;
+	}
+	.jp-banner{
+		padding: 20rpx;
+		background-color: #fff;
+	}
+	.jp-tips{
+		height:72rpx;
+		background-color: #fff0e7;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		span{
+			color:#ff6200;
+			margin: 0 10rpx;
+			line-height: 28rpx;
+		}
+	}
+	.jp-work-tab{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		border-bottom: 1px solid #f7f7f7;
+		background-color: #fff;
+		padding-right: 20rpx;
+		.screen{
+			span{margin-right: 10rpx;}
+		}
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 28 - 0
pages/hr/index/recruitInfo/index.js

@@ -0,0 +1,28 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+
+import recruitInfo from '@/pages/job/index/recruitInfo/recruitInfo.vue'
+
+export default {
+		data() {
+			return {
+				 id:""
+			}
+		},
+		components: {
+			recruitInfo
+		},
+		onLoad(op){
+			this.id=op.id;
+		
+		},
+		methods: { 
+			
+		},onReady(){ 
+			this.$refs.info.setId(this.id)
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 196 - 0
pages/hr/index/recruitInfo/recruitInfo.vue

@@ -0,0 +1,196 @@
+<template>
+	<view> 
+	<recruitInfo :isHr="true" ref="info"></recruitInfo>
+	</view>
+	
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+ 
+<style scoped lang="scss">
+	.resumeInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		margin-top: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20rpx;
+		.resumeInfo-collect{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			background-color: #f3f4f8;
+			padding:4rpx 20rpx;
+			border-radius: 8rpx;
+			margin-right: 20rpx;
+			span{
+				font-size: 24rpx;
+			}
+		}
+		.resumeInfo-btn{
+			flex: 1;
+			
+		}
+	}
+	.resumeInfo-info{
+		padding-top: 20rpx;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+		}
+		.resumeInfo-info-foot{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.resumeInfo-address{
+				flex: 1;
+				min-width: 0;
+				color:#999;
+			}
+			.resumeInfo-see{
+				width: 100rpx;
+				text-align: right;
+				span{
+					font-size: 24rpx;
+					color:#999;
+					margin-left: 6rpx;
+				}
+			}
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;
+		.resumeInfo-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 10rpx;
+			h3{
+				font-size: 46rpx;
+			}
+			span{
+				color:#2295FF;
+				border: 1px solid #2295FF;
+				padding: 0 10rpx;
+				border-radius: 6rpx;
+			}
+			.jp-work-tag{
+				display: flex;
+				align-items: center;
+				*{
+					margin-right: 10rpx;
+				}
+			}
+			h2{
+				color:#FF6D58;
+				font-size: 36rpx;
+			}
+		}
+		
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		border-top: 1px solid #F7F7F7;
+		padding-top: 20rpx;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+			margin-left: 20rpx;
+		}
+		.resumeInfo-company-name{
+			p{
+				margin-bottom: 10rpx;
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-data{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
+		padding: 20rpx 0;
+		border-top: 1px solid #F7F7F7;
+		border-bottom: 1px solid #F7F7F7;
+		.resumeInfo-data-item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			p{
+				font-size: 24rpx;
+				color:#999;
+				margin-bottom: 10rpx;
+			}
+			span{
+				font-size: 32rpx;
+			}
+		}
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 36rpx;
+		padding: 20rpx 20rpx;
+		font-weight: bold;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 79 - 0
pages/hr/index/resumeInfo/index.js

@@ -0,0 +1,79 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/resume.js'
+import resumeInfo from '@/pages/job/personal/install/resume/resume.vue'
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				isDeliver:false,
+				isCollect:false,
+				list:[],
+				 id:"",
+				 info:{},
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+			resumeInfo,ResumeItem
+		},
+		onLoad(op){
+			
+				this.id=op.id;
+		},
+		methods: {
+			getInfo(info){
+				this.info=info.resume;
+				this.isCollect=info.isCollect;
+			},
+			 deliverBtn(){
+				 
+				 if(this.info){
+					 uni.makePhoneCall({
+					     phoneNumber: this.info.userTel //仅为示例
+					 });
+				 }
+			 	
+			 },collectBtn(){
+				uni.showLoading({
+				 	 title: '加载中'
+				 })
+				 this.isCollect=!this.isCollect
+				 
+				 API.collectResume(this.id,this.isCollect?1:0).then((res)=>{
+					  
+					 uni.hideLoading()
+					
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			},
+			getRelevantList(){
+				API.getRelevantList(this.id).then((res)=>{
+					 this.list=res.data.data;
+					 
+					 uni.hideLoading()		
+				 }).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			setId(id){
+				this.id=id;
+				
+				this.$refs.info.setId(this.id)
+			},
+		},onReady(){ 
+			this.$refs.info.setId(this.id)
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 220 - 0
pages/hr/index/resumeInfo/resumeInfo.vue

@@ -0,0 +1,220 @@
+<template>
+	<view>
+		<u-navbar title="职位详情" ></u-navbar>
+		 
+		 <resumeInfo :isHr="true" ref="info" @getInfo="getInfo"></resumeInfo>
+		 
+		
+		<view class="resumeInfo-foot">
+			<view class="resumeInfo-collect"  @click="collectBtn">
+				<u-icon :name="isCollect?'a-fasfa-star ':'antOutline-star'" custom-prefix="custom-icon" size="36" color="#2295FF"></u-icon>
+				<u-icon v-if="false" name="antOutline-star" custom-prefix="custom-icon" size="36" color="#2295FF"></u-icon>
+				<span>收藏</span>
+			</view>
+			<view class="resumeInfo-btn">
+				<u-button type="primary"   @click="deliverBtn" v-text="isDeliver?'已发送':'电话沟通'">立即沟通</u-button>
+			</view>
+		</view>
+		 
+		<view class="jp-work" v-show="list.length" >
+			<view class="jp-work-title">
+				推荐简历
+			</view>
+			<view class="jp-work-list"  v-show="list.length" >
+				 
+				<ResumeItem v-for="(item ,index) in list" :key="index" :item="item" :ck="false" @ckItem="setId" ></ResumeItem>
+				
+			</view>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+ 
+<style scoped lang="scss">
+	.resumeInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		margin-top: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20rpx;
+		.resumeInfo-collect{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			background-color: #f3f4f8;
+			padding:4rpx 20rpx;
+			border-radius: 8rpx;
+			margin-right: 20rpx;
+			span{
+				font-size: 24rpx;
+			}
+		}
+		.resumeInfo-btn{
+			flex: 1;
+		}
+	}
+	.resumeInfo-info{
+		margin-top: 20rpx;
+		padding: 0 20rpx;
+		padding-top: 20rpx;
+		background-color: #fff;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+			p{
+				color:#999;
+			}
+		}
+	}
+	.undergo-item-row{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 10rpx;
+		h4{
+			font-size: 30rpx;
+		}
+		&:last-child{
+			margin-bottom: 0;
+		}
+		span{
+			color:#1677FF;
+		}
+	}
+	.work-undergo{
+		border-bottom: 1px solid #f7f7f7;
+		padding: 20rpx 0;
+		&:last-child{
+			border-bottom: 0;
+		}
+	}
+	.edu-undergo{
+		border-bottom: 1px solid #f7f7f7;
+		padding: 20rpx 0;
+		&:last-child{
+			border-bottom: 0;
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;		
+	}
+	.resumeInfo-row{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 10rpx;
+		h3{
+			font-size: 36rpx;
+		}
+		span{
+			color:#2295FF;
+			border: 1px solid #2295FF;
+			padding: 0 10rpx;
+			border-radius: 6rpx;
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		h2{
+			color:#FF6D58;
+			font-size: 36rpx;
+		}
+	}
+	.resumeInfo-head{
+		display: flex;
+		align-items: center;
+		justify-content:space-between;
+		padding: 20rpx 0;
+		.resumeInfo-name{
+			h3{
+				font-size:48rpx ;
+				margin-bottom: 20rpx;
+			}
+			span{
+				color:#333;
+				font-size: 28rpx;
+			}
+		}
+	}
+	.resumeInfo-name-row{
+		margin-bottom:20rpx;
+		span{
+			color:#333;
+			margin-left: 10rpx;
+		}
+	}
+	.jp-work{
+		margin-top: 20rpx;
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 36rpx;
+		padding: 20rpx 20rpx;
+		font-weight: bold;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-label{
+			margin-top: 10rpx;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 104 - 0
pages/hr/my/collection/collection.vue

@@ -0,0 +1,104 @@
+
+<template>
+	<view>
+		<u-navbar title="收藏简历"></u-navbar>
+		<view class="jp-search">
+			<u-search placeholder="查询收藏的简历" v-model="keyword"  @search="getList(true)" :show-action="false"></u-search>
+		</view>
+		 
+		<view class="jp-work">
+			<view class="jp-quantity">
+				<p>数量</p><span>{{recordsTotal}}</span>
+			</view>
+			<view class="jp-work-list">
+				 <ResumeItem v-for="(item ,index) in list" :key="item.id" :item="item"
+				  obj="eduName=education"
+				  mode="2" @mode2="del"
+				  ></ResumeItem>
+				  
+				 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 
+			</view>
+			 
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.jp-quantity{
+		background-color: #fff;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+		font-size: 32rpx;
+		padding-left: 30rpx;
+		margin-top: 20rpx;
+		border-bottom: 1px solid #f7f7f7;
+		p{
+			color:#666;
+		}
+		span{
+			color:#1A91EA;
+			margin-left: 10rpx;
+		}
+	}
+	.jp-search{
+		background-color: #fff;
+		padding: 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		margin-bottom: 20rpx;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+	.jp-work-line{
+		display: flex;
+		align-items: center;
+		margin-top:10rpx;
+	}
+</style>

+ 88 - 0
pages/hr/my/collection/index.js

@@ -0,0 +1,88 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/my.js'
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				keyword:"",
+				pageIndex:1,
+				recordsTotal:0,
+				list: [ ],
+				isReady:false,
+				src: '/static/img/head.png',
+			}
+		},
+		components: {
+			ResumeItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		onReachBottom() {
+			if(this.result.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			del(id){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				 
+			 
+				API.cancelCollectResume(id).then((res) => {
+					
+					this.getList(true); 
+					
+					uni.hideLoading()
+					 
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },getList(bl){
+					uni.showLoading({
+						title:"加载中",mask:true,
+					})
+					 if(bl){
+						 this.list=[];
+						 this.pageIndex=1;
+					 }
+					var data={
+						positionName:this.keyword,
+						pageIndex:this.pageIndex
+					};
+					API.loadCollectResumes(data).then((res) => {
+							 
+						this.list=[
+							...this.list,
+							...res.data.data
+						];
+						this.recordsTotal=res.data.recordsTotal
+						uni.hideLoading()
+						 
+					}).catch(error => {
+							uni.showToast({
+								
+								title:error
+							})
+					})
+				}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 75 - 0
pages/hr/my/enroll/enroll.vue

@@ -0,0 +1,75 @@
+<template>
+	<view>
+		<u-navbar title="投递记录"></u-navbar>
+		<view class="jp-work">
+			<view class="jp-work-tab">
+				<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
+			</view>
+			<view class="jp-work-list">
+				 	 
+				 	 <ResumeItem v-for="(item ,index) in list[current].list" :key="item.id" :item="item" 
+					 obj="workName=positionCategoryName,name=realName,dreamAdd=address"
+					 ></ResumeItem>
+				 	 
+				 	<u-loadmore @loadmore="myLoadmore" :status="list[current].list.length<list[current].recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 	
+				 
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	 page{
+		 background-color: #f7f7f7;
+	 }
+</style> 
+<style scoped lang="scss">
+	.jp-work-tab{
+		margin-bottom: 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	} 
+</style>

+ 121 - 0
pages/hr/my/enroll/index.js

@@ -0,0 +1,121 @@
+
+ 
+import * as API from '@/apis/hr/my.js'
+ import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+//
+export default {
+		data() {
+			return {
+				isReady:false,
+				src: '/static/img/head/png',
+				keyword: '遥看瀑布挂前川',
+				list: [{
+					name: '全部',
+					list:[],
+					status:"",
+					pageIndex:1,
+					recordsTotal:0,
+				}, {
+					name: '已投递',
+					list:[],
+					status:"1",
+					pageIndex:1,
+					recordsTotal:0,
+				}, {
+					name: '邀沟通',
+					list:[],
+					status:"2",
+					pageIndex:1,
+					recordsTotal:0,
+				},{
+					name: '邀面试',
+					list:[],
+					status:"3",
+					pageIndex:1,
+					recordsTotal:0,
+				}, {
+					name: '邀入职',
+					list:[],
+					status:"4",
+					pageIndex:1,
+					recordsTotal:0,
+				},{
+					name: '已入职',
+					list:[],
+					status:"5",
+					pageIndex:1,
+					recordsTotal:0,
+				}, {
+					name: '不合适',
+					list:[],
+					status:"6",
+					pageIndex:1,
+					recordsTotal:0,
+				}],
+				current: 0
+			}
+		},
+		onReachBottom() {
+			if(this.list[this.current].list.length<this.list[this.current].recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		components: {
+		ResumeItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			myLoadmore(){
+					var obj=this.list[this.current];
+					obj.pageIndex+=1;
+					this.getList()
+				},
+				 change(index) {
+					this.current = index;
+					var obj=this.list[this.current];
+					
+					if(obj.list.length==0){
+						this.getList()
+					}
+				},
+				getList(){
+					uni.showLoading({
+						title:"加载中",mask:true,
+					})
+					var obj=this.list[this.current];
+					var data=obj.status?{
+							type:obj.status,
+						pageIndex:obj.pageIndex
+					}:{
+					
+						pageIndex:obj.pageIndex
+					};
+					API.loadJobManagement(data).then((res) => {
+							 
+						obj.list=[
+							...obj.list,
+							...res.data.data
+						];
+						obj.recordsTotal=res.data.recordsTotal
+						uni.hideLoading()
+						console.log(this.list)
+					}).catch(error => {
+							uni.showToast({
+								
+								title:error
+							})
+					})
+				}
+				
+			},onReady(){ 
+				this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 45 - 0
pages/hr/my/follow/follow.vue

@@ -0,0 +1,45 @@
+<template>
+	<view>
+		<u-navbar title="对您感兴趣"></u-navbar>
+		<view class="jp-follow">
+			
+			<view class="jp-follow-item" v-for="(item,i)  in list" :key="i" @click="ckBtn(item.id)">
+				<view class="follow-text u-flex">
+					<u-avatar :src="item.headImage?item.headImage:src" size="60"></u-avatar>
+					<span>{{item.name}}</span>
+				</view>
+				<u-icon name="arrow-right" color="#999" size="24" v-if="item.id"></u-icon>
+			</view>
+			 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+			 
+			 
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	 page{
+		 background-color: #f7f7f7;
+	 }
+</style> 
+<style scoped lang="scss">
+	.jp-follow-item{
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 30rpx;
+		border-bottom: 1px solid #f7f7f7;
+		.follow-text{
+			span{
+				margin-left: 20rpx;
+				font-size: 32rpx;
+			}
+		}
+	}
+</style>

+ 74 - 0
pages/hr/my/follow/index.js

@@ -0,0 +1,74 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/my.js'
+
+export default {
+		data() {
+			return {
+				pageIndex:1,
+				recordsTotal:0,
+				list: [ ],
+				isReady:false,
+				src: '/static/img/head.png',
+			}
+		},
+		onReachBottom() {
+			if(this.list.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			ckBtn(id){
+				if(id){
+					this.gotoUrl('pages/hr/index/resumeInfo/resumeInfo?id=' + id)
+					
+				}
+			},
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },
+			  change(index) {
+			 		this.current = index;
+			 	},
+			 	getList(){
+			 		uni.showLoading({
+			 			title:"加载中",mask:true,
+			 		})
+			 		 
+			 		var data={
+			 		 
+			 			pageIndex:this.pageIndex
+			 		};
+			 		API.loadInterestList(data).then((res) => {
+			 				 
+			 			this.list=[
+			 				...this.list,
+			 				...res.data.data
+			 			];
+			 			this.recordsTotal=res.data.recordsTotal
+			 			uni.hideLoading()
+			 			 
+			 		}).catch(error => {
+			 				uni.showToast({
+			 					
+			 					title:error
+			 				})
+			 		})
+			 	}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 52 - 0
pages/hr/my/index.js

@@ -0,0 +1,52 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/my.js'
+	import TabbarHr from '@/components/TabbarHr.vue'
+
+export default {
+		data() {
+			return {
+				info:{
+					
+				},
+				hr:{},
+				isReady:false,
+				src: '/static/img/head.png',
+				background: {
+					backgroundColor: '#2295ff',
+				},
+			}
+		},
+		components: {
+		TabbarHr
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 getInfo(){
+			 				 uni.showLoading({
+			 				 	 title: '加载中'
+			 				 })
+			 				 API.getAboutMe().then((res)=>{
+			 					 // this.company=res.data.company
+			 					 this.info=res.data;
+								  this.hr=res.data.hr;
+			 					uni.hideLoading()
+			 								 
+			 				 }).catch(error => {
+			 						uni.showToast({
+			 							
+			 							title:error
+			 						})
+			 				})
+			 },
+			
+		},onReady(){ 
+			this.getInfo()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 70 - 0
pages/hr/my/look/index.js

@@ -0,0 +1,70 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/my.js'
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				keyword:"",
+				pageIndex:1,
+				recordsTotal:0,
+				list: [ ],
+				isReady:false,
+				src: '/static/img/head.png',
+			}
+		},
+		components: {
+			ResumeItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		onReachBottom() {
+			if(this.list.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			 
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },getList(bl){
+					uni.showLoading({
+						title:"加载中",mask:true,
+					})
+					 if(bl){
+						 this.list=[];
+						 this.pageIndex=1;
+					 }
+					var data={
+						positionName:this.keyword,
+						pageIndex:this.pageIndex
+					};
+					API.pageListHR(data).then((res) => {
+							 
+						this.list=[
+							...this.list,
+							...res.data.data
+						];
+						this.recordsTotal=res.data.recordsTotal
+						uni.hideLoading()
+						 
+					}).catch(error => {
+							uni.showToast({
+								
+								title:error
+							})
+					})
+				}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 104 - 0
pages/hr/my/look/look.vue

@@ -0,0 +1,104 @@
+
+<template>
+	<view>
+		<u-navbar title="看过的人才"></u-navbar>
+		<view class="jp-search">
+			<u-search placeholder="查询简历" v-model="keyword"  @search="getList(true)" :show-action="false"></u-search>
+		</view>
+		 
+		<view class="jp-work">
+			<view class="jp-quantity">
+				<p>数量</p><span>{{recordsTotal}}</span>
+			</view>
+			<view class="jp-work-list">
+				 <ResumeItem v-for="(item ,index) in list" :key="item.id" :item="item"
+				  obj="name=realName,positionName=positionCategoryName,sexN=sex"
+				 
+				  ></ResumeItem>
+				  
+				 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 
+			</view>
+			 
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.jp-quantity{
+		background-color: #fff;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+		font-size: 32rpx;
+		padding-left: 30rpx;
+		margin-top: 20rpx;
+		border-bottom: 1px solid #f7f7f7;
+		p{
+			color:#666;
+		}
+		span{
+			color:#1A91EA;
+			margin-left: 10rpx;
+		}
+	}
+	.jp-search{
+		background-color: #fff;
+		padding: 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		margin-bottom: 20rpx;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+	.jp-work-line{
+		display: flex;
+		align-items: center;
+		margin-top:10rpx;
+	}
+</style>

+ 156 - 0
pages/hr/my/my.vue

@@ -0,0 +1,156 @@
+<template>
+	<view>
+		<u-navbar :is-back="false" title="我的" :background="background" title-color="#fff" :border-bottom="false">
+			<view class="slot-wrap" v-if="false">
+				<u-icon name="mb-cog" custom-prefix="custom-icon" size="44" color="#fff"></u-icon>
+			</view>
+		</u-navbar>
+		<view class="user-head">
+			<view class="user-head-img">
+				<!-- <view class="head-state">已认证</view> -->
+				<u-avatar :src="src" size="140"></u-avatar>
+			</view>
+			<view class="user-head-text">
+				<h3 v-text="hr.realName"></h3>
+				<p v-text="hr.companyName"></p>
+			</view>
+		</view>
+		<view class="user-main">
+			<view class="title">招聘统计</view>
+			<view class="main">
+				<view class="main-item" @click="gotoUrl('pages/hr/my/position/position')">
+					<span>我的职位</span>
+					<h3>{{info.jobCount?info.jobCount:0}}</h3>
+				</view>
+				<u-line color="#ccc" length="40" direction="col" margin="0 20rpx"/>
+				<view class="main-item" @click="gotoUrl('pages/hr/my/look/look')">
+					<span>看过的人才</span>
+					<h3>{{info.browseResumeCount?info.browseResumeCount:0}}</h3>
+				</view>
+				<u-line color="#ccc" length="40" direction="col" margin="0 20rpx"/>
+				<view class="main-item" @click="gotoUrl('pages/hr/my/follow/follow')">
+					<span>对您感兴趣</span>
+					<h3>{{info.interestTimes?info.interestTimes:0}}</h3>
+				</view>
+			</view>
+		</view>
+		<u-cell-group>
+			<u-cell-item title="职位管理" @click="gotoUrl('pages/hr/my/position/position')" ></u-cell-item>
+			<u-cell-item title="求职管理" @click="gotoUrl('pages/hr/my/enroll/enroll')"></u-cell-item>
+			<u-cell-item title="收藏简历" @click="gotoUrl('pages/hr/my/collection/collection')"></u-cell-item>
+		</u-cell-group>
+		<u-cell-group class="u-m-t-20">
+			<u-cell-item title="关于我们" ></u-cell-item>
+			<u-cell-item title="联系客服" value="400-1231-122"></u-cell-item>
+		</u-cell-group>
+		<view class="signOut">
+			退出登录
+		</view>
+		<Tabbar-Hr :current="2" ></Tabbar-Hr> 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+ page{
+	 background-color: #f7f7f7;
+ }
+</style>
+<style scoped lang="scss">
+	.slot-wrap{
+		display: flex;
+		justify-content: flex-end;
+		flex: 1;
+		padding-right: 24rpx;
+	}
+	.user-head{
+		background: #2e99fa;
+		height: 110px;
+		display: flex;
+		align-items: center;
+		padding: 0 30rpx;
+		position: relative;
+		overflow: hidden;
+		&::after{
+			content: '';
+			position: absolute;
+			background:linear-gradient(70deg, #3298fb, #45a6fd);
+			height:360rpx;
+			width: 360rpx;
+			border-radius: 50%;
+			right: -60rpx;
+			z-index:0;
+		}
+		 .user-head-text{
+			 color:#fff;
+			 margin-left: 20rpx;
+			 position: relative;
+			 z-index: 1;
+			 h3{
+				 font-size: 40rpx;
+				 margin-bottom: 20rpx;
+			 }
+		 }
+		 .user-head-img{
+			 position: relative;
+			 .head-state{
+				 height:36rpx;
+				 width: 100rpx;
+				 background-color: #fff;
+				 border-radius: 8rpx;
+				 text-align: center;
+				 line-height: 36rpx;
+				 position: absolute;
+				 z-index: 99;
+				 bottom:0;
+				 left: 50%;
+				 margin-left: -50rpx;
+				 font-size: 24rpx;
+				 color:#1677FF;
+			 }
+		 }
+	}
+	.user-main{
+		background-color: #fff;
+		margin-top: 20rpx;
+		margin-bottom: 20rpx;
+		.title{
+			margin:0 30rpx;
+			border-bottom: 1px solid #f7f7f7;
+			padding: 20rpx 0;
+			font-size: 32rpx;
+		}
+		.main{
+			display: flex;
+			padding: 30rpx;
+			justify-content: space-between;
+			align-items: center;
+			.main-item{
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				span{
+					color:#999;
+					font-size: 24rpx;
+				}
+				h3{
+					margin-top: 10rpx;
+					font-size: 40rpx;
+				}
+			}
+		}
+	}
+	.signOut{
+		height: 100rpx;
+		line-height: 100rpx;
+		text-align: center;
+		background-color: #fff;
+		margin-top: 20rpx;
+		border-bottom: 1px solid #f3f4f7;
+		border-top: 1px solid #f3f4f7;
+	}
+</style>

+ 123 - 0
pages/hr/my/position/index.js

@@ -0,0 +1,123 @@
+
+
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/my.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				src: '/static/img/head/png',
+				keyword: '遥看瀑布挂前川',
+				list: [
+					{
+					name: '招聘中',
+					list:[],
+					status:"publish",
+					pageIndex:1,
+					recordsTotal:0
+				}, {
+					name: '审核中',
+					list:[],
+					status:"approve",
+					pageIndex:1,
+					recordsTotal:0
+				}, {
+					name: '已下架',
+					list:[],
+					status:"close",
+					pageIndex:1,
+					recordsTotal:0
+				}],
+				current: 0,
+				customStyle: {
+					margin: '0',
+					background: 'none!important'
+				}
+			}
+		},
+		components: {
+		
+		},
+		onReachBottom() {
+			if(this.list[this.current].list.length<this.list[this.current].recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			publish(count,id){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+			
+				var data={
+					recruitmentId:id,
+					publishTag:count
+				};
+				API.publishRecruitment(data).then((res) => {
+					for(var i in this.list){
+						var obj=this.list[i];
+						obj.list=[]
+						obj.pageIndex=1
+					}	 
+					this.getList()
+					uni.hideLoading()
+					
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			 myLoadmore(){
+			 	var obj=this.list[this.current];
+			 	obj.pageIndex+=1;
+			 	this.getList()
+			 }, change(index) {
+				this.current = index;
+				var obj=this.list[this.current];
+				
+				if(obj.list.length==0){
+					this.getList()
+				}
+			},
+			getList(){
+				
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				var obj=this.list[this.current];
+				var data={
+					status:obj.status,
+					pageIndex:obj.pageIndex
+				};
+				API.loadOwnRecruitments(data).then((res) => {
+						 
+					obj.list=[
+						...obj.list,
+						...res.data.data
+					];
+					obj.recordsTotal=res.data.recordsTotal
+					uni.hideLoading()
+					console.log(this.list)
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 120 - 0
pages/hr/my/position/position.vue

@@ -0,0 +1,120 @@
+<template>
+	<view>
+		<u-navbar title="职位管理"></u-navbar>
+		
+		<view class="jp-tab">
+			<view class="jp-quantity">
+				<p>数量</p><span>{{list[current].recordsTotal}}</span>
+			</view>
+			<u-tabs :list="list" :current="current" @change="change"></u-tabs>
+		</view>
+		<view class="jp-work">
+			<view class="jp-work-list">
+				<view class="jp-work-item" v-for="(item ,index) in list[current].list" :key="index" 
+				 @click="gotoUrl('pages/hr/index/recruitInfo/recruitInfo?id='+item.recruitmentId)">
+					<view class="jp-work-name">
+						<h3>{{item.title}}</h3>
+						<span>{{list[current].name}}</span>
+					</view>
+					<view class="jp-work-line">
+						<span>{{item.position_name}}</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>{{item.workYear}}</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>{{item.educationName}}</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>{{item.wageTypeName}}</span>
+					</view>
+					<view class="jp-work-info">
+						<p>{{item.updateTime}}</p>
+						<u-button size="mini" type="error" v-if="current!=1&&item.status==1" :custom-style="customStyle" plain @click="publish(0,item.recruitmentId)">下架</u-button>
+						<u-button size="mini" type="primary"   v-if="current!=1&&item.status==0":custom-style="customStyle" plain @click="publish(1,item.recruitmentId)">上架</u-button>
+						<u-button size="mini" style="margin:0;"  v-if="current==1" :disabled="true">上架</u-button>
+						
+					</view>
+				</view>	
+			</view>
+			
+			<u-loadmore @loadmore="myLoadmore" :status="list[current].list.length<list[current].recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.jp-quantity{
+		background-color: #fff;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+		font-size: 32rpx;
+		padding-left: 30rpx;
+		margin-top: 20rpx;
+		border-bottom: 1px solid #f7f7f7;
+		p{
+			color:#666;
+		}
+		span{
+			color:#1A91EA;
+			margin-left: 10rpx;
+		}
+	}
+	.jp-search{
+		background-color: #fff;
+		padding: 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		margin: 20rpx 0;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#1677FF
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			
+			p{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.jp-work-line{
+		display: flex;
+		align-items: center;
+		margin-top:10rpx;
+	}
+</style>

+ 88 - 0
pages/hr/newsIndex/index.js

@@ -0,0 +1,88 @@
+
+	
+	
+	
+	//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/common.js'
+
+	import TabbarHr from '@/components/TabbarHr.vue'
+	
+	export default {
+			data() {
+				return {
+					list:[],
+					isReady:false,
+					background: {
+						backgroundColor: '#2295ff',
+					},
+					
+					src:[
+						'/static/img/news1.png',
+						'/static/img/news2.png',
+						'/static/img/news4.png',
+						'/static/img/news5.png',
+						'/static/img/news3.png',
+					],
+				}
+			},
+			components: {
+				TabbarHr
+			},
+			onLoad(op){
+				//this.id=op.id;
+			},
+		methods: {
+				gotoUrlNews(row){
+ 					var url='pages/hr/newsIndex/newsList/newsList?id='+row.classifyId;
+					if(row.classifyId=="5"){
+						url="pages/hr/newsIndex/servicesList/servicesList"
+					}
+					
+					if(row.classifyId=="4"){
+						url="pages/job/newsIndex/newsRecommend/newsRecommend"
+					}
+					
+					if(row.classifyId=="6"){
+						url="pages/hr/newsIndex/newsRecommend/newsRecommend"
+					}
+					this.gotoUrl(url)
+				},
+				 getList(){
+					 uni.showLoading({
+					 	title:"加载中",mask:true,
+					 })
+					API.messageClassifyHR().then((response) => {
+						this.list=response.data;
+						uni.hideLoading()
+					}).catch(error => {
+							uni.showToast({
+								
+								title:error
+							})
+					})
+				 },
+				getInfo(){
+								 
+								API.readMessageNum().then((response) => {
+									var a =response.data;
+									
+									this.carhelp.set("tabbar_show_num",a);
+									
+								}).catch(error => {
+										uni.showToast({
+											
+											title:error
+										})
+								})
+				},
+			},onReady(){ 
+					this.getInfo();
+				this.getList();
+				this.isReady=true;
+			},onShow(){
+				if(this.isReady){
+						this.getInfo();
+						this.getList();
+				}	
+			},
+		}

+ 81 - 0
pages/hr/newsIndex/newsEntry/index.js

@@ -0,0 +1,81 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/common.js'
+import CompanyInfo from '@/components/job/companyInfo.vue'
+
+export default {
+		data() {
+			return {
+				id:"",
+				showcompany:false,
+				companyId:"",
+				info:{
+					messageDetail:{},
+					company:{}
+				},
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+			CompanyInfo
+		},
+		onReachBottom() {
+			
+			if(this.showcompany){
+				this.$refs.refCompanyInfo.myLoadmore()
+			}
+		},
+		onLoad(op){
+			this.id=op.id;
+		},
+		methods: {
+			changeAgree(i){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				
+				
+				API.changeAgree({
+					messageId:this.id,
+					isAgree:i
+				}).then((res)=>{
+					  //this.info=res.data;
+					  this.info.isAgree=i;
+					// uni.hideLoading()	
+						 uni.showToast({
+						 	title:"操作成功"
+						 })
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			},
+			 getInfo(){
+			 	uni.showLoading({
+			 		title:"加载中",mask:true,
+			 	})
+			 	API.messageDetail(this.id).then((res)=>{
+			 		  this.info=res.data;
+					  if(this.info.company){
+						  this.companyId=this.info.company.id
+						  
+					  }
+			 		 uni.hideLoading()		
+			 	 }).catch(error => {
+			 			uni.showToast({
+			 				title:error
+			 			})
+			 	})
+			 	
+			 }
+			
+		},onReady(){ 
+			this.getInfo()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 120 - 0
pages/hr/newsIndex/newsEntry/newsEntry.vue

@@ -0,0 +1,120 @@
+<template>
+	<view>
+		<CompanyInfo ref="refCompanyInfo" v-show="showcompany" :vshow="showcompany"   :companyId="companyId" :companyInfo="info.company"  v-if="info.company"  @back="showcompany=false" ></CompanyInfo>
+		
+		<view v-show="!showcompany">
+			<u-navbar title="详情"   >
+				<view slot="right">
+					<u-button  size="mini" :type="info.isAgree?'success':'error'"  v-if="info.isNeedAgree&&info.isAgree!=null" > {{info.isAgree?'已同意':'已拒绝'}}</u-button>
+					
+				</view>
+				
+				
+			</u-navbar>
+			 <view class="company-logo" v-if="info.company"
+				 style="
+				     border-bottom: 1px inset;
+				 "
+				 
+				 @click="showcompany=true">
+				<u-avatar :src="info.company.logo" size="100" mode="square"></u-avatar>
+				<h3>{{info.company.name}}</h3>
+			</view> 
+			<view class="servicesInfo" v-if="info.messageDetail" style="padding-bottom: 80px;">
+				<view class="title">
+					<h2>{{info.messageDetail.title}}</h2>
+				</view>
+				<view class="main"  v-html="info.messageDetail.content">
+					 
+				</view>
+			</view>
+			<view class="servicesInfo-foot" v-if="info.isNeedAgree&&info.isAgree==null">
+				<u-button class="servicesInfo-btn" shape="circle" @click="changeAgree(0)">拒绝</u-button>
+				<u-button class="servicesInfo-btn" type="success"  @click="changeAgree(1)" shape="circle">同意</u-button>
+			</view>
+		</view>
+		
+	 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style scoped lang="scss">
+	.company-logo{
+		display: flex;
+		align-items: center;
+		padding: 30rpx;
+		h3{
+			font-size: 36rpx;
+			margin-left: 20rpx;
+			font-weight: normal;
+		}
+	}
+	.servicesInfo{
+		padding: 30rpx;
+		.title{
+			text-align: center;
+		}
+		.main{
+			line-height:48rpx;
+			margin-top:40rpx;
+		}
+	}
+	.servicesInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		position: fixed;
+		padding: 0 10rpx;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		.servicesInfo-btn{
+			flex: 0.5;
+			margin: 0 10rpx;
+		}
+	}
+	.newsList-time{
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+		span{
+			background-color: #c8c8c8;	
+			padding: 6rpx 16rpx;
+			color:#fff;
+			border-radius:10rpx;
+		}
+	}
+	.newsList-item{
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		.newsList-head{
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+			span{
+				color:#FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+		.newsList-main{
+			padding-bottom: 20rpx ;
+			color:#999;
+		}
+		.newsList-foot{
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>

+ 59 - 0
pages/hr/newsIndex/newsIndex.vue

@@ -0,0 +1,59 @@
+<template>
+	<view>
+		<u-navbar :is-back="false" title="消息" :background="background" title-color="#fff"></u-navbar>
+		<view class="newsIndex">
+			<view class="newsIndex-item" v-for="(item,i) in list " :key="i" @click="gotoUrlNews(item)">
+				<u-avatar :src="src[i]"></u-avatar>
+				<view class="newsIndex-text">
+					<view class="newsIndex-row">
+						<h3>{{item.classify}}</h3>
+						<p>{{item.newMessage&&item.newMessage.createTime}}</p>
+					</view>
+					<view class="newsIndex-row">
+						<p>{{item.newMessage&&item.newMessage.title}}</p>
+						<u-badge size="mini" type="error" :count="item.num" :offset="[0,0]"></u-badge>
+					</view>
+				</view>
+			</view>
+		</view>
+		<Tabbar-Hr :current="1" ></Tabbar-Hr>
+		
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.newsIndex-item{
+		display: flex;
+		padding: 20rpx;
+		background-color: #fff;
+		align-items: center;
+		.newsIndex-text{
+			flex: 1;
+			min-width: 0;
+			margin-left: 20rpx;
+		}
+		.newsIndex-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			position: relative;
+			&:first-child{
+				margin-top: 0;
+			}
+			p{
+				color:#999;
+			}
+		}
+	}
+</style>

+ 68 - 0
pages/hr/newsIndex/newsList/index.js

@@ -0,0 +1,68 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+ import * as API from '@/apis/common.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				page:{
+					classifyId:0,
+					pageIndex:1,
+					pageSize:10,
+				
+				},
+				result:[],
+				recordsTotal:0,
+			}
+		},
+		components: {
+		
+		},
+		// onPullDownRefresh() {
+		// 	if(this.result.length<this.recordsTotal){
+		// 		this.myLoadmore();
+		// 	}
+		// },
+		onReachBottom() {
+			if(this.result.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		onLoad(op){
+			this.page.classifyId=op.id;
+		},
+		methods: {
+			myLoadmore(){
+				this.page.pageIndex++;
+				this.getList();
+			},
+			 getList(){
+				 uni.showLoading({
+				 	title:"加载中",mask:true,
+				 })
+				API.messageList(this.page).then((response) => {
+					this.result=[
+						
+						...this.result,
+						...response.data.data,
+						
+					];
+					this.recordsTotal=response.data.recordsTotal
+					    uni.stopPullDownRefresh();
+					uni.hideLoading()
+				}).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			 },
+			
+		},onReady(){ 
+			this.getList();
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 87 - 0
pages/hr/newsIndex/newsList/newsList.vue

@@ -0,0 +1,87 @@
+<template>
+	<view>
+		<u-navbar title="消息"></u-navbar>
+		<view class="newsList">
+
+			<template v-for="(item,i) in result">
+
+				<view class="newsList-time" :key="i">
+					<span>{{item.createTime}}</span>
+				</view>
+				<view class="newsList-item" @click="item.isRead=true,gotoUrl('pages/hr/newsIndex/newsEntry/newsEntry?id='+item.id)">
+					<view class="newsList-head">
+						<h3 class="u-line-1">{{item.title}}</h3>
+						<span :style="item.isRead?'color:#0ebd5f':''" >[{{item.isRead?'已读':'未读'}}]</span>
+					</view>
+					<view class="newsList-main" v-html="item.content">
+
+					</view>
+					<view class="newsList-foot">
+						<span>查看详情</span>
+						<u-icon name="arrow-right" color="#999" size="24"></u-icon>
+					</view>
+				</view>
+			</template>
+			<u-loadmore @loadmore="myLoadmore" :status="result.length<recordsTotal?'loadmore':'nomore'"></u-loadmore>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page {
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.newsList-time {
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+
+		span {
+			background-color: #c8c8c8;
+			padding: 6rpx 16rpx;
+			color: #fff;
+			border-radius: 10rpx;
+		}
+	}
+
+	.newsList-item {
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+
+		.newsList-head {
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+
+			span {
+				color: #FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+
+		.newsList-main {
+			padding-bottom: 20rpx;
+			color: #999;
+			height: 70px;
+			overflow: hidden;
+		}
+
+		.newsList-foot {
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>

+ 71 - 0
pages/hr/newsIndex/newsRecommend/index.js

@@ -0,0 +1,71 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/news.js'
+
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				list: [ ],
+				pageIndex:1,
+				recordsTotal:0,
+				src: '/static/img/head/png',
+				background: {
+					backgroundColor: '#2295ff',
+				},
+			}
+		},
+		components: {
+		ResumeItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		onReachBottom() {
+			if(this.list.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },getList(bl){
+			 					uni.showLoading({
+			 						title:"加载中",mask:true,
+			 					})
+			 					 if(bl){
+			 						 this.list=[];
+			 						 this.pageIndex=1;
+			 					 }
+			 					var data={
+ 			 						pageIndex:this.pageIndex
+			 					};
+			 					API.positionResumeList(data).then((res) => {
+			 							 
+			 						this.list=[
+			 							...this.list,
+			 							...res.data.data
+			 						];
+			 						this.recordsTotal=res.data.recordsTotal
+			 						uni.hideLoading()
+			 						 
+			 					}).catch(error => {
+			 							uni.showToast({
+			 								
+			 								title:error
+			 							})
+			 					})
+			 				}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 127 - 0
pages/hr/newsIndex/newsRecommend/newsRecommend.vue

@@ -0,0 +1,127 @@
+<template>
+	<view>
+		<u-navbar title="推荐简历" ></u-navbar>
+		<view class="jp-work">
+			<view class="jp-work-list">
+				
+				<ResumeItem v-for="(item ,index) in list" :key="item.id" :item="item"
+				 obj="userName=realName,dreamMoneyName=dreamMoney,sexName=sex,jobStatusName=jobStatus,userAge=age,workExpName=workExp,educationName=education,userAddress=address"
+				
+				 ></ResumeItem>
+				 
+				<u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				
+				
+			<!-- 	<view class="jp-work-item">
+					<view class="jp-work-name">
+						<h3>市场营销专员</h3>
+						<span>¥3000-5000/月</span>
+					</view>
+					<view class="jp-work-tag">
+						<u-tag text="在职-考虑机会"  mode="dark" bg-color="#f1f1f7" color="#999" size="mini"/>
+					</view>
+					<view class="jp-work-line">
+						<span>男</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>29岁</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>2年以上</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>高中</span>
+					</view>
+					<view class="jp-work-info">
+						<view class="u-flex">
+							<u-avatar :src="src" size="40"></u-avatar>
+							<p>周凯</p><p>开发区</p>
+						</view>
+					</view>
+				</view>	 -->
+				
+				
+			</view>
+		<!-- 	<view class="jp-work-list">
+				<view class="jp-work-item">
+					<view class="jp-work-name">
+						<h3>市场营销专员</h3>
+						<span>¥3000-5000/月</span>
+					</view>
+					<view class="jp-work-tag">
+						<u-tag text="在职-考虑机会"  mode="dark" bg-color="#f1f1f7" color="#999" size="mini"/>
+					</view>
+					<view class="jp-work-line">
+						<span>男</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>29岁</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>2年以上</span>
+						<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+						<span>高中</span>
+					</view>
+					<view class="jp-work-info">
+						<view class="u-flex">
+							<u-avatar :src="src" size="40"></u-avatar>
+							<p>周凯</p><p>开发区</p>
+						</view>
+					</view>
+				</view>	
+			</view>
+		 --></view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		margin: 20rpx 0;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+	.jp-work-line{
+		display: flex;
+		align-items: center;
+		margin-top:10rpx;
+	}
+</style>

+ 50 - 0
pages/hr/newsIndex/servicesInfo/index.js

@@ -0,0 +1,50 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/news.js'
+
+export default {
+		data() {
+			return {
+				company:{},
+					info:{},
+				isReady:false,
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			
+			this.id=op.id;
+		},
+		methods: {
+			 getInfo(){
+			 				 uni.showLoading({
+			 				 	 title: '加载中'
+			 				 })
+			 				 API.getLabourDetails(this.id).then((res)=>{
+			 					  this.company=res.data;
+			 					 this.info=res.data.labourServices;
+			 					uni.hideLoading()
+								this.$nextTick(()=>{
+									var list =document.getElementsByClassName("resumeInfo-main")[0].getElementsByTagName("img");
+									for(var i=0;i<list.length;i++){
+									    list[i].style='width: 100%;height: 100%;'
+									}
+								})
+			 				 }).catch(error => {
+			 						uni.showToast({
+			 							
+			 							title:error
+			 						})
+			 				})
+			 },
+			
+		},onReady(){ 
+			this.getInfo();
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 66 - 0
pages/hr/newsIndex/servicesInfo/servicesInfo.vue

@@ -0,0 +1,66 @@
+<template>
+	<view>
+		<u-navbar title="详情"></u-navbar>
+		<view class="resumeInfo">
+			<view class="resumeInfo-company">
+				<u-avatar :src="company.logo" size="100" mode="square"></u-avatar>
+				<view class="resumeInfo-company-text">
+					<view class="resumeInfo-company-name">
+						<h3> {{company.name}}</h3>
+						<view class="u-flex">
+							<p>{{info.typeN}}</p>
+							<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+							<span>{{info.createTime}}</span>
+						</view>
+					</view>	
+				</view>
+			</view>
+			<view class="resumeInfo-main" v-html="info.content">
+				
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style scoped lang="scss">
+	
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;	
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		padding: 20rpx 0;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+			margin-left: 20rpx;
+		}
+		.resumeInfo-company-name{
+			h3{
+				margin-bottom: 10rpx;
+				font-size: 36rpx;
+			}
+			p{
+				color:#1677FF
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-main{
+		border-top: 1px solid #f7f7f7;
+		padding-top: 20rpx;
+	}
+</style>

+ 83 - 0
pages/hr/newsIndex/servicesList/index.js

@@ -0,0 +1,83 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/news.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				list: [{
+					name: '我要用人',
+					list:[],
+					approvalStatus:"1",
+					pageIndex:1,
+					recordsTotal:0
+				}, {
+					name: '我有工人',
+					list:[],
+					approvalStatus:"2",
+					pageIndex:1,
+					recordsTotal:0
+				}],
+				current: 0
+			}
+		},
+		components: {
+		
+		},
+		onReachBottom() {
+			if(this.list[this.current].list.length<this.list[this.current].recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			change(index) {
+				this.current = index;
+				var obj=this.list[this.current];
+				
+				if(obj.list.length==0){
+					this.getLabourList()
+				}
+			},
+			myLoadmore(){
+				var obj=this.list[this.current];
+				obj.pageIndex+=1;
+				this.getLabourList()
+			},
+			 getLabourList(){
+				 uni.showLoading({
+				 	title:"加载中",mask:true,
+				 })
+				 var obj=this.list[this.current];
+				 var data={
+				 	typeB:obj.approvalStatus,
+				 	pageIndex:obj.pageIndex
+				 };
+				 API.getLabourList(data).then((res) => {
+				 		 
+				 	obj.list=[
+				 		...obj.list,
+				 		...res.data.data
+				 	];
+				 	obj.recordsTotal=res.data.recordsTotal
+				 	uni.hideLoading()
+				 	console.log(this.list)
+				 }).catch(error => {
+				 		uni.showToast({
+				 			
+				 			title:error
+				 		})
+				 })
+			 }
+			
+		},onReady(){ 
+			this.getLabourList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 57 - 0
pages/hr/newsIndex/servicesList/servicesList.vue

@@ -0,0 +1,57 @@
+<template>
+	<view>
+		<u-navbar title="劳务对接"></u-navbar>
+		<view class="jp-work-tab">
+			<u-tabs :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
+		</view> 
+		<view class="servicesList">
+			<view class="servicesList-item" v-for="(item ,index) in list[current].list" :key="index" @click="gotoUrl('pages/hr/newsIndex/servicesInfo/servicesInfo?id='+item.id)" >
+				<view class="servicesList-head">
+					<h3 class="u-line-1">{{item.companyName}}</h3>
+					<span>{{item.createTime}}</span>
+				</view>
+				<view class="servicesList-main" v-html="item.content">
+					 
+				</view>
+			</view>
+			<u-loadmore @loadmore="myLoadmore" :status="list[current].list.length<list[current].recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+			
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.servicesList-item{
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		.servicesList-head{
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+			span{
+				color:#999;
+				min-width: 250rpx;
+				text-align: right;
+			}
+		}
+		.servicesList-main{
+			border-top: 1px solid #f7f7f7;
+			padding: 20rpx 0;
+			color:#666;
+			    height: 120px;
+			    overflow: hidden;
+		}
+	} 
+</style>

+ 364 - 0
pages/hr/query/index.js

@@ -0,0 +1,364 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/index.js'
+import * as API_common from '@/apis/common.js'
+
+import ResumeItem from '@/components/hr/ResumeItem.vue'
+
+export default {
+		data() {
+			return {
+				nochange:false,
+				ing:false,
+				myfocus:true,
+				key:'',
+				record:[],
+				result:[],
+				selectShow:false,
+				selectShowTree:false,
+				
+				selectShowIndex:0,
+				selectIndexList:[[],[],[],[]],
+				pageIndex:1,
+		 
+				recordsTotal:0,
+				popupList:[],
+				back:false,
+				src:"",
+				isReady:false,
+				 whereDataInit:[
+				 	{
+				 		value:"",
+						name:"月薪范围",
+				 		label:"月薪范围"
+				 	},{
+				 		value:"",
+						name:"工作经验",
+				 		label:"工作经验"
+				 	},{
+				 		value:"",
+				 		label:"学历",
+						name:"学历",
+				 	},{
+				 		value:"",
+						name:"招聘岗位",
+				 		label:"招聘岗位"
+				 	}
+				 ],
+				whereData:[
+					
+				],
+				dataList:[
+					"b5e4a52a-9f89-4e3b-976f-79207a40587d",//月薪
+					"7724a25f-a781-46f4-b048-d9812108ff02" , //工作经验
+					"c1887d9d-e945-4875-be3f-905195cd8a8e"//学历
+				],
+				dataMap:{},
+			}
+		},
+		components: {
+			ResumeItem
+		},
+		onLoad(op){
+			this.whereData={
+				...this.whereDataInit
+			}
+			
+			if(op.key){
+				this.key=op.key;
+			}
+			if(op.all){
+				this.myfocus=false;
+			}
+			
+		},
+		onReachBottom() {
+			if(this.result.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			
+			spiltItem(text){
+				if(text){
+					return text.split(",")
+					
+				}else{
+					return []
+				}
+			},
+		 
+			getScreenList(){
+				
+				API_common.getScreenList().then((response) => {
+					
+					var list=response.data;
+					 var tree=[];
+					 var map=new Map();
+					 var max=0;
+					 var all={
+						 extra:0,
+						 name:"全部岗位"
+					 }
+					 tree.push(all);
+					list.forEach((item)=>{
+						if(item.level>max){
+							max=item.level;
+						}
+						if(item.parentId){
+							
+						}else{
+							item.extra=tree.length,
+							tree.push(item);
+						}
+						
+						map.set(item.id,item);
+						this.setChildren(item,max,item);
+					})
+					this.setChildren(all,max,all);
+					
+					 list.forEach((item)=>{		
+					 	if(item.parentId){
+					 		var obj=map.get(item.parentId);
+							item.extra=obj.children.length
+							obj.children.push(item)
+					 	} 	
+					 })
+					
+					this.popupList=tree;
+						uni.hideLoading()
+					// .map((item)=>{
+					// 	return item.name;
+					// })
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			confirmSelect(obj){
+				var index=this.selectShowIndex;
+				if(obj[0].value==undefined){
+									 obj[0].value="";
+				}
+				var list=[];
+				if(obj[0].extra){
+					list.push(obj[0].extra);
+					
+				}else{
+					list.push(0);
+					
+				}
+				this.selectIndexList[index]=list;
+				
+				this.whereData[index]=obj[0];
+				this.submit()
+				
+			},
+			confirmSelectTree(obj){
+				console.log(obj)
+				var list=[];
+				for(var i in obj){
+					if(i==0){
+						this.whereData[3]=obj[i];
+					}
+					if(obj[i].extra){
+						list.push(obj[i].extra);
+						
+					}else{
+						list.push(0);
+						
+					}
+					if(obj[i].value){
+						this.whereData[3]=obj[i];
+					}
+				}
+				this.selectIndexList[3]=list;
+				this.submit()
+			},
+			setChildren(item,i,it){
+				
+				if(i>1){
+					var i2=i-1;
+					var myit={extra:0}
+					it.children=[myit]
+					return this.setChildren(item,i2,myit);
+				}else{
+					return	item
+				}
+				
+			},
+			getDataMap(){
+				uni.showLoading({
+				    title: '加载中'
+				});
+				API_common.getData(this.dataList.join()).then((res) => {
+					
+					 this.dataMap=res.data;
+					 
+					 for(var key in this.dataMap){
+						this.dataMap[key].forEach((item,index)=>{
+						 	item.extra=(index+1);
+						 })
+ 					 }
+					 
+					 
+					this.getScreenList();
+						
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+		 
+			setHistory(){
+				
+				if(!this.key){
+					return
+				}
+			    //搜索记录保存
+			    var sz=this.carhelp.get("searchHistory");
+			    if(!sz){
+			        sz=[];
+			    }
+			    var temp =[];
+			    //去重 ,后插入的,排队到最前面
+			    if(sz.length){
+			        for(var i in sz){
+			            if(i==0){
+			                temp.push(this.key);
+			            }
+			            if(sz[i]==this.key){
+			                continue;
+			            }
+			            temp.push(sz[i]);
+			
+			            if(temp.length==10){
+			                break
+			            }
+			        }
+			    }else{
+			        temp.push(this.key);
+			    }
+				this.record=temp;
+			    this.carhelp.set("searchHistory",temp);
+			},
+			clearBtn(){
+				this.carhelp.set("searchHistory",[]);
+				this.record=[];
+				//this.$refs.common.alert("搜索内容已清空")
+				uni.showToast({
+					icon:'none' ,title:"搜索内容已清空"
+				})
+			},
+			change(){
+				if(this.nochange){
+					this.nochange=false;
+					return
+				}
+				this.ing=false;
+				document.getElementsByTagName('uni-page-wrapper')[0].style="background-color: #ffffff;"
+				
+				if(this.key==""){
+					this.result=[]
+				}
+				
+			},
+			noSearch(){
+				this.ing=true;
+				this.whereData={
+					...this.whereDataInit
+				}
+				this.key="";
+				
+				this.submit()
+			},
+			myLoadmore(){
+				this.submit(true);
+			},
+			 submit( bl){
+				 
+			 	this.setHistory();
+				if(bl){
+					this.pageIndex++;				
+				}else{
+					this.pageIndex=1;				 
+									
+				}
+			 	  var form=  {
+						positionName:this.key,
+						pageIndex:this.pageIndex,
+						pageSize:20, 
+						dreamMoney:this.whereData[0].value,
+						workExp:this.whereData[1].value,
+						education:this.whereData[2].value,
+						positionId:this.whereData[3].value,
+					};
+				
+			 	
+				// this.ing=true;
+				// this.result=[{}]
+				// this.$forceUpdate()
+				// return;
+			 	API.loadAllResumes(form).then((res) => {
+			 		this.ing=true;
+					if(bl){
+						this.result=[
+							...this.result,
+							...res.data.data
+						];
+						
+					}else{
+						this.result=res.data.data;
+						
+					}
+			 
+					
+			 		this.recordsTotal=res.data.recordsTotal
+			
+			 		document.getElementsByTagName('uni-page-wrapper')[0].style="background-color: #f7f7f7;"
+			 		
+			 		
+			 		
+			 	}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			 }
+			
+		},onReady(){ 
+			
+			this.record=this.carhelp.get("searchHistory");
+			this.getDataMap();
+			this.isReady=true;
+			if(this.key||!this.myfocus ){
+				this.submit()
+			}
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},computed:{
+			getShowDataList(){
+				
+				var list=this.dataMap[this.dataList[this.selectShowIndex]];
+				if(list){
+					var re=[
+						...list
+					]
+					re.unshift(
+						this.whereDataInit[this.selectShowIndex]
+					)
+					return re;
+				}else{
+					return [];
+				}
+				
+			},
+		}
+		
+	}

+ 160 - 0
pages/hr/query/query.vue

@@ -0,0 +1,160 @@
+<template>
+	<view :style="ing&&result.length==0?'':'background-color: #ffffff'">
+		<u-navbar>
+			<view class="jp-search">
+				<u-search placeholder="" :focus="myfocus" @focus="ing=false"  v-model="key" @change="change()"   @search="submit"  :show-action="false"></u-search>
+			</view>
+			<view class="jp-search-btn" @click="noSearch">
+				<span>取消</span>
+			</view>
+		</u-navbar>
+		<view class="jp-search-title" v-show="!ing">
+			<span>最近搜索</span>
+			<u-icon name="stLine-trash-l" @click="clearBtn" custom-prefix="custom-icon" color="#999"></u-icon>
+		</view>
+		<view class="jp-search-tag" v-show="!ing">
+			<template   v-for="(item,index) in record" >
+				<u-tag :key="index" @click="key=item,nochange=true,submit(item)"  :text="item"  mode="dark" bg-color="#f1f1f1" color="#999"/>
+			</template>
+		</view>
+		
+		<view class="jp-work" v-show="ing&&result.length" >
+			<u-select v-model="selectShow" 
+			  @confirm="confirmSelect" value-name="id"
+			   :default-value="selectIndexList[selectShowIndex]"
+			 label-name="name"	 :list="getShowDataList"></u-select>
+			
+			<u-select v-model="selectShowTree"
+			 mode="mutil-column-auto" value-name="id"	
+			 @confirm="confirmSelectTree"
+			 :default-value="selectIndexList[3]"
+			  label-name="name"	 :list="popupList"></u-select>
+
+			<view class="jp-work-screen">
+				<view class="screen" @click="selectShowIndex=0,selectShow=true">
+					<span v-text="whereData[0].label">月薪范围</span>
+					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+				</view>
+				<view class="screen" @click="selectShowIndex=1,selectShow=true">
+					<span v-text="whereData[1].label">工作经验</span>
+					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+				</view>
+				<view class="screen" @click="selectShowIndex=2,selectShow=true">
+					<span v-text="whereData[2].label">学历</span>
+					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+				</view>
+				<view class="screen" @click="selectShowTree=true" >
+					<span v-text="whereData[3].label">招聘岗位</span>
+					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+				</view>
+			</view>
+			<view class="jp-work-list">
+				<ResumeItem v-for="(item ,index) in result"
+				 
+				 obj="eduName=education"
+				 :key="item.id" :item="item" ></ResumeItem>
+				
+				<!-- <view v-show="ing&&result.length&&result.length==recordsTotal" style="text-align:center;    padding: 10px;">
+					没有更多记录了
+				</view>
+				<template v-show="ing&&result.length&&result.length<recordsTotal" style="text-align:center;    padding: 10px;">
+				</template> -->
+				<u-loadmore @loadmore="myLoadmore" :status="result.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				
+			</view>
+		</view>
+		
+		<view  v-show="ing&&result.length==0" style="text-align:center;margin-top: 80px;" >
+			<img src="/static/img/blankpage.png" style="width: 50%;" alt="" >
+			<view>暂无数据信息</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+<style>
+	page{
+		background-color: #f7f7f7;
+	}
+</style>
+ 
+<style scoped lang="scss">
+	 .jp-search{
+	 	padding: 0 20rpx;
+	 	width: 100%;
+	 }
+	 .jp-search-btn{
+		padding-right: 20rpx;
+		min-width: 80rpx;
+	 }
+	 .jp-search-title{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 20rpx;
+		span{
+			font-size: 28rpx;
+		 }
+	 }
+	 .jp-search-tag{
+		padding: 20rpx;
+		*{
+			margin-right: 10rpx;
+			margin-bottom: 10rpx;
+		}
+	 }
+	.jp-work-screen{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 20rpx 30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		.screen span{
+			margin-right: 10rpx;
+		}
+	 }
+	 .jp-work-item{
+	 	padding:30rpx;
+	 	background-color: #fff;
+	 	border-bottom: 1px solid #f7f7f7;
+	 	&:last-child{
+	 		border-bottom:none;
+	 	}
+	 	.jp-work-name{
+	 		display: flex;
+	 		justify-content: space-between;
+	 		align-items: center;
+	 		h3{
+	 			font-size: 36rpx;
+	 		}
+	 		span{
+	 			font-size: 32rpx;
+	 			color:#FF1700
+	 		}
+	 	}
+	 	.jp-work-tag{
+	 		display: flex;
+	 		align-items: center;
+	 		margin-top: 10rpx;
+	 		*{
+	 			margin-right: 10rpx;
+	 		}
+	 	}
+	 	.jp-work-info{
+	 		display: flex;
+	 		justify-content: space-between;
+	 		align-items: center;
+	 		margin-top: 10rpx;
+	 		p{
+	 			color:#999;
+	 			font-size: 24rpx;
+	 			margin-left: 10rpx;
+	 		}
+	 	}
+	 }
+</style>

+ 27 - 0
pages/hr/query/queryResult/index.js

@@ -0,0 +1,27 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 15 - 0
pages/hr/query/queryResult/queryResult.vue

@@ -0,0 +1,15 @@
+<template>
+	<view>
+ 		 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ 
+<style scoped lang="scss">
+	 
+</style>

+ 27 - 0
pages/index.js

@@ -0,0 +1,27 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 45 - 0
pages/index/index.js

@@ -0,0 +1,45 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+	data() {
+		return {
+			list: []
+		}
+	},
+	components: {
+
+	},
+	onLoad(op) {
+		//this.id=op.id;
+	},
+	methods: {
+		clear(){
+			window.localStorage.clear();
+		},
+		mygoto( url){
+			window.location=url
+			//location.href=url
+		},
+		test1() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			// uni.hideLoading();
+		},
+
+
+	},
+	onReady() {
+		this.carhelp.setToken("");
+		this.carhelp.set("token_tdate","")
+		this.carhelp.setPersonInfo("");
+	
+		this.isReady = true;
+	},
+	onShow() {
+		if (this.isReady) {
+
+		}
+	},
+}

+ 28 - 0
pages/index/index.vue

@@ -0,0 +1,28 @@
+<template>
+	<view>
+ 		
+ 		<u-button type="primary"  @click="mygoto('#/pages/job/index/index')" >我要求职</u-button>
+ 		<u-button type="success" @click="mygoto('#/pages/hr/index/index')" >企业招聘</u-button>
+		<view  style="margin-top:50px ;">
+			<template v-for="(item,index) in list">
+				<u-button type="success"  :key="index"   @click="gotoUrl(item.path)" >{{item.style.navigationBarTitleText}}</u-button>
+				
+			</template>
+			 
+		</view>
+		
+		<u-button type="error" @click="clear()" >清理本地缓存</u-button>
+		
+		
+		
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+
+</style>

+ 88 - 0
pages/job/company/index.js

@@ -0,0 +1,88 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/job/company.js'
+ import TabbarJob from '@/components/TabbarJob.vue'
+import CompanyInfo from '@/components/job/companyInfo.vue'
+
+export default {
+		data() {
+			return {
+				keyword:"",
+				pageIndex:1,
+				recordsTotal:0,
+				list: [ ],
+				companyId:"",
+				company:{
+					id:"",
+					logo:""
+				},
+				showcompany:false,
+				isReady:false,
+				src: '/static/img/head.png',
+			}
+		},
+		components: {
+			TabbarJob,CompanyInfo
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		onReachBottom() {
+			if(this.list.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			 showcompanyBtn(item){
+				 this.showcompany=true
+				 this.company={
+					 id:item.id,
+					 name:item.name,
+					 scaleName:item.scaleName,
+					  logo:item.logo,
+					   address:item.address,
+					 	industryName:item.industry
+				 }
+				 this.companyId=item.id;
+			 },
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },getList(bl){
+					uni.showLoading({
+						title:"加载中",mask:true,
+					})
+					 if(bl){
+						 this.list=[];
+						 this.pageIndex=1;
+					 }
+					var data={
+						companyName:this.keyword,
+						pageIndex:this.pageIndex
+					};
+					API.getCompanyList(data).then((res) => {
+							 
+						this.list=[
+							...this.list,
+							...res.data.data
+						];
+						this.recordsTotal=res.data.recordsTotal
+						uni.hideLoading()
+						 
+					}).catch(error => {
+							uni.showToast({
+								
+								title:error
+							})
+					})
+				}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 302 - 0
pages/job/company/index.vue

@@ -0,0 +1,302 @@
+<template>
+	<view>
+		<CompanyInfo ref="refCompanyInfo" v-show="showcompany" :vshow="showcompany"  :companyId="companyId" :companyInfo="company"  @back="showcompany=false" ></CompanyInfo>
+		
+		<u-navbar title="企业名录" v-show="!showcompany"  ></u-navbar>
+		<view class="jp-search" v-show="!showcompany" >
+			<u-search placeholder="请输入搜索关键词" v-model="keyword"  @search="getList(true)" :show-action="false"></u-search>
+		</view>
+		 
+		<view class="jp-work" v-show="!showcompany" >
+		 
+			<view class="jp-work-list resumeInfo">
+				  
+					<view class="resumeInfo-company"  v-for="(company ,index) in list" :key="company.id"  @click="showcompanyBtn(company)" >
+						<u-avatar :src="company.logo" size="80" mode="square"></u-avatar>
+						<view class="resumeInfo-company-text">
+							<view class="resumeInfo-company-name">
+								<p>{{company.name}}</p>
+								<view class="u-flex">
+									<span>{{company.scaleName}}</span>
+									<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+									<span>{{company.industry}}</span>
+								</view>
+							</view>	
+							<u-icon name="arrow-right" color="#999" size="24"></u-icon>
+						</view>
+					</view>
+					
+				 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 
+			</view>
+			 
+		</view>
+ 		 <Tabbar-Job :current="1" v-show="!showcompany"  ></Tabbar-Job>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ 
+<style scoped lang="scss">
+	 
+</style>
+
+<style>
+
+</style>
+<style scoped lang="scss">
+	.uicon-arrow-right:before {
+	    content: "\e605";
+	}
+	.jp-quantity{
+		background-color: #fff;
+		height: 80rpx;
+		display: flex;
+		align-items: center;
+		font-size: 32rpx;
+		padding-left: 30rpx;
+		margin-top: 20rpx;
+		border-bottom: 1px solid #f7f7f7;
+		p{
+			color:#666;
+		}
+		span{
+			color:#1A91EA;
+			margin-left: 10rpx;
+		}
+	}
+	.jp-search{
+		background-color: #fff;
+		padding: 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		margin-bottom: 20rpx;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+	.jp-work-line{
+		display: flex;
+		align-items: center;
+		margin-top:10rpx;
+	}
+	 
+</style>
+
+<style scoped lang="scss">
+	.resumeInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		margin-top: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20rpx;
+		.resumeInfo-collect{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			background-color: #f3f4f8;
+			padding:4rpx 20rpx;
+			border-radius: 8rpx;
+			margin-right: 20rpx;
+			span{
+				font-size: 24rpx;
+			}
+		}
+		.resumeInfo-btn{
+			flex: 1;
+			
+		}
+	}
+	.resumeInfo-info{
+		padding-top: 20rpx;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+		}
+		.resumeInfo-info-foot{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.resumeInfo-address{
+				flex: 1;
+				min-width: 0;
+				color:#999;
+			}
+			.resumeInfo-see{
+				width: 100rpx;
+				text-align: right;
+				span{
+					font-size: 24rpx;
+					color:#999;
+					margin-left: 6rpx;
+				}
+			}
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;
+		.resumeInfo-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 10rpx;
+			h3{
+				font-size: 46rpx;
+			}
+			span{
+				color:#2295FF;
+				border: 1px solid #2295FF;
+				padding: 0 10rpx;
+				border-radius: 6rpx;
+			}
+			.jp-work-tag{
+				display: flex;
+				align-items: center;
+				*{
+					margin-right: 10rpx;
+				}
+			}
+			h2{
+				color:#FF6D58;
+				font-size: 36rpx;
+			}
+		}
+		
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		border-top: 1px solid #F7F7F7;
+		padding-top: 20rpx;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+			margin-left: 20rpx;
+		}
+		.resumeInfo-company-name{
+			p{
+				margin-bottom: 10rpx;
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-data{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
+		padding: 20rpx 0;
+		border-top: 1px solid #F7F7F7;
+		border-bottom: 1px solid #F7F7F7;
+		.resumeInfo-data-item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			p{
+				font-size: 24rpx;
+				color:#999;
+				margin-bottom: 10rpx;
+			}
+			span{
+				font-size: 32rpx;
+			}
+		}
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 36rpx;
+		padding: 20rpx 20rpx;
+		font-weight: bold;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>
+

+ 282 - 0
pages/job/index/companyInfo/companyInfo.vue

@@ -0,0 +1,282 @@
+<template>
+	<view>
+		<u-navbar title="招聘席位" :is-back="false" ></u-navbar>
+		<view class="resumeInfo">
+			<view class="resumeInfo-company">
+				<view class="resumeInfo-company-text">
+					<view class="resumeInfo-company-name">
+						<h3>{{companyInfo.name}}</h3>
+						<view class="u-flex">
+							<span>{{companyInfo.scaleName}}</span>
+							<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+							<span>{{companyInfo.industry}}</span>
+						</view>
+					</view>	
+				</view>
+				<u-avatar :src="companyInfo.logo" size="100" mode="square"></u-avatar>
+			</view>
+			<view class="resumeInfo-info-foot">
+				<view class="resumeInfo-title">
+					公司地址
+				</view>
+				<view class="resumeInfo-address">
+					{{companyInfo.address}}
+				</view>
+			</view>
+		</view>
+		<view class="jp-work">
+			<view class="jp-work-title">
+				招聘岗位({{recordsTotal}})
+			</view>
+			<view class="jp-work-list">
+				  
+				 <RecruitmentItem v-for="(item ,index) in list" :key="item.id" :item="item"  ></RecruitmentItem>
+				 <u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+				 
+			</view>
+		</view>
+	</view>
+</template>
+
+
+<script>
+	import * as API from '@/apis/job/job.js'
+	
+	import RecruitmentItem from '@/components/job/RecruitmentItem.vue'
+	
+ 	export default {
+		name:"Common",
+		
+		components:{RecruitmentItem},
+		
+		data() {
+			return {
+				companyId:"",
+				companyInfo:{},
+				pageIndex:0,
+				recordsTotal:0,
+				 myCompanyId:null,
+				list:[],
+			};
+			
+		},
+		onLoad(op){
+			
+			this.companyId=op.id;
+			
+		},methods:{
+			
+			myLoadmore(){
+				 
+				 if(this.list.length<this.recordsTotal){
+				  this.pageIndex+=1;
+				  this.getCompanyDetails()
+				 }
+				
+			},
+			 
+			getInfo(){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				var data={
+					companyId:this.companyId,
+				
+				};
+				API.getCompany(data).then((res)=>{
+					this.companyInfo=res.data
+					  this.getCompanyDetails()		
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+				
+			},
+			getCompanyDetails(){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				var data={
+					id:this.companyId,
+					pageIndex:this.pageIndex
+				};
+				API.getCompanyDetails(data).then((res)=>{
+					this.myCompanyId=this.companyId
+					  if(this.pageIndex==1){
+						  this.list=res.data.data;
+					  }else{
+						  this.list=[
+						  	...this.list,
+						  	...res.data.data
+						  ];
+					  }
+					  this.recordsTotal=res.data.recordsTotal
+					  
+					 //this.list=res
+					 uni.hideLoading()		
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+				
+			}
+		},mounted(){
+			 
+			this.getInfo()	
+		},destroyed(){
+			
+		}
+		
+	}
+</script>
+
+<style >
+	
+</style>
+ 
+<style scoped lang="scss">
+	
+	.resumeInfo-info{
+		padding-top: 20rpx;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+		}
+	}
+	.resumeInfo-info-foot{
+		margin-top: 40rpx;
+		.resumeInfo-title{
+			color:#999;
+		}
+		.resumeInfo-address{
+			flex: 1;
+			min-width: 0;
+			margin-top: 10rpx;
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;
+		.resumeInfo-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 10rpx;
+			h3{
+				font-size: 46rpx;
+			}
+			span{
+				color:#2295FF;
+				border: 1px solid #2295FF;
+				padding: 0 10rpx;
+				border-radius: 6rpx;
+			}
+			.jp-work-tag{
+				display: flex;
+				align-items: center;
+				*{
+					margin-right: 10rpx;
+				}
+			}
+			h2{
+				color:#FF6D58;
+				font-size: 36rpx;
+			}
+		}
+		
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		padding-top: 20rpx;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+		}
+		.resumeInfo-company-name{
+			h3{
+				margin-bottom: 10rpx;
+				font-size: 40rpx;
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-data{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
+		padding: 20rpx 0;
+		border-top: 1px solid #F7F7F7;
+		border-bottom: 1px solid #F7F7F7;
+		.resumeInfo-data-item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			p{
+				font-size: 24rpx;
+				color:#999;
+				margin-bottom: 10rpx;
+			}
+			span{
+				font-size: 32rpx;
+			}
+		}
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 32rpx;
+		padding: 20rpx 20rpx;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 28 - 0
pages/job/index/companyInfo/index.js

@@ -0,0 +1,28 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 195 - 0
pages/job/index/index.js

@@ -0,0 +1,195 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/job/index.js'
+import * as API_common from '@/apis/common.js'
+
+import TabbarJob from '@/components/TabbarJob.vue'
+import RecruitmentItem from '@/components/job/RecruitmentItem.vue'
+//import ResumeAuth from '@/components/job/ResumeAuth.vue'
+
+export default {
+		data() {
+			return {
+				 
+				islogin:false,
+				showpopup:false,
+				querypopup:"全部",
+				popupList:["全部","一丘之貉1","一丘之貉2","一丘之貉3","一丘之貉4","一丘之貉5","一丘之貉6"
+				,"其他"],
+				
+				keyword: '遥看瀑布挂前川',
+				bannerList: [{
+						image: 'https://cdn.uviewui.com/uview/swiper/1.jpg',
+						title: '昨夜星辰昨夜风,画楼西畔桂堂东'
+					},
+					{
+						image: 'https://cdn.uviewui.com/uview/swiper/2.jpg',
+						title: '身无彩凤双飞翼,心有灵犀一点通'
+					},
+					{
+						image: 'https://cdn.uviewui.com/uview/swiper/3.jpg',
+						title: '谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳'
+					}
+				],
+				list: [{
+					name: '最新',
+					list:[],
+					status:"1",
+					isend:false,
+					pageIndex:1,
+					recordsTotal:0,
+				}, {
+					status:"2",
+					name: '最热',
+					list:[],
+					isend:false,
+					pageIndex:1,
+					recordsTotal:0,
+				}],
+				current: 0,
+				src: '/static/img/head/png',
+
+			}
+		},
+		components: {
+			TabbarJob,RecruitmentItem,
+			//ResumeAuth
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			spiltItem(text){
+				if(text){
+					return text.split(",")
+					
+				}else{
+					return []
+				}
+			},
+			getResumeStatus(){
+
+				API.resumeStatus().then((response) => {
+					
+					if("未创建"!=response.data){
+						
+					}else{
+						this.islogin=true
+					}
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			getScreenList(){
+				
+				API_common.getScreenList().then((response) => {
+					
+					var list=response.data;
+					this.popupList=list
+					// .map((item)=>{
+					// 	return item.name;
+					// })
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			change(index) {
+				this.current = index;
+				var obj=this.list[this.current];
+				
+				if(obj.list.length==0){
+					this.getList()
+				}
+			},
+			getList(){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				var obj=this.list[this.current];
+				var data={
+					type:obj.status,
+					pageSize:5
+				};
+				
+				 API.getRecruitmentList(data).then((response) => {
+					 
+				 	uni.hideLoading()
+				 	var list=response.data.data;
+				 	obj.list=list;
+				 	obj.isend=(response.data.totalPage>1)
+				 	
+					if(!this.isReady){
+						this.isReady=true;
+						//this.islogin=this.carhelp.getToken();
+
+						
+						this.getBanner()
+						this.getScreenList();
+						this.getResumeStatus();
+					}
+					
+					
+				 }).catch(error => {
+				 		uni.showToast({
+				 			
+				 			title:error
+				 		})
+				 })
+				
+			},
+			
+			getBanner(){
+				API_common.getBannerInfo({
+					type:"job"
+				}).then((response) => {
+					var list=response.data;
+					this.bannerList=list.map((item)=>{
+						 var obj={
+							image:item.picUrl,
+							 title:item.name,
+							 url:item.linkUrl,
+						 }
+						return obj
+					})
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			ckBanner(i){
+				var obj=this.bannerList[i];
+				if(obj.url){
+					if(obj.url.indexOf("http")==0){
+						window.location.href=obj.url;
+					}
+					if(obj.url.indexOf("pages/")==0){
+						this.gotoUrl(obj.url)
+					}
+				}
+				//console.log(current);
+			},
+			
+			 ckPopup(item){
+				//this.querypopup=item;
+				 this.showpopup=false;
+				 this.gotoUrl('pages/job/query/query?key='+item.id+'&name='+item.name);
+			 }
+			
+		},onReady(){ 
+			
+			this.getList();
+		
+			
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 145 - 0
pages/job/index/index.vue

@@ -0,0 +1,145 @@
+<template>
+	<view>
+
+			<u-navbar :is-back="false">
+				<view class="jp-search">
+					<u-search placeholder="输入想找的职位吧" :disabled="true" @click="gotoUrl('pages/job/query/query')" :show-action="false"></u-search>
+				</view>
+			</u-navbar>
+			<view class="jp-banner">
+				<u-swiper :list="bannerList" @click="ckBanner"></u-swiper>
+			</view>
+			<view class="jp-tips" v-if="islogin" @click="gotoUrl('pages/job/personal/install/resume/resume')">
+				<u-icon name="volume-fill" color="#ff6200" size="28"></u-icon>
+				<span>去完善简历,获取更符合我的职位</span>
+				<u-icon name="arrow-right" color="#ff6200" size="28"></u-icon>
+			</view>
+			<view class="jp-work">
+				<view class="jp-work-tab">
+					<u-tabs :list="list" :is-scroll="false" :current="current" @change="change" :item-width="100"></u-tabs>
+					<view class="screen" @click="showpopup=true">
+						<span>筛选</span>
+						<u-icon name="arrow-down" color="#999" size="24"></u-icon>
+					</view>
+				</view>
+				<view class="jp-work-list">
+					<RecruitmentItem v-for="(item ,index) in list[current].list" :key="item.id" :item="item" ></RecruitmentItem>
+					
+					<view class="jp-work-item" style="margin-top: 6px;">
+						<view style="text-align: center;color:#101010;"   @click="gotoUrl('pages/job/query/query?all=1')" >查看全部</view>
+					</view>
+				</view>
+			</view>
+			<u-popup v-model="showpopup" mode="center" width="100%"  >
+				<view class="content">
+					<view class="popup-title">
+						<h3>招聘岗位</h3>
+					</view>
+					<view class="jp-search-tag">
+						<u-tag  v-for="(item,index) in popupList" :key="index" :text="item.name" mode="dark" 
+						:color="querypopup==item.name?'#FFFFFF':'#666666'"  :bg-color="querypopup==item.name?'#2295FF':'#f1f1f1'"
+						@click="ckPopup(item)"
+						/>
+						 
+					</view>
+				</view>
+				
+				</u-popup>
+			<Tabbar-Job :current="0" ></Tabbar-Job>
+		
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ <style>
+	 page{
+		 background-color: #f7f7f7;
+	 }
+ </style>
+<style scoped lang="scss">
+	.popup-title{
+		padding: 20rpx;
+	}
+	.jp-search-tag{
+			padding: 20rpx;
+			*{
+				margin-right: 10rpx;
+				margin-bottom: 10rpx;
+			}
+	}
+	
+	.jp-search{
+		padding: 0 20rpx;
+		width: 100%;
+	}
+	.jp-banner{
+		padding: 20rpx;
+		background-color: #fff;
+	}
+	.jp-tips{
+		height:72rpx;
+		background-color: #fff0e7;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		span{
+			color:#ff6200;
+			margin: 0 10rpx;
+			line-height: 28rpx;
+		}
+	}
+	.jp-work-tab{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		border-bottom: 1px solid #f7f7f7;
+		background-color: #fff;
+		padding-right: 20rpx;
+		.screen{
+			span{margin-right: 10rpx;}
+		}
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 176 - 0
pages/job/index/recruitInfo/index.js

@@ -0,0 +1,176 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/job/job.js'
+import CompanyInfo from '@/components/job/companyInfo.vue'
+import RecruitmentItem from '@/components/job/RecruitmentItem.vue'
+import ResumeAuth from '@/components/job/ResumeAuth.vue'
+
+export default {
+		data() {
+			return {
+				auth:false,
+				showcompany:false,
+				info:{},
+				companyId:"",
+				company:{
+					id:"",
+					logo:""
+				},
+				list:[],
+				isReady:false,
+				src: '/static/img/head/png',
+				isDeliver:false,
+				isCollect:false,
+			}
+		},
+		props:{
+			isHr: {
+				require: false,
+				default: false,
+			},
+		},
+		components: {
+			CompanyInfo,RecruitmentItem,ResumeAuth
+		},
+		onReachBottom() {
+			
+			if(this.showcompany){
+				this.$refs.refCompanyInfo.myLoadmore()
+			}
+		},
+		onLoad(op){
+			
+			this.id=op.id;
+		
+		},
+		methods: {
+			
+			deliverBtn(){
+				 
+				 var person=this.carhelp.getPersonInfo();
+				 
+				 var bl=["1","2"].indexOf(person.isAuthentication)>-1
+				 var _this=this;
+				 if(person&&!bl){
+					 uni.showModal({
+					 	showCancel:true,
+						content:"实名制后才能投递简历",
+						confirmText:"前往实名制",
+						success(res) {
+							if(res.confirm){
+								_this.auth=true;
+							}
+						}
+					 })
+					 
+				 	
+					return
+				 }
+				 
+				if(this.isDeliver){
+					uni.showToast({
+						title:"已投递,请勿重复投递"
+					})
+					return
+				}
+				uni.showLoading({
+				 	 title: '加载中'
+				 })
+				 API.deliverResume(this.id).then((res)=>{
+					  
+					 uni.hideLoading()
+					this.isDeliver=true;
+					
+				 }).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			collectBtn(){
+				uni.showLoading({
+				 	 title: '加载中'
+				 })
+				 this.isCollect=!this.isCollect
+				 
+				 API.collectResume(this.id,this.isCollect?1:0).then((res)=>{
+					  
+					 uni.hideLoading()
+					
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			},
+			spiltItem(text){
+				if(text){
+					return text.split(",")
+					
+				}else{
+					return []
+				}
+			},
+			getRelevantList(){
+				API.getRelevantList(this.id).then((res)=>{
+					 this.list=res.data.data;
+					 
+					 uni.hideLoading()		
+				 }).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			},
+			setId(id){
+				this.id=id;
+				
+				this.getInfo();
+			},
+			 getInfo(){
+				 uni.showLoading({
+				 	 title: '加载中'
+				 })
+				 
+				 API.getRecruitmentDetails(this.id).then((res)=>{
+					 document.body.scrollTop = 0;
+					 document.documentElement.scrollTop = 0;
+					 this.info=res.data.recruitment;
+					  this.company={
+						  id:this.info.companyId,
+						  name:this.info.companyName,
+						  scaleName:this.info.companyScaleN,
+						   logo:this.info.companyLogo,
+						    address:this.info.address,
+							industryName:this.info.companyIndustryN
+					  };
+					  this.isDeliver=res.data.deliveryStatus;
+					  this.isCollect=res.data.collectionStatus;
+					  this.companyId=this.info.companyId;
+					//
+					this.showcompany=false;
+					if(this.isHr){
+						uni.hideLoading()
+					}else{
+						this.getRelevantList();
+					}
+					
+				 }).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			 },
+			
+		},onReady(){ 
+			
+			this.getInfo();
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 297 - 0
pages/job/index/recruitInfo/recruitInfo.vue

@@ -0,0 +1,297 @@
+<template>
+	<view>
+		<view v-if="auth">
+			<resume-auth @authSubmit="auth=false"></resume-auth>
+		</view>
+		
+		<CompanyInfo ref="refCompanyInfo" v-show="showcompany" :vshow="showcompany" :vck="false" :companyId="companyId" :companyInfo="company" @ckItem="setId" @back="showcompany=false" ></CompanyInfo>
+		<view v-show="!showcompany&&!auth" >
+			<u-navbar title="职位详情" ></u-navbar>
+			<view class="resumeInfo">
+				<view class="resumeInfo-row">
+					<h3>{{info.title}}</h3>
+					<span>招聘</span>
+				</view>
+				<view class="resumeInfo-row">
+				
+					<h2>{{info.wageTypeName}}</h2>
+				</view>
+				<view class="resumeInfo-row">
+				
+					<view class="jp-work-tag" v-if="info.tagList">
+						<u-tag  v-for="(text,index) in  info.tagList" :key="index"  :text="text" mode="dark" bg-color="#f1f1f7" color="#999" size="mini"/>
+					</view>
+					
+				</view>
+				<view class="resumeInfo-company"   @click="showcompany=true">
+					<u-avatar :src="company.logo" size="80" mode="square"></u-avatar>
+					<view class="resumeInfo-company-text">
+						<view class="resumeInfo-company-name">
+							<p>{{company.name}}</p>
+							<view class="u-flex">
+								<span>{{company.scaleName}}</span>
+								<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+								<span>{{company.industryName}}</span>
+							</view>
+						</view>	
+						<u-icon name="arrow-right" color="#999" size="24"></u-icon>
+					</view>
+				</view>
+				
+				<view class="resumeInfo-data">
+					<view class="resumeInfo-data-item">
+						<p>招聘人数</p>
+						<span>{{info.positionNumber}}人</span>
+					</view>
+					<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+					<view class="resumeInfo-data-item">
+						<p>性别</p>
+						<span>{{info.positionSexN}}</span>
+					</view>
+					<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+					<view class="resumeInfo-data-item">
+						<p>工作经验</p>
+						<span>{{info.workYearName}}</span>
+					</view>
+					<u-line color="#ccc" length="20" direction="col" margin="0 20rpx"/>
+					<view class="resumeInfo-data-item">
+						<p>学历要求</p>
+						<span>{{info.educationName}}</span>
+					</view>
+				</view>
+				<view class="resumeInfo-info">
+					<view class="resumeInfo-info-head">
+						职位描述
+					</view>
+					<view class="resumeInfo-info-main">
+						 {{info.positionMessage}}
+					</view>
+					<view class="resumeInfo-info-foot">
+						<view class="resumeInfo-address u-line-1">
+							工作地址: {{info.address}}
+						</view>
+						<view class="resumeInfo-see">
+							<u-icon name="a-md-visibilityCopy" custom-prefix="custom-icon" color="#999"></u-icon>
+							<span>{{info.readingTimes}}</span>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="jp-work" v-if="!isHr">
+				
+				
+				<view class="resumeInfo-foot">
+					<view class="resumeInfo-collect" @click="collectBtn">
+						<!--custom-icon-a-fasfa-star -->
+						<u-icon :name="isCollect?'a-fasfa-star ':'antOutline-star'" custom-prefix="custom-icon" size="36" color="#2295FF"></u-icon>
+						<span>收藏</span>
+					</view>
+					<view class="resumeInfo-btn" >
+						<u-button type="primary"  v-if="info.status==1" @click="deliverBtn" v-text="isDeliver?'已投递':'投递简历'"></u-button>
+						<u-button  v-if="info.status==0" type="primary" disabled  >已下架</u-button>
+					
+					</view>
+				</view>
+				
+				<view class="jp-work-title" v-show="list.length">
+					相关推荐
+				</view>
+				<view class="jp-work-list" v-show="list.length">
+					<RecruitmentItem v-for="(item ,index) in list" :key="index" :item="item" :ck="false" @ckItem="setId" ></RecruitmentItem>
+					
+				</view>
+			</view>
+		</view>
+	</view>
+	
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+ 
+<style scoped lang="scss">
+	.resumeInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		margin-top: 20rpx;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20rpx;
+		.resumeInfo-collect{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			background-color: #f3f4f8;
+			padding:4rpx 20rpx;
+			border-radius: 8rpx;
+			margin-right: 20rpx;
+			span{
+				font-size: 24rpx;
+			}
+		}
+		.resumeInfo-btn{
+			flex: 1;
+			
+		}
+	}
+	.resumeInfo-info{
+		padding-top: 20rpx;
+		.resumeInfo-info-head{
+			font-size: 36rpx;
+			font-weight: bold;
+		}
+		.resumeInfo-info-main{
+			padding: 20rpx 0;
+		}
+		.resumeInfo-info-foot{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.resumeInfo-address{
+				flex: 1;
+				min-width: 0;
+				color:#999;
+			}
+			.resumeInfo-see{
+				width: 100rpx;
+				text-align: right;
+				span{
+					font-size: 24rpx;
+					color:#999;
+					margin-left: 6rpx;
+				}
+			}
+		}
+	}
+	.resumeInfo{
+		background-color: #fff;
+		padding: 20rpx;
+		margin-bottom: 20rpx;
+		.resumeInfo-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 10rpx;
+			h3{
+				font-size: 46rpx;
+			}
+			span{
+				color:#2295FF;
+				border: 1px solid #2295FF;
+				padding: 0 10rpx;
+				border-radius: 6rpx;
+			}
+			.jp-work-tag{
+				display: flex;
+				align-items: center;
+				*{
+					margin-right: 10rpx;
+				}
+			}
+			h2{
+				color:#FF6D58;
+				font-size: 36rpx;
+			}
+		}
+		
+	}
+	.resumeInfo-company{
+		display: flex;
+		align-items: center;
+		border-top: 1px solid #F7F7F7;
+		padding-top: 20rpx;
+		.resumeInfo-company-text{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			flex: 1;
+			margin-left: 20rpx;
+		}
+		.resumeInfo-company-name{
+			p{
+				margin-bottom: 10rpx;
+			}
+			span{
+				color:#999;
+				font-size: 24rpx;
+			}
+		}
+	}
+	.resumeInfo-data{
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
+		padding: 20rpx 0;
+		border-top: 1px solid #F7F7F7;
+		border-bottom: 1px solid #F7F7F7;
+		.resumeInfo-data-item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			p{
+				font-size: 24rpx;
+				color:#999;
+				margin-bottom: 10rpx;
+			}
+			span{
+				font-size: 32rpx;
+			}
+		}
+	}
+	.jp-work-title{
+		background-color: #fff;
+		border-bottom: 1px solid #F7F7F7;
+		font-size: 36rpx;
+		padding: 20rpx 20rpx;
+		font-weight: bold;
+	}
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	}
+</style>

+ 84 - 0
pages/job/newsIndex/index.js

@@ -0,0 +1,84 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/common.js'
+import TabbarJob from '@/components/TabbarJob.vue'
+
+export default {
+		data() {
+			return {
+				list:[],
+				isReady:false,
+				background: {
+					backgroundColor: '#2295ff',
+				},
+				
+				src:['',
+					'/static/img/news1.png',
+					'/static/img/news2.png',
+					'/static/img/news4.png',
+					'/static/img/news3.png',
+				
+				],
+			 
+			}
+		},
+		components: {
+			TabbarJob
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			gotoUrlNews(row){
+				var url='pages/job/newsIndex/newsList/newsList?id='+row.classifyId;
+				if(row.classifyId=="5"){
+					url="pages/hr/newsIndex/servicesList/servicesList"
+				}
+				
+				if(row.classifyId=="4"){
+					url="pages/job/newsIndex/newsRecommend/newsRecommend"
+				}
+				
+				if(row.classifyId=="6"){
+					url="pages/hr/newsIndex/newsRecommend/newsRecommend"
+				}
+				this.gotoUrl(url)
+			},
+			 getList(){
+				 uni.showLoading({
+				 	title:"加载中",mask:true,
+				 })
+				API.messageClassify().then((response) => {
+					this.list=response.data;
+					uni.hideLoading()
+				}).catch(error => {
+						uni.showToast({
+							
+							title:error
+						})
+				})
+			 },
+			getInfo(){
+							 
+							API.readMessageNum().then((response) => {
+								var a =response.data;
+								
+								this.carhelp.set("tabbar_show_num",a);
+								
+							}).catch(error => {
+									uni.showToast({
+										
+										title:error
+									})
+							})
+			},
+		},onReady(){ 
+			this.getInfo();
+			this.getList();
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				this.getInfo();
+					this.getList();
+			}	
+		},
+	}

+ 82 - 0
pages/job/newsIndex/newsEntry/index.js

@@ -0,0 +1,82 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/common.js'
+import CompanyInfo from '@/components/job/companyInfo.vue'
+
+export default {
+		data() {
+			return {
+				show:false,
+				id:"",
+				showcompany:false,
+				companyId:"",
+				context:"",
+				info:{
+					messageDetail:{},
+					company:{}
+				},
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+			CompanyInfo
+		},
+		onLoad(op){
+			this.id=op.id;
+		},
+		onReachBottom() {
+			
+			if(this.showcompany){
+				this.$refs.refCompanyInfo.myLoadmore()
+			}
+		},
+		methods: {
+			 
+			changeAgree(i){
+				uni.showLoading({
+					title:"加载中",mask:true,
+				})
+				
+				
+				API.changeAgree({
+					messageId:this.id,
+					isAgree:i,
+					remark:this.context
+				}).then((res)=>{
+					  //this.info=res.data;
+					  this.info.isAgree=i;
+					// uni.hideLoading()	
+						 uni.showToast({
+						 	title:"操作成功"
+						 })
+				 }).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			},
+			 getInfo(){
+			 	uni.showLoading({
+			 		title:"加载中",mask:true,
+			 	})
+			 	API.messageDetail(this.id).then((res)=>{
+			 		  this.info=res.data;
+					  this.companyId=this.info.company.id
+			 		 uni.hideLoading()		
+			 	 }).catch(error => {
+			 			uni.showToast({
+			 				title:error
+			 			})
+			 	})
+			 	
+			 }
+			
+		},onReady(){ 
+			this.getInfo()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 131 - 0
pages/job/newsIndex/newsEntry/newsEntry.vue

@@ -0,0 +1,131 @@
+<template>
+	<view>
+		<CompanyInfo  ref="refCompanyInfo" v-show="showcompany"   :vshow="showcompany" :companyId="companyId" :companyInfo="info.company"   @back="showcompany=false" ></CompanyInfo>
+		
+		<view v-show="!showcompany">
+			<u-navbar title="详情"   >
+				<view slot="right">
+					<u-button  size="mini" :type="info.isAgree?'success':'error'"  v-if="info.isNeedAgree&&info.isAgree!=null" > {{info.isAgree?'已同意':'已拒绝'}}</u-button>
+					
+				</view>
+				
+				
+			</u-navbar>
+			 <view class="company-logo" v-if="info.company"  style="
+    border-bottom: 1px inset;
+"   @click="showcompany=true">
+				<u-avatar :src="info.company.logo" size="100" mode="square"></u-avatar>
+				<h3>{{info.company.name}}</h3>
+			</view> 
+			<view class="servicesInfo" v-if="info.messageDetail" style="padding-bottom: 80px;">
+				<view class="title">
+					<h2>{{info.messageDetail.title}}</h2>
+				</view>
+				<view class="main"  v-html="info.messageDetail.content">
+					 
+				</view>
+			</view>
+			<view class="servicesInfo-foot" v-if="info.isNeedAgree&&info.isAgree==null">
+				<u-modal v-model="show"  style="padding: 10px;" show-cancel-button="true" title="拒绝理由(选填)" @confirm="changeAgree(0)">
+						<view class="slot-content">
+								<u-input v-model="context"  />
+						</view>
+					
+
+				</u-modal>
+				<u-button class="servicesInfo-btn" shape="circle" @click="show=true">拒绝</u-button>
+				<u-button class="servicesInfo-btn" type="success"  @click="changeAgree(1)" shape="circle">同意</u-button>
+			</view>
+		</view>
+		
+	 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style scoped lang="scss">
+	.company-logo{
+		display: flex;
+		align-items: center;
+		padding: 30rpx;
+		h3{
+			font-size: 36rpx;
+			margin-left: 20rpx;
+			font-weight: normal;
+		}
+	}
+	.servicesInfo{
+		padding: 30rpx;
+		.title{
+			text-align: center;
+		}
+		.main{
+			line-height:48rpx;
+			margin-top:40rpx;
+		}
+	}
+	.servicesInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		position: fixed;
+		padding: 0 10rpx;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		.servicesInfo-btn{
+			flex: 0.5;
+			margin: 0 10rpx;
+		}
+	}
+	.newsList-time{
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+		span{
+			background-color: #c8c8c8;	
+			padding: 6rpx 16rpx;
+			color:#fff;
+			border-radius:10rpx;
+		}
+	}
+	.newsList-item{
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		.newsList-head{
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+			span{
+				color:#FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+		.newsList-main{
+			padding-bottom: 20rpx ;
+			color:#999;
+		}
+		.newsList-foot{
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>
+<style lang="scss" scoped>
+	.slot-content {
+		font-size: 28rpx;
+		color: $u-content-color;
+		padding-left: 60rpx;
+	}
+</style>

+ 59 - 0
pages/job/newsIndex/newsIndex.vue

@@ -0,0 +1,59 @@
+<template>
+	<view>
+		<u-navbar :is-back="false" title="消息" :background="background" title-color="#fff"></u-navbar>
+		<view class="newsIndex">
+			<view class="newsIndex-item" v-for="(item,i) in list " :key="i" @click="gotoUrlNews(item)">
+				<u-avatar :src="src[item.classifyId]"></u-avatar>
+				<view class="newsIndex-text">
+					<view class="newsIndex-row">
+						<h3>{{item.classify}}</h3>
+						<p>{{item.newMessage&&item.newMessage.createTime}}</p>
+					</view>
+					<view class="newsIndex-row">
+						<p>{{item.newMessage&&item.newMessage.title}}</p>
+						<u-badge size="mini" type="error" :count="item.num" :offset="[0,0]"></u-badge>
+					</view>
+				</view>
+			</view>
+		</view>
+		<Tabbar-Job :current="2" ></Tabbar-Job>
+		
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.newsIndex-item{
+		display: flex;
+		padding: 20rpx;
+		background-color: #fff;
+		align-items: center;
+		.newsIndex-text{
+			flex: 1;
+			min-width: 0;
+			margin-left: 20rpx;
+		}
+		.newsIndex-row{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			position: relative;
+			&:first-child{
+				margin-top: 0;
+			}
+			p{
+				color:#999;
+			}
+		}
+	}
+</style>

+ 28 - 0
pages/job/newsIndex/newsInvitationBefore/index.js

@@ -0,0 +1,28 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 111 - 0
pages/job/newsIndex/newsInvitationBefore/newsInvitationBefore.vue

@@ -0,0 +1,111 @@
+<template>
+	<view>
+		<u-navbar title="面试邀请通知" ></u-navbar>
+		<view class="company-logo">
+			<u-avatar :src="src" size="100" mode="square"></u-avatar>
+			<h3>湖北荆鹏软件集团有限公司</h3>
+		</view>
+		<view class="servicesInfo">
+			<view class="title">
+				<h2>面试邀请通知</h2>
+			</view>
+			<view class="main">
+				<p>邹杰 您好:</p>
+				<p>我是荆鹏集团(以下简称“公司”)的人力资源主管凡佳佳,我们近期关注到您的简历,希望与您进行一次电话沟通,以了解更多关于您的履历信息。</p>
+				<p>我们拟在2021年7月20日 15:30-16:30时段通过电话0716-8121234与您进行沟通。</p>
+				<p>如您该时间段有空,请点击下方同意按钮,且注意保持通讯畅通;如该时段繁忙,请点击拒绝按钮。我们将择日再向您发送沟通邀请通知。</p>
+				<p>湖北荆鹏软件集团有限公司</p>
+				<p>地址:荆州市沙市区江津东路附155号荆鹏软件园</p>
+				<p>电话:0716-8111111</p>
+				<p>我已经阅读、理解并且接受以上条款。</p>
+				<p>日期:2021年6月30日</p>
+				<p>人力资源部</p>
+			</view>
+		</view>
+		<view class="servicesInfo-foot">
+			<u-button class="servicesInfo-btn" shape="circle">拒绝</u-button>
+			<u-button class="servicesInfo-btn" type="success" shape="circle">同意</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style scoped lang="scss">
+	.company-logo{
+		display: flex;
+		align-items: center;
+		padding: 30rpx;
+		h3{
+			font-size: 36rpx;
+			margin-left: 20rpx;
+			font-weight: normal;
+		}
+	}
+	.servicesInfo{
+		padding: 30rpx;
+		.title{
+			text-align: center;
+		}
+		.main{
+			line-height:48rpx;
+			margin-top: 20rpx;
+		}
+	}
+	.servicesInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		position: fixed;
+		padding: 0 10rpx;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		.servicesInfo-btn{
+			flex: 0.5;
+			margin: 0 10rpx;
+		}
+	}
+	.newsList-time{
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+		span{
+			background-color: #c8c8c8;	
+			padding: 6rpx 16rpx;
+			color:#fff;
+			border-radius:10rpx;
+		}
+	}
+	.newsList-item{
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		.newsList-head{
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+			span{
+				color:#FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+		.newsList-main{
+			padding-bottom: 20rpx ;
+			color:#999;
+		}
+		.newsList-foot{
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>

+ 28 - 0
pages/job/newsIndex/newsInvitationPhone/index.js

@@ -0,0 +1,28 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				src: '/static/img/head/png',
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 111 - 0
pages/job/newsIndex/newsInvitationPhone/newsInvitationPhone.vue

@@ -0,0 +1,111 @@
+<template>
+	<view>
+		<u-navbar title="沟通邀请通知" ></u-navbar>
+		<view class="company-logo">
+			<u-avatar :src="src" size="100" mode="square"></u-avatar>
+			<h3>湖北荆鹏软件集团有限公司</h3>
+		</view>
+		<view class="servicesInfo">
+			<view class="title">
+				<h2>沟通邀请通知</h2>
+			</view>
+			<view class="main">
+				<p>邹杰 您好:</p>
+				<p>我是荆鹏集团(以下简称“公司”)的人力资源主管凡佳佳,我们近期关注到您的简历,希望与您进行一次电话沟通,以了解更多关于您的履历信息。</p>
+				<p>我们拟在2021年7月20日 15:30-16:30时段通过电话0716-8121234与您进行沟通。</p>
+				<p>如您该时间段有空,请点击下方同意按钮,且注意保持通讯畅通;如该时段繁忙,请点击拒绝按钮。我们将择日再向您发送沟通邀请通知。</p>
+				<p>湖北荆鹏软件集团有限公司</p>
+				<p>地址:荆州市沙市区江津东路附155号荆鹏软件园</p>
+				<p>电话:0716-8111111</p>
+				<p>我已经阅读、理解并且接受以上条款。</p>
+				<p>日期:2021年6月30日</p>
+				<p>人力资源部</p>
+			</view>
+		</view>
+		<view class="servicesInfo-foot">
+			<u-button class="servicesInfo-btn" shape="circle">拒绝</u-button>
+			<u-button class="servicesInfo-btn" type="success" shape="circle">同意</u-button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style scoped lang="scss">
+	.company-logo{
+		display: flex;
+		align-items: center;
+		padding: 30rpx;
+		h3{
+			font-size: 36rpx;
+			margin-left: 20rpx;
+			font-weight: normal;
+		}
+	}
+	.servicesInfo{
+		padding: 30rpx;
+		.title{
+			text-align: center;
+		}
+		.main{
+			line-height:48rpx;
+			margin-top:40rpx;
+		}
+	}
+	.servicesInfo-foot{
+		height: 120rpx;
+		background-color: #fff;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		position: fixed;
+		padding: 0 10rpx;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		.servicesInfo-btn{
+			flex: 0.5;
+			margin: 0 10rpx;
+		}
+	}
+	.newsList-time{
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+		span{
+			background-color: #c8c8c8;	
+			padding: 6rpx 16rpx;
+			color:#fff;
+			border-radius:10rpx;
+		}
+	}
+	.newsList-item{
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+		.newsList-head{
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+			span{
+				color:#FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+		.newsList-main{
+			padding-bottom: 20rpx ;
+			color:#999;
+		}
+		.newsList-foot{
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>

+ 68 - 0
pages/job/newsIndex/newsList/index.js

@@ -0,0 +1,68 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+ import * as API from '@/apis/common.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				page:{
+					classifyId:0,
+					pageIndex:1,
+					pageSize:10,
+				
+				},
+				result:[],
+				recordsTotal:0,
+			}
+		},
+		components: {
+		
+		},
+		// onPullDownRefresh() {
+		// 	if(this.result.length<this.recordsTotal){
+		// 		this.myLoadmore();
+		// 	}
+		// },
+		onReachBottom() {
+			if(this.result.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		onLoad(op){
+			this.page.classifyId=op.id;
+		},
+		methods: {
+			myLoadmore(){
+				this.page.pageIndex++;
+				this.getList();
+			},
+			 getList(){
+				 uni.showLoading({
+				 	title:"加载中",mask:true,
+				 })
+				API.messageList(this.page).then((response) => {
+					this.result=[
+						
+						...this.result,
+						...response.data.data,
+						
+					];
+					this.recordsTotal=response.data.recordsTotal
+					    uni.stopPullDownRefresh();
+					uni.hideLoading()
+				}).catch(error => {
+						uni.showToast({
+							title:error
+						})
+				})
+			 },
+			
+		},onReady(){ 
+			this.getList();
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 87 - 0
pages/job/newsIndex/newsList/newsList.vue

@@ -0,0 +1,87 @@
+<template>
+	<view>
+		<u-navbar title="消息"></u-navbar>
+		<view class="newsList">
+
+			<template v-for="(item,i) in result">
+
+				<view class="newsList-time" :key="i">
+					<span>{{item.createTime}}</span>
+				</view>
+				<view class="newsList-item" @click="item.isRead=true,gotoUrl('pages/job/newsIndex/newsEntry/newsEntry?id='+item.id)">
+					<view class="newsList-head">
+						<h3 class="u-line-1">{{item.title}}</h3>
+						<span :style="item.isRead?'color:#0ebd5f':''">[{{item.isRead?'已读':'未读'}}]</span>
+					</view>
+					<view class="newsList-main" v-html="item.content">
+
+					</view>
+					<view class="newsList-foot">
+						<span>查看详情</span>
+						<u-icon name="arrow-right" color="#999" size="24"></u-icon>
+					</view>
+				</view>
+			</template>
+			<u-loadmore @loadmore="myLoadmore" :status="result.length<recordsTotal?'loadmore':'nomore'"></u-loadmore>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page {
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.newsList-time {
+		display: flex;
+		justify-content: center;
+		margin-top: 40rpx;
+
+		span {
+			background-color: #c8c8c8;
+			padding: 6rpx 16rpx;
+			color: #fff;
+			border-radius: 10rpx;
+		}
+	}
+
+	.newsList-item {
+		padding: 20rpx;
+		margin: 20rpx;
+		background-color: #fff;
+		border-radius: 20rpx;
+
+		.newsList-head {
+			display: flex;
+			justify-content: space-between;
+			padding-bottom: 20rpx;
+
+			span {
+				color: #FF6D58;
+				min-width: 80rpx;
+				text-align: right;
+			}
+		}
+
+		.newsList-main {
+			padding-bottom: 20rpx;
+			color: #999;
+			height: 70px;
+			overflow: hidden;
+		}
+
+		.newsList-foot {
+			padding-top: 20rpx;
+			border-top: 1px solid #f7f7f7;
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+</style>

+ 71 - 0
pages/job/newsIndex/newsRecommend/index.js

@@ -0,0 +1,71 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/hr/news.js'
+
+import RecruitmentItem from '@/components/job/RecruitmentItem.vue'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+				list: [ ],
+				pageIndex:1,
+				recordsTotal:0,
+				src: '/static/img/head/png',
+				background: {
+					backgroundColor: '#2295ff',
+				},
+			}
+		},
+		components: {
+		RecruitmentItem
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		onReachBottom() {
+			if(this.list.length<this.recordsTotal){
+				this.myLoadmore();
+			}
+		},
+		methods: {
+			 myLoadmore(){
+			 	 
+			 	this.pageIndex+=1;
+			 	this.getList()
+			 },getList(bl){
+			 					uni.showLoading({
+			 						title:"加载中",mask:true,
+			 					})
+			 					 if(bl){
+			 						 this.list=[];
+			 						 this.pageIndex=1;
+			 					 }
+			 					var data={
+ 			 						pageIndex:this.pageIndex
+			 					};
+			 					API.positionRecruitmentList(data).then((res) => {
+			 							 
+			 						this.list=[
+			 							...this.list,
+			 							...res.data.data
+			 						];
+			 						this.recordsTotal=res.data.recordsTotal
+			 						uni.hideLoading()
+			 						 
+			 					}).catch(error => {
+			 							uni.showToast({
+			 								
+			 								title:error
+			 							})
+			 					})
+			 				}
+			
+		},onReady(){ 
+			this.getList()
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 68 - 0
pages/job/newsIndex/newsRecommend/newsRecommend.vue

@@ -0,0 +1,68 @@
+<template>
+	<view>
+		<u-navbar title="推荐职位" ></u-navbar>
+		<view class="jp-work-list">
+			
+			<RecruitmentItem v-for="(item ,index) in list" :key="index" :item="item"
+			 obj="wageTypeName=wageTypeN,companyScaleN=scaleName,companyName=name,companyLogo=logo,address=cityName"
+			 ></RecruitmentItem>
+			 
+			<u-loadmore @loadmore="myLoadmore" :status="list.length<recordsTotal?'loadmore':'nomore'" ></u-loadmore>
+			 
+			 
+		</view>
+		 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+<style>
+	page{
+		background-color: #F7F7F7;
+	}
+</style>
+<style scoped lang="scss">
+	.jp-work-item{
+		padding:30rpx;
+		background-color: #fff;
+		border-bottom: 1px solid #f7f7f7;
+		&:last-child{
+			border-bottom:none;
+		}
+		.jp-work-name{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			h3{
+				font-size: 36rpx;
+			}
+			span{
+				font-size: 32rpx;
+				color:#FF1700
+			}
+		}
+		.jp-work-tag{
+			display: flex;
+			align-items: center;
+			margin-top: 10rpx;
+			*{
+				margin-right: 10rpx;
+			}
+		}
+		.jp-work-info{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 10rpx;
+			p{
+				color:#999;
+				font-size: 24rpx;
+				margin-left: 10rpx;
+			}
+		}
+	} 
+</style>

+ 15 - 0
pages/job/personal/about/about.vue

@@ -0,0 +1,15 @@
+<template>
+	<view>
+		 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ 
+<style scoped lang="scss">
+	 
+</style>

+ 27 - 0
pages/job/personal/about/index.js

@@ -0,0 +1,27 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 28 - 0
pages/job/personal/index.js

@@ -0,0 +1,28 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+import TabbarJob from '@/components/TabbarJob.vue'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+			}
+		},
+		components: {
+			TabbarJob
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

+ 19 - 0
pages/job/personal/install/account/account.vue

@@ -0,0 +1,19 @@
+<template>
+	<view>
+		<u-navbar title="账户管理"></u-navbar>
+		<u-cell-group>
+			<u-cell-item title="修改密码"></u-cell-item>
+			<u-cell-item title="修改手机号"></u-cell-item>
+		</u-cell-group> 
+	</view>
+</template>
+
+<script>
+	import api from './index.js'
+	export default api;
+</script>
+
+ 
+<style scoped lang="scss">
+	 
+</style>

+ 27 - 0
pages/job/personal/install/account/index.js

@@ -0,0 +1,27 @@
+//import * as WxJsApi from '@/utils/wxJsApi.js'
+import * as API from '@/apis/index.js'
+
+export default {
+		data() {
+			return {
+				isReady:false,
+			}
+		},
+		components: {
+		
+		},
+		onLoad(op){
+			//this.id=op.id;
+		},
+		methods: {
+			 
+			
+		},onReady(){ 
+			
+			this.isReady=true;
+		},onShow(){
+			if(this.isReady){
+				
+			}	
+		},
+	}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio