Browse Source

1.技术等级认证
2.开发者首页,添加活动标签

martin.ma 4 years ago
parent
commit
3c5ab2817c

+ 24 - 1
assets/css/developer/index.scss

@@ -134,7 +134,12 @@
 }
 
 .developer-order-list {
-  overflow: hidden;
+  
+  &::after{
+    content: "";
+    display: block;
+    clear: both;
+  }
 }
 
 .developer-order-title-area-wrap {
@@ -145,6 +150,8 @@
   display: flex;
   align-items: center;
   justify-content: space-between;
+  
+  
 }
 
 .developer-order-tips {
@@ -176,6 +183,22 @@
   color: #0b121a;
   line-height: 22px;
   margin-right: 16px;
+  position: relative;
+  .developer-activity-tips{
+    position: absolute;
+    right: -10px;
+    top: 0;
+    transform:translate(100%,-100%);
+    padding:0 15px;
+    height:38px;
+    white-space: nowrap;
+    line-height: 38px;;
+    font-size: 14px;
+    font-weight: 400;
+    color: #fff;
+    background-color: #f00;
+    border-radius: 40px 38px 38px 0;
+  }
 }
 
 .developer-order-link {

BIN
assets/img/skill_cert/bg22.png


+ 7 - 2
pages/frontend/developer/index.vue

@@ -84,14 +84,19 @@
                         <div class="developer-order-title-area">
                             <div class="developer-order-title-area-wrap">
                                 <div class="developer-order-icon icon-2"></div>
-                                <h5 class="developer-order-title">技术等级认证</h5>
+                                <h5 class="developer-order-title">
+                                    <span>技术等级认证</span>
+                                    <div class="developer-activity-tips">限时100%接单活动</div>
+                                </h5>
                             </div>
                             <div class="developer-order-link">
                                 <a :click="this.cnzz('开发者首页','立即认证','')"  href="/frontend/skill_cert/profile">立即认证</a>
                             </div>
+
+                            
                         </div>
                         <p class="developer-order-tips">
-                            我们会优先匹配进行过技术认证的开发者,如果您是自由职业者还可以进行自由工作者认证。
+                            派单第一优先匹配进行过技术认证的用户,认证状态永久保留!
                         </p>
                     </article>
                     <article class="developer-order-item">

+ 80 - 9
pages/frontend/skill_cert/add.vue

@@ -2,6 +2,10 @@
   <div class="container">
       <skillCertHeader title="技术等级认证"></skillCertHeader>
       <flow :dataList="flowList"></flow>
+
+
+        <skill-cert-activity></skill-cert-activity>
+
       <div class="description rule">
         <div class="col-title">
           <span class="label">评级细则</span>
@@ -63,7 +67,7 @@
         </el-select>
       </div>
       <p  class="field-tips" style="padding-top: 15px">最终定级由面试表现协定;认证一般没有失败,除非您的技术能力低于最低要求</p>
-      <!-- <p class="field-tips" v-show="currentFieldId" style="margin-top: 10px">参与能力评估,赠送1个月<a href="/type/vip/developer">开发者会员</a></p> -->
+      <p class="field-tips"  style="margin-top: 10px">参与技术认证,赠送1个月<a href="/type/vip/developer" style="color:#4D81BF">开发者会员</a><span class="time-waring">(限时)</span></p>
       <p class="field-tips" v-show="currentFieldId" style="margin-top: 10px">认证收费将支付给面试官,而非平台,详情见等级对照表</p>
       <div v-show="imgShow" class="col-title width-infinity upload-title">
         <span class="label">上传薪资证明</span>
@@ -101,6 +105,31 @@
       <div class="buttons">
         <el-button class="submit" type="primary" @click="submit">确认提交</el-button>
       </div>
+      
+      <div class="skill-cert-pay">
+        <div class="skill-cert-pay-switch">
+          <el-switch
+            v-model="value1"
+          >
+          </el-switch>
+          <span class="skill-cert-pay-label">先认证,后付款</span>
+          <span class="time-waring">(限时)</span>
+        </div>
+        <p>
+          * 支付10元定金参与认证<span class="skill-cert-info">(后续可抵扣)</span> <br>
+          * 成功接单后将扣除150%的认证费用<br>
+          * 勾选后不再赠送会员
+        </p>
+      </div>
+
+      <div class="col-title width-infinity jiedan-title">
+        <span class="label">他们正在接单</span>
+      </div>
+
+      <div class="job-member-area">
+        <job-member-list></job-member-list>
+      </div>
+       
       <el-dialog :visible.sync="dialogVisible">
         <img width="100%" :src="dialogImageUrl" alt="">
       </el-dialog>
@@ -114,24 +143,27 @@
   import occupation_direction from "@/components/public/occupation_direction";
   import skills from "./components/skills";
   import resume_improve from "./resume_improve";
+  import skillCertActivity from "./components/skill-cert-activity.vue"
+  import jobMemberList from "./components/job-member-list.vue"
 
   export default {
     name: "profile",
     components: {
-      flow, skillCertHeader,skills,occupation_direction,resume_improve
+      flow, skillCertHeader,skills,occupation_direction,resume_improve,skillCertActivity,jobMemberList
     },
     data() {
       return {
+        value1:false,
         rules: [{
-          title: '1、评估优势',
+          title: '1、认证权益',
           content: '* 平台派单时,将第一优先考虑进行过技术认证的用户,技术等级越高,权重越高' +
             '<br/>' +
             '* 依据技术等级将有更高的参考薪酬' +
             '<br/>' +
             '* 认证4级以上用户有机会被内邀为面试官' +
             '<br/>' +
-            '* 面试过程中,将与高水平技术官的进行深层次沟通' +
-            '<br/>' +
+            // '* 面试过程中,将与高水平技术官的进行深层次沟通' +
+            // '<br/>' +
             '* 享有技术专家标识,增加客户信任感',
           linkUrl: ''
         }, {
@@ -140,9 +172,8 @@
           linkUrl: 'https://proginn.feishu.cn/docs/doccnFJSsH0KZ9cTfQNpSRrZ4Of'
         }, {
           title: '3、其他说明',
-          content: '* 技术认证采用线上面试的方式进行' + '<br/>' +
-            '* 可进行多领域认证,也可就已认证领域再次认证' + '<br/>' +
-            '* 评估金额无法退回,请确保已理解所有内容',
+          content: '* 技术认证采用线上面试的方式进行,与高水平技术官深层次沟通' + '<br/>' +
+            '* 可进行多领域认证,也可就已认证领域再次认证' ,
           linkUrl: ''
         },],
         dialogImageUrl: '',
@@ -596,7 +627,7 @@
     width: 100%;
 
     .submit {
-      margin-bottom: 87px;
+      margin-bottom: 30px;
       width: 267px;
       height: 58px;
       background: #308eff;
@@ -638,4 +669,44 @@
     margin-right: 20px;
   }
 
+  .skill-cert-pay{
+    width: 100%;
+    p{
+      font-size: 15px;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #0B121A;
+      line-height: 24px;
+    }
+  }
+  .skill-cert-pay-switch{
+    display: flex;
+    // align-items: center;
+    font-size: 15px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #0B121A;
+    line-height: 21px;
+    margin-bottom: 15px;
+
+  }
+  .skill-cert-pay-label{
+    margin-left: 10px;
+  }
+  .time-waring{
+    color:#FF4E28;margin-left:10px
+  }
+  .skill-cert-info{
+    color:#3B94FF
+  }
+
+
+  .jiedan-title{
+    margin-top: 35px;
+  }
+
+  .job-member-area{
+    width: 100%;
+  }
+
 </style>

+ 246 - 0
pages/frontend/skill_cert/components/job-member-list.vue

@@ -0,0 +1,246 @@
+<template>
+  <div
+    class="job-member-list-container"
+    @mouseenter="animate = false"
+    @mouseleave="animate = true"
+  >
+    <div
+      class="job-member-list start-animte"
+      :class="{
+        'stop-animte': !animate
+      }"
+    >
+      <div
+        class="job-member-item"
+        v-for="(item, index) in [...firstGroup, ...firstGroup]"
+        :key="index"
+         @click="linkToUser(item.uid)"
+      >
+        <div class="job-member-info">
+          <img class="job-member-avatar" :src="item.icon_url" />
+          <div class="job-member-name">
+            <span class="job-member-name-text">{{ item.nickname }}</span>
+            <level-tag :level="item.freework_level" />
+          </div>
+        </div>
+        <div class="job-member-tips">
+          {{item.timeText}}成功接单
+        </div>
+      </div>
+    </div>
+    <div
+      class="job-member-list start-animte"
+      :class="{
+        'stop-animte': !animate
+      }"
+    >
+      <div
+        class="job-member-item"
+        v-for="(item, index) in [...secondGroup, ...secondGroup]"
+        :key="index"
+        @click="linkToUser(item.uid)"
+      >
+        <div class="job-member-info">
+          <img class="job-member-avatar" :src="item.icon_url" />
+          <div class="job-member-name">
+            <span class="job-member-name-text">{{ item.nickname }}</span>
+            <level-tag :level="item.freework_level" />
+          </div>
+        </div>
+        <div class="job-member-tips">
+          {{item.timeText}}成功接单
+        </div>
+      </div>
+    </div>
+
+     <div class="bg_left"></div>
+    <div class="bg_right"></div>
+  </div>
+</template>
+
+<script>
+// 接单,已认证
+import LevelTag from "@/components/level-tag.vue";
+import moment from "moment";
+export default {
+  components: {
+    LevelTag
+  },
+  data() {
+    return {
+      jobMemberList: [],
+      firstGroup: [],
+      secondGroup: [],
+      animate: true
+    };
+  },
+  created() {
+    this.fetchData();
+  },
+  methods: {
+    async fetchData() {
+      let res = await this.$axios.$post("/uapi/cert/cert_user_list");
+      if (res.status === 1) {
+        res.data.list = res.data.list.map((item) => {
+            return {
+                ...item,
+                timeText:moment(item.created_at*1000).format("MM月DD日HH时mm分")
+            }
+        })
+        this.jobMemberList = [...res.data.list];
+        let len = res.data.list.length;
+        if (len == 0) {
+          this.firstGroup = [];
+          this.secondGroup = [];
+        }
+        if (len == 1) {
+          this.firstGroup = [res.data.list[0]];
+          this.secondGroup = [];
+        }
+
+        if (len > 1) {
+          let mid = Math.floor(len / 2);
+          this.firstGroup = res.data.list.slice(0, mid);
+          this.secondGroup = res.data.list.slice(mid);
+        }
+      } else {
+        this.jobMemberList = [];
+      }
+    },
+    linkToUser(uid){
+        location.href = `/wo/${uid}`;
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.job-member-list-container {
+  overflow: hidden;
+  width: 100%;
+  position: relative;
+}
+.job-member-list {
+  padding-top: 15px;
+  padding-bottom: 15px;
+  font-size: 0;
+  display: flex;
+  flex-wrap: nowrap;
+  width: fit-content;
+  //   position:absolute;
+}
+.job-member-item {
+  width: 256px;
+  height: 122px;
+  background: #ffffff;
+  box-shadow: 0px 0px 15px 0px rgba(95, 109, 141, 0.16);
+  border-radius: 15px;
+  border: 1px solid #ebeced;
+  margin-left: 9px;
+  margin-right: 9px;
+  box-sizing: border-box;
+  padding-left: 22px;
+  padding-top: 22px;
+  cursor: pointer;
+}
+.job-member-info {
+  display: flex;
+  align-items: center;
+}
+
+.job-member-avatar {
+  width: 40px;
+  height: 40px;
+  border-radius: 100%;
+}
+.job-member-name {
+  font-size: 18px;
+  font-family: PingFangSC-Medium, PingFang SC;
+  font-weight: 500;
+  color: #0b121a;
+  line-height: 25px;
+  margin-left: 10px;
+  display: flex;
+  align-items: center;
+}
+.job-member-name-text {
+  margin-right: 6px;
+  max-width: 120px;
+  overflow: hidden;
+  display: inline-block;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.job-member-tips {
+  margin-top: 16px;
+  font-size: 14px;
+  font-family: PingFangSC-Regular, PingFang SC;
+  font-weight: 400;
+  color: #4b5d73;
+  line-height: 20px;
+}
+
+.job-member-list:nth-child(2) {
+  margin-left: -137px;
+}
+
+@-webkit-keyframes move {
+  from {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  to {
+    -webkit-transform: translateX(-1644px);
+    transform: translateX(-1644px);
+  }
+}
+
+@keyframes move {
+  from {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  to {
+    -webkit-transform: translateX(-1644px);
+    transform: translateX(-1644px);
+  }
+}
+
+.start-animte {
+  -webkit-animation-name: move;
+  animation-name: move;
+  -webkit-animation-timing-function: linear;
+  animation-timing-function: linear;
+  -webkit-animation-duration: 30s;
+  animation-duration: 30s;
+  -webkit-animation-iteration-count: infinite;
+  animation-iteration-count: infinite;
+}
+
+.stop-animte {
+  -webkit-animation-play-state: paused;
+  animation-play-state: paused;
+}
+
+.bg_left {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 150px;
+    height: 392px;
+    background: -webkit-linear-gradient(left, #fff 0, rgba(255, 255, 255, 0) 100%);
+    background: linear-gradient(90deg, #fff 0, rgba(255, 255, 255, 0) 100%)
+}
+
+.bg_right {
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 150px;
+    height: 392px;
+    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0, #fff 100%);
+    background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0, #fff 100%)
+}
+</style>

+ 177 - 0
pages/frontend/skill_cert/components/skill-cert-activity.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="activity-area">
+    <div class="activity-container">
+      <div class="activity-title">100%接单限时活动 <span class="count-time">(剩余{{text}})</span></div>
+      <div class="activity-list">
+        <div class="activity-item">
+          <h6>活动1(默认参与):不接单全额退+赠送会</h6>
+          <p>
+            * 完成认证后,2个月内未成功接单,退还全部认证费用,并保留认证权益<br />
+            * 参与认证,赠送1个月<a  href="/type/vip/developer" class="color-4D81BF">开发者会员</a>
+          </p>
+        </div>
+        <div class="activity-item">
+          <h6>活动2(提交时勾选即可):先认证,接单后</h6>
+          <p>
+            * 先进行认证,成功接单后再扣除150%的认证费用
+          </p>
+        </div>
+      </div>
+      <div class="activity-tips">
+        备注:活动1和活动2只能参与1个<br />
+        活动时间:2022年4月10日0点—2022年5月10日0点
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+            // 模拟结束时间,4月10号0点
+            endTime: 1649520000000,
+            pageNow: Date.now(),
+            serverTime: Date.now(),
+
+            text:"",
+            timer:null,
+        }
+    },
+    mounted () {
+        this.startTimer()
+    },
+    methods: {
+        startTimer(){
+            this.timer = setInterval(()=>{
+                let now = Date.now();
+                let pageNow = this.pageNow
+                let desc = now - pageNow
+                let countDown = this.endTime - (this.serverTime +desc)
+                this.parseCountDownText(countDown)
+            },800);
+        },
+        clearTimer(){
+            clearInterval(this.timer);
+            this.timer = null;
+        },
+        // 以毫秒作为单位
+        parseCountDownText(countDown){
+            // 转换秒为单位
+            let countDownTime = Math.ceil(countDown/1000);
+
+            let day = parseInt(countDownTime/(24*60*60),10)
+            let dayText = day 
+            countDownTime = countDownTime - (day * 24*60*60)
+
+            let hour = parseInt(countDownTime/(60*60),10)
+            let hourText = hour > 9 ? hour : "0" + hour;
+
+            countDownTime = countDownTime - (hour * 60*60)
+
+            let minute = parseInt(countDownTime/(60),10)
+            let minuteText = minute > 9 ? minute : "0" + minute;
+
+            countDownTime = countDownTime - (minute * 60)
+            let second = countDownTime
+
+            let text = `${dayText}天${hourText}小时${minuteText}分钟${second}秒`
+            this.text = text
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.activity-area {
+  width: 100%;
+}
+
+.activity-container {
+  min-width: 670px;
+  background: #fff6f4 url("~@/assets/img/skill_cert/bg22.png") no-repeat 50% top;
+  background-size: 1048px auto;
+  padding-bottom:20px ;
+}
+
+.activity-title {
+  padding-top: 10px;
+  width: 470px;
+  margin: 0 auto;
+  font-size: 22px;
+  font-family: PingFangSC-Medium, PingFang SC;
+  font-weight: 500;
+  color: #ffffff;
+  line-height: 30px;
+  text-shadow: 0px 2px 4px #ff5530;
+  text-align: center;
+  .count-time{
+      font-size: 16px;
+      font-weight: normal !important;
+      font-family:PingFangSC-Regular, PingFang SC
+  }
+}
+
+.activity-list {
+  margin-top: 40px;
+  margin-left: 30px;
+  margin-right: 30px;
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+}
+
+.activity-item {
+  width: 48.7%;
+  padding: 20px;
+  border: 1px dashed #ff844f;
+  background-color: #fff;
+  border-radius: 16px;
+
+  h6 {
+    font-size: 15px;
+    font-family: PingFangSC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #ff4d27;
+    line-height: 21px;
+  }
+
+  p {
+    font-size: 15px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #0b121a;
+    line-height: 24px;
+    margin-top: 14px;
+  }
+}
+
+.color-4D81BF {
+  color: #4d81bf;
+}
+
+.activity-tips {
+  margin-left: 30px;
+  margin-top: 18px;
+  font-size: 14px;
+  font-family: PingFangSC-Regular, PingFang SC;
+  font-weight: 400;
+  color: #666666;
+  line-height: 24px;
+}
+@media screen and (max-width: 670px) {
+    .activity-container{
+        // min-width: none;
+        min-width: inherit;
+    }
+    .activity-list{
+        display: block;
+        // flex-direction: column;
+        // align-items: center;
+    }
+    .activity-item{
+        width: auto;
+        margin-bottom: 30px;
+    }
+}
+</style>