소스 검색

首次认证职位发布流程

xxdezh 8 달 전
부모
커밋
f647e1831b

+ 134 - 19
package/jobIntention/addAddress.vue

@@ -4,6 +4,13 @@
     <view class="roles-content">
       <view class="content">
         <view class="title">添加地址</view>
+        
+        <!-- 地图选点入口 -->
+        <view class="map-selector" @click="openMapSelector">
+          <u-icon name="map" size="36rpx" color="#007AFF" marginRight="16rpx"></u-icon>
+          <text class="map-text">通过地图选择地址</text>
+        </view>
+        
         <view class="form-item">
           <view class="item-label"> 工作地址 </view>
           <u-input
@@ -14,10 +21,11 @@
             :customStyle="{ padding: '8rpx 24rpx ' }"
           >
             <template #prefix>
-              <u-icon name="phone" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
+              <u-icon name="map" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
             </template>
           </u-input>
         </view>
+        
         <view class="form-item">
           <view class="item-label"> 楼层/单元室 </view>
           <u-input
@@ -28,44 +36,107 @@
             :customStyle="{ padding: '8rpx 24rpx ' }"
           >
             <template #prefix>
-              <u-icon name="phone" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
+              <u-icon name="home" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
             </template>
           </u-input>
         </view>
+        
+        <!-- 经纬度信息(可选显示) -->
+        <view class="location-info" v-if="latitude && longitude">
+          <text>当前地址经纬度:{{ latitude }}, {{ longitude }}</text>
+        </view>
       </view>
     </view>
-    <view class="submit-btn" @click="goBack">确定</view>
+    <view class="submit-btn" @click="confirmAddress">确定</view>
   </view>
 </template>
+
 <script>
 import navBar from "@/components/nav-bar/index.vue";
 export default {
   data() {
     return {
-      address: "",
-      addressDetail: '',
+      address: "",        // 办公大楼名称
+      addressDetail: '',  // 楼层/单元室详情
+      latitude: '',       // 纬度
+      longitude: ''       // 经度
     };
   },
   components: {
     navBar,
   },
   onLoad(options) {
-    if (options.text) {
-      this.text = options.text;
-    }
+    // 回显上一页传递的地址信息
+    if (options.address) this.address = decodeURIComponent(options.address);
+    if (options.addressDetail) this.addressDetail = decodeURIComponent(options.addressDetail);
+    if (options.latitude) this.latitude = options.latitude;
+    if (options.longitude) this.longitude = options.longitude;
   },
   methods: {
-    onInput(e) {
-      //   console.log(e);
-      // 如果需要额外的输入控制
-      //   this.text = e.detail.value;
+    // 打开地图选择地址
+    openMapSelector() {
+      // 使用uni-app的地图选择API
+      uni.chooseLocation({
+        success: (res) => {
+          // 地图选点成功后自动填充地址信息
+          this.address = res.name || res.address;
+          this.latitude = res.latitude;   // 获取纬度
+          this.longitude = res.longitude; // 获取经度
+          
+          // 解析详细地址(尝试提取门牌号等信息)
+          const addressParts = this.parseAddressDetail(res.address);
+          if (addressParts.detail) {
+            this.addressDetail = addressParts.detail;
+          }
+        },
+        fail: (err) => {
+          console.error('地图选择失败:', err);
+          if (err.errMsg.includes('auth')) {
+            uni.showToast({
+              title: '请开启位置权限',
+              icon: 'none'
+            });
+          }
+        }
+      });
     },
-    goBack() {
-      uni.navigateBack();
+    
+    // 解析地址详情(提取门牌号等信息)
+    parseAddressDetail(fullAddress) {
+      // 简单的地址解析逻辑,可根据实际需求优化
+      const reg = /(\d+层|\d+栋|\d+单元|\d+室)/g;
+      const details = fullAddress.match(reg);
+      return {
+        detail: details ? details.join('') : ''
+      };
     },
-  },
+    
+    // 确认地址并回传
+    confirmAddress() {
+      if (!this.address.trim()) {
+        return uni.showToast({
+          title: '请输入或选择办公大楼名称',
+          icon: 'none'
+        });
+      }
+
+      // 合并完整地址信息(包含经纬度)
+      const fullAddress = {
+        address: this.address.trim(),
+        addressDetail: this.addressDetail.trim(),
+        latitude: this.latitude,
+        longitude: this.longitude,
+        fullText: this.address.trim() + (this.addressDetail.trim() ? ' ' + this.addressDetail.trim() : '')
+      };
+
+      // 通知上一页
+      uni.$emit('addressData', fullAddress);
+      uni.navigateBack();
+    }
+  }
 };
 </script>
+
 <style lang="scss" scoped>
 .switch-roles {
   background-color: #fff;
@@ -76,27 +147,56 @@ export default {
   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;
+      
       .title {
         color: #333;
         width: 100%;
         font-family: DM Sans;
         font-size: 40rpx;
         font-weight: 600;
+        margin-bottom: 30rpx;
+      }
+      
+      // 地图选择器样式
+      .map-selector {
+        display: flex;
+        align-items: center;
+        padding: 20rpx 24rpx;
+        background-color: #f5f7fa;
+        border-radius: 16rpx;
+        margin-bottom: 30rpx;
+        color: #007AFF;
+        font-size: 28rpx;
+        cursor: pointer;
+        transition: background-color 0.2s;
+        
+        &:active {
+          background-color: #e8ebf0;
+        }
+      }
+      
+      // 经纬度信息样式
+      .location-info {
+        margin-top: 10rpx;
+        font-size: 24rpx;
+        color: #999;
+        padding-left: 4rpx;
       }
     }
   }
+  
   .submit-btn {
     flex-shrink: 0;
     border-radius: 999px;
@@ -113,12 +213,21 @@ export default {
     padding: 16rpx 32rpx;
     box-sizing: border-box;
     margin: 60rpx 20rpx;
+    height: 96rpx;
+    transition: all 0.2s ease;
+    
+    &:active {
+      transform: scale(0.98);
+      opacity: 0.9;
+    }
   }
 }
+
 .form-item {
   margin-bottom: 32rpx;
   width: 100%;
 }
+
 .item-label {
   color: rgba(18, 26, 44, 1);
   font-family: Roboto;
@@ -127,7 +236,6 @@ export default {
   line-height: 51.2rpx;
   letter-spacing: 0px;
   text-align: left;
-  padding-bottom: 6rpx;
   padding: 10rpx 0;
   box-sizing: border-box;
 }
@@ -138,8 +246,15 @@ export default {
   border-radius: 100rpx;
   background: rgba(255, 255, 255, 1);
   padding: 8rpx 24rpx !important;
+  height: 96rpx;
 }
+
+/* 输入框聚焦样式优化 */
+::v-deep .u-input input:focus {
+  border-color: #007AFF !important;
+}
+
 ::v-deep .u-input {
   text-align: left !important;
 }
-</style>
+</style>

+ 15 - 2
package/jobIntention/company.vue

@@ -23,15 +23,28 @@ export default {
     return {
       address: "",
       addressDetail: "",
+	  companyName:"",
+	  companyId:""
     };
   },
   components: {
     navBar,
   },
+  onLoad(options) {
+  	// 接收上个页面传递的公司名称参数
+  	if (options.companyName) {
+  		this.companyName = decodeURIComponent(options.companyName);
+  		console.log('接收的公司名称:', this.companyName);
+  	}
+  	if (options.companyId) {
+  		this.companyId = options.companyId;
+  		console.log('接收的公司ID:', this.companyId);
+  	}
+  },
   methods: {
     goUploadImg(){
-        uni.navigateTo({ url: '/package/jobIntention/companyImg' })
-    },
+        uni.navigateTo({ url: '/package/jobIntention/companyImg?companyName='+this.companyName+'&companyId='+this.companyId })
+    }
   },
 };
 </script>

+ 63 - 3
package/jobIntention/companyImg.vue

@@ -3,10 +3,10 @@
     <nav-bar title="公司认证" color="#000"></nav-bar>
     <view class="company-content">
       <view class="company-title">上传公司营业执照</view>
-      <view class="company-desc">请上传“深圳市汉睿国际猎头服务有限公司”的营业执照</view>
+      <view class="company-desc">请上传“{{companyName}}”的营业执照</view>
       <view class="company-btn">修改公司</view>
       <view class="upload-img">
-      <u-upload :max-size="5 * 1024 * 1024" max-count="1" class="upload" width="452" height="322"></u-upload>
+      <u-upload :action="action" :max-size="5 * 1024 * 1024" max-count="1" class="upload" ref="uUpload" width="452" height="322"></u-upload>
       </view>
       <view class="warning-title">注意事项</view>
       <view class="warning-desc">1.拍摄与所填公司一致的营业执照上传</view>
@@ -18,19 +18,79 @@
 </template>
 <script>
 import navBar from "@/components/nav-bar/index.vue";
