Browse Source

feat:面试详情静态界面

jianghaili 3 weeks ago
parent
commit
8be367691f
4 changed files with 1376 additions and 835 deletions
  1. 45 0
      components/nav-bar/index.vue
  2. 501 0
      my/jilu/mianshiDetail.vue
  3. 5 0
      package/records/records.vue
  4. 825 835
      pages.json

+ 45 - 0
components/nav-bar/index.vue

@@ -0,0 +1,45 @@
+<template>
+  <view class="nav-bar">
+    <view class="go-back">
+      <u-icon name="arrow-left" color="#fff" size="32" @click="goBack"></u-icon>
+    </view>
+    <view class="nav-title">
+      {{ title }}
+    </view>
+  </view>
+</template>
+<script>
+export default {
+  data() {
+    return {
+        goBack(){
+            uni.navigateBack()
+        }
+    };
+  },
+  props: {
+    title: "",
+  },
+};
+</script>
+<style lang="scss" scoped>
+.nav-bar {
+  width: 100%;
+  padding: 24rpx 32rpx 20rpx 32rpx;
+  box-sizing: border-box;
+  color: rgba(255, 255, 255, 1);
+  font-family: DM Sans;
+  font-size: 30rpx;
+  font-weight: 700;
+  line-height: 26px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  position: relative;
+  .go-back{
+    position: absolute;
+    top: 24rpx;
+    left: 32rpx;
+  }
+}
+</style>

+ 501 - 0
my/jilu/mianshiDetail.vue

