Преглед на файлове

feat: 添加H5邀请功能

yezhihao преди 6 месеца
родител
ревизия
4aa1fd8b8e

+ 3 - 2
.hbuilderx/launch.json

@@ -2,8 +2,9 @@
     "version" : "1.0",
     "configurations" : [
         {
-            "customPlaygroundType" : "local",
-            "playground" : "custom",
+            "customPlaygroundType" : "device",
+            "packageName" : "io.dcloud.HBuilder",
+            "playground" : "standard",
             "type" : "uni-app:app-android"
         },
         {

+ 1 - 1
manifest.json

@@ -235,7 +235,7 @@
                     }
                 },
                 "/sqx_fast" : {
-                    "target" : "http://192.168.0.10:7155",
+                    "target" : "https://www.bosszan.com",
                     "changeOrigin" : true,
                     "secure" : false
                 }

+ 166 - 110
package/jobIntention/basicInfo.vue

@@ -5,9 +5,12 @@
 		<view class="form-content">
 			<!-- 头像 -->
 			<view class="form-item">
-				<view class="form-label">头像</view>
+				<view class="form-label">
+					<text class="required-mark">*</text>
+					<text>头像</text>
+				</view>
 				<view @click="chooseAvatar" class="avatar-container">
-					<image :src="avatar?avatar:'../../static/logo.png'" class="user-avatar" mode="aspectFill"></image>
+					<image :src="avatar?avatar:'../../static/images/logo.jpg'" class="user-avatar" mode="aspectFill"></image>
 					<view class="edit-avatar-icon">
 						<image src="../../static/images/index/Combined-Shape.svg" style="width: 32rpx;height: 32rpx;"
 							mode=""></image>
@@ -16,13 +19,20 @@
 			</view>
 
 			<!-- 姓名 -->
-			<view class="form-item">
+			<view class="form-item" style="margin-bottom: 13px;">
 				<view class="form-label">
 					<text class="required-mark">*</text>
 					<text>姓名</text>
 				</view>
 				<input class="form-input" type="text" placeholder="请输入姓名" v-model="userName" />
 			</view>
+			
+			<!-- 是否匿名展示 -->
+			<view class="form-item">
+				<u-checkbox-group class="checkbox">
+					<u-checkbox v-model="isAnonymous" :label-disabled="false">匿名展示</u-checkbox>
+				</u-checkbox-group>				
+			</view>
 
 			<!-- 性别 -->
 			<view class="form-item">
@@ -35,19 +45,7 @@
 					<u-radio name="2" activeColor="#007AFF">女</u-radio>
 				</u-radio-group>
 			</view>
-
-			<!-- 联系方式 -->
-			<view class="form-item">
-				<view class="form-label">联系方式</view>
-				<input class="form-input" type="text" placeholder="请输入手机号" v-model="phone" />
-			</view>
-
-			<!-- 微信号码 -->
-			<view class="form-item">
-				<view class="form-label">微信号码</view>
-				<input class="form-input" type="text" placeholder="请输入微信号码,方便给求职者交换微信联系" v-model="weChatNum" />
-			</view>
-
+			
 			<!-- 出生年月 -->
 			<view class="form-item">
 				<view class="form-label">
@@ -55,27 +53,44 @@
 					<text>出生年月</text>
 				</view>
 				<view class="date-picker" @click="showDatePicker = true">
-					<text class="date-text">{{ birthDateText }}</text>
+					<text class="date-text" v-if="birthDateText">{{ birthDateText }}</text>
+					<text class="placeholder-text" v-else>请选择出生年月</text>
 					<u-icon name="arrow-down" color="#999" size="24"></u-icon>
 				</view>
-
+			
 				<u-picker :default-time="birthDateText" v-model="showDatePicker" mode="time" :params="dateParams"
 					@confirm="onDateConfirm"></u-picker>
 			</view>
 			
+			<!-- 手机号 -->
+			<view class="form-item">
+				<view class="form-label">手机号</view>
+				<view class="phone-number">{{ hidePhoneNumber }}</view>
+			</view>
+
+			<!-- 联系方式 -->
+			<!-- <view class="form-item">
+				<view class="form-label">联系方式</view>
+				<input class="form-input" type="text" placeholder="请输入手机号" v-model="phone" />
+			</view> -->
+
+			<!-- 微信号码 -->
+			<view class="form-item">
+				<view class="form-label">微信号码</view>
+				<input class="form-input" type="text" placeholder="请输入微信号码,方便给对方交换微信联系" v-model="weChatNum" />
+			</view>
+			
 			<view class="form-item">
 				<view class="form-label">
-					<text class="required-mark">*</text>
 					<text>邮箱</text>
 				</view>
-				<input class="form-input" type="text" placeholder="请输入邮箱号码,方便接收offer" v-model="email" />
+				<input class="form-input" type="text" placeholder="请输入您的邮箱" v-model="email" />
 			</view>
 			
 
 			<!-- 求职状态 -->
 			<view class="form-item">
 				<view class="form-label">