+import configdata from '../../common/config.js'
 export default {
   data() {
     return {
       address: "",
       addressDetail: "",
+	  companyName:"",
+	  companyId:"",
+	  action:configdata.APIHOST1 + '/alioss/upload',
+	  lists: []
     };
   },
   components: {
     navBar,
   },
+  onLoad(options) {
+  	// 接收上个页面传递的公司名称参数
+  	if (options.companyName) {
+		
+  		this.companyName = decodeURIComponent(options.companyName);
+  		console.log('接收的公司名称:', this.companyName);
+  	}
+	if (options.companyId) {
+		this.companyId = options.companyId;
+		console.log('接收的公司ID:', this.companyId);
+	}
+  	
+  },
+  	onReady() {
+		// 得到整个组件对象,内部图片列表变量为"lists"
+		this.lists = this.$refs.uUpload.lists;
+  		},
   methods: {
     goUnderReview(){
-      uni.navigateTo({ url: '/package/jobIntention/underReview' })
+		console.log(this.lists[0].response.data)
+		var url=this.lists[0].response.data
+		const data = {
+			companyLogo: url, //logo
+			companyId: this.companyId, //ID
+		};
+		// 调用接口提交
+		uni.showLoading({
+			title: "提交中..."
+		});
+		this.$Request.postJson("/app/company/updateCompany", data)
+			.then((res) => {
+				uni.hideLoading();
+				if (res.code === 0) {
+					uni.showToast({
+						title: "提交成功",
+						icon: "success"
+					});
+				    uni.navigateTo({ url: '/package/jobIntention/underReview' })
+		
+		
+				} else {
+					uni.showToast({
+						title: res.msg || "提交失败",
+						icon: "none"
+					});
+				}
+			})
+			.catch((err) => {
+				uni.hideLoading();
+				console.error("提交失败:", err);
+				uni.showToast({
+					title: "网络异常",
+					icon: "none"
+				});
+			});
+		
+		
+  
     }
   },
 };

+ 126 - 102
package/jobIntention/editJob.vue

@@ -1,158 +1,182 @@
 <template>
   <view class="switch-roles">
-    <nav-bar title="岗位描述" color="#000"></nav-bar>
+    <nav-bar 
+      title="岗位描述" 
+      color="#000" 
+      background="#fff"
+      border-bottom="true"
+    ></nav-bar>
+    
     <view class="roles-content">
       <view class="content">
         <view class="title">岗位描述</view>
-        <view class="desc"
-          >请勿填写QQ、微信、电话等联系方式及特殊符号,性别歧视词、
-          违反劳动法相关内容,否则有可能导致账号封禁。</view
-        >
-        <view class="check-box">
+        
+        <!-- 提示文本 -->
+        <view class="desc">
+          请填写岗位信息(工作内容、任务要求等),请勿包含联系方式、特殊符号或违规内容,否则可能导致账号封禁。
+        </view>
+        
+        <!-- 输入区域 -->
+        <view class="input-container">
           <textarea
-            v-model="text"
-            placeholder="1.工作内容
-2.任务要求
-3.特别说明"
+            v-model="jobDesc"
+            placeholder="1. 工作内容:例如负责客户对接、日常运营等
+2. 任务要求:例如本科以上学历、熟练使用Excel等
+3. 其他说明:例如周末双休、五险一金等"
             maxlength="500"
-            @input="onInput"
             class="textarea"
+            @input="updateWordCount"
           ></textarea>
+          
+          <!-- 字数统计 -->
           <view class="word-count">
-            <text>{{ text ? text.length : 0 }}</text> /500</view
-          >
+            <text :class="{ over: wordCount > 500 }">{{ wordCount }}</text>/500
+          </view>
         </view>
       </view>
     </view>
-    <view class="submit-btn" @click="goJobPosting">确定</view>
+    
+    <!-- 提交按钮 -->
+    <button 
+      class="submit-btn" 
+      @click="sendToPrevPage"
+      :disabled="wordCount > 500"
+    >
+      确定
+    </button>
   </view>
 </template>
+
 <script>
 import navBar from "@/components/nav-bar/index.vue";
+
 export default {
+  components: { navBar },
   data() {
     return {
-      peopleList: [
-        "0-20人",
-        "20-99人",
-        "100-499人",
-        "500-999人",
-        "1000-9999人",
-        "10000人以上",
-      ],
-      text: "",
-      check: 0,
+      jobDesc: "", // 当前页填写的岗位描述
+      wordCount: 0 // 字数统计
     };
   },
-  components: {
-    navBar,
-  },
-  onLoad(options) {
-    if (options.text) {
-      this.text = options.text;
-    }
-  },
   methods: {
-    onInput(e) {
-      //   console.log(e);
-      // 如果需要额外的输入控制
-      //   this.text = e.detail.value;
-    },
-    goJobPosting() {
-      uni.navigateTo({
-        url: `/pages/my/jobPosting?text=${this.text}`,
-      });
+    // 实时更新字数
+    updateWordCount(e) {
+      this.wordCount = e.detail.value.length;
     },
-  },
+    
+    // 回传数据到上一页
+    sendToPrevPage() {
+         // 触发全局事件,传递当前页填写的岗位描述
+           uni.$emit("jobDescUpdated", { 
+             desc: this.jobDesc 
+           });
+           
+           // 返回上一页
+           uni.navigateBack({ delta: 1 });
+    }
+  }
 };
 </script>