@@ -0,0 +1,501 @@
+<template>
+  <view class="ms-detail">
+    <view class="detail-bg"></view>
+    <nav-bar title="面试详情"></nav-bar>
+    <view class="detail-index">
+      <view class="detail-title">已面试08月27日</view>
+      <view class="detail-item">
+        <view class="user-title">
+          <view class="user-img">
+            <image src="@/static/images/geren.png" mode="aspectFill" />
+          </view>
+          <view class="user-name-box">
+            <view class="user-name-com">深圳市世迪贸易科技有限公司</view>
+            <view class="user-info-img">
+              <image src="@/static/images/geren.png" mode="aspectFill" />
+              <view class="user-name">孙先生·人事经理</view>
+            </view>
+          </view>
+        </view>
+        <view class="msg-box">
+          <view class="msg-item">
+            <view class="msg-label">时间</view>
+            <view class="msg-value">2025-09-19 20:00:00</view>
+          </view>
+          <view class="msg-item">
+            <view class="msg-label">职位</view>
+            <view class="msg-value">资深产品经理 15-25K</view>
+          </view>
+          <view class="msg-item">
+            <view class="msg-label">联系人</view>
+            <view class="msg-value">熊女士</view>
+          </view>
+          <view class="msg-item">
+            <view class="msg-label">备注</view>
+            <view class="msg-value">请携带一份最新的简历</view>
+          </view>
+          <view class="msg-item">
+            <view class="msg-label">地址</view>
+            <view class="msg-value">光谷软件园F21602栋</view>
+          </view>
+        </view>
+      </view>
+      <view class="detail-item">
+        <view class="process-top">
+          <view class="process-title">面试进度</view>
+          <view class="process-status">爽约说明</view>
+        </view>
+        <view class="process-index">
+          <view class="interview-process">
+            <!-- 流程步骤 -->
+            <view class="process-steps">
+              <!-- 步骤1: 面试时间到 -->
+              <view
+                class="step-item"
+                :class="{ active: currentStep >= 1, completed: currentStep > 1 }"
+              >
+                <view class="step-icon">
+                  <view class="step-number">1</view>
+                  <view class="step-check" v-if="currentStep > 1">
+                    <u-icon name="checkmark" color="#fff" size="16"></u-icon>
+                  </view>
+                </view>
+                <view class="step-content">
+                  <view class="step-title">面试时间到</view>
+                  <view class="step-desc">面试一开始,此时不能取消面试</view>
+                </view>
+                <view class="step-line"></view>
+              </view>
+
+              <!-- 步骤2: 面试签到 -->
+              <view
+                class="step-item"
+                :class="{ active: currentStep >= 2, completed: currentStep > 2 }"
+              >
+                <view class="step-icon">
+                  <view class="step-number">2</view>
+                  <view class="step-check" v-if="currentStep > 2">
+                    <u-icon name="checkmark" color="#fff" size="16"></u-icon>
+                  </view>
+                </view>
+                <view class="step-content">
+                  <view class="step-title">面试签到</view>
+                  <view class="step-desc">到场后请及时签到,可体验面试全流程服务</view>
+                </view>
+                <view class="step-line"></view>
+              </view>
+
+              <!-- 步骤3: 进行面试 -->
+              <view
+                class="step-item"
+                :class="{ active: currentStep >= 3, completed: currentStep > 3 }"
+              >
+                <view class="step-icon">
+                  <view class="step-number">3</view>
+                  <view class="step-check" v-if="currentStep > 3">
+                    <u-icon name="checkmark" color="#fff" size="16"></u-icon>
+                  </view>
+                </view>
+                <view class="step-content">
+                  <view class="step-title">进行面试</view>
+                  <view class="step-desc">面试过程中,如有问题,可向客服投诉</view>
+                </view>
+                <view class="step-line"></view>
+              </view>
+
+              <!-- 步骤4: 面试结果 -->
+              <view
+                class="step-item"
+                :class="{ active: currentStep >= 4, completed: currentStep > 4 }"
+              >
+                <view class="step-icon">
+                  <view class="step-number">4</view>
+                  <view class="step-check" v-if="currentStep > 4">
+                    <u-icon name="checkmark" color="#fff" size="16"></u-icon>
+                  </view>
+                </view>
+                <view class="step-content">
+                  <view class="step-title">面试结果</view>
+                  <view class="step-desc">面试完后30天内可向招聘方获取面试结果</view>
+                </view>
+                <view class="step-line"></view>
+              </view>
+
+              <!-- 步骤5: 获取面试结果 -->
+              <view
+                class="step-item"
+                :class="{ active: currentStep >= 5, completed: currentStep > 5 }"
+              >
+                <view class="step-icon">
+                  <view class="step-number">5</view>
+                  <view class="step-check" v-if="currentStep > 5">
+                    <u-icon name="checkmark" color="#fff" size="16"></u-icon>
+                  </view>
+                </view>
+                <view class="step-content">
+                  <view class="step-title">获取面试结果</view>
+                  <view class="step-desc"></view>
+                </view>
+              </view>
+            </view>
+
+            <!-- 操作按钮 -->
+            <view class="process-actions" v-if="showActions">
+              <button class="action-btn" v-if="currentStep === 2" @click="handleSignIn">
+                立即签到
+              </button>
+              <button
+                class="action-btn"
+                v-if="currentStep === 3"
+                @click="handleStartInterview"
+              >
+                开始面试
+              </button>
+              <button
+                class="action-btn"
+                v-if="currentStep === 4"
+                @click="handleGetResult"
+              >
+                获取结果
+              </button>
+              <button
+                class="action-btn complaint-btn"
+                v-if="currentStep === 3"
+                @click="handleComplaint"
+              >
+                投诉
+              </button>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+
+export default {
+  data() {
+    return {
+      currentStep: 3,
+      showActions: true,
+    };
+  },
+  components: {
+    navBar,
+  },
+  method: {
+    handleSignIn() {
+      this.$emit("sign-in");
+      uni.showToast({
+        title: "签到成功",
+        icon: "success",
+      });
+    },
+
+    handleStartInterview() {
+      this.$emit("start-interview");
+    },
+
+    handleGetResult() {
+      this.$emit("get-result");
+    },
+    handleComplaint() {
+      this.$emit("complaint");
+      uni.showModal({
+        title: "客服投诉",
+        content: "请描述您遇到的问题",
+        editable: true,
+        placeholderText: "请输入问题描述...",
+        success: (res) => {
+          if (res.confirm && res.content) {
+            uni.showToast({
+              title: "投诉已提交",
+              icon: "success",
+            });
+          }
+        },
+      });
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.ms-detail {
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  top: 0;
+  .detail-bg {
+    height: 744rpx;
+    width: 100%;
+    background: linear-gradient(180deg, rgba(255, 102, 0, 1), rgba(255, 102, 0, 0) 100%);
+    position: absolute;
+    left: 0;
+    top: 0;
+  }
+  .detail-index {
+    position: relative;
+    z-index: 2;
+    padding: 40rpx;
+    box-sizing: border-box;
+    .detail-item {
+      padding: 36rpx;
+      box-sizing: border-box;
+      border: 1rpx solid rgba(227, 231, 236, 1);
+      border-radius: 6px;
+      background: rgba(255, 255, 255, 1);
+      margin-top: 20rpx;
+      .process-top {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .process-title {
+          color: rgba(29, 33, 41, 1);
+          font-family: DM Sans;
+          font-size: 24rpx;
+          font-weight: 500;
+          line-height: 32rpx;
+        }
+        .process-status {
+          color: #016bf6;
+          font-family: DM Sans;
+          font-size: 20rpx;
+          font-weight: 700;
+          line-height: 26rpx;
+        }
+      }
+      .user-title {
+        display: flex;
+        align-items: center;
+        .user-img {
+          overflow: hidden;
+          width: 80rpx;
+          height: 80rpx;
+          border-radius: 50%;
+          margin-right: 24rpx;
+          border: 8rpx solid #f6f6f6;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .user-name-box {
+          .user-name-com {
+            color: #171725;
+            font-family: DM Sans;
+            font-size: 28rpx;
+            font-weight: 400;
+            line-height: 44rpx;
+            text-align: left;
+          }
+          .user-info-img {
+            display: flex;
+            align-items: center;
+            margin-top: 8rpx;
+            image {
+              width: 40rpx;
+              height: 40rpx;
+              border-radius: 50%;
+              margin-right: 8rpx;
+            }
+            .user-name {
+              color: #9ca4ab;
+              font-family: DM Sans;
+              font-size: 16rpx;
+              font-weight: 400;
+              line-height: 40rpx;
+            }
+          }
+        }
+      }
+    }
+  }
+  .msg-box {
+    .msg-item {
+      display: flex;
+      align-items: center;
+      color: rgba(153, 153, 153, 1);
+      font-family: DM Sans;
+      font-size: 24rpx;
+      font-weight: 400;
+      line-height: 32rpx;
+      margin-top: 12rpx;
+      .msg-label {
+        min-width: 120rpx;
+        margin-right: 24rpx;
+      }
+    }
+  }
+  .detail-title {
+    color: #fff;
+    font-size: 60rpx;
+    font-weight: 500;
+    font-family: DM Sans;
+  }
+}
+.interview-process {
+  margin-top: 24rpx;
+}
+
+.process-header {
+  margin-bottom: 40rpx;
+}
+
+.process-title {
+  font-size: 36rpx;
+  font-weight: bold;
+  color: #333;
+}
+
+.process-steps {
+  position: relative;
+}
+
+.step-item {
+  display: flex;
+  align-items: flex-start;
+  margin-bottom: 50rpx;
+  position: relative;
+
+  &:last-child {
+    margin-bottom: 0;
+
+    .step-line {
+      display: none;
+    }
+  }
+}
+
+.step-icon {
+  width: 32rpx;
+  height: 32rpx;
+  border-radius: 50%;
+  background: #f5f5f5;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-right: 24rpx;
+  position: relative;
+  z-index: 2;
+  flex-shrink: 0;
+}
+
+.step-number {
+  font-size: 20rpx;
+  font-weight: bold;
+  color: #999;
+}
+
+.step-check {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.step-content {
+  flex: 1;
+}
+
+.step-title {
+  color: rgba(29, 33, 41, 1);
+  font-family: DM Sans;
+  font-size: 24rpx;
+  font-weight: 600;
+  line-height: 32rpx;
+  margin-bottom: 8rpx;
+}
+
+.step-desc {
+  color: rgba(153, 153, 153, 1);
+  font-family: DM Sans;
+  font-size: 20rpx;
+  font-weight: 400;
+  line-height: 26rpx;
+}
+
+.step-line {
+  position: absolute;
+  left: 16rpx;
+  top: 42rpx;
+  bottom: -30rpx;
+  width: 2rpx;
+  background: #f0f0f0;
+  z-index: 1;
+}
+
+/* 激活状态 */
+.step-item.active {
+  .step-icon {
+    background: #016bf6;
+  }
+
+  .step-number {
+    color: #fff;
+  }
+
+  .step-title {
+    color: #016bf6;
+    font-weight: bold;
+  }
+
+  .step-line {
+    background: #016bf6;
+  }
+}
+
+/* 完成状态 */
+.step-item.completed {
+  .step-icon {
+    background: #016bf6;
+  }
+
+  .step-number {
+    display: none;
+  }
+
+  .step-check {
+    display: block;
+  }
+}
+
+/* 操作按钮 */
+.process-actions {
+  margin-top: 50rpx;
+  display: flex;
+  gap: 20rpx;
+  flex-wrap: wrap;
+}
+
+.action-btn {
+  flex: 1;
+  background: #016bf6;
+  color: #fff;
+  border: none;
+  border-radius:100rpx;
+  padding: 6rpx 24rpx;
+  font-size: 28rpx;
+  color: rgba(255, 255, 255, 1);
+  font-family: DM Sans;
+  font-size: 24rpx;
+  font-weight: 400;
+  text-align: center;
+  &::after {
+    border: none;
+  }
+
+  &:active {
+    background: #009974;
+  }
+}
+
+.complaint-btn {
+  background: #ff4444;
+
+  &:active {
+    background: #dd3333;
+  }
+}
+</style>

+ 5 - 0
package/records/records.vue

@@ -273,6 +273,11 @@ export default {
     },
     tabClick(e) {
       this.tabIndex = e;
+      if (e == 2) {
+        uni.navigateTo({
+          url: "/my/jilu/mianshiDetail",
+        });
+      }
     },
     /**
      * 我的收藏记录列表

File diff suppressed because it is too large
+ 825 - 835
pages.json


Some files were not shown because too many files changed in this diff