Browse Source

Merge branch 'master' of https://git.nanodreamtech.com/Boss/yizhizan-h5

wkw 3 days ago
parent
commit
ea955a0e6c

+ 566 - 571
App.vue

@@ -1,590 +1,585 @@
 <script>
-	export default {
-		onLaunch: function() {
-			let that = this
-			// #ifdef APP || H5
-			uni.setStorageSync('isDial', false)
-			setInterval(() => {
-				// #ifdef H5 || APP
-				let userId = uni.getStorageSync('userId')
-				if (uni.getStorageSync('token')) {
-					that.$Request.get('/app/chat/selectUserChatVideo').then(res => {
-						if (res.code == 0 && res.data) {
-							// videoStatus 状态  1是发起 2是通话中 3是已取消 4是已拒绝 5是已结束  不过他只会返回1和2
-							if (res.data.videoStatus) {
-								console.log(res.data)
-								uni.setStorageSync('videoStatus', res.data.videoStatus)
-								uni.setStorageSync('messageType', res.data.messageType) //4视频通话 5语音通话
-								if (res.data.videoStatus == 1) {
-									console.log(uni.getStorageSync('isDial'))
-									if (!uni.getStorageSync('isDial')) {
-										uni.setStorageSync('isDial',
-											true) //跳转通话页面  做标识  true 已跳转 false 未跳转
-										uni.navigateTo({
-											url: '/my/videoVoice/videoVoice?byUserId=' +
-												res.data.userId +
-												'&chatContentId=' + res.data.chatContentId +
-												'&isRol=2&messageType=' + res.data
-												.messageType + '&chatConversationId=' + res
-												.data.chatConversationId + '&postPushId=' + res
-												.data
-												.postPushId + '&resumesId=' + res.data
-												.resumesId + '&userType=' + res.data.userType
-										})
-									}
-								}
-							}
+export default {
+  onLaunch: function () {
+    let that = this;
+    // #ifdef APP
+    // 检查是否首次启动 - 引导页逻辑
+    let firstUpload = uni.getStorageSync("firstUpload") || false;
+    if (!firstUpload) {
+      // 标记已经显示过引导页
+      uni.setStorageSync("firstUpload", true);
+      // 跳转到引导页
+      uni.navigateTo({
+        url: "/pages/my/jobApplicant/startPage",
+        success: () => {
+          // 跳转成功后,不再执行后面的逻辑
+          return;
+        },
+      });
+      // 这里需要return,避免执行后面的代码
+      return;
+    }
+    // #endif
 
-						} else {
-							uni.setStorageSync('videoStatus', 4)
-						}
-					})
-				}
-				// #endif
+    // #ifdef APP || H5
+    uni.setStorageSync("isDial", false);
+    setInterval(() => {
+      // #ifdef H5 || APP
+      let userId = uni.getStorageSync("userId");
+      if (uni.getStorageSync("token")) {
+        that.$Request.get("/app/chat/selectUserChatVideo").then((res) => {
+          if (res.code == 0 && res.data) {
+            // videoStatus 状态  1是发起 2是通话中 3是已取消 4是已拒绝 5是已结束  不过他只会返回1和2
+            if (res.data.videoStatus) {
+              console.log(res.data);
+              uni.setStorageSync("videoStatus", res.data.videoStatus);
+              uni.setStorageSync("messageType", res.data.messageType); //4视频通话 5语音通话
+              if (res.data.videoStatus == 1) {
+                console.log(uni.getStorageSync("isDial"));
+                if (!uni.getStorageSync("isDial")) {
+                  uni.setStorageSync("isDial", true); //跳转通话页面  做标识  true 已跳转 false 未跳转
+                  uni.navigateTo({
+                    url:
+                      "/my/videoVoice/videoVoice?byUserId=" +
+                      res.data.userId +
+                      "&chatContentId=" +
+                      res.data.chatContentId +
+                      "&isRol=2&messageType=" +
+                      res.data.messageType +
+                      "&chatConversationId=" +
+                      res.data.chatConversationId +
+                      "&postPushId=" +
+                      res.data.postPushId +
+                      "&resumesId=" +
+                      res.data.resumesId +
+                      "&userType=" +
+                      res.data.userType,
+                  });
+                }
+              }
+            }
+          } else {
+            uni.setStorageSync("videoStatus", 4);
+          }
+        });
+      }
+      // #endif
+    }, 5000);
+    // #endif
+    // #ifdef MP-WEIXIN
+    if (!uni.getStorageSync("token")) {
+      uni.login({
+        provider: "weixin",
+        success: function (loginRes) {
+          console.log(loginRes, "************");
+          let data = {
+            code: loginRes.code,
+          };
+          that.$Request.get("/app/Login/wxLogin", data).then((res) => {
+            if (res.code == 0) {
+              uni.setStorageSync("openId", res.data.open_id);
+              uni.setStorageSync("unionId", res.data.unionId);
+              uni.setStorageSync("sessionkey", res.data.session_key);
+              let inviterCode = "";
+              if (uni.getStorageSync("inviterCode")) {
+                inviterCode = uni.getStorageSync("inviterCode");
+              }
+              let sendData = {
+                openId: uni.getStorageSync("openId"),
+                unionId: uni.getStorageSync("unionId"),
+                userName: "游客",
+                avatar: "",
+                sex: "1", //性别
+                inviterCode: inviterCode, //别人登录进来携带你的邀请码
+              };
+              let phoneNum = false;
+              uni.setStorageSync("sendDataList", sendData);
+              that.$Request.getT("/app/common/type/188").then((ret) => {
+                if (ret.code == 0) {
+                  if (ret.data && ret.data.value && ret.data.value == "是") {
+                    phoneNum = true;
+                    let flag = res.data.flag;
+                    if (flag == "2" && phoneNum) {
+                      //需要授权手机号则走手机号授权
+                      uni.setStorageSync("weixinPhone", true);
+                    } else {
+                      //不需要手机号则则直接走授权登录
+                      uni.setStorageSync("weixinPhone", false);
+                    }
+                  } else {
+                    uni.setStorageSync("weixinPhone", false);
+                  }
+                }
+              });
+            }
+          });
+        },
+      });
+    }
+    // #endif
 
+    setInterval((d) => {
+      //定时器,定时去调取聊天未读消息
+      let userId = uni.getStorageSync("userId");
+      if (userId) {
+        this.$Request.get("/app/chat/selectChatCount").then((res) => {
+          if (res.code === 0) {
+            let chatCount = res.data.chatCount;
+            let messageCount = res.data.messageCount;
 
-			}, 5000)
-			// #endif
-			// #ifdef MP-WEIXIN
-			if (!uni.getStorageSync('token')) {
-				uni.login({
-					provider: 'weixin',
-					success: function(loginRes) {
-						console.log(loginRes, '************')
-						let data = {
-							code: loginRes.code,
-						}
-						that.$Request.get('/app/Login/wxLogin', data).then(res => {
-							if (res.code == 0) {
-								uni.setStorageSync('openId', res.data.open_id)
-								uni.setStorageSync('unionId', res.data.unionId)
-								uni.setStorageSync('sessionkey', res.data.session_key)
-								let inviterCode = '';
-								if (uni.getStorageSync('inviterCode')) {
-									inviterCode = uni.getStorageSync('inviterCode')
-								}
-								let sendData = {
-									openId: uni.getStorageSync('openId'),
-									unionId: uni.getStorageSync('unionId'),
-									userName: '游客',
-									avatar: '',
-									sex: '1', //性别
-									inviterCode: inviterCode //别人登录进来携带你的邀请码
-								};
-								let phoneNum = false
-								uni.setStorageSync('sendDataList', sendData)
-								that.$Request.getT('/app/common/type/188').then(ret => {
-									if (ret.code == 0) {
-										if (ret.data && ret.data.value && ret.data.value ==
-											'是') {
-											phoneNum = true;
-											let flag = res.data.flag;
-											if (flag == '2' && phoneNum) { //需要授权手机号则走手机号授权
-												uni.setStorageSync('weixinPhone', true)
-											} else { //不需要手机号则则直接走授权登录
-												uni.setStorageSync('weixinPhone', false)
-											}
-										} else {
-											uni.setStorageSync('weixinPhone', false)
-										}
-									}
-								});
+            uni.setStorageSync("messageCount", messageCount);
 
-							}
-						})
+            let num = chatCount + messageCount;
+            if (num == 0) {
+              uni.removeTabBarBadge({
+                index: 1,
+              });
+              return;
+            }
+            uni.setTabBarBadge({
+              index: 1,
+              text: num + "",
+            });
+          }
+        });
+      }
+    }, 6000);
 
-					}
-				});
-			}
-			// #endif
+    //#ifdef APP-PLUS
+    // APP检测更新 具体打包流程可以参考:https://ask.dcloud.net.cn/article/35667
+    plus.screen.lockOrientation("portrait-primary"); //竖屏正方向锁定
+    //获取是否热更新过
+    const updated = uni.getStorageSync("updated"); // 尝试读取storage
 
-			setInterval(d => { //定时器,定时去调取聊天未读消息
-				let userId = uni.getStorageSync('userId')
-				if (userId) {
-					this.$Request.get('/app/chat/selectChatCount').then(res => {
-						if (res.code === 0) {
-							let chatCount = res.data.chatCount
-							let messageCount = res.data.messageCount
+    if (updated.completed === true) {
+      // 如果上次刚更新过
+      // 删除安装包及安装记录
+      console.log("安装记录被删除,更新成功");
+      uni.removeSavedFile({
+        filePath: updated.packgePath,
+        success: (res) => {
+          uni.removeStorageSync("updated");
+        },
+      });
+    } else if (updated.completed === false) {
+      uni.removeStorageSync("updated");
+      plus.runtime.install(updated.packgePath, {
+        force: true,
+      });
+      uni.setStorage({
+        key: "updated",
+        data: {
+          completed: true,
+          packgePath: updated.packgePath,
+        },
+        success: (res) => {
+          console.log("成功安装上次的更新,应用需要重启才能继续完成");
+        },
+      });
+      uni.showModal({
+        title: "温馨提示",
+        content: "应用将重启以完成更新",
+        showCancel: false,
+        complete: () => {
+          plus.runtime.restart();
+        },
+      });
+    } else {
+      //获取当前系统版本信息
+      plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
+        //请求后台接口 解析数据 对比版本
+        that.$Request.getT("/app/user/selectNewApp").then((res) => {
+          res = res.data[0];
+          if (res.wgtUrl && widgetInfo.version < res.version) {
+            let downloadLink = "";
+            let androidLink = res.androidWgtUrl;
+            let iosLink = res.iosWgtUrl;
+            let ready = false;
+            //校验是是不是热更新
+            if (res.wgtUrl.match(RegExp(/.wgt/))) {
+              // 判断系统类型
+              if (plus.os.name.toLowerCase() === "android") {
+                console.log("安卓系统");
+                if (androidLink && androidLink !== "#") {
+                  // 我这里默认#也是没有地址,请根据业务自行修改
+                  console.log("发现下载地址");
+                  // 安卓:创建下载任务
+                  if (androidLink.match(RegExp(/.wgt/))) {
+                    console.log("确认wgt热更新包");
+                    downloadLink = androidLink;
+                    ready = true;
+                  } else {
+                    console.log("安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序");
+                  }
+                } else {
+                  console.log("下载地址是空的,无法继续");
+                }
+              } else {
+                console.log("苹果系统");
+                if (iosLink && iosLink !== "#") {
+                  // 我这里默认#也是没有地址,请根据业务自行修改
+                  console.log("发现下载地址");
+                  // 苹果(A):进行热更新(如果iosLink是wgt更新包的下载地址)判断文件名中是否含有.wgt
+                  if (iosLink.match(RegExp(/.wgt/))) {
+                    console.log("确认wgt热更新包");
+                    downloadLink = iosLink;
+                    ready = true;
+                  } else {
+                    console.log("苹果只支持.wgt强制更新");
+                  }
+                } else {
+                  console.log("下载地址是空的,无法继续");
+                }
+              }
+              if (ready) {
+                console.log("任务开始");
+                let downloadTask = uni.downloadFile({
+                  url: downloadLink,
+                  success: (res) => {
+                    if (res.statusCode === 200) {
+                      // 保存下载的安装包
+                      console.log("保存安装包");
+                      uni.saveFile({
+                        tempFilePath: res.tempFilePath,
+                        success: (res) => {
+                          const packgePath = res.savedFilePath;
+                          // 保存更新记录到stroage,下次启动app时安装更新
+                          uni.setStorage({
+                            key: "updated",
+                            data: {
+                              completed: false,
+                              packgePath: packgePath,
+                            },
+                            success: () => {
+                              console.log("成功保存记录");
+                            },
+                          });
+                          // 任务完成,关闭下载任务
+                          console.log(
+                            "任务完成,关闭下载任务,下一次启动应用时将安装更新"
+                          );
+                          downloadTask.abort();
+                          downloadTask = null;
+                        },
+                      });
+                    }
+                  },
+                });
+              } else {
+                console.log("下载地址未准备,无法开启下载任务");
+              }
+            } else {
+              //不是热更新是在线更新 校验是否强制升级
+              if (res.method == "true") {
+                uni.showModal({
+                  showCancel: false,
+                  confirmText: "立即更新",
+                  title: "发现新版本",
+                  content: res.des,
+                  success: (res) => {
+                    if (res.confirm) {
+                      that.$queue.showLoading("下载中...");
+                      if (uni.getSystemInfoSync().platform == "android") {
+                        uni.downloadFile({
+                          url: androidLink,
+                          success: (downloadResult) => {
+                            if (downloadResult.statusCode === 200) {
+                              plus.runtime.install(
+                                downloadResult.tempFilePath,
+                                {
+                                  force: false,
+                                },
+                                (d) => {
+                                  console.log("install success...");
+                                  plus.runtime.restart();
+                                },
+                                (e) => {
+                                  console.error("install fail...");
+                                }
+                              );
+                            }
+                          },
+                        });
+                      }
+                      if (uni.getSystemInfoSync().platform == "ios") {
+                        plus.runtime.openURL(iosLink, function (res) {});
+                      }
+                    } else if (res.cancel) {
+                      console.log("取消");
+                    }
+                  },
+                });
+              } else {
+                uni.showModal({
+                  title: "发现新版本",
+                  confirmText: "立即更新",
+                  cancelText: "下次更新",
+                  content: res.des,
+                  success: (res) => {
+                    if (res.confirm) {
+                      that.$queue.showLoading("下载中...");
+                      if (uni.getSystemInfoSync().platform == "android") {
+                        uni.downloadFile({
+                          url: androidLink,
+                          success: (downloadResult) => {
+                            if (downloadResult.statusCode === 200) {
+                              plus.runtime.install(
+                                downloadResult.tempFilePath,
+                                {
+                                  force: false,
+                                },
+                                (d) => {
+                                  console.log("install success...");
+                                  plus.runtime.restart();
+                                },
+                                (e) => {
+                                  console.error("install fail...");
+                                }
+                              );
+                            }
+                          },
+                        });
+                      }
+                      if (uni.getSystemInfoSync().platform == "ios") {
+                        plus.runtime.openURL(iosLink, function (res) {});
+                      }
+                    } else if (res.cancel) {
+                      console.log("取消");
+                    }
+                  },
+                });
+              }
+            }
+          }
+        });
+      });
+    }
 
-							uni.setStorageSync('messageCount', messageCount)
+    //#endif
+  },
+  onShow: function () {
+    // uni.removeStorageSync('firstLogin');
+    // uni.removeStorageSync('firstUpload');
+    //关键词过滤  602
+    this.$Request.getT("/app/common/type/602").then((res) => {
+      if (res.code == 0) {
+        if (res.data && res.data.value) {
+          this.$queue.setData("chatSearchKeys", res.data.value);
+        }
+      }
+    });
+    // 小程序是否上线
+    // this.$Request.get('/app/common/type/238').then(res => {
+    // 	if (res.code == 0) {
+    // 		// #ifdef MP-WEIXIN
+    // 		this.$queue.setData('XCXIsSelect', res.data.value);
+    // 		// #endif
+    // 		// #ifndef MP-WEIXIN
+    // 		this.$queue.setData('XCXIsSelect', '是');
+    // 		// #endif
+    // 	}
+    // });
+    this.$Request.get("/app/common/type/257").then((res) => {
+      if (res.code == 0) {
+        // #ifdef MP-WEIXIN
+        this.$queue.setData("XCXIsSelect", res.data.value);
+        // #endif
+        // #ifndef MP-WEIXIN
+        this.$queue.setData("XCXIsSelect", "是");
+        // #endif
+      }
+    });
+    //用户客服
+    // 企业微信链接 274
+    this.$Request.get("/app/common/type/322").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("kefu", res.data.value);
+      }
+    });
+    // 企业微信客服APPID 275
+    this.$Request.get("/app/common/type/324").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("kefuAppid", res.data.value);
+      }
+    });
+    //企业端客服
+    this.$Request.get("/app/common/type/321").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("kefuq", res.data.value);
+      }
+    });
+    // 企业微信客服APPID 275
+    this.$Request.get("/app/common/type/323").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("kefuAppidq", res.data.value);
+      }
+    });
+    // 企业会员每天免费联系次数 421
+    this.$Request.get("/app/common/type/421").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("vipMsgNum", res.data.value);
+      }
+    });
+    // 企业非会员每天免费联系次数 422
+    this.$Request.get("/app/common/type/422").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("msgNum", res.data.value);
+      }
+    });
+    // 企业会员每次联系价格 419
+    this.$Request.get("/app/common/type/419").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("vipMsgPrice", res.data.value);
+      }
+    });
+    // 企业非会员每次联系价格 420
+    this.$Request.get("/app/common/type/420").then((res) => {
+      if (res.code == 0) {
+        this.$queue.setData("msgPrice", res.data.value);
+      }
+    });
+    //腾讯云实时语音SDKAppID
+    this.$Request.get("/app/common/type/814").then((res) => {
+      if (res.code == 0) {
+        uni.setStorageSync("sdkAppId", res.data.value);
+      }
+    });
+    console.log("App Show");
+    // #ifdef H5
+    // let sysTem = uni.getSystemInfoSync()
+    // if (sysTem.model == 'PC') { //如果是pc访问移动端域名
+    // 	this.$Request.get('/app/common/type/432').then(res => {
+    // 		if (res.code == 0) {
+    // 			if (res.data.value == '是') {
+    // 				this.$Request.get('/app/common/type/433').then(ree => {
+    // 					if (ree.code == 0) {
+    // 						if (ree.data.value) {
+    // 							window.location.href = ree.data.value;
+    // 						}
+    // 					}
+    // 				})
+    // 			}
+    // 		}
+    // 	})
+    // }
+    // #endif
+    // #ifdef APP-PLUS
 