+
 <style lang="scss" scoped>
 .switch-roles {
-  background-color: #fff;
   position: absolute;
+  top: 0;
   left: 0;
   right: 0;
-  top: 0;
   bottom: 0;
+  background-color: #f5f5f5;
   display: flex;
   flex-direction: column;
+
   .roles-content {
-    width: 100%;
     flex: 1;
-    overflow: hidden;
+    padding: 24rpx;
     overflow-y: auto;
+
     .content {
-      padding: 40rpx;
-      box-sizing: border-box;
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      justify-content: center;
+      background: #fff;
+      border-radius: 16rpx;
+      padding: 30rpx;
+      box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
+
       .title {
-        color: #333;
-        width: 100%;
-        font-family: DM Sans;
-        font-size: 40rpx;
+        font-size: 34rpx;
         font-weight: 600;
+        color: #333;
+        margin-bottom: 20rpx;
+        padding-bottom: 15rpx;
+        border-bottom: 1rpx solid #eee;
       }
+
       .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;
+        color: #666;
+        line-height: 36rpx;
+        margin-bottom: 28rpx;
+        padding: 12rpx 16rpx;
+        background: #f9f9f9;
+        border-radius: 8rpx;
       }
-      .check-box {
-        width: 100%;
+
+      .input-container {
+        background: #f7f7f7;
         border-radius: 12rpx;
-        background: rgba(240, 240, 240, 1);
-        padding: 34rpx;
-        padding-top: 40rpx;
-        box-sizing: border-box;
+        padding: 24rpx;
+
+        .textarea {
+          width: 100%;
+          min-height: 280rpx;
+          font-size: 26rpx;
+          color: #333;
+          line-height: 1.6;
+          background: transparent;
+          padding: 0;
+          margin-bottom: 12rpx;
+          resize: none;
+
+          &::placeholder {
+            color: #999;
+            line-height: 1.6;
+          }
+        }
+
         .word-count {
-          font-family: DM Sans;
-          font-size: 20rpx;
-          font-weight: 400;
-          line-height: 26rpx;
           text-align: right;
-          text {
-            color: #016bf6;
+          font-size: 22rpx;
+          color: #999;
+
+          .over {
+            color: #ff4d4f;
+            font-weight: 500;
           }
         }
       }
     }
   }
+
   .submit-btn {
-    flex-shrink: 0;
-    border-radius: 999px;
-    box-shadow: 0px 2px 4px 0px rgba(9, 196, 116, 0.3);
-    background: linear-gradient(90deg, rgba(13, 39, 247, 1), rgba(19, 193, 234, 1) 100%);
-    color: rgba(255, 255, 255, 1);
-    font-family: DM Sans;
+    margin: 30rpx 24rpx;
+    padding: 22rpx 0;
+    width: calc(100% - 48rpx);
+    background: linear-gradient(90deg, #0d27f7, #13c1ea);
+    color: #fff;
     font-size: 32rpx;
-    font-weight: 400;
-    line-height: 48rpx;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    padding: 16rpx 32rpx;
-    box-sizing: border-box;
-    margin: 60rpx 20rpx;
+    font-weight: 500;
+    border-radius: 100rpx;
+    box-shadow: 0 4rpx 12rpx rgba(19, 193, 234, 0.3);
+    transition: all 0.2s;
+
+    &:disabled {
+      background: #e5e5e5;
+      color: #999;
+      box-shadow: none;
+    }
+
+    &:active {
+      opacity: 0.9;
+      transform: scale(0.99);
+    }
   }
 }
-::v-deep .textarea-placeholder {
-  color: rgba(153, 153, 153, 1);
-  font-family: DM Sans;
-  font-size: 20rpx !important;
-  font-weight: 400;
-  line-height: 26rpx;
-}
-::v-deep .uni-textarea-textarea {
-  font-size: 20rpx;
-}
-</style>
+</style>

+ 211 - 139
package/jobIntention/fund.vue

@@ -2,89 +2,124 @@
   <view class="switch-roles">
     <nav-bar title="福利待遇" color="#000"></nav-bar>
     <view class="roles-content">
-      <view class="content">
-        <view class="title">福利待遇</view>
-        <view class="check-box">
+      <view class="content-card">
+        <view class="card-title">福利待遇</view>
+        
+        <!-- 已选标签展示区(核心新增) -->
+        <view class="selected-tags" v-if="selectedTags.length > 0">
+          <view class="selected-tag-item" v-for="(tag, index) in selectedTags" :key="index">
+            <text>{{ tag }}</text>
+            <u-icon 
+              name="close" 
+              size="24rpx" 
+              color="#999" 
+              @click.stop="removeTag(index)"
+            ></u-icon>
+          </view>
+        </view>
+
+        <!-- 自定义输入 + 添加按钮区域 -->
+        <view class="input-area">
           <textarea
-            v-model="text"
-            placeholder="请详细描述公司的福利待遇"
+            v-model="customWelfare"
+            placeholder="请输入自定义福利"
             maxlength="500"
-            @input="onInput"
-            class="textarea"
+            class="custom-textarea"
           ></textarea>
+          <button class="add-btn" @click="addCustomTag">添加</button>
           <view class="word-count">
-            <text>{{ text ? text.length : 0 }}</text> /500</view
-          >
+            <text>{{ customWelfare.length }}</text> /500
+          </view>
         </view>
-        <view class="fund-box">
-          <view
-            class="fund-item"
-            :class="{ 'fund-check': checkList.includes(index) }"
-            v-for="(item, index) in fundList"
-            :key="index"
-            @click="checkFund(index)"
-          >
-            {{ item }}
+
+        <!-- 常用标签区域 -->
+        <view class="tag-section">
+          <view class="section-title">常用福利标签</view>
+          <view class="tag-list">
+            <view
+              class="tag-item"
+              :class="{ 'tag-selected': selectedTags.includes(item) }"
+              v-for="item in fundList"
+              :key="item"
+              @click="toggleTag(item)"
+            >
+              {{ item }}
+            </view>
           </view>
+          <view class="selected-count">已选 {{ selectedTags.length }} 个福利</view>
         </view>
-        <view class="fund-desc-txt">已选{{ checkList.length }}个</view>
       </view>
     </view>
-    <view class="submit-btn" @click="goBack">确定</view>
+    <view class="submit-btn" @click="submitWelfare">确定</view>
   </view>
 </template>
+
 <script>
 import navBar from "@/components/nav-bar/index.vue";
 export default {
   data() {
     return {
       fundList: [
-        "五险一金",
-        "定期体检",
-        "年终奖",
-        "带薪年假",
-        "员工旅游",
-        "节日福利",
-        "绩效",
-        "零食下午茶",
+        "五险一金", "定期体检", "年终奖", "带薪年假", 
+        "员工旅游", "节日福利", "绩效奖金", "零食下午茶",
+        "住房补贴", "交通补贴", "餐饮补贴", "通讯补贴"
       ],
-      text: "",
-      checkList: [],
+      customWelfare: "", 
+      selectedTags: [], // 存储所有选中的标签(系统+自定义)
     };
   },
-  components: {
-    navBar,
-  },
-  onLoad(options) {
-    if (options.text) {
-      this.text = options.text;
-    }
-  },
+  components: { navBar },
   methods: {
-    onInput(e) {
-      //   console.log(e);
-      // 如果需要额外的输入控制
-      //   this.text = e.detail.value;
+    // 切换系统标签选中状态
+    toggleTag(tag) {
+      if (this.selectedTags.includes(tag)) {
+        this.selectedTags = this.selectedTags.filter(item => item !== tag);
+      } else {
+        if (this.selectedTags.length < 10) {
+          this.selectedTags.push(tag);
+        } else {
+          uni.showToast({ title: '最多选择10个福利', icon: 'none' });
+        }
+      }
     },
-    goBack() {
-      uni.navigateBack();
+
+    // 移除已选标签(系统或自定义)
+    removeTag(index) {
+      this.selectedTags.splice(index, 1);
     },
-    checkFund(index) {
-      const currentIndex = this.checkList.indexOf(index);
-      if (currentIndex > -1) {
-        // 如果已选中,移除
-        this.checkList.splice(currentIndex, 1);
-      } else {
-        // 如果未选中,添加
-        this.checkList.push(index);
+
+    // 添加自定义标签
+    addCustomTag() {
+      const tag = this.customWelfare.trim();
+      if (!tag) {
+        uni.showToast({ title: '请输入福利内容', icon: 'none' });
+        return;
       }
+      if (this.selectedTags.includes(tag)) {
+        uni.showToast({ title: '该福利已添加', icon: 'none' });
+        return;
+      }
+      if (this.selectedTags.length >= 10) {
+        uni.showToast({ title: '最多选择10个福利', icon: 'none' });
+        return;
+      }
+      this.selectedTags.push(tag); // 添加到选中列表
+      this.customWelfare = ""; // 清空输入框
+    },
+
+    // 提交回传
+    submitWelfare() {
+      const welfareData = this.selectedTags.join(';');
+      uni.$emit("fundData", welfareData);
+      uni.navigateBack();
     },
   },
 };
 </script>
+
 <style lang="scss" scoped>
 .switch-roles {
-  background-color: #fff;
+  background-color: #f5f7fa;
   position: absolute;
   left: 0;
   right: 0;
@@ -92,104 +127,141 @@ export default {
   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;
+    padding: 20rpx;
+  }
+
+  .content-card {
+    background-color: #fff;
+    border-radius: 16rpx;
+    padding: 30rpx;
+    margin-bottom: 20rpx;
+    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
+  }
+
+  .card-title {
+    font-size: 32rpx;
+    font-weight: 600;
+    color: #333;
+    margin-bottom: 20rpx;
+  }
+
+  /* 已选标签展示区样式 */
+  .selected-tags {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 16rpx;
+    padding: 10rpx 0;
+    margin-bottom: 20rpx;
+    min-height: 60rpx;
+    border-bottom: 1rpx solid #f0f0f0;
+    padding-bottom: 15rpx;
+
+    .selected-tag-item {
+      display: inline-flex;
       align-items: center;
-      justify-content: center;
-      .title {
-        color: #333;
-        width: 100%;
-        font-family: DM Sans;
-        font-size: 40rpx;
-        font-weight: 600;
-      }
+      background-color: #f0f7ff;
+      border-radius: 60rpx;
+      padding: 8rpx 20rpx;
+      padding-right: 12rpx;
+      font-size: 24rpx;
+      color: #007aff;
+      gap: 8rpx;
 
-      .check-box {
-        width: 100%;
-        border-radius: 12rpx;
-        background: rgba(240, 240, 240, 1);
-        padding: 34rpx;
-        padding-top: 40rpx;
-        box-sizing: border-box;
-        margin: 20rpx 0;
-        .word-count {
-          font-family: DM Sans;
-          font-size: 20rpx;
-          font-weight: 400;
-          line-height: 26rpx;
-          text-align: right;
-          text {
-            color: #016bf6;
-          }
+      u-icon {
+        margin-left: 5rpx;
+        padding: 2rpx;
+        &:active {
+          background-color: rgba(0, 0, 0, 0.05);
+          border-radius: 50%;
         }
       }
     }
   }
-  .submit-btn {
-    flex-shrink: 0;
-    border-radius: 999px;
-    box-shadow: 0px 2px 4px 0px rgba(9, 196, 116, 0.3);
-    background: linear-gradient(90deg, rgba(13, 39, 247, 1), rgba(19, 193, 234, 1) 100%);
-    color: rgba(255, 255, 255, 1);
-    font-family: DM Sans;
-    font-size: 32rpx;
-    font-weight: 400;
-    line-height: 48rpx;
+
+  .input-area {
     display: flex;
-    justify-content: center;
-    align-items: center;
-    padding: 16rpx 32rpx;
-    box-sizing: border-box;
-    margin: 60rpx 20rpx;
+    flex-direction: column;
+    margin-bottom: 30rpx;
+
+    .custom-textarea {
+      width: 100%;
+      min-height: 120rpx;
+      border: 1rpx solid #e5e7eb;
+      border-radius: 8rpx;
+      padding: 20rpx;
+      font-size: 26rpx;
+      margin-bottom: 16rpx;
+    }
+
+    .add-btn {
+      align-self: flex-end;
+      background-color: #007aff;
+      color: #fff;
+      border-radius: 8rpx;
+      font-size: 24rpx;
+      padding: 10rpx 24rpx;
+      margin-bottom: 10rpx;
+    }
+
+    .word-count {
+      font-size: 22rpx;
+      color: #999;
+      text-align: right;
+      text {
+        color: #007aff;
+      }
+    }
   }
-}
-.fund-desc-txt {
-  color: #016bf6;
-  font-family: DM Sans;
-  font-size: 20rpx;
-  font-weight: 400;
-  line-height: 26rpx;
-  width: 100%;
-  margin-top: 8rpx;
-}
-.fund-box {
-  display: flex;
-  align-items: center;
-  flex-wrap: wrap;
-  gap: 8rpx;
-  .fund-item {
-    flex-shrink: 0;
-    box-sizing: border-box;
-    border: 1rpx solid rgba(255, 102, 0, 1);
-    border-radius: 8rpx;
-    padding: 8rpx;
-    color: #016bf6;
-    font-family: DM Sans;
-    font-size: 16rpx;
-    font-weight: 400;
-    text-align: left;
+
+  .tag-section {
+    .section-title {
+      font-size: 28rpx;
+      color: #666;
+      margin-bottom: 20rpx;
+    }
+
+    .tag-list {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 16rpx;
+      margin-bottom: 20rpx;
+
+      .tag-item {
+        padding: 12rpx 24rpx;
+        border: 1rpx solid #d1d5db;
+        border-radius: 60rpx;
+        color: #4b5563;
+        font-size: 26rpx;
+        background-color: #fff;
+      }
+
+      .tag-selected {
+        border-color: #007aff;
+        color: #007aff;
+        background-color: #e0f2ff;
+      }
+    }
+
+    .selected-count {
+      font-size: 24rpx;
+      color: #666;
+    }
   }
-  .fund-check {
-    background: #fce9dc;
-    border-color: #fce9dc;
+
+  .submit-btn {
+    margin: 30rpx;
+    padding: 24rpx 0;
+    border-radius: 100rpx;
+    background: linear-gradient(90deg, #005eff, #00bfff);
+    color: #fff;
+    font-size: 32rpx;
+    font-weight: 500;
+    text-align: center;
   }
 }
-::v-deep .textarea-placeholder {
-  color: rgba(153, 153, 153, 1);
-  font-family: DM Sans;
-  font-size: 20rpx !important;
-  font-weight: 400;
-  line-height: 26rpx;
-}
-::v-deep .uni-textarea-textarea {
-  font-size: 20rpx;
-}
-</style>
+</style>

+ 145 - 99
package/jobIntention/jobSkills.vue

@@ -17,7 +17,7 @@
 			<view class="description">根据你的偏好设置,为你推荐更匹配的职位,最多选择8个</view>
 			
 			<!-- 运营方向 -->
-			<view class="skills-section" v-for="(it, ind) in operationOptions" >
+			<view class="skills-section" v-for="(it, ind) in operationOptions" :key="ind">
 				<view class="section-title">{{it.postSkillName}}</view>
 				
 				<!-- 技能标签网格 -->
@@ -34,8 +34,6 @@
 				</view>
 			</view>
 			
-			
-			
 			<!-- 自定义标签 -->
 			<view class="skills-section">
 				<view class="section-title">自定义标签</view>
@@ -88,7 +86,7 @@
 </template>
 
 <script>
-	var set=0
+let set = 0
 export default {
 	data() {
 		return {
@@ -97,30 +95,27 @@ export default {
 			newTagName: '',
 			selectedOperation: [],
 			customTags: [],
-			operationOptions: [
-				
-			]
+			operationOptions: []
 		}
 	},
 	onLoad(options) {
-		if (options&&options.jobTitle) {
+		if (options && options.jobTitle) {
 			this.jobTitle = decodeURIComponent(options.jobTitle)
 		}
-		if(options&&options.skill)
+		if (options && options.skill) {
 			this.selectedOperation = JSON.parse(decodeURIComponent(options.skill))
+		}
 		this.getData()
-		set=options&&options.set?options.set:0
+		set = options && options.set ? options.set : 0
 	},
 	methods: {
 		goBack() {
 			uni.navigateBack()
 		},
-		getData(){
-			let data = {
-				
-			}
-			this.$Request.getT('/app/userFirst/getPostSkill',data).then(res => {
-				if(res.code==0){
+		getData() {
+			const data = {}
+			this.$Request.getT('/app/userFirst/getPostSkill', data).then(res => {
+				if (res.code === 0) {
 					this.operationOptions = res.data
 				}
 			})
@@ -152,8 +147,12 @@ export default {
 		addCustomTag() {
 			if (this.newTagName.trim()) {
 				if (this.customTags.length < 5) {
-					if(this.customTags.length+this.selectedOperation.length>=8)
-						return uni.showToast({title: '最多选择8个标签',icon: 'none'})
+					if (this.customTags.length + this.selectedOperation.length >= 8) {
+						return uni.showToast({
+							title: '最多选择8个标签',
+							icon: 'none'
+						})
+					}
 					this.customTags.push(this.newTagName.trim())
 					this.showAddTag = false
 					this.newTagName = ''
@@ -174,21 +173,16 @@ export default {
 			this.customTags.splice(index, 1)
 		},
 		confirmSelection() {
-			// 返回选中的技能设置
-			
-			// 通知父页面更新技能设置
+			// 合并选择的标签和自定义标签并回传
+			const allSelectedTags = [...this.selectedOperation, ...this.customTags]
+			// 触发事件通知上一页面
 			uni.$emit('skillsUpdated', {
 				jobTitle: this.jobTitle,
-				operation: this.selectedOperation,
-				skills: this.selectedOperation.concat(this.customTags),
-				customTags: this.customTags,
+				selectedTags: allSelectedTags, // 所有选中的标签(含系统和自定义)
+				systemTags: this.selectedOperation, // 系统标签
+				customTags: this.customTags, // 自定义标签
 				set
 			})
-			
-			/* uni.showToast({
-				title: '技能设置已保存',
-				icon: 'success'
-			}) */
 			uni.navigateBack({
 				delta: 1
 			})
@@ -203,7 +197,7 @@ export default {
 	background: #fff;
 	display: flex;
 	flex-direction: column;
-    padding: 88rpx 40rpx 40rpx 40rpx;
+	padding: 88rpx 40rpx 40rpx 40rpx;
 }
 
 .navbar-content {
@@ -222,130 +216,160 @@ export default {
 }
 
 .nav-title {
-    color: rgba(51, 51, 51, 1);
-    font-family: DM Sans;
-    font-size: 36rpx;
-    font-weight: 700;
-    line-height: 26px;
-    letter-spacing: 0px;
-    text-align: center;
+	color: rgba(51, 51, 51, 1);
+	font-family: DM Sans;
+	font-size: 36rpx;
+	font-weight: 700;
+	line-height: 26px;
+	letter-spacing: 0px;
+	text-align: center;
 }
 
 .main-content {
-    margin-top: 20rpx;
+	margin-top: 20rpx;
 }
 
 .job-title {
-    color: rgba(51, 51, 51, 1);
-    font-family: DM Sans;
-    font-size: 52rpx;
-    font-weight: 700;
-    line-height: 30px;
-    letter-spacing: 0px;
-    text-align: left;
+	color: rgba(51, 51, 51, 1);
+	font-family: DM Sans;
+	font-size: 52rpx;
+	font-weight: 700;
+	line-height: 30px;
+	letter-spacing: 0px;
+	text-align: left;
+	margin-bottom: 30rpx;
 }
 
 .description {
-    margin: 20rpx 0;
-    color: rgba(102, 102, 102, 1);
-    font-family: DM Sans;
-    font-size: 28rpx;
-    font-weight: 400;
-    letter-spacing: 0px;
-    text-align: left;
+	margin: 20rpx 0 40rpx 0;
+	color: rgba(102, 102, 102, 1);
+	font-family: DM Sans;
+	font-size: 28rpx;
+	font-weight: 400;
+	letter-spacing: 0px;
+	text-align: left;
+	line-height: 1.5;
 }
 
 .skills-section {
-	margin-bottom: 40rpx;
+	margin-bottom: 50rpx;
 }
 
 .section-title {
-    color: rgba(34, 37, 42, 1);
-    font-family: DM Sans;
-    font-size: 36rpx;
-    font-weight: 400;
-    line-height: 24px;
-    letter-spacing: 0px;
-    text-align: left;
-    margin-bottom: 20rpx;
+	color: rgba(34, 37, 42, 1);
+	font-family: DM Sans;
+	font-size: 36rpx;
+	font-weight: 500;
+	line-height: 24px;
+	letter-spacing: 0px;
+	text-align: left;
+	margin-bottom: 24rpx;
+	padding-left: 4rpx;
 }
 
 .skills-grid {
 	display: flex;
 	flex-wrap: wrap;
-	gap: 12rpx;
+	gap: 20rpx;
 }
 
 .skill-tag {
-	width: fit-content;//calc((100% - 72rpx) / 6)
-	padding: 10rpx 12rpx;
+	padding: 16rpx 24rpx;
 	background: #F7F8FA;
-	border: 1rpx solid #F7F8FA;
-	border-radius: 12rpx;
-	transition: all 0.3s ease;
+	border: 1rpx solid #E5E5EA;
+	border-radius: 16rpx;
+	transition: all 0.2s ease;
 	display: flex;
 	align-items: center;
 	justify-content: center;
+	cursor: pointer;
 	
 	text {
-		font-size: 20rpx;
+		font-size: 26rpx;
 		color: rgba(102, 102, 102, 1);
 		font-weight: 400;
 		text-align: center;
 		line-height: 1.2;
 	}
 	
+	&:hover {
+		background: rgba(153, 196, 250, 0.2);
+		border-color: rgba(1, 107, 246, 0.3);
+	}
+	
 	&.active {
-		background: rgba(153, 196, 250, 0.4);
-		border: 0.5px solid rgba(1, 107, 246, 1);
+		background: rgba(1, 107, 246, 0.1);
+		border: 1rpx solid rgba(1, 107, 246, 1);
+		box-shadow: 0 4rpx 12rpx rgba(1, 107, 246, 0.15);
 		
 		text {
 			color: rgba(1, 107, 246, 1);
-			font-weight: 400;
+			font-weight: 500;
 		}
 	}
 	
 	&:active {
-		transform: scale(0.95);
+		transform: scale(0.96);
 	}
 }
 
 .custom-tags {
 	display: flex;
 	flex-wrap: wrap;
-	gap: 12rpx;
+	gap: 20rpx;
 }
 
 .custom-tag {
-	padding: 8rpx 12rpx;
+	padding: 14rpx 20rpx;
 	background: rgba(153, 196, 250, 0.4);
-	border: 0.5px solid rgba(1, 107, 246, 1);
-	border-radius: 12rpx;
+	border: 1rpx solid rgba(1, 107, 246, 1);
+	border-radius: 16rpx;
 	display: flex;
 	align-items: center;
-	gap: 8rpx;
+	gap: 10rpx;
+	cursor: pointer;
+	transition: all 0.2s ease;
 	
 	text {
-		font-size: 18rpx;
+		font-size: 24rpx;
 		color: rgba(1, 107, 246, 1);
 		font-weight: 400;
 	}
+	
+	&:hover {
+		background: rgba(153, 196, 250, 0.6);
+	}
+	
+	&:active {
+		transform: scale(0.96);
+	}
 }
 
 .add-tag {
-	padding: 8rpx 12rpx;
+	padding: 14rpx 20rpx;
 	background: #F7F8FA;
-	border: 1rpx solid #F7F8FA;
-	border-radius: 12rpx;
+	border: 1rpx dashed #E5E5EA;
+	border-radius: 16rpx;
 	display: flex;
 	align-items: center;
-	gap: 8rpx;
+	gap: 10rpx;
+	cursor: pointer;
+	transition: all 0.2s ease;
 	
 	text {
-		font-size: 18rpx;
+		font-size: 24rpx;
 		color: rgba(102, 102, 102, 1);
 		font-weight: 400;
 	}
+	
+	&:hover {
+		background: #f0f0f0;
+		border-color: #d9d9d9;
+	}
+	
+	&:active {
+		transform: scale(0.96);
+	}
 }
 
 .bottom-btn-container {
@@ -355,26 +379,32 @@ export default {
 	right: 0;
 	padding: 32rpx;
 	background: #fff;
-	border-top: 1px solid #f0f0f0;
+	border-top: 1rpx solid #f0f0f0;
+	z-index: 10;
 }
 
 .confirm-btn {
 	width: 100%;
-	height: 88rpx;
-	background: linear-gradient(90deg, #007AFF 0%, #5AC8FA 100%);
-	border-radius: 44rpx;
+	height: 96rpx;
+	background: linear-gradient(90deg, #007AFF 0%, #2DB0F0 100%);
+	border-radius: 48rpx;
 	display: flex;
 	align-items: center;
 	justify-content: center;
+	box-shadow: 0 6rpx 16rpx rgba(0, 122, 255, 0.2);
+	transition: all 0.2s ease;
+	cursor: pointer;
 	
 	text {
-		font-size: 32rpx;
+		font-size: 34rpx;
 		font-weight: 600;
 		color: #fff;
 	}
 	
 	&:active {
 		background: linear-gradient(90deg, #0056CC 0%, #4A9FE7 100%);
+		transform: scale(0.98);
+		box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.15);
 	}
 }
 
@@ -382,7 +412,8 @@ export default {
 .add-tag-popup {
 	background: #fff;
 	border-radius: 24rpx;
-	padding: 40rpx;
+	padding: 48rpx 40rpx;
+	width: 100%;
 	
 	.popup-title {
 		color: rgba(34, 37, 42, 1);
@@ -391,48 +422,63 @@ export default {
 		font-weight: 500;
 		line-height: 24px;
 		text-align: center;
-		margin-bottom: 30rpx;
+		margin-bottom: 36rpx;
 	}
 	
 	.popup-content {
-		margin-bottom: 30rpx;
+		margin-bottom: 40rpx;
 		
 		.tag-input {
 			width: 100%;
-			height: 80rpx;
-			padding: 0 20rpx;
+			height: 90rpx;
+			padding: 0 24rpx;
 			border: 1rpx solid #E5E5EA;
-			border-radius: 12rpx;
+			border-radius: 16rpx;
 			font-size: 28rpx;
 			color: rgba(34, 37, 42, 1);
 			background: #F7F8FA;
+			box-sizing: border-box;
+		}
+		
+		.tag-input::placeholder {
+			color: #C9CDD4;
 		}
 	}
 	
 	.popup-buttons {
 		display: flex;
-		gap: 20rpx;
+		gap: 24rpx;
 		
 		.popup-btn {
 			flex: 1;
-			height: 80rpx;
-			border-radius: 12rpx;
+			height: 88rpx;
+			border-radius: 16rpx;
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			font-size: 28rpx;
+			font-size: 30rpx;
 			font-weight: 500;
+			transition: all 0.2s ease;
+			cursor: pointer;
 		}
 		
 		.cancel-btn {
 			background: #F7F8FA;
 			color: rgba(102, 102, 102, 1);
+			
+			&:active {
+				background: #eaeaea;
+			}
 		}
 		
 		.confirm-btn {
 			background: #007AFF;
 			color: #fff;
+			
+			&:active {
+				background: #0056CC;
+			}
 		}
 	}
 }
-</style>
+</style>

+ 34 - 0
package/jobIntention/underReview.vue

@@ -25,10 +25,44 @@ export default {
       addressDetail: "",
     };
   },
+  
+onShow() {
+	this.getcompanystatus()
+},
   methods: {
     goCompleteMsg() {
       uni.navigateTo({ url: "/package/jobIntention/completeMsg" });
     },
+	//查询用户企业状态
+	getcompanystatus(){
+		  this.$Request.get("/app/company/selectCompanyByUserId", "")
+		  	.then((res) => {
+		 
+		  		if (res.code === 0) {
+		  			uni.showToast({
+		  				title: "提交成功",
+		  				icon: "success"
+		  			});
+		  		    uni.navigateTo({ url: '/package/jobIntention/underReview' })
+		  
+		  
+		  		} else {
+		  			uni.showToast({
+		  				title: res.msg || "提交失败",
+		  				icon: "none"
+		  			});
+		  		}
+		  	})
+		  	.catch((err) => {
+		 
+		  		console.error("提交失败:", err);
+		  		uni.showToast({
+		  			title: "网络异常",
+		  			icon: "none"
+		  		});
+		  	});
+		  
+	}
   },
 };
 </script>

+ 1 - 1
pages/my/jobApplicant/guidePage.vue

@@ -29,7 +29,7 @@ export default {
     goWork(){
         uni.navigateTo({ url: '/pages/my/jobApplicant/welcomePage' })
     },
-	goWork(){
+	gotocompany(){
 	    uni.navigateTo({ url: '/pages/my/businessLicense' })
 	},
 	

+ 88 - 6
pages/my/jobPosting.vue

@@ -40,6 +40,7 @@
 				check: 0,
 				text: "",
 				companyName: "",
+				companyId:"",
 				numList: [{
 						name: "填写基本信息",
 					},
@@ -64,16 +65,20 @@
 				this.companyName = decodeURIComponent(options.companyName);
 				console.log('接收的公司名称:', this.companyName);
 			}
-			if (options.text) {
-				this.text = decodeURIComponent(options.text);
-				console.log('接收的:', this.text);
-			}
+			 this.descListener = uni.$on("jobDescUpdated", (data) => {
+			      console.log("收到岗位描述数据:", data);
+			      this.text = data.desc; // 赋值给当前页变量
+			    });
 			this.jobListener = uni.$on('jobs', (data) => {
 				console.log('接收从B页传来的数据:', data);
 				// 手动更新 A 页的 data
 				this.jobInfo = data;
 
 			});
+			if (options.companyId) {
+				this.companyId = options.companyId;
+				console.log('接收的公司ID:', this.companyId);
+			}
 
 
 		},
@@ -97,7 +102,7 @@
 			},
 			goJobContent() {
 				uni.navigateTo({
-					url: `/package/jobIntention/editJob?text=${this.text}`,
+					url: `/package/jobIntention/editJob`,
 				});
 			},
 
@@ -109,6 +114,81 @@
 					title: '提交中...'
 				});
 
+//校验数据
+
+  // 校验数据
+  const validate = () => {
+
+    // 2. 校验岗位描述(positionDetails)
+    if (!this.text || this.text.trim() === '') {
+      uni.hideLoading();
+      uni.showToast({
+        title: '岗位描述不能为空',
+        icon: 'none',
+        duration: 2000
+      });
+      return false;
+    }
+    if (this.text.length > 500) {
+      uni.hideLoading();
+      uni.showToast({
+        title: '岗位描述不能超过500字',
+        icon: 'none',
+        duration: 2000
+      });
+      return false;
+    }
+    // 校验是否包含违规内容(简单示例,可根据实际需求扩展)
+    const illegalChars = /QQ|微信|电话|手机号|\/|\\|\*|\?/g;
+    if (illegalChars.test(this.text)) {
+      uni.hideLoading();
+      uni.showToast({
+        title: '岗位描述不能包含联系方式或特殊符号',
+        icon: 'none',
+        duration: 2000
+      });
+      return false;
+    }
+
+    // 3. 校验岗位分类信息(假设ruleClassifyId是必选)
+    if (!this.jobInfo?.ruleClassifyId) {
+      uni.hideLoading();
+      uni.showToast({
+        title: '请选择岗位分类',
+        icon: 'none',
+        duration: 2000
+      });
+      return false;
+    }
+    if (!this.jobInfo?.ruleClassifyName) {
+      uni.hideLoading();
+      uni.showToast({
+        title: '岗位分类名称异常,请重新选择',
+        icon: 'none',
+        duration: 2000
+      });
+      return false;
+    }
+
+    // 4. 校验orderId(如果有实际业务含义,可根据需求调整)
+    // if (!this.orderId || this.orderId < 1) {
+    //   uni.hideLoading();
+    //   uni.showToast({
+    //     title: '订单信息异常',
+    //     icon: 'none',
+    //     duration: 2000
+    //   });
+    //   return false;
+    // }
+
+    // 所有校验通过
+    return true;
+  };
+
+  // 执行校验,通过后再提交
+  if (!validate()) {
+    return; // 校验失败,终止提交
+  }
 				const data = {
 					type: this.check,
 					positionDetails: this.text,
@@ -116,6 +196,7 @@
 					ruleClassifyName: this.jobInfo.ruleClassifyName,
 					orderId:1
 				}
+		
 				// 发送请求
 				this.$Request.postJson("/app/postPush/savePostPush", data)
 					.then((res) => {
@@ -126,10 +207,11 @@
 								title: '提交成功',
 								icon: 'success'
 							});
+							console.log("sssssss",this.companyId)
 							// 提交成功后跳转到职位发布页面
 							setTimeout(() => {
 								uni.navigateTo({
-									url: "/pages/my/jobPostingSecond?companyName="+this.companyName
+									url: "/pages/my/jobPostingSecond?companyName="+this.companyName+'&companyId='+this.companyId
 								});
 
 							}, 1500);

+ 468 - 352
pages/my/jobPostingSecond.vue

@@ -1,360 +1,476 @@
 <template>
-  <view class="switch-roles">
-    <nav-bar title="选择职位要求" color="#000"></nav-bar>
-    <view class="roles-content">
-      <view class="content">
-        <view class="title">继续填写</view>
-        <view class="desc">“{{companyName}}”的职位要求</view>
-        <view class="step">
-          <u-steps :list="numList" mode="number" :current="2"></u-steps>
-        </view>
-
-        <!-- 经验要求 -->
-        <view class="check-title-big">经验要求</view>
-        <view class="check-select" @click="showExper = true">
-          <view class="select-txt">{{ selectedExper || "请选择经验要求" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <!-- 最低学历 -->
-        <view class="check-title-big">最低学历</view>
-        <view class="check-select" @click="showLevel = true">
-          <view class="select-txt">{{ selectedLevel || "请选择学历" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <!-- 薪资范围 -->
-        <view class="check-title-big">薪资范围</view>
-        <view class="check-select" @click="showMoney = true">
-          <view class="select-txt">{{ selectedSalary || "请选择合理的薪资范围" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <!-- 福利待遇 -->
-        <view class="check-title-big">福利待遇(选填)</view>
-        <view class="check-select" @click="goFund">
-          <view class="select-txt">{{ welfareTag || "请填写奖金绩效" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <!-- 职位关键词 -->
-        <view class="check-title-big">职位关键词</view>
-        <view class="check-select" @click="goJobSkill">
-          <view class="select-txt">{{ positionTag || "被选中的关键词将突出展示给牛人" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <!-- 工作地址 -->
-        <view class="check-title-big">工作地址</view>
-        <view class="check-select" @click="goAddAddress">
-          <view class="select-txt">{{ stationName || "请填写精确的工作地点" }}</view>
-          <u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
-        </view>
-
-        <view class="txt-desc">
-          温馨提示:职位类型、职位名称和工作城市发布后不可修改,请您确保信息正确 <br /><br />
-          发布职位即表示同意遵守《招聘行为管理规范》,如违反规则将导致账号被锁定
-        </view>
-      </view>
-    </view>
-
-    <view class="submit-btn" @click="submitPost">确定</view>
-
-    <!-- 经验选择器 -->
-    <u-select 
-      v-model="showExper" 
-      :list="listExper" 
-      title="请选择经验" 
-      @confirm="onExperConfirm"
-      @cancel="showExper = false"
-    ></u-select>
-
-    <!-- 学历选择器 -->
-    <u-select 
-      v-model="showLevel" 
-      :list="listLevel" 
-      title="请选择学历" 
-      @confirm="onLevelConfirm"
-      @cancel="showLevel = false"
-    ></u-select>
-
-    <!-- 薪资选择器 -->
-    <u-select
-      v-model="showMoney"
-      mode="mutil-column"
-      :list="listMoney"
-      title="请选择月薪范围"
-      @confirm="onMoneyConfirm"
-      @cancel="showMoney = false"
-    ></u-select>
-  </view>
+	<view class="switch-roles">
+		<nav-bar title="选择职位要求" color="#000"></nav-bar>
+		<view class="roles-content">
+			<view class="content">
+				<view class="title">继续填写</view>
+				<view class="desc">“{{companyName}}”的职位要求</view>
+				<view class="step">
+					<u-steps :list="numList" mode="number" :current="2"></u-steps>
+				</view>
+
+				<!-- 经验要求 -->
+				<view class="check-title-big">经验要求</view>
+				<view class="check-select" @click="showExper = true">
+					<view class="select-txt">{{ selectedExper || "请选择经验要求" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<!-- 最低学历 -->
+				<view class="check-title-big">最低学历</view>
+				<view class="check-select" @click="showLevel = true">
+					<view class="select-txt">{{ selectedLevel || "请选择学历" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<!-- 薪资范围 -->
+				<view class="check-title-big">薪资范围</view>
+				<view class="check-select" @click="showMoney = true">
+					<view class="select-txt">{{ selectedSalary || "请选择合理的薪资范围" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<!-- 福利待遇 -->
+				<view class="check-title-big">福利待遇(选填)</view>
+				<view class="check-select" @click="goFund">
+					<view class="select-txt">{{ welfareTag || "请填写奖金绩效" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<!-- 职位关键词 -->
+				<view class="check-title-big">职位关键词</view>
+				<view class="check-select" @click="goJobSkill">
+					<view class="select-txt">{{ positionTag || "被选中的关键词将突出展示给牛人" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<!-- 工作地址 -->
+				<view class="check-title-big">工作地址</view>
+				<view class="check-select" @click="goAddAddress">
+					<view class="select-txt">{{ stationName.fullText || "请填写精确的工作地点" }}</view>
+					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
+				</view>
+
+				<view class="txt-desc">
+					温馨提示:职位类型、职位名称和工作城市发布后不可修改,请您确保信息正确 <br /><br />
+					发布职位即表示同意遵守《招聘行为管理规范》,如违反规则将导致账号被锁定
+				</view>
+			</view>
+		</view>
+
+		<view class="submit-btn" @click="submitPost">确定</view>
+
+		<!-- 经验选择器 -->
+		<u-select v-model="showExper" :list="listExper" title="请选择经验" @confirm="onExperConfirm"
+			@cancel="showExper = false"></u-select>
+
+		<!-- 学历选择器 -->
+		<u-select v-model="showLevel" :list="listLevel" title="请选择学历" @confirm="onLevelConfirm"
+			@cancel="showLevel = false"></u-select>
+
+		<!-- 薪资选择器 -->
+		<u-select v-model="showMoney" mode="mutil-column" :list="listMoney" title="请选择月薪范围" @confirm="onMoneyConfirm"
+			@cancel="showMoney = false"></u-select>
+	</view>
 </template>
 
 <script>
-import navBar from "@/components/nav-bar/index.vue";
-export default {
-  data() {
-    return {
-      // 选中值(用于页面渲染)
-      selectedExper: "",    // 经验
-      selectedLevel: "",    // 学历
-      selectedSalary: "",   // 薪资范围
-      welfareTag: "",       // 福利待遇
-      positionTag: "",      // 职位关键词
-      stationName: "",  
-		  companyName:"",// 工作地址
-
-      // 选择器显示控制
-      showExper: false,
-      showLevel: false,
-      showMoney: false,
-
-      // 经验选择数据源
-      listExper: [
-        { label: "不限", value: "不限" },
-        { label: "1年以内", value: "1年以内" },
-        { label: "1-3年", value: "1-3年" },
-        { label: "3-5年", value: "3-5年" },
-        { label: "5-10年", value: "5-10年" },
-        { label: "10年以上", value: "10年以上" },
-      ],
-
-      // 学历选择数据源
-      listLevel: [
-        { label: "不限", value: "不限" },
-        { label: "专科", value: "专科" },
-        { label: "本科", value: "本科" },
-        { label: "硕士", value: "硕士" },
-        { label: "博士", value: "博士" },
-      ],
-
-      // 薪资选择数据源(修正格式)
-      listMoney: [
-        [
-          { value: "3k", label: "3k" },
-          { value: "4k", label: "4k" },
-          { value: "5k", label: "5k" },
-          { value: "6k", label: "6k" },
-          { value: "10k", label: "10k" },
-          { value: "15k", label: "15k" },
-          { value: "20k", label: "20k" },
-        ],
-        [
-          { value: "10k", label: "10k" },
-          { value: "15k", label: "15k" },
-          { value: "20k", label: "20k" },
-          { value: "30k", label: "30k" },
-          { value: "50k", label: "50k" },
-          { value: "100k", label: "100k" },
-        ],
-      ],
-
-      numList: [
-        { name: "填写基本信息" },
-        { name: "选择职位要求" },
-      ],
-    };
-  },
-  components: {
-    navBar,
-  },
-  onLoad(options) {
-  	// 接收上个页面传递的公司名称参数
-  	if (options.companyName) {
-  		this.companyName = decodeURIComponent(options.companyName);
-  		console.log('接收的公司名称:', this.companyName);
-  	}
-
-  
-  
-  },
-  methods: {
-    // 处理经验选择(核心修复:直接接收选中的label)
-    onExperConfirm(selectedItem) {
-      // 不同版本u-select返回格式可能是对象或数组,这里兼容处理
-      if (Array.isArray(selectedItem)) {
-        this.selectedExper = selectedItem[0]?.label || "";
-      } else {
-        this.selectedExper = selectedItem?.label || "";
-      }
-      this.showExper = false; // 关闭选择器
-    },
-
-    // 处理学历选择(核心修复)
-    onLevelConfirm(selectedItem) {
-      if (Array.isArray(selectedItem)) {
-        this.selectedLevel = selectedItem[0]?.label || "";
-      } else {
-        this.selectedLevel = selectedItem?.label || "";
-      }
-      this.showLevel = false;
-    },
-
-    // 处理薪资范围选择(核心修复)
-    onMoneyConfirm(selectedItems) {
-      // 多列选择器返回数组,取每列选中的label拼接
-      if (Array.isArray(selectedItems) && selectedItems.length >= 2) {
-        const min = selectedItems[0]?.label || "";
-        const max = selectedItems[1]?.label || "";
-        this.selectedSalary = `${min}-${max}`;
-      }
-      this.showMoney = false;
-    },
-
-    // 跳转页面并接收参数(福利待遇)
-    goFund() {
-      uni.navigateTo({
-        url: "/package/jobIntention/fund",
-        events: {
-          // 监听子页面发送的福利数据
-          fundData: (data) => {
-            this.welfareTag = data;
-          },
-        },
-      });
-    },
-
-    // 跳转页面并接收参数(职位关键词)
-    goJobSkill() {
-      uni.navigateTo({
-        url: "/package/jobIntention/jobSkills",
-        events: {
-          skillData: (data) => {
-            this.positionTag = data;
-          },
-        },
-      });
-    },
-
-    // 跳转页面并接收参数(工作地址)
-    goAddAddress() {
-      uni.navigateTo({
-        url: "/package/jobIntention/addAddress",
-        events: {
-          addressData: (data) => {
-            this.stationName = data;
-          },
-        },
-      });
-    },
-
-    // 提交表单
-    submitPost() {
-      // 验证必填项
-      if (!this.selectedExper) {
-        return uni.showToast({ title: "请选择经验要求", icon: "none" });
-      }
-      if (!this.selectedLevel) {
-        return uni.showToast({ title: "请选择最低学历", icon: "none" });
-      }
-      if (!this.selectedSalary) {
-        return uni.showToast({ title: "请选择薪资范围", icon: "none" });
-      }
-      if (!this.stationName) {
-        return uni.showToast({ title: "请填写工作地址", icon: "none" });
-      }
-
-      // 构造提交数据
-      const data = {
-        experience: this.selectedExper,
-        education: this.selectedLevel,
-        salaryRange: this.selectedSalary,
-        welfareTag: this.welfareTag,
-        positionTag: this.positionTag,
-        stationName: this.stationName,
-      };
-
-      // 调用接口提交
-      uni.showLoading({ title: "提交中..." });
-      this.$Request.postJson("/app/postPush/savePostPush", data)
-        .then((res) => {
-          uni.hideLoading();
-          if (res.code === 0) {
-            uni.showToast({ title: "提交成功", icon: "success" });
-            setTimeout(() => uni.navigateBack(), 1500);
-          } else {
-            uni.showToast({ title: res.msg || "提交失败", icon: "none" });
-          }
-        })
-        .catch((err) => {
-          uni.hideLoading();
-          console.error("提交失败:", err);
-          uni.showToast({ title: "网络异常", icon: "none" });
-        });
-    },
-  },
-};
+	import navBar from "@/components/nav-bar/index.vue";
+	export default {
+		data() {
+			return {
+				// 选中值(用于页面渲染)
+				selectedExper: "", // 经验
+				selectedLevel: "", // 学历
+				selectedSalary: "", // 薪资范围
+				welfareTag: "", // 福利待遇
+				positionTag: "", // 职位关键词
+				stationName: "",
+				companyName: "", 
+				companyId:"",
+
+				// 选择器显示控制
+				showExper: false,
+				showLevel: false,
+				showMoney: false,
+
+				// 经验选择数据源
+				listExper: [{
+						label: "不限",
+						value: "不限"
+					},
+					{
+						label: "1年以内",
+						value: "1年以内"
+					},
+					{
+						label: "1-3年",
+						value: "1-3年"
+					},
+					{
+						label: "3-5年",
+						value: "3-5年"
+					},
+					{
+						label: "5-10年",
+						value: "5-10年"
+					},
+					{
+						label: "10年以上",
+						value: "10年以上"
+					},
+				],
+
+				// 学历选择数据源
+				listLevel: [{
+						label: "不限",
+						value: "不限"
+					},
+					{
+						label: "专科",
+						value: "专科"
+					},
+					{
+						label: "本科",
+						value: "本科"
+					},
+					{
+						label: "硕士",
+						value: "硕士"
+					},
+					{
+						label: "博士",
+						value: "博士"
+					},
+				],
+
+				// 薪资选择数据源(修正格式)
+				listMoney: [
+					[{
+							value: "3k",
+							label: "3k"
+						},
+						{
+							value: "4k",
+							label: "4k"
+						},
+						{
+							value: "5k",
+							label: "5k"
+						},
+						{
+							value: "6k",
+							label: "6k"
+						},
+						{
+							value: "10k",
+							label: "10k"
+						},
+						{
+							value: "15k",
+							label: "15k"
+						},
+						{
+							value: "20k",
+							label: "20k"
+						},
+					],
+					[{
+							value: "10k",
+							label: "10k"
+						},
+						{
+							value: "15k",
+							label: "15k"
+						},
+						{
+							value: "20k",
+							label: "20k"
+						},
+						{
+							value: "30k",
+							label: "30k"
+						},
+						{
+							value: "50k",
+							label: "50k"
+						},
+						{
+							value: "100k",
+							label: "100k"
+						},
+					],
+				],
+
+				numList: [{
+						name: "填写基本信息"
+					},
+					{
+						name: "选择职位要求"
+					},
+				],
+			};
+		},
+		components: {
+			navBar,
+		},
+		onLoad(options) {
+			// 接收上个页面传递的公司名称参数
+			if (options.companyName) {
+				this.companyName = decodeURIComponent(options.companyName);
+				console.log('接收的公司名称:', this.companyName);
+			}
+			this.fundListener = uni.$on("fundData", (data) => {
+				console.log("接收到的福利数据:", data);
+				this.welfareTag = data; // 赋值给当前页面变量
+			});
+			this.fundListener = uni.$on("skillsUpdated", (data) => {
+				console.log("接收到的职位技能数据:", data);
+				this.positionTag = data.selectedTags; // 赋值给当前页面变量
+			});
+			this.fundListener = uni.$on("addressData", (data) => {
+				console.log("接收到的地址数据:", data);
+				this.stationName = data; // 赋值给当前页面变量
+			});
+				if (options.companyId) {
+					this.companyId = options.companyId;
+					console.log('接收的公司ID:', this.companyId);
+				}
+
+		},
+		onUnload() {
+			// 页面关闭时移除监听,避免内存泄漏
+			if (this.fundListener) {
+				uni.$off("fundData", this.fundListener);
+			}
+		},
+		methods: {
+			// 处理经验选择(核心修复:直接接收选中的label)
+			onExperConfirm(selectedItem) {
+				// 不同版本u-select返回格式可能是对象或数组,这里兼容处理
+				if (Array.isArray(selectedItem)) {
+					this.selectedExper = selectedItem[0]?.label || "";
+				} else {
+					this.selectedExper = selectedItem?.label || "";
+				}
+				this.showExper = false; // 关闭选择器
+			},
+
+			// 处理学历选择(核心修复)
+			onLevelConfirm(selectedItem) {
+				if (Array.isArray(selectedItem)) {
+					this.selectedLevel = selectedItem[0]?.label || "";
+				} else {
+					this.selectedLevel = selectedItem?.label || "";
+				}
+				this.showLevel = false;
+			},
+
+			// 处理薪资范围选择(核心修复)
+			onMoneyConfirm(selectedItems) {
+				// 多列选择器返回数组,取每列选中的label拼接
+				if (Array.isArray(selectedItems) && selectedItems.length >= 2) {
+					const min = selectedItems[0]?.label || "";
+					const max = selectedItems[1]?.label || "";
+					this.selectedSalary = `${min}-${max}`;
+				}
+				this.showMoney = false;
+			},
+
+			// 跳转页面并接收参数(福利待遇)
+			goFund() {
+				uni.navigateTo({
+					url: "/package/jobIntention/fund",
+					events: {
+						// 监听子页面发送的福利数据
+						fundData: (data) => {
+							this.welfareTag = data;
+						},
+					},
+				});
+			},
+
+			// 跳转页面并接收参数(职位关键词)
+			goJobSkill() {
+				uni.navigateTo({
+					url: "/package/jobIntention/jobSkills",
+					events: {
+						skillsUpdated: (data) => {
+							this.positionTag = data.selectedTags;
+						},
+					},
+				});
+			},
+
+			// 跳转页面并接收参数(工作地址)
+			goAddAddress() {
+				uni.navigateTo({
+					url: "/package/jobIntention/addAddress",
+					events: {
+						addressData: (data) => {
+							this.stationName = data;
+						},
+					},
+				});
+			},
+
+			// 提交表单
+			submitPost() {
+				// 验证必填项
+				if (!this.selectedExper) {
+					return uni.showToast({
+						title: "请选择经验要求",
+						icon: "none"
+					});
+				}
+				if (!this.selectedLevel) {
+					return uni.showToast({
+						title: "请选择最低学历",
+						icon: "none"
+					});
+				}
+				if (!this.selectedSalary) {
+					return uni.showToast({
+						title: "请选择薪资范围",
+						icon: "none"
+					});
+				}
+				if (!this.stationName.fullText) {
+					return uni.showToast({
+						title: "请填写工作地址",
+						icon: "none"
+					});
+				}
+				var positionTag = this.positionTag
+				const str = positionTag.join(',');
+				// 构造提交数据
+				const data = {
+					experience: this.selectedExper, //工作经验
+					education: this.selectedLevel, //学历
+					salaryRange: this.selectedSalary, //薪资范围
+					welfareTag: this.welfareTag, //福利相关标签
+					positionTag: str, //职位技能
+					address: this.stationName.fullText, //地址
+					lat: this.stationName.latitude,
+					lng: this.stationName.longitude
+				};
+
+				// 调用接口提交
+				uni.showLoading({
+					title: "提交中..."
+				});
+				this.$Request.postJson("/app/postPush/savePostPush", data)
+					.then((res) => {
+						uni.hideLoading();
+						if (res.code === 0) {
+							uni.showToast({
+								title: "提交成功",
+								icon: "success"
+							});
+							uni.navigateTo({
+								url: "/package/jobIntention/company?companyName="+this.companyName+'&companyId='+this.companyId
+							});
+
+
+						} else {
+							uni.showToast({
+								title: res.msg || "提交失败",
+								icon: "none"
+							});
+						}
+					})
+					.catch((err) => {
+						uni.hideLoading();
+						console.error("提交失败:", err);
+						uni.showToast({
+							title: "网络异常",
+							icon: "none"
+						});
+					});
+			},
+		},
+	};
 </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: auto;
-    .content {
-      padding: 40rpx;
-      .title {
-        color: #333;
-        font-size: 40rpx;
-        font-weight: 600;
-        margin-bottom: 10rpx;
-      }
-      .desc {
-        color: #666;
-        font-size: 24rpx;
-        margin-bottom: 20rpx;
-      }
-      .check-title-big {
-        color: #3a3943;
-        font-size: 36rpx;
-        font-weight: 500;
-        padding: 20rpx 0;
-      }
-      .check-select {
-        width: 100%;
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        padding: 32rpx 47rpx;
-        border-radius: 12rpx;
-        box-shadow: 0 16rpx 300rpx rgba(0, 0, 0, 0.06);
-        background: #fff;
-        margin-bottom: 20rpx;
-        .select-txt {
-          color: #999;
-          font-size: 28rpx;
-        }
-      }
-      .txt-desc {
-        color: #666;
-        font-size: 24rpx;
-        margin-top: 20rpx;
-        line-height: 1.5;
-      }
-    }
-  }
-  .step {
-    padding: 32rpx 0;
-  }
-  .submit-btn {
-    margin: 60rpx 20rpx;
-    padding: 16rpx 32rpx;
-    border-radius: 999px;
-    background: linear-gradient(90deg, #0d27f7, #13c1ea);
-    color: #fff;
-    font-size: 32rpx;
-    text-align: center;
-    line-height: 48rpx;
-  }
-}
+	/* 原有样式保持不变 */
+	.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: auto;
+
+			.content {
+				padding: 40rpx;
+
+				.title {
+					color: #333;
+					font-size: 40rpx;
+					font-weight: 600;
+					margin-bottom: 10rpx;
+				}
+
+				.desc {
+					color: #666;
+					font-size: 24rpx;
+					margin-bottom: 20rpx;
+				}
+
+				.check-title-big {
+					color: #3a3943;
+					font-size: 36rpx;
+					font-weight: 500;
+					padding: 20rpx 0;
+				}
+
+				.check-select {
+					width: 100%;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					padding: 32rpx 47rpx;
+					border-radius: 12rpx;
+					box-shadow: 0 16rpx 300rpx rgba(0, 0, 0, 0.06);
+					background: #fff;
+					margin-bottom: 20rpx;
+
+					.select-txt {
+						color: #999;
+						font-size: 28rpx;
+					}
+				}
+
+				.txt-desc {
+					color: #666;
+					font-size: 24rpx;
+					margin-top: 20rpx;
+					line-height: 1.5;
+				}
+			}
+		}
+
+		.step {
+			padding: 32rpx 0;
+		}
+
+		.submit-btn {
+			margin: 60rpx 20rpx;
+			padding: 16rpx 32rpx;
+			border-radius: 999px;
+			background: linear-gradient(90deg, #0d27f7, #13c1ea);
+			color: #fff;
+			font-size: 32rpx;
+			text-align: center;
+			line-height: 48rpx;
+		}
+	}
 </style>

+ 10 - 4
pages/my/peopleNumber.vue

@@ -34,7 +34,8 @@ export default {
         "10000人以上",
       ],
       check: 0, // 默认选中第一个选项
-      companyName: '' // 接收上个页面传递的公司名称
+      companyName: '' ,// 接收上个页面传递的公司名称
+	  companyId:""
     };
   },
   components: {
@@ -46,6 +47,11 @@ export default {
       this.companyName = decodeURIComponent(options.companyName);
       console.log('接收的公司名称:', this.companyName);
     }
+	if (options.companyId) {
+		this.companyId = decodeURIComponent(options.companyId);
+		console.log('接收的公司ID:', this.companyId);
+	}
+	
   },
   methods: {
     // 选择公司规模
@@ -96,7 +102,7 @@ export default {
             });
             // 提交成功后跳转到职位发布页面
             setTimeout(() => {
-              this.goJobPosting();
+              this.goJobPosting(res.data);
             }, 1500);
           } else {
             uni.showToast({
@@ -116,9 +122,9 @@ export default {
     },
 
     // 跳转到职位发布页面
-    goJobPosting() {
+    goJobPosting(companyId) {
       uni.navigateTo({
-        url: '/pages/my/jobPosting?companyName='+this.companyName
+        url: '/pages/my/jobPosting?companyName='+this.companyName+'&companyId='+companyId
       });
     }
   },