lsw 11 tháng trước cách đây
mục cha
commit
4fabbada01

+ 117 - 6
app/common/common.scss

@@ -34,7 +34,13 @@
 	color: #666666;
 }
 .mt10 {
-	margin-top: 10px;
+	margin-top: 10px!important;
+}
+.mt20 {
+	margin-top: 20px!important;
+}
+.pl5 {
+	padding-left: 5px;
 }
 .flex {
 	display: flex;
@@ -148,6 +154,13 @@
 	.icon {
 		padding-right: 3px;
 	}
+	.contact {
+		background-color: #f1f1f1;
+		float: right;
+		font-size: 13px;
+		color: $main-color;
+		margin-top: -5px;
+	}
 }
 .menu {
 	margin-top: 12px;
@@ -279,8 +292,8 @@
 				padding-right: 2px;
 			}
 		}
-		.desc{
-			text{
+		.desc {
+			text {
 				padding-right: 10px;
 				float: left;
 			}
@@ -300,7 +313,7 @@
 		margin-top: 13px;
 	}
 }
-.job{
+.job {
 	margin-left: -5px;
 	margin-right: -5px;
 	margin-top: -5px;
@@ -623,7 +636,7 @@
 .pt0 {
 	padding-top: 0px;
 }
-.org{
+.org {
 	color: orangered;
 }
 .mcard {
@@ -648,4 +661,102 @@
 			}
 		}
 	}
-}
+}
+.wte {
+	background-color: white !important;
+}
+.mb0{
+	margin-bottom: 0px!important;
+}
+.ms {
+	margin-top: 20px;
+	overflow: hidden;
+	.mtitle {
+		font-weight: bold;
+		margin-bottom: 10px;
+	}
+	.item {
+		font-size: 14px;
+		padding-top: 7px;
+	}
+	.gs {
+		float: left;
+		width: 50px;
+		height: 50px;
+		border-radius: 50%;
+		background-color: #f1f1f1;
+		text-align: center;
+		font-size: 30px;
+		line-height: 47px;
+	}
+	.con {
+		float: left;
+		padding-left: 10px;
+		width: 70%;
+		.mti {
+			font-weight: bold;
+			padding-bottom: 5px;
+		}
+		.address {
+			font-size: 13px;
+		}
+	}
+	.more {
+		float: right;
+		margin-top: 14px;
+	}
+}
+.mbos {
+	background-color: white;
+	padding: 20px;
+	border-radius: 25px;
+	.item {
+		font-size: 14px;
+		padding-top: 7px;
+	}
+	.b {
+		font-weight: bold;
+	}
+	map {
+		border-radius: 8px;
+		overflow: hidden;
+		margin-top: 15px;
+		width: 100%;
+		height: 150px;
+	}
+	.btn {
+		width: 60%;
+	}
+}
+.mb15{
+	margin-bottom: 15px
+}
+.mt0{
+	margin-top: 0px;
+}
+.bbg {
+	overflow: hidden;
+}
+.dtop {
+	padding: 15px;
+	.title {
+		font-weight: bold;
+	}
+	.price {
+		padding-top: 5px;
+		font-size: 15px;
+		font-weight: bold;
+		color: #ff5722;
+	}
+	.desc {
+		padding-top: 5px;
+		font-size: 14px;
+		text {
+			padding-right: 10px;
+		}
+		.audit {
+			float: right;
+			color: $main-color;
+		}
+	}
+}

+ 70 - 0
app/components/task/task.vue

@@ -0,0 +1,70 @@
+<template>
+	<view v-if="show">
+		<u-popup :show="show" round="15" mode="center" :closeable="true" :customStyle="{ width: '95%' }" @close="show = false">
+			<view class="popup">
+				<u-divider text="上传任务日志" class="mt20 mb0"></u-divider>
+				<view class="bbg">
+					<images v-model="item.pic"></images>
+				</view>
+				<textarea rows="3" placeholder="请输入说明" v-model="item.contents"></textarea>
+				<view class="contents"></view>
+				<button class="btn" @click="add()">立即提交</button>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'task',
+	data() {
+		return {
+			show: false,
+			item: { pic: [] }
+		};
+	},
+	methods: {
+		init(taskId) {
+			this.show = true;
+			this.item.taskId = taskId;
+		},
+		add() {
+			let rule = [
+				{ name: 'pic', checkType: 'notnull', errorMsg: '请上传照片' },
+				{ name: 'contents', checkType: 'notnull', errorMsg: '请输入说明' }
+			];
+			if (!this.verify.check(this.item, rule)) {
+				uni.showModal({ content: this.verify.error, showCancel: false });
+				return false;
+			}
+			this.http.request({
+				url: '/app/task/add',
+				data: { taskId: this.item.taskId, pic: this.item.pic.toString(), contents: this.item.contents },
+				method: 'POST',
+				success: (res) => {
+					uni.showModal({
+						title: '提示',
+						content: '上传成功',
+						showCancel: false,
+						success: (res) => {
+							this.show = false;
+							this.$emit('success');
+						}
+					});
+				}
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+textarea {
+	height: 150px;
+	width: 93%;
+	padding: 10px;
+	margin-top: 10px;
+	background-color: #f1f1f1;
+	border-radius: 5px;
+}
+</style>

+ 25 - 32
app/pages.json

@@ -276,59 +276,52 @@
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/receive/index",
-			"style" : 
-			{
-				"navigationBarTitleText" : "兼职报名"
+			"path": "pages/user/resume/application/receive/index",
+			"style": {
+				"navigationBarTitleText": "兼职报名"
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/receive/list",
-			"style" : 
-			{
-				"navigationBarTitleText" : "报名列表"
+			"path": "pages/user/resume/application/receive/list",
+			"style": {
+				"navigationBarTitleText": "报名列表"
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/receive/preview",
-			"style" : 
-			{
-				"navigationBarTitleText" : "简历详情"
+			"path": "pages/user/resume/application/receive/preview",
+			"style": {
+				"navigationBarTitleText": "简历详情"
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/invite",
-			"style" : 
-			{
-				"navigationBarTitleText" : "兼职邀约"
+			"path": "pages/user/resume/application/invite",
+			"style": {
+				"navigationBarTitleText": "兼职邀约"
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/task",
-			"style" : 
-			{
-				"navigationBarTitleText" : "任务清单"
+			"path": "pages/user/resume/application/task",
+			"style": {
+				"navigationBarTitleText": "任务清单",
+				"enablePullDownRefresh": true
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/task_detail",
-			"style" : 
-			{
-				"navigationBarTitleText" : "兼职详情"
+			"path": "pages/user/resume/application/task_detail",
+			"style": {
+				"navigationBarTitleText": "兼职详情"
 			}
 		},
 		{
-			"path" : "pages/user/money/cash_out",
-			"style" : 
-			{
-				"navigationBarTitleText" : "余额提现"
+			"path": "pages/user/money/cash_out",
+			"style": {
+				"navigationBarTitleText": "余额提现"
 			}
 		},
 		{
-			"path" : "pages/user/resume/application/task_list",
-			"style" : 
-			{
-				"navigationBarTitleText" : "任务进度"
+			"path": "pages/user/resume/application/task_list",
+			"style": {
+				"navigationBarTitleText": "任务进度"
 			}
 		}
 	],

+ 9 - 88
app/pages/job/detail.vue

@@ -1,30 +1,32 @@
 <template>
 	<view>
-		<view class="main">
+		<view class="dtop">
 			<view class="title">{{ item.title || '' }}</view>
 			<view class="price" v-if="item.type == 0">{{ item.salary == '面议' ? item.salary : item.salary + '/月' }}</view>
 			<view class="price" v-if="item.type == 1">{{ item.salary }}¥</view>
 			<view class="desc" v-if="item.title">
 				<text v-if="item.type == 0">{{ item.experience == '不限' ? '经验不限' : item.experience + '经验' }}</text>
 				<text>{{ item.positionName || '' }}</text>
-				<text>{{ item.type == 0 ? '全职' : '兼职' }}</text>
+				<text>{{ item.type == 0 ? '全职' : '完工结算' }}</text>
 				<view class="audit">
 					<text class="icon">&#xe64f;</text>
 					<text>已审核</text>
 				</view>
 			</view>
 		</view>
-		<view class="bos">
+		<view class="mbos">
 			<view class="ms" style="margin-top: 0px">
 				<view v-if="item.type == 1">
 					<view class="mtitle">兼职时间</view>
-					<view class="desc" style="margin-bottom: 15px">{{ item.startDate }}至{{ item.endDate }},共计:{{ item.days }}天</view>
+					<view class="desc mb15">{{ item.startDate }}至{{ item.endDate }},共计:{{ item.days }}天</view>
+					<view class="mtitle">兼职地点</view>
+					<view class="desc mb15">{{ item.address || '工作地点不限' }}</view>
 					<view class="mtitle">结算方式</view>
-					<view class="desc" style="margin-bottom: 15px">在规定时间内完工结算</view>
+					<view class="desc mb15">在规定时间内完工结算(平台打款)</view>
 				</view>
 				<view class="mtitle">{{ item.type == 0 ? '职位描述' : '兼职描述' }}</view>
 				<u-parse :content="item.contents" class="item"></u-parse>
-				<map :latitude="item.latitude" :longitude="item.longitude" :markers="covers" v-if="item.latitude"></map>
+				<map :latitude="item.latitude" :longitude="item.longitude" :markers="covers" v-if="item.latitude && item.type == 1"></map>
 			</view>
 			<!--企业信息-->
 			<view v-if="item.type == 0">
@@ -39,7 +41,7 @@
 				<map :latitude="item.latitude" :longitude="item.longitude" :markers="covers"></map>
 			</view>
 		</view>
-		<view class="bz">
+		<view class="bz pl5">
 			<text class="icon">&#xe634;</text>
 			<text>如有疑问或者需要帮助请联系我们客服</text>
 			<button class="contact" open-type="contact">
@@ -161,87 +163,6 @@ export default {
 </script>
 
 <style lang="scss">
-.title {
-	font-weight: bold;
-}
-.price {
-	padding-top: 5px;
-	font-size: 15px;
-	font-weight: bold;
-	color: #ff5722;
-}
-.desc {
-	padding-top: 5px;
-	font-size: 14px;
-	text {
-		padding-right: 10px;
-	}
-	.audit {
-		float: right;
-		color: $main-color;
-	}
-}
-.bos {
-	background-color: white;
-	padding: 20px;
-	border-radius: 25px;
-	.ms {
-		margin-top: 20px;
-		overflow: hidden;
-		.mtitle {
-			font-weight: bold;
-			margin-bottom: 10px;
-		}
-		.item {
-			font-size: 14px;
-			padding-top: 7px;
-		}
-		.gs {
-			float: left;
-			width: 50px;
-			height: 50px;
-			border-radius: 50%;
-			background-color: #f1f1f1;
-			text-align: center;
-			font-size: 30px;
-			line-height: 47px;
-		}
-		.con {
-			float: left;
-			padding-left: 10px;
-			width: 70%;
-			.mti {
-				font-weight: bold;
-				padding-bottom: 5px;
-			}
-			.address {
-				font-size: 13px;
-			}
-		}
-		.more {
-			float: right;
-			margin-top: 14px;
-		}
-	}
-	map {
-		border-radius: 8px;
-		overflow: hidden;
-		margin-top: 15px;
-		width: 100%;
-		height: 150px;
-	}
-}
-.bz {
-	padding-left: 5px;
-	font-size: 13px;
-	.contact {
-		background-color: #f1f1f1;
-		float: right;
-		font-size: 13px;
-		color: $main-color;
-		margin-top: -5px;
-	}
-}
 .mfooter {
 	background-color: white;
 	bottom: 0px;

+ 5 - 50
app/pages/job/enterprise/detail.vue

@@ -2,14 +2,14 @@
 	<view>
 		<view class="main">
 			<view class="ms">
-				<view class="icon gs">&#xe646;</view>
+				<view class="icon gs wte">&#xe646;</view>
 				<view class="con">
-					<view class="mti">{{ item.name }}</view>
+					<view class="mti omit">{{ item.name }}</view>
 					<view class="address omit">{{ item.address }}</view>
 				</view>
 			</view>
 		</view>
-		<view class="bos">
+		<view class="mbos">
 			<view class="item b">法定代表人:</view>
 			<view class="item">{{ item.legalPerson }}</view>
 			<view class="item b">联系电话:</view>
@@ -19,7 +19,7 @@
 			<view class="item b">注册资金:</view>
 			<view class="item">{{ item.capital }}万人民币</view>
 			<view class="item b">公司地址:</view>
-			<view class="item">{{item.address}}</view>
+			<view class="item">{{ item.address }}</view>
 			<view class="item b">公司介绍</view>
 			<view class="item">{{ item.contents }}</view>
 			<button class="btn" @click="go()">招聘职位</button>
@@ -53,49 +53,4 @@ export default {
 };
 </script>
 
-<style lang="scss">
-.ms {
-	overflow: hidden;
-	.gs {
-		float: left;
-		width: 50px;
-		height: 50px;
-		border-radius: 50%;
-		background-color: white;
-		text-align: center;
-		font-size: 30px;
-		line-height: 47px;
-	}
-	.con {
-		float: left;
-		padding-left: 10px;
-		width: 70%;
-		.mti {
-			font-weight: bold;
-			padding-bottom: 5px;
-		}
-		.address {
-			font-size: 13px;
-		}
-	}
-}
-.bos {
-	background-color: white;
-	padding: 20px;
-	border-radius: 25px;
-	.mtitle {
-		font-weight: bold;
-		margin-bottom: 10px;
-	}
-	.item {
-		font-size: 14px;
-		padding-top: 7px;
-	}
-	.b {
-		font-weight: bold;
-	}
-	.btn {
-		width: 60%;
-	}
-}
-</style>
+<style lang="scss"></style>

+ 1 - 1
app/pages/user/resume/application/task.vue

@@ -3,7 +3,7 @@
 		<view class="tab">
 			<u-tabs :list="tab" @click="tabClick"></u-tabs>
 		</view>
-		<view class="item_job" v-for="(item, index) in list" :key="index" @click="go('/pages/user/resume/application/task_detail?id=' + item.positionId)">
+		<view class="item_job" v-for="(item, index) in list" :key="index" @click="go('/pages/user/resume/application/task_detail?id=' + item.positionId + '&taskId=' + item.id)">
 			<view class="top">
 				<view class="title omit">{{ item.title }}</view>
 				<view class="salary">{{ item.salary }}¥</view>

+ 15 - 87
app/pages/user/resume/application/task_detail.vue

@@ -1,33 +1,28 @@
 <template>
 	<view>
-		<view class="main">
+		<view class="dtop">
 			<view class="title">{{ item.title || '' }}</view>
-			<view class="price">{{ item.salary }}¥</view>
 		</view>
-		<view class="bos">
-			<view class="ms" style="margin-top: 0px">
+		<view class="mbos">
+			<view class="ms mt0">
+				<view class="mtitle">兼职金额</view>
+				<view class="desc mb15">{{ item.salary }}元</view>
 				<view class="mtitle">兼职时间</view>
-				<view class="desc" style="margin-bottom: 15px">{{ item.startDate }}至{{ item.endDate }},共计:{{ item.days }}天</view>
+				<view class="desc mb15">{{ item.startDate }}至{{ item.endDate }},共计:{{ item.days }}天</view>
+				<view class="mtitle">兼职地点</view>
+				<view class="desc mb15">{{ item.address || '工作地点不限' }}</view>
 				<view class="mtitle">结算方式</view>
-				<view class="desc" style="margin-bottom: 15px">在规定时间内完工结算</view>
+				<view class="desc mb15">在规定时间内完工结算(平台打款)</view>
 				<view class="mtitle">兼职描述</view>
 				<u-parse :content="item.contents" class="item"></u-parse>
 				<map :latitude="item.latitude" :longitude="item.longitude" :markers="covers" v-if="item.latitude"></map>
 			</view>
 		</view>
-		<view class="bz">
-			<text class="icon">&#xe634;</text>
-			<text>如有疑问或者需要帮助请联系我们客服</text>
-			<button class="contact" open-type="contact">
-				<text class="icon">&#xe632;</text>
-				<text>点我沟通</text>
-			</button>
-		</view>
 		<view class="mfooter">
 			<view class="cn">
-				<button class="btn" @click="send()">
+				<button class="btn" @click="go('/pages/user/resume/application/task_list?taskId=' + item.taskId)">
 					<text class="icon">&#xe652;</text>
-					<text>任务进度</text>
+					<text>任务日志</text>
 				</button>
 				<button class="btn" @click="send()">
 					<text class="icon">&#xe652;</text>
@@ -42,10 +37,7 @@
 export default {
 	data() {
 		return {
-			item: {},
-			enterprise: {},
-			covers: [],
-			flag: false
+			item: {}
 		};
 	},
 	onLoad(e) {
@@ -53,9 +45,8 @@ export default {
 			url: '/app/position/detail/' + e.id,
 			success: (res) => {
 				this.item = res.data.data.position;
-				this.enterprise = res.data.data.enterprise;
-				this.covers.push({ latitude: this.item.latitude, longitude: this.item.longitude });
 				this.item.days = this.util.days(this.item.startDate, this.item.endDate);
+				this.item.taskId = e.taskId;
 			}
 		});
 	},
@@ -63,16 +54,6 @@ export default {
 		go(url) {
 			uni.navigateTo({ url: url });
 		},
-		//收藏职位
-		add() {
-			this.http.request({
-				url: '/app/favorite/add/' + this.item.id,
-				success: (res) => {
-					uni.showToast({ title: '收藏成功' });
-					this.flag = true;
-				}
-			});
-		},
 		//投递简历
 		send() {
 			this.http.request({
@@ -118,65 +99,12 @@ export default {
 					});
 				}
 			});
-		},
-		//分享
-		onShareAppMessage: function (res) {
-			return {
-				title: this.item.title,
-				path: '/pages/job/detail?id=' + this.item.id,
-				success: (res) => {},
-				fail: (res) => {}
-			};
 		}
 	}
 };
 </script>
 
 <style lang="scss">
-.title {
-	font-weight: bold;
-}
-.price {
-	padding-top: 5px;
-	font-size: 15px;
-	font-weight: bold;
-	color: #ff5722;
-}
-.bos {
-	background-color: white;
-	padding: 20px;
-	border-radius: 25px;
-	.ms {
-		margin-top: 20px;
-		overflow: hidden;
-		.mtitle {
-			font-weight: bold;
-			margin-bottom: 10px;
-		}
-		.item {
-			font-size: 14px;
-			padding-top: 7px;
-		}
-	}
-	map {
-		border-radius: 8px;
-		overflow: hidden;
-		margin-top: 15px;
-		width: 100%;
-		height: 150px;
-	}
-}
-.bz {
-	padding-left: 5px;
-	font-size: 13px;
-	.contact {
-		background-color: #f1f1f1;
-		float: right;
-		font-size: 13px;
-		color: $main-color;
-		margin-top: -5px;
-	}
-}
 .mfooter {
 	background-color: white;
 	bottom: 0px;
@@ -184,8 +112,8 @@ export default {
 	.cn {
 		padding: 10px 10px 15px 10px;
 		overflow: hidden;
-		.btn{
-			flex:1;
+		.btn {
+			flex: 1;
 		}
 	}
 }

+ 106 - 9
app/pages/user/resume/application/task_list.vue

@@ -1,19 +1,116 @@
 <template>
 	<view>
-		
+		<view class="position">
+			<view class="item" v-for="(item, index) in list" :key="index" @click="go('/pages/job/position/manage/full_time_push?id=' + item.id)">
+				<view class="top">
+					<view class="title omit">
+						<text class="icon" :style="{ color: item.state == 0 ? '#4CAF50' : '#545555' }">&#xe614;</text>
+						<text>{{ item.title }}</text>
+					</view>
+					<view class="audit" v-if="item.audit == 0">
+						<text class="icon">&#xe642;</text>
+						<text>审核中</text>
+					</view>
+					<view class="audit" style="color: #4caf50" v-if="item.audit == 1">
+						<text class="icon">&#xe612;</text>
+						<text>审核通过</text>
+					</view>
+					<view class="audit" v-if="item.audit == 2">
+						<text class="icon">&#xec72;</text>
+						<text>审核不通过</text>
+					</view>
+				</view>
+				<view class="flex">
+					<view class="f danger" @click.stop="manageRemove(item)">删除</view>
+				</view>
+			</view>
+			<view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
+			<u-empty v-if="!loadMore && list.length == 0"></u-empty>
+		</view>
+		<view class="mfooter">
+			<button class="btn" @click="show()">
+				<text class="icon">&#xe7c4;</text>
+				<text>添加</text>
+			</button>
+		</view>
+		<task ref="task" success="success()"></task>
 	</view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				
-			};
+export default {
+	data() {
+		return {
+			list: [],
+			param: { pageNum: 1, pageSize: 10 },
+			loadMore: true
+		};
+	},
+	onLoad(e) {
+		this.param.taskId = e.taskId;
+		this.getData();
+		uni.$on('task_list', (res) => {
+			this.refresh();
+		});
+	},
+	methods: {
+		getData() {
+			this.http.request({
+				url: '/app/task/list',
+				data: this.param,
+				loading: 'false',
+				success: (res) => {
+					this.loadMore = res.data.pages > this.param.pageNum ? true : false;
+					res.data.rows.forEach((item) => {
+						item.createTime = uni.$u.timeFrom(Date.parse(item.createTime));
+						this.list.push(item);
+					});
+				}
+			});
+		},
+		show() {
+			this.$refs.task.init(this.param.taskId);
+		},
+		manageRemove(item) {
+			uni.showModal({
+				title: '提示',
+				content: '确定删除该职位?删除后包括已投递简历也全部清除',
+				success: (res) => {
+					if (res.confirm) {
+						this.http.request({
+							url: '/app/position/manage/remove/' + item.id,
+							success: (res) => {
+								uni.showToast({ title: '删除成功' });
+								this.list.splice(this.list.indexOf(item), 1);
+							}
+						});
+					}
+				}
+			});
+		},
+		//刷新数据
+		refresh() {
+			this.loadMore = true;
+			this.param.pageNum = 1;
+			this.list = [];
+			this.getData();
+		}
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		setTimeout(() => {
+			this.refresh();
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	//上拉加载
+	onReachBottom() {
+		if (this.loadMore) {
+			this.param.pageNum++;
+			this.getData();
 		}
 	}
+};
 </script>
 
-<style lang="scss">
-
-</style>
+<style lang="scss"></style>

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/ResumeDeliver.java

@@ -106,11 +106,11 @@ public class ResumeDeliver {
     private String latitude;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "开始时间")
+    @TableField(exist = false)
     private Date startDate;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty(value = "结束时间")
+    @TableField(exist = false)
     private Date endDate;
 
     @JsonIgnore

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/dto/TaskListDto.java

@@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
 @Accessors(chain = true)
 public class TaskListDto {
 
-    @NotNull(message = "错误错误")
+    @NotNull(message = "参数错误")
     private Long taskId;
 
     @NotBlank(message = "任务图片不能为空")