-							let num = chatCount + messageCount
-							if (num == 0) {
-								uni.removeTabBarBadge({
-									index: 1
-								})
-								return;
-							}
-							uni.setTabBarBadge({
-								index: 1,
-								text: num + ""
-							})
+    if (uni.getSystemInfoSync().platform == "android") {
+      let clientid = plus.push.getClientInfo().clientid;
 
-						}
-					});
-				}
-			}, 6000);
+      let userId = this.$queue.getData("userId");
+      if (userId) {
+        this.$Request
+          .postT("/app/user/updateClientId?clientId=" + clientid + "&userId=" + userId)
+          .then((res) => {});
+      }
+    }
 
-			//#ifdef APP-PLUS
-			// APP检测更新 具体打包流程可以参考:https://ask.dcloud.net.cn/article/35667
-			plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定
-			//获取是否热更新过
-			const updated = uni.getStorageSync('updated'); // 尝试读取storage
+    //#endif
+    //#ifdef H5
+    let isopen = false;
+    this.$Request.get("/app/common/type/237").then((res) => {
+      if (res.data.value == "是") {
+        isopen = true;
+      }
+    });
+    if (isopen) {
+      let ua = navigator.userAgent.toLowerCase();
+      if (ua.indexOf("micromessenger") !== -1) {
+        let openid = uni.getStorageSync("openid");
+        let userId = uni.getStorageSync("userId");
+        let that = this;
+        if (!openid) {
+          if (
+            window.location.href.indexOf("?code=") !== -1 ||
+            window.location.href.indexOf("&code=") !== -1
+          ) {
+            let code;
+            if (window.location.href.indexOf("?code=") !== -1) {
+              code = window.location.href.split("?code=")[1].split("&")[0];
+            } else {
+              code = window.location.href.split("&code=")[1].split("&")[0];
+            }
+            this.$Request.get("/app/Login/getOpenId?code=" + code).then((ret) => {
+              uni.setStorageSync("openId", ret.data);
 
-			if (updated.completed === true) {
-				// 如果上次刚更新过
-				// 删除安装包及安装记录
-				console.log('安装记录被删除,更新成功');
-				uni.removeSavedFile({
-					filePath: updated.packgePath,
-					success: res => {
-						uni.removeStorageSync('updated');
-					}
-				});
-			} else if (updated.completed === false) {
-				uni.removeStorageSync('updated');
-				plus.runtime.install(updated.packgePath, {
-					force: true
-				});
-				uni.setStorage({
-					key: 'updated',
-					data: {
-						completed: true,
-						packgePath: updated.packgePath
-					},
-					success: res => {
-						console.log('成功安装上次的更新,应用需要重启才能继续完成');
-					}
-				});
-				uni.showModal({
-					title: '温馨提示',
-					content: '应用将重启以完成更新',
-					showCancel: false,
-					complete: () => {
-						plus.runtime.restart();
-					}
-				});
-			} else {
-				//获取当前系统版本信息
-				plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
-					//请求后台接口 解析数据 对比版本
-					that.$Request.getT('/app/user/selectNewApp').then(res => {
-						res = res.data[0];
-						if (res.wgtUrl && widgetInfo.version < res.version) {
-							let downloadLink = '';
-							let androidLink = res.androidWgtUrl;
-							let iosLink = res.iosWgtUrl;
-							let ready = false;
-							//校验是是不是热更新
-							if (res.wgtUrl.match(RegExp(/.wgt/))) {
-								// 判断系统类型
-								if (plus.os.name.toLowerCase() === 'android') {
-									console.log('安卓系统');
-									if (androidLink && androidLink !== '#') {
-										// 我这里默认#也是没有地址,请根据业务自行修改
-										console.log('发现下载地址');
-										// 安卓:创建下载任务
-										if (androidLink.match(RegExp(/.wgt/))) {
-											console.log('确认wgt热更新包');
-											downloadLink = androidLink;
-											ready = true;
-										} else {
-											console.log('安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序');
-										}
-									} else {
-										console.log('下载地址是空的,无法继续');
-									}
-								} else {
-									console.log('苹果系统');
-									if (iosLink && iosLink !== '#') {
-										// 我这里默认#也是没有地址,请根据业务自行修改
-										console.log('发现下载地址');
-										// 苹果(A):进行热更新(如果iosLink是wgt更新包的下载地址)判断文件名中是否含有.wgt
-										if (iosLink.match(RegExp(/.wgt/))) {
-											console.log('确认wgt热更新包');
-											downloadLink = iosLink;
-											ready = true;
-										} else {
-											console.log('苹果只支持.wgt强制更新');
-										}
-									} else {
-										console.log('下载地址是空的,无法继续');
-									}
-								}
-								if (ready) {
-									console.log('任务开始');
-									let downloadTask = uni.downloadFile({
-										url: downloadLink,
-										success: res => {
-											if (res.statusCode === 200) {
-												// 保存下载的安装包
-												console.log('保存安装包');
-												uni.saveFile({
-													tempFilePath: res.tempFilePath,
-													success: res => {
-														const packgePath = res
-															.savedFilePath;
-														// 保存更新记录到stroage,下次启动app时安装更新
-														uni.setStorage({
-															key: 'updated',
-															data: {
-																completed: false,
-																packgePath: packgePath
-															},
-															success: () => {
-																console
-																	.log(
-																		'成功保存记录'
-																	);
-															}
-														});
-														// 任务完成,关闭下载任务
-														console.log(
-															'任务完成,关闭下载任务,下一次启动应用时将安装更新'
-														);
-														downloadTask.abort();
-														downloadTask = null;
-													}
-												});
-											}
-										}
-									});
-								} else {
-									console.log('下载地址未准备,无法开启下载任务');
-								}
-							} else {
-								//不是热更新是在线更新 校验是否强制升级
-								if (res.method == 'true') {
-									uni.showModal({
-										showCancel: false,
-										confirmText: '立即更新',
-										title: '发现新版本',
-										content: res.des,
-										success: res => {
-											if (res.confirm) {
-												that.$queue.showLoading('下载中...');
-												if (uni.getSystemInfoSync().platform ==
-													'android') {
-													uni.downloadFile({
-														url: androidLink,
-														success: downloadResult => {
-															if (downloadResult
-																.statusCode ===
-																200) {
-																plus.runtime
-																	.install(
-																		downloadResult
-																		.tempFilePath, {
-																			force: false
-																		},
-																		d => {
-																			console
-																				.log(
-																					'install success...'
-																				);
-																			plus.runtime
-																				.restart();
-																		},
-																		e => {
-																			console
-																				.error(
-																					'install fail...'
-																				);
-																		}
-																	);
-															}
-														}
-													});
-												}
-												if (uni.getSystemInfoSync().platform ==
-													'ios') {
-													plus.runtime.openURL(iosLink, function(
-														res) {});
-												}
-											} else if (res.cancel) {
-												console.log('取消');
-											}
-										}
-									});
-								} else {
-									uni.showModal({
-										title: '发现新版本',
-										confirmText: '立即更新',
-										cancelText: '下次更新',
-										content: res.des,
-										success: res => {
-											if (res.confirm) {
-												that.$queue.showLoading('下载中...');
-												if (uni.getSystemInfoSync().platform ==
-													'android') {
-													uni.downloadFile({
-														url: androidLink,
-														success: downloadResult => {
-															if (downloadResult
-																.statusCode ===
-																200) {
-																plus.runtime
-																	.install(
-																		downloadResult
-																		.tempFilePath, {
-																			force: false
-																		},
-																		d => {
-																			console
-																				.log(
-																					'install success...'
-																				);
-																			plus.runtime
-																				.restart();
-																		},
-																		e => {
-																			console
-																				.error(
-																					'install fail...'
-																				);
-																		}
-																	);
-															}
-														}
-													});
-												}
-												if (uni.getSystemInfoSync().platform ==
-													'ios') {
-													plus.runtime.openURL(iosLink, function(
-														res) {});
-												}
-											} else if (res.cancel) {
-												console.log('取消');
-											}
-										}
-									});
-								}
-							}
-						}
-					});
-				});
-			}
+              this.$Request
+                .get("/app/Login/openid/login?openId=" + ret.data)
+                .then((res) => {
+                  this.$queue.setData("userId", res.user.userId);
+                  this.$queue.setData("token", res.token);
+                  this.$queue.setData("phone", res.user.phone);
+                  this.$queue.setData("userName", res.user.userName);
+                  this.$queue.setData("avatar", res.user.avatar);
+                  this.$queue.setData("invitationCode", res.user.invitationCode);
+                  this.$queue.setData("inviterCode", res.user.inviterCode);
+                });
+            });
+          } else {
+            this.$Request.get("/app/common/type/108").then((res) => {
+              if (res.data.value == "是") {
+                window.location.href =
+                  "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
+                  that.$queue.getWxAppid() +
+                  "&redirect_uri=" +
+                  window.location.href.split("#")[0] +
+                  "&response_type=code&scope=snsapi_userinfo#wechat_redirect";
+              }
+            });
+          }
+        }
+        if (userId && openid) {
+          this.$Request
+            .get("/app/Login/bindOpenId?userId=" + userId + "&openId=" + openid)
+            .then((res) => {
+              // 省钱兄陪玩 https://pw.xianmxkj.com
+            });
+        }
+      }
+    }
 
