he2802 %!s(int64=4) %!d(string=hai) anos
pai
achega
f9566a43f6
Modificáronse 44 ficheiros con 5585 adicións e 226 borrados
  1. 5 1
      common/api.js
  2. 2 1
      common/httpList/category.js
  3. 9 1
      common/httpList/coupon.js
  4. 39 0
      common/httpList/recruitmentNeeds.js
  5. 3 2
      common/httpList/system.js
  6. 75 0
      common/httpList/userResume.js
  7. 31 5
      common/methodTool.js
  8. 10 5
      common/request.js
  9. 318 91
      components/home.vue
  10. 42 24
      components/my.vue
  11. 822 33
      components/recruitment.vue
  12. 151 0
      components/tki-tree/style.css
  13. 90 0
      components/tki-tree/tki-tree.vue
  14. 72 3
      pages.json
  15. 37 21
      pages/index/index.vue
  16. 901 0
      pages2/index/searchRecruit.vue
  17. 25 0
      pages2/index/webview.vue
  18. 521 0
      pages2/recruitment/detailsInfo.vue
  19. 1464 0
      pages2/resume/addResume.vue
  20. 313 0
      pages2/resume/delivery.vue
  21. 228 0
      pages2/resume/myResume.vue
  22. 7 7
      pages2/wd/edu_info.vue
  23. 124 20
      pages2/wd/enroll.vue
  24. 31 4
      pages2/wd/help.vue
  25. 252 0
      pages2/wd/helpDetail.vue
  26. 10 5
      pages2/wd/info.vue
  27. 2 2
      pages2/wd/level.vue
  28. 1 1
      pages2/wd/menu.vue
  29. BIN=BIN
      static/640.jpg
  30. BIN=BIN
      static/adress@2x.png
  31. BIN=BIN
      static/bghuos.png
  32. BIN=BIN
      static/clock@3x.png
  33. BIN=BIN
      static/del@3x.png
  34. BIN=BIN
      static/fuli@2x.png
  35. BIN=BIN
      static/hot@3x.png
  36. BIN=BIN
      static/ji@3x.png
  37. BIN=BIN
      static/jianli@3x.png
  38. BIN=BIN
      static/job@3x.png
  39. BIN=BIN
      static/job@3xactive.png
  40. BIN=BIN
      static/pdf@3x.png
  41. BIN=BIN
      static/play@3x.png
  42. BIN=BIN
      static/preview@3x.png
  43. BIN=BIN
      static/shares@3x.png
  44. BIN=BIN
      static/toudi@3x.png

+ 5 - 1
common/api.js

@@ -19,6 +19,8 @@ import category from './httpList/category.js'
 import coupon from './httpList/coupon.js'
 import isHave from './httpList/isHave.js'
 import task from './httpList/task.js'
+import recruitmentNeeds from './httpList/recruitmentNeeds.js'
+import userResume from './httpList/userResume.js'
 export default {
 	...login,
 	...polyvVideo,
@@ -40,5 +42,7 @@ export default {
 	...category,
 	...coupon,
 	...isHave,
-	...task
+	...task,
+	...recruitmentNeeds,
+	...userResume
 }

+ 2 - 1
common/httpList/category.js

@@ -5,9 +5,10 @@ export default {
 	//查询【专业分类】列表
 	coursecategorylist(data) {
 		return myRequest({
-			url: '/course/category/list',
+			url: '/app/common/course/category/list',
 			method: 'get',
 			data: data,
+			noToken: true
 		})
 	},
 	//获取【专业分类】详细信息

+ 9 - 1
common/httpList/coupon.js

@@ -34,5 +34,13 @@ export default {
 			data: data
 		})
 	},
-	
+	//考试报名指引
+	arrangementlist(data) {
+		return myRequest({
+			url: '/app/common/exam/arrangement/list',
+			method: 'get',
+			data: data,
+			noToken: true
+		})
+	},
 }

+ 39 - 0
common/httpList/recruitmentNeeds.js

@@ -0,0 +1,39 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	//查询公司管理列列表
+	recruitcompanyConlist(data) {
+		return myRequest({
+			url: '/app/common/recruit/companyCon/list',
+			method: 'get',
+			data: data,
+			noToken: true
+		})
+	},
+	//获取公司管理列详细信息
+	recruitcompanyCon(data) {
+		return myRequest({
+			url: '/app/common/recruit/companyCon/' + data,
+			method: 'get',
+			noToken: true
+		})
+	},
+	//查询招聘需求列表
+	recruitneedslist(data) {
+		return myRequest({
+			url: '/app/common/recruit/needs/list',
+			method: 'get',
+			data: data,
+			noToken: true
+		})
+	},
+	//获取招聘需求详细信息
+	recruitneedsId(data) {
+		return myRequest({
+			url: '/app/common/recruit/needs/' + data,
+			method: 'get',
+			noToken: true
+		})
+	},
+}

+ 3 - 2
common/httpList/system.js

@@ -4,9 +4,10 @@ import {
 export default {
 	dictList(data) {
 		return myRequest({
-			url: '/system/dict/data/list',
+			url: '/app/common/system/dict/data/list',
 			method: 'get',
-			data: data
+			data: data,
+			noToken: true
 		})
 	},
 	

+ 75 - 0
common/httpList/userResume.js

@@ -0,0 +1,75 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	//新增招聘用户简历
+	addrecruitresume(data) {
+		return myRequest({
+			url: '/recruit/resume',
+			method: 'post',
+			data: data
+		})
+	},
+	//修改招聘用户简历
+	editrecruitresume(data) {
+		return myRequest({
+			url: '/recruit/resume/edit',
+			method: 'post',
+			data: data
+		})
+	},
+	//查询招聘用户简历列表
+	recruitresumelist(data) {
+		return myRequest({
+			url: '/recruit/resume/list',
+			method: 'get',
+			data: data
+		})
+	},
+	//获取招聘用户简历详细信息
+	recruitresumeId(data) {
+		return myRequest({
+			url: '/recruit/resume/' + data,
+			method: 'get'
+		})
+	},
+	//投递简历
+	systemInterview(data) {
+		return myRequest({
+			url: '/system/interview',
+			method: 'post',
+			data: data
+		})
+	},
+	//修改招聘面试关联
+	editsysteminterview(data) {
+		return myRequest({
+			url: '/system/interview/edit',
+			method: 'post',
+			data: data
+		})
+	},
+	//查询邀请面试列表
+	systeminterviewlist(data) {
+		return myRequest({
+			url: '/system/interview/list',
+			method: 'get',
+			data: data
+		})
+	},
+	//全部投递面试简历列表
+	systeminterviewlistAll(data) {
+		return myRequest({
+			url: '/system/interview/listAll',
+			method: 'get',
+			data: data
+		})
+	},
+	//获取招聘面试关联详细信息
+	systeminterviewId(data) {
+		return myRequest({
+			url: '/system/interview/' + data,
+			method: 'get'
+		})
+	},
+}

+ 31 - 5
common/methodTool.js

@@ -1,7 +1,6 @@
-const BASE_IMG_URL = 'https://file-dev.xyyxt.net/'
-// const BASE_IMG_URL = 'http://192.168.1.222:8088'
-// const BASE_IMG_URL = 'http://192.168.1.20:8088'
 import store from '@/store/index.js'
+import * as baseUrls from '@/common/request.js'
+// export const BASE_IMG_URL = 'https://file-dev.xyyxt.net/'
 export default {
 	isLogin() {
 		if (uni.getStorageSync('union_id')) {
@@ -17,7 +16,7 @@ export default {
 		if (url.indexOf("http") != -1 || url.indexOf("https") != -1) {
 			return url;
 		}
-		return BASE_IMG_URL + url
+		return baseUrls.BASE_IMG_URL + url
 	},
 	exit() {
 		uni.removeStorageSync('union_id')
@@ -44,8 +43,35 @@ export default {
 		}
 		return Y + M + D + h + m + s;
 	},
+	GetRTime(EndTime) {
+		var EndTime = EndTime //结束时间
+		var NowTime = new Date(); //当前时间
+		//后台给我的是10位 精确到秒的 所有下面我就除以了1000,不要小数点后面的
+		var t = EndTime - (NowTime.getTime() / 1000).toFixed(0);
+		if(t <= 0){
+			return '已结束'
+		}
+		//如果后台给的是毫秒 上面不用除以1000 下面的计算时间也都要除以1000 这里我去掉1000了
+		var d = Math.floor(t / 60 / 60 / 24); //天 var d=Math.floor(t/1000/60/60/24)
+		var h = Math.floor(t / 60 / 60 % 24); //时 var h=Math.floor(t/1000/60/60%24)
+		var m = Math.floor(t / 60 % 60); //分 var m=Math.floor(t/1000/60%60)
+		var s = Math.floor(t % 60); //秒 var s=Math.floor(t/1000%60)
+		if (parseInt(d) < 10) {
+			d = "0" + d;
+		}
+		if (parseInt(h) < 10) {
+			h = "0" + h;
+		}
+		if (parseInt(m) < 10) {
+			m = "0" + m;
+		}
+		if (parseInt(s) < 10) {
+			s = "0" + s;
+		}
+		return d + '天' + h + '小时' + m + '分' + s + '秒'
+	},
 	TimeTotimestamp(date) {
-		var date= date.replace(/-/g, '/');
+		var date = date.replace(/-/g, '/');
 		var newDate = new Date(date)
 		return (newDate.getTime() / 1000)
 	},

+ 10 - 5
common/request.js

@@ -1,9 +1,12 @@
-//const BASE_URL = 'http://192.168.1.222:8088'
-//const BASE_URL = 'http://127.0.0.1:8088' 
- const BASE_URL = 'https://api.xyyxt.net' 
+
+// 'http://192.168.1.222:8088','https://file-dev.xyyxt.net/'线下
+// 'https://api.xyyxt.net' 'https://file.xyyxt.net/'线上
 import store from '@/store/index.js'
 import api from './api.js'
 var num = 1
+export const BASE_URL = 'https://api.xyyxt.net'//接口api
+export const BASE_IMG_URL = 'https://file.xyyxt.net/'//图片上传api
+export const tenantId = '867735392558919680'
 export const myRequest = (options) => {
 	// uni.showLoading({
 	// 	title:'拼命加载中...'
@@ -13,9 +16,11 @@ export const myRequest = (options) => {
 			url: BASE_URL + options.url,
 			method: options.method || 'GET',
 			data: options.data,
-			header: options.noToken ? {TenantId:'867735392558919680'} : {
+			header: options.noToken ? {
+				TenantId: tenantId
+			} : {
 				AuthorizationToken: 'WX ' + uni.getStorageSync('token'),
-				TenantId:'867735392558919680'
+				TenantId: tenantId
 			},
 			success: async (res) => {
 				if (res.data.code == 401) {

+ 318 - 91
components/home.vue

@@ -13,12 +13,12 @@
 					<view class="card_box">
 						<u-row gutter="16">
 							<u-col span="11" v-if="false">
-								<view >
-										<text class="t1">距离</text>
-										<text class="t2">二级建造师</text>
-										<text class="t1">考试</text>
-										<text class="t3">365</text>
-										<text class="t1">天,继续加油哦!</text>
+								<view>
+									<text class="t1">距离</text> 
+									<text class="t2">二级建造师</text>
+									<text class="t1">考试</text>
+									<text class="t3">365</text>
+									<text class="t1">天,继续加油哦!</text>
 								</view>
 							</u-col>
 							<u-col offset="11" span="1">
@@ -32,7 +32,7 @@
 					</view>
 					<view style="width: 100%;display: flex;justify-content:center;margin-top: 40rpx;">
 						<view v-for="(item, index) in date_num" :key="index" class="date_num">
-							<view v-if="item.color == 0" class="date_num_color0" v-show="item.date>0">
+							<view v-if="item.color == 0" class="date_num_color0" v-show="item.date > 0">
 								{{ item.date }}
 								<view v-if="item.note > 0" class="date_note">{{ item.note }}</view>
 								<view v-if="item.dot" class="date_dot"></view>
@@ -54,12 +54,14 @@
 							</view>
 						</view>
 					</view>
-					<view style="width: 100%;margin-top: 20rpx;" v-if="workList.length>0" >
+					<view style="width: 100%;margin-top: 20rpx;" v-if="workList.length > 0">
 						<u-row gutter="16">
 							<u-col span="2" text-align="center">
 								<view><image src="/static/left.png" class="arr-icon" @click="preveItem"></image></view>
 							</u-col>
-							<u-col span="8" text-align="center"><view class="course_title" @click="jumpCourseDetail()">{{ courseItem.courseName }}</view></u-col>
+							<u-col span="8" text-align="center">
+								<view class="course_title" @click="jumpCourseDetail()">{{ courseItem.courseName }}</view>
+							</u-col>
 							<u-col span="2" text-align="center">
 								<view><image src="/static/right.png" class="arr-icon" @click="nextItem"></image></view>
 							</u-col>
@@ -70,7 +72,7 @@
 				<view style="margin-top: 20rpx;">
 					<u-row gutter="16">
 						<u-col span="1">
-							<view style="padding: 5rpx;"><image src="/static/select.png" class="arr-icon" @click="show = false"></image></view>
+							<view style="padding: 5rpx;"><image src="/static/select.png" class="arr-icon" @click="show = true"></image></view>
 						</u-col>
 						<u-col span="11">
 							<view>
@@ -128,8 +130,25 @@
 					</view>
 				</view>
 				<view v-if="paramList[current].showStatus" style="text-align: center;margin-top: 24rpx;">到底啦~</view>
-				<u-popup v-model="show">
-					<view style="width: 600rpx"><view class="popup_t1">选择你需要的</view></view>
+				<u-popup v-model="show" border-radius="14">
+					<view class="flex-d" style="width: 600rpx">
+						<view class="popup_t1">选择你需要的</view>
+						<view class="contentZ">
+							<view class="lzs">
+								<view class="tylsz" v-for="(item, index) in cateChild1" :key="index" @click="item.categoryId === 0 ? activeAll(1) : active1(item)" :class="item.categoryId === cateActiveIndex1 ? 'activeStys':''">{{ item.categoryName }}</view>
+							</view>
+							<view class="lzs">
+								<view class="tylsz" v-for="(item, index) in cateChild2" :key="index" @click="item.categoryId === 0 ? activeAll(2) : active2(item)" :class="item.categoryId === cateActiveIndex2 ? 'activeStys':''">{{ item.categoryName }}</view>
+							</view>
+							<view class="lzs">
+								<view class="tylsz" v-for="(item, index) in cateChild3" :key="index" @click="item.categoryId === 0 ? activeAll(3) : active3(item)" :class="item.categoryId === cateActiveIndex3 ? 'activeStys':''">{{ item.categoryName }}</view>
+							</view>
+						</view>
+						<view class="fots">
+							<view class="leftBtns" @click="initLists">重置筛选</view>
+							<view class="right_Btns" @click="searchPageInfos">确定筛选</view>
+						</view>
+					</view>
 				</u-popup>
 			</view>
 		</scroll-view>
@@ -141,9 +160,16 @@ export default {
 	name: 'home',
 	data() {
 		return {
-			courseItem:{},
-			courseIndex:0,
-			vertical:"vertical",
+			courseItem: {},
+			cateList: [],
+			cateChild1: [],
+			cateChild2: [],
+			cateChild3: [],
+			cateActiveIndex1:0,
+			cateActiveIndex2:null,
+			cateActiveIndex3:null,
+			courseIndex: 0,
+			vertical: 'vertical',
 			workList: [],
 			workTextList: [],
 			show: false,
@@ -189,61 +215,62 @@ export default {
 		};
 	},
 	onLoad() {},
+	created() {
+		this.windowHeight = uni.getSystemInfoSync().windowHeight - 100;
+	},
 	mounted() {
-		this.windowHeight = uni.getSystemInfoSync().windowHeight -100;
 		this.initList();
 		this.advertisingList();
-		
+		this.initCateList();
 	},
 	methods: {
-		init(){
-			if(!this.$method.isLogin()){
+		init() {
+			if (!this.$method.isLogin()) {
 				//未登录
-				this.date_num = []
-				this.workList = []
-				this.initDay()
-			}else{
-				this.date_num = []
-				this.workList = []
-				this.userPlanSeven()
+				this.date_num = [];
+				this.workList = [];
+				this.initDay();
+			} else {
+				this.date_num = [];
+				this.workList = [];
+				this.userPlanSeven();
 			}
 		},
-		initDay(){
+		initDay() {
 			// d是当前星期一的日期对象
-			var d=this.getMonDate();
-			var arr=[];
+			var d = this.getMonDate();
+			var arr = [];
 			let date = new Date();
 			let num = date.getDate();
-			for(var i=0; i<7; i++)
-			{
-				let item = {date:d.getDate()}
-				item.color = 0
-				if(d.getDate()==num){
+			for (var i = 0; i < 7; i++) {
+				let item = { date: d.getDate() };
+				item.color = 0;
+				if (d.getDate() == num) {
 					item.color = 3;
 				}
-				this.date_num.push(item)
-				d.setDate(d.getDate()+1);
+				this.date_num.push(item);
+				d.setDate(d.getDate() + 1);
 			}
 		},
-		preveItem(){
-			if(this.courseIndex>0){
-				this.courseIndex  = this.courseIndex-1
-				this.courseItem = this.workList[this.courseIndex]
+		preveItem() {
+			if (this.courseIndex > 0) {
+				this.courseIndex = this.courseIndex - 1;
+				this.courseItem = this.workList[this.courseIndex];
 			}
 		},
-		nextItem(){
-			if(this.courseIndex<this.workList.length-1){
-				this.courseIndex  = this.courseIndex+1
-				this.courseItem = this.workList[this.courseIndex]
+		nextItem() {
+			if (this.courseIndex < this.workList.length - 1) {
+				this.courseIndex = this.courseIndex + 1;
+				this.courseItem = this.workList[this.courseIndex];
 			}
 		},
-		jumpCourseDetail(){
+		jumpCourseDetail() {
 			this.$navTo.togo('/pages2/course/detail', {
 				id: this.courseItem.courseId
 			});
 		},
-		noticeBar(index){
-			let item = this.workList[index]
+		noticeBar(index) {
+			let item = this.workList[index];
 			this.$navTo.togo('/pages2/course/detail', {
 				id: item.courseId
 			});
@@ -251,24 +278,25 @@ export default {
 		userPlanSeven() {
 			let self = this;
 			this.$api.userPlanSeven().then(result => {
-				if(result.data.data.coursePlanVo!=null){
+				console.log(result, 9889);
+				if (result.data.data.coursePlanVo != null) {
 					self.workList = result.data.data.coursePlanVo;
-					if(self.workList!=null&&self.workList.length>0){
-						self.courseItem = self.workList[self.courseIndex]
+					if (self.workList != null && self.workList.length > 0) {
+						self.courseItem = self.workList[self.courseIndex];
 					}
 					let date = new Date();
 					let num = date.getDate();
-					let month = date.getMonth()+1
+					let month = date.getMonth() + 1;
 					let list = [];
-					for(let i = 0; i < result.data.data.calendarStudyVo.length; i++){
-						let item = result.data.data.calendarStudyVo[i]
-						if(item.month==month){
-							list = item.dayStudyList
+					for (let i = 0; i < result.data.data.calendarStudyVo.length; i++) {
+						let item = result.data.data.calendarStudyVo[i];
+						if (item.month == month) {
+							list = item.dayStudyList;
 						}
 					}
-					for(let i = 0; i < list.length; i++) {
-					    let item = list[i]
-						item.color = 0
+					for (let i = 0; i < list.length; i++) {
+						let item = list[i];
+						item.color = 0;
 						if (item.date == num) {
 							item.color = 3;
 						}
@@ -278,41 +306,41 @@ export default {
 						if (item.perform == 2) {
 							item.color = 2;
 						}
-						item.note = item.studyCourseKnob
-						if(item.note>0){
-							item.dot = true
+						item.note = item.studyCourseKnob;
+						if (item.note > 0) {
+							item.dot = true;
 						}
-						self.date_num.push(item)
+						self.date_num.push(item);
 					}
-				}else{
-					self.initDay()
-				}		 
+				} else {
+					self.initDay();
+				}
 			});
 		},
-		getMonDate(){
-			var d=new Date(),
-			day=d.getDay(),
-			date=d.getDate();
-			if(day==0)
-			return d;
-			else
-			d.setDate(date-day);
+		getMonDate() {
+			var d = new Date(),
+				day = d.getDay(),
+				date = d.getDate();
+			if (day == 0) return d;
+			else d.setDate(date - day);
 			return d;
 		},
-		swiperClick(index){
-			let item = this.list[index]
+		swiperClick(index) {
+			let item = this.list[index];
 			uni.navigateTo({
 				url: item.jumpUrl
 			});
 		},
-		advertisingList(){
-			let self = this
+		advertisingList() {
+			let self = this;
 			this.$api.advertisingList().then(res => {
 				let index;
-				for (index in res.data.rows ) {
-				  res.data.rows[index].image = self.$method.splitImgHost(res.data.rows[index].adverUrl)
+				for (index in res.data.rows) {
+					res.data.rows[index].image = self.$method.splitImgHost(res.data.rows[index].adverUrl);
 				}
-				self.list = res.data.rows
+				self.list = res.data.rows.filter((item,index) => {
+					return item.type === 1
+				});
 			});
 		},
 		initList() {
@@ -388,9 +416,9 @@ export default {
 				return;
 			}
 			if (this.current == 1) {
-					this.$navTo.togo('/pages2/bank/detail', {
-						id: item.bankId
-					});
+				this.$navTo.togo('/pages2/bank/detail', {
+					id: item.bankId
+				});
 				return;
 			}
 			if (this.current == 2) {
@@ -401,16 +429,157 @@ export default {
 			}
 		},
 		jumpPlan() {
-			if(!this.$method.isLogin()){
+			if (!this.$method.isLogin()) {
 				this.$navTo.togo('/pages/login/login');
-			}else{
+			} else {
 				this.$navTo.togo('/pages2/plan/detail', {});
 			}
-			
 		},
 		jumpSearch() {
 			this.$navTo.togo('/pages2/index/search', {});
-		}
+		},
+		initCateList() {
+			this.$api.coursecategorylist().then(res => {
+				if (res.data.code === 200) {
+					this.cateList = res.data.rows;
+					this.cateChild1 = res.data.rows.filter((item, index) => {
+						return item.pid === 0;
+					});
+					if (this.cateChild1.length > 0) {
+						this.cateChild1.unshift({
+							categoryName: '全部',
+							categoryId: 0
+						});
+					}
+				}
+			});
+		},
+		active1(options) {
+			this.cateActiveIndex1 = options.categoryId
+			this.cateActiveIndex2 = 0
+			this.cateChild2 = this.cateList.filter((item, index) => {
+				return item.pid === options.categoryId;
+			});
+			if (this.cateChild2.length > 0) {
+				this.cateChild2.unshift({
+					categoryName: '全部',
+					categoryId: 0
+				});
+			}
+		},
+		active2(options) {
+			this.cateActiveIndex2 = options.categoryId
+			this.cateActiveIndex3 = 0
+			this.cateChild3 = this.cateList.filter((item, index) => {
+				return item.pid === options.categoryId;
+			});
+			if (this.cateChild3.length > 0) {
+				this.cateChild3.unshift({
+					categoryName: '全部',
+					categoryId: 0
+				});
+			}
+		},
+		active3(options) {
+			this.cateActiveIndex3 = options.categoryId
+			// this.cateChild2 = this.cateList.filter((item,index) => {
+			// 	return item.pid === options.categoryId
+			// })
+		},
+		activeAll(int) {
+			if (int === 1) {
+				this.cateActiveIndex1 = 0
+				this.cateChild2 = [];
+			}
+			if (int === 2) {
+				this.cateActiveIndex2 = 0
+				this.cateChild3 = [];
+			}
+			if (int === 3) {
+				this.cateActiveIndex3 = 0
+				// this.cateChild2 = []
+			}
+		},
+		initLists(){
+			this.paramList[0].categoryId = ''
+			this.paramList[1].categoryId = ''
+			this.paramList[2].categoryId = ''
+			this.cateChild2 = []
+			this.cateChild3 = []
+			this.cateActiveIndex1 = 0
+			this.cateActiveIndex2 = null
+			this.cateActiveIndex3 = null
+		},
+		searchPageInfos(){
+			if(this.cateActiveIndex1 === null || this.cateActiveIndex1 === 0){
+				this.show = false
+				this.alint()
+			}else{
+				if(this.cateActiveIndex2 === 0 || this.cateActiveIndex2 === null){
+					this.paramList[0].categoryId = this.cateActiveIndex1
+					this.paramList[1].categoryId = this.cateActiveIndex1
+					this.paramList[2].categoryId = this.cateActiveIndex1
+					this.show = false
+					this.alint()
+				}else{
+					if(this.cateActiveIndex3 === 0 || this.cateActiveIndex3 === null){
+						this.paramList[0].categoryId = this.cateActiveIndex2
+						this.paramList[1].categoryId = this.cateActiveIndex2
+						this.paramList[2].categoryId = this.cateActiveIndex2
+						this.show = false
+						this.alint()
+					}else{
+						this.paramList[0].categoryId = this.cateActiveIndex3
+						this.paramList[1].categoryId = this.cateActiveIndex3
+						this.paramList[2].categoryId = this.cateActiveIndex3
+						this.show = false
+						this.alint()
+					}
+				}
+			}
+			
+		},
+		alint(){
+			this.courseListint()
+			this.bankListint()
+			this.noteListint()
+		},
+		//课程
+		courseListint() {
+			var self = this;
+			var param = this.paramList[0];
+			this.$api.courselist(param).then(res => {
+				self.paramList[0].total = res.data.total;
+				self.list1 = res.data.rows
+				if (self.list1.length === res.data.total) {
+					self.paramList[0].showStatus = true;
+				}
+			});
+		},
+		//题库
+		bankListint() {
+			var self = this;
+			var param = this.paramList[1];
+			this.$api.banklist(param).then(res => {
+				self.paramList[1].total = res.data.total;
+				self.list2 = res.data.rows
+				if (self.list2.length === res.data.total) {
+					self.paramList[1].showStatus = true;
+				}
+			});
+		},
+		//考试重点
+		noteListint() {
+			var self = this;
+			var param = this.paramList[2];
+			this.$api.notelist(param).then(res => {
+				self.paramList[2].total = res.data.total;
+				self.list3 = res.data.rows
+				if (self.list3.length === res.data.total) {
+					self.paramList[2].showStatus = true;
+				}
+			});
+		},
 	}
 };
 </script>
@@ -426,12 +595,13 @@ export default {
 	align-items: center;
 }
 .popup_t1 {
-	height: 29rpx;
-	font-size: 30rpx;
-	font-family: PingFang SC;
+	padding-left: 35rpx;
+	border-bottom: 1rpx solid #eee;
+	height: 57rpx;
+	margin-top: 86rpx;
 	font-weight: bold;
 	color: #131b31;
-	margin: 100rpx;
+	font-size: 30rpx;
 }
 .price {
 	font-size: 20rpx;
@@ -600,4 +770,61 @@ page {
 	width: 26rpx;
 	height: 26rpx;
 }
+.flex-d {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	height: 100%;
+}
+.contentZ {
+	flex: 1;
+	overflow-y: auto;
+	padding-left: 35rpx;
+	display: flex;
+	justify-content: space-around;
+}
+.contentZ::-webkit-scrollbar {
+	display: none;
+}
+.fots {
+	height: 100rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+	border-top: 1rpx solid #eee;
+}
+.leftBtns {
+	font-size: 30rpx;
+	color: #32467b;
+	font-weight: 500;
+}
+.right_Btns {
+	font-size: 30rpx;
+	color: #fff;
+	background-color: #32467b;
+	border-radius: 24rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	padding: 0rpx 23rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+.lzs {
+	width: 31%;
+	margin: 0rpx 1%;
+	max-width: 31%;
+}
+.tylsz{
+	margin-top: 23rpx;
+	color: #666;
+	font-weight: 400;
+	font-size: 24rpx;
+}
+.tylsz:first-child{
+	text-align: center;
+}
+.activeStys{
+	font-weight: bold;
+	color: #32467B;
+}
 </style>

+ 42 - 24
components/my.vue

@@ -11,11 +11,15 @@
 				<u-col span="6">
 					<view style="display: flex;">
 						<navigator class="name" url="/pages2/wd/avatar" hover-class="none">{{ userInfo.nickname }}</navigator>
-						<navigator class="tag" url="/pages2/wd/level" hover-class="none">{{userInfo.userLevel === null ? '初出茅庐':levelList[userInfo.userLevel -1]}}</navigator>
+						<navigator class="tag" url="/pages2/wd/level" hover-class="none">
+							{{ userInfo.userLevel === null ? '初出茅庐' : levelList[userInfo.userLevel - 1] }}
+						</navigator>
 					</view>
 					<navigator url="/pages2/wd/level" hover-class="none" style="position: relative;margin-top: 20rpx;">
-						<view class="progress_text">{{userInfo.integral === null ? 0 : userInfo.integral}}/{{userInfo.userLevel === null ? '0': userLevelList[userInfo.userLevel -1]}}</view>
-						<u-line-progress height="8" active-color="#2F4379" :percent="0" :show-percent="false"></u-line-progress>
+						<view class="progress_text">
+							{{ userInfo.integral === null ? 0 : userInfo.integral }}/{{ userInfo.userLevel === null || userInfo.userLevel == undefined ? '0' : userLevelList[userInfo.userLevel - 1] }}
+						</view>
+						<u-line-progress height="8" active-color="#2F4379" :percent="userInfo.integral === null ? 0 : userInfo.integral" :show-percent="false"></u-line-progress>
 					</navigator>
 				</u-col>
 				<view class="qiandao" @click="qd" v-if="issue === 0">签到</view>
@@ -30,12 +34,12 @@
 						</navigator>
 					</u-col>
 					<u-col span="4" text-align="center">
-						<navigator url="/pages2/coin/index"  hover-class="none">
+						<navigator url="/pages2/coin/index" hover-class="none">
 							<view class="head_t1">金币</view>
 							<view class="head_t2">{{ userInfo.money }}</view>
 						</navigator>
 					</u-col>
-					<u-col span="4"  text-align="center">
+					<u-col span="4" text-align="center">
 						<navigator url="/pages2/wd/ranking" hover-class="none">
 							<view class="head_t1">学习排名</view>
 							<view class="head_t2" v-if="rank > 0">NO.{{ rank }}</view>
@@ -47,7 +51,7 @@
 		</view>
 		<view style="padding: 30rpx;">
 			<!-- 学习记录-->
-			<view class="record">
+			<view class="record" v-if="list.length">
 				<view class="r_t1">
 					最近学习记录
 					<u-icon name="arrow-right" size="28"></u-icon>
@@ -101,6 +105,18 @@
 								<view class="tool_t">成长地图</view>
 							</view>
 						</u-col>
+						<u-col span="3" text-align="center">
+							<navigator url="/pages2/resume/myResume" hover-class="none">
+								<image src="/static/jianli@3x.png" class="tool_img"></image>
+								<view class="tool_t">我的简历</view>
+							</navigator>
+						</u-col>
+						<u-col span="3" text-align="center">
+							<navigator url="/pages2/resume/delivery" hover-class="none">
+								<image src="/static/toudi@3x.png" class="tool_img"></image>
+								<view class="tool_t">我的投递</view>
+							</navigator>
+						</u-col>
 					</u-row>
 				</view>
 			</view>
@@ -115,7 +131,6 @@
 				</u-row>
 			</view>
 		</view>
-		<u-modal v-model="show" :content="content"></u-modal>
 	</view>
 </template>
 
@@ -126,36 +141,35 @@ export default {
 	data() {
 		return {
 			list: [23, 24, 25, 26, 27, 28, 29],
-			content: '此功能暂未开放',
 			show: false,
 			collectTotal: 0,
 			rank: 0,
 			issue: 0,
-			levelList: ['初出茅庐','崭露头角','自成一派','小有名气','惊艳四座','初露锋芒'],
+			levelList: ['初出茅庐', '崭露头角', '自成一派', '小有名气', '惊艳四座', '初露锋芒'],
 			userLevelList: []
 		};
 	},
 	methods: {
-		getLevel(){
-			var self = this
+		getLevel() {
+			var self = this;
 			this.$api.gradelist().then(res => {
-				res.data.rows.forEach((item,index) => {
-					self.userLevelList.push(item.needIntegralEnd)
-				})
-			})
+				res.data.rows.forEach((item, index) => {
+					self.userLevelList.push(item.needIntegralEnd);
+				});
+			});
 		},
 		qd() {
-			var self = this
+			var self = this;
 			var data = {
 				taskType: 0
-			}
+			};
 			self.$api.taskSignIn(data).then(res => {
-				if(res.data.code === 200){
-					self.getInfoAttached()
+				if (res.data.code === 200) {
+					self.getInfoAttached();
 					//刷新用户信息
-					self.$api.refreshUserInfo() 
+					self.$api.refreshUserInfo();
 				}
-			})
+			});
 		},
 		jumpDetail(item) {
 			this.$navTo.togo('/pages2/course/detail', {
@@ -165,17 +179,21 @@ export default {
 		},
 		init() {
 			this.getInfoAttached();
-			this.getLevel()
+			this.getLevel();
 		},
 		jumpPopup() {
-			this.show = true;
+			uni.showModal({
+				title: '提示',
+				content: '此功能暂未开放',
+				showCancel: false
+			});
 		},
 		getInfoAttached() {
 			let self = this;
 			this.$api.appInfoAttached().then(res => {
 				self.collectTotal = res.data.data.collectTotal;
 				self.rank = res.data.data.rank;
-				self.issue = res.data.data.issue
+				self.issue = res.data.data.issue;
 			});
 			this.studyRecordList();
 		},

+ 822 - 33
components/recruitment.vue

@@ -1,37 +1,181 @@
 <template>
-	<view>
+	<view id="recruitment">
 		<view style="z-index: 999;">
 			<u-navbar title="求职中心" :is-back="false">
-				<view class="slot-wrap"><image src="/static/search.png" class="search"></image></view>
+				<view class="slot-wrap"><image src="/static/search.png" class="search" @click="jumpSearch"></image></view>
 			</u-navbar>
 		</view>
 		<scroll-view scroll-y="true" @scroll="scroll" style="padding-top: 20rpx;" :style="'height: ' + windowHeight + 'px;'" @scrolltolower="scrollTolower">
 			<swiper class="swiper" :autoplay="true" previous-margin="15px" next-margin="15px" :circular="true">
-				<swiper-item v-for="(item, index) in 4" :key="index" style="padding: 0px 5px;box-sizing: border-box;">
-					<view style="height: 100%;border-radius: 8px;overflow: hidden;"><image src="../static/rank_bg.png" mode="" style="width: 100%;height: 100%;"></image></view>
+				<swiper-item v-for="(item, index) in list" :key="index" style="padding: 0px 5px;box-sizing: border-box;">
+					<view style="height: 100%;border-radius: 8px;overflow: hidden;"><image :src="$method.splitImgHost(item.adverUrl)" mode="" style="width: 100%;height: 100%;" @click="swiperClick(index)"></image></view>
 				</swiper-item>
 			</swiper>
-			<view style="margin-top: 20rpx;">
+			<view style="margin: 31rpx 35rpx 24rpx">
 				<u-row gutter="16">
 					<u-col span="1">
-						<view style="padding: 5rpx;"><image src="/static/select.png" class="arr-icon" @click="show = false"></image></view>
+						<view style="padding: 5rpx;"><image src="/static/select.png" class="arr-icon" @click="showStatus"></image></view>
 					</u-col>
-					<u-col span="11">
+					<u-col span="9">
 						<view>
-							
+							<template>
+								<u-subsection
+									@change="sectionChange"
+									height="54"
+									button-color="rgba(47,67,121,0.6)"
+									bg-color="#F8F9FF"
+									active-color="#FFFFFF"
+									inactive-color="#636A75"
+									:bold="false"
+									:list="tab_list"
+									:current="current"
+								></u-subsection>
+							</template>
 						</view>
 					</u-col>
+					<u-col span="2" @click="showCityPicker = true">
+						<view class="slh">{{ city === null ? '全国' : city }}</view>
+					</u-col>
 				</u-row>
 			</view>
+			<view v-if="current === 0">
+				<view class="boxsize lines" v-for="(item, index) in posts" :key="index" @click="jumpDetails(item)">
+					<view class="top_sty">
+						<view>
+							<view class="heasd">
+								{{ item.job }}
+								<image v-if="item.isUrgent === 1" style="width:27rpx;height:27rpx;" src="../static/ji@3x.png" mode=""></image>
+							</view>
+							<view class="fotHs">{{ item.companyName }}</view>
+						</view>
+						<view class="priceSty">
+							{{ item.incomeStart === item.incomeEnd ? item.incomeStart : item.incomeStart + '~' + item.incomeEnd }}/{{ item.incomeType === 1 ? '月' : '年' }}
+						</view>
+					</view>
+					<view class="dis_foter">
+						<view class="dis_f">
+							<view class="fot_size">{{ item.workingYearsLabel }}</view>
+							<view class="fot_size">{{ item.minimumEduLabel }}</view>
+							<view class="yys" v-for="(items, indexs) in item.bonusCertificate" :key="indexs">{{ items }}</view>
+						</view>
+						<view class="right_address">{{ item.city }}•{{ item.district }}</view>
+					</view>
+				</view>
+				<u-divider v-if="total == posts.length">到底啦</u-divider>
+			</view>
+			<view v-if="current === 1">
+				<view class="boxsize" v-for="(item, index) in enterprise" :key="index">
+					<view class="dis_flexs" @click="jumpCompany(item)">
+						<view class="imgboxs"><image style="width: 100%; height: 100%;" :src="$method.splitImgHost(item.logoUrl)" mode=""></image></view>
+						<view style="flex: 1;">
+							<view class="headTits">{{ item.companyName }}</view>
+							<view class="lisz">
+								<view class="bqB">{{ item.city }}</view>
+								<view class="bqB">{{ item.companyType }}</view>
+								<view class="bqB">{{ item.companySize }}</view>
+							</view>
+						</view>
+					</view>
+					<view class="tnsz">
+						<view class="litns" v-for="(items, indexs) in item.newNumObj" :key="indexs" @click="jumpDetails(items)">{{ items.job }}</view>
+						<view class="moreLs" v-if="item.recruitNeedsVoList.length > 3" @click="jumpDetails(item.recruitNeedsVoList[0])">•••</view>
+					</view>
+				</view>
+				<u-divider v-if="total1 == enterprise.length">到底啦</u-divider>
+			</view>
 		</scroll-view>
-		<u-popup v-model="show">
-			<view style="width: 600rpx"><view class="popup_t1">选择你需要的</view></view>
+		<u-popup v-model="show" border-radius="14">
+			<view class="flex-d" style="width: 600rpx">
+				<view class="popup_t1">
+					<view class="mors" :class="activePopBtn === 0 ? 'activesSty' : ''" @click="activePopBtn = 0">岗位筛选</view>
+					<view class="mors" style="margin-left: 32rpx;" :class="activePopBtn === 1 ? 'activesSty' : ''" @click="activePopBtn = 1">企业筛选</view>
+				</view>
+				<view class="contentZ" v-if="activePopBtn === 0">
+					<view class="heards">工作类型</view>
+					<view class="boxPlus">
+						<view
+							class="liszing"
+							v-for="(item, index) in workTypeList"
+							:key="index"
+							@click="activeWorkType(item)"
+							:class="workActiveBoxs.indexOf(item) !== -1 ? 'activesLiszing' : ''"
+						>
+							{{ item }}
+						</view>
+						<view style="clear: both;"></view>
+					</view>
+					<view class="heards">薪资范围</view>
+					<view class="priceType">
+						<view class="lstq" :class="priceType === 1 ? 'activeLstq' : ''" @click="priceType = 1">月薪</view>
+						<view class="lstq" :class="priceType === 2 ? 'activeLstq' : ''" @click="priceType = 2">年薪</view>
+					</view>
+					<view class="priceInput">
+						<input class="inputSty" type="number" value="" placeholder="最低(元)" v-model="incomeStart" />
+						至
+						<input class="inputSty" type="number" value="" placeholder="最高(元)" v-model="incomeEnd" />
+					</view>
+					<view class="heards">学历要求(可多选)</view>
+					<view class="boxPlus">
+						<view
+							class="liszing"
+							v-for="(item, index) in eduList"
+							:key="index"
+							@click="activeEduType(item)"
+							:class="eduActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+						>
+							{{ item.label }}
+						</view>
+						<view style="clear: both;"></view>
+					</view>
+					<view class="heards">工作年限(可多选)</view>
+					<view class="boxPlus">
+						<view
+							class="liszing"
+							v-for="(item, index) in workYearsList"
+							:key="index"
+							@click="activeWorkYearsType(item)"
+							:class="workYearsActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+						>
+							{{ item.label }}
+						</view>
+						<view style="clear: both;"></view>
+					</view>
+				</view>
+				<view class="contentZ" v-if="activePopBtn === 1">
+					<view class="heards">企业规模(可多选)</view>
+					<view class="boxPlus">
+						<view
+							class="liszing"
+							v-for="(item, index) in companySizeList"
+							:key="index"
+							@click="activeCompanySize(item)"
+							:class="companySizeActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+						>
+							{{ item.label }}
+						</view>
+						<view style="clear: both;"></view>
+					</view>
+					<view class="heards">公司类型(可多选)</view>
+					<view class="boxPlus">
+						<view
+							class="liszing"
+							v-for="(item, index) in companyTypeList"
+							:key="index"
+							@click="activeCompanyType(item)"
+							:class="companyTypeActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+						>
+							{{ item.label }}
+						</view>
+						<view style="clear: both;"></view>
+					</view>
+				</view>
+				<view class="fots">
+					<view class="leftBtns" @click="initLists">重置筛选</view>
+					<view class="right_Btns" @click="searchPageInfos">确定筛选</view>
+				</view>
+			</view>
 		</u-popup>
-	<view class="u-config-item">
-			<u-subsection :list="tab_list1" :current="current2" button-color="rgba(47,67,121,0.6)" @change="sectionChange"></u-subsection>
-
-	</view>
-		
+		<u-picker mode="region" v-model="showCityPicker" :params="{ province: true, city: true }" @confirm="activeCitys"></u-picker>
 	</view>
 </template>
 
@@ -40,40 +184,457 @@ export default {
 	name: 'recruitment',
 	data() {
 		return {
-			colorBgc: 'red',
+			list:[],
+			showCityPicker: false,
+			province: null,
+			city: null,
+			activePopBtn: 0,
 			windowHeight: 0,
 			show: false,
-			tab_list1: [
-				{
-					name: '课程A'
-				},
+			tab_list: [
 				{
-					name: '刷题'
+					name: '找岗位'
 				},
 				{
-					name: '重点考点'
+					name: '找企业'
 				}
 			],
-			current2: 0
+			posts: [], //岗位列表
+			enterprise: [], //企业列表
+			current: 0,
+			pageNum: 1,
+			pageSize: 8,
+			total: 0,
+			pageNum1: 1,
+			pageSize1: 8,
+			total1: 0,
+			workTypeList: ['全职', '兼职', '实习生'], //工作类型
+			workActiveBoxs: [], //选中工作类型
+			priceType: 1, //薪资类型 1月薪2年薪
+			incomeStart: '', //薪资起点
+			incomeEnd: '', //薪资结点
+			eduList: [], //学历
+			eduActiveBoxs: [], //选中学历
+			workYearsList: [], //工作年限类型
+			workYearsActiveBoxs: [], //选中工作年限类型
+
+			companySizeList: [], //公司规模
+			companySizeActiveBoxs: [], //选中公司规模
+			companyTypeList: [], //公司类型
+			companyTypeActiveBoxs: [], //选中公司类型
+			sxGW: false,
+			sxCM: false
 		};
 	},
-	mounted() {
+	created() {
 		this.windowHeight = uni.getSystemInfoSync().windowHeight - 120;
-		this.init();
-		console.log(this.windowHeight);
+	},
+	mounted() {
+		this.inits();
+		this.getDict();
+		this.advertisingList();
 	},
 	methods: {
-		init() {},
+		swiperClick(index) {
+			let item = this.list[index];
+			uni.navigateTo({
+				url: item.jumpUrl
+			});
+		},
+		advertisingList() {
+			let self = this;
+			this.$api.advertisingList().then(res => {
+				self.list = res.data.rows.filter((item,index) => {
+					return item.type === 2
+				});
+			});
+		},
+		getDict() {
+			var self = this;
+			this.$api.dictList().then(res => {
+				res.data.data.forEach((item, index) => {
+					if (item.dictType == 'edu_level') {
+						self.eduList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+					if (item.dictType == 'working_years') {
+						if (item.dictCode !== 109) {
+							self.workYearsList.push({ label: item.dictLabel, value: item.dictCode });
+						}
+					}
+					if (item.dictType == 'company_size') {
+						self.companySizeList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+					if (item.dictType == 'company_type') {
+						self.companyTypeList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+				});
+			});
+		},
+		inits() {
+			this.getCurrentGW();
+			this.getCurrentCM();
+		},
+		jumpSearch() {
+			this.$navTo.togo('/pages2/index/searchRecruit', {});
+		},
 		scroll(e) {},
-		scrollTolower() {},
+		getCurrentGW(v) {
+			var self = this;
+			var data = {
+				pageNum: this.pageNum,
+				pageSize: this.pageSize
+			};
+			if (this.city !== null && this.province !== null) {
+				data.province = this.province;
+				data.city = this.city;
+			}
+			if (v) {
+				if (this.workActiveBoxs.length) {
+					data.jobNature = this.workActiveBoxs.toString();
+				}
+				if (this.incomeStart !== '' || this.incomeEnd !== '') {
+					if (this.incomeStart !== '' && this.incomeEnd !== '') {
+						var testPrice = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/;
+						if (!testPrice.test(Number(this.incomeStart))) {
+							uni.showToast({
+								title: '请规范填写最低薪资',
+								icon: 'none'
+							});
+							return;
+						}
+						if (!testPrice.test(Number(this.incomeEnd))) {
+							uni.showToast({
+								title: '请规范填写最高薪资',
+								icon: 'none'
+							});
+							return;
+						}
+						if (Number(this.incomeStart) > Number(this.incomeEnd)) {
+							uni.showToast({
+								title: '请规范填写薪资范围',
+								icon: 'none'
+							});
+							return;
+						}
+						data.incomeType = this.priceType;
+						data.incomeList = [{ incomeStart: Number(this.incomeStart), incomeEnd: Number(this.incomeEnd) }];
+					} else {
+						uni.showToast({
+							title: '请填写薪资范围',
+							icon: 'none'
+						});
+						return;
+					}
+				}
+				if (this.eduActiveBoxs.length) {
+					data.minimumEduDictList = this.eduActiveBoxs.toString();
+				}
+				if (this.workYearsActiveBoxs.length) {
+					data.workingYearsDictList = this.workYearsActiveBoxs.toString();
+				}
+			}
+			this.$api.recruitneedslist(data).then(res => {
+				if (res.data.code === 200) {
+					self.total = res.data.total;
+					res.data.rows.forEach((item, index) => {
+						if (item.jobNature) {
+							item.jobNature = item.jobNature.split(',');
+						}
+						if (item.welfare) {
+							item.welfare = item.welfare.split(',');
+						}
+						if (item.bonusCertificate) {
+							item.bonusCertificate = item.bonusCertificate.split(',');
+						}
+					});
+					self.posts = res.data.rows;
+					self.show = false;
+				}
+			});
+		},
+		getCurrentCM(v) {
+			var self = this;
+			var data1 = {
+				pageNum: this.pageNum1,
+				pageSize: this.pageSize1
+			};
+			if (this.city !== null && this.province !== null) {
+				data1.province = this.province;
+				data1.city = this.city;
+			}
+			if (v) {
+				if (this.companySizeActiveBoxs.length) {
+					data1.sizeIds = this.companySizeActiveBoxs.toString();
+				}
+				if (this.companyTypeActiveBoxs.length) {
+					data1.typeIds = this.companyTypeActiveBoxs.toString();
+				}
+			}
+			this.$api.recruitcompanyConlist(data1).then(res => {
+				if (res.data.code === 200) {
+					self.total1 = res.data.total;
+						for (let k = 0; k < res.data.rows.length; k++) {
+							if (res.data.rows[k].recruitNeedsVoList) {
+								var anum = [];
+								for (let i = 0; i < res.data.rows[k].recruitNeedsVoList.length; i++) {
+									if (i >= 3) {
+										break;
+									} else {
+										anum.push(res.data.rows[k].recruitNeedsVoList[i]);
+									}
+								}
+								res.data.rows[k].newNumObj = anum;
+							}
+						}
+					self.enterprise = res.data.rows;
+					self.show = false;
+				}
+			});
+		},
+		searchPageInfos() {
+			var self = this;
+			if (this.activePopBtn === 0) {
+				this.current = 0;
+				this.sxGW = true;
+				this.getCurrentGW(true);
+			}
+			if (this.activePopBtn === 1) {
+				this.current = 1;
+				this.sxCM = true;
+				this.getCurrentCM(true);
+			}
+		},
+		jumpCompany(v) {
+			var data = {
+				companyId: v.companyId
+			};
+			if (v.recruitNeedsVoList.length > 0) {
+				data.id = v.recruitNeedsVoList[0].id;
+			}
+			this.$navTo.togo('/pages2/recruitment/detailsInfo', data);
+		},
+		jumpDetails(v) {
+			this.$navTo.togo('/pages2/recruitment/detailsInfo', {
+				id: v.id,
+				companyId: v.companyId
+			});
+		},
+		scrollTolower() {
+			var self = this;
+			if (this.current === 0) {
+				if (this.total > this.posts.length) {
+					var data = {
+						pageNum: this.pageNum + 1,
+						pageSize: this.pageSize
+					};
+					if (this.sxGW) {
+						if (this.workActiveBoxs.length) {
+							data.jobNature = this.workActiveBoxs.toString();
+						}
+						if (this.incomeStart !== '' || this.incomeEnd !== '') {
+							if (this.incomeStart !== '' && this.incomeEnd !== '') {
+								var testPrice = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/;
+								if (!testPrice.test(Number(this.incomeStart))) {
+									uni.showToast({
+										title: '请规范填写最低薪资',
+										icon: 'none'
+									});
+									return;
+								}
+								if (!testPrice.test(Number(this.incomeEnd))) {
+									uni.showToast({
+										title: '请规范填写最高薪资',
+										icon: 'none'
+									});
+									return;
+								}
+								if (Number(this.incomeStart) > Number(this.incomeEnd)) {
+									uni.showToast({
+										title: '请规范填写薪资范围',
+										icon: 'none'
+									});
+									return;
+								}
+								data.incomeType = this.priceType;
+								data.incomeList = [{ incomeStart: Number(this.incomeStart), incomeEnd: Number(this.incomeEnd) }];
+							} else {
+								uni.showToast({
+									title: '请填写薪资范围',
+									icon: 'none'
+								});
+								return;
+							}
+						}
+						if (this.eduActiveBoxs.length) {
+							data.minimumEduDictList = this.eduActiveBoxs.toString();
+						}
+						if (this.workYearsActiveBoxs.length) {
+							data.workingYearsDictList = this.workYearsActiveBoxs.toString();
+						}
+					}
+					this.$api.recruitneedslist(data).then(res => {
+						if (res.data.code === 200) {
+							self.pageNum++;
+							res.data.rows.forEach((item, index) => {
+								if (item.jobNature) {
+									item.jobNature = item.jobNature.split(',');
+								}
+								if (item.welfare) {
+									item.welfare = item.welfare.split(',');
+								}
+								if (item.bonusCertificate) {
+									item.bonusCertificate = item.bonusCertificate.split(',');
+								}
+								self.posts.push(item);
+							});
+						}
+					});
+				}
+			}
+			if (this.current === 1) {
+				if (this.total1 > this.enterprise.length) {
+					var data1 = {
+						pageNum: this.pageNum1 + 1,
+						pageSize: this.pageSize1
+					};
+					if (this.sxCM) {
+						if (this.companySizeActiveBoxs.length) {
+							data1.sizeIds = this.companySizeActiveBoxs.toString();
+						}
+						if (this.companyTypeActiveBoxs.length) {
+							data1.typeIds = this.companyTypeActiveBoxs.toString();
+						}
+					}
+					this.$api.recruitcompanyConlist(data1).then(res => {
+						if (res.data.code === 200) {
+							self.pageNum1++;
+							for (let k = 0; k < res.data.rows.length; k++) {
+								if (res.data.rows[k].recruitNeedsVoList) {
+									var anum = [];
+									for (let i = 0; i < res.data.rows[k].recruitNeedsVoList.length; i++) {
+										if (i >= 3) {
+											break;
+										} else {
+											anum.push(res.data.rows[k].recruitNeedsVoList[i]);
+										}
+									}
+									res.data.rows[k].newNumObj = anum;
+								}
+								self.enterprise.push(res.data.rows[k]);
+							}
+						}
+					});
+				}
+			}
+		},
 		sectionChange(index) {
-			this.current2 = index;
+			this.current = index;
+		},
+		initLists() {
+			if (this.activePopBtn === 0) {
+				this.priceType = 1; //薪资类型 1月薪2年薪
+				this.incomeStart = ''; //薪资起点
+				this.incomeEnd = ''; //薪资结点
+				this.workActiveBoxs = [];
+				this.eduActiveBoxs = [];
+				this.workYearsActiveBoxs = [];
+				this.province = null;
+				this.city = null;
+				this.sxGW = false;
+				this.getCurrentGW();
+			}
+			if (this.activePopBtn === 1) {
+				this.companySizeActiveBoxs = [];
+				this.companyTypeActiveBoxs = [];
+				this.province = null;
+				this.city = null;
+				this.sxCM = false;
+				this.getCurrentCM();
+			}
+		},
+		initAll() {
+			if (this.current === 0) {
+				this.priceType = 1; //薪资类型 1月薪2年薪
+				this.incomeStart = ''; //薪资起点
+				this.incomeEnd = ''; //薪资结点
+				this.workActiveBoxs = [];
+				this.eduActiveBoxs = [];
+				this.workYearsActiveBoxs = [];
+				this.sxGW = false;
+				this.getCurrentGW();
+			}
+			if (this.current === 1) {
+				this.companySizeActiveBoxs = [];
+				this.companyTypeActiveBoxs = [];
+				this.sxCM = false;
+				this.getCurrentCM();
+			}
 		},
+		showStatus() {
+			this.show = true;
+		},
+		activeWorkType(item) {
+			if (this.workActiveBoxs.indexOf(item) !== -1) {
+				this.workActiveBoxs.splice(this.workActiveBoxs.indexOf(item), 1);
+			} else {
+				this.workActiveBoxs.push(item);
+			}
+		},
+		activeEduType(item) {
+			if (this.eduActiveBoxs.indexOf(item.value) !== -1) {
+				this.eduActiveBoxs.splice(this.eduActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.eduActiveBoxs.push(item.value);
+			}
+		},
+		activeWorkYearsType(item) {
+			if (this.workYearsActiveBoxs.indexOf(item.value) !== -1) {
+				this.workYearsActiveBoxs.splice(this.workYearsActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.workYearsActiveBoxs.push(item.value);
+			}
+		},
+		activeCompanySize(item) {
+			if (this.companySizeActiveBoxs.indexOf(item.value) !== -1) {
+				this.companySizeActiveBoxs.splice(this.companySizeActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.companySizeActiveBoxs.push(item.value);
+			}
+		},
+		activeCompanyType(item) {
+			if (this.companyTypeActiveBoxs.indexOf(item.value) !== -1) {
+				this.companyTypeActiveBoxs.splice(this.companyTypeActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.companyTypeActiveBoxs.push(item.value);
+			}
+		},
+		activeCitys(options) {
+			this.province = options.province.label;
+			this.city = options.city.label;
+			if (this.current === 0) {
+				this.getCurrentGW();
+			}
+			if (this.current === 1) {
+				this.getCurrentCM();
+			}
+		}
 	}
 };
 </script>
 
 <style scoped>
+.slh {
+	line-height: 54rpx;
+	height: 54rpx;
+	text-align: center;
+	display: -webkit-box;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	white-space: normal !important;
+	-webkit-line-clamp: 1;
+	-webkit-box-orient: vertical;
+}
 .search {
 	width: 40rpx;
 	height: 40rpx;
@@ -95,11 +656,239 @@ export default {
 	height: 40rpx;
 }
 .popup_t1 {
-	height: 29rpx;
+	display: flex;
+	align-items: center;
+	padding-left: 35rpx;
+	border-bottom: 1rpx solid #eee;
+	height: 57rpx;
+	margin-top: 86rpx;
+}
+.mors {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #999;
+}
+.activesSty {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+}
+.boxsize {
+	border-radius: 32rpx;
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+	margin: 0rpx 35rpx 24rpx;
+	padding: 22rpx 20rpx;
+}
+.lines {
+	height: 196rpx;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+}
+.dis_flexs {
+	display: flex;
+	margin-bottom: 24rpx;
+}
+.dis_flexs > .imgboxs {
+	width: 100rpx;
+	height: 100rpx;
+	border-radius: 24rpx;
+	overflow: hidden;
+	margin-right: 24rpx;
+}
+.top_sty {
+	display: flex;
+	justify-content: space-between;
+}
+.dis_foter {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.dis_f {
+	display: flex;
+	align-items: center;
+	overflow-x: auto;
+	flex: 1;
+	margin-right: 20rpx;
+}
+.right_address {
+	font-weight: 500;
+	font-size: 24rpx;
+	color: #636a75;
+}
+.fot_size {
+	height: 32rpx;
+	line-height: 32rpx;
+	padding: 0rpx 12rpx;
+	margin-right: 8rpx;
+	border-radius: 16rpx;
+	font-size: 20rpx;
+	background: #f2f6ff;
+	flex-shrink: 0;
+	color: #636a75;
+}
+.yys {
+	height: 32rpx;
+	font-size: 20rpx;
+	line-height: 32rpx;
+	padding: 0rpx 12rpx;
+	margin-right: 8rpx;
+	border-radius: 16rpx;
+	color: #fff;
+	background: #3fefb7;
+	flex-shrink: 0;
+}
+.heasd {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+	margin-bottom: 14rpx;
+}
+.fotHs {
+	font-size: 20rpx;
+	font-weight: 500;
+	color: #636a75;
+}
+.priceSty {
+	font-weight: bold;
+	font-size: 28rpx;
+	color: #32467b;
+}
+.headTits {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+	margin-bottom: 26rpx;
+}
+.lisz {
+	display: flex;
+	align-items: center;
+}
+.lisz > .bqB {
+	border-radius: 16rpx;
+	background-color: #f2f6ff;
+	padding: 0rpx 22rpx;
+	text-align: center;
+	height: 32rpx;
+	line-height: 32rpx;
+	margin-right: 8rpx;
+	font-size: 20rpx;
+	color: #636a75;
+}
+.tnsz {
+	display: flex;
+	align-items: center;
+}
+.litns {
+	padding: 0rpx 15rpx;
+	margin-right: 24rpx;
+	border-radius: 16rpx;
+	height: 48rpx;
+	line-height: 48rpx;
+	background-color: #32467b;
+	color: #fff;
+	box-shadow: 0rpx 0rpx 5rpx 0rpx rgba(47, 67, 121, 0.05);
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.moreLs {
+	border-radius: 16rpx;
+	font-size: 26rpx;
+	font-weight: bold;
+	color: #32467b;
+	border: 1rpx solid #32467b;
+	padding: 0rpx 11rpx;
+	height: 48rpx;
+	letter-spacing: 1rpx;
+	line-height: 40rpx;
+}
+.flex-d {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	height: 100%;
+}
+.contentZ {
+	flex: 1;
+	overflow-y: auto;
+	padding-left: 35rpx;
+}
+.contentZ::-webkit-scrollbar {
+	display: none;
+}
+.fots {
+	height: 100rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+	border-top: 1rpx solid #eee;
+}
+.leftBtns {
 	font-size: 30rpx;
-	font-family: PingFang SC;
+	color: #32467b;
+	font-weight: 500;
+}
+.right_Btns {
+	font-size: 30rpx;
+	color: #fff;
+	background-color: #32467b;
+	border-radius: 24rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	padding: 0rpx 23rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+.heards {
+	margin: 25rpx 0rpx;
+	font-size: 24rpx;
+	color: #32467b;
 	font-weight: bold;
-	color: #131b31;
-	margin: 100rpx;
+}
+.liszing {
+	float: left;
+	width: 161rpx;
+	height: 57rpx;
+	text-align: center;
+	line-height: 57rpx;
+	border: 1rpx solid transparent;
+	border-radius: 16rpx;
+	color: #999;
+	background-color: #f5f7f9;
+	margin-right: 13rpx;
+	margin-bottom: 13rpx;
+}
+.activesLiszing {
+	color: #2a4174;
+	border-color: #2a4174;
+}
+.priceType {
+	display: flex;
+	align-items: center;
+	margin-bottom: 22rpx;
+}
+.lstq {
+	font-size: 30rpx;
+	color: #999;
+	font-weight: 400;
+	margin-right: 27rpx;
+}
+.activeLstq {
+	color: #2a4174;
+	font-weight: 500;
+}
+.priceInput {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding-right: 56rpx;
+}
+.inputSty {
+	border: none;
+	border-bottom: 1rpx solid #eee;
+	/* width: 220rpx; */
+	text-align: center;
 }
 </style>

+ 151 - 0
components/tki-tree/style.css

@@ -0,0 +1,151 @@
+.tki-tree-mask {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  z-index: 9998;
+  background-color: rgba(0, 0, 0, 0.6);
+  opacity: 0;
+  transition: all 0.3s ease;
+  visibility: hidden;
+}
+.tki-tree-mask.show {
+  visibility: visible;
+  opacity: 1;
+}
+.tki-tree-cnt {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  z-index: 9999;
+  top: 160rpx;
+  transition: all 0.3s ease;
+  transform: translateY(100%);
+}
+.tki-tree-cnt.show {
+  transform: translateY(0);
+}
+.tki-tree-bar {
+  background-color: #fff;
+  height: 72rpx;
+  padding-left: 20rpx;
+  padding-right: 20rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  box-sizing: border-box;
+  border-bottom-width: 1rpx !important;
+  border-bottom-style: solid;
+  border-bottom-color: #f5f5f5;
+  font-size: 32rpx;
+  color: #757575;
+  line-height: 1;
+}
+.tki-tree-bar-confirm {
+  color: #07bb07;
+}
+.tki-tree-view {
+  position: absolute;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  top: 72rpx;
+  background-color: #fff;
+  padding-top: 20rpx;
+  padding-right: 20rpx;
+  padding-bottom: 20rpx;
+  padding-left: 20rpx;
+}
+.tki-tree-view-sc {
+  height: 100%;
+  overflow: hidden;
+}
+.tki-tree-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 26rpx;
+  color: #757575;
+  line-height: 1;
+  height: 0;
+  opacity: 0;
+  transition: 0.2s;
+  position: relative;
+  overflow: hidden;
+}
+.tki-tree-item.show {
+  height: 80rpx;
+  opacity: 1;
+}
+.tki-tree-item.showchild:before {
+  transform: rotate(90deg);
+}
+.tki-tree-item.last:before {
+  opacity: 0;
+}
+.tki-tree-icon {
+  width: 26rpx;
+  height: 26rpx;
+  margin-right: 8rpx;
+}
+.tki-tree-label {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  height: 100%;
+  line-height: 1.2;
+}
+.tki-tree-check {
+  width: 40px;
+  height: 40px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.tki-tree-check-yes,
+.tki-tree-check-no {
+  width: 20px;
+  height: 20px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  border-top-width: 1rpx;
+  border-left-width: 1rpx;
+  border-bottom-width: 1rpx;
+  border-right-width: 1rpx;
+  border-style: solid;
+  border-color: #07bb07;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  box-sizing: border-box;
+}
+.tki-tree-check-yes-b {
+  width: 12px;
+  height: 12px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  background-color: #07bb07;
+}
+.tki-tree-check .radio {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+.tki-tree-check .radio .tki-tree-check-yes-b {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+.hover-c {
+  opacity: 0.6;
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 90 - 0
components/tki-tree/tki-tree.vue


+ 72 - 3
pages.json

@@ -41,7 +41,7 @@
 			}
 
 		}
-    ],
+	],
 	"subPackages": [{
 		"root": "pages2",
 		"pages": [{
@@ -170,6 +170,17 @@
 						"bounce": "none"
 					}
 				}
+			}, {
+				"path": "wd/helpDetail",
+				"style": {
+					"navigationBarTitleText": "",
+					"navigationBarTextStyle": "white",
+					"navigationStyle": "custom", // 隐藏系统导航栏
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
 			}, {
 				"path": "wd/coupon",
 				"style": {
@@ -280,6 +291,64 @@
 						"bounce": "none"
 					}
 				}
+			}, {
+				"path": "recruitment/detailsInfo",
+				"style": {
+					"navigationBarTitleText": "岗位详情",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+
+			}, {
+				"path": "resume/myResume",
+				"style": {
+					"navigationBarTitleText": "我的简历",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+
+			}, {
+				"path": "resume/delivery",
+				"style": {
+					"navigationBarTitleText": "我的投递",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+
+			}, {
+				"path": "resume/addResume",
+				"style": {
+					"navigationBarTitleText": "新建简历",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+
+			}, {
+				"path": "index/searchRecruit",
+				"style": {
+					"navigationBarTitleText": "搜索",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
+			}, {
+				"path": "index/webview",
+				"style": {
+					"navigationBarTitleText": "中正",
+					"app-plus": {
+						"titleNView": false, //禁用原生导航栏 
+						"bounce": "none"
+					}
+				}
 			}
 		],
 		"plugins": {
@@ -317,8 +386,8 @@
 			},
 			{
 				"pagePath": "pages/recruitment/index",
-				"iconPath": "static/nav1.png",
-				"selectedIconPath": "static/nav1_on.png",
+				"iconPath": "static/job@3x.png",
+				"selectedIconPath": "static/job@3xactive.png",
 				"text": "求职"
 			},
 			{

+ 37 - 21
pages/index/index.vue

@@ -1,12 +1,10 @@
 <template>
 	<view>
 		<home v-show="current == 0" ref="home"></home>
-		<view v-if="isClick1">
-			<recruitment v-show="current == 1" ref="recruitment"></recruitment>
-		</view>
+		<view v-if="isClick1"><recruitment v-show="current == 1" ref="recruitment"></recruitment></view>
 		<my v-show="current == 2" ref="refMy"></my>
 
-		<u-tabbar v-model="current" :list="list" active-color="#2F4379" :before-switch="beforeSwitch" ></u-tabbar>
+		<u-tabbar v-model="current" :safe-area-inset-bottom="true" :list="list" active-color="#2F4379" :before-switch="beforeSwitch"></u-tabbar>
 	</view>
 </template>
 
@@ -14,7 +12,7 @@
 import home from '@/components/home.vue';
 import my from '@/components/my.vue';
 import recruitment from '@/components/recruitment.vue';
-	import {mapGetters} from 'vuex';
+import { mapGetters } from 'vuex';
 export default {
 	components: {
 		home,
@@ -31,8 +29,8 @@ export default {
 					customIcon: false
 				},
 				{
-					iconPath: '/static/nav4.png',
-					selectedIconPath: '/static/nav4_on.png',
+					iconPath: '/static/job@3x.png',
+					selectedIconPath: '/static/job@3xactive.png',
 					text: '求职',
 					customIcon: false
 				},
@@ -44,39 +42,57 @@ export default {
 				}
 			],
 			current: 0,
-			isClick1:false
+			isClick1: false
 		};
 	},
 	onLoad(option) {
 		this.$refs.home.init();
-		
-	},
-	onShow() {
-		
+		this.getDict()
+		// this.$refs.recruitment.inits();
 	},
+	onShow() {},
 	onShareAppMessage(res) {
 		var self = this;
 		return {
 			title: '中正',
-			path: `/pages/index/index?inviteCode=`+userInfo==null?'':userInfo.userAccount,
+			path: `/pages/index/index?inviteCode=` + userInfo == null ? '' : userInfo.userAccount
 		};
 	},
 	methods: {
-		updateHomePlan(){
+		getDict(){
+			let that = this
+			this.$api.dictList().then(res => {
+				if (res.data.code === 200) {
+					let newList = {}
+					let list = res.data.data
+					for(let i =0 ;i<list.length;i++){
+						let item = list[i]
+						if(newList.hasOwnProperty(item.dictType)){
+							newList[item.dictType].push(item.dictLabel)
+						}else{
+							newList[item.dictType] = [item.dictLabel]
+						}
+					}
+					that.$store.state.dictObj = newList;
+					console.log(newList)
+				}
+			});
+		},
+		updateHomePlan() {
 			this.$refs.home.init();
 		},
 		beforeSwitch(index) {
 			let that = this;
-			if(index==1){
-				this.isClick1= true
+			if (index == 1) {
+				this.isClick1 = true;
 			}
-			if (index == this.current) {	
+			if (index == this.current) {
 				return false;
 			}
 			if (!this.$method.isLogin()) {
-				if(index == 0 || index == 1){
-					return true
-				}else{
+				if (index == 0 || index == 1) {
+					return true;
+				} else {
 					this.$navTo.togo('/pages/login/login');
 					return false;
 				}
@@ -90,7 +106,7 @@ export default {
 	},
 	onReachBottom() {},
 	onPullDownRefresh() {},
-	computed: {...mapGetters(['userInfo'])}
+	computed: { ...mapGetters(['userInfo']) }
 };
 </script>
 

+ 901 - 0
pages2/index/searchRecruit.vue

@@ -0,0 +1,901 @@
+<template>
+	<view>
+		<view class="headerSearchBox">
+			<view class="leftSearchBox">
+				<u-icon name="search" color="#999" size="36"></u-icon>
+				<view class="textICS" @click="showActiveTypes">
+					<view class="texs">{{ searchType === 0 ? '岗位' : searchType === 1 ? '公司' : '未知' }}</view>
+					<u-icon class="icnst" :class="showType ? 'openTypes' : ''" name="arrow-down-fill" color="#999" size="18"></u-icon>
+				</view>
+				<input class="linpt" type="text" value="" placeholder="请输入" v-model="job" focus @confirm="submitForms"/>
+			</view>
+			<view class="exit" @click="backHome">取消</view>
+		</view>
+		<u-dropdown ref="uDropdown" border-bottom>
+			<u-dropdown-item :title="city === null ? '全国' : city">
+				<view class="slot-content">
+					<view class="tyStyleZ">
+						<u-cell-item
+							:border-bottom="false"
+							title="工作地点"
+							:arrow="true"
+							arrow-direction="down"
+							@click="showCityPicker = true"
+							:value="city === null ? '请选择省市' : city"
+						></u-cell-item>
+						<view class="dis_fs">
+							<view class="left_in" @click="initResult">重置</view>
+							<view class="sultRight" @click="submitForms">确定</view>
+						</view>
+					</view>
+				</view>
+			</u-dropdown-item>
+			<u-dropdown-item title="薪资范围">
+				<view class="slot-content">
+					<view class="tyStyleZ">
+						<view class="priceType">
+							<view class="lstq" :class="priceType === 1 ? 'activeLstq' : ''" @click="priceType = 1">月薪</view>
+							<view class="lstq" :class="priceType === 2 ? 'activeLstq' : ''" @click="priceType = 2">年薪</view>
+						</view>
+						<view class="priceInput">
+							<input class="inputSty" type="number" value="" placeholder="最低(元)" v-model="incomeStart" />
+							至
+							<input class="inputSty" type="number" value="" placeholder="最高(元)" v-model="incomeEnd" />
+						</view>
+						<view class="heards">月薪薪资范围(至多选三项)</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in priceActList"
+								:key="index"
+								@click="activeProceAc(item)"
+								:class="priceActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item.label }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="dis_fs">
+							<view class="left_in" @click="initResult">重置</view>
+							<view class="sultRight" @click="submitForms">确定</view>
+						</view>
+					</view>
+				</view>
+			</u-dropdown-item>
+			<u-dropdown-item title="工作类型">
+				<view class="slot-content">
+					<view class="tyStyleZ">
+						<view class="heards">工作类型</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in workTypeList"
+								:key="index"
+								@click="activeWorkType(item)"
+								:class="workActiveBoxs.indexOf(item) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="dis_fs">
+							<view class="left_in" @click="initResult">重置</view>
+							<view class="sultRight" @click="submitForms">确定</view>
+						</view>
+					</view>
+				</view>
+			</u-dropdown-item>
+			<u-dropdown-item title="更多筛选">
+				<view class="slot-content">
+					<view class="tyStyleZ">
+						<view class="heards">学历要求(可多选)</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in eduList"
+								:key="index"
+								@click="activeEduType(item)"
+								:class="eduActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item.label }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="heards">工作年限(可多选)</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in workYearsList"
+								:key="index"
+								@click="activeWorkYearsType(item)"
+								:class="workYearsActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item.label }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="heards">企业规模(可多选)</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in companySizeList"
+								:key="index"
+								@click="activeCompanySize(item)"
+								:class="companySizeActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item.label }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="heards">公司类型(可多选)</view>
+						<view class="boxPlus">
+							<view
+								class="liszing"
+								v-for="(item, index) in companyTypeList"
+								:key="index"
+								@click="activeCompanyType(item)"
+								:class="companyTypeActiveBoxs.indexOf(item.value) !== -1 ? 'activesLiszing' : ''"
+							>
+								{{ item.label }}
+							</view>
+							<view style="clear: both;"></view>
+						</view>
+						<view class="dis_fs">
+							<view class="left_in" @click="initResult">重置</view>
+							<view class="sultRight" @click="submitForms">确定</view>
+						</view>
+					</view>
+				</view>
+			</u-dropdown-item>
+		</u-dropdown>
+		<u-divider v-if="posts.length === 0 && enterprise.length === 0 && searStatus">暂无符合条件的公司</u-divider>
+		<scroll-view scroll-y="true" style="padding-top: 20rpx;" :style="'height: ' + windowHeight + 'px;'">
+			<view v-if="current === 0">
+				<view class="boxsize lines" v-for="(item, index) in posts" :key="index" @click="jumpDetails(item)">
+					<view class="top_sty">
+						<view>
+							<view class="heasd">
+								{{ item.job }}
+								<image style="width:27rpx;height:27rpx;" src="@/static/ji@3x.png" mode=""></image>
+							</view>
+							<view class="fotHs">{{ item.companyName }}</view>
+						</view>
+						<view class="priceSty">
+							{{ item.incomeStart === item.incomeEnd ? item.incomeStart : item.incomeStart + '~' + item.incomeEnd }}/{{ item.incomeType === 1 ? '月' : '年' }}
+						</view>
+					</view>
+					<view class="dis_foter">
+						<view class="dis_f">
+							<view class="fot_size">{{ item.workingYearsLabel }}</view>
+							<view class="fot_size">{{ item.minimumEduLabel }}</view>
+							<view class="yys" v-for="(items, indexs) in item.bonusCertificate" :key="indexs">{{ items }}</view>
+						</view>
+						<view class="right_address">{{ item.city }}•{{ item.district }}</view>
+					</view>
+				</view>
+			</view>
+			<view v-if="current === 1">
+				<view class="boxsize" v-for="(item, index) in enterprise" :key="index">
+					<view class="dis_flexs" @click="jumpCompany(item)">
+						<view class="imgboxs"><image style="width: 100%; height: 100%;" src="/static/avatar1.png" mode=""></image></view>
+						<view style="flex: 1;">
+							<view class="headTits">{{ item.companyName }}</view>
+							<view class="lisz">
+								<view class="bqB">{{ item.city }}</view>
+								<view class="bqB">{{ item.companyType }}</view>
+								<view class="bqB">{{ item.companySize }}</view>
+							</view>
+						</view>
+					</view>
+					<view class="tnsz">
+						<view class="litns" v-for="(items, indexs) in item.newNumObj" :key="indexs" @click="jumpDetails(items)">{{ items.job }}</view>
+						<view class="moreLs" v-if="item.recruitNeedsVoList.length > 3" @click="jumpDetails(item.recruitNeedsVoList[0])">•••</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<u-action-sheet safe-area-inset-bottom :cancel-btn="false" :list="searchLists" @click="clickAs" v-model="showType"></u-action-sheet>
+		<u-picker mode="region" v-model="showCityPicker" :params="{ province: true, city: true }" @confirm="activeCitys"></u-picker>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			searStatus: false,
+			showCityPicker: false,
+			job: '',
+			windowHeight: 0,
+			searchType: 0,
+			showType: false,
+			searchLists: [
+				{
+					text: '岗位'
+				},
+				{
+					text: '公司'
+				}
+			],
+			posts: [], //岗位列表
+			enterprise: [], //企业列表
+			current: 0,
+			workTypeList: ['全职', '兼职', '实习生'], //工作类型
+			workActiveBoxs: [], //选中工作类型
+			priceType: 1, //薪资类型 1月薪2年薪
+			incomeStart: '', //薪资起点
+			incomeEnd: '', //薪资结点
+			priceActList: [], //薪资范围列表
+			priceActiveBoxs: [], //薪资选中列表
+			eduList: [], //学历
+			eduActiveBoxs: [], //选中学历
+			workYearsList: [], //工作年限类型
+			workYearsActiveBoxs: [], //选中工作年限类型
+
+			companySizeList: [], //公司规模
+			companySizeActiveBoxs: [], //选中公司规模
+			companyTypeList: [], //公司类型
+			companyTypeActiveBoxs: [], //选中公司类型
+			province: null,
+			city: null
+		};
+	},
+	created() {
+		this.windowHeight = uni.getSystemInfoSync().windowHeight - 120;
+		this.getDict();
+		this.initPriceList();
+	},
+	methods: {
+		jumpCompany(v){
+			var data = {
+				companyId: v.companyId
+			}
+			if(v.recruitNeedsVoList.length > 0){
+				data.id = v.recruitNeedsVoList[0].id
+			}
+			this.$navTo.togo('/pages2/recruitment/detailsInfo', data);
+		},
+		jumpDetails(v) {
+			this.$navTo.togo('/pages2/recruitment/detailsInfo', {
+				id: v.id,
+				companyId: v.companyId
+			});
+		},
+		initResult() {
+			this.workActiveBoxs = []; //选中工作类型
+			this.priceType = 1; //薪资类型 1月薪2年薪
+			this.incomeStart = ''; //薪资起点
+			this.incomeEnd = ''; //薪资结点
+			this.priceActiveBoxs = []; //薪资选中列表
+			this.eduActiveBoxs = []; //选中学历
+			this.workYearsActiveBoxs = []; //选中工作年限类型
+			this.companySizeActiveBoxs = []; //选中公司规模
+			this.companyTypeActiveBoxs = []; //选中公司类型
+			this.province = null;
+			this.city = null;
+		},
+		submitForms() {
+			var self = this
+			var data = {};
+			if(this.companySizeActiveBoxs.length){
+				data.sizeIds = this.companySizeActiveBoxs.toString()
+			}
+			if(this.companyTypeActiveBoxs.length){
+				data.typeIds = this.companyTypeActiveBoxs.toString()
+			}
+			if(this.searchType === 0){
+			if (this.province !== null && this.city !== null) {
+				data.province = this.province;
+				data.city = this.city;
+			}
+			if (this.priceActiveBoxs.length > 0) {
+				data.incomeType = 1;
+				data.incomeList = JSON.stringify(this.priceActiveBoxs);
+			} else {
+				if (this.incomeStart !== '' || this.incomeEnd !== '') {
+					if (this.incomeStart !== '' && this.incomeEnd !== '') {
+						var testPrice = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/;
+						if (!testPrice.test(Number(this.incomeStart))) {
+							uni.showToast({
+								title: '请规范填写最低薪资',
+								icon: 'none'
+							});
+							return;
+						}
+						if (!testPrice.test(Number(this.incomeEnd))) {
+							uni.showToast({
+								title: '请规范填写最高薪资',
+								icon: 'none'
+							});
+							return;
+						}
+						if (Number(this.incomeStart) > Number(this.incomeEnd)) {
+							uni.showToast({
+								title: '请规范填写薪资范围',
+								icon: 'none'
+							});
+							return;
+						}
+						data.incomeType = this.priceType;
+						data.incomeList = JSON.stringify([{ incomeStart: Number(this.incomeStart), incomeEnd: Number(this.incomeEnd) }]);
+					} else {
+						uni.showToast({
+							title: '请填写薪资范围',
+							icon: 'none'
+						});
+						return;
+					}
+				}
+			}
+				if(this.workActiveBoxs.length){
+					data.jobNatures = this.workActiveBoxs.toString()
+				}
+				if(this.eduActiveBoxs.length){
+					data.minimumEduDictList = this.eduActiveBoxs.toString()
+				}
+				if(this.workYearsActiveBoxs.length){
+					data.workingYearsDictList = this.workYearsActiveBoxs.toString()
+				}
+				if(this.job){
+					data.job = this.job
+				}
+				this.$api.recruitneedslist(data).then(res => {
+					if (res.data.code === 200) {
+						res.data.rows.forEach((item, index) => {
+							if (item.jobNature) {
+								item.jobNature = item.jobNature.split(',');
+							}
+							if (item.welfare) {
+								item.welfare = item.welfare.split(',');
+							}
+							if (item.bonusCertificate) {
+								item.bonusCertificate = item.bonusCertificate.split(',');
+							}
+						});
+						self.posts = res.data.rows
+						self.enterprise = []
+						self.current = 0
+						self.$refs.uDropdown.close();
+					}
+				})
+			}
+			if(this.searchType === 1){
+				if(this.job){
+					data.companyName = this.job
+				}
+				this.$api.recruitcompanyConlist(data).then(res => {
+					if (res.data.code === 200) {
+						for (let k = 0; k < res.data.rows.length; k++) {
+							if (res.data.rows[k].recruitNeedsVoList) {
+								var anum = [];
+								for (let i = 0; i < res.data.rows[k].recruitNeedsVoList.length; i++) {
+									if (i >= 3) {
+										break;
+									} else {
+										anum.push(res.data.rows[k].recruitNeedsVoList[i]);
+									}
+								}
+								res.data.rows[k].newNumObj = anum;
+							}
+						}
+						self.enterprise = res.data.rows;
+						self.posts = []
+						self.current = 1
+						self.$refs.uDropdown.close();
+					}
+				})
+			}
+			this.searStatus = true
+			console.log(data)
+		},
+		closeDropdown() {
+			this.$refs.uDropdown.close();
+		},
+		showActiveTypes() {
+			this.showType = true;
+		},
+		clickAs(index) {
+			this.searchType = index;
+			this.showType = false;
+		},
+		activeWorkType(item) {
+			if (this.workActiveBoxs.indexOf(item) !== -1) {
+				this.workActiveBoxs.splice(this.workActiveBoxs.indexOf(item), 1);
+			} else {
+				this.workActiveBoxs.push(item);
+			}
+		},
+		activeProceAc(item) {
+			if (this.priceActiveBoxs.indexOf(item.value) !== -1) {
+				this.priceActiveBoxs.splice(this.priceActiveBoxs.indexOf(item.value), 1);
+			} else {
+				if (this.priceActiveBoxs.length >= 3) {
+					uni.showToast({
+						title: '最多选中三个',
+						icon: 'none'
+					});
+					return;
+				}
+				this.priceActiveBoxs.push(item.value);
+			}
+			console.log(this.priceActiveBoxs);
+		},
+		activeEduType(item) {
+			if (this.eduActiveBoxs.indexOf(item.value) !== -1) {
+				this.eduActiveBoxs.splice(this.eduActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.eduActiveBoxs.push(item.value);
+			}
+		},
+		activeWorkYearsType(item) {
+			if (this.workYearsActiveBoxs.indexOf(item.value) !== -1) {
+				this.workYearsActiveBoxs.splice(this.workYearsActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.workYearsActiveBoxs.push(item.value);
+			}
+		},
+		activeCompanySize(item) {
+			if (this.companySizeActiveBoxs.indexOf(item.value) !== -1) {
+				this.companySizeActiveBoxs.splice(this.companySizeActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.companySizeActiveBoxs.push(item.value);
+			}
+		},
+		activeCompanyType(item) {
+			if (this.companyTypeActiveBoxs.indexOf(item.value) !== -1) {
+				this.companyTypeActiveBoxs.splice(this.companyTypeActiveBoxs.indexOf(item.value), 1);
+			} else {
+				this.companyTypeActiveBoxs.push(item.value);
+			}
+		},
+		getDict() {
+			var self = this;
+			this.$api.dictList().then(res => {
+				res.data.data.forEach((item, index) => {
+					if (item.dictType == 'edu_level') {
+						self.eduList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+					if (item.dictType == 'working_years') {
+						if (item.dictCode !== 109) {
+							self.workYearsList.push({ label: item.dictLabel, value: item.dictCode });
+						}
+					}
+					if (item.dictType == 'company_size') {
+						self.companySizeList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+					if (item.dictType == 'company_type') {
+						self.companyTypeList.push({ label: item.dictLabel, value: item.dictCode });
+					}
+				});
+			});
+		},
+		initPriceList() {
+			this.priceActList = [
+				{
+					label: '2千以下',
+					value: {
+						incomeStart: 0,
+						incomeEnd: 2000
+					}
+				},
+				{
+					label: '2-3千',
+					value: {
+						incomeStart: 2000,
+						incomeEnd: 3000
+					}
+				},
+				{
+					label: '3-5千',
+					value: {
+						incomeStart: 3000,
+						incomeEnd: 5000
+					}
+				},
+				{
+					label: '5-6千',
+					value: {
+						incomeStart: 5000,
+						incomeEnd: 6000
+					}
+				},
+				{
+					label: '6-7千',
+					value: {
+						incomeStart: 6000,
+						incomeEnd: 7000
+					}
+				},
+				{
+					label: '7-8千',
+					value: {
+						incomeStart: 7000,
+						incomeEnd: 8000
+					}
+				},
+				{
+					label: '8-9千',
+					value: {
+						incomeStart: 8000,
+						incomeEnd: 9000
+					}
+				},
+				{
+					label: '0.9-1万',
+					value: {
+						incomeStart: 9000,
+						incomeEnd: 10000
+					}
+				},
+				{
+					label: '1-1.5万',
+					value: {
+						incomeStart: 10000,
+						incomeEnd: 15000
+					}
+				},
+				{
+					label: '1.5-2万',
+					value: {
+						incomeStart: 15000,
+						incomeEnd: 20000
+					}
+				},
+				{
+					label: '2-3万',
+					value: {
+						incomeStart: 20000,
+						incomeEnd: 30000
+					}
+				},
+				{
+					label: '3-5万',
+					value: {
+						incomeStart: 30000,
+						incomeEnd: 50000
+					}
+				}
+			];
+		},
+		// 取消
+		backHome() {
+			uni.navigateBack({
+				delta: 1
+			});
+		},
+		activeCitys(options) {
+			console.log(options);
+			this.province = options.province.label;
+			this.city = options.city.label;
+		}
+	}
+};
+</script>
+
+<style scoped>
+.arr-icon {
+	width: 40rpx;
+	height: 40rpx;
+}
+.popup_t1 {
+	display: flex;
+	align-items: center;
+	padding-left: 35rpx;
+	border-bottom: 1rpx solid #eee;
+	height: 57rpx;
+	margin-top: 86rpx;
+}
+.mors {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #999;
+}
+.activesSty {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+}
+.boxsize {
+	border-radius: 32rpx;
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+	margin: 0rpx 35rpx 24rpx;
+	padding: 22rpx 20rpx;
+}
+.lines {
+	height: 196rpx;
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+}
+.dis_flexs {
+	display: flex;
+	margin-bottom: 24rpx;
+}
+.dis_flexs > .imgboxs {
+	width: 100rpx;
+	height: 100rpx;
+	border-radius: 24rpx;
+	overflow: hidden;
+	margin-right: 24rpx;
+}
+.top_sty {
+	display: flex;
+	justify-content: space-between;
+}
+.dis_foter {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.dis_f {
+	display: flex;
+	align-items: center;
+	overflow-x: auto;
+	flex: 1;
+	margin-right: 20rpx;
+}
+.right_address {
+	font-weight: 500;
+	font-size: 24rpx;
+	color: #636a75;
+}
+.fot_size {
+	height: 32rpx;
+	line-height: 32rpx;
+	padding: 0rpx 12rpx;
+	margin-right: 8rpx;
+	border-radius: 16rpx;
+	font-size: 20rpx;
+	background: #f2f6ff;
+	flex-shrink: 0;
+	color: #636a75;
+}
+.yys {
+	height: 32rpx;
+	font-size: 20rpx;
+	line-height: 32rpx;
+	padding: 0rpx 12rpx;
+	margin-right: 8rpx;
+	border-radius: 16rpx;
+	color: #fff;
+	background: #3fefb7;
+	flex-shrink: 0;
+}
+.heasd {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+	margin-bottom: 14rpx;
+}
+.fotHs {
+	font-size: 20rpx;
+	font-weight: 500;
+	color: #636a75;
+}
+.priceSty {
+	font-weight: bold;
+	font-size: 28rpx;
+	color: #32467b;
+}
+.headTits {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+	margin-bottom: 26rpx;
+}
+.lisz {
+	display: flex;
+	align-items: center;
+}
+.lisz > .bqB {
+	border-radius: 16rpx;
+	background-color: #f2f6ff;
+	padding: 0rpx 22rpx;
+	text-align: center;
+	height: 32rpx;
+	line-height: 32rpx;
+	margin-right: 8rpx;
+	font-size: 20rpx;
+	color: #636a75;
+}
+.tnsz {
+	display: flex;
+	align-items: center;
+}
+.litns {
+	padding: 0rpx 15rpx;
+	margin-right: 24rpx;
+	border-radius: 16rpx;
+	height: 48rpx;
+	line-height: 48rpx;
+	background-color: #32467b;
+	color: #fff;
+	box-shadow: 0rpx 0rpx 5rpx 0rpx rgba(47, 67, 121, 0.05);
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.headerSearchBox {
+	padding: 30rpx;
+	padding-bottom: 0rpx;
+	display: flex;
+	align-items: center;
+	height: 72rpx;
+}
+.leftSearchBox {
+	background-color: #f5f7f9;
+	border-radius: 36rpx;
+	display: flex;
+	align-items: center;
+	flex: 1;
+	height: 72rpx;
+	padding: 0rpx 20rpx;
+}
+.textICS {
+	display: flex;
+	align-items: center;
+	margin-left: 17rpx;
+	margin-right: 10rpx;
+}
+.texs {
+	font-size: 24rpx;
+	color: #636a75;
+	font-weight: 500;
+}
+.icnst {
+	margin-left: 7rpx;
+	margin-top: 4rpx;
+	transition: all 0.2s;
+}
+.linpt {
+	margin-top: 2rpx;
+	font-size: 26rpx;
+	color: #333;
+	border: none;
+	flex: 1;
+}
+.exit {
+	color: #333;
+	font-weight: 500;
+	font-size: 24rpx;
+	margin: 0rpx 11rpx;
+}
+.openTypes {
+	transform: rotate(-180deg);
+}
+
+.moreLs {
+	border-radius: 16rpx;
+	font-size: 26rpx;
+	font-weight: bold;
+	color: #32467b;
+	border: 1rpx solid #32467b;
+	padding: 0rpx 11rpx;
+	height: 48rpx;
+	letter-spacing: 1rpx;
+	line-height: 40rpx;
+}
+.flex-d {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+	height: 100%;
+}
+.contentZ {
+	flex: 1;
+	overflow-y: auto;
+	padding-left: 35rpx;
+}
+.contentZ::-webkit-scrollbar {
+	display: none;
+}
+.fots {
+	height: 100rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+	border-top: 1rpx solid #eee;
+}
+.leftBtns {
+	font-size: 30rpx;
+	color: #32467b;
+	font-weight: 500;
+}
+.right_Btns {
+	font-size: 30rpx;
+	color: #fff;
+	background-color: #32467b;
+	border-radius: 24rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	padding: 0rpx 23rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+.heards {
+	padding-top: 25rpx;
+	margin-bottom: 25rpx;
+	font-size: 24rpx;
+	color: #32467b;
+	font-weight: bold;
+}
+.liszing {
+	float: left;
+	width: 161rpx;
+	height: 57rpx;
+	text-align: center;
+	line-height: 57rpx;
+	border: 1rpx solid transparent;
+	border-radius: 16rpx;
+	color: #999;
+	background-color: #f5f7f9;
+	margin-right: 13rpx;
+	margin-bottom: 13rpx;
+}
+.activesLiszing {
+	color: #2a4174;
+	border-color: #2a4174;
+}
+.priceType {
+	display: flex;
+	align-items: center;
+	margin-bottom: 22rpx;
+	padding-top: 20rpx;
+}
+.lstq {
+	font-size: 30rpx;
+	color: #999;
+	font-weight: 400;
+	margin-right: 27rpx;
+}
+.activeLstq {
+	color: #2a4174;
+	font-weight: 500;
+}
+.priceInput {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding-right: 56rpx;
+}
+.inputSty {
+	border: none;
+	border-bottom: 1rpx solid #eee;
+	/* width: 220rpx; */
+	text-align: center;
+}
+.tyStyleZ {
+	padding: 0rpx 32rpx 27rpx;
+	background-color: #fff;
+}
+.dis_fs {
+	margin-top: 40rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.left_in {
+	height: 88rpx;
+	width: 160rpx;
+	text-align: center;
+	line-height: 88rpx;
+	border-radius: 32rpx;
+	background-color: rgba(145, 156, 178, 0.2);
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+	font-size: 30rpx;
+	color: #999;
+	font-weight: 500;
+}
+.sultRight {
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #fff;
+	border-radius: 32rpx;
+	background-color: #32467b;
+	width: 502rpx;
+	height: 88rpx;
+	text-align: center;
+	line-height: 88rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+</style>

+ 25 - 0
pages2/index/webview.vue

@@ -0,0 +1,25 @@
+<template>
+	<view>
+		<web-view :src="urls"></web-view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				urls: ''
+			}
+		},
+		onLoad(options) {
+			this.urls = decodeURIComponent(options.urls)
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 521 - 0
pages2/recruitment/detailsInfo.vue

@@ -0,0 +1,521 @@
+<template>
+	<view>
+		<view class="companyBox">
+			<view class="companyInfo">
+				<view class="imgBoxsList"><image style="width:100%;height: 100%;" src="../../static/rank_bg.png" mode=""></image></view>
+				<view class="rigBix">
+					<view class="headerTit">{{ companyArray.companyName }}</view>
+					<view class="tabbaerLists">
+						<view class="lits">{{ companyArray.companyType }}</view>
+						<view class="lits">{{ companyArray.companySize }}</view>
+						<view class="lits">{{ companyArray.industryTypeName }}</view>
+					</view>
+				</view>
+			</view>
+			<view class="bigboxFont" :class="showMsg ? 'showBoxs' : ''">{{ companyArray.companyIntroduce }}</view>
+			<view class="text-c" v-if="showMsgIcon">
+				<u-icon style="opacity: 0.4;" :name="showMsg ? 'arrow-up' : 'arrow-down'" color="#32467B" size="28" @click="showMsg = !showMsg"></u-icon>
+			</view>
+		</view>
+		<view class="listLs">
+			<view class="lisZY" v-for="(item, index) in companyArray.recruitNeedsVoList" :key="index" @click="jumpGY(item.id)" :class="id == item.id ? 'activesZY' : ''">
+				{{ item.job }}
+			</view>
+		</view>
+		<view class="GWwaload" v-if="JSON.stringify(GyArray) !== '{}'">
+			<view class="headerTis">
+				<view class="priceMS">
+					{{ GyArray.incomeStart === GyArray.incomeEnd ? GyArray.incomeStart : GyArray.incomeStart + ' - ' + GyArray.incomeEnd }}/{{
+						GyArray.incomeType === 1 ? '月' : '年'
+					}}
+				</view>
+				<view class="uploadTimes">{{ $method.timestampToTime(GyArray.pushTime, true) }}发布</view>
+			</view>
+			<view class="headerTis">
+				<view class="liti">{{ GyArray.jobNature }}</view>
+				<view class="liti">{{ GyArray.peopleNum === 0 ? '招多人' : '招' + GyArray.peopleNum + '人' }}</view>
+				<view class="liti">{{ GyArray.workingYearsDictLabel }}</view>
+				<view class="liti">{{ GyArray.minimumEduDictLabel }}</view>
+				<view class="liti">{{ GyArray.major }}</view>
+			</view>
+			<view class="headerJF" style="align-items: center;">
+				<view class="leftItit">加分证书</view>
+				<view class="lelis">
+					<view class="listsITms" v-for="(item, index) in GyArray.bonusCertificate" :key="index">{{ item }}</view>
+				</view>
+			</view>
+			<view class="headerJF">
+				<view class="imgSbox"><image style="width: 100%;height: 100%;" src="../../static/fuli@2x.png" mode=""></image></view>
+				<view class="lisBxz">
+					<view class="liue" v-for="(item, index) in GyArray.welfare" :key="index">{{ item }}</view>
+				</view>
+			</view>
+			<view class="headerJF" style="align-items: center;">
+				<view class="imgSbox"><image style="width: 100%;height: 100%;" src="../../static/adress@2x.png" mode=""></image></view>
+				<view class="szqq">{{ GyArray.province + GyArray.city + GyArray.district + GyArray.address }}</view>
+			</view>
+		</view>
+		<view class="fotBoxs" v-if="JSON.stringify(GyArray) !== '{}'">
+			<view class="lifot">
+				<view class="headFot">
+					工作职责:
+					<view class="pobtom"></view>
+				</view>
+				<rich-text class="rich-texts" :nodes="GyArray.requirement"></rich-text>
+			</view>
+			<view class="lifot">
+				<view class="headFot">
+					任职要求:
+					<view class="pobtom"></view>
+				</view>
+				<rich-text class="rich-texts" :nodes="GyArray.requirement"></rich-text>
+			</view>
+		</view>
+		<view class="fotBtns" @click="openTDPopp">投递简历</view>
+		<u-popup v-model="showTD" mode="bottom" border-radius="14">
+			<view style="padding: 32rpx;" class="stqq">
+				<scroll-view scroll-y="true" style="height: 800rpx;">
+					<view v-for="(item, index) in resumeLists" :key="index" class="listSty">
+						<view class="iconLeft"><image style="width: 100%;height: 100%;" src="@/static/preview@3x.png" mode="" @click="jumpSee(item)"></image></view>
+						<view class="cenSty" @click="activeBtns(item, index)">
+							<view class="zwSty">{{ item.resumeName }}</view>
+							<view class="timeSty">{{ $method.timestampToTime(item.createTime, false) }}</view>
+						</view>
+						<view class="rightRadio" @click="activeBtns(item, index)"><view v-if="activeNum === item.resumeId" class="actives"></view></view>
+					</view>
+				</scroll-view>
+			</view>
+			<view class="fotBtnBox"><view class="fotBtn" @click="tdjl">投递</view></view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			activeNum: null,
+			showTD: false,
+			companyArray: {}, //公司信息内容
+			GyArray: {}, //岗位信息内容
+			id: null, //岗位ID
+			companyId: null, //公司ID
+			showMsgIcon: false,
+			showMsg: false,
+			resumeLists: []
+		};
+	},
+	onLoad(options) {
+		this.companyId = options.companyId;
+		this.id = options.id;
+	},
+	onShow() {
+		// this.getJLlist();
+	},
+	mounted() {
+		this.init();
+		this.jumpGY(this.id);
+		this.getYSheight();
+	},
+	methods: {
+		jumpSee(options) {
+			this.$navTo.togo('/pages2/resume/addResume', {
+				id: options.resumeId
+			});
+			this.showTD = false;
+		},
+		getJLlist() {
+			var self = this;
+			return new Promise((resolve, reject) => {
+				self.$api.recruitresumelist().then(res => {
+					if (res.data.code === 200) {
+						self.resumeLists = res.data.rows;
+						resolve();
+					}
+				});
+			});
+		},
+		activeBtns(options, index) {
+			this.activeNum = options.resumeId;
+		},
+		async openTDPopp() {
+			if (this.id === null || this.id == undefined) {
+				uni.showToast({
+					title: '请选择投递岗位',
+					icon: 'none'
+				});
+				return;
+			}
+			const snts = await this.getJLlist();
+			this.activeNum = null;
+			this.showTD = true;
+		},
+		getYSheight() {
+			var self = this;
+			uni.getSystemInfo({
+				success: function(res) {
+					let info = uni.createSelectorQuery().select('.bigboxFont');
+					info.boundingClientRect(function(data) {
+						if (data.height >= 147) {
+							self.showMsgIcon = true;
+						} else {
+							self.showMsgIcon = false;
+						}
+					}).exec();
+				}
+			});
+		},
+		init() {
+			this.$api.recruitcompanyCon(this.companyId).then(res => {
+				this.companyArray = res.data.data;
+			});
+		},
+		jumpGY(v) {
+			this.id = v;
+			if (this.id == undefined || this.id === null) {
+				return;
+			}
+			uni.showLoading({
+				title:'加载中'
+			})
+			this.$api.recruitneedsId(v).then(res => {
+				res.data.data.bonusCertificate = res.data.data.bonusCertificate.split(',');
+				res.data.data.welfare = res.data.data.welfare.split(',');
+				this.GyArray = res.data.data;
+				uni.hideLoading()
+			});
+		},
+		tdjl() {
+			var self = this;
+			if (this.activeNum === null) {
+				uni.showToast({
+					title: '请选择简历',
+					duration: 1500
+				});
+				return;
+			}
+			var data = {
+				needsId: Number(this.id),
+				resumeId: this.activeNum
+			};
+			this.$api.systemInterview(data).then(res => {
+				if (res.data.code === 200) {
+					uni.showToast({
+						title: '已投递',
+						icon: 'success'
+					});
+					self.showTD = false;
+				} else {
+					uni.showToast({
+						title: res.data.msg,
+						icon: 'none'
+					});
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style scope>
+.listSty {
+	margin-bottom: 24rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.rich-texts {
+	font-size: 24rpx;
+	color: #636a75;
+	font-weight: bold;
+}
+.companyBox {
+	margin: 16rpx 35rpx;
+	padding: 18rpx 20rpx;
+	border-radius: 32rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+}
+.companyInfo {
+	display: flex;
+}
+.imgBoxsList {
+	flex-shrink: 0;
+	margin-right: 24rpx;
+	width: 101rpx;
+	height: 101rpx;
+	overflow: hidden;
+	border-radius: 24rpx;
+	background-color: #fff;
+	border: 1rpx solid #eee;
+	box-shadow: 0rpx 0rpx 5rpx 0rpx rgba(47, 67, 121, 0.05);
+}
+.rigBix {
+	flex: 1;
+}
+.headerTit {
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+	margin-bottom: 26rpx;
+}
+.tabbaerLists {
+	display: flex;
+	align-items: center;
+	overflow: auto;
+	max-width: 500rpx;
+}
+.lits {
+	margin-right: 8rpx;
+	flex-shrink: 0;
+	height: 32rpx;
+	line-height: 32rpx;
+	padding: 0 22rpx;
+	border-radius: 16rpx;
+	background-color: #f2f6ff;
+	color: #636a75;
+	font-weight: 500;
+	font-size: 20rpx;
+}
+.bigboxFont {
+	margin-top: 34rpx;
+	font-size: 20rpx;
+	color: #636a75;
+	line-height: 30rpx;
+	max-height: 260rpx;
+	overflow: hidden;
+}
+.text-c {
+	text-align: center;
+}
+.showBoxs {
+	max-height: 100%;
+}
+.listLs {
+	display: flex;
+	align-items: center;
+	overflow: auto;
+	margin: 24rpx 0rpx;
+}
+.listLs::-webkit-scrollbar {
+	display: none;
+}
+.lisZY {
+	flex-shrink: 0;
+	height: 48rpx;
+	line-height: 48rpx;
+	padding: 0rpx 16rpx;
+	background: rgba(50, 70, 123, 0.06);
+	box-shadow: 0rpx 0rpx 5rpx 0rpx rgba(47, 67, 121, 0.05);
+	border-radius: 16rpx;
+	margin-right: 24rpx;
+	color: #636a75;
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.activesZY {
+	background-color: #32467b;
+	color: #fff;
+}
+.lisZY:first-child {
+	margin-left: 35rpx;
+}
+.GWwaload {
+	margin: 0 35rpx 23rpx;
+	padding: 29rpx 34rpx 32rpx;
+	border-radius: 32rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+}
+.headerTis {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 22rpx;
+}
+.headerJF {
+	display: flex;
+	margin-bottom: 23rpx;
+}
+.priceMS {
+	font-size: 30rpx;
+	font-weight: 800;
+	color: #32467b;
+}
+.uploadTimes {
+	color: #999;
+	font-weight: 500;
+	font-size: 20rpx;
+}
+.liti {
+	font-size: 26rpx;
+	color: #636a75;
+	font-weight: bold;
+}
+.leftItit {
+	font-size: 26rpx;
+	margin-right: 21rpx;
+	color: #636a75;
+	font-weight: bold;
+	flex-shrink: 0;
+}
+.lelis {
+	display: flex;
+	align-items: center;
+	width: 500rpx;
+	overflow: auto;
+}
+.lelis::-webkit-scrollbar {
+	display: none;
+}
+.listsITms {
+	border-radius: 16rpx;
+	background-color: #3fefb7;
+	height: 32rpx;
+	line-height: 32rpx;
+	padding: 0rpx 20rpx;
+	flex-shrink: 0;
+	color: #fff;
+	margin-right: 13rpx;
+	font-size: 20rpx;
+	font-weight: 500;
+}
+.imgSbox {
+	width: 26rpx;
+	height: 26rpx;
+	margin-right: 12rpx;
+	flex-shrink: 0;
+}
+.lisBxz {
+	display: flex;
+	align-items: center;
+	flex-wrap: wrap;
+	flex-shrink: 0;
+	width: 580rpx;
+}
+.liue {
+	height: 32rpx;
+	line-height: 32rpx;
+	padding: 0rpx 21rpx;
+	background-color: #f2f6ff;
+	border-radius: 16rpx;
+	color: #636a75;
+	font-size: 20rpx;
+	margin-right: 8rpx;
+	margin-bottom: 8rpx;
+}
+.szqq {
+	color: #636a75;
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.fotBoxs {
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+	border-radius: 32rpx;
+	margin: 0rpx 35rpx 105rpx;
+	padding: 17rpx 6rpx 17rpx 20rpx;
+}
+.lifot {
+	margin-bottom: 37rpx;
+}
+.headFot {
+	font-size: 26rpx;
+	color: #636a75;
+	font-weight: bold;
+	position: relative;
+	margin-bottom: 20rpx;
+}
+.pobtom {
+	position: absolute;
+	width: 103rpx;
+	height: 16rpx;
+	bottom: 0rpx;
+	background: rgba(0, 111, 255, 0.4);
+}
+.fotBtns {
+	width: 200rpx;
+	height: 64rpx;
+	text-align: center;
+	line-height: 64rpx;
+	color: #fff;
+	font-size: 24rpx;
+	font-weight: bold;
+	border-radius: 32rpx;
+	background: #32467b;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.15);
+	position: fixed;
+	bottom: 17rpx;
+	left: 50%;
+	transform: translateX(-50%);
+}
+.fotBtnBox {
+	height: 100rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+.fotBtn {
+	width: 200rpx;
+	height: 65rpx;
+	line-height: 65rpx;
+	text-align: center;
+	color: #fff;
+	font-weight: bold;
+	background-color: #32467b;
+	border-radius: 32rpx;
+	border: 1rpx solid #000;
+	font-size: 24rpx;
+}
+.iconLeft {
+	width: 32rpx;
+	height: 32rpx;
+}
+.cenSty {
+	display: flex;
+	height: 80rpx;
+	align-items: center;
+	justify-content: space-between;
+	width: 566rpx;
+	border-radius: 32rpx;
+	background-color: #e8f4ff;
+	padding: 0rpx 24rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+}
+.zwSty {
+	font-weight: bold;
+	font-size: 30rpx;
+	color: #2a4174;
+}
+.timeSty {
+	font-size: 24rpx;
+	color: #999;
+	font-weight: 500;
+}
+.rightRadio {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 42rpx;
+	height: 42rpx;
+	border-radius: 50%;
+	border: 1rpx solid #7f8caf;
+}
+.actives {
+	width: 24rpx;
+	height: 24rpx;
+	border-radius: 50%;
+	background-color: #7f8caf;
+	animation: acs 0.4s;
+}
+@keyframes acs {
+	0% {
+		opacity: 0;
+		transform: scale(0);
+	}
+	100% {
+		opacity: 1;
+		transform: scale(1);
+	}
+}
+</style>

+ 1464 - 0
pages2/resume/addResume.vue

@@ -0,0 +1,1464 @@
+<template>
+	<view>
+		<view class="pad_59">
+			<view class="lisbox">
+				<view class="lis">
+					<view class="titleLis">简历名称</view>
+					<input class="inputs" v-model="formTableInfos.resumeName" type="text" value="" placeholder="请输入简历名称" />
+				</view>
+				<view class="lis">
+					<view class="titleLis" style="margin-bottom: 24rpx;">
+						基本信息
+						<u-icon style="margin-left: 36rpx;" name="arrow-right" color="#666" size="28" @click="jumpUserinfo"></u-icon>
+					</view>
+					<view class="color_b" style="display: flex;align-items: center;margin-bottom: 24rpx;">
+						<span>姓名:</span>
+						<input type="text" v-model="formTableInfos.realname" placeholder="请输入姓名" />
+					</view>
+					<!-- <view class="color_b" style="margin-bottom: 24rpx;">{{ userInfo.realname }}</view> -->
+					<view class="dis_fy" style="margin-bottom: 24rpx;">
+						<view class="le_h">{{ userInfo.sex === 0 ? '男' : '女' }}</view>
+						<view class="fgs"></view>
+						<view class="le_h">{{ getYears(userInfo.userBirth) }}岁</view>
+						<view class="fgs"></view>
+						<view class="le_h">{{ userInfo.houseCity }} - {{ userInfo.houseDistrict }}</view>
+					</view>
+					<!-- {{ userInfo.telphone }} -->
+					<view class="le_h" style="margin-bottom: 24rpx;display: flex;align-items: center;">
+						<span>手机号:</span>
+						<input type="text" v-model="formTableInfos.telphone" placeholder="请输入手机号" />
+					</view>
+					<view class="le_h" style="margin-bottom: 24rpx;display: flex;align-items: center;">
+						<span>学历:</span>
+						<!-- <input type="text" v-model="formTableInfos.eduLevel" placeholder="请选择学历" /> -->
+						<picker @change="bindPickerChangeLevel" :value="index_level" :range="dictObj['edu_level']">
+							<view class="picker">{{ index_level === null ? '请选择学历' : dictObj['edu_level'][index_level] }}</view>
+						</picker>
+					</view>
+					<view class="le_h" style="display: flex;align-items: center;">
+						<span>邮箱号:</span>
+						<input type="text" v-model="formTableInfos.email" placeholder="请输入邮箱号" />
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						求职意向
+						<u-icon
+							style="margin-left: 27rpx;font-weight: bold;"
+							name="plus-circle"
+							:color="formTableInfos.job ? '#999999' : '#2A4174'"
+							size="36"
+							@click="formTableInfos.job ? '' : showqzyx(1)"
+						></u-icon>
+					</view>
+					<view class="jslist" v-if="formTableInfos.job" @click="showqzyx(0)">
+						<view class="dis_fjusBtw">
+							<view class="color_b">
+								{{ formTableInfos.job }}
+								<span style="margin-left: 34rpx;">
+									{{ formTableInfos.wantIncomeStart }} ~ {{ formTableInfos.wantIncomeEnd }}元/{{ formTableInfos.wantIncomeType === 1 ? '月' : '年' }}
+								</span>
+							</view>
+							<u-icon style="margin-left: 36rpx;" name="arrow-right" color="#666" size="28"></u-icon>
+						</view>
+						<view class="dis_fy">
+							<view class="le_h">{{ formTableInfos.city }}-{{ formTableInfos.district }}</view>
+							<view class="fgs"></view>
+							<view class="le_h">{{ formTableInfos.jobType }}</view>
+							<view class="fgs"></view>
+							<view class="le_h">{{ formTableInfos.comeWorkTime }}</view>
+							<view class="fgs"></view>
+							<view class="le_h">{{ formTableInfos.startYear }}</view>
+						</view>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						工作经历
+						<u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="showwork(1)"></u-icon>
+					</view>
+					<view v-if="formTableInfos.workExperienceJson.length">
+						<view class="jslist" v-for="(item, index) in formTableInfos.workExperienceJson" :key="index">
+							<view class="dis_fjusBtw">
+								<view class="color_b">{{ item.company }}</view>
+								<u-icon style="margin-left: 36rpx;" name="arrow-right" color="#666" size="28" @click="showwork(0, item, index)"></u-icon>
+							</view>
+							<view class="dis_btn">
+								<view class="le_h">{{ item.job }}</view>
+								<view class="le_h" style="margin-right: 30rpx;">{{ item.startTime }} ~ {{ item.endTime }}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						项目经历
+						<u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="showItem(1)"></u-icon>
+					</view>
+					<view v-if="formTableInfos.projectExperienceJson.length">
+						<view class="jslist" v-for="(item, index) in formTableInfos.projectExperienceJson" :key="index">
+							<view class="dis_fjusBtw">
+								<view class="color_b">{{ item.job }}</view>
+								<view class="">
+									<span class="le_h">{{ item.startTime }} ~ {{ item.endTime }}</span>
+									<u-icon name="arrow-right" color="#666" size="28" @click="showItem(0, item, index)"></u-icon>
+								</view>
+							</view>
+							<view class="le_h">{{ item.projectDescription }}</view>
+						</view>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						教育经历
+						<u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="showEducation(1)"></u-icon>
+					</view>
+					<view v-if="formTableInfos.eduExperienceJson.length">
+						<view class="jslist" v-for="(item, index) in formTableInfos.eduExperienceJson" :key="index">
+							<view class="dis_fjusBtw">
+								<view class="color_b">{{ item.school }}</view>
+								<u-icon style="margin-left: 36rpx;" name="arrow-right" color="#666" size="28" @click="showEducation(0, item, index)"></u-icon>
+							</view>
+							<view class="dis_btn">
+								<view class="le_h">{{ item.edu }} {{ item.Professional }}</view>
+								<view class="le_h" style="margin-right: 30rpx;">{{ item.startTime }} ~ {{ item.endTime }}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						证书
+						<u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="showCfcation(1)"></u-icon>
+					</view>
+					<view class="jslist">
+						<view class="le_h" style="margin-top: 34rpx;">建筑资历证书</view>
+						<view v-for="(item, index) in formTableInfos.certificateJson" :key="index">
+							<view class="dis_fjusBtw" style="margin: 15rpx;0rpx" v-if="item.cfType === '0'">
+								<view class="color_b">{{ item.categoryName }}</view>
+								<view class="">
+									<span class="color_b">{{ item.endTime }}</span>
+									<u-icon name="arrow-right" color="#666" size="28" @click="showCfcation(0, item, index)"></u-icon>
+								</view>
+							</view>
+						</view>
+						<view class="le_h">非建筑资历证书</view>
+						<view v-for="(item, index) in formTableInfos.certificateJson" :key="index">
+							<view class="dis_fjusBtw" style="margin: 15rpx;0rpx" v-if="item.cfType === '1'">
+								<view class="color_b">{{ item.cfName }}</view>
+								<view class="">
+									<span class="color_b">{{ item.endTime }}</span>
+									<u-icon name="arrow-right" color="#666" size="28" @click="showCfcation(0, item, index)"></u-icon>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						自我评价
+						<u-icon
+							style="margin-left: 27rpx;font-weight: bold;"
+							name="plus-circle"
+							:color="formTableInfos.selfEvaluation ? '#999999' : '#2A4174'"
+							size="36"
+							@click="formTableInfos.selfEvaluation ? '' : showMy(1)"
+						></u-icon>
+					</view>
+					<view class="dis_sty" v-if="formTableInfos.selfEvaluation">
+						<view class="le_h srystr" style="margin-top: 15rpx;">{{ formTableInfos.selfEvaluation }}</view>
+						<u-icon name="arrow-right" color="#666" size="28" @click="showMy(0)"></u-icon>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						视频介绍
+						<u-icon
+							style="margin-left: 27rpx;font-weight: bold;"
+							name="plus-circle"
+							:color="videoUrl === '' ? '#2A4174' : '#999999'"
+							size="36"
+							@click="videoUrl === '' ? videoLZ(1) : ''"
+						></u-icon>
+						<!-- <u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="videoLZ"></u-icon> -->
+					</view>
+					<view class="vid_box" v-if="videoUrl !== ''">
+						<image style="width: 100%;height: 100%;" src="../../static/avatar1.png" mode="">
+							<view class="zzc"><image class="imgcen" src="../../static/play@3x.png" mode="" @click="playVideo"></image></view>
+						</image>
+						<image class="img_auto" src="@/static/del@3x.png" mode="" @click="clearVideo"></image>
+					</view>
+				</view>
+				<view class="lis">
+					<view class="titleLis">
+						附件简历
+						<u-icon
+							style="margin-left: 27rpx;font-weight: bold;"
+							name="plus-circle"
+							:color="attachUrl === '' ? '#2A4174' : '#999999'"
+							size="36"
+							@click="attachUrl === '' ? attachUrlLZ(1) : ''"
+						></u-icon>
+						<!-- <u-icon style="margin-left: 27rpx;font-weight: bold;" name="plus-circle" color="#2A4174" size="36" @click="videoLZ"></u-icon> -->
+					</view>
+					<view class="pdf_box" v-if="attachUrl !== ''">
+						<image style="width: 100%;height: 100%;" src="../../static/pdf@3x.png" mode="" @click="openPdf"></image>
+						<image class="img_auto" src="@/static/del@3x.png" mode="" @click="clearAttachUrl"></image>
+					</view>
+					<view v-if="attachUrl !== ''">
+						{{attachName}}
+					</view>
+				</view>
+				<view class="btn_fot" @click="submitForms">提交</view>
+			</view>
+			<u-popup mode="bottom" v-model="qzYX" border-radius="14">
+				<view class="pad_pg" style="max-height: 95vh;">
+					<view class="hed">求职意向</view>
+					<u-form :model="jobIntentionForm" ref="uForm" label-position="top">
+						<u-form-item label="岗位" prop="job"><u-input v-model="jobIntentionForm.job" /></u-form-item>
+						<u-form-item label="薪资类型" prop="index_PriceType">
+							<picker @change="bindPickerChangePriceType" :value="jobIntentionForm.index_PriceType" :range="array_PriceType">
+								<view class="picker">{{ array_PriceType[jobIntentionForm.index_PriceType] }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="薪资范围(元)" prop="wantIncomeEnd">
+							<view class="dis_fy" style="justify-content: space-around;">
+								<u-input :clearable="false" input-align="center" v-model="jobIntentionForm.wantIncomeStart" />
+								~
+								<u-input input-align="center" :clearable="false" v-model="jobIntentionForm.wantIncomeEnd" />
+							</view>
+						</u-form-item>
+						<u-form-item label="城市" prop="district">
+							<pick-regions :defaultRegion="defaultRegionCode" @getRegion="handleGetRegion">
+								<view class="picker">{{ jobIntentionForm.province }} {{ jobIntentionForm.city }} {{ jobIntentionForm.district }}</view>
+							</pick-regions>
+						</u-form-item>
+						<u-form-item label="工作类型" prop="index_JobType">
+							<picker @change="bindPickerChangeJobType" :value="jobIntentionForm.index_JobType" :range="array_JobType">
+								<view class="picker">{{ array_JobType[jobIntentionForm.index_JobType] }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="开始工作年限">
+							<picker mode="date" header-text="选择时间" fields="year" :value="jobIntentionForm.startYear" @change="bindPickerChangeArrivalYearstime">
+								<view class="picker">{{ jobIntentionForm.startYear }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="到岗时间" prop="index_Arrivaltime">
+							<picker @change="bindPickerChangeArrivaltime" :value="jobIntentionForm.index_Arrivaltime" :range="array_Arrivaltime">
+								<view class="picker">{{ array_Arrivaltime[jobIntentionForm.index_Arrivaltime] }}</view>
+							</picker>
+						</u-form-item>
+					</u-form>
+					<view class="btn_fot" @click="submitjobIntention">保存</view>
+				</view>
+			</u-popup>
+			<u-popup mode="bottom" v-model="qzWorkStatus" border-radius="14">
+				<view class="pad_pg">
+					<view class="hed">工作经历</view>
+					<u-form :model="workJLForm" ref="uForm" label-position="top">
+						<u-form-item label="公司" prop="company"><u-input v-model="workJLForm.company" /></u-form-item>
+						<u-form-item label="岗位" prop="job"><u-input v-model="workJLForm.job" /></u-form-item>
+						<u-form-item label="入职时间" prop="startTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="workJLForm.startTime" @change="bindDateChange1">
+								<view class="picker">{{ workJLForm.startTime }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="离职时间" prop="endTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="workJLForm.endTime" @change="bindDateChange2">
+								<view class="picker">{{ workJLForm.endTime }}</view>
+							</picker>
+						</u-form-item>
+					</u-form>
+					<view class="btn_fot" v-if="workStatus === 1" @click="submitWorking">保存</view>
+					<view v-if="workStatus === 0" class="btn_boxs">
+						<view class="leftDel" @click="dels">删除</view>
+						<view class="rightedit" @click="submitWorking">保存</view>
+					</view>
+				</view>
+			</u-popup>
+			<u-popup mode="bottom" v-model="qzeduStatus" border-radius="14">
+				<view class="pad_pg">
+					<view class="hed">教育经历</view>
+					<u-form :model="eduJLForm" ref="uForm" label-position="top">
+						<u-form-item label="学校" prop="company"><u-input v-model="eduJLForm.school" /></u-form-item>
+						<u-form-item label="学历" prop="job">
+							<picker @change="bindPickerChangeEduType" :value="eduJLForm.edu" :range="array_eduType">
+								<view class="picker">{{ array_eduType[eduJLForm.edu] }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="专业" prop="company"><u-input v-model="eduJLForm.Professional" /></u-form-item>
+						<u-form-item label="在校开始时间" prop="startTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="eduJLForm.startTime" @change="bindDateChangeEdu1">
+								<view class="picker">{{ eduJLForm.startTime }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="在校结束时间" prop="endTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="eduJLForm.endTime" @change="bindDateChangeEdu2">
+								<view class="picker">{{ eduJLForm.endTime }}</view>
+							</picker>
+						</u-form-item>
+					</u-form>
+					<view class="btn_fot" v-if="eduStatus === 1" @click="submiteduing">保存</view>
+					<view v-if="eduStatus === 0" class="btn_boxs">
+						<view class="leftDel" @click="delsedu">删除</view>
+						<view class="rightedit" @click="submiteduing">保存</view>
+					</view>
+				</view>
+			</u-popup>
+			<u-popup mode="bottom" v-model="qzCfStatus" border-radius="14">
+				<view class="pad_pg">
+					<view class="hed">证书</view>
+					<u-form :model="cfJLForm" ref="uForm" label-position="top">
+						<u-form-item label="证书类型">
+							<picker @change="bindPickerChangeCfType" :value="cfJLForm.cfType" :range="array_cfType">
+								<view class="picker">{{ array_cfType[cfJLForm.cfType] }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="证书名称">
+							<!-- <picker v-if="cfJLForm.cfType === 0" @change="bindPickerChangeCfName" :value="cfJLForm.cfName" :range="array_cfType">
+								<view class="picker">{{ array_cfType[cfJLForm.cfName] }}</view>
+							</picker>
+							<u-input v-else v-model="eduJLForm.cfNameF" /> -->
+							<view v-if="cfJLForm.cfType === '0'" class="" @click="openTrees">{{ cfJLForm.categoryId == null ? '请选择' : cfJLForm.categoryName }}</view>
+							<u-input v-if="cfJLForm.cfType === '1'" v-model="cfJLForm.cfName" />
+							<tki-tree
+								style="height: 800rpx;"
+								title="证书列表"
+								:foldAll="true"
+								ref="trees"
+								:range="range"
+								rangeKey="categoryName"
+								confirmColor="#4e8af7"
+								@confirm="getTreeActiveInfo"
+							/>
+						</u-form-item>
+						<u-form-item label="证书到期时间" :label-width="auto">
+							<picker mode="date" header-text="选择时间" :value="cfJLForm.endTime" @change="bindDateChangeCf1">
+								<view class="picker">{{ cfJLForm.endTime }}</view>
+							</picker>
+						</u-form-item>
+					</u-form>
+					<view class="btn_fot" v-if="cfStatus === 1" @click="submitcfing">保存</view>
+					<view v-if="cfStatus === 0" class="btn_boxs">
+						<view class="leftDel" @click="delscf">删除</view>
+						<view class="rightedit" @click="submitcfing">保存</view>
+					</view>
+				</view>
+			</u-popup>
+		</view>
+		<u-popup mode="bottom" v-model="qzitemStatus" border-radius="14">
+			<scroll-view scroll-y="true" style="max-height: 98vh;">
+				<view class="pad_pg">
+					<view class="hed">项目经历</view>
+					<u-form :model="itemJLForm" ref="uForm" label-position="top">
+						<u-form-item label="岗位" prop="job"><u-input v-model="itemJLForm.job" /></u-form-item>
+						<u-form-item label="项目开始时间" prop="startTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="itemJLForm.startTime" @change="bindDateChangeItem1">
+								<view class="picker">{{ itemJLForm.startTime }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="项目结束时间" prop="endTime" :label-width="auto">
+							<picker mode="date" header-text="选择时间" fields="month" :value="itemJLForm.endTime" @change="bindDateChangeItem2">
+								<view class="picker">{{ itemJLForm.endTime }}</view>
+							</picker>
+						</u-form-item>
+						<u-form-item label="项目描述">
+							<u-input type="textarea" border :height="100" auto-height :maxlength="1000" v-model="itemJLForm.projectDescription" placeholder="请输入项目描述" />
+						</u-form-item>
+					</u-form>
+					<view class="btn_fot" v-if="itemStatus === 1" @click="submitItem">保存</view>
+					<view v-if="itemStatus === 0" class="btn_boxs">
+						<view class="leftDel" @click="delsitem">删除</view>
+						<view class="rightedit" @click="submitItem">保存</view>
+					</view>
+				</view>
+			</scroll-view>
+		</u-popup>
+		<u-popup mode="bottom" v-model="qzMyStatus" border-radius="14">
+			<scroll-view scroll-y="true" style="max-height: 98vh;">
+				<view class="pad_pg">
+					<view class="hed">自我介绍</view>
+					<u-input type="textarea" border :height="1000" auto-height :maxlength="1000" v-model="myInfos" placeholder="请输入自我介绍内容" />
+					<view class="btn_fot" @click="submitMy">保存</view>
+				</view>
+			</scroll-view>
+		</u-popup>
+		<u-popup v-model="showVideo" mode="center" border-radius="14" closeable><video :src="videoUrl"></video></u-popup>
+	</view>
+</template>
+
+<script>
+import tkiTree from '@/components/tki-tree/tki-tree.vue';
+import { mapGetters } from 'vuex';
+import * as baseUrls from '@/common/request.js';
+import * as fileUrls from '@/common/methodTool.js';
+export default {
+	components: { tkiTree },
+	data() {
+		return {
+			range: [],
+			showVideo: false, //视频弹窗
+			qzYX: false, //求职意向弹窗状态
+			qzWorkStatus: false, //工作经历弹窗状态
+			qzitemStatus: false, //项目经历弹窗状态
+			qzeduStatus: false, //教育经历弹窗状态
+			qzMyStatus: false, //自我介绍弹窗状态
+			qzCfStatus: false, //证书弹窗状态
+			formTableInfos: {
+				workExperienceJson: [],
+				projectExperienceJson: [],
+				eduExperienceJson: [],
+				certificateJson: []
+			}, //表单数据
+			index_level: null, //学历等级
+			jobIntentionForm: {}, //求职意向表
+			videoUrl: '', //视频介绍临时路径
+			attachUrl: '', //附件简历临时路径
+			attachName: '', //附件简历名称
+			workJLForm: {}, //当前弹窗工作经历表
+			itemJLForm: {}, //当前弹窗项目经历表
+			eduJLForm: {}, //当前弹窗教育经历表
+			myInfos: '', //自我介绍内容
+			cfJLForm: {}, //当前弹窗证书表
+			workStatus: 0, //工作经历新增or修改判断
+			itemStatus: 0, //项目经历新增or修改判断
+			eduStatus: 0, //教育经历新增or修改判断
+			cfStatus: 0, //证书新增or修改判断
+			workId: 0, //当前选择工作经历index
+			itemId: 0, //当前选择项目经历index
+			eduId: 0, //当前选择教育经历index
+			cfId: 0, //当前选择证书index
+			array_PriceType: ['月薪', '年薪'],
+			array_JobType: ['全职', '兼职', '实习生'],
+			array_Arrivaltime: ['随时', '1周内', '1个月内', '3个月内', '待定'],
+			array_eduType: ['小学', '初中', '中专/高中', '专科', '本科', '硕士研究生', '博士研究生'],
+			array_cfType: ['建筑资历证书', '非建筑资历证书'],
+			rules: {
+				job: [
+					{
+						required: true,
+						message: '请输入岗位名称',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change', 'blur']
+					}
+				],
+				index_PriceType: [
+					{
+						required: true,
+						message: '请选择薪资类型',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change']
+					}
+				],
+				wantIncomeEnd: [
+					{
+						required: true,
+						message: '请输入薪资范围',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change', 'blur']
+					}
+				],
+				district: [
+					{
+						required: true,
+						message: '请选择城市',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change']
+					}
+				],
+				index_JobType: [
+					{
+						required: true,
+						message: '请选择工作类型',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change']
+					}
+				],
+				index_Arrivaltime: [
+					{
+						required: true,
+						message: '请选择到岗时间',
+						// 可以单个或者同时写两个触发验证方式
+						trigger: ['change']
+					}
+				]
+			},
+			userInfo: {},
+			userSchool: {},
+			id: null
+		};
+	},
+	onLoad(options) {
+		this.getUserInfo();
+		this.getUserSchool();
+		if (options.id !== undefined) {
+			this.id = options.id;
+			this.init(options.id);
+		}
+	},
+	// 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
+	onReady() {
+		this.$refs.uForm.setRules(this.rules);
+	},
+	computed: { ...mapGetters(['dictObj']) },
+	mounted() {
+		this.getCateList();
+		console.log(this.dictObj,85)
+	},
+	methods: {
+		init(v) {
+			var self = this;
+			this.$api.recruitresumeId(v).then(res => {
+				console.log(res);
+				if (res.data.code === 200) {
+					res.data.data.certificateJson = JSON.parse(res.data.data.certificateJson);
+					res.data.data.eduExperienceJson = JSON.parse(res.data.data.eduExperienceJson);
+					res.data.data.projectExperienceJson = JSON.parse(res.data.data.projectExperienceJson);
+					res.data.data.workExperienceJson = JSON.parse(res.data.data.workExperienceJson);
+					res.data.data.userBirth = self.getYears(res.data.data.userBirth.slice(0, res.data.data.userBirth.indexOf('T')));
+					if(res.data.data.eduLevel){
+						self.index_level = self.dictObj['edu_level'].indexOf(res.data.data.eduLevel)
+					}
+					if (res.data.data.attachUrl) {
+						self.attachUrl = fileUrls.BASE_IMG_URL + res.data.data.attachUrl;
+						self.attachName = res.data.data.attachName
+					}
+					if (res.data.data.introduceVideoUrl) {
+						self.videoUrl = fileUrls.BASE_IMG_URL + res.data.data.introduceVideoUrl;
+					}
+					this.formTableInfos = res.data.data;
+				}
+			});
+		},
+		getUserInfo() {
+			this.$api.getInfo().then(res => {
+				this.userInfo = res.data.data;
+			});
+		},
+		getUserSchool() {
+			this.$api.getSchoolInfo().then(res => {
+				this.userSchool = res.data.data;
+			});
+		},
+		showwork(v, item, index) {
+			this.workStatus = v;
+			if (v === 1) {
+				(this.workJLForm = {
+					startTime: '2021-09',
+					endTime: '2021-09'
+				}),
+					(this.qzWorkStatus = true);
+			}
+			if (v === 0) {
+				this.workId = index;
+				this.workJLForm = item;
+				this.qzWorkStatus = true;
+			}
+		},
+		showEducation(v, item, index) {
+			this.eduStatus = v;
+			if (v === 1) {
+				this.eduJLForm = {
+					edu: 0,
+					startTime: '2021-09',
+					endTime: '2021-09'
+				};
+				this.qzeduStatus = true;
+			}
+			if (v === 0) {
+				this.eduId = index;
+				this.eduJLForm = JSON.parse(JSON.stringify(item));
+				this.eduJLForm.edu = this.array_eduType.indexOf(this.eduJLForm.edu);
+				this.qzeduStatus = true;
+			}
+		},
+		showCfcation(v, item, index) {
+			this.cfStatus = v;
+			if (v === 1) {
+				this.cfJLForm = {
+					cfType: '0',
+					cfName: '',
+					categoryId: null,
+					categoryName: '',
+					endTime: '2021-09-01'
+				};
+				this.qzCfStatus = true;
+			}
+			if (v === 0) {
+				this.cfId = index;
+				this.cfJLForm = JSON.parse(JSON.stringify(item));
+				this.qzCfStatus = true;
+			}
+		},
+		openTrees() {
+			this.$refs.trees._show();
+		},
+		getTreeActiveInfo(v) {
+			this.cfJLForm.categoryId = v[0].categoryId;
+			this.cfJLForm.categoryName = v[0].categoryName;
+		},
+		showItem(v, item, index) {
+			this.itemStatus = v;
+			if (v === 1) {
+				(this.itemJLForm = {
+					startTime: '2021-09',
+					endTime: '2021-09'
+				}),
+					(this.qzitemStatus = true);
+			}
+			if (v === 0) {
+				this.itemId = index;
+				this.itemJLForm = item;
+				this.qzitemStatus = true;
+			}
+		},
+		showMy(v) {
+			var self = this;
+			if (v === 1) {
+				this.myInfos = '';
+				this.qzMyStatus = true;
+			} else {
+				this.myInfos = this.formTableInfos.selfEvaluation;
+				this.qzMyStatus = true;
+			}
+		},
+		showqzyx(v) {
+			var self = this;
+			if (v === 1) {
+				this.jobIntentionForm = {
+					job: '',
+					jobType: '',
+					province: '广东省',
+					city: '广州市',
+					district: '天河区',
+					index_JobType: 0,
+					index_Arrivaltime: 0,
+					index_PriceType: 0,
+					startYear: 2021
+				};
+				this.qzYX = true;
+			} else {
+				this.jobIntentionForm = {
+					startYear: self.formTableInfos.startYear,
+					job: self.formTableInfos.job,
+					jobType: self.formTableInfos.jobType,
+					province: self.formTableInfos.province,
+					city: self.formTableInfos.city,
+					district: self.formTableInfos.district,
+					wantIncomeStart: self.formTableInfos.wantIncomeStart,
+					wantIncomeEnd: self.formTableInfos.wantIncomeEnd,
+					index_JobType: self.array_JobType.indexOf(self.formTableInfos.jobType),
+					index_Arrivaltime: self.array_Arrivaltime.indexOf(self.formTableInfos.comeWorkTime),
+					index_PriceType: self.formTableInfos.wantIncomeType === 1 ? 0 : 1
+				};
+				this.qzYX = true;
+			}
+		},
+		submit() {
+			this.$refs.uForm.validate(valid => {
+				if (valid) {
+					console.log('验证通过');
+				} else {
+					console.log('验证失败');
+				}
+			});
+		},
+		bindPickerChangeJobType(e) {
+			this.jobIntentionForm.index_JobType = e.detail.value;
+		},
+		bindPickerChangeArrivaltime(e) {
+			this.jobIntentionForm.index_Arrivaltime = e.detail.value;
+		},
+		bindPickerChangeArrivalYearstime(e) {
+			this.jobIntentionForm.startYear = e.detail.value;
+		},
+		bindPickerChangePriceType(e) {
+			this.jobIntentionForm.index_PriceType = e.detail.value;
+		},
+		bindPickerChangeEduType(e) {
+			this.eduJLForm.edu = e.detail.value;
+		},
+		bindPickerChangeCfType(e) {
+			this.cfJLForm.cfType = e.detail.value;
+		},
+		bindPickerChangeLevel(e) {
+			this.index_level = e.detail.value;
+		},
+		handleGetRegion(region) {
+			this.jobIntentionForm.province = region[0].name;
+			this.jobIntentionForm.city = region[1].name;
+			this.jobIntentionForm.district = region[2].name;
+		},
+		//保存求职意向
+		submitjobIntention() {
+			var testPrice = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/
+			if(!this.jobIntentionForm.job){
+				uni.showToast({
+					title:'请输入求职岗位',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.jobIntentionForm.wantIncomeStart){
+				uni.showToast({
+					title:'请输入开始薪资范围',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}else{
+				if(!testPrice.test(this.jobIntentionForm.wantIncomeStart)){
+					uni.showToast({
+						title:'请规范输入薪资起点',
+						icon: 'none',
+						duration:1500
+					})
+					return
+				}
+			}
+			if(!this.jobIntentionForm.wantIncomeEnd){
+				uni.showToast({
+					title:'请输入结束薪资范围',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}else{
+				if(!testPrice.test(this.jobIntentionForm.wantIncomeEnd)){
+					uni.showToast({
+						title:'请规范输入薪资结点',
+						icon: 'none',
+						duration:1500
+					})
+					return
+				}
+			}
+			if(this.jobIntentionForm.wantIncomeEnd < this.jobIntentionForm.wantIncomeStart){
+				
+					uni.showToast({
+						title:'请规范输入薪资范围',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			this.formTableInfos.job = this.jobIntentionForm.job;
+			this.formTableInfos.wantIncomeType = this.jobIntentionForm.index_PriceType === 0 ? 1 : 2;
+			this.formTableInfos.wantIncomeStart = this.jobIntentionForm.wantIncomeStart;
+			this.formTableInfos.wantIncomeEnd = this.jobIntentionForm.wantIncomeEnd;
+			this.formTableInfos.province = this.jobIntentionForm.province;
+			this.formTableInfos.city = this.jobIntentionForm.city;
+			this.formTableInfos.district = this.jobIntentionForm.district;
+			this.formTableInfos.jobType = this.array_JobType[this.jobIntentionForm.index_JobType];
+			this.formTableInfos.comeWorkTime = this.array_Arrivaltime[this.jobIntentionForm.index_Arrivaltime];
+			this.formTableInfos.startYear = this.jobIntentionForm.startYear;
+			console.log(this.formTableInfos.wantIncomeType)
+			this.qzYX = false;
+		},
+		//保存工作经历
+		submitWorking() {
+			var self = this;
+			if(!this.workJLForm.company){
+					uni.showToast({
+						title:'请输入公司',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			if(!this.workJLForm.job){
+					uni.showToast({
+						title:'请输入岗位',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			if (this.workStatus === 0) {
+				this.formTableInfos.workExperienceJson.forEach((item, index) => {
+					if (index === self.workId) {
+						self.$set(self.formTableInfos.workExperienceJson, index, self.workJLForm);
+						self.qzWorkStatus = false;
+					}
+				});
+			}
+			if (this.workStatus === 1) {
+				this.formTableInfos.workExperienceJson.push(this.workJLForm);
+				this.qzWorkStatus = false;
+			}
+		},
+		//保存教育
+		submiteduing() {
+			var self = this;
+			if(!this.eduJLForm.school){
+					uni.showToast({
+						title:'请输入学校',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			if(!this.eduJLForm.Professional){
+					uni.showToast({
+						title:'请输入专业',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			this.eduJLForm.edu = this.array_eduType[Number(this.eduJLForm.edu)];
+			if (this.eduStatus === 0) {
+				this.formTableInfos.eduExperienceJson.forEach((item, index) => {
+					if (index === self.eduId) {
+						self.$set(self.formTableInfos.eduExperienceJson, index, self.eduJLForm);
+						self.qzeduStatus = false;
+					}
+				});
+			}
+			if (this.eduStatus === 1) {
+				this.formTableInfos.eduExperienceJson.push(this.eduJLForm);
+				this.qzeduStatus = false;
+			}
+		},
+		//保存证书
+		submitcfing() {
+			var self = this;
+			if(this.cfJLForm.cfType == '0'){
+				if(!this.cfJLForm.categoryId === null){
+					uni.showToast({
+						title:'请选择证书名称',
+						icon: 'none',
+						duration:1500
+					})
+					return
+				}
+			}
+			if(this.cfJLForm.cfType == '1'){
+				if(!this.cfJLForm.cfName){
+					uni.showToast({
+						title:'请输入证书名称',
+						icon: 'none',
+						duration:1500
+					})
+					return
+				}
+			}
+			// this.eduJLForm.edu = this.array_eduType[Number(this.eduJLForm.edu)];
+			if (this.cfStatus === 0) {
+				this.formTableInfos.certificateJson.forEach((item, index) => {
+					if (index === self.cfId) {
+						self.$set(self.formTableInfos.certificateJson, index, self.cfJLForm);
+						self.qzCfStatus = false;
+					}
+				});
+			}
+			if (this.cfStatus === 1) {
+				this.formTableInfos.certificateJson.push(this.cfJLForm);
+				this.qzCfStatus = false;
+			}
+		},
+		//保存项目
+		submitItem() {
+			var self = this;
+			if(!this.itemJLForm.job){
+					uni.showToast({
+						title:'请输入岗位',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			if(!this.itemJLForm.projectDescription){
+					uni.showToast({
+						title:'请输入项目描述',
+						icon: 'none',
+						duration:1500
+					})
+					return
+			}
+			if (this.itemStatus === 0) {
+				this.formTableInfos.projectExperienceJson.forEach((item, index) => {
+					if (index === self.itemId) {
+						self.$set(self.formTableInfos.projectExperienceJson, index, self.itemJLForm);
+						self.qzitemStatus = false;
+					}
+				});
+			}
+			if (this.itemStatus === 1) {
+				this.formTableInfos.projectExperienceJson.push(this.itemJLForm);
+				this.qzitemStatus = false;
+			}
+		},
+		//保存自我评价
+		submitMy() {
+			if(!this.myInfos){
+				uni.showToast({
+					title:'请输入自我评价',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			this.formTableInfos.selfEvaluation = this.myInfos;
+			this.qzMyStatus = false;
+		},
+		async submitForms() {
+			var self = this;
+			if(!this.formTableInfos.resumeName){
+				uni.showToast({
+					title:'请输入简历名称',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.formTableInfos.realname){
+				uni.showToast({
+					title:'请输入姓名',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.formTableInfos.telphone){
+				uni.showToast({
+					title:'请输入手机号',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(this.index_level === null){
+				uni.showToast({
+					title:'请选择学历',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.formTableInfos.email){
+				uni.showToast({
+					title:'请输入邮箱号',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.formTableInfos.job){
+				uni.showToast({
+					title:'请增加求职意向',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			if(!this.formTableInfos.selfEvaluation){
+				uni.showToast({
+					title:'请输入自我评价',
+					icon: 'none',
+					duration:1500
+				})
+				return
+			}
+			uni.showLoading({
+				title: '提交中'
+			});
+			var data = JSON.parse(JSON.stringify(this.formTableInfos));
+			if(self.videoUrl){
+				const waitUpload1 = await self.uploadFile(self.videoUrl, 6, '视频');
+				if(waitUpload1 !== undefined){
+				data.introduceVideoUrl = waitUpload1;}
+				
+			}else{
+				data.introduceVideoUrl = null
+			}
+			if(self.attachUrl){
+				const waitUpload2 = await self.uploadFile(self.attachUrl, 6, '附件');
+				if(waitUpload2 !== undefined){
+				data.attachUrl = waitUpload2;
+				data.attachName = self.attachName;}
+			}else{
+				data.attachUrl = null;
+				data.attachName = null;
+			}
+			data.sex = self.userInfo.sex === 0 ? 1 : self.userInfo.sex === 1 ? 2 : null;
+			data.userBirth = self.userInfo.userBirth;
+			data.eduLevel = self.dictObj['edu_level'][self.index_level];
+			data.status = 1;
+			data.certificateJson = JSON.stringify(data.certificateJson);
+			data.eduExperienceJson = JSON.stringify(data.eduExperienceJson);
+			data.projectExperienceJson = JSON.stringify(data.projectExperienceJson);
+			data.workExperienceJson = JSON.stringify(data.workExperienceJson);
+			console.log(data);
+			if (this.id === null) {
+				const awaitsMys = await this.$api.addrecruitresume(data);
+				uni.hideLoading();
+				if (awaitsMys.data.code === 200) {
+					uni.showToast({
+						title: '提交成功',
+						icon: 'success',
+						duration: 1000,
+						success: function() {
+							setTimeout(() => {
+								uni.navigateBack({
+									delta: 1
+								});
+							}, 1000);
+						}
+					});
+				} else {
+					uni.showToast({
+						title: '提交失败',
+						icon: 'error',
+						duration: 1000
+					});
+				}
+			} else {
+				data.resumeId = this.id;
+				const awaitsMys = await this.$api.editrecruitresume(data);
+				uni.hideLoading();
+				if (awaitsMys.data.code === 200) {
+					uni.showToast({
+						title: '修改成功',
+						icon: 'success',
+						duration: 1000,
+						success: function() {
+							setTimeout(() => {
+								uni.navigateBack({
+									delta: 1
+								});
+							}, 1000);
+						}
+					});
+				} else {
+					uni.showToast({
+						title: '修改失败',
+						icon: 'error',
+						duration: 1000
+					});
+				}
+			}
+		},
+		dels() {
+			this.formTableInfos.workExperienceJson.splice(this.workId, 1);
+			this.qzWorkStatus = false;
+		},
+		delsedu() {
+			this.formTableInfos.eduExperienceJson.splice(this.eduId, 1);
+			this.qzeduStatus = false;
+		},
+		delsitem() {
+			this.formTableInfos.projectExperienceJson.splice(this.itemId, 1);
+			this.qzitemStatus = false;
+		},
+		delscf() {
+			this.formTableInfos.certificateJson.splice(this.cfId, 1);
+			this.qzCfStatus = false;
+		},
+		bindDateChange1(e) {
+			this.workJLForm.startTime = e.detail.value;
+		},
+		bindDateChange2(e) {
+			this.workJLForm.endTime = e.detail.value;
+		},
+		bindDateChangeItem1(e) {
+			this.itemJLForm.startTime = e.detail.value;
+		},
+		bindDateChangeItem2(e) {
+			this.itemJLForm.endTime = e.detail.value;
+		},
+		bindDateChangeEdu1(e) {
+			this.eduJLForm.startTime = e.detail.value;
+		},
+		bindDateChangeEdu2(e) {
+			this.eduJLForm.endTime = e.detail.value;
+		},
+		bindDateChangeCf1(e) {
+			this.cfJLForm.endTime = e.detail.value;
+		},
+		videoLZ() {
+			var self = this;
+			uni.chooseVideo({
+				count: 1,
+				camera: 'front',
+				sourceType: ['camera', 'album'],
+				success: function(res) {
+					self.videoUrl = res.tempFilePath;
+				}
+			});
+		},
+		attachUrlLZ() {
+			var self = this;
+			wx.chooseMessageFile({
+				count: 1,
+				success: function(res) {
+					if (res.errMsg == 'chooseMessageFile:ok') {
+						self.attachUrl = res.tempFiles[0].path;
+						self.attachName = res.tempFiles[0].name;
+					}
+				}
+			});
+		},
+		playVideo() {
+			var self = this;
+			this.showVideo = true;
+		},
+		openPdf() {
+			wx.downloadFile({
+				url: this.attachUrl,
+				success: function(res) {
+					console.log(res, 9);
+					wx.openDocument({
+						filePath: res.tempFilePath,
+						success: function(result) {},
+						fail: function(errsult) {
+							uni.showToast({
+								title: '文件打开失败',
+								icon: 'none'
+							});
+						}
+					});
+				},
+				fail: function(err) {
+					uni.showToast({
+						title: '文件下载失败',
+						icon: 'none'
+					});
+				}
+			});
+		},
+		clearVideo() {
+			var self = this;
+			uni.showModal({
+				title: '提示',
+				content: '是否移除视频',
+				success: function(res) {
+					if (res.confirm) {
+						self.videoUrl = '';
+						uni.showToast({
+							title: '移除成功',
+							icon: 'none'
+						});
+					}
+				}
+			});
+		},
+		clearAttachUrl() {
+			var self = this;
+			uni.showModal({
+				title: '提示',
+				content: '是否移除附件简历',
+				success: function(res) {
+					if (res.confirm) {
+						self.attachUrl = '';
+						self.attachName = '';
+						uni.showToast({
+							title: '移除成功',
+							icon: 'none'
+						});
+					}
+				}
+			});
+		},
+		uploadFile(options, int, names) {
+			return new Promise((resolve, reject) => {
+				var self = this;
+				var data = {
+					file: options,
+					imageStatus: int
+				};
+				uni.uploadFile({
+					url: baseUrls.BASE_URL + '/aliyun/oss/upload', //仅为示例,非真实的接口地址
+					filePath: options,
+					header: {
+						AuthorizationToken: 'WX ' + uni.getStorageSync('token'),
+						TenantId: baseUrls.tenantId
+					},
+					formData: {
+						imageStatus: int
+					},
+					name: 'file',
+					success: res => {
+						var asary = JSON.parse(res.data);
+						if (asary.code === 200) {
+							resolve(asary.data);
+						} else {
+							uni.showToast({
+								itle: names + '上传失败',
+								icon: 'none'
+							});
+							resolve();
+						}
+					},
+					fail: error => {
+						uni.showToast({
+							title: names + '上传报错',
+							icon: 'none'
+						});
+						resolve();
+					}
+				});
+			});
+		},
+		getCateList() {
+			var self = this;
+			this.$api.coursecategorylist().then(res => {
+				if (res.data.code === 200) {
+					self.arrayChangeType(res.data.rows);
+				}
+			});
+		},
+		// 接口数据转换级联类型
+		arrayChangeType(options) {
+			let result = [];
+			if (!Array.isArray(options)) {
+				return result;
+			}
+			options.forEach(item => {
+				delete item.children;
+			});
+			let map = {};
+			options.forEach(item => {
+				map[item.categoryId] = item;
+			});
+			options.forEach(item => {
+				let parent = map[item.pid];
+				if (parent) {
+					(parent.children || (parent.children = [])).push(item);
+				} else {
+					result.push(item);
+				}
+			});
+			result = result.sort(this.sortBy('sort', true));
+			result.forEach((item, index) => {
+				if (item.children) {
+					item.children.sort(this.sortBy('sort', true));
+				}
+			});
+			this.range = result;
+		},
+		sortBy(attr, rev) {
+			//第二个参数没有传递 默认升序排列
+			if (rev == undefined) {
+				rev = 1;
+			} else {
+				rev = rev ? 1 : -1;
+			}
+
+			return function(a, b) {
+				a = a[attr];
+				b = b[attr];
+				if (a < b) {
+					return rev * -1;
+				}
+				if (a > b) {
+					return rev * 1;
+				}
+				return 0;
+			};
+		},
+		jumpUserinfo() {
+			this.$navTo.togo('/pages2/wd/info', {});
+		},
+		getYears(strBirthday) {
+			if (strBirthday === undefined) {
+				return '-';
+			}
+			var returnAge;
+			var strBirthdayArr = strBirthday.split('-');
+			var birthYear = strBirthdayArr[0];
+			var birthMonth = strBirthdayArr[1];
+			var birthDay = strBirthdayArr[2];
+			var d = new Date();
+			var nowYear = d.getFullYear();
+			var nowMonth = d.getMonth() + 1;
+			var nowDay = d.getDate();
+
+			if (nowYear == birthYear) {
+				returnAge = 0; //同年 则为0岁
+			} else {
+				var ageDiff = nowYear - birthYear; //年之差
+				if (ageDiff > 0) {
+					if (nowMonth == birthMonth) {
+						var dayDiff = nowDay - birthDay; //日之差
+						if (dayDiff < 0) {
+							returnAge = ageDiff - 1;
+						} else {
+							returnAge = ageDiff;
+						}
+					} else {
+						var monthDiff = nowMonth - birthMonth; //月之差
+						if (monthDiff < 0) {
+							returnAge = ageDiff - 1;
+						} else {
+							returnAge = ageDiff;
+						}
+					}
+				} else {
+					returnAge = -1; //返回-1 表示出生日期输入错误 晚于今天
+				}
+			}
+			return returnAge; //返回周岁年龄
+		}
+	}
+};
+</script>
+
+<style scoped>
+.pad_59 {
+	padding: 15rpx 28rpx 59rpx 59rpx;
+}
+.lis {
+	padding-top: 33rpx;
+	padding-bottom: 35rpx;
+	border-bottom: 1rpx solid #eee;
+}
+.titleLis {
+	color: #2a4174;
+	font-weight: bold;
+	font-size: 30rpx;
+}
+.inputs {
+	margin-top: 22rpx;
+	font-size: 30rpx;
+	color: #2a4174;
+	font-weight: 400;
+}
+.dis_fjusBtw {
+	margin-bottom: 24rpx;
+	margin-top: 31rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.dis_sty {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.color_b {
+	color: #2a4174;
+	font-weight: bold;
+	font-size: 26rpx;
+}
+.dis_btn {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.le_h {
+	color: #666;
+	font-size: 24rpx;
+}
+.dis_fy {
+	display: flex;
+	align-items: center;
+}
+.fgs {
+	width: 2rpx;
+	height: 23rpx;
+	margin: 0rpx 30rpx;
+	background-color: #666;
+}
+.vid_box {
+	width: 202rpx;
+	height: 292rpx;
+	border-radius: 16rpx;
+	margin-top: 25rpx;
+	position: relative;
+}
+.pdf_box {
+	width: 70rpx;
+	height: 86rpx;
+	border-radius: 16rpx;
+	margin-top: 25rpx;
+	position: relative;
+}
+.img_auto {
+	position: absolute;
+	width: 65rpx;
+	height: 65rpx;
+	right: -100rpx;
+	top: 50%;
+	transform: translateY(-50%);
+}
+.zzc {
+	position: absolute;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	border-radius: 16rpx;
+	background-color: rgba(0, 0, 0, 0.6);
+}
+.imgcen {
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	width: 60rpx;
+	height: 60rpx;
+	transform: translateX(-50%) translateY(-50%);
+}
+.pad_pg {
+	padding: 32rpx 32rpx 50rpx;
+}
+.hed {
+	text-align: center;
+	font-weight: bold;
+	color: #0c141f;
+	font-size: 32rpx;
+	margin: 20rpx 0rpx;
+}
+.btn_fot {
+	margin-top: 12rpx;
+	background-color: #32467b;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #fff;
+	border-radius: 32rpx;
+	height: 88rpx;
+	line-height: 88rpx;
+	text-align: center;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+.btn_boxs {
+	margin-top: 12rpx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.leftDel {
+	width: 30%;
+	background-color: #eb4d3d;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #fff;
+	border-radius: 32rpx;
+	height: 88rpx;
+	line-height: 88rpx;
+	text-align: center;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(235, 77, 61, 0.1);
+}
+.rightedit {
+	width: 60%;
+	background-color: #32467b;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #fff;
+	border-radius: 32rpx;
+	height: 88rpx;
+	line-height: 88rpx;
+	text-align: center;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+}
+.srystr {
+	margin-right: 20rpx;
+	display: -webkit-box;
+	overflow: hidden;
+	word-break: break-all; /* break-all(允许在单词内换行。) */
+	text-overflow: ellipsis; /* 超出部分省略号 */
+	-webkit-box-orient: vertical;
+	-webkit-line-clamp: 2; /** 显示的行数 **/
+}
+</style>

+ 313 - 0
pages2/resume/delivery.vue

@@ -0,0 +1,313 @@
+<template>
+	<view class="pageStyleInfo">
+		<view class="subList">
+			<u-subsection
+				:list="list"
+				:current="current"
+				@change="sectionChange"
+				height="54"
+				button-color="rgba(47,67,121,0.6)"
+				bg-color="#F8F9FF"
+				active-color="#FFFFFF"
+				inactive-color="#636A75"
+				:bold="false"
+			></u-subsection>
+		</view>
+		<view class="liBox" v-if="current === 0">
+			<view class="lisboxs" v-for="(item, index) in pageInfoList1" :key="index" @click="jumpPages(item)">
+				<view class="headList">
+					<view class="headText">{{ item.job }}</view>
+					<view class="headText">
+						{{ item.recruitResumeVo.wantIncomeStart }}-{{ item.recruitResumeVo.wantIncomeEnd }}/{{
+							item.recruitResumeVo.wantIncomeType === 1 ? '月' : item.recruitResumeVo.wantIncomeType === 2 ? '年' : '未知'
+						}}
+					</view>
+				</view>
+				<view class="contexts">{{ item.companyName }}</view>
+				<view class="headList" style="margin-bottom: 0rpx;">
+					<view class="fotText">{{ $method.timestampToTime(item.createTime, false) }} 投递</view>
+					<view class="fotText">{{ item.companyCity }}·{{ item.companyDistrict }}</view>
+				</view>
+			</view>
+		</view>
+		<view class="liBox" v-if="current === 1">
+			<view class="lisboxs" v-for="(item, index) in pageInfoList2" :key="index">
+				<view class="headList">
+					<view class="headText">{{ item.job }} ></view>
+					<view class="rightTs">{{ $method.timestampToTime(item.createTime, false) }}</view>
+				</view>
+				<view class="contexts2">
+					<view class="leftTes">
+						<view>公</view>
+						<view>司</view>
+					</view>
+					:
+					<view class="infoRights">{{ item.companyName }}</view>
+				</view>
+				<view class="contexts2">
+					<view class="leftTes">
+						<view>面</view>
+						<view>试</view>
+						<view>时</view>
+						<view>间</view>
+					</view>
+					:
+					<view class="infoRights">{{ $method.timestampToTime(item.resumeTime, false) }}</view>
+				</view>
+				<view class="contexts2">
+					<view class="leftTes">
+						<view>面</view>
+						<view>试</view>
+						<view>地</view>
+						<view>点</view>
+					</view>
+					:
+					<view class="infoRights">{{ item.companyProvince }}{{ item.companyCity }}{{ item.companyDistrict }}{{ item.companyAddress }}</view>
+				</view>
+				<view class="contexts2">
+					<view class="leftTes">
+						<view>联</view>
+						<view>系</view>
+						<view>电</view>
+						<view>话</view>
+					</view>
+					:
+					<view class="infoRights">{{ item.linkTel }}</view>
+				</view>
+				<view class="contexts2">
+					<view class="leftTes">
+						<view>联</view>
+						<view>系</view>
+						<view>人</view>
+					</view>
+					:
+					<view class="infoRights">{{ item.linkMan }}</view>
+				</view>
+				<view class="cent">
+					<view class="btnSty1" v-if="item.status === 1" @click="rejects(item)">拒绝</view>
+					<view class="btnSty2" v-if="item.status === 1" @click="jeshou(item)">接受邀请</view>
+					<view class="btnSty2" v-if="item.status === 2" style="opacity: 0.3;">已接受邀请</view>
+					<view class="btnSty2" v-if="item.status === 3" style="opacity: 0.3;">已谢绝邀请</view>
+					<view class="btnSty2" v-if="item.status === 4" style="opacity: 0.3;">已通过初试</view>
+					<view class="btnSty2" v-if="item.status === 5" style="opacity: 0.3;">初试不通过</view>
+					<view class="btnSty2" v-if="item.status === 6" style="opacity: 0.3;">已通过复试</view>
+					<view class="btnSty2" v-if="item.status === 7" style="opacity: 0.3;">复试不通过</view>
+					<view class="btnSty2" v-if="item.status === 8" style="opacity: 0.3;">已发offer</view>
+					<view class="btnSty2" v-if="item.status === 9" style="opacity: 0.3;">爽约</view>
+					<view class="btnSty2" v-if="item.status === 10" style="opacity: 0.3;">淘汰</view>
+					<view class="btnSty2" v-if="item.status === 11" style="opacity: 0.3;">放弃</view>
+					<view class="btnSty2" v-if="item.status === 12" style="opacity: 0.3;">转正</view>
+				</view>
+			</view>
+		</view>
+		<u-popup v-model="showPopp" mode="center" border-radius="14">
+			<view style="padding: 20rpx;width: 80vw;">
+					<view style="text-align: center;margin: 20rpx 0rpx; font-size: 30rpx;font-weight: bold;">拒绝理由</view>
+					<u-input v-model="refuse" focus type="textarea" border :height="150" auto-height placeholder="请输入拒绝理由"/>
+					<view style="margin-top: 30rpx; display: flex;align-items: center;justify-content: space-around;">
+						<u-button size="medium" type="warning" style="width: 200rpx;font-size: 24rpx;" @click="clearModels">取消</u-button>
+						<u-button size="medium" type="info" style="width: 200rpx;font-size: 24rpx;" @click="quxExit">确定</u-button>
+					</view>
+			</view>
+				</u-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			showPopp: false,
+			refuse: '',
+			indexIds: null,
+			pageInfoList1: [],
+			pageInfoList2: [],
+			list: [
+				{
+					name: '全部投递'
+				},
+				{
+					name: '邀面试'
+				}
+			],
+			current: 0
+		};
+	},
+	mounted() {
+		this.init();
+	},
+	methods: {
+		jumpPages(item){
+			this.$navTo.togo('/pages2/recruitment/detailsInfo', {
+				id:item.needsId,
+				companyId: item.companyId
+			});
+		},
+		init() {
+			this.$api.systeminterviewlistAll().then(res => {
+				if (res.data.code === 200) {
+					this.pageInfoList1 = res.data.rows;
+				}
+			});
+			this.$api.systeminterviewlist().then(res => {
+				if (res.data.code === 200) {
+					this.pageInfoList2 = res.data.rows;
+				}
+			});
+		},
+		sectionChange(index) {
+			this.current = index;
+		},
+		jeshou(options){
+			this.$api.editsysteminterview({
+				interviewId: options.interviewId,
+				status: 2
+			}).then(res => {
+				if(res.data.code === 200){
+					uni.showToast({
+						title: '已接受邀请',
+						icon: 'success'
+					})
+					this.init();
+				}else{
+					uni.showToast({
+						title: '接受邀请失败',
+						icon: 'error'
+					})
+				}
+			})
+		},
+		rejects(options){
+			this.refuse = ''
+			this.indexIds = options.interviewId
+			this.showPopp = true
+		},
+		quxExit(){
+			if(!this.refuse || this.refuse === ''){
+				uni.showToast({
+					title: '请输入拒绝理由',
+				})
+				return
+			}
+			var data = {
+				interviewId: this.indexIds,
+				status: 3,
+				refuse: this.refuse
+			}
+			this.$api.editsysteminterview(data).then(res => {
+				if(res.data.code === 200){
+					uni.showToast({
+						title: '已谢绝',
+						icon: 'success'
+					})
+					this.init();
+					this.showPopp = false
+				}else{
+					uni.showToast({
+						title: '接口报错',
+						icon: 'error'
+					})
+				}
+			})
+		},
+		clearModels(){
+			this.showPopp = false
+		},
+	}
+};
+</script>
+
+<style scoped>
+.pageStyleInfo {
+	padding: 32rpx 35rpx;
+}
+.subList {
+	width: 536rpx;
+	height: 56rpx;
+	margin: 0rpx auto 24rpx;
+}
+.lisboxs {
+	margin-bottom: 24rpx;
+	border-radius: 32rpx;
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+	padding: 31rpx 31rpx 28rpx 38rpx;
+}
+.headList {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 24rpx;
+}
+.headText {
+	font-size: 30rpx;
+	color: #2a4174;
+	font-weight: bold;
+}
+.contexts {
+	margin-bottom: 33rpx;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #636a75;
+}
+.fotText {
+	color: #636a75;
+	font-size: 24rpx;
+	font-weight: 500;
+}
+.rightTs {
+	font-size: 20rpx;
+	font-weight: 500;
+	color: #babfc6;
+}
+.contexts2 {
+	display: flex;
+	align-items: center;
+	margin-bottom: 17rpx;
+}
+.leftTes {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	color: #636a75;
+	width: 110rpx;
+	font-size: 26rpx;
+	font-weight: bold;
+	text-align: justify;
+}
+.infoRights {
+	color: #a8acb3;
+	font-size: 26rpx;
+	font-weight: bold;
+}
+.cent {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
+.btnSty1 {
+	width: 200rpx;
+	border: 1rpx solid #32467b;
+	height: 65rpx;
+	line-height: 65rpx;
+	text-align: center;
+	border-radius: 32rpx;
+	background-color: #fff;
+	color: #32467b;
+	font-weight: bold;
+	font-size: 24rpx;
+	margin-right: 40rpx;
+}
+.btnSty2 {
+	width: 200rpx;
+	color: #fff;
+	font-weight: bold;
+	font-size: 24rpx;
+	height: 65rpx;
+	line-height: 65rpx;
+	text-align: center;
+	border-radius: 32rpx;
+	background: #32467b;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.15);
+}
+</style>

+ 228 - 0
pages2/resume/myResume.vue

@@ -0,0 +1,228 @@
+<template>
+	<view>
+		<view class="contentListBoxs">
+			<uni-swipe-action>
+				<uni-swipe-action-item v-for="(item, index) in pageInfo" :key="index">
+					<view class="listbIXS" @click="editJL(item.resumeId)">
+						<view class="headTitls">{{item.resumeName}}</view>
+						<view class="dis_fs">
+							<view class="left_imgbox"><image style="width: 100%;height: 100%;" :src="userInfo.oneInchPhotos === null ? '@/static/avatar1.png': $method.splitImgHost(userInfo.oneInchPhotos)" mode=""></image></view>
+							<view class="rightCon">
+								<view class="tithead">{{item.realname}}</view>
+								<view class="tyList">年龄:{{item.userBirth}}岁</view>
+								<view class="tyList">学历:{{item.eduLevel}}</view>
+								<view class="tyList">电话:{{item.telphone}}</view>
+								<view class="tyList">应聘岗位:{{item.job}}</view>
+							</view>
+						</view>
+					</view>
+					<template v-slot:right>
+						<view class="bigboxsRight">
+							<view class="boxslist"><image style="width: 100%;height: 100%;" src="@/static/del@3x.png" mode="" @click="delList(item)"></image></view>
+						</view>
+					</template>
+				</uni-swipe-action-item>
+			</uni-swipe-action>
+		<view class="fotBtns" @click.stop="addJL">新建简历</view>
+		</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			pageInfo:{},
+			userInfo: {}
+		};
+	},
+	onShow() {
+		this.init()
+		this.userInfo = this.$store.state.userInfo
+	},
+	methods: {
+		init(){
+			var self = this
+			this.$api.recruitresumelist().then(res => {
+				if(res.data.code === 200){
+					res.data.rows.forEach((item,index) => {
+						item.userBirth = self.getYears(item.userBirth.slice(0,item.userBirth.indexOf("T")))
+					})
+					this.pageInfo = res.data.rows
+				}
+			})
+		},
+		delList(item){
+			var self = this
+			uni.showModal({
+				title: '提示',
+				content:'是否删除该简历',
+				success:function(res){
+					if(res.confirm){
+						var data = {
+							resumeId: item.resumeId,
+							status: -1
+						}
+						self.$api.editrecruitresume(data).then(result => {
+							if(result.data.code === 200){
+								uni.showToast({
+									title: '删除成功'
+								})
+								self.init()
+							}else{
+								uni.showToast({
+									title: '删除失败'
+								})
+							}
+						})
+					}
+				}
+			})
+		},
+		editJL(v){
+			this.$navTo.togo('/pages2/resume/addResume', {
+				id: v
+			});
+		},
+		addJL() {
+			this.$navTo.togo('/pages2/resume/addResume', {});
+		},
+		getYears(strBirthday) {
+			if (strBirthday === undefined) {
+				return '-';
+			}
+			var returnAge;
+			var strBirthdayArr = strBirthday.split('-');
+			var birthYear = strBirthdayArr[0];
+			var birthMonth = strBirthdayArr[1];
+			var birthDay = strBirthdayArr[2];
+			var d = new Date();
+			var nowYear = d.getFullYear();
+			var nowMonth = d.getMonth() + 1;
+			var nowDay = d.getDate();
+		
+			if (nowYear == birthYear) {
+				returnAge = 0; //同年 则为0岁
+			} else {
+				var ageDiff = nowYear - birthYear; //年之差
+				if (ageDiff > 0) {
+					if (nowMonth == birthMonth) {
+						var dayDiff = nowDay - birthDay; //日之差
+						if (dayDiff < 0) {
+							returnAge = ageDiff - 1;
+						} else {
+							returnAge = ageDiff;
+						}
+					} else {
+						var monthDiff = nowMonth - birthMonth; //月之差
+						if (monthDiff < 0) {
+							returnAge = ageDiff - 1;
+						} else {
+							returnAge = ageDiff;
+						}
+					}
+				} else {
+					returnAge = -1; //返回-1 表示出生日期输入错误 晚于今天
+				}
+			}
+			return returnAge; //返回周岁年龄
+		}
+	}
+};
+</script>
+
+<style scoped>
+.topBoxsz {
+	margin: 32rpx auto;
+	width: 536rpx;
+	height: 56rpx;
+}
+.listbIXS {
+	margin: 12rpx 35rpx 12rpx;
+	border-radius: 32rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.05);
+	padding: 25rpx 24rpx 21rpx;
+}
+.contentListBoxs {
+	margin-bottom: 95rpx;
+}
+.bigboxsRight {
+	width: 99rpx;
+	display: flex;
+	align-items: center;
+}
+.boxslist {
+	width: 64rpx;
+	height: 64rpx;
+	border-radius: 50%;
+	overflow: hidden;
+}
+.headTitls {
+	font-size: 30rpx;
+	color: #333;
+	font-weight: 800;
+	margin-bottom: 24rpx;
+}
+.dis_fs {
+	display: flex;
+}
+.dis_fy{
+	display: flex;
+	align-items: center;
+}
+.left_imgbox {
+	width: 170rpx;
+	height: 240rpx;
+	margin-right: 25rpx;
+	overflow: hidden;
+	border-radius: 16rpx;
+}
+.rightCon {
+	display: flex;
+	flex-direction: column;
+	justify-content: space-between;
+}
+.tithead {
+	color: #2a4174;
+	font-weight: bold;
+	font-size: 30rpx;
+}
+.tyList {
+	font-size: 26rpx;
+	color: #32467b;
+	font-weight: bold;
+}
+.fotBtns {
+	width: 200rpx;
+	height: 64rpx;
+	line-height: 64rpx;
+	border-radius: 32rpx;
+	background-color: #32467b;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(47, 67, 121, 0.15);
+	position: fixed;
+	bottom: 15rpx;
+	color: #fff;
+	left: 50%;
+	text-align: center;
+	transform: translateX(-50%);
+}
+.imgICon{
+	width:70rpx;
+	height: 86rpx;
+	margin-right: 24rpx;
+}
+.headerInfos{
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #2a4174;
+}
+.pris{
+	text-align: center;
+	margin: 50rpx auto;
+	font-size: 24rpx;
+	color: #999;
+	font-weight: 500;
+}
+</style>

+ 7 - 7
pages2/wd/edu_info.vue

@@ -5,9 +5,9 @@
 				请填写真实信息,以便我们后续为您提供完善的 <br>
 				个人职业成长定制服务!
 			</view>
-			<view class="btn" style="position: absolute;right: 20rpx;top: 0;">
+			<!-- <view class="btn" style="position: absolute;right: 20rpx;top: 0;">
 				编辑
-			</view>
+			</view> -->
 		</view>
 		<view class="form">
 			<u-form :model="form" ref="uForm">
@@ -34,9 +34,9 @@
 					  </picker>
 				</u-form-item>
 				<u-form-item label="学历">
-					<picker @change="bindPickerChangeLevel" :value="index_level" :range="dictObj['school_level']">
+					<picker @change="bindPickerChangeLevel" :value="index_level" :range="dictObj['edu_level']">
 					              <view class="picker">
-					                {{dictObj['school_level'][index_level]}}
+					                {{dictObj['edu_level'][index_level]}}
 					              </view>
 					    </picker>
 				</u-form-item>
@@ -69,7 +69,7 @@
 					              </view>
 					    </picker>
 				</u-form-item>
-				<u-form-item label="学信网学籍(PDF)" :label-width="auto" label-position="top">
+				<u-form-item label="学信网学籍" :label-width="auto" label-position="top">
 					<u-upload @on-list-change="changePhotoListHeader" :auto-upload="false" custom-btn="true" :action="action" :file-list="fileList" width="120" height ="120" size-type="['compressed']" max-count="1">
 						<template v-slot:addBtn >
 							<image :src="schoolInfo.studentStatusImg ? $method.splitImgHost(schoolInfo.studentStatusImg) : '/static/info_4.png'" style="width: 120rpx; height: 120rpx;"></image>
@@ -225,7 +225,7 @@
 				this.schoolInfo.fullTimeSchool = this.dictObj['full_time_school'][this.index_full]
 				this.schoolInfo.admissionTime = this.admissionTime
 				this.schoolInfo.graduationTime = this.graduationTime
-				this.schoolInfo.education = this.dictObj['school_level'][this.index_level]
+				this.schoolInfo.education = this.dictObj['edu_level'][this.index_level]
 				this.schoolInfo.academicDegree = this.dictObj['academic_degree'][this.index_degree]
 				this.schoolInfo.educationalSystem = this.dictObj['educational_system'][this.index_system]
 				this.schoolInfo.department = this.dictObj['department'][this.index_department]
@@ -270,7 +270,7 @@
 						if(this.schoolInfo.graduationTime)
 							this.graduationTime = this.schoolInfo.graduationTime
 						if(this.schoolInfo.education)
-							this.index_level = this.dictObj['school_level'].indexOf((this.schoolInfo.education))
+							this.index_level = this.dictObj['edu_level'].indexOf((this.schoolInfo.education))
 						if(this.schoolInfo.graduationTime)
 							this.index_degree = this.dictObj['academic_degree'].indexOf((this.schoolInfo.academicDegree))
 						if(this.schoolInfo.graduationTime)

+ 124 - 20
pages2/wd/enroll.vue

@@ -1,32 +1,136 @@
 <template>
-	<view  >
-		
+	<view class="enroll">
+		<view v-if="!pageInfo.length" style="margin-top: 50%;">
+			<u-empty text="暂无考试报名" mode="data"></u-empty>
+		</view>
+		<view v-else>
+		<view class="boxls" v-for="(item, index) in pageInfo" :key="index">
+			<view class="cne1">{{ item.examType }}</view>
+			<view class="cne2">{{ item.examPeriod }}</view>
+			<view class="cne3">报名时间:{{ $method.timestampToTime(item.signStartTime) + '~' + $method.timestampToTime(item.signEndTime) }}</view>
+			<view class="cne4">
+				<view class="ksNa">考试时间:</view>
+				<view class="ksLis">
+					<view v-for="(items, indexs) in item.examArrangementTimeVo" :key="indexs">
+						{{ $method.timestampToTime(items.startTime) + '~' + $method.timestampToTime(items.endTime) }}
+					</view>
+				</view>
+			</view>
+			<view class="btnStys">
+				<view class="leftsboxs" @click="jumpPages(item.examFromUrl)">官方通知</view>
+				<view class="rightboxs" @click="jumpPages(item.examUrl)">我要报名</view>
+			</view>
+		</view>
+		</view>
 	</view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				
-			}
-		},
-		onLoad(option) {
-			
-		},
-		onShow(){
+export default {
+	data() {
+		return {
+			pageInfo: []
+		};
+	},
+	onLoad(option) {},
+	onShow() {},
+	mounted() {
+		this.init();
+	},
+	methods: {
+		init() {
+			this.$api.arrangementlist().then(res => {
+				if (res.data.code === 200) {
+					this.pageInfo = res.data.rows;
+				}
+			});
 		},
-		methods: {
-			
-		
-		},
-		
+		jumpPages(url) {
+			if (url !== null) {
+				this.$navTo.togo('/pages2/index/webview', {
+					urls: url
+				});
+			}else{
+				uni.showToast({
+					title: '暂未获取到网站',
+					icon:'none'
+				})
+				return
+			}
+		}
 	}
+};
 </script>
 
 <style scope>
-	
+.boxls {
+	padding: 12rpx;
+	padding-left: 150rpx;
+	margin: 32rpx 32rpx 0rpx;
+	border-radius: 32rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+	background: url('https://file.xyyxt.net/oss/images/advertising/20210830/1630317031492_1012647606.png') no-repeat center center;
+	background-size: 100% 100%;
+}
+.cne1 {
+	margin-top: 73rpx;
+	font-size: 30rpx;
+	font-weight: bold;
+	color: #198a8c;
+}
+.cne2 {
+	margin-top: 19rpx;
+	color: #131b31;
+	font-weight: 500;
+	font-size: 24rpx;
+}
+.cne3 {
+	margin-top: 21rpx;
+	color: #131b31;
+	font-weight: bold;
+	font-size: 24rpx;
+}
+.cne4 {
+	margin-top: 21rpx;
+	color: #131b31;
+	font-weight: bold;
+	font-size: 24rpx;
+	display: flex;
+}
+.ksNa {
+}
+.btnStys {
+	margin-top: 28rpx;
+	display: flex;
+	align-items: center;
+	margin-bottom: 16rpx;
+}
+.leftsboxs {
+	margin-right: 62rpx;
+	border-radius: 16rpx;
+	background: #f0c171;
+	box-shadow: 0rpx 5rpx 5rpx 0rpx rgba(74, 84, 89, 0.2);
+	height: 48rpx;
+	line-height: 48rpx;
+	text-align: center;
+	width: 144rpx;
+	color: #fff;
+	font-size: 24rpx;
+	font-weight: 500;
+}
+.rightboxs {
+	border-radius: 16rpx;
+	background: #7dc8c9;
+	box-shadow: 0rpx 5rpx 5rpx 0rpx rgba(74, 84, 89, 0.2);
+	height: 48rpx;
+	line-height: 48rpx;
+	text-align: center;
+	width: 144rpx;
+	color: #fff;
+	font-size: 24rpx;
+	font-weight: 500;
+}
 page {
-		background: #FFFFFF;
-	}
+	background: #ffffff;
+}
 </style>

+ 31 - 4
pages2/wd/help.vue

@@ -8,13 +8,13 @@
 					<view>{{ item.activityName }}</view>
 					<view><u-icon name="info-circle" color="#2F4379" size="28" @click="openActivesList(item)"></u-icon></view>
 				</view>
-				<view><image :src="$method.splitImgHost(item.liveAdress)" style="width: 100%;height: 330rpx;"></image></view>
+				<view @click="jumpPagesDetail(item)"><image :src="$method.splitImgHost(item.activityLogo)" style="width: 100%;height: 330rpx;"></image></view>
 				<u-row>
 					<u-col span="6">
 						<view class="box_title">{{ $method.timestampToTime(item.startTime) }}至{{ $method.timestampToTime(item.endTime) }}</view>
 					</u-col>
 					<u-col span="6" text-align="right">
-						<view style="padding: 8rpx;"><view class="boxbtn" @click="uploadActives">立即参与</view></view>
+						<view style="padding: 8rpx;"><view class="boxbtn" :class="item.useStatus === 'yes' ? 'boxbtnYes':''" @click="item.useStatus === 'no' ? uploadActives(item) : uploadActives(1)">{{item.useStatus === 'no' ? '立即参加' : '已参加'}} </view></view>
 					</u-col>
 				</u-row>
 			</view>
@@ -56,10 +56,27 @@ export default {
 				this.list = res.data.rows;
 			});
 		},
-		uploadActives() {},
+		uploadActives(item) {
+			if(item === 1){
+				uni.showToast({
+					title:'已参加过该活动',
+					icon:'none'
+				})
+				return
+			}
+			this.$api.configurationreceive({configurationId:item.id}).then(res => {
+				if(res.data.code === 200){
+					uni.showToast({
+						title:'参加成功',
+						icon:'success'
+					})
+					this.getAtionlist();
+				}
+			})
+		},
 		openActivesList(option) {
 			console.log(option)
-			this.activeSList = option.courses
+			this.activeSList = option.courseList
 			this.show = true
 		},
 		jumpPages(option){
@@ -68,6 +85,12 @@ export default {
 			});
 			return;
 		},
+		jumpPagesDetail(option){
+			this.$navTo.togo('/pages2/wd/helpDetail', {
+				id: option.id
+			});
+			return;
+		},
 	}
 };
 </script>
@@ -93,6 +116,10 @@ export default {
 	text-align: center;
 	line-height: 40rpx;
 }
+.boxbtnYes{
+	background-color: #eee!important;
+	color: #838383!important;
+}
 .box_title {
 	font-size: 24rpx;
 	font-family: PingFang SC;

+ 252 - 0
pages2/wd/helpDetail.vue

@@ -0,0 +1,252 @@
+<template>
+	<view style="position: relative;">
+		<u-navbar title=" " background="{ background: '#ffffff',opacity:0.4; }"></u-navbar>
+		<view style="width: 100%;height: 375rpx;position: fixed;top: 0;z-index: 300;">
+			<image :src="pageInfo.activityLogo !== null ? $method.splitImgHost(pageInfo.activityLogo) : '@/static/bg_help.jpg'" style="width: 100%;height: 100%;"></image>
+			<view class="fotPost">
+				<view style="display: flex;align-items: center;">
+					<image style="width: 23rpx;height: 27rpx;margin-right: 5rpx;" src="@/static/clock@3x.png" mode=""></image>
+					<view style="color: #fff;font-weight: 500;font-size: 30rpx;">距结束 {{ dstime }}</view>
+				</view>
+				<view style="display: flex;align-items: center;padding-right: 20rpx;">
+					<view style="color: #fff;font-weight: 500;font-size: 30rpx;">
+						剩余名额:
+						<text style="font-weight: bold;margin-left: 9rpx;">{{ pageInfo.quantity - pageInfo.userNumber }}</text>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view style="padding: 20rpx;padding-top: 0!important;" :style="'margin-top:' + imgHeight + 'px'">
+			<view class="activity_box">
+				<button class="clasTys" open-type="share"><image style="width: 100%;height: 100%;position: absolute;top: 0;left: 0;z-index: 99;" src="@/static/shares@3x.png" mode=""></image></button>
+				<text class="titleIns">活动介绍</text>
+				<view class="texts">活动名称:{{ pageInfo.activityName }}</view>
+				<view class="texts">活动类型:{{pageInfo.activityType === 0 ? '优惠券':pageInfo.activityType === 1 ? '折扣券':pageInfo.activityType === 2 ? '线上直播':pageInfo.activityType === 3 ? '定价':pageInfo.activityType === 4 ? '优惠':pageInfo.activityType === 5 ? '折扣':'未知'}}</view>
+				<view class="texts" style="margin-bottom: 46rpx;">
+					活动时间:{{ $method.timestampToTime(pageInfo.startTime) }} ~ {{ $method.timestampToTime(pageInfo.endTime) }}
+				</view>
+				<text class="titleIns">活动详情</text>
+				<view class="acDetail"><image style="width: 100%;" :src="$method.splitImgHost(pageInfo.activityContentUrl)" mode="widthFix"></image></view>
+			</view>
+			<view class="classTs" style="margin-left: 25rpx;">活动课程</view>
+			<view class="lisboxsz">
+				<view class="listSty" v-for="(item, index) in pageInfo.courseList" :key="index" @click="jumpCourse(item.courseId)">
+					<view class="imgboxsfot"><image style="width: 100%;height: 100%;" :src="$method.splitImgHost(item.coverUrl)" mode=""></image></view>
+					<view class="textsFot">{{ item.courseName }}</view>
+					<view class="fotStys">
+						<view class="dis_fu">
+							<view class="leftImgs"><image style="width: 100%;height: 100%;" src="@/static/people.png" mode=""></image></view>
+							<view class="rightNums">2023</view>
+						</view>
+						<view class="dis_fu">
+							<view class="riTs">活动价</view>
+							<view class="PriceStsy">¥{{ item.price }}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			imgHeight: 0,
+			pageInfo: {},
+			dstime: null
+		};
+	},
+	onLoad(option) {
+		this.getAtionlist(option.id);
+	},
+	onShow() {
+		let w = uni.getSystemInfoSync().windowWidth;
+		this.imgHeight = w / (750 / 375) - 78;
+	},
+	onShareAppMessage: function(res) {
+		return {
+			title: '助学活动',
+			path: `/pages2/wd/helpDetail?id=${this.pageInfo.id}`
+		};
+	},
+	mounted() {},
+	methods: {
+		getAtionlist(int) {
+			this.$api.configurationlist({ id: int }).then(res => {
+				this.pageInfo = res.data.rows[0];
+				this.djStime(res.data.rows[0].endTime);
+			});
+		},
+		jumpCourse(int) {
+			this.$navTo.togo('/pages2/course/detail', {
+				id: int
+			});
+			return;
+		},
+		djStime(v) {
+			var self = this;
+			setInterval(() => {
+				self.dstime = self.$method.GetRTime(v);
+			}, 1000);
+		},
+	}
+};
+</script>
+<style>
+.u-border-bottom:after,
+.u-border-left:after,
+.u-border-right:after,
+.u-border-top-bottom:after,
+.u-border-top:after,
+.u-border:after {
+	border: none !important;
+}
+</style>
+<style scope>
+.boxbtn {
+	width: 132rpx;
+	height: 40rpx;
+	background: rgba(249, 96, 10, 0.6);
+	border-radius: 20rpx;
+	font-size: 24rpx;
+	color: #ffffff;
+	float: right;
+	text-align: center;
+	line-height: 40rpx;
+}
+.box_title {
+	font-size: 24rpx;
+	font-family: PingFang SC;
+	font-weight: 500;
+	color: #2f4379;
+	padding: 15rpx;
+}
+.activity_box {
+	width: 100%;
+	/* height: 466rpx; */
+	background: #ffffff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+	border-radius: 32rpx;
+	position: relative;
+	margin-bottom: 20rpx;
+	padding: 20rpx;
+}
+.clasTys {
+	background-color: #fff;
+	width: 52rpx;
+	height: 52rpx;
+	position: absolute;
+	border-radius: 50%;
+	overflow: hidden;
+	top: 20rpx;
+	right: 20rpx;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(11, 208, 120, 0.2);
+}
+.clasTys::after{
+	border: none;
+}
+.titleIns {
+	height: 46rpx;
+	line-height: 46rpx;
+	padding: 0rpx 17rpx;
+	border-radius: 23rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+	color: #32467b;
+	font-size: 30rpx;
+	font-weight: bold;
+	margin-bottom: 15rpx;
+	display: inline-block;
+}
+.texts {
+	margin-left: 14rpx;
+	margin-bottom: 21rpx;
+	color: #32467b;
+	font-weight: 500;
+	font-size: 24rpx;
+}
+.fotPost {
+	width: 100%;
+	display: flex;
+	padding: 13rpx 35rpx;
+	align-items: center;
+	background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.4));
+	position: absolute;
+	bottom: 0rpx;
+	justify-content: space-between;
+}
+.acDetail {
+	width: 100%;
+	/* height: auto; */
+}
+.lisboxsz {
+	padding: 0rpx 14rpx;
+	display: flex;
+	justify-content: space-between;
+	flex-wrap: wrap;
+}
+.classTs {
+	margin-bottom: 16rpx;
+	color: #32467b;
+	font-size: 24rpx;
+	font-weight: bold;
+}
+.listSty {
+	flex-shrink: 1;
+	width: 331rpx;
+	height: 230rpx;
+	margin-bottom: 28rpx;
+}
+.imgboxsfot {
+	width: 100%;
+	height: 160rpx;
+	box-shadow: 0rpx 6rpx 6rpx 0rpx rgba(47, 67, 121, 0.08);
+}
+.textsFot {
+	font-size: 24rpx;
+	color: #666;
+	font-weight: 500;
+	display: -webkit-box;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	word-wrap: break-word;
+	white-space: normal !important;
+	-webkit-line-clamp: 1;
+	-webkit-box-orient: vertical;
+}
+.fotStys {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+}
+.dis_fu {
+	display: flex;
+	align-items: center;
+}
+.leftImgs {
+	width: 22rpx;
+	height: 16rpx;
+	margin-right: 9rpx;
+	line-height: 16rpx;
+}
+.rightNums {
+	color: #999;
+	font-size: 20rpx;
+}
+.riTs {
+	font-weight: 500;
+	font-size: 16rpx;
+	color: #e91313;
+	margin-right: 9rpx;
+}
+.PriceStsy {
+	font-size: 24rpx;
+	color: #e91313;
+	font-weight: bold;
+}
+page {
+	background: #ffffff;
+}
+</style>

+ 10 - 5
pages2/wd/info.vue

@@ -10,7 +10,7 @@
 				<view class="btn" style="margin-right: 5rpx;" :style="form.certified === 1 ? isStatus : ''" @click="form.certified === 0 ? certification() : iscertification()">
 					{{ form.certified === 0 ? '认证' : '已认证' }}
 				</view>
-				<view class="btn">编辑</view>
+				<!-- <view class="btn">编辑</view> -->
 			</view>
 		</view>
 		<view class="form">
@@ -26,7 +26,7 @@
 				<u-form-item label="邮箱" prop="email" :label-width="auto"><u-input v-model="form.email" /></u-form-item>
 				<u-form-item label="出生日期" prop="userBirth" :label-width="auto">
 					<picker mode="date" :value="form.userBirth" @change="bindDateChange">
-						<view class="picker">{{ form.userBirth }}</view>
+						<view class="picker">{{ form.userBirth?form.userBirth:'未知' }}</view>
 					</picker>
 				</u-form-item>
 				<!-- <u-form-item label="身份"></u-form-item> -->
@@ -62,9 +62,10 @@
 						size-type="['compressed']"
 						max-count="1"
 						@on-list-change="changePhotoListHeader"
+						@on-remove="onRemovePic"
 					>
 						<template v-slot:addBtn>
-							<image :src="form.oneInchPhotos ? $method.splitImgHost( form.oneInchPhotos) : '/static/info_1.png'" style="width: 120rpx; height: 169rpx;"></image>
+							<image  :src="form.oneInchPhotos ? $method.splitImgHost( form.oneInchPhotos) : '/static/info_1.png'" style="width: 120rpx; height: 169rpx;"></image>
 						</template>
 					</u-upload>
 				</u-form-item>
@@ -199,6 +200,9 @@ export default {
 		this.array_politic = this.$store.state.dictObj['politic_status']
 	},
 	methods: {
+		onRemovePic(){
+			this.form.oneInchPhotos = null
+		},
 		getUserInfos(){
 			var self = this
 			this.$api.getInfo().then(res => {
@@ -278,9 +282,10 @@ export default {
 		},
 		async submitForm() {
 			var self = this;
-			if (this.fileList.length > 0) {
-				const waitYS = await this.imageInfos();
+			if (self.fileList.length > 0&&self.fileList[0].url!=self.$method.splitImgHost(self.form.oneInchPhotos)) {
+				const waitYS = await self.imageInfos();
 			}
+			console.log(343223)
 			var data = {
 				userId: this.form.userId,
 				email: this.form.email,

+ 2 - 2
pages2/wd/level.vue

@@ -32,8 +32,8 @@
 						</view>
 					</view>
 					<view class="progress_box">
-						<view class="progress_text">{{userInfo.integral}}/{{userLevelList[index].needIntegralEnd}}</view>
-						<u-line-progress height="8" inactive-color="rgba(47, 67, 121, 0.1)" :active-color="item.title_color" :percent="0" :show-percent="false"></u-line-progress>
+						<view class="progress_text">{{userInfo.integral === null ? 0 : userInfo.integral}}/{{userLevelList[index].needIntegralEnd}}</view>
+						<u-line-progress height="8" inactive-color="rgba(47, 67, 121, 0.1)" :active-color="item.title_color" :percent="userInfo.integral === null ? 0 : userInfo.integral / userLevelList[index].needIntegralEnd * 100" :show-percent="false"></u-line-progress>
 						<view class="tip">还需 {{userLevelList[index].needIntegralEnd - userInfo.integral}} 经验可升级成为{{item.tip}}</view>
 					</view>
 				</view>

+ 1 - 1
pages2/wd/menu.vue

@@ -15,7 +15,7 @@
 			}
 		},
 		onLoad(option) {
-			this.getDict()
+			// this.getDict()
 		},
 		onShow(){
 		},

BIN=BIN
static/640.jpg


BIN=BIN
static/adress@2x.png


BIN=BIN
static/bghuos.png


BIN=BIN
static/clock@3x.png


BIN=BIN
static/del@3x.png


BIN=BIN
static/fuli@2x.png


BIN=BIN
static/hot@3x.png


BIN=BIN
static/ji@3x.png


BIN=BIN
static/jianli@3x.png


BIN=BIN
static/job@3x.png


BIN=BIN
static/job@3xactive.png


BIN=BIN
static/pdf@3x.png


BIN=BIN
static/play@3x.png


BIN=BIN
static/preview@3x.png


BIN=BIN
static/shares@3x.png


BIN=BIN
static/toudi@3x.png


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