-					<text class="required-mark">*</text>
 					<text>求职状态</text>
 				</view>
 				<view class="select-picker" @click="showJobStatusPicker">
@@ -86,8 +101,8 @@
 		</view>
 
 		<!-- 保存按钮 -->
-		<view @click="messagebtn" class="save-button">
-			<text class="save-text">保存</text>
+		<view class="button-section">
+			<view class="btn" @click="messagebtn">继续完善</view>
 		</view>
 
 		<!-- 求职状态选择器 -->
@@ -136,12 +151,11 @@
 				weChatNum: '',
 				email:'',
 				sex: '',
-				age: '',
 				phone: '',
 				avatar: '',
 				ifExp: 0,
 				userName: '',
-				birthDateText: '1991-11-29', // 显示的日期文本
+				birthDateText: '', // 显示的日期文本
 				showDatePicker: false, // 控制日期选择器显示
 				dateParams: {
 					year: true,
@@ -176,7 +190,14 @@
 						text: '实习',
 						recommended: false
 					}
-				]
+				],
+				isAnonymous: false, // 匿名展示
+				scene: 0, // 0.默认 1.H5邀请
+			}
+		},
+		computed: {
+			hidePhoneNumber() {
+				return String(this.phone).replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
 			}
 		},
 		onLoad(options) {
@@ -194,6 +215,9 @@
 				this.phone = options.resumesPhone
 			if (options && options.resumesEmail)
 				this.email = options.resumesEmail
+			if (options.scene) {
+				this.scene = options.scene
+			}
 			this.getUserInfo()
 		},
 		methods: {
@@ -256,15 +280,21 @@
 				console.log('选择的求职状态:', item);
 			},
 			getUserInfo() {
-				let userId = uni.getStorageSync('userId')
-				this.$Request.get("/app/user/selectUserById").then(res => {
+				// 老接口 /app/user/selectUserById
+				// 新接口 /app/user/getUserInfo
+				this.$Request.get("/app/user/getUserInfo").then(res => {
 					if (res.code == 0) {
-						this.weChatNum = res.data.weChatNum
-						this.sex = res.data.sex
-						this.age = res.data.age
-						this.avatar = res.data.avatar;
-						this.userName = res.data.userName;
-						this.phone = res.data.phone
+						const data = res.data
+						this.weChatNum = data.weChatNum
+						this.sex = data.sex
+						this.avatar = data.avatar
+						this.userName = data.userName
+						this.phone = data.phone
+						this.isAnonymous = Boolean(data.isAnonymous)
+						this.selectedJobStatus = data.resumesStatus
+						this.birthDateText = data.birthday
+						this.email = data.resumesEmail
+						this.ifExp = data.ifExp
 					}
 					uni.hideLoading();
 				});
@@ -274,45 +304,48 @@
 			// 保存
 			messagebtn() {
 				if (!this.userName) {
-					// this.$queue.showToast('用户名不能为空');
-					uni.showToast({
-						title: "用户名不能为空",
-						icon: "none"
-					})
-				} else if (!this.phone) {
-					// this.$queue.showToast('用户名不能为空');
-					uni.showToast({
-						title: "联系电话不能为空",
-						icon: "none"
-					})
+					this.$queue.showToast('请输入用户名');
+				} else if (!this.sex) {
+					this.$queue.showToast('请选择性别');
 				} else if (!this.birthDateText) {
-					uni.showToast({
-						title: "生日不能为空",
-						icon: "none"
-					})
-				}else if(!this.email){
-					this.$queue.showToast('邮箱不能为空')
+					this.$queue.showToast('请选择出生年月');
 				} else {
-					this.age = this.$queue.calculateAgeFromBirthday(this.birthDateText) || 0
-					let that = this
 					uni.showModal({
 						title: '温馨提示',
 						content: '确定保存信息',
 						success: e => {
 							if (e.confirm) {
-								that.$Request.postJson("/app/user/updateUser", {
-									userName: that.userName,
-									avatar: that.avatar,
-									sex: that.sex,
-									age: that.age,
-									weChatNum: that.weChatNum
+								// 老接口 /app/user/updateUser
+								// 新接口 /app/user/updateUserInfo
+								this.$Request.postJson("/app/user/updateUserInfo", {
+									userName: this.userName,
+									avatar: this.avatar,
+									sex: this.sex,
+									weChatNum: this.weChatNum,
+									isAnonymous: this.isAnonymous ? 1 : 0,
+									resumesStatus: this.selectedJobStatus,
+									resumesPhone: this.phone,
+									birthday: this.birthDateText,
+									resumesEmail: this.email,
+									ifExp: this.ifExp
 								}).then(res => {
 									if (res.code === 0) {
 										uni.showToast({
 											title: '保存成功',
 											icon: "none"
 										})
-										that.setResume()
+										if (this.scene == 1) {
+											uni.navigateTo({
+												url: `/pages/public/improvePrompt?scene=${this.scene}`
+											});
+										} else {
+											// 实际开发中可以在这里添加跳转逻辑
+											uni.$emit('updateResume')
+											setTimeout(function() {
+												uni.navigateBack()
+											}, 1000)							
+										}
+										// this.setResume()
 									} else {
 										uni.showToast({
 											title: res.msg,
@@ -325,29 +358,35 @@
 					});
 				}
 			},
-			setResume() {
-				let data = {
-					resumesStatus: this.selectedJobStatus,
-					resumesPhone: this.phone,
-					birthday: this.birthDateText,
-					resumesEmail:this.email,
-					ifExp: this.ifExp
-				}
-				this.$Request.postJson("/app/userFirst/regist", data).then((res) => {
-					if (res.code == 0) {
-						// 实际开发中可以在这里添加跳转逻辑
-						uni.$emit('updateResume')
-						setTimeout(function() {
-							uni.navigateBack()
-						}, 1000)
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: "none",
-						});
-					}
-				});
-			}
+			// setResume() {
+			// 	let data = {
+			// 		resumesStatus: this.selectedJobStatus,
+			// 		resumesPhone: this.phone,
+			// 		birthday: this.birthDateText,
+			// 		resumesEmail:this.email,
+			// 		ifExp: this.ifExp
+			// 	}
+			// 	this.$Request.postJson("/app/userFirst/regist", data).then((res) => {
+			// 		if (res.code == 0) {
+			// 			if (this.scene == 1) {
+			// 				uni.redirectTo({
+			// 					url: `/pages/public/improvePrompt?scene=${this.scene}`
+			// 				});
+			// 			} else {
+			// 				// 实际开发中可以在这里添加跳转逻辑
+			// 				uni.$emit('updateResume')
+			// 				setTimeout(function() {
+			// 					uni.navigateBack()
+			// 				}, 1000)							
+			// 			}
+			// 		} else {
+			// 			uni.showToast({
+			// 				title: res.msg,
+			// 				icon: "none",
+			// 			});
+			// 		}
+			// 	});
+			// }
 		}
 	}
 </script>
@@ -362,26 +401,26 @@
 
 	// 表单内容
 	.form-content {
-		padding: 0 40rpx;
+		padding: 0 40rpx 210rpx;
 		flex: 1;
 		display: flex;
 		flex-direction: column;
 		overflow: auto;
 
 		.form-item {
-			margin-bottom: 30rpx;
+			margin-bottom: 36rpx;
 
 			.form-label {
 				color: var(--Neutral/100, rgba(31, 44, 55, 1));
 				font-family: DM Sans;
-				font-size: 16px;
+				font-size: 28rpx;
 				font-weight: 500;
-				line-height: 22px;
+				line-height: 44rpx;
 				letter-spacing: 0.5%;
 				text-align: left;
 				display: flex;
 				align-items: center;
-				margin-bottom: 20rpx;
+				margin-bottom: 16rpx;
 
 				.required-mark {
 					color: #FF3B30;
@@ -494,31 +533,48 @@
 					text-align: left;
 				}
 			}
+			
+			.u-checkbox {
+				padding-bottom: 0;
+			}
+			
+			// 手机号
+			.phone-number {
+				height: 48rpx;
+				font-family: DM Sans;
+				font-size: 24rpx;
+				font-weight: bold;
+				color: #333;
+				line-height: 48rpx;
+			}
+			
+			// 出生年月placeholder样式
+			.placeholder-text {
+				color: #999;
+			}
 		}
 	}
 
 	// 保存按钮
-	.save-button {
-		// position: fixed;
-
-		// left: 0;
-		// right: 0;
-		height: 120rpx;
-		margin: 0 60rpx 60rpx;
-		border-radius: 24px;
-		background: #007AFF;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-
-		.save-text {
-			color: rgba(255, 255, 255, 1);
-			font-family: DM Sans;
-			font-size: 18px;
-			font-weight: 400;
-			line-height: 24px;
-			letter-spacing: 0.5%;
-			text-align: left;
+	.button-section {
+		position: fixed;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		// height: 210rpx;
+		box-shadow: 0px -4px 16px 0px rgba(0, 0, 0, 0.04);
+		background: rgba(255, 255, 255, 1);
+		.btn {
+			width: 600rpx;
+			height: 88rpx;
+			border-radius: 100px;
+			background: var(--线性渐变, linear-gradient(90.00deg, rgba(13, 39, 247, 1),rgba(19, 193, 234, 1) 100%));
+			font-size: 32rpx;
+			font-weight: bold;
+			line-height: 88rpx;
+			text-align: center;
+			color: #fff;
+			margin: 32rpx auto 32rpx;
 		}
 	}
 
@@ -620,4 +676,4 @@
 			padding-right: 32rpx;
 		}
 	}
-</style>
+</style>

+ 26 - 0
pages.json

@@ -536,6 +536,32 @@
 				"enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			}
+		},
+		{
+			"path": "pages/public/loginV2",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/public/invite/index",
+			"style": {
+				"navigationBarTitleText": "邀请",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/public/improvePrompt",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/public/invite/download",
+			"style": {
+				"navigationBarTitleText": "下载",
+				"navigationStyle": "custom"
+			}
 		}
 	],
 	"subPackages": [

+ 45 - 4
pages/my/onlineResume.vue

@@ -1,12 +1,12 @@
 <template>
-	<view class="online-resume">
+	<view class="online-resume" :class="{ pb : scene == 1 }">
 		<navBar title="在线简历" color="#000" />
 		<view class="page-content">
 			<!-- 用户信息区域 -->
 			<view class="user-profile">
 				<view class="avatar-container">
 					<image
-						:src="detail.userEntity && detail.userEntity.avatar ? detail.userEntity.avatar : '../../static/logo.png'"
+						:src="detail.userEntity && detail.userEntity.avatar ? detail.userEntity.avatar : '../../static/images/logo.jpg'"
 						class="user-avatar" mode="aspectFill"></image>
 					<view class="edit-avatar-icon" @click="goToBasicInfo">
 						<image src="../../static/images/index/Combined-Shape.svg" style="width: 32rpx;height: 32rpx;"
@@ -227,6 +227,11 @@
 					</view>
 				</view>
 			</view>
+			
+			<!-- 开启求职之旅按钮 -->
+			<view class="button-section" v-if="scene == 1">
+				<view class="button" @click="toDownload">保存并开启求职之旅</view>
+			</view>
 		</view>
 	</view>
 </template>
@@ -266,10 +271,14 @@ export default {
 				value: 'internship',
 				text: '实习',
 			}
-			]
+			],
+			scene: 0, // 0 默认,1 H5邀请
 		}
 	},
-	onLoad() {
+	onLoad(options) {
+		if (options.scene) {
+			this.scene = options.scene
+		}
 		this.getData()
 		var that = this
 		uni.$on('updateResume', () => {
@@ -539,6 +548,13 @@ export default {
 			})
 
 		},
+		
+		// H5邀请跳转到下载页面
+		toDownload() {
+			uni.navigateTo({
+				url: '/pages/public/invite/download'
+			})
+		}
 	},
 	watch: {
 		hasEcommerceExperience(newVal, oldVal) {
@@ -560,6 +576,9 @@ export default {
 	display: flex;
 	flex-direction: column;
 }
+.pb {
+	padding-bottom: 160rpx;
+}
 
 .fixed-nav {
 	position: fixed;
@@ -1249,4 +1268,26 @@ export default {
 		}
 	}
 }
+
+// 底部按钮
+.button-section {
+	position: fixed;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	padding-top: 28rpx;
+	box-shadow: 0px -4px 16px 0px rgba(0, 0, 0, 0.04);
+	background: #fff;
+	.button {
+		width: 670rpx;
+		height: 80rpx;
+		color: #fff;
+		font-size: 32rpx;
+		text-align: center;
+		line-height: 80rpx;
+		border-radius: 80rpx;
+		background: var(--线性渐变, linear-gradient(90.00deg, rgba(13, 39, 247, 1),rgba(19, 193, 234, 1) 100%));
+		margin: 24rpx auto;
+	}
+}
 </style>

+ 120 - 0
pages/public/improvePrompt.vue

@@ -0,0 +1,120 @@
+<template>
+	<view class="container">
+		<view>
+			<image src="/static/images/slogan.png" class="slogan"></image>
+			
+			<view class="content">
+				<image src="/static/images/logo-long.png" class="logo"></image>
+				<view class="tip">温馨提示</view>
+				<view class="tip-text">
+					<template v-if="scene == 1">
+						<view class="text">如果您的简历完善度不足80%</view>
+						<view class="text">我们将无法进行推荐</view>
+						<view class="text">为更好地求职机会,请充分填写简历</view>						
+					</template>
+					<template v-else>
+						<view class="text">如果您的求职期望至少有一条,</view>
+						<view class="text">且完善总分数大于等于60分</view>
+						<view class="text">我们将进行简历推荐,请充分填写简历</view>		
+					</template>
+				</view>
+			</view>
+		</view>
+		<view class="buttons">
+			<template v-if="scene == 1">
+				<view class="white-btn" @click="toOnlineResume">完善在线简历</view>
+			</template>
+			<template v-else>
+				<view class="link-btn">手动完善简历</view>
+				<view class="white-btn">附件简历一键识别</view>				
+			</template>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				scene: 0, // 0正常进入  1邀请进入
+			};
+		},
+		onLoad(options) {
+			if (options.scene) {
+				this.scene = options.scene
+			}
+		},
+		methods: {
+			toOnlineResume() {
+				uni.navigateTo({
+					url: `/pages/my/onlineResume?scene=${this.scene}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		position: relative;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		min-height: 100vh;
+		background-color: #016bf6;
+		background-image: url('/static/images/bg1.png');
+		background-size: 100%;
+		background-repeat: repeat;
+		.slogan {
+			display: block;
+			width: 634rpx;
+			height: 358rpx;
+			margin: 80rpx auto;
+		}
+		.content {
+			width: 654rpx;
+			padding: 64rpx;
+			background-color: #fff;
+			border-radius: 64rpx;
+			margin: 0 auto;
+			text-align: center;
+			.logo {
+				display: block;
+				width: 166rpx;
+				height: 46rpx;
+				margin: 0 auto;
+			}
+			.tip {
+				font-size: 40rpx;
+				font-weight: bold;
+				line-height: 64rpx;
+				color: #016bf6;
+				margin: 48rpx auto 15rpx;
+			}
+			.text {
+				font-size: 32rpx;
+				line-height: 50rpx;
+				color: #999;
+			}
+		}
+		
+		.buttons {
+			margin-bottom: 40rpx;
+			.white-btn {
+				width: 600rpx;
+				height: 88rpx;
+				font-size: 32rpx;
+				line-height: 88rpx;
+				text-align: center;
+				color: #016bf6;
+				background-color: #fff;
+				border-radius: 88rpx;
+				margin: 32rpx auto 0;
+			}
+			.link-btn {
+				text-align: center;
+				color: #fff;
+			}
+		}
+	}
+</style>

+ 126 - 0
pages/public/invite/download.vue

@@ -0,0 +1,126 @@
+<template>
+	<view class="download">
+		<view class="box">
+			<image src="/static/images/logo2.png" class="logo"></image>
+		</view>
+		<image src="/static/images/download1.png" class="img1"></image>
+		<image src="/static/images/download2.png" class="img2"></image>
+		<view class="download-btn" @click="download">下载亿职赞APP</view>
+		
+		<view v-if="showTip" @click="handleHideTip" class="downloadbox" style="position: fixed;top: 0;left: 0;width: 100%;height: 100vh;z-index: 1000;background: rgba(000,000,000,0.6);">
+			<image src="/static/images/tip.png" style="position: fixed;top:30px;right: 30px;width: 80%;" mode="widthFix"/>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				showTip: false
+			};
+		},
+		methods: {
+			download() {
+				//#ifndef H5
+					return;
+				//#endif
+				
+				const u = window.navigator.userAgent;
+				const ua = u.toLowerCase();
+				if (ua.match(/MicroMessenger/i) == 'micromessenger') {
+					if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
+						that.showTip = true;
+					} else if (u.indexOf('iPhone') > -1) { //苹果手机
+						this.$queue.showToast('iOS系统请在APPStore搜索“亿职赞”');
+					}
+				} else {
+					if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
+						// 小米应用商店
+						if (ua.match(/xiaomi/i) == 'xiaomi') {
+							window.location.href = 'https://app.mi.com/details?id=uni.app.UNI0B0096D';
+						
+						// vivo应用商店
+						} else if (ua.match(/vivo/i) == 'vivo') {
+							window.location.href = 'https://h5coml.vivo.com.cn/h5coml/appdetail_h5/browser_v2/index.html?appId=3629014';
+							return this.$queue.showToast('vivo系统请在应用商店搜索“亿职赞”');
+							
+						// OPPO应用商店
+						} else if (ua.match(/oppo/i) == 'oppo') {
+							window.location.href = 'https://api.appstore.oppomobile.com/app/detail?packageName=uni.app.UNI0B0096D';
+						
+						// 荣耀应用商店
+						} else if (ua.match(/honor/i) == 'honor') {
+							window.location.href = 'https://appgallery.huawei.com/app/C116155907'; // 替换为实际应用ID
+						
+						// 华为应用市场
+						} else if (ua.match(/huawei/i) == 'huawei') {
+							window.location.href = 'https://appgallery.huawei.com/app/C116155907'; // 替换为实际应用ID
+						
+						// 三星应用商店
+						} else if (ua.match(/samsung/i) == 'samsung') {
+							window.location.href = 'https://galaxystore.samsung.com/detail/uni.app.UNI0B0096D';
+						
+						// 魅族应用商店
+						} else if (ua.match(/meizu/i) == 'meizu') {
+							window.location.href = 'https://app.meizu.com/apps/uni.app.UNI0B0096D';
+						
+						// 默认跳转(Google Play或官方下载页)
+						} else {
+							this.$queue.showToast('请在手机应用市场内搜索“亿职赞”')
+						}
+						
+					} else if (u.indexOf('iPhone') > -1) { //苹果手机
+						this.$queue.showToast('iOS系统请在APPStore搜索“亿职赞”')
+					}
+						
+				}
+			},
+			handleHideTip() {
+				this.showTip = false
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.download {
+		min-height: 100vh;
+		background-image: url('/static/images/bg1.png'), linear-gradient(135deg, #0d27f7, #12c1ea);
+		background-size: 100%;
+		background-repeat: repeat;
+		.box {
+			padding-top: 40rpx;
+		}
+		.logo {
+			display: block;
+			width: 136rpx;
+			height: 136rpx;
+			margin-left: 64rpx;
+		}
+		.img1 {
+			display: block;
+			width: 516rpx;
+			height: 258rpx;
+			margin: 16rpx auto 68rpx;
+		}
+		.img2 {
+			display: block;
+			width: 750rpx;
+			height: 554rpx;
+			margin-bottom: 80rpx;
+		}
+		.download-btn {
+			width: 700rpx;
+			height: 88rpx;
+			color: #016bf6;
+			font-size: 32rpx;
+			font-weight: bold;
+			line-height: 88rpx;
+			text-align: center;
+			background-color: #fff;
+			border-radius: 88rpx;
+			margin: 0 auto 40rpx;
+		}
+	}
+</style>

+ 92 - 0
pages/public/invite/index.vue

@@ -0,0 +1,92 @@
+<template>
+	<view class="container">
+		<image src="/static/images/logo-long.png" class="logo"></image>
+		<image src="/static/images/invite.png" class="main-img"></image>
+		<view class="company-info">
+			<view class="name">{{ userName }}</view>
+			<view class="company-name">{{ companyName }}</view>
+		</view>
+		<view class="tip">诚邀您加入亿职赞</view>
+		<u-button class="button" shape="circle" :hair-line="false" @click="join">立即加入</u-button>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				inviteCode: '', // 邀请码
+				userName: '', // 用户名
+				companyName: '' // 公司名
+			};
+		},
+		onLoad(options) {
+			if (options.inviteCode) {
+				this.inviteCode = decodeURIComponent(options.inviteCode)
+			}
+			if (options.userName) {
+				this.userName = decodeURIComponent(options.userName)
+			}
+			if (options.companyName) {
+				this.companyName = decodeURIComponent(options.companyName)
+			}
+		},
+		methods: {
+			join() {
+				// type: 2.手机验证码登录
+				// scene: 1.H5邀请
+				uni.navigateTo({
+					url: `/pages/public/loginphone?type=2&scene=1&inviteCode=${this.inviteCode}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		padding: 72rpx 30rpx 0;
+	}
+	.logo {
+		display: block;
+		width: 204rpx;
+		height: 56rpx;
+		margin: 0 auto 92rpx;
+	}
+	.main-img {
+		display: block;
+		width: 400rpx;
+		height: 400rpx;
+		margin: 0 auto 72rpx;
+	}
+	.company-info {
+		width: 670rpx;
+		text-align: center;
+		margin: 0 auto 72rpx;
+		.name {
+			font-size: 40rpx;
+			font-weight: bold;
+			line-height: 52rpx;
+			color: #333333;
+			margin-bottom: 12rpx;
+		}
+		.company-name {
+			line-height: 36rpx;
+			color: #999999;
+		}
+	}
+	.tip {
+		text-align: center;
+		margin-bottom: 100rpx;
+		font-weight: bold;
+		font-size: 48rpx;
+	}
+	.button {
+		width: 686rpx;
+		height: 90rpx;
+		border-radius: 126px;
+		background: var(--线性渐变, linear-gradient(90.00deg, rgba(13, 39, 247, 1),rgba(19, 193, 234, 1) 100%));
+		color: #fff;
+		font-size: 32rpx;
+	}
+</style>

+ 212 - 0
pages/public/loginV2.vue

@@ -0,0 +1,212 @@
+<template>
+	<view class="container">
+		<view class="main-container">
+			<view class="logo"></view>
+			<view class="main-img"></view>
+			<view class="phone-number">13588888888</view>
+			<view class="agreement">
+				<view class="check-box" @click="checked = !checked">
+					<image src="@/static/images/jobApplicant/check.svg" v-if="checked" mode="scaleToFill" />
+					<image src="@/static/images/jobApplicant/border.svg" v-else mode="scaleToFill" />
+				</view>
+				<view class="content">
+					已阅读并同意<navigator url="/my/setting/xieyi">《亿职赞用户协议》</navigator>
+					和<navigator url="/my/setting/mimi">《隐私协议》</navigator>,允许亿职赞统一管理本人账号信息					
+				</view>
+			</view>
+			<u-button class="login-btn" shape="circle" :hairline="false" @click="login">一键登录</u-button>
+			<view class="other-login">
+				<view class="other-type">
+					<view class="icon"></view>
+					<view class="text">微信登录</view>
+				</view>
+				<view class="other-type">
+					<view class="icon"></view>
+					<view class="text">其他手机登录</view>
+				</view>
+			</view>
+		</view>
+		<view class="footer">
+			<view class="link">企业套餐咨询</view>
+			<view class="link">投诉举报</view>
+			<view class="link">资质信息</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				checked: false
+			}
+		},
+		onLoad() {
+			this.handleLogin()
+		},
+		methods: {
+			login() {
+				if (!this.checked) {
+					uni.showToast({
+						title: '请阅读并同意协议',
+						icon: 'none'
+					})
+					return
+				}
+				this.handleLogin()
+				console.log('点击登录')
+			},
+			handleLogin() {
+				uni.login({
+					provider: 'univerify',
+					univerifyStyle: {
+					    fullScreen: true,
+						icon: {
+							path: 'static/images/avator.png',
+						},
+						authButton: {
+							normalColor: '#016BF6'
+							// "normalColor": "#3479f5", // 授权按钮正常状态背景颜色 默认值:#3479f5
+							// "highlightColor": "#2861c5",  // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
+							// "disabledColor": "#73aaf5",  // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
+						},
+						otherLoginButton: {
+							visible: false,
+						},
+						privacyTerms: {
+							defaultCheckBoxState: false,
+							uncheckedImage: 'static/images/jobApplicant/border.svg',
+							checkedImage: 'static/images/jobApplicant/check.svg',
+							privacyItems: [
+								{
+									"url": "/my/setting/xieyi", // 点击跳转的协议详情页面
+									"title": "亿职赞用户协议" // 协议名称
+								},
+								{
+									"url": "/my/setting/mimi", // 点击跳转的协议详情页面
+									"title": "隐私协议" // 协议名称
+								},
+							]
+						},
+						buttons: {
+							iconWidth: '60px',
+							list: [
+								{
+									provider: 'weixin',
+									iconPath: 'static/images/avator.png'
+								},
+								{
+									provider: 'phone',
+									iconPath: 'static/images/avator.png'
+								}
+							]
+						}
+					},
+					success: (res) => {
+						console.log(JSON.parse(JSON.stringify(res)))
+					},
+					fail: (err) => {
+						console.log(JSON.parse(JSON.stringify(err)))
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		padding: 0 70rpx;
+		.logo {
+			width: 204rpx;
+			height: 56rpx;
+			background-color: gray;
+			margin: 72rpx auto 92rpx;
+		}
+		.main-img {
+			width: 400rpx;
+			height: 400rpx;
+			background-color: gray;
+			margin: 0 auto 34rpx;
+		}
+		.phone-number {
+			font-size: 56rpx;
+			font-weight: bold;
+			line-height: 68rpx;
+			text-align: center;
+		}
+		.agreement {
+			display: flex;
+			align-items: flex-start;
+			font-size: 24rpx;
+			color: #605d67;
+			margin: 40rpx auto 68rpx;
+			.check-box {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin-right: 16rpx;
+				
+				image {
+					width: 24rpx;
+					height: 24rpx;
+					margin-top: 6rpx;
+				}
+			}
+			.content {
+				display: flex;
+				flex-wrap: wrap;
+				word-wrap: break-word;
+				flex: 1;
+			}
+			navigator {
+				color: #016bf6;
+			}
+		}
+		.login-btn {
+			width: 600rpx;
+			height: 88rpx;
+			border-radius: 100px;
+			background: var(--线性渐变, linear-gradient(90.00deg, rgba(13, 39, 247, 1),rgba(19, 193, 234, 1) 100%));
+			text-align: center;
+			line-height: 88rpx;
+			color: #fff;
+			font-size: 32rpx;
+			font-weight: bold;
+		}
+		.other-login {
+			display: flex;
+			justify-content: center;
+			margin-top: 80rpx;
+			.other-type {
+				margin: 0 24rpx;
+			}
+			.icon {
+				width: 60rpx;
+				height: 60rpx;
+				background-color: gray;
+				margin: 0 auto 8rpx;
+			}
+			.text {
+				text-align: center;
+				font-size: 24rpx;
+				line-height: 32rpx;
+				color: rgb(153, 153, 153);
+			}
+		}
+		.footer {
+			display: flex;
+			justify-content: center;
+			margin-bottom: 40rpx;
+			.link {
+				font-size: 28rpx;
+				color: #999999;
+				margin: 0 14rpx;
+			}
+		}
+	}
+</style>

+ 85 - 66
pages/public/loginphone.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="container">
 		<view class="wrapper">
-			<nav-bar title="登录" color="#000"></nav-bar>
+			<nav-bar title="注册登录" color="#000"></nav-bar>
 
 			<!-- <view style="text-align: center;">
 				<image src="../../static/logo.png" style="border-radius: 64upx;"></image>
@@ -33,13 +33,13 @@
 				<view class="forgot-password" v-if="type ==1">
 					<view @click="forget">忘记密码</view>
 				</view>
-				<button class="confirm-btn" @click="toLogin">登录</button>
+				<button class="confirm-btn" @click="toLogin">下一步</button>
 
-				<view style="margin-top: 32rpx; text-align: center">
+				<!-- view style="margin-top: 32rpx; text-align: center">
 					<view>
 						<text class="register-section" @click="register()">注册</text>
 					</view>
-				</view>
+				</view> -->
 			</view>
 		</view>
 	</view>
@@ -60,7 +60,9 @@
 				sending: false,
 				sendTime: "获取验证码",
 				count: 60,
-				type: 0
+				type: 0,
+				scene: 0, // 0 默认,1 H5邀请
+				inviteCode: '', // 邀请码
 			};
 		},
 		components: {
@@ -69,6 +71,12 @@
 		onLoad(options) {
 			console.log(options);
 			this.type = options.type;
+			if (options.scene) {
+				this.scene = options.scene
+			}
+			if (options.inviteCode) {
+				this.inviteCode = options.inviteCode
+			}
 		},
 		methods: {
 			forget() {
@@ -76,11 +84,11 @@
 					url: "/pages/public/forgetPwd",
 				});
 			},
-			register() {
-				uni.navigateTo({
-					url: "/pages/public/register",
-				});
-			},
+			// register() {
+			// 	uni.navigateTo({
+			// 		url: "/pages/public/register",
+			// 	});
+			// },
 			inputChange(e) {
 				const key = e.currentTarget.dataset.key;
 				this[key] = e.detail.value;
@@ -169,9 +177,11 @@
 					if (this.type == 2) {
 						params = {
 							...params,
-							msg: code
+							msg: code,
+							inviteCode: this.inviteCode
 						}
-						url = '/app/Login/registerCode'
+						// url = '/app/Login/registerCode'
+						url = '/app/Login/registerAndLogin'
 					}
 					this.$Request
 						.post(url, params)
@@ -188,46 +198,74 @@
 								uni.hideLoading();
 								this.$queue.setData("userType", res.user.userType);
 								this.$queue.connectSocket()
-								//判断是否开启身份选择 是/否
-								this.$Request.get("/app/common/type/339").then((rest) => {
-									if (rest.code == 0) {
-										if (rest.data.value == "是") {
-											// 这里是跳转到选择职场身份的界面
-											uni.reLaunch({
-												url: "/pages/public/selectIdentity/selectIdentity",
-											});
+								
+								// 手机验证码&H5邀请
+								if (this.type == 2 && this.scene == 1) {
+									// 跳转至基本信息页面
+									uni.redirectTo({
+										url: `/package/jobIntention/basicInfo?scene=${this.scene}`
+									});
+								} else {
+									//判断是否开启身份选择 是/否
+									this.$Request.get("/app/common/type/339").then((rest) => {
+										if (rest.code == 0) {
+											if (rest.data.value == "是") {
+												// 这里是跳转到选择职场身份的界面
+												uni.reLaunch({
+													url: "/pages/public/selectIdentity/selectIdentity",
+												});
+											} else {
+												if (res.user.userType == 2) { //企业
+													// 原有的。判断第一次根据userType  ==null
+													uni.reLaunch({
+														url: "/pages/my/index",
+													});
+													// 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
+													// let firstLogin = uni.getStorageSync("firstLogin") || false;
+													// if (!firstLogin) {
+													//   uni.navigateTo({
+													//     url: "/pages/my/jobApplicant/guidePage",
+													//   });
+													// } else {
+													//   uni.reLaunch({
+													//     url: "/pages/my/index",
+													//   });
+													// }
+												} else if (res.user.userType == 1) {
+													uni.reLaunch({
+														url: "/pages/my/index",
+													});
+													// 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
+													// let firstLogin = uni.getStorageSync("firstLogin") || false;
+													// if (!firstLogin) {
+													//   uni.navigateTo({
+													//     url: "/pages/my/jobApplicant/guidePage",
+													//   });
+													// } else {
+													//   uni.reLaunch({
+													//     url: "/pages/my/index",
+													//   });
+													// }
+												} else {
+													//表示是第一次进来,走引导页
+													uni.navigateTo({
+														url: "/pages/my/jobApplicant/guidePage",
+													});
+												}
+											}
 										} else {
+
 											if (res.user.userType == 2) { //企业
 												// 原有的。判断第一次根据userType  ==null
 												uni.reLaunch({
 													url: "/pages/my/index",
 												});
-												// 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
-												// let firstLogin = uni.getStorageSync("firstLogin") || false;
-												// if (!firstLogin) {
-												//   uni.navigateTo({
-												//     url: "/pages/my/jobApplicant/guidePage",
-												//   });
-												// } else {
-												//   uni.reLaunch({
-												//     url: "/pages/my/index",
-												//   });
-												// }
+
 											} else if (res.user.userType == 1) {
 												uni.reLaunch({
 													url: "/pages/my/index",
 												});
-												// 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
-												// let firstLogin = uni.getStorageSync("firstLogin") || false;
-												// if (!firstLogin) {
-												//   uni.navigateTo({
-												//     url: "/pages/my/jobApplicant/guidePage",
-												//   });
-												// } else {
-												//   uni.reLaunch({
-												//     url: "/pages/my/index",
-												//   });
-												// }
+
 											} else {
 												//表示是第一次进来,走引导页
 												uni.navigateTo({
@@ -235,31 +273,12 @@
 												});
 											}
 										}
-									} else {
-
-										if (res.user.userType == 2) { //企业
-											// 原有的。判断第一次根据userType  ==null
-											uni.reLaunch({
-												url: "/pages/my/index",
-											});
-
-										} else if (res.user.userType == 1) {
-											uni.reLaunch({
-												url: "/pages/my/index",
-											});
-
-										} else {
-											//表示是第一次进来,走引导页
-											uni.navigateTo({
-												url: "/pages/my/jobApplicant/guidePage",
-											});
-										}
-									}
-								});
+									});
 
-								// uni.switchTab({
-								// 	url: '/pages/my/index'
-								// })
+									// uni.switchTab({
+									// 	url: '/pages/my/index'
+									// })
+								}
 							} else {
 								uni.hideLoading();
 								this.$queue.showToast(res.msg);

BIN
static/images/bg1.png


BIN
static/images/download1.png


BIN
static/images/download2.png


BIN
static/images/invite.png


BIN
static/images/logo-long.png


BIN
static/images/logo.jpg


BIN
static/images/logo2.png


BIN
static/images/slogan.png