-			//#endif
-		},
-		onShow: function() {
-			//关键词过滤  602
-			this.$Request.getT('/app/common/type/602').then(res => {
-				if (res.code == 0) {
-					if (res.data && res.data.value) {
-						this.$queue.setData('chatSearchKeys', res.data.value)
-					}
-				}
-			});
-			// 小程序是否上线
-			// this.$Request.get('/app/common/type/238').then(res => {
-			// 	if (res.code == 0) {
-			// 		// #ifdef MP-WEIXIN
-			// 		this.$queue.setData('XCXIsSelect', res.data.value);
-			// 		// #endif
-			// 		// #ifndef MP-WEIXIN
-			// 		this.$queue.setData('XCXIsSelect', '是');
-			// 		// #endif
-			// 	}
-			// });
-			this.$Request.get('/app/common/type/257').then(res => {
-				if (res.code == 0) {
-					// #ifdef MP-WEIXIN
-					this.$queue.setData('XCXIsSelect', res.data.value);
-					// #endif
-					// #ifndef MP-WEIXIN
-					this.$queue.setData('XCXIsSelect', '是');
-					// #endif
-				}
-			});
-			//用户客服
-			// 企业微信链接 274
-			this.$Request.get('/app/common/type/322').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('kefu', res.data.value);
-				}
-			});
-			// 企业微信客服APPID 275
-			this.$Request.get('/app/common/type/324').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('kefuAppid', res.data.value);
-				}
-			});
-			//企业端客服
-			this.$Request.get('/app/common/type/321').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('kefuq', res.data.value);
-				}
-			});
-			// 企业微信客服APPID 275
-			this.$Request.get('/app/common/type/323').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('kefuAppidq', res.data.value);
-				}
-			});
-			// 企业会员每天免费联系次数 421
-			this.$Request.get('/app/common/type/421').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('vipMsgNum', res.data.value);
-				}
-			});
-			// 企业非会员每天免费联系次数 422
-			this.$Request.get('/app/common/type/422').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('msgNum', res.data.value);
-				}
-			});
-			// 企业会员每次联系价格 419
-			this.$Request.get('/app/common/type/419').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('vipMsgPrice', res.data.value);
-				}
-			});
-			// 企业非会员每次联系价格 420
-			this.$Request.get('/app/common/type/420').then(res => {
-				if (res.code == 0) {
-					this.$queue.setData('msgPrice', res.data.value);
-				}
-			});
-			//腾讯云实时语音SDKAppID 
-			this.$Request.get('/app/common/type/814').then(res => {
-				if (res.code == 0) {
-					uni.setStorageSync('sdkAppId', res.data.value)
-				}
-			});
-			console.log('App Show')
-			// #ifdef H5
-			// let sysTem = uni.getSystemInfoSync()
-			// if (sysTem.model == 'PC') { //如果是pc访问移动端域名
-			// 	this.$Request.get('/app/common/type/432').then(res => {
-			// 		if (res.code == 0) {
-			// 			if (res.data.value == '是') {
-			// 				this.$Request.get('/app/common/type/433').then(ree => {
-			// 					if (ree.code == 0) {
-			// 						if (ree.data.value) {
-			// 							window.location.href = ree.data.value;
-			// 						}
-			// 					}
-			// 				})
-			// 			}
-			// 		}
-			// 	})
-			// }
-			// #endif
-			// #ifdef APP-PLUS
-
-			if (uni.getSystemInfoSync().platform == 'android') {
-				let clientid = plus.push.getClientInfo().clientid;
-
-				let userId = this.$queue.getData('userId');
-				if (userId) {
-					this.$Request.postT('/app/user/updateClientId?clientId=' + clientid + '&userId=' + userId).then(
-						res => {});
-				}
-			}
-
-			//#endif
-			//#ifdef H5
-			let isopen = false
-			this.$Request.get('/app/common/type/237').then(res => {
-				if (res.data.value == '是') {
-					isopen = true
-				}
-			});
-			if (isopen) {
-				let ua = navigator.userAgent.toLowerCase();
-				if (ua.indexOf('micromessenger') !== -1) {
-					let openid = uni.getStorageSync('openid');
-					let userId = uni.getStorageSync('userId');
-					let that = this;
-					if (!openid) {
-						if (window.location.href.indexOf('?code=') !== -1 || window.location.href.indexOf('&code=') !==
-							-1) {
-							let code;
-							if (window.location.href.indexOf('?code=') !== -1) {
-								code = window.location.href.split('?code=')[1].split('&')[0];
-							} else {
-								code = window.location.href.split('&code=')[1].split('&')[0];
-							}
-							this.$Request.get('/app/Login/getOpenId?code=' + code).then(ret => {
-								uni.setStorageSync('openId', ret.data)
-
-								this.$Request.get('/app/Login/openid/login?openId=' + ret.data).then(res => {
-
-									this.$queue.setData("userId", res.user.userId);
-									this.$queue.setData("token", res.token);
-									this.$queue.setData("phone", res.user.phone);
-									this.$queue.setData("userName", res.user.userName);
-									this.$queue.setData("avatar", res.user.avatar);
-									this.$queue.setData("invitationCode", res.user.invitationCode);
-									this.$queue.setData("inviterCode", res.user.inviterCode);
-								});
-							});
-						} else {
-							this.$Request.get('/app/common/type/108').then(res => {
-								if (res.data.value == '是') {
-									window.location.href =
-										'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
-										that.$queue.getWxAppid() +
-										'&redirect_uri=' +
-										window.location.href.split('#')[0] +
-										'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
-								}
-							});
-						}
-					}
-					if (userId && openid) {
-						this.$Request.get('/app/Login/bindOpenId?userId=' + userId + '&openId=' + openid).then(res => {
-							// 省钱兄陪玩 https://pw.xianmxkj.com
-						});
-					}
-				}
-			}
-
-
-			//#endif
-		},
-		onHide: function() {
-			console.log('App Hide')
-		}
-	}
+    //#endif
+  },
+  onHide: function () {
+    console.log("App Hide");
+  },
+};
 </script>
 
 <style lang="scss">
-	/*每个页面公共css */
-	@import "uview-ui/index.scss";
-	@import 'components/colorui/main.css';
-	@import 'components/colorui/icon.css';
-
+/*每个页面公共css */
+@import "uview-ui/index.scss";
+@import "components/colorui/main.css";
+@import "components/colorui/icon.css";
 
+page {
+  background-color: #ffffff;
+  color: #343546;
+}
 
-	page {
-		background-color: #FFFFFF;
-		color: #343546;
-	}
+.bg {
+  background-color: #f7f7f7;
+}
+/*文本省略*/
+.m-ellipsis {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.m-ellipsis-l2,
+.m-ellipsis-l3 {
+  display: -webkit-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-box-orient: vertical;
+  word-break: break-all;
+}
 
-	.bg {
-		background-color: #F7F7F7;
-	}
-	/*文本省略*/
-	.m-ellipsis {
-	    overflow: hidden;
-	    white-space: nowrap;
-	    text-overflow: ellipsis;
-	}
-	.m-ellipsis-l2,
-	.m-ellipsis-l3 {
-	    display: -webkit-box;
-	    overflow: hidden;
-	    text-overflow: ellipsis;
-	    -webkit-box-orient: vertical;
-	    word-break: break-all;
-	}
-	
-	.m-ellipsis-l2 {
-	    -webkit-line-clamp: 2;
-	}
-	.m-ellipsis-l3 {
-	    -webkit-line-clamp: 3;
-	}
-</style>
+.m-ellipsis-l2 {
+  -webkit-line-clamp: 2;
+}
+.m-ellipsis-l3 {
+  -webkit-line-clamp: 3;
+}
+</style>

+ 42 - 22
my/enterpriseInfo/enterpriseInfo.vue

@@ -1,19 +1,21 @@
 <template>
-	<view class="content">
-		<!-- 顶部导航 -->
-		<view class="nav-bar">
-			<view class="nav-left" @click="goBack">
-				<u-icon name="arrow-leftward" color="rgba(51, 51, 51, 1)" style="font-size: 38rpx;"></u-icon>
-			</view>
-			<view class="nav-title">公司介绍</view>
-			<view class="nav-right">
-				<view class="nav-icons">
-					<view class="nav-icon" @click="setCollection">
-						<image v-if="isCollection==0" src="/static/images/index/guanzhu.svg" class="icon-img"></image>
-						<image v-else src="/static/images/index/gzActive.svg" class="icon-img"></image>
-					</view>
-					<view class="nav-icon" @click="showShare">
-						<image src="/static/images/index/fenxiang.svg" class="icon-img"></image>
+	<view class="content" :style="{ paddingTop: (12 + statusBarHeight + 88 - 60) + 'px' }">
+		<!-- 固定顶部导航 -->
+		<view class="fixed-nav" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
+			<view class="nav-bar">
+				<view class="nav-left" @click="goBack">
+					<u-icon name="arrow-leftward" color="rgba(51, 51, 51, 1)" style="font-size: 38rpx;"></u-icon>
+				</view>
+				<view class="nav-title">公司介绍</view>
+				<view class="nav-right">
+					<view class="nav-icons">
+						<view class="nav-icon" @click="setCollection">
+							<image v-if="isCollection==0" src="/static/images/index/guanzhu.svg" class="icon-img"></image>
+							<image v-else src="/static/images/index/gzActive.svg" class="icon-img"></image>
+						</view>
+						<view class="nav-icon" @click="showShare">
+							<image src="/static/images/index/fenxiang.svg" class="icon-img"></image>
+						</view>
 					</view>
 				</view>
 			</view>
@@ -204,6 +206,7 @@
 		},
 		data() {
 			return {
+				statusBarHeight: 0, // 状态栏高度
 				backStyle: {
 					color: '#ffffff'
 				},
@@ -271,6 +274,10 @@
 		// 	}
 		// },
 		onLoad(option) {
+			// 获取状态栏高度
+			let systemInfo = uni.getSystemInfoSync();
+			this.statusBarHeight = systemInfo.statusBarHeight || 0;
+			
 			// 获取邀请码保存到本地
 			if (option.invitation) {
 				this.$queue.setData('inviterCode', option.invitation);
@@ -437,15 +444,28 @@
 	}
 
 	.content {
-		padding-top: 88rpx!important;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
+	}
+
+	.fixed-nav {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		z-index: 9999;
+		background-color: #ffffff;
+		padding: 0 32rpx;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
 	}
 
 	.nav-bar {
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
-		margin-bottom: 30rpx;
-		padding: 0 40rpx;
+		height: 88rpx;
+		padding: 0 8rpx;
+		// margin-bottom: 30rpx; // 已移除,因为现在是固定导航栏
+		// padding: 0 40rpx; // 已调整,因为外层 fixed-nav 已有 padding
 
 		.nav-left {
 			display: flex;
@@ -602,16 +622,16 @@
 							gap: 8rpx;
 
 							.tag-icon {
-								width: 48rpx;
-								height: 48rpx;
+								width: 42rpx;
+								height: 42rpx;
 							}
 
 							text {
 								color: rgba(34, 37, 42, 0.5);
 								font-family: DM Sans;
-								font-size: 12px;
+								font-size: 20rpx;
 								font-weight: 400;
-								line-height: 22px;
+								line-height: 44rpx;
 								letter-spacing: 0px;
 								text-align: left;
 							}

+ 8 - 0
my/publish/editor.vue

@@ -1,5 +1,8 @@
 <template>
 	<view class="padding-bottom-xl">
+		<!-- 顶部占位区域 -->
+		<view :style="{ height: statusBarHeight + 'px' }"></view>
+		
 		<!-- <view class="text-white padding margin bg" v-if="form.isRecommend==2">
 			<view class="flex align-center justify-between" style="color: red;">
 				<view class=" text-bold">已录入人才库</view>
@@ -226,6 +229,7 @@
 	export default {
 		data() {
 			return {
+				statusBarHeight: 0,
 				showGraduationTime: false,
 				nameList: [],
 				labelStyle: {
@@ -294,6 +298,10 @@
 			}
 		},
 		onLoad(option) {
+			// 获取状态栏高度
+			const systemInfo = uni.getSystemInfoSync()
+			this.statusBarHeight = systemInfo.statusBarHeight || 0
+			
 			this.getbookName();
 			if (option.resumesId) {
 				this.type = 2

+ 485 - 0
my/renzheng/companyImg.vue

@@ -0,0 +1,485 @@
+<template>
+  <view class="switch-roles">
+    <nav-bar title="公司信息" color="#000"></nav-bar>
+    <view class="roles-content">
+      <view class="content">
+        <view class="progress-num"> <text>7</text>/8 </view>
+        <view class="title">
+          <view>展示公司照片</view>
+        </view>
+        <view class="desc">在公司主页上展示亮眼的照片,体现企业氛围与文化魅力;最多上传20张</view>
+
+        <view class="content-index">
+          <!-- 多图上传区域 -->
+          <view class="upload-section">
+            <view class="images-grid">
+              <!-- 已上传的图片 -->
+              <view
+                class="image-item"
+                v-for="(image, index) in imageList"
+                :key="index"
+                @click="previewImage(index)"
+              >
+                <image :src="image.url" mode="aspectFill" class="preview-image"></image>
+                <view class="image-mask">
+                  <u-icon name="eye" color="#fff" size="30"></u-icon>
+                </view>
+                <view class="delete-btn" @click.stop="deleteImage(index)">
+                  <u-icon name="close" color="#fff" size="20"></u-icon>
+                </view>
+              </view>
+              
+              <!-- 添加图片按钮 -->
+              <view
+                class="upload-box"
+                v-if="imageList.length < maxCount"
+                @click="chooseImage"
+              >
+                <view class="upload-placeholder">
+                  <u-icon name="plus" color="#999" size="40"></u-icon>
+                  <text class="upload-text">添加照片</text>
+                </view>
+              </view>
+            </view>
+
+            <!-- 上传计数 -->
+            <view class="upload-count" v-if="imageList.length > 0">
+              已上传 {{ imageList.length }}/{{ maxCount }} 张
+            </view>
+
+            <!-- 上传进度 -->
+            <view v-if="uploading" class="upload-progress">
+              <view class="progress-bar">
+                <view
+                  class="progress-inner"
+                  :style="{ width: uploadProgress + '%' }"
+                ></view>
+              </view>
+              <text class="progress-text">{{ uploadProgress }}%</text>
+            </view>
+          </view>
+
+          <!-- 注意事项 -->
+          <view class="warning-box">
+            <view class="warning-title">注意事项:</view>
+            <view class="warning-list">
+              <view class="warning-item">1. 请上传清晰且完整的图片</view>
+              <view class="warning-item"
+                >2.
+                请上传品牌相关的图片,含有其他内容将无法通过审核(包括但不限于含有水印、招聘信息、联系方式、二维码等相关内容)</view
+              >
+              <view class="warning-item"
+                >3. 上传图片须符合中国相关法律法规,不得含有违法内容或不良信息</view
+              >
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view class="submit-btn" :class="{ disabled: imageList.length === 0 }" @click="goJobPostingSecond"
+      >下一步</view
+    >
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      text: "",
+      imageList: [], // 上传的图片列表
+      maxCount: 20, // 最大上传数量
+      uploading: false, // 是否正在上传
+      uploadProgress: 0, // 上传进度
+    };
+  },
+  components: {
+    navBar,
+  },
+  onLoad(options) {
+    if (options.text) {
+      this.text = options.text;
+    }
+  },
+  methods: {
+    // 选择图片
+    chooseImage() {
+      const that = this;
+      const remainingCount = this.maxCount - this.imageList.length;
+      
+      uni.chooseImage({
+        count: remainingCount, // 最多选择剩余数量
+        sizeType: ["compressed"],
+        sourceType: ["album", "camera"],
+        success: (res) => {
+          const tempFilePaths = res.tempFilePaths;
+          
+          // 批量上传图片
+          that.uploadMultipleImages(tempFilePaths);
+        },
+        fail: (error) => {
+          console.log("选择图片失败:", error);
+          uni.showToast({
+            title: "选择图片失败",
+            icon: "none",
+          });
+        },
+      });
+    },
+
+    // 批量上传图片
+    uploadMultipleImages(filePaths) {
+      const that = this;
+      that.uploading = true;
+      that.uploadProgress = 0;
+
+      // 模拟上传进度
+      const progressTimer = setInterval(() => {
+        that.uploadProgress += 10;
+        if (that.uploadProgress >= 90) {
+          clearInterval(progressTimer);
+        }
+      }, 100);
+
+      // 模拟批量上传成功
+      setTimeout(() => {
+        clearInterval(progressTimer);
+        that.uploadProgress = 100;
+
+        // 将新图片添加到列表
+        const newImages = filePaths.map(filePath => ({
+          url: filePath,
+          // 实际开发中这里应该是服务器返回的URL
+        }));
+        
+        that.imageList = [...that.imageList, ...newImages];
+
+        setTimeout(() => {
+          that.uploading = false;
+          uni.showToast({
+            title: `成功上传${newImages.length}张图片`,
+            icon: "success",
+          });
+        }, 500);
+      }, 1500);
+
+      // 实际开发中应该使用下面的代码:
+      /*
+      let uploadedCount = 0;
+      const totalCount = filePaths.length;
+      
+      filePaths.forEach((filePath, index) => {
+        uni.uploadFile({
+          url: '你的上传接口地址',
+          filePath: filePath,
+          name: 'file',
+          formData: {
+            'type': 'company_photo'
+          },
+          success: (uploadRes) => {
+            uploadedCount++;
+            const data = JSON.parse(uploadRes.data);
+            if (data.code === 200) {
+              that.imageList.push({
+                url: data.data.url
+              });
+            }
+            
+            // 更新进度
+            that.uploadProgress = Math.floor((uploadedCount / totalCount) * 100);
+            
+            // 所有图片上传完成
+            if (uploadedCount === totalCount) {
+              that.uploading = false;
+              uni.showToast({
+                title: `成功上传${uploadedCount}张图片`,
+                icon: 'success'
+              });
+            }
+          },
+          fail: (error) => {
+            uploadedCount++;
+            console.log(`第${index + 1}张图片上传失败:`, error);
+            
+            if (uploadedCount === totalCount) {
+              that.uploading = false;
+              uni.showToast({
+                title: '部分图片上传失败',
+                icon: 'none'
+              });
+            }
+          }
+        });
+      });
+      */
+    },
+
+    // 预览图片
+    previewImage(index) {
+      if (this.imageList.length > 0) {
+        const urls = this.imageList.map(item => item.url);
+        uni.previewImage({
+          urls: urls,
+          current: index,
+        });
+      }
+    },
+
+    // 删除图片
+    deleteImage(index) {
+      const that = this;
+      uni.showModal({
+        title: "提示",
+        content: "确定要删除这张照片吗?",
+        success: (res) => {
+          if (res.confirm) {
+            that.imageList.splice(index, 1);
+            uni.showToast({
+              title: "删除成功",
+              icon: "success",
+            });
+          }
+        },
+      });
+    },
+
+    // 下一步
+    goJobPostingSecond() {
+      if (this.imageList.length === 0) {
+        uni.showToast({
+          title: "请上传公司照片",
+          icon: "none",
+        });
+        return;
+      }
+
+      // 跳转到下一页,传递图片数据
+      const imageUrls = this.imageList.map(item => item.url);
+      uni.navigateTo({
+        url: "/my/renzheng/mainWorkIntro?photos=" + encodeURIComponent(JSON.stringify(imageUrls)),
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.switch-roles {
+  background-color: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  flex-direction: column;
+
+  .roles-content {
+    width: 100%;
+    flex: 1;
+    overflow: hidden;
+    overflow-y: auto;
+
+    .content {
+      padding: 40rpx;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+
+      .progress-num {
+        color: #016bf6;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 500;
+        width: 100%;
+        padding-bottom: 20rpx;
+        box-sizing: border-box;
+        text {
+          font-size: 48rpx;
+          font-weight: 700;
+        }
+      }
+
+      .title {
+        color: #333;
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 48rpx;
+        font-weight: 700;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 20rpx;
+      }
+
+      .desc {
+        color: rgba(102, 102, 102, 1);
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 400;
+        line-height: 32rpx;
+        letter-spacing: 0.5%;
+        text-align: left;
+        box-sizing: border-box;
+        margin-bottom: 40rpx;
+      }
+
+      .content-index {
+        width: 100%;
+
+        .upload-section {
+          margin-bottom: 20rpx;
+          
+          .images-grid {
+            display: grid;
+            grid-template-columns: repeat(4, 1fr);
+            gap: 20rpx;
+            margin-bottom: 20rpx;
+            
+            .image-item {
+              width: 142rpx;
+              height: 142rpx;
+              border-radius: 8rpx;
+              position: relative;
+              overflow: hidden;
+              
+              .preview-image {
+                width: 100%;
+                height: 100%;
+              }
+              
+              .image-mask {
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 100%;
+                height: 100%;
+                background: rgba(0, 0, 0, 0.3);
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                opacity: 0;
+                transition: opacity 0.3s;
+              }
+              
+              .delete-btn {
+                position: absolute;
+                top: 8rpx;
+                right: 8rpx;
+                width: 30rpx;
+                height: 30rpx;
+                background: rgba(0, 0, 0, 0.5);
+                border-radius: 50%;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+              }
+              
+              &:active .image-mask {
+                opacity: 1;
+              }
+            }
+            
+            .upload-box {
+              width: 142rpx;
+              height: 142rpx;
+              border-radius: 8rpx;
+              display: flex;
+              align-items: center;
+              justify-content: center;
+              background: #eee;
+              
+              .upload-placeholder {
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                justify-content: center;
+                
+                .upload-text {
+                  color: #666;
+                  font-size: 20rpx;
+                  margin-top: 8rpx;
+                  font-family: DM Sans;
+                }
+              }
+            }
+          }
+          
+          .upload-count {
+            color: #666;
+            font-size: 24rpx;
+            text-align: center;
+            margin-bottom: 20rpx;
+          }
+
+          .upload-progress {
+            display: flex;
+            align-items: center;
+            gap: 20rpx;
+
+            .progress-bar {
+              flex: 1;
+              height: 8rpx;
+              background: #f0f0f0;
+              border-radius: 4rpx;
+              overflow: hidden;
+
+              .progress-inner {
+                height: 100%;
+                background: #016bf6;
+                border-radius: 4rpx;
+                transition: width 0.3s;
+              }
+            }
+
+            .progress-text {
+              color: #016bf6;
+              font-size: 24rpx;
+              min-width: 80rpx;
+            }
+          }
+        }
+
+        .warning-box {
+          color: rgba(102, 102, 102, 1);
+          font-family: DM Sans;
+          font-size: 24rpx;
+          font-weight: 400;
+          line-height: 32rpx;
+          .warning-item{
+            margin-top: 8rpx;
+          }
+        }
+      }
+    }
+  }
+
+  .submit-btn {
+    flex-shrink: 0;
+    border-radius: 999px;
+    background: #ff6600;
+    color: rgba(255, 255, 255, 1);
+    font-family: DM Sans;
+    font-size: 32rpx;
+    font-weight: 400;
+    line-height: 48rpx;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 24rpx 32rpx;
+    box-sizing: border-box;
+    margin: 30rpx 40rpx;
+    margin-top: 20rpx;
+
+    &.disabled {
+      background: #ccc;
+      color: #999;
+    }
+  }
+}
+</style>

+ 472 - 0
my/renzheng/companyLogo.vue

@@ -0,0 +1,472 @@
+<template>
+  <view class="switch-roles">
+    <nav-bar title="公司信息" color="#000"></nav-bar>
+    <view class="roles-content">
+      <view class="content">
+        <view class="progress-num"> <text>6</text>/8 </view>
+        <view class="title">
+          <view>添加公司LOGO</view>
+        </view>
+        <view class="desc">该logo将出现在公司主页及公司下展示的所有职位上</view>
+
+        <view class="content-index">
+          <!-- Logo上传区域 -->
+          <view class="upload-section">
+            <view
+              class="upload-box"
+              :class="{ 'has-image': logoImage }"
+              @click="chooseImage"
+            >
+              <view v-if="!logoImage" class="upload-placeholder">
+                <u-icon name="plus" color="#999" size="40"></u-icon>
+                <text class="upload-text">添加照片</text>
+              </view>
+              <view v-else class="image-preview">
+                <image :src="logoImage" mode="aspectFill" class="preview-image"></image>
+                <view class="image-mask" @click.stop="previewImage">
+                  <u-icon name="eye" color="#fff" size="40"></u-icon>
+                </view>
+                <view class="delete-btn" @click.stop="deleteImage">
+                  <u-icon name="close" color="#fff" size="20"></u-icon>
+                </view>
+              </view>
+            </view>
+
+            <!-- 上传进度 -->
+            <view v-if="uploading" class="upload-progress">
+              <view class="progress-bar">
+                <view
+                  class="progress-inner"
+                  :style="{ width: uploadProgress + '%' }"
+                ></view>
+              </view>
+              <text class="progress-text">{{ uploadProgress }}%</text>
+            </view>
+          </view>
+
+          <!-- 注意事项 -->
+          <view class="warning-box">
+            <view class="warning-title">注意事项:</view>
+            <view class="warning-list">
+              <view class="warning-item">1. 请上传清晰且完整的图片</view>
+              <view class="warning-item"
+                >2.
+                请上传品牌相关的图片,含有其他内容将无法通过审核(包括但不限于含有水印、招聘信息、联系方式、二维码等相关内容)</view
+              >
+              <view class="warning-item"
+                >3. 上传图片须符合中国相关法律法规,不得含有违法内容或不良信息</view
+              >
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view class="submit-btn" :class="{ disabled: !logoImage }" @click="goJobPostingSecond"
+      >下一步</view
+    >
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      text: "",
+      logoImage: "", // 上传的logo图片URL
+      uploading: false, // 是否正在上传
+      uploadProgress: 0, // 上传进度
+    };
+  },
+  components: {
+    navBar,
+  },
+  onLoad(options) {
+    if (options.text) {
+      this.text = options.text;
+    }
+  },
+  methods: {
+    // 选择图片
+    chooseImage() {
+      const that = this;
+      uni.chooseImage({
+        count: 1,
+        sizeType: ["compressed"], // 可以指定是原图还是压缩图,默认二者都有
+        sourceType: ["album", "camera"], // 可以指定来源是相册还是相机,默认二者都有
+        success: (res) => {
+          // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
+          const tempFilePaths = res.tempFilePaths;
+
+          // 这里可以添加图片验证
+          that.validateAndUploadImage(tempFilePaths[0]);
+        },
+        fail: (error) => {
+          console.log("选择图片失败:", error);
+          uni.showToast({
+            title: "选择图片失败",
+            icon: "none",
+          });
+        },
+      });
+    },
+
+    // 验证并上传图片
+    validateAndUploadImage(tempFilePath) {
+      const that = this;
+
+      // 获取图片信息
+      uni.getImageInfo({
+        src: tempFilePath,
+        success: (imageInfo) => {
+          console.log("图片信息:", imageInfo);
+
+          // 这里可以添加图片尺寸验证
+          // if (imageInfo.width < 100 || imageInfo.height < 100) {
+          //   uni.showToast({
+          //     title: '图片尺寸过小,建议200×200px以上',
+          //     icon: 'none'
+          //   });
+          //   return;
+          // }
+
+          // 开始上传
+          that.uploadImage(tempFilePath);
+        },
+        fail: (error) => {
+          console.log("获取图片信息失败:", error);
+          that.uploadImage(tempFilePath); // 即使获取信息失败也继续上传
+        },
+      });
+    },
+
+    // 上传图片到服务器
+    uploadImage(filePath) {
+      const that = this;
+      that.uploading = true;
+      that.uploadProgress = 0;
+
+      // 模拟上传进度
+      const progressTimer = setInterval(() => {
+        that.uploadProgress += 10;
+        if (that.uploadProgress >= 90) {
+          clearInterval(progressTimer);
+        }
+      }, 100);
+
+      // 这里替换为你的实际上传接口
+      // uni.uploadFile({
+      //   url: '你的上传接口地址',
+      //   filePath: filePath,
+      //   name: 'file',
+      //   formData: {
+      //     'type': 'company_logo'
+      //   },
+      //   success: (uploadRes) => {
+      //     clearInterval(progressTimer);
+      //     that.uploadProgress = 100;
+      //
+      //     const data = JSON.parse(uploadRes.data);
+      //     if (data.code === 200) {
+      //       that.logoImage = data.data.url;
+      //       uni.showToast({
+      //         title: '上传成功',
+      //         icon: 'success'
+      //       });
+      //     } else {
+      //       uni.showToast({
+      //         title: data.message || '上传失败',
+      //         icon: 'none'
+      //       });
+      //     }
+      //
+      //     setTimeout(() => {
+      //       that.uploading = false;
+      //     }, 500);
+      //   },
+      //   fail: (error) => {
+      //     clearInterval(progressTimer);
+      //     that.uploading = false;
+      //     uni.showToast({
+      //       title: '上传失败',
+      //       icon: 'none'
+      //     });
+      //   }
+      // });
+
+      // 模拟上传成功(实际开发中请使用上面的上传代码)
+      setTimeout(() => {
+        clearInterval(progressTimer);
+        that.uploadProgress = 100;
+        that.logoImage = filePath; // 使用本地路径,实际开发中应该使用服务器返回的URL
+
+        setTimeout(() => {
+          that.uploading = false;
+          uni.showToast({
+            title: "上传成功",
+            icon: "success",
+          });
+        }, 500);
+      }, 1500);
+    },
+
+    // 预览图片
+    previewImage() {
+      if (this.logoImage) {
+        uni.previewImage({
+          urls: [this.logoImage],
+          current: 0,
+        });
+      }
+    },
+
+    // 删除图片
+    deleteImage() {
+      const that = this;
+      uni.showModal({
+        title: "提示",
+        content: "确定要删除这个LOGO吗?",
+        success: (res) => {
+          if (res.confirm) {
+            that.logoImage = "";
+            that.uploadProgress = 0;
+          }
+        },
+      });
+    },
+    goJobPostingSecond() {
+      if (!this.logoImage) {
+        uni.showToast({
+          title: "请上传公司LOGO",
+          icon: "none",
+        });
+        return;
+      }
+      uni.navigateTo({
+        url: "/my/renzheng/companyImg?logo=" + encodeURIComponent(this.logoImage),
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.switch-roles {
+  background-color: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  flex-direction: column;
+
+  .roles-content {
+    width: 100%;
+    flex: 1;
+    overflow: hidden;
+    overflow-y: auto;
+
+    .content {
+      padding: 40rpx;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+
+      .progress-num {
+        color: #016bf6;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 500;
+        width: 100%;
+        padding-bottom: 20rpx;
+        box-sizing: border-box;
+        text {
+          font-size: 48rpx;
+          font-weight: 700;
+        }
+      }
+
+      .title {
+        color: #333;
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 48rpx;
+        font-weight: 700;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 20rpx;
+      }
+
+      .desc {
+        color: rgba(102, 102, 102, 1);
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 400;
+        line-height: 32rpx;
+        letter-spacing: 0.5%;
+        text-align: left;
+        box-sizing: border-box;
+        margin-bottom: 40rpx;
+      }
+
+      .content-index {
+        width: 100%;
+
+        .upload-section {
+          margin-bottom: 20rpx;
+          .upload-box {
+            width: 142rpx;
+            height: 142rpx;
+            border-radius: 8rpx;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            background: #eee;
+            position: relative;
+            overflow: hidden;
+
+            &.has-image {
+              border-style: solid;
+              border-color: #016bf6;
+            }
+
+            .upload-placeholder {
+              display: flex;
+              flex-direction: column;
+              align-items: center;
+              justify-content: center;
+
+              .upload-text {
+                color: #666;
+                font-size: 20rpx;
+                margin-top: 8rpx;
+                font-family: DM Sans;
+              }
+
+              .upload-subtext {
+                color: #999;
+                font-size: 20rpx;
+              }
+            }
+
+            .image-preview {
+              width: 100%;
+              height: 100%;
+              position: relative;
+
+              .preview-image {
+                width: 100%;
+                height: 100%;
+                border-radius: 12rpx;
+              }
+
+              .image-mask {
+                position: absolute;
+                top: 0;
+                left: 0;
+                width: 100%;
+                height: 100%;
+                background: rgba(0, 0, 0, 0.5);
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                opacity: 0;
+                transition: opacity 0.3s;
+
+                &:active {
+                  opacity: 1;
+                }
+              }
+
+              .delete-btn {
+                position: absolute;
+                top: 8rpx;
+                right: 8rpx;
+                width: 30rpx;
+                height: 30rpx;
+                background: rgba(0, 0, 0, 0.5);
+                border-radius: 50%;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+              }
+
+              &:active .image-mask {
+                opacity: 1;
+              }
+            }
+          }
+
+          .upload-progress {
+            margin-top: 20rpx;
+            display: flex;
+            align-items: center;
+            gap: 20rpx;
+
+            .progress-bar {
+              flex: 1;
+              height: 8rpx;
+              background: #f0f0f0;
+              border-radius: 4rpx;
+              overflow: hidden;
+
+              .progress-inner {
+                height: 100%;
+                background: #016bf6;
+                border-radius: 4rpx;
+                transition: width 0.3s;
+              }
+            }
+
+            .progress-text {
+              color: #016bf6;
+              font-size: 24rpx;
+              min-width: 80rpx;
+            }
+          }
+        }
+
+        .warning-box {
+          color: rgba(102, 102, 102, 1);
+          font-family: DM Sans;
+          font-size: 24rpx;
+          font-weight: 400;
+          line-height: 32rpx;
+          .warning-item {
+            margin-top: 8rpx;
+          }
+        }
+      }
+    }
+  }
+
+  .submit-btn {
+    flex-shrink: 0;
+    border-radius: 999px;
+    background: #ff6600;
+    color: rgba(255, 255, 255, 1);
+    font-family: DM Sans;
+    font-size: 32rpx;
+    font-weight: 400;
+    line-height: 48rpx;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 24rpx 32rpx;
+    box-sizing: border-box;
+    margin: 30rpx 40rpx;
+    margin-top: 20rpx;
+
+    &.disabled {
+      background: #ccc;
+      color: #999;
+    }
+  }
+}
+</style>

+ 3 - 0
my/renzheng/editCompanyDesc.vue

@@ -47,6 +47,9 @@ export default {
     }
   },
   methods: {
+    goJobPostingSecond(){
+        uni.navigateTo({ url: '/my/renzheng/companyLogo' })
+    }
   },
 };
 </script>

+ 434 - 0
my/renzheng/mainWorkIntro.vue

@@ -0,0 +1,434 @@
+<template>
+  <view class="switch-roles">
+    <nav-bar title="公司信息" color="#000"></nav-bar>
+    <view class="roles-content">
+      <view class="content">
+        <view class="progress-num"> <text>8</text>/8 </view>
+        <view class="title">
+          <view>主营业务介绍</view>
+        </view>
+        <view class="desc">
+          介绍公司主营业务及旗下的产品信息,可有效提升求职者对公司及品牌的认知
+        </view>
+        <view class="content-index">
+          <view class="content-item">
+            <view class="content-item-title">主营产品</view>
+            <view class="check-box">
+              <view
+                class="check-item"
+                :class="{ 'check-active': selectedProducts.includes(item) }"
+                v-for="(item, index) in productList"
+                :key="index"
+                @click="toggleProduct(item)"
+                >{{ item }}</view
+              >
+            </view>
+          </view>
+          <view class="content-item">
+            <view class="content-item-title">自定义</view>
+            <!-- 自定义标签显示区域 -->
+            <view class="custom-tags-box">
+              <view
+                class="check-item custom-tag"
+                :class="{ 'check-active': selectedCustomTags.includes(tag) }"
+                v-for="(tag, index) in customTags"
+                :key="'custom-' + index"
+                @click="toggleCustomTag(tag)"
+              >
+                {{ tag }}
+                <text class="delete-tag" @click.stop="deleteCustomTag(index)">×</text>
+              </view>
+              <!-- 添加按钮 -->
+              <view class="add-tag-btn" @click="showAddDialog">
+                <text class="add-text">添加</text>
+                <image
+                  class="add-icon"
+                  src="@/static/images/my/my/add.svg"
+                  mode="aspectFix"
+                />
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <view class="submit-btn" @click="goJobPostingSecond">下一步</view>
+
+    <!-- 添加标签弹框 -->
+    <u-modal
+      v-model="showDialog"
+      :show-cancel-button="true"
+      confirm-text="确定"
+      cancel-text="取消"
+      title="添加标签"
+      @confirm="confirmAddTag"
+      @cancel="cancelAddTag"
+    >
+      <view class="dialog-content">
+        <!-- <input
+          class="tag-input"
+          v-model="tempTag"
+          placeholder="请输入标签内容"
+          placeholder-class="input-placeholder"
+          maxlength="20"
+          @confirm="confirmAddTag"
+        /> -->
+        <u-input
+          v-model="tempTag"
+          type="text"
+          :border="true"
+          :clearable="true"
+          input-align="left"
+        />
+        <view class="input-tips">最多输入20个字符</view>
+      </view>
+    </u-modal>
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      // 主营产品列表
+      productList: [
+        "3C数码",
+        "美妆日化",
+        "智能家居",
+        "宠物相机",
+        "监控摄像头",
+        "家装产品",
+        "耗材",
+        "装修材料",
+        "卫浴产品",
+      ],
+      // 选中的产品
+      selectedProducts: [],
+      // 自定义标签列表
+      customTags: [],
+      // 选中的自定义标签
+      selectedCustomTags: [],
+      // 弹框显示控制
+      showDialog: false,
+      // 临时标签输入
+      tempTag: "",
+    };
+  },
+  components: {
+    navBar,
+  },
+  onLoad(options) {
+    if (options.text) {
+      this.text = options.text;
+    }
+  },
+  methods: {
+    // 切换产品选择
+    toggleProduct(product) {
+      const index = this.selectedProducts.indexOf(product);
+      if (index > -1) {
+        this.selectedProducts.splice(index, 1);
+      } else {
+        this.selectedProducts.push(product);
+      }
+    },
+
+    // 显示添加标签弹框
+    showAddDialog() {
+      this.tempTag = "";
+      this.showDialog = true;
+      // 延迟聚焦输入框
+      setTimeout(() => {
+        const input = this.$el.querySelector(".tag-input");
+        if (input) input.focus();
+      }, 300);
+    },
+
+    // 确认添加标签
+    confirmAddTag() {
+      if (this.tempTag.trim() === "") {
+        uni.showToast({
+          title: "请输入标签内容",
+          icon: "none",
+        });
+        return;
+      }
+
+      if (this.customTags.includes(this.tempTag.trim())) {
+        uni.showToast({
+          title: "标签已存在",
+          icon: "none",
+        });
+        return;
+      }
+
+      this.customTags.push(this.tempTag.trim());
+      this.showDialog = false;
+      this.tempTag = "";
+    },
+
+    // 取消添加标签
+    cancelAddTag() {
+      this.showDialog = false;
+      this.tempTag = "";
+    },
+
+    // 切换自定义标签选择
+    toggleCustomTag(tag) {
+      const index = this.selectedCustomTags.indexOf(tag);
+      if (index > -1) {
+        this.selectedCustomTags.splice(index, 1);
+      } else {
+        this.selectedCustomTags.push(tag);
+      }
+    },
+
+    // 删除自定义标签
+    deleteCustomTag(index) {
+      const tag = this.customTags[index];
+      // 如果这个标签被选中了,先从选中列表中移除
+      const selectedIndex = this.selectedCustomTags.indexOf(tag);
+      if (selectedIndex > -1) {
+        this.selectedCustomTags.splice(selectedIndex, 1);
+      }
+      // 删除标签
+      this.customTags.splice(index, 1);
+    },
+
+    goJobPostingSecond() {
+      // 获取所有选中的标签
+      const allSelectedTags = [...this.selectedProducts, ...this.selectedCustomTags];
+
+      if (allSelectedTags.length === 0) {
+        uni.showToast({
+          title: "请至少选择一个业务标签",
+          icon: "none",
+        });
+        return;
+      }
+
+      console.log("选中的业务标签:", allSelectedTags);
+      return;
+
+      // 跳转到下一页,传递选中的业务标签
+      uni.navigateTo({
+        url:
+          "/my/renzheng/editCompanyDesc?businessTags=" +
+          encodeURIComponent(JSON.stringify(allSelectedTags)),
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.switch-roles {
+  background-color: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  flex-direction: column;
+
+  .roles-content {
+    width: 100%;
+    flex: 1;
+    overflow: hidden;
+    overflow-y: auto;
+
+    .content {
+      padding: 40rpx;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+
+      .progress-num {
+        color: #016bf6;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 500;
+        width: 100%;
+        padding-bottom: 20rpx;
+        box-sizing: border-box;
+        text {
+          font-size: 48rpx;
+          font-weight: 700;
+        }
+      }
+
+      .title {
+        color: #333;
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 48rpx;
+        font-weight: 700;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 20rpx;
+      }
+
+      .desc {
+        color: rgba(102, 102, 102, 1);
+        width: 100%;
+        font-family: DM Sans;
+        font-size: 24rpx;
+        font-weight: 400;
+        line-height: 32rpx;
+        letter-spacing: 0.5%;
+        text-align: left;
+        padding: 20rpx 0;
+        box-sizing: border-box;
+        margin-bottom: 20rpx;
+      }
+
+      .content-index {
+        width: 100%;
+
+        .content-item {
+          margin-bottom: 40rpx;
+
+          .content-item-title {
+            color: rgba(34, 37, 42, 1);
+            font-family: DM Sans;
+            font-size: 32rpx;
+            font-weight: 400;
+            line-height: 48rpx;
+            padding-bottom: 12rpx;
+            box-sizing: border-box;
+          }
+
+          .check-box {
+            display: flex;
+            gap: 12rpx;
+            flex-wrap: wrap;
+            align-items: center;
+          }
+
+          // 自定义标签区域
+          .custom-tags-box {
+            display: flex;
+            gap: 12rpx;
+            flex-wrap: wrap;
+            align-items: center;
+
+            .custom-tag {
+              position: relative;
+              padding-right: 30rpx;
+
+              .delete-tag {
+                position: absolute;
+                right: 8rpx;
+                top: 50%;
+                transform: translateY(-50%);
+                font-size: 18rpx;
+                color: #999;
+                width: 20rpx;
+                height: 20rpx;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+              }
+            }
+
+            .add-tag-btn {
+              flex-shrink: 0;
+              padding: 8rpx 16rpx;
+              border-radius: 8rpx;
+              background: #9999991a;
+              border: 1rpx solid #9999991a;
+              box-sizing: border-box;
+              color: rgba(102, 102, 102, 1);
+              font-family: DM Sans;
+              font-size: 16rpx;
+              font-weight: 400;
+              display: flex;
+              align-items: center;
+              gap: 4rpx;
+              .add-text {
+                color: #016bf6;
+              }
+              .add-icon {
+                width: 16rpx;
+                height: 16rpx;
+              }
+            }
+          }
+        }
+      }
+      .check-item {
+        flex-shrink: 0;
+        padding: 8rpx 16rpx;
+        border-radius: 8rpx;
+        background: #9999991a;
+        border: 1rpx solid #9999991a;
+        box-sizing: border-box;
+        color: rgba(102, 102, 102, 1);
+        font-family: DM Sans;
+        font-size: 16rpx;
+        font-weight: 400;
+      }
+
+      .check-active {
+        box-sizing: border-box;
+        border: 1rpx solid #016bf6;
+        border-radius: 8rpx;
+        background: rgba(252, 233, 220, 1);
+        color: #016bf6;
+      }
+    }
+  }
+
+  .submit-btn {
+    flex-shrink: 0;
+    border-radius: 999px;
+    background: #ff6600;
+    color: rgba(255, 255, 255, 1);
+    font-family: DM Sans;
+    font-size: 32rpx;
+    font-weight: 400;
+    line-height: 48rpx;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 24rpx 32rpx;
+    box-sizing: border-box;
+    margin: 30rpx 40rpx;
+    margin-top: 20rpx;
+  }
+}
+
+// 弹框内容样式
+.dialog-content {
+  padding: 40rpx;
+  box-sizing: border-box;
+  .tag-input {
+    width: 100%;
+    padding: 20rpx;
+    border: 1rpx solid #ddd;
+    border-radius: 8rpx;
+    font-size: 28rpx;
+    margin-bottom: 20rpx;
+  }
+
+  .input-tips {
+    color: #999;
+    font-size: 24rpx;
+    text-align: right;
+  }
+}
+
+// 输入框placeholder样式
+.input-placeholder {
+  color: rgba(153, 153, 153, 1);
+  font-family: DM Sans;
+  font-size: 16rpx;
+  font-weight: 400;
+}
+</style>

+ 9 - 0
package/jobIntention/add.vue

@@ -1,5 +1,8 @@
 <template>
 	<view>
+		<!-- 顶部占位区域 -->
+		<view :style="{ height: statusBarHeight + 'px' }"></view>
+		
 		<!-- 表单 -->
 		<view class="list flex justify-center">
 			<view class="list-box">
@@ -103,6 +106,7 @@
 	export default {
 		data() {
 			return {
+				statusBarHeight: 0,
 				monyShow: false,
 				monyList: [], //薪资列表
 				resumesCompensation: '', //薪资
@@ -118,6 +122,11 @@
 				isDefault: 0,
 			};
 		},
+		onLoad() {
+			// 获取状态栏高度
+			const systemInfo = uni.getSystemInfoSync()
+			this.statusBarHeight = systemInfo.statusBarHeight || 0
+		},
 		onShow() {
 			let that = this
 			//选择的岗位

+ 8 - 0
package/jobIntention/industry.vue

@@ -1,5 +1,8 @@
 <template>
 	<view>
+		<!-- 顶部占位区域 -->
+		<view :style="{ height: statusBarHeight + 'px' }"></view>
+		
 		<!-- 标题 -->
 		<view class="title flex justify-center">
 			<view class="title-box">
@@ -66,6 +69,7 @@
 	export default {
 		data() {
 			return {
+				statusBarHeight: 0,
 				selectList: [],
 				itemList: [],
 				topList: [],
@@ -73,6 +77,10 @@
 			};
 		},
 		onLoad(option) {
+			// 获取状态栏高度
+			const systemInfo = uni.getSystemInfoSync()
+			this.statusBarHeight = systemInfo.statusBarHeight || 0
+			
 			if (option.type == 2) {
 				this.type = option.type
 				uni.setNavigationBarTitle({

+ 7 - 3
package/my/resume.vue

@@ -1,5 +1,8 @@
 <template>
 	<view>
+		<!-- 顶部占位区域 -->
+		<view :style="{ height: statusBarHeight + 'px' }"></view>
+		
 		<view v-if="JSON.stringify(list) != '{}'">
 			<view class="listbox" @click="goUpdete()">
 				<view class="flex align-center justify-between">
@@ -70,7 +73,6 @@
 		<view class="submit" v-else @click="goUpdete()">添加简历</view>
 		<empty v-if="JSON.stringify(list) == '{}'" />
 	</view>
-	</view>
 </template>
 
 <script>
@@ -83,11 +85,13 @@
 			return {
 				avatar: '../../static/logo.png',
 				list: {},
-
+				statusBarHeight: 0
 			}
 		},
 		onLoad() {
-
+			// 获取状态栏高度
+			const systemInfo = uni.getSystemInfoSync()
+			this.statusBarHeight = systemInfo.statusBarHeight || 0
 		},
 		onPullDownRefresh() {
 			this.getDetails();

+ 37 - 2
pages.json

@@ -917,20 +917,55 @@
 						"navigationStyle": "custom"
 					}
 				},
-							{
+				{
 					"path": "renzheng/companyDev",
 					"style": {
 						"navigationBarTitleText": "公司信息",
 						"navigationStyle": "custom"
 					}
 				},
-									{
+				{
 					"path": "renzheng/companyFund",
 					"style": {
 						"navigationBarTitleText": "公司信息",
 						"navigationStyle": "custom"
 					}
 				},
+				{
+					"path": "renzheng/peopleDev",
+					"style": {
+						"navigationBarTitleText": "公司信息",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "renzheng/editCompanyDesc",
+					"style": {
+						"navigationBarTitleText": "公司信息",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "renzheng/companyLogo",
+					"style": {
+						"navigationBarTitleText": "公司信息",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "renzheng/companyImg",
+					"style": {
+						"navigationBarTitleText": "公司信息",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "renzheng/mainWorkIntro",
+					"style": {
+						"navigationBarTitleText": "公司信息",
+						"navigationStyle": "custom"
+					}
+				},
 				{
 					"path": "renzheng/zhuanrang",
 					"style": {

+ 21 - 3
pages/index/game/order.vue

@@ -1,7 +1,8 @@
 <template>
-	<view style="padding: 88rpx 40rpx 40rpx 40rpx;">
-		<!-- 顶部导航 -->
-		<view class="nav-bar">
+	<view style="padding: 148rpx 40rpx 40rpx 40rpx;">
+		<!-- 固定顶部导航 -->
+		<view class="fixed-nav" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
+			<view class="nav-bar">
 			<view class="nav-left" @click="goBack">
 				<u-icon name="arrow-leftward" color="rgba(51, 51, 51, 1)" style="font-size: 38rpx;"></u-icon>
 			</view>
@@ -21,6 +22,7 @@
 				</view>
 			</view>
 		</view>
+		</view>
 		
 		<!-- 岗位要求 -->
 		<view class="job flex justify-center">
@@ -316,6 +318,7 @@
 		},
 		data() {
 			return {
+				statusBarHeight: 0, // 状态栏高度
 				loading: true,
 				shows: false,
 				postPushId: '',
@@ -343,6 +346,10 @@
 			};
 		},
 		onLoad(option) {
+			// 获取状态栏高度
+			let systemInfo = uni.getSystemInfoSync();
+			this.statusBarHeight = systemInfo.statusBarHeight || 0;
+			
 			// 获取邀请码保存到本地
 			if (option.invitation) {
 				this.$queue.setData('inviterCode', option.invitation);
@@ -687,6 +694,17 @@
 		padding-bottom: 200rpx;
 	}
 
+	.fixed-nav {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		z-index: 9999;
+		background-color: #ffffff;
+		padding: 0 32rpx;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
+	}
+
 	.urgent-banner {
 		width: 100%;
 		height: 120rpx;

+ 15 - 6
pages/jobManagement/jobDetail.vue

@@ -3,7 +3,7 @@
 		<!-- 固定顶部导航栏 -->
 		<view class="fixed-header">
 			<!-- 自定义导航栏 -->
-			<view class="custom-navbar">
+			<view class="custom-navbar" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
 				<view class="navbar-content">
 					<view class="nav-left" @click="goBack">
 						<u-icon name="arrow-leftward" color="#333" size="32"></u-icon>
@@ -15,7 +15,11 @@
 		</view>
 		
 		<!-- 主要内容区域 -->
-		<view class="main-content">
+		<view class="main-content" :style="{ 
+			marginTop: (12 + statusBarHeight + 88) + 'px',
+			height: 'calc(100vh - ' + (12 + statusBarHeight + 88) + 'px)',
+			overflowY: 'auto'
+		}">
 			<!-- 审核状态提示 -->
 			<view class="status-section">
 				<view class="status-icon">
@@ -63,9 +67,14 @@
 export default {
 	data() {
 		return {
-			
+			statusBarHeight: 0 // 状态栏高度
 		}
 	},
+	onLoad() {
+		// 获取状态栏高度
+		let systemInfo = uni.getSystemInfoSync();
+		this.statusBarHeight = systemInfo.statusBarHeight || 0;
+	},
 	methods: {
 		goBack() {
 			uni.navigateBack()
@@ -86,7 +95,8 @@ page {
 }
 
 .job-detail-page {
-	min-height: 100vh;
+	height: 100vh;
+	overflow: hidden;
 	background-color: #ffffff;
 }
 
@@ -100,7 +110,7 @@ page {
 }
 
 .custom-navbar {
-	padding-top: 80rpx;
+	// padding-top 已改为动态计算,在模板中通过 :style 设置
 	background-color: #ffffff;
 	box-sizing: border-box;
 	
@@ -133,7 +143,6 @@ page {
 
 .main-content {
 	padding: 0 40rpx;
-	margin-top: 200rpx;
 	padding-bottom: 120rpx;
 }
 

+ 60 - 22
pages/my/VIP/benefits.vue

@@ -56,7 +56,7 @@
           </view>
           <view class="header-cell vip">VIP版</view>
           <view class="header-cell flagship recommended">
-            <!-- <view class="plan-tag">推荐</view> -->
+            <view class="plan-tag">推荐</view>
             <view class="plan-name">旗舰版</view>
           </view>
         </view>
@@ -417,9 +417,10 @@ export default {
     display: grid;
     grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
     background: #f8f9fa;
+    border-bottom: 4rpx solid #FFFFFF;
     
     .header-cell {
-      padding: 24rpx 12rpx;
+      padding: 12rpx;
       color: rgba(23, 23, 37, 1);
       font-family: DM Sans;
       font-size: 24rpx;
@@ -428,14 +429,19 @@ export default {
       letter-spacing: 0.5%;
       text-align: center;
       position: relative;
-      border-right: 1rpx solid #e9ecef;
+      border-right: 4rpx solid #FFFFFF;
       display: flex;
       flex-direction: column;
       align-items: center;
       justify-content: center;
       
+      &:first-child {
+        border-top-left-radius: 16rpx;
+      }
+      
       &:last-child {
         border-right: none;
+        border-top-right-radius: 16rpx;
       }
       
       &.benefit-type {
@@ -446,35 +452,59 @@ export default {
         line-height: 26rpx;
         letter-spacing: 0.5%;
         text-align: center;
+        background: rgba(219, 216, 216, 1);
       }
       
       &.basic {
-        background: rgba(246, 246, 246, 1);
+        background: rgba(219, 216, 216, 1);
       }
       
       &.active {
-        background: rgba(246, 246, 246, 1);
-        color: #1976d2;
+        background: linear-gradient(135.00deg, rgba(255, 187, 141, 0.4),rgba(255, 102, 0, 0.4) 100%);
+        color: rgba(224, 90, 0, 1);
       }
       
       &.vip {
-        background: rgba(255, 235, 235, 1);
+        background: linear-gradient(135.00deg, rgba(255, 180, 180, 0.6),rgba(255, 89, 89, 0.6) 100%);
+        color: rgba(255, 62, 62, 1);
       }
       
       &.recommended {
-        background: rgba(254, 238, 209, 1);
-        color: #f57c00;
+        background: linear-gradient(133.74deg, rgba(251, 231, 185, 1),rgba(240, 176, 72, 1) 100%);
+        color: rgba(212, 131, 0, 1);
       }
       
       .plan-tag {
         position: absolute;
-        top: 8rpx;
-        right: 8rpx;
-        background: #ff4444;
-        color: #fff;
-        font-size: 20rpx;
-        padding: 4rpx 8rpx;
-        border-radius: 8rpx;
+        top: 0rpx;
+        right: 0rpx;
+        background: var(--线性渐变, linear-gradient(132.53deg, rgba(106.94185638427734, 84.63434600830078, 214.0178680419922, 0.96),rgba(144.87640380859375, 87.8011474609375, 191.25, 1) 95%));
+        color: rgba(255, 255, 255, 1);
+        font-family: DM Sans;
+        font-size: 12rpx;
+        font-weight: 400;
+        line-height: 14rpx;
+        letter-spacing: 0px;
+        text-align: left;
+        padding: 4rpx 12rpx;
+        border-radius: 0rpx 16rpx 0rpx 16rpx;
+        transform-origin: center;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        overflow: hidden;
+        
+        &::before {
+          content: '';
+          position: absolute;
+          top: 0;
+          left: 0;
+          right: 0;
+          bottom: 0;
+          background: inherit;
+          transform: rotate(-45deg);
+          z-index: -1;
+        }
       }
       
       .plan-name {
@@ -485,7 +515,7 @@ export default {
       
       .plan-expire {
         font-size: 16rpx;
-        color: #666;
+        color: rgba(224, 90, 0, 1);
       }
     }
   }
@@ -493,10 +523,18 @@ export default {
   .table-row {
     display: grid;
     grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
-    border-bottom: 1rpx solid #e9ecef;
+    border-bottom: 4rpx solid #FFFFFF;
     
     &:last-child {
       border-bottom: none;
+      
+      .row-cell:first-child {
+        border-bottom-left-radius: 16rpx;
+      }
+      
+      .row-cell:last-child {
+        border-bottom-right-radius: 16rpx;
+      }
     }
     
     &.price-row {
@@ -508,7 +546,7 @@ export default {
       padding: 24rpx 12rpx;
       font-size: 16rpx;
       text-align: center;
-      border-right: 1rpx solid #e9ecef;
+      border-right: 4rpx solid #FFFFFF;
       display: flex;
       align-items: center;
       justify-content: center;
@@ -532,13 +570,13 @@ export default {
       }
       
       &.regular {
-        color: #1976d2;
+        color: rgba(224, 90, 0, 1);
         font-weight: 600;
-        background: rgba(246, 246, 246, 1);
+        background: rgba(254, 240, 229, 1);
       }
       
       &.vip {
-        color: #7b1fa2;
+        color: rgba(255, 62, 62, 1);
         font-weight: 600;
         background: rgba(255, 235, 235, 1);
       }

+ 4 - 1
pages/my/jobApplicant/startPage.vue

@@ -73,8 +73,11 @@ export default {
       }
     },
     goLogin() {
+      // uni.navigateTo({
+      //   url: "/pages/my/jobApplicant/login",
+      // });
       uni.navigateTo({
-        url: "/pages/my/jobApplicant/login",
+        url: "/pages/public/login",
       });
     },
     // 暂停自动播放

+ 1 - 0
pages/my/jobApplicant/workRecord.vue

@@ -367,6 +367,7 @@ export default {
       setTimeout(() => {
         uni.hideLoading();
         uni.showToast({ title: "提交成功", icon: "success" });
+        uni.setStorageSync("firstLogin", true);
         // 实际开发中可以在这里添加跳转逻辑
         uni.switchTab({ url: '/pages/index/index' })
       }, 1500);

+ 33 - 11
pages/my/onlineResume.vue

@@ -1,13 +1,15 @@
 <template>
-	<view class="online-resume">
-		<!-- 顶部导航栏 -->
-		<view class="navbar">
-			<view class="navbar-content">
-				<view class="navbar-left" @click="goBack">
-					<u-icon name="arrow-leftward" size="38" color="#333"></u-icon>
+	<view class="online-resume" :style="{ paddingTop: (12 + statusBarHeight + 88 - 60) + 'px' }">
+		<!-- 固定顶部导航栏 -->
+		<view class="fixed-nav" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
+			<view class="navbar">
+				<view class="navbar-content">
+					<view class="navbar-left" @click="goBack">
+						<u-icon name="arrow-leftward" size="38" color="#333"></u-icon>
+					</view>
+					<view class="navbar-title">在线简历</view>
+					<view class="navbar-right"></view>
 				</view>
-				<view class="navbar-title">在线简历</view>
-				<view class="navbar-right"></view>
 			</view>
 		</view>
 
@@ -278,9 +280,15 @@
 	export default {
 		data() {
 			return {
+				statusBarHeight: 0, // 状态栏高度
 				hasEcommerceExperience: true
 			}
 		},
+		onLoad() {
+			// 获取状态栏高度
+			let systemInfo = uni.getSystemInfoSync();
+			this.statusBarHeight = systemInfo.statusBarHeight || 0;
+		},
 		methods: {
 			goBack() {
 				uni.navigateBack();
@@ -380,12 +388,26 @@
 	.online-resume {
 		// background-color: #F2F6FC;
 		min-height: 100vh;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
+	}
+
+	.fixed-nav {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		z-index: 9999;
+		background-color: #ffffff;
+		padding: 0 32rpx;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
 	}
 
 	// 顶部导航栏
 	.navbar {
 		background: #fff;
-		padding: 80rpx 0 40rpx 0;
+		height: 88rpx;
+		padding: 0 8rpx;
+		// padding: 80rpx 0 40rpx 0; // 已移除,因为现在是固定导航栏
 		
 		.navbar-content {
 			display: flex;
@@ -405,9 +427,9 @@
 			.navbar-title {
                 color: rgba(23, 23, 37, 1);
                 font-family: DM Sans;
-                font-size: 20px;
+                font-size: 38rpx;
                 font-weight: 700;
-                line-height: 26px;
+                line-height: 52rpx;
                 letter-spacing: 0%;
                 text-align: center;
 			}

+ 2 - 2
pages/public/login.vue

@@ -66,7 +66,7 @@
         ><image
           src="@/static/images/jobApplicant/phone.svg"
           mode="scaleToFill"
-        />手机验证码登录</view
+        />手机账号密码登录</view
       >
       <view
         class=""
@@ -813,7 +813,7 @@ page {
   line-height: 42px;
   border-radius: 30px;
   margin-top: 40px;
-  background: #016BF6;
+  background: #016bf6;
   color: #fff;
   // font-size: $font-lg;
 

+ 62 - 10
pages/public/loginphone.vue

@@ -1,6 +1,8 @@
 <template>
   <view class="container">
     <view class="wrapper">
+      <nav-bar title="登录" color="#000"></nav-bar>
+
       <!-- <view style="text-align: center;">
 				<image src="../../static/logo.png" style="border-radius: 64upx;"></image>
 			</view>
@@ -50,6 +52,7 @@
 </template>
 
 <script>
+import navBar from "@/components/nav-bar/index.vue";
 export default {
   data() {
     return {
@@ -63,6 +66,9 @@ export default {
       count: 60,
     };
   },
+  components: {
+    navBar,
+  },
   onLoad() {},
   methods: {
     forget() {
@@ -117,30 +123,76 @@ export default {
               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) {
+                      // 原有的
+                      // 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.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 == 2) {
+                    // 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.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 == 2) {
-                    uni.reLaunch({
-                      url: "/pages/my/index",
-                    });
-                  } else {
-                    uni.reLaunch({
-                      url: "/pages/my/index",
-                    });
-                  }
                 }
               });
 

+ 22 - 9
pages/public/register.vue

@@ -1,5 +1,6 @@
 <template>
   <view class="container">
+    <nav-bar title="注册" color="#000"></nav-bar>
     <view class="wrapper">
       <view class="input-content">
         <view class="item-label">用户名</view>
@@ -52,8 +53,8 @@
             @confirm="toLogin"
           />
         </view>
-        <view class="cu-form-group" style="margin-top: 32rpx;" v-if="required == '是'">
-        <view class="item-label-code">邀请码</view>
+        <view class="cu-form-group" style="margin-top: 32rpx" v-if="required == '是'">
+          <view class="item-label-code">邀请码</view>
           <input
             type=""
             maxlength="6"
@@ -64,8 +65,8 @@
             @confirm="toLogin"
           />
         </view>
-        <view class="cu-form-group"  style="margin-top: 32rpx;" v-if="required == '否'">
-        <view class="item-label-code">邀请码</view>
+        <view class="cu-form-group" style="margin-top: 32rpx" v-if="required == '否'">
+          <view class="item-label-code">邀请码</view>
           <input
             type=""
             maxlength="6"
@@ -97,6 +98,7 @@
 </template>
 
 <script>
+import navBar from "@/components/nav-bar/index.vue";
 export default {
   data() {
     return {
@@ -115,6 +117,9 @@ export default {
       platform: "",
     };
   },
+  components: {
+    navBar,
+  },
   onLoad() {
     // this.invitation = this.$queue.getData('inviterCode') ? this.$queue.getData('inviterCode') : '';
     this.invitation = this.$queue.getData("invitation")
@@ -251,9 +256,17 @@ export default {
               );
               this.getUserInfo();
               setTimeout(function () {
-                uni.switchTab({
-                  url: "/pages/index/index",
-                });
+                // 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
+                let firstLogin = uni.getStorageSync("firstLogin") || false;
+                if (!firstLogin) {
+                  uni.navigateTo({
+                    url: "/pages/my/jobApplicant/guidePage",
+                  });
+                } else {
+                  uni.switchTab({
+                    url: "/pages/index/index",
+                  });
+                }
               }, 1000);
             } else {
               uni.hideLoading();
@@ -379,7 +392,7 @@ page {
   height: 30px;
   font-size: 10px;
   line-height: 30px;
-  background: #016BF6;
+  background: #016bf6;
 }
 
 .container {
@@ -410,7 +423,7 @@ page {
   line-height: 80upx;
   border-radius: 60upx;
   margin-top: 32upx;
-  background: #016BF6;
+  background: #016bf6;
 
   color: #fff;
   font-size: 32upx;

+ 245 - 252
pages/public/selectIdentity/selectIdentity.vue

@@ -1,259 +1,252 @@
 <template>
-	<view>
-		<!-- #ifdef H5 -->
-		<image class="bgImg1"
-			src="https://zhaopin.xianmaxiong.com/file/uploadPath/2022/09/16/7c9fd30d3d119c3a2381739f279285c5.png"
-			mode="widthFix"></image>
-		<!-- #endif -->
-		<!-- #ifdef MP-WEIXIN || APP -->
-		<image class="bgImg"
-			src="https://zhaopin.xianmaxiong.com/file/uploadPath/2022/09/16/7c9fd30d3d119c3a2381739f279285c5.png"
-			mode="widthFix"></image>
-		<!-- #endif -->
-
-		<view class="title1">
-			请选择您的登录状态
-		</view>
-		<view class="title2">
-			欢迎来到招聘平台选择你的状态开启使用吧
-		</view>
-		<!-- 选择按钮 -->
-		<view class="selectBtn flex justify-center">
-			<view class="selectBtn1 flex align-center justify-center" @click="gotoVers(2)">
-				我要招人
-			</view>
-			<view class="selectBtn2 flex align-center justify-center" @click="gotoVers(1)">
-				我要应聘
-			</view>
-		</view>
-
-	</view>
+  <view class="guide-page">
+    <view class="guide-item">
+      <view class="guide-img">
+        <image src="@/static/images/jobApplicant/woyaozhaogongzuo.svg" mode="aspectFix" />
+      </view>
+      <view class="guide-btn" @click="gotoVers(1)">我要找工作</view>
+    </view>
+    <view class="guide-item">
+      <view class="guide-img">
+        <image src="@/static/images/jobApplicant/woyaozhaoren.svg" mode="aspectFix" />
+      </view>
+      <view class="guide-btn" @click="gotoVers(2)">我要招人</view>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				userType: '', //用户类型 1:求职者 2:招聘者
-				CompanyList: '', //企业数据
-			};
-		},
-		onShow() {
-			this.userType = uni.getStorageSync('userType')
-			console.log(uni.getStorageSync('token'))
-			// #ifdef MP-WEIXIN
-			uni.hideHomeButton()
-			// #endif
-		},
-		methods: {
-			/**
-			 * 获取用户企业实名数据
-			 */
-			getCompany() {
-				this.$Request.get("/app/company/selectCompanyByUserId").then(res => {
-					if (res.code == 0 && res.data) {
-						this.CompanyList = res.data
-						if (this.CompanyList.status == 1) {
-							uni.showModal({
-								title: '提示',
-								content: '您提交的企业认证正在审核,是否查看修改?',
-								confirmColor: '#016BF6',
-								success: function(res) {
-									if (res.confirm) {
-										console.log('用户点击确定');
-										uni.navigateTo({
-											url: '/my/renzheng/index'
-										})
-									} else if (res.cancel) {
-										console.log('用户点击取消');
-									}
-								}
-							})
-						} else if (this.CompanyList.status == 2) { //已进行企业认证并且已通过则修改用户类型为2并跳转至企业端首页
-							if (this.userType == 1) { //若用户类型为1则修改身份为2跳转至首页
-								this.$Request.postT("/app/user/updateUserEntity", {
-									userType: 2
-								}).then(res => {
-									if (res.code == 0) {
-										// return
-										uni.setStorageSync('companyId', this.CompanyList.companyId)
-										uni.setStorageSync('userType', 2)
-										// uni.reLaunch({
-										// 	url:'/pages/index/index'
-										// })
-										uni.switchTab({
-											url: '/pages/index/index'
-										})
-									} else {
-										uni.showToast({
-											title: '切换失败,请重试!',
-											icon: 'none'
-										})
-									}
-								})
-							} else { //否则直接跳转至首页即可
-								uni.setStorageSync('companyId', this.CompanyList.companyId)
-								uni.setStorageSync('userType', 2)
-								// uni.reLaunch({
-								// 	url:'/pages/index/index'
-								// })
-								uni.switchTab({
-									url: '/pages/index/index'
-								})
-							}
-						} else if (this.CompanyList.status == 3) {
-							uni.showModal({
-								title: '提示',
-								content: '您提交的企业认证已被拒绝,是否查看修改?',
-								confirmColor: '#016BF6',
-								success: function(res) {
-									if (res.confirm) {
-										console.log('用户点击确定');
-										uni.navigateTo({
-											url: '/my/renzheng/index'
-										})
-									} else if (res.cancel) {
-										console.log('用户点击取消');
-									}
-								}
-							})
-						}
-					} else {
-						uni.showModal({
-							title: '提示',
-							content: '您还未企业认证,请先进行认证',
-							confirmColor: '#016BF6',
-							success: function(res) {
-								if (res.confirm) {
-									console.log('用户点击确定');
-									uni.navigateTo({
-										url: '/my/renzheng/index'
-									})
-								} else if (res.cancel) {
-									console.log('用户点击取消');
-								}
-							}
-						})
-					}
-				})
-			},
-			//选择登录身份
-			gotoVers(type) {
-				//用户端直接修改用户类型为1然后跳转至用户端首页
-				if (type == 1) { //用户端
-					//判断登录用户的userType 
-					if (this.userType == 1) { //若为1则直接跳转至首页
-						uni.setStorageSync('userType', 1)
-						// uni.reLaunch({
-						// 	url: '/pages/index/index'
-						// })
-						uni.switchTab({
-							url: '/pages/index/index'
-						})
-					} else { //若为2,则修改用户的userType=2再跳转至首页
-						let data = {
-							userType: 1
-						}
-						this.$Request.postT("/app/user/updateUserEntity", data).then(res => {
-							if (res.code == 0) {
-								uni.setStorageSync('userType', 1)
-								// uni.reLaunch({
-								// 	url: '/pages/index/index'
-								// })
-								uni.switchTab({
-									url: '/pages/index/index'
-								})
-							} else {
-								uni.showToast({
-									title: '切换失败,请重试!'
-								})
-							}
-						})
-					}
-				} else { //企业端
-					/**
-					 * 企业端则判断该用户是否进行企业认证,
-					 * 若认证成功则修改用户状态为2跳转至企业端首页,
-					 * 若没有进行企业认证或审核中或审核失败则提示是否进行企业认证,选择是则跳转至认证的页面(用户类型还是为1)
-					 */
-					this.getCompany()
-					// if (this.userType == 1) { //原本用户类型为1
-					// 	this.getCompany()
-					// } else { //用户类型本来就为2
-					// 	uni.setStorageSync('userType', 2)
-					// 	uni.reLaunch({
-					// 		url: '/pages/index/index'
-					// 	})
-					// 	// uni.switchTab({
-					// 	// 	url:'/pages/index/index'
-					// 	// })
-					// }
-				}
-			}
-		}
-	}
+export default {
+  data() {
+    return {
+      userType: "", //用户类型 1:求职者 2:招聘者
+      CompanyList: "", //企业数据
+    };
+  },
+  onShow() {
+    this.userType = uni.getStorageSync("userType");
+    console.log(uni.getStorageSync("token"));
+    // #ifdef MP-WEIXIN
+    uni.hideHomeButton();
+    // #endif
+  },
+  methods: {
+    /**
+     * 获取用户企业实名数据
+     */
+    getCompany() {
+      this.$Request.get("/app/company/selectCompanyByUserId").then((res) => {
+        if (res.code == 0 && res.data) {
+          this.CompanyList = res.data;
+          if (this.CompanyList.status == 1) {
+            uni.showModal({
+              title: "提示",
+              content: "您提交的企业认证正在审核,是否查看修改?",
+              confirmColor: "#016BF6",
+              success: function (res) {
+                if (res.confirm) {
+                  console.log("用户点击确定");
+                  uni.navigateTo({
+                    url: "/my/renzheng/index",
+                  });
+                } else if (res.cancel) {
+                  console.log("用户点击取消");
+                }
+              },
+            });
+          } else if (this.CompanyList.status == 2) {
+            //已进行企业认证并且已通过则修改用户类型为2并跳转至企业端首页
+            if (this.userType == 1) {
+              //若用户类型为1则修改身份为2跳转至首页
+              this.$Request
+                .postT("/app/user/updateUserEntity", {
+                  userType: 2,
+                })
+                .then((res) => {
+                  if (res.code == 0) {
+                    // return
+                    uni.setStorageSync("companyId", this.CompanyList.companyId);
+                    uni.setStorageSync("userType", 2);
+                    // uni.reLaunch({
+                    // 	url:'/pages/index/index'
+                    // })
+                    uni.switchTab({
+                      url: "/pages/index/index",
+                    });
+                  } else {
+                    uni.showToast({
+                      title: "切换失败,请重试!",
+                      icon: "none",
+                    });
+                  }
+                });
+            } else {
+              //否则直接跳转至首页即可
+              uni.setStorageSync("companyId", this.CompanyList.companyId);
+              uni.setStorageSync("userType", 2);
+              // uni.reLaunch({
+              // 	url:'/pages/index/index'
+              // })
+              uni.switchTab({
+                url: "/pages/index/index",
+              });
+            }
+          } else if (this.CompanyList.status == 3) {
+            uni.showModal({
+              title: "提示",
+              content: "您提交的企业认证已被拒绝,是否查看修改?",
+              confirmColor: "#016BF6",
+              success: function (res) {
+                if (res.confirm) {
+                  console.log("用户点击确定");
+                  uni.navigateTo({
+                    url: "/my/renzheng/index",
+                  });
+                } else if (res.cancel) {
+                  console.log("用户点击取消");
+                }
+              },
+            });
+          }
+        } else {
+          uni.showModal({
+            title: "提示",
+            content: "您还未企业认证,请先进行认证",
+            confirmColor: "#016BF6",
+            success: function (res) {
+              if (res.confirm) {
+                console.log("用户点击确定");
+                uni.navigateTo({
+                  url: "/my/renzheng/index",
+                });
+              } else if (res.cancel) {
+                console.log("用户点击取消");
+              }
+            },
+          });
+        }
+      });
+    },
+    //选择登录身份
+    gotoVers(type) {
+      //用户端直接修改用户类型为1然后跳转至用户端首页
+      if (type == 1) {
+        //用户端
+        //判断登录用户的userType
+        if (this.userType == 1) {
+          //若为1则直接跳转至首页
+          uni.setStorageSync("userType", 1);
+          //   原有的代码,现在需要做判断是否是第一次登录
+          // 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
+          let firstLogin = uni.getStorageSync("firstLogin") || false;
+          if (!firstLogin) {
+            uni.navigateTo({
+              url: "/pages/my/jobApplicant/guidePage",
+            });
+          } else {
+            uni.switchTab({
+              url: "/pages/index/index",
+            });
+          }
+        } else {
+          //若为2,则修改用户的userType=2再跳转至首页
+          let data = {
+            userType: 1,
+          };
+          this.$Request.postT("/app/user/updateUserEntity", data).then((res) => {
+            if (res.code == 0) {
+              uni.setStorageSync("userType", 1);
+              // 这里判断一下看是否是第一次登录如果是就跳到引导页,如果不是就正常跳
+              let firstLogin = uni.getStorageSync("firstLogin") || false;
+              if (!firstLogin) {
+                uni.navigateTo({
+                  url: "/pages/my/jobApplicant/guidePage",
+                });
+              } else {
+                uni.switchTab({
+                  url: "/pages/index/index",
+                });
+              }
+            } else {
+              uni.showToast({
+                title: "切换失败,请重试!",
+              });
+            }
+          });
+        }
+      } else {
+        //企业端
+        /**
+         * 企业端则判断该用户是否进行企业认证,
+         * 若认证成功则修改用户状态为2跳转至企业端首页,
+         * 若没有进行企业认证或审核中或审核失败则提示是否进行企业认证,选择是则跳转至认证的页面(用户类型还是为1)
+         */
+        this.getCompany();
+        // if (this.userType == 1) { //原本用户类型为1
+        // 	this.getCompany()
+        // } else { //用户类型本来就为2
+        // 	uni.setStorageSync('userType', 2)
+        // 	uni.reLaunch({
+        // 		url: '/pages/index/index'
+        // 	})
+        // 	// uni.switchTab({
+        // 	// 	url:'/pages/index/index'
+        // 	// })
+        // }
+      }
+    },
+  },
+};
 </script>
 
 <style lang="scss">
-	.bgImg1 {
-		width: 100%;
-		position: fixed;
-		top: 86rpx;
-		left: 0%;
-		z-index: -1;
-	}
-
-	.bgImg {
-		width: 100%;
-		position: fixed;
-		top: 10%;
-		left: 0%;
-		z-index: -1;
-	}
-
-	.title1 {
-		width: 100%;
-		text-align: center;
-		margin-top: 48vh;
-		font-size: 38rpx;
-		color: #1A1A1A;
-		font-weight: 800;
-	}
-
-	.title2 {
-		width: 100%;
-		text-align: center;
-		margin-top: 20rpx;
-		color: #999999;
-		font-size: 26rpx;
-		font-weight: 400;
-	}
-
-	.selectBtn {
-		width: 100%;
-		height: 90rpx;
-		margin-top: 200rpx;
-	}
-
-	.selectBtn1 {
-		width: 260rpx;
-		height: 100%;
-		border-radius: 8rpx;
-		background-color: #ffffff;
-		color: #016BF6;
-		font-size: 28rpx;
-		font-weight: bold;
-		border: 2rpx solid #016BF6;
-	}
-
-	.selectBtn2 {
-		width: 260rpx;
-		height: 100%;
-		border-radius: 8rpx;
-		background-color: #016BF6;
-		color: #ffffff;
-		margin-left: 49rpx;
-		font-size: 28rpx;
-		font-weight: bold;
-	}
-</style>
+.guide-page {
+  background: linear-gradient(90deg, rgba(13, 39, 247, 1), rgba(19, 193, 234, 1) 100%);
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  padding: 120rpx 76rpx;
+  display: flex;
+  flex-direction: column;
+  box-sizing: border-box;
+  gap: 36rpx;
+  .guide-item {
+    width: 100%;
+    height: 100%;
+    border-radius: 28rpx;
+    background: rgba(255, 255, 255, 0.851);
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    padding: 0 56rpx;
+    box-sizing: border-box;
+    gap: 72rpx;
+    .guide-img {
+      width: 364rpx;
+      height: 364rpx;
+      overflow: hidden;
+      image {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .guide-btn {
+      border-radius: 100rpx;
+      background: rgba(255, 255, 255, 1);
+      color: #016bf6;
+      font-family: DM Sans;
+      font-size: 32rpx;
+      font-weight: 400;
+      line-height: 48rpx;
+      letter-spacing: 0%;
+      text-align: center;
+      width: 100%;
+      padding: 16rpx;
+      box-sizing: border-box;
+    }
+  }
+}
+</style>

+ 11 - 1
pages/recruitmentData/index.vue

@@ -67,7 +67,7 @@
             <!-- 图标、查看和急聘标签区域 -->
             <view class="benefit-header">
               <view class="benefit-icon-container">
-                <image src="/static/images/eye.svg" class="benefit-icon" mode="aspectFit"></image>
+                <image :src="getBenefitIcon(benefit.action)" class="benefit-icon" mode="aspectFit"></image>
                 <text class="benefit-action">{{ benefit.action }}</text>
                 <text v-if="benefit.isUrgent" class="urgent-tag">急聘</text>
               </view>
@@ -155,6 +155,16 @@ export default {
     this.statusBarHeight = systemInfo.statusBarHeight || 0
   },
   methods: {
+    getBenefitIcon(action) {
+      switch(action) {
+        case '查看':
+          return '/static/images/eye.svg'
+        case '沟通':
+          return '/static/images/goutong.svg'
+        default:
+          return '/static/images/eye.svg'
+      }
+    },
     goBack() {
       uni.navigateBack()
     },

+ 37 - 15
pages/talentSearch/resumeDetail.vue

@@ -1,13 +1,15 @@
 <template>
-	<view class="resume-detail">
-		<!-- 顶部导航栏 -->
-		<view class="navbar">
-			<view class="navbar-content">
-				<view class="navbar-left" @click="goBack">
-					<u-icon name="arrow-leftward" size="38" color="#333"></u-icon>
+	<view class="resume-detail" :style="{ paddingTop: (12 + statusBarHeight + 88 - 60) + 'px' }">
+		<!-- 固定顶部导航栏 -->
+		<view class="fixed-nav" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
+			<view class="navbar">
+				<view class="navbar-content">
+					<view class="navbar-left" @click="goBack">
+						<u-icon name="arrow-leftward" size="38" color="#333"></u-icon>
+					</view>
+					<view class="navbar-title">简历详情</view>
+					<view class="navbar-right"></view>
 				</view>
-				<view class="navbar-title">简历详情</view>
-				<view class="navbar-right"></view>
 			</view>
 		</view>
 
@@ -253,6 +255,7 @@
 	export default {
 		data() {
 			return {
+				statusBarHeight: 0, // 状态栏高度
 				resumeId: '',
 				resumeData: {},
 				defaultExpectations: [
@@ -293,6 +296,10 @@
 			}
 		},
 		onLoad(options) {
+			// 获取状态栏高度
+			let systemInfo = uni.getSystemInfoSync();
+			this.statusBarHeight = systemInfo.statusBarHeight || 0;
+			
 			if (options.resumeId) {
 				this.resumeId = options.resumeId;
 				this.loadResumeData();
@@ -321,12 +328,26 @@
 	.resume-detail {
 		min-height: 100vh;
 		padding-bottom: 120rpx;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
+	}
+
+	.fixed-nav {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		z-index: 9999;
+		background-color: #ffffff;
+		// padding: 0 4rpx;
+		// padding-top 已改为动态计算,在模板中通过 :style 设置
 	}
 
 	// 顶部导航栏
 	.navbar {
 		background: #fff;
-		padding: 80rpx 0 40rpx 0;
+		height: 88rpx;
+		padding: 0 8rpx;
+		// padding: 80rpx 0 40rpx 0; // 已移除,因为现在是固定导航栏
 		
 		.navbar-content {
 			display: flex;
@@ -346,9 +367,9 @@
 			.navbar-title {
                 color: rgba(23, 23, 37, 1);
                 font-family: DM Sans;
-                font-size: 20px;
+                font-size: 38rpx;
                 font-weight: 700;
-                line-height: 26px;
+                line-height: 52rpx;
                 letter-spacing: 0%;
                 text-align: center;
 			}
@@ -364,6 +385,7 @@
 	.user-profile {
 		background: #fff;
 		padding: 30rpx;
+		// margin: 0 32rpx;
 		
 		.profile-header {
 			display: flex;
@@ -490,7 +512,7 @@
 		.section-item {
 			background: #fff;
 			border-radius: 12rpx;
-			padding: 30rpx;
+			padding: 30rpx 0;
 			margin-bottom: 20rpx;
             box-sizing: border-box;
 			
@@ -537,7 +559,7 @@
 		.expectation-card {
 			background: #ffffff;
 			border-radius: 12rpx;
-			padding: 30rpx;
+			padding: 30rpx 0;
 			margin-bottom: 20rpx;
 			box-sizing: border-box;
 			
@@ -849,7 +871,7 @@
 		.certificates-section {
 			background: #fff;
 			border-radius: 12px;
-			padding: 30rpx;
+			padding: 30rpx 0;
 			margin-bottom: 20rpx;
 			box-sizing: border-box;
 			
@@ -893,7 +915,7 @@
 		.skills-section {
 			background: #fff;
 			border-radius: 12px;
-			padding: 30rpx;
+			padding: 30rpx 0; 
 			margin-bottom: 20rpx;
 			box-sizing: border-box;
 			

+ 6 - 0
static/images/my/my/add.svg

@@ -0,0 +1,6 @@
+<svg viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="8.000000" height="8.000000" fill="none">
+	<rect id="svg 40" width="8.000000" height="8.000000" x="0.000000" y="0.000000" />
+	<path id="矢量 36" d="M6.2123 7.30706L1.2843 7.30706C0.912305 7.30706 0.612305 7.00706 0.612305 6.63506L0.612305 1.71106C0.612305 1.33906 0.912305 1.03906 1.2843 1.03906L6.2083 1.03906C6.5803 1.03906 6.8803 1.33906 6.8803 1.71106L6.8803 6.63506C6.8843 7.00706 6.5843 7.30706 6.2123 7.30706L6.2123 7.30706ZM1.2843 1.38706C1.1043 1.38706 0.960305 1.53106 0.960305 1.71106L0.960305 6.63506C0.960305 6.81506 1.1043 6.95906 1.2843 6.95906L6.2083 6.95906C6.3883 6.95906 6.5323 6.81506 6.5323 6.63506L6.5323 1.71106C6.5323 1.53106 6.3883 1.38706 6.2083 1.38706L1.2843 1.38706Z" fill="rgb(1,107,246)" fill-rule="nonzero" />
+	<path id="矢量 37" d="M5.82 4.34809L1.676 4.34809C1.58 4.34809 1.5 4.27209 1.5 4.17209C1.5 4.07609 1.576 3.99609 1.676 3.99609L5.82 3.99609C5.916 3.99609 5.996 4.07209 5.996 4.17209C5.996 4.27209 5.916 4.34809 5.82 4.34809Z" fill="rgb(1,107,246)" fill-rule="nonzero" />
+	<path id="矢量 38" d="M3.74827 6.41973C3.65227 6.41973 3.57227 6.34373 3.57227 6.24373L3.57227 2.10373C3.57227 2.00773 3.64827 1.92773 3.74827 1.92773C3.84827 1.92773 3.92427 2.00373 3.92427 2.10373L3.92427 6.24773C3.92427 6.34373 3.84427 6.41973 3.74827 6.41973L3.74827 6.41973Z" fill="rgb(1,107,246)" fill-rule="nonzero" />
+</svg>