main
hcj 3 months ago
parent bb49e55e75
commit 6e750da2c6
  1. 42
      components/levelTag/index.vue
  2. 28
      pages.json
  3. 7
      pages/index/index.vue
  4. 248
      pages/index/testcrowdsourc/crowdsourcingdetails.vue
  5. 170
      pages/index/testcrowdsourc/testcrowdsourc.vue
  6. 9
      pages/index/testtraining/onLineCourse.vue
  7. 169
      pages/personal/grade/gradeRules.vue
  8. 144
      pages/personal/grade/gradeTask.vue
  9. 360
      pages/personal/grade/gradeValue.vue
  10. 77
      pages/personal/grade/growInfo.vue
  11. 57
      pages/personal/personal.vue
  12. 4
      pages/personal/setup/accountoverview.vue
  13. 4
      utils/http.js
  14. 56
      utils/userlevel.js
  15. 2
      uview-ui/libs/css/style.mp.scss

@ -0,0 +1,42 @@
<template>
<span>
<!-- <span v-show="level ==>{{ level }}</span> -->
<span v-show="level == 1" class="levelTag v1">V{{ level }}</span>
<span v-show="level == 2" class="levelTag v2">V{{ level }}</span>
<span v-show="level == 3" class="levelTag v3">V{{ level }}</span>
</span>
</template>
<script>
export default {
props: {
level: Number
},
}
</script>
<style scoped>
.levelTag {
padding: 5rpx 6rpx;
border-radius: 50%;
color: #FFFFFF;
font-family: PingFang SC;
font-weight: 500;
font-size: 12px;
margin-left: 10rpx;
line-height: 23px;
}
.v1 {
background: linear-gradient(0deg, #29F19C, #02A1F9);
}
.v2 {
background: linear-gradient(0deg, #015EEA, #00C0FA);
}
.v3 {
background: linear-gradient(0deg, #FACC22, #F83600);
}
</style>

@ -332,6 +332,34 @@
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/grade/gradeValue",
"style": {
"navigationBarTitleText": "我的等级",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/grade/growInfo",
"style": {
"navigationBarTitleText": "成长值明细",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/grade/gradeRules",
"style": {
"navigationBarTitleText": "等级规则",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/grade/gradeTask",
"style": {
"navigationBarTitleText": "任务列表",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/testcrowdsourc/companyInfo",
"style": {

@ -248,7 +248,7 @@
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
</view>
<view style="width:58vw;">
<p class="leop" style="margin:0;justify-content: initial;">{{ item.projectName }}</p>
<p class="leop" style="margin:0;justify-content: initial;">{{ item.projectName }} <levelTag :level="item.level"></levelTag> </p>
<!-- <p class="typej">类型静态测试</p> -->
<p class="typej">
类型{{ findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue', 'dictLabel') }}</p>
@ -350,12 +350,13 @@ import { findLabelValueByPropnew } from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
import onLineCourseItem from '@/components/onLineCourseItem/index.vue'
import poster from '@/components/poster/index.vue'
import { dateFormat } from '../../utils/util';
import levelTag from '@/components/levelTag/index.vue'
// import { dateFormat } from '../../utils/util';
export default {
mixins: [mixin],
components: {
onLineCourseItem,poster
onLineCourseItem,poster,levelTag
},
data() {
return {

@ -3,42 +3,45 @@
<view class="schedule" style="padding:25rpx 0">
<view style="margin:0 25rpx 36rpx 25rpx">
<view style="display:flex;font-size:35rpx;font-weight:bold;justify-content: space-between;">
<p style='color: #333333;'>{{crowddata.task.project_name}} </p>
<p style='color: #333333;'>{{ crowddata.task.project_name }} <levelTag
:level="crowddata.task.level">
</levelTag>
</p>
<p v-if="crowddata.task.price == 0" style="color:#FD461A;">面议</p>
<p v-else style="color:#FD461A;">¥{{crowddata.task.price}}</p>
<p v-else style="color:#FD461A;">¥{{ crowddata.task.price }}</p>
</view>
<view style="display:flex;margin-top:15px;flex-wrap: wrap;">
<view class='tabone' style="margin-right:8rpx">
<span v-if="crowddata.task.task_status==0">竞标中</span>
<span v-if="crowddata.task.task_status==1">竞标成功</span>
<span v-if="crowddata.task.task_status==2">竞标失败</span>
<span v-if="crowddata.task.task_status == 0">竞标中</span>
<span v-if="crowddata.task.task_status == 1">竞标成功</span>
<span v-if="crowddata.task.task_status == 2">竞标失败</span>
</view>
<view class='tabone' style="background: #E8EEF5;color:#525B65;margin-right: 8rpx;"
v-for="itema in findLabelValueByPropnew(tasktypelist, crowddata.task.test_type, 'dictValue', 'dictLabel').split(',')">
<span>
{{itema}}
{{ itema }}
</span>
</view>
<block v-if="crowddata.task.language">
<view class="tabone tabone1" v-for="it in crowddata.task.language.split(/[,、]/)" :key="it">
{{it}}
{{ it }}
</view>
</block>
</view>
</view>
<u-line></u-line>
<view style="color:#808080;font-size: 24rpx;margin:36rpx 25rpx 0 25rpx">
<p style='margin-bottom:10px'>发布日期{{crowddata.task.create_time.slice(0,10)}}</p>
<p style='margin-bottom:10px'>需要人数{{crowddata.task.need_person}}</p>
<p style='margin-bottom:10px'>项目周期{{crowddata.task.period}}</p>
<p style='margin-bottom:10px'>发布日期{{ crowddata.task.create_time.slice(0, 10) }}</p>
<p style='margin-bottom:10px'>需要人数{{ crowddata.task.need_person }}</p>
<p style='margin-bottom:10px'>项目周期{{ crowddata.task.period }}</p>
<p style='margin-bottom:10px'>驻场需求
<span v-if="crowddata.task.onsite_type==0"> 无需驻场</span>
<span v-if="crowddata.task.onsite_type==1"> 偶尔驻场</span>
<span v-if="crowddata.task.onsite_type==2"> 定期驻场</span>
<span v-if="crowddata.task.onsite_type == 0"> 无需驻场</span>
<span v-if="crowddata.task.onsite_type == 1"> 偶尔驻场</span>
<span v-if="crowddata.task.onsite_type == 2"> 定期驻场</span>
</p>
<p style='margin-bottom:10px'>技能要求{{crowddata.task.tech_need}}</p>
<p style='margin-bottom:10px'>地域要求{{crowddata.task.area}}</p>
<p style='margin-bottom:10px'>有效天数{{crowddata.task.valid_days}}</p>
<p style='margin-bottom:10px'>技能要求{{ crowddata.task.tech_need }}</p>
<p style='margin-bottom:10px'>地域要求{{ crowddata.task.area }}</p>
<p style='margin-bottom:10px'>有效天数{{ crowddata.task.valid_days }}</p>
</view>
</view>
<view class="schedule">
@ -49,7 +52,7 @@
<view v-if="crowddata.task.project_desc">
<!-- <div class="article-body" v-html='industryinform.content'></div> -->
<rich-text class="article-body"
:nodes="crowddata.task&&crowddata.task.project_desc | filtersRichText"></rich-text>
:nodes="crowddata.task && crowddata.task.project_desc | filtersRichText"></rich-text>
</view>
<p v-else style="color:#808080;line-height:23px;font-size: 24rpx;white-space:pre-line;"></p>
</view>
@ -60,8 +63,8 @@
<view style="font-size: 15px;font-weight: bold;">联系方式</view>
</view>
<view style="color:#808080;font-size: 24rpx; ">
<p style='margin-bottom:10px'>联系人{{crowddata.task.contact_name}}</p>
<p style='margin-bottom:10px'>联系人{{crowddata.task.contact_tel}}</p>
<p style='margin-bottom:10px'>联系人{{ crowddata.task.contact_name }}</p>
<p style='margin-bottom:10px'>联系人{{ crowddata.task.contact_tel }}</p>
</view>
</view>
@ -79,9 +82,10 @@
</div> -->
<template v-if="crowddata.task.attachment">
<div style='display:flex;align-items: center;margin-bottom: 10px;'
v-for="(it,index) in crowddata.task.attachment.split(',')">
v-for="(it, index) in crowddata.task.attachment.split(',')">
<img style="width:17px;height:20px;margin-right:5px;" src="/static/crowd/upload.png" alt="" />
<p @click="openurl(it)" style="color:#1578ED;font-size: 12px;cursor: pointer;">项目附件{{index+1}}
<p @click="openurl(it)" style="color:#1578ED;font-size: 12px;cursor: pointer;">项目附件{{ index + 1
}}
</p>
</div>
</template>
@ -96,14 +100,14 @@
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">报名列表</view>
</view>
<view v-if="crowddata.entrants.length>0" style="display: flex;flex-wrap: wrap;">
<view v-for="(item,key) of crowddata.entrants" class="signst" @click="goUserDetail(item)">
<view v-if="crowddata.entrants.length > 0" style="display: flex;flex-wrap: wrap;">
<view v-for="(item, key) of crowddata.entrants" class="signst" @click="goUserDetail(item)">
<view v-if="item.avatar">
<img v-if="item.avatar.indexOf('http')==0" :src="item.avatar" alt="">
<img v-else :src="base+item.avatar" alt="" />
<img v-if="item.avatar.indexOf('http') == 0" :src="item.avatar" alt="">
<img v-else :src="base + item.avatar" alt="" />
</view>
<img style="margin-bottom: 4px;" v-else src="../../../static/crowd/defaultAva.jpg" alt="" />
<p>{{item.nick_name.slice(0,1)}}**</p>
<p>{{ item.nick_name.slice(0, 1) }}**</p>
<view class="success" v-if="item.status != 0 && item.status != 2">
<image src="/static/index/success.png" mode=""></image>
竞标成功
@ -128,18 +132,18 @@
alt="" @click="goCompanyInfo" />
<view>
<view style="display: flex;margin:5px 0;align-items: center;">
<p style="color:#4D4D4D ; font-size:13px ;font-weight: bold;">{{crowddata.task.company_name}}
<p style="color:#4D4D4D ; font-size:13px ;font-weight: bold;">{{ crowddata.task.company_name }}
</p>
</view>
<p class="ratebox" style="color:#808080;font-size:12px;align-items: center;">
<span>发包总数</span>
<span style="color:#1578ED;">{{crowddata.task.publish_task_count}}</span>
<span style="color:#1578ED;">{{ crowddata.task.publish_task_count }}</span>
<!-- <span style="color:#1578ED;">{{(crowddata.task.company_app_count + crowddata.task.personal_app_count) == 20 ? "已满":(crowddata.task.company_app_count + crowddata.task.personal_app_count)}}</span> -->
<span style="margin:0 6px"> l </span>
<block v-if="crowddata.task.commentsStar && crowddata.task.commentsStar != 0">
<span> 评分</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{crowddata.task.commentsStar}}</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{ crowddata.task.commentsStar }}</span>
<u-rate :current="crowddata.task.commentsStar" :disabled="true" active-color="#fa9c22"
inactive-color="#CDCECE"></u-rate>
</block>
@ -150,19 +154,19 @@
</view>
<view style='margin-bottom:10px;font-size: 24rpx;'>
<span style="color:#4D4D4D">公司简介</span>
<span style="color:#808080;line-height:23px;">{{crowddata.task.company_desc}}</span>
<span style="color:#808080;line-height:23px;">{{ crowddata.task.company_desc }}</span>
</view>
</view>
<view v-if='type==1' class="schedule" style="margin: 12px 3vw 25px 3vw;">
<view v-if='type == 1' class="schedule" style="margin: 12px 3vw 25px 3vw;">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">竞标方案</view>
</view>
<div v-if="userprogramme && userprogramme.period"
style="font-size: 14px;text-align:left;color: #333333;margin:10px 0px;line-height:25px;">
<p>竞标日期{{userprogramme.apply_time?userprogramme.apply_time.slice(0,10):'无'}}</p>
<p>竞标工期{{userprogramme.period?userprogramme.period+'天':'无'}}</p>
<p>竞标优势{{userprogramme.competition_edge?userprogramme.competition_edge:'无'}}</p>
<p>竞标日期{{ userprogramme.apply_time ? userprogramme.apply_time.slice(0, 10) : '无' }}</p>
<p>竞标工期{{ userprogramme.period ? userprogramme.period + '天' : '无' }}</p>
<p>竞标优势{{ userprogramme.competition_edge ? userprogramme.competition_edge : '无' }}</p>
<p>竞标附件
<span @click="openurl(userprogramme.attachment)" v-if="userprogramme.attachment"
style="color:#1578ED;cursor: pointer;">项目附件</span>
@ -173,7 +177,7 @@
<view class="submitt" v-if="crowddata.task.task_status == 0">
<!-- style="letter-spacing:0.5rem" -->
<view v-if='type==1' class="button-g"
<view v-if='type == 1' class="button-g"
style="width:100%;margin-left:0;border-radius: 10px;background: #909399;">
<p>已竞标</p>
</view>
@ -254,7 +258,7 @@
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirmtt"
@cancel='tokenshow=false'></u-modal>
@cancel='tokenshow = false'></u-modal>
<u-modal v-model="totalshow" @confirm="taskconfirm" content='恭喜您竞标成功,请等待竞标结果通知。' ref="uModal" confirm-text='确定'
:show-title='false'></u-modal>
<u-modal title='提示' v-model="certifshow" @confirm="certifconfirm" content='未实名认证的用户无法报名,请先去个人中心做实名认证'
@ -265,12 +269,15 @@
</template>
<script>
import {
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
export default {
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
import levelTag from '@/components/levelTag/index.vue'
import { getLevel } from '@/utils/userlevel';
export default {
mixins: [mixin],
components: { levelTag },
data() {
return {
base: this.http.baseUrl,
@ -286,7 +293,7 @@
competitionEdge: '',
attachment: ''
},
typeupload: ['pdf', 'doc', 'docx', ],
typeupload: ['pdf', 'doc', 'docx',],
headers: {
Authorization: 'Bearer ' + uni.getStorageSync('accessToken'),
},
@ -396,7 +403,7 @@
// }
let allPages = getCurrentPages(); //
let lastPages = allPages.length - 1; //
console.log('212',lastPages);
console.log('212', lastPages);
let options = allPages[lastPages].options;
this.userinform = uni.getStorageSync('wxUserInfo');
const url = this.userinform && this.userinform.userId ? `?userId=${this.userinform.userId}` : ''
@ -492,11 +499,38 @@
errorUpfile(data, index) {
},
application() {
async application() {
this.userinform = uni.getStorageSync('wxUserInfo');
let accessToken = uni.getStorageSync('accessToken');
console.log('open', this.userinform, this.crowddata.task);
if (!accessToken) {
await this.http.quickGet('/getInfo', true).then(res => {
const { growthValue } = res.data.user
const {level,_} = getLevel(growthValue)
if (this.crowddata.task.level && this.crowddata.task.level > level) {
uni.showModal({
title: `提示`,
content: '当前等级不满足竞标资格,去看看其他任务吧',
showCancel: false,
confirmText: '确定',
// success: function (res) {
// if (res.confirm) {
// uni.setClipboardData({
// data: url,
// success: function () {
// uni.showToast({
// title: '',
// })
// },
// fail: function () {
// uni.showToast({
// title: '',
// })
// },
// })
// console.log('')
// }
// },
})
} else if (!accessToken) {
this.tokenshow = true
} else {
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
@ -529,6 +563,8 @@
})
}
})
},
open() {
// console.log('open');
@ -708,7 +744,7 @@
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
success: function (res) {
console.log('打开文档成功');
}
});
@ -729,7 +765,7 @@
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
success: function (res) {
console.log('打开文档成功');
}
});
@ -743,28 +779,28 @@
}
},
}
}
}
</script>
<style>
.ratebox ::v-deep .u-icon {
.ratebox ::v-deep .u-icon {
font-size: 13px !important;
}
}
.logobg {
.logobg {
width: 100vw;
object-fit: contain;
}
}
.schedule {
.schedule {
width: 94vw;
margin: 12px 3vw;
background: #FFFFFF;
padding: 25rpx;
border-radius: 10rpx;
}
}
.tabone {
.tabone {
padding: 10rpx 15rpx;
color: #FFFFFF;
background: #2286FA;
@ -772,26 +808,26 @@
font-size: 20rpx;
text-align: center;
margin-bottom: 10rpx;
}
}
.tabone1 {
.tabone1 {
background: #FCF0E6;
font-weight: 500;
font-size: 20rpx;
color: #544841;
margin-right: 10rpx;
}
}
.vertical {
.vertical {
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 10rpx;
margin-right: 5px;
}
}
.submitt {
.submitt {
height: 70px;
font-size: 20px;
background: #FFFFFF;
@ -801,9 +837,9 @@
width: 100vw;
padding: 10px 20px;
}
}
.success {
.success {
width: 130rpx;
height: 40rpx;
background: #21B96C;
@ -814,19 +850,19 @@
display: flex;
justify-content: center;
align-items: center;
}
}
.success image {
.success image {
width: 20rpx;
height: 20rpx;
}
}
.success1 {
.success1 {
width: 130rpx;
height: 40rpx;
}
}
.button-g {
.button-g {
width: 280rpx;
height: 80rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
@ -836,10 +872,10 @@
color: #FFFFFF;
font-size: 33rpx;
margin-left: 13px;
}
}
/* line-height: 15%; */
.peodi {
/* line-height: 15%; */
.peodi {
/* line-height: 15%; */
margin: 5px auto 15px;
width: 260px;
@ -847,69 +883,69 @@
color: #1A1A1A;
font-size: 36rpx;
font-weight: bold;
}
}
.poptext {
.poptext {
font-size: 33rpx;
font-weight: 500;
color: #333333;
line-height: 24rpx;
margin-left: 5px;
}
}
.signst {
.signst {
display: flex;
flex-direction: column;
align-items: center;
margin: 5px;
}
}
.signst img {
.signst img {
width: 40px;
height: 40px;
border-radius: 50%;
}
}
.signst p {
.signst p {
font-size: 11px;
margin-top: 5px;
}
}
.article-body {
.article-body {
line-height: 26px !important;
/* width: 100%; */
/* color:rgb(17, 16, 16)!important; */
}
}
.article-body p {
.article-body p {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
}
.article-body>>>span {
.article-body>>>span {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
}
.sinput {
.sinput {
display: flex;
align-items: center;
height: 50px;
padding: 10px 0;
margin: 10px 0 0 0;
}
}
.sinput img {
.sinput img {
width: 20px;
height: 20px;
margin-right: 10px;
}
}
.sinput .u-input {
.sinput .u-input {
width: 75vw;
height: 35px;
border: 1px solid #E6E6E6;
@ -917,32 +953,32 @@
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding: 0 10px !important;
}
}
.sinputrt {
.sinputrt {
display: flex;
/* align-items: center; */
height: 50px;
padding: 10px 0;
margin: 0px 0 70px 0;
}
}
.sinputrt img {
.sinputrt img {
width: 20px;
height: 20px;
margin-right: 10px;
}
}
.sinputrt .u-input {
.sinputrt .u-input {
width: 75vw;
height: 100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px !important;
}
}
.slot-btn {
.slot-btn {
/* width:75vw;
height: 45px;
display: flex;
@ -959,13 +995,13 @@
border: 1px solid #E6E6E6;
line-height: 80px;
text-align: center;
}
}
.slot-btn__hover {
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
}
.u-list-item {
.u-list-item {
margin: 0 !important;
background: transparent !important;
color: #000000 !important;
@ -974,10 +1010,10 @@
zIndex: 0 !important;
border-radius: 0 !important;
border: none !important;
}
}
/* .u-list-item :before {
/* .u-list-item :before {
content: "已上传";
position: absolute;
left: 7px;

@ -5,19 +5,19 @@
<view style="display:flex;align-items: center;margin: 0 10px 0 15px;">
<view class="typetext">金额</view>
<view class="selecttype">
<view v-if="crowdobj.feeType==0" class="actovemode" style="padding: 0 10px;">全部</view>
<view v-if="crowdobj.feeType == 0" class="actovemode" style="padding: 0 10px;">全部</view>
<view v-else @click="changeamount('0')" class="actovemode"
style="color:#4D4D4D;background:transparent;padding: 0 10px;">全部</view>
<view v-if="crowdobj.feeType==1" class="actovemode" style="padding: 0 5px;">2千以下</view>
<view v-if="crowdobj.feeType == 1" class="actovemode" style="padding: 0 5px;">2千以下</view>
<view v-else @click="changeamount('1')" class="actovemode"
style="color:#4D4D4D;background:transparent;padding: 0 5px;">2千以下</view>
<view v-if="crowdobj.feeType==2" class="actovemode" style="padding: 0 5px;">2千-5千</view>
<view v-if="crowdobj.feeType == 2" class="actovemode" style="padding: 0 5px;">2千-5千</view>
<view v-else @click="changeamount('2')" class="actovemode"
style="color:#4D4D4D;background:transparent;padding: 0 5px;">2-5</view>
<view v-if="crowdobj.feeType==3" class="actovemode" style="padding: 0 5px;">5千-1万</view>
<view v-if="crowdobj.feeType == 3" class="actovemode" style="padding: 0 5px;">5千-1万</view>
<view v-else @click="changeamount('3')" class="actovemode"
style="color:#4D4D4D;background:transparent;padding: 0 5px;"> 5-1</view>
<view v-if="crowdobj.feeType==4" class="actovemode" style="padding: 0 5px;">1万以上</view>
<view v-if="crowdobj.feeType == 4" class="actovemode" style="padding: 0 5px;">1万以上</view>
<view v-else @click="changeamount('4')" class="actovemode"
style="color:#4D4D4D;background:transparent;padding: 0 5px;">1万以上</view>
</view>
@ -25,16 +25,16 @@
<view style="display:flex;align-items: center;margin:10px 10px 10px 15px;">
<view class="typetext">周期</view>
<view class="selecttype">
<view v-if="crowdobj.period==0" class="actovemode">全部</view>
<view v-if="crowdobj.period == 0" class="actovemode">全部</view>
<view v-else @click="changeperiod('0')" class="actovemode"
style="color:#4D4D4D;background:transparent;">全部</view>
<view v-if="crowdobj.period==1" class="actovemode">小于30天</view>
<view v-if="crowdobj.period == 1" class="actovemode">小于30天</view>
<view v-else @click="changeperiod('1')" class="actovemode"
style="color:#4D4D4D;background:transparent;">小于30天</view>
<view v-if="crowdobj.period==2" class="actovemode">30天-90天</view>
<view v-if="crowdobj.period == 2" class="actovemode">30天-90天</view>
<view v-else @click="changeperiod('2')" class="actovemode"
style="color:#4D4D4D;background:transparent;">30-90</view>
<view v-if="crowdobj.period==3" class="actovemode">90天以上</view>
<view v-if="crowdobj.period == 3" class="actovemode">90天以上</view>
<view v-else @click="changeperiod('3')" class="actovemode"
style="color:#4D4D4D;background:transparent;">90天以上</view>
@ -44,16 +44,16 @@
<view style="display:flex;align-items: center;margin: 0 10px 0 15px;">
<view class="typetext">驻场</view>
<view class="selecttype">
<view v-if="rescount==0" class="actovemode">全部</view>
<view v-if="rescount == 0" class="actovemode">全部</view>
<view v-else @click="changeresi('0')" class="actovemode"
style="color:#4D4D4D;background:transparent;">全部</view>
<view v-if="rescount==1" class="actovemode">无需驻场</view>
<view v-if="rescount == 1" class="actovemode">无需驻场</view>
<view v-else @click="changeresi('1')" class="actovemode"
style="color:#4D4D4D;background:transparent;">无需驻场</view>
<view v-if="rescount==2" class="actovemode">偶尔驻场</view>
<view v-if="rescount == 2" class="actovemode">偶尔驻场</view>
<view v-else @click="changeresi('2')" class="actovemode"
style="color:#4D4D4D;background:transparent;">偶尔驻场</view>
<view v-if="rescount==3" class="actovemode">定期驻场</view>
<view v-if="rescount == 3" class="actovemode">定期驻场</view>
<view v-else @click="changeresi('3')" class="actovemode"
style="color:#4D4D4D;background:transparent;">定期驻场</view>
</view>
@ -64,11 +64,11 @@
<view class="typetext">地域</view>
<view class="selecttype">
<view class="provice" @click="proviceClick">
{{proviceName}}
{{ proviceName }}
<image class="xialaimg" src="../../../static/index/xiala.png" mode=""></image>
</view>
<view class="city" @click="cityClick">
{{cityName}}
{{ cityName }}
<image class="xialaimg" src="../../../static/index/xiala.png" mode=""></image>
</view>
</view>
@ -77,26 +77,26 @@
</view>
<scroll-view @scrolltolower="lowerBottom" scroll-y="true" class="scrollHeight">
<view v-if="crowdobj.crowdlist.length>0" style="padding:0 10px;">
<view class="notice" @click="details('crpwd',item.taskId)" v-for="(item,key) of crowdobj.crowdlist"
<view v-if="crowdobj.crowdlist.length > 0" style="padding:0 10px;">
<view class="notice" @click="details('crpwd', item.taskId)" v-for="(item, key) of crowdobj.crowdlist"
:key="key">
<view style='width:160rpx;height:160rpx;margin-right:39rpx;'>
<image v-if="item.testType.split(',')[0]=='static'"
<image v-if="item.testType.split(',')[0] == 'static'"
src="http://image.bjkeyware.com/static/index/renliwb/jtcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='function'"
<image v-else-if="item.testType.split(',')[0] == 'function'"
src="http://image.bjkeyware.com/static/index/renliwb/gncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='performance'"
<image v-else-if="item.testType.split(',')[0] == 'performance'"
src="http://image.bjkeyware.com/static/index/renliwb/xncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='security'"
<image v-else-if="item.testType.split(',')[0] == 'security'"
src="http://image.bjkeyware.com/static/index/renliwb/aqcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='reliability'"
<image v-else-if="item.testType.split(',')[0] == 'reliability'"
src="http://image.bjkeyware.com/static/index/renliwb/kkxcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='development'"
<image v-else-if="item.testType.split(',')[0] == 'development'"
src="http://image.bjkeyware.com/static/index/renliwb/ycrw.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else src="http://image.bjkeyware.com/static/index/renliwb/qtcs.png" mode=""
@ -105,25 +105,27 @@
</view>
<view style="width: 58vw;">
<p class="leop" style="margin:-10px 0;justify-content: initial;">
{{item.projectName | ellipsis}}
{{ item.projectName | ellipsis }}
<levelTag :level="item.level"></levelTag>
</p>
<!-- <p class="typej" v-if="item.testType=='static'">类型静态测试</p> -->
<p class="typej fiextypej">
<view class="lefttypej">
类型{{findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue', 'dictLabel')}}
类型{{ findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue',
'dictLabel')}}
</view>
</p>
<p class="typej">工期{{item.period}} I
共招<text style="color: #0066EB;">{{item.needPerson}}</text> / 已报名
<text style="color: #0066EB;">{{item.companyAppCount + item.personalAppCount}}</text>
<p class="typej">工期{{ item.period }} I
共招<text style="color: #0066EB;">{{ item.needPerson }}</text> / 已报名
<text style="color: #0066EB;">{{ item.companyAppCount + item.personalAppCount }}</text>
<!-- <text style="color: #0066EB;">{{(item.companyAppCount + item.personalAppCount) +'/' + item.needPerson }}</text> -->
</p>
<p class="typej">语言{{item.language?item.language:'无' }} </p>
<p class="typej">语言{{ item.language ? item.language : '无' }} </p>
<view style="display:flex;justify-content:space-between;margin-top:20rpx">
<view style="display: flex;align-items: center;">
<p style='color:#FF8A00;font-size: 24rpx;'></p>
<p v-if="item.price == 0" style="color: #FF3200;font-size:30rpx;">面议</p>
<p v-else style="color: #FF3200;font-size:34rpx;">¥ {{item.price}}</p>
<p v-else style="color: #FF3200;font-size:34rpx;">¥ {{ item.price }}</p>
<p style="color: #4C4644;font-size: 22rpx;"></p>
</view>
<view v-if="item.processStatus == 0" class="buttonyz">报名中</view>
@ -156,15 +158,19 @@
</template>
<script>
import {
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
// import {
// plist,
// clist
// } from '@/static/cityjson.js'
export default {
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
import levelTag from '@/components/levelTag/index.vue'
// import {
// plist,
// clist
// } from '@/static/cityjson.js'
export default {
components: {
levelTag
},
mixins: [mixin],
data() {
return {
@ -2428,12 +2434,12 @@
},
}
}
}
</script>
<style scoped>
.provice,
.city {
.provice,
.city {
width: 211rpx;
height: 50rpx;
border-radius: 6rpx;
@ -2445,34 +2451,34 @@
padding-left: 10rpx;
box-sizing: border-box;
position: relative;
}
}
.city {
.city {
margin-left: 10rpx;
}
}
.xialaimg {
.xialaimg {
position: absolute;
top: 15rpx;
right: 20rpx;
width: 20rpx;
height: 20rpx;
}
}
.navTab {
.navTab {
width: 100%;
height: 100%;
padding: 13px 5px;
box-sizing: border-box;
}
}
.logobg {
.logobg {
width: 100%;
height: 32vw;
margin-bottom: 5px;
}
}
.notice {
.notice {
/* width: 90vw; */
/* height: 130px; */
margin-top: 10px;
@ -2481,31 +2487,31 @@
display: flex;
padding: 10px 15px;
align-items: center;
}
}
.typej {
.typej {
font-size: 24rpx;
color: #9D9D9D;
margin: 13rpx 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.fiextypej {
.fiextypej {
display: flex;
}
}
.lefttypej {
.lefttypej {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.buttonyz {
.buttonyz {
width: 139rpx;
height: 49rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
@ -2514,9 +2520,9 @@
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
}
.buttonyz1 {
.buttonyz1 {
width: 139rpx;
height: 49rpx;
background: #a8aeb6;
@ -2525,9 +2531,9 @@
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
}
.leop {
.leop {
font-size: 30rpx;
height: 40px;
font-weight: bold;
@ -2536,21 +2542,21 @@
display: flex;
align-items: center;
justify-content: center;
}
}
.more_text {
.more_text {
color: #999;
font-size: 24rpx;
text-align: center;
margin-top: 10px;
}
}
.scrollHeight {
.scrollHeight {
height: calc(100% - 280rpx);
/* padding:0 10px */
}
}
.typetext {
.typetext {
width: 45px;
height: 30px;
line-height: 30px;
@ -2558,35 +2564,35 @@
font-size: 13px;
color: #333333;
white-space: nowrap;
}
}
.jefw>>>.u-tabs-item {
.jefw>>>.u-tabs-item {
height: 30px !important;
font-size: 12px !important;
padding: 0 0px !important;
line-height: 30px !important;
/* width:60px!important; */
}
}
.peojcet>>>.u-tabs-item {
.peojcet>>>.u-tabs-item {
height: 30px !important;
font-size: 12px !important;
padding: 0 0px !important;
line-height: 30px !important;
margin: 0 14px 0 0;
/* width:65px!important; */
}
}
.selecttype {
.selecttype {
width: 100%;
display: flex;
/* justify-content: space-between; */
align-items: center;
font-size: 12px;
color: #4D4D4D;
}
}
.actovemode {
.actovemode {
background: #1E83F9;
border-radius: 50px;
color: #FFFFFF;
@ -2597,15 +2603,15 @@
line-height: 23px;
text-align: center;
white-space: nowrap;
}
}
.zhongcePage {
.zhongcePage {
width: 100vw;
height: 100%;
}
}
.topnavbar {
.topnavbar {
/* height: 220rpx; */
overflow: hidden;
}
}
</style>

@ -153,6 +153,15 @@ export default {
},
toPay() {
const userinform = uni.getStorageSync('wxUserInfo');
if (!userinform) {
uni.showToast({ title: '登录失效,请重新登录', icon: 'none', duration: 1000 });
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/login'
})
}, 1000)
return
}
const id = userinform.userId
// const data = {
// courseId: this.tooldetilsdata.tool.toolId,

@ -0,0 +1,169 @@
<template>
<view class="rulesWrap">
<view class="rulesImage">
<img src="http://image.bjkeyware.com/static/index/rulesBanner.png" alt="">
</view>
<view class="rulesGroup">
<view class="rulesTitle">等级及对应成长值</view>
<u-table width="100%">
<u-tr style="font-size: 25rpx;">
<u-th style="width: 11%;">等级</u-th>
<u-th style="width: 30%;">对应成长值</u-th>
<u-th style="width: 59%;">权益等级</u-th>
</u-tr>
<u-tr v-for="(item, index) in scoreArray" :key="index" style="" v-show="index != scoreArray.length -1">
<u-td style="width: 11%;">{{ scoreComputed(item.minScore, index,
'myLevel') }}</u-td>
<u-td style=" width: 30%;">
<view>{{
scoreComputed(item.minScore, index,
'scoreRange') }}</view>
</u-td>
<u-td style="width: 59%;">
<view> 新增竞标 <span :style="{
text: 'left',
color: scoreComputed(item.minScore, index,
'myGradeEquity') != '无门槛' ? '#FF5A4D' : ''
}">{{ scoreComputed(item.minScore, index,
'myGradeEquity') }}</span> 的众包任务的资格</view>
</u-td>
</u-tr>
</u-table>
</view>
<view class="rulesGroup">
<view class="rulesTitle">成长值获取途径</view>
<view class="growWays">
<view v-for="(item, index) in staticWays" :key="index">
<view class="waysTitle">{{ index + 1 }}. {{ item.split(' ')[0] }}</view>
<view class="waysInfo">{{ item.split(' ')[1] }}</view>
</view>
</view>
</view>
<view class="moreWays">更多获取途径敬请期待</view>
</view>
</template>
<script>
const staticWays = [
'实名认证 通过在我的页面完成实名认证,可获取50成长值',
'云员工认证 通过去PC端https://bjkeyware.com/ability/user完成云员工认证可获得300成长值',
'竞标任务 竞标成功后,实施验收通过后,可自动获取到200成长值'
]
import { scoreStrategies, getLevel } from '@/utils/userlevel';
const scoreArray = JSON.parse(JSON.stringify(scoreStrategies)).reverse()
export default {
data() {
return {
scoreArray: scoreArray,
staticWays: staticWays
}
},
computed: {
scoreComputed() {
return (min, index, tag) => {
const { level, equity } = getLevel(min)
if (tag == 'myLevel') {
return 'L' + level
} else if (tag == 'myGradeEquity') {
return equity
} else {
if (index == this.scoreArray.length - 1) {
return `X ≥ ${this.scoreArray[index].minScore}`
}
const max = this.scoreArray[index + 1].minScore
return `${min} ≤X<${max} `
}
}
}
}
}
</script>
<style lang="scss">
.u-td view {
text-align: start;
font-size: 24rpx;
}
.u-th view {
text-align: start !important;
font-size: 23rpx;
padding-left: 15rpx;
background-color: #EAF1FD !important;
}
.u-td {
text-align: start !important;
flex: none !important;
}
.u-th {
font-size: 26rpx;
text-align: start !important;
padding-left: 15rpx;
background-color: #EAF1FD !important;
flex: none !important;
}
.rulesWrap {
padding: 35rpx 25rpx;
font-family: PingFang SC;
font-weight: 500;
.rulesImage {
img {
height: 200rpx;
width: 100%;
}
}
.rulesGroup {
margin: 30rpx auto;
background: #FFFFFF;
border-radius: 10rpx;
padding: 0 20rpx;
font-family: PingFang SC;
font-weight: 500;
padding: 30rpx 25rpx 30rpx 25rpx;
margin: 25rpx 0;
.rulesTitle {
font-size: 28rpx;
color: #000000;
font-weight: bold;
line-height: 50rpx;
margin-bottom: 10rpx;
}
.growWays {
line-height: 42rpx;
font-size: 24rpx;
.waysTitle {
color: #333333;
}
.waysInfo {
color: #666666;
}
}
}
.moreWays {
margin-top: 40rpx;
text-align: center;
font-size: 28rpx;
color: #5F6975;
line-height: 25rpx;
}
}
</style>

@ -0,0 +1,144 @@
<template>
<view class="taskWrap">
<view class="taskItem" v-for="(task, index) in taskArrays" :key="index">
<view>
<view class="taskItemTitle">{{ task.lable }}</view>
<view class="taskItemInfo"><span style="margin-right: 15rpx;color: #FC4A4A;">+{{ task.score }}
</span>成长值
</view>
</view>
<view v-if="!task.state" class="taskBtn missonSuccess" @click="dropTo(task.url)">
{{ '去完成' }}
</view>
<view v-else class="taskBtn missonFaild">
{{ '已完成' }}
</view>
</view>
</view>
</template>
<script>
const taskArrays = [
{ lable: '实名认证', score: '50', url: '/pages/personal/setup/certification', state: false },
{ lable: '云员工认证', score: '300', url: 'cloud', state: false },
{ lable: '去竞标任务', score: '200', url: '', state: false },
]
export default {
data() {
return {
taskArrays: taskArrays,
phoneuserinfo: null
}
},
onShow() {
this.phoneuserinfo = uni.getStorageSync('wxUserInfo');
this.http.quickGet('/getInfo', true).then(res => {
const { testerStatus } = res.data.user
if (testerStatus == 1) {
this.taskArrays[0].state = true
} else if (testerStatus == 2) {
this.taskArrays[0].state = true
this.taskArrays[1].state = true
} else if (testerStatus == 0) {
this.taskArrays[0].state = false
}
})
},
methods: {
dropTo(url) {
if (url == 'cloud') {
uni.showModal({
title: `云员工认证请前往PC端`,
content: 'PC端网址:https://bjkeyware.com',
showCancel: false,
confirmText: '复制网址',
success: function (res) {
if (res.confirm) {
uni.setClipboardData({
data: url,
success: function () {
uni.showToast({
title: '复制成功',
})
},
fail: function () {
uni.showToast({
title: '复制失败',
})
},
})
}
},
})
return
}
if (url) {
uni.navigateTo({
url: `${url}`
})
return
}
uni.switchTab({
url: '/pages/index/testcrowdsourc/testcrowdsourc',
})
}
}
}
</script>
<style lang="scss" scoped>
.taskWrap {
padding: 35rpx 0;
.taskItem {
width: 700rpx;
height: 150rpx;
background: linear-gradient(90deg, #E2EDFD, #E5E4FE);
box-shadow: 0rpx 1rpx 10rpx 1rpx rgba(32, 37, 44, 0.2);
border-radius: 10rpx;
margin: 0 auto 30rpx auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 35rpx;
font-family: PingFang SC;
font-weight: 500;
.taskItemTitle {
font-family: PingFang SC;
font-weight: 500;
font-size: 30rpx;
color: #000;
line-height: 38rpx;
}
.taskItemInfo {
margin-top: 20rpx;
font-size: 26rpx;
color: #666666;
line-height: 38rpx;
}
.taskBtn {
width: 130rpx;
height: 46rpx;
border-radius: 23rpx;
text-align: center;
color: #fff;
line-height: 46rpx;
}
.missonSuccess {
background: linear-gradient(90deg, #39DA8C, #2B8EFE);
}
.missonFaild {
background: linear-gradient(90deg, #FAD126, #FF544F);
}
}
}
</style>

@ -0,0 +1,360 @@
<template>
<view>
<view class="gradeWrap">
<view style="margin: 0 50rpx;display: flex;align-items: center;">
<view @click="gouserHome">
<img style='width:55px;height:55px;border-radius: 50%' v-if='avatar'
:src="avatar && avatar.indexOf('http') == 0 ? avatar : base + avatar" alt="">
<img v-else style='width:55px;height:55px;border-radius: 50%'
src="../../../static/crowd/defaultAva.jpg" alt="">
</view>
<p v-if='phoneuserinfo.companyName' style='margin-bottom:5px;font-size:17px;font-weight:600;'>
{{ phoneuserinfo.companyName }}
</p>
<p v-else style='margin-bottom:5px;font-size:17px;font-weight:600;margin-left: 10rpx;'>{{ nickName }}
</p>
</view>
<view class="gradeSwiperWrap">
<swiper class="gradeSwiper" previous-margin="30rpx" next-margin="30rpx">
<swiper-item v-for="(index) in scoreArray.length - 1" :key="index">
<view class="swiper-item gradeSwiperItem">
<view class="bothSide">
<view>
<view class="currentState">{{ currentGrade(scoreArray[index].minScore, index, true)
}}</view>
<view class="currentLevel">Lv. {{ index }}</view>
</view>
<view @click="toToggle('gradeTask')"
v-show="currentGrade(scoreArray[index].minScore, index, true) == '当前等级'"
class="toGrow">去升级
</view>
</view>
<view class="grailLayout">
<view>Lv. {{ index }}</view>
<view style="font-size: 24rpx;color: #666666;">已获得{{ myScore }}成长值</view>
<view>Lv. {{ index + 1 }}</view>
</view>
<view class="splitLine">
<view class="progress" :style="{ width: progressWidth(index) }"></view>
</view>
<view class="grailLayout">
<view>{{ scoreArray[index].minScore }}</view>
<view
v-if="'currentGrow1' == stateMap[currentGrade(scoreArray[index].minScore, index, true)]"
class="currentGrow1">{{ currentGrade(scoreArray[index].minScore, index, false) }}
</view>
<view
v-if="'currentGrow2' == stateMap[currentGrade(scoreArray[index].minScore, index, true)]"
class="currentGrow2">{{ currentGrade(scoreArray[index].minScore, index, false) }}
</view>
<view
v-if="'currentGrow3' == stateMap[currentGrade(scoreArray[index].minScore, index, true)]"
class="currentGrow3">{{ currentGrade(scoreArray[index].minScore, index, false) }}
</view>
<view>{{ index == scoreArray.length - 1 ? scoreArray[scoreArray.length - 1].minScore :
scoreArray[index + 1]['minScore'] }}
</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
<view class="newRight"><img src="http://image.bjkeyware.com/static/index/myRight.png" alt=""> 新增权益</view>
<view class="rightInfo">新增竞标 <span :style="{ color: levelColor[level] }">{{ level }}</span> 的众包任务的资格</view>
</view>
<view class="rulesGroup">
<view @click="toToggle('growInfo')">
<view>成长值明细</view><img src="http://image.bjkeyware.com/static/index/xia.png" alt="">
</view>
<view @click="toToggle('gradeRules')">
<view>等级规则</view><img src="http://image.bjkeyware.com/static/index/xia.png" alt="">
</view>
</view>
</view>
</template>
<script>
const levelColor = {
'V1': '#6740E5',
'V2': '#E86914',
'V3': '#9752FF',
}
import { scoreStrategies, getLevel } from '@/utils/userlevel';
const scoreArray = JSON.parse(JSON.stringify(scoreStrategies)).reverse()
export default {
data() {
return {
scoreArray: Object.freeze(scoreArray),
myScore: '1900',
avatar: '',
phoneuserinfo: '',
nickName: '',
stateMap: Object.freeze({
'未达成': 'currentGrow3',
'已达成': 'currentGrow1',
'当前等级': 'currentGrow2'
}),
levelColor: Object.freeze(levelColor)
}
},
methods: {
toToggle(url) {
uni.navigateTo({
url: `./${url}`
})
}
},
onShow() {
this.http.quickGet('/getInfo',true).then(res=>{
const {growthValue} = res.data.user
this.myScore = growthValue || 0
})
this.phoneuserinfo = uni.getStorageSync('wxUserInfo');
this.avatar = uni.getStorageSync('avatar');
this.nickName = uni.getStorageSync('nickName');
},
created() {
console.log(this.scoreArray);
},
computed: {
level() {
const { _, equity } = getLevel(this.myScore)
return equity
},
currentGrade() {
return (min, index, tag) => {
// if (index == this.scoreArray.length - 1) {
// return ''
// }
const max = this.scoreArray[index + 1]['minScore']
if (this.myScore >= max) {
return '已达成'
} else if (this.myScore <= max && this.myScore >= min) {
let result = ''
result = tag ? '当前等级' : `还差${max - this.myScore}可升级`
return result
} else {
return '未达成'
}
}
},
progressWidth() {
return (index) => {
const max = this.scoreArray[index + 1]['minScore']
if (this.myScore > max) {
return '100%'
} else if (this.myScore < this.scoreArray[index]['minScore']) {
return '0%'
} else {
return (((this.myScore - this.scoreArray[index]['minScore']) / (max - this.scoreArray[index]['minScore'])) * 100).toFixed(2) + "%"
}
}
}
}
}
</script>
<style lang="scss" scoped>
.gradeWrap {
background-color: #e3e6fe;
border-bottom-left-radius: 60rpx;
border-bottom-right-radius: 60rpx;
padding: 20rpx 0;
.gradeSwiperWrap {
.gradeSwiper {
height: 300rpx;
box-sizing: border-box;
.gradeSwiperItem {
padding: 22rpx 0rpx;
box-shadow: 0rpx 2rpx 18rpx 0rpx rgba(30, 66, 111, 0.15);
border-radius: 10rpx;
margin: 0 10rpx;
background: url('http://image.bjkeyware.com/static/index/gradeBg.png') no-repeat 0 0;
background-size: 100% 100%;
}
.bothSide {
display: flex;
justify-content: space-between;
font-family: PingFang SC;
position: relative;
.toGrow {
width: 130rpx;
height: 46rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 23rpx;
text-align: center;
font-weight: 500;
font-size: 26rpx;
color: #FFFFFF;
line-height: 46rpx;
position: absolute;
bottom: 10rpx;
right: 30rpx;
}
.currentState {
width: 150rpx;
line-height: 46rpx;
font-weight: 500;
font-size: 26rpx;
color: #333333;
background: #EAF1FD;
text-align: center;
border-radius: 0rpx 23rpx 23rpx 0rpx;
}
.currentLevel {
margin: 30rpx 40rpx;
height: 28rpx;
font-weight: 800;
font-size: 36rpx;
color: #000000;
line-height: 38rpx;
}
}
.splitLine {
margin: 10rpx auto;
width: 572rpx;
height: 10rpx;
// background: #98C5FB;
background: #FFFFFF;
border-radius: 5rpx;
position: relative;
.progress {
position: absolute;
height: 10rpx;
width: 15%;
background: #98C5FB;
border-radius: 5rpx;
}
}
.grailLayout {
margin-top: 10rpx;
display: flex;
justify-content: space-between;
margin: 0 40rpx;
font-family: PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #333333;
line-height: 38rpx;
.currentGrow1 {
background: url('http://image.bjkeyware.com/static/index/currentState1.png') no-repeat 0 0;
min-width: 10rpx;
padding: 0 20rpx;
height: 50rpx;
line-height: 58rpx;
background-size: 100% 100%;
text-align: center;
font-family: PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
}
.currentGrow2 {
background: url('http://image.bjkeyware.com/static/index/currentState2.png') no-repeat 0 0;
min-width: 10rpx;
padding: 0 20rpx;
height: 50rpx;
line-height: 58rpx;
background-size: 100% 100%;
text-align: center;
font-family: PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
}
.currentGrow3 {
background: url('http://image.bjkeyware.com/static/index/currentState3.png') no-repeat 0 0;
min-width: 10rpx;
padding: 0 20rpx;
height: 50rpx;
line-height: 58rpx;
background-size: 100% 100%;
text-align: center;
font-family: PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
}
&:last-child {
border: none;
}
}
}
}
.newRight {
height: 29rpx;
font-family: PingFang SC;
font-weight: bold;
font-size: 30rpx;
color: #000000;
line-height: 38rpx;
margin: 30rpx 50rpx 20rpx 50rpx;
display: flex;
align-items: center;
img {
width: 41rpx;
height: 37rpx;
}
}
.rightInfo {
margin: 0rpx 50rpx;
padding-bottom: 20rpx;
font-family: PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #4D4D4D;
}
}
.rulesGroup {
width: 683rpx;
height: 180rpx;
margin: 30rpx auto;
background: #FFFFFF;
border-radius: 10rpx;
padding: 0 40rpx;
img {
width: 13rpx;
height: 21rpx;
}
>view {
height: 50%;
line-height: 90rpx;
border-bottom: 1px solid #EDEDED;
;
display: flex;
justify-content: space-between;
align-items: center;
&:last-child {
border: none;
}
}
}
</style>

@ -0,0 +1,77 @@
<template>
<view class="rulesGroupWrap">
<view class="rulesGroup">
<view v-for="(item, index) in growthDetail" :key="index">
<view class="rulesItem">
<view>{{ item.title }}</view>
<view><span style="color: #FC4A4A;margin-right: 15rpx;">+{{ item.growthValue }} </span> 成长值</view>
</view>
<view class="rulesTime">{{ item.date }}</view>
</view>
<view v-if="growthDetail.length == 0">暂无信息</view>
</view>
</view>
</template>
<script>
export default {
onShow() {
this.http.quickGet('/getInfo', true).then(res => {
console.log(res.data.user.growthDetail);
this.growthDetail = JSON.parse(res.data.user.growthDetail)
})
console.log(this.growthDetail);
},
data() {
return {
growthDetail: []
}
}
}
</script>
<style lang="scss" scoped>
.rulesGroupWrap {
padding: 30rpx 0;
.rulesGroup {
width: 683rpx;
margin: 0rpx auto;
background: #FFFFFF;
border-radius: 10rpx;
padding: 0 40rpx;
font-family: PingFang SC;
font-weight: 500;
padding: 5rpx 25rpx 55rpx 25rpx;
img {
width: 13rpx;
height: 21rpx;
}
>view {
border-bottom: 1px solid #EDEDED;
padding: 25rpx 0;
.rulesItem {
font-size: 30rpx;
color: #1A1A1A;
line-height: 38rpx;
line-height: 50rpx;
width: 100%;
display: flex;
justify-content: space-between;
}
.rulesTime {
margin-top: 10rpx;
font-size: 24rpx;
color: #808080;
line-height: 38rpx;
}
}
}
}
</style>

@ -108,7 +108,8 @@
</view>
</view>
<view class="cycontentit" @click="servier('bcrowd')">
<image style="width: 45rpx;height: 45rpx;" src="http://image.bjkeyware.com/static/index/renliwb/newmy2.png" class="cycontentitimg"
<image style="width: 45rpx;height: 45rpx;"
src="http://image.bjkeyware.com/static/index/renliwb/newmy2.png" class="cycontentitimg"
mode=""></image>
<view class="cycontentittext">
我的众包
@ -196,6 +197,13 @@
</view>
</view>
</view>
<view class="changyong changyong1" style="min-height: 90rpx;line-height: 90rpx;">
<view class="myGradeWrap">
<view class="grade"><img src="http://image.bjkeyware.com/static/index/myGrade.png" alt=""> 我的等级</view>
<view class="getGrowVal" @click="myGradeValue">领取成长值<img
src="http://image.bjkeyware.com/static/index/xia.png" alt=""></view>
</view>
</view>
<view style="height:15px"> </view>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
@ -454,6 +462,17 @@ export default {
} else {
this.tokenshow = true
}
},
//
myGradeValue() {
let accessToken = uni.getStorageSync('accessToken');
if (!accessToken) {
this.tokenshow = true
} else {
uni.navigateTo({
url: './grade/gradeValue'
})
}
}
}
}
@ -568,6 +587,42 @@ export default {
color: #4D4D4D;
}
.myGradeWrap {
display: flex;
justify-content: space-between;
align-items: center;
height: 100%;
font-family: PingFang SC;
font-weight: bold;
.grade {
font-size: 30rpx;
color: #000000;
display: flex;
align-items: center;
img {
margin: 0 10rpx;
width: 27rpx;
height: 34rpx;
}
}
.getGrowVal {
font-weight: 500;
font-size: 28rpx;
color: #1578ED;
display: flex;
align-items: center;
img {
margin: 0 10rpx;
width: 13rpx;
height: 20rpx;
}
}
}
.changyong {
width: 700rpx;
min-height: 230rpx;

@ -140,7 +140,7 @@
</div>
</view>
<view v-show="motify">
<view v-if="motify">
<u-form :model="accountform" ref="accountform" label-position='left' label-width='140'
border-bottom='false'>
<view v-if="accountform.paytype == '支付宝' && accountdata.alipay">
@ -407,6 +407,8 @@ export default {
});
} else {
this.$refs.accountform.validate((valid) => {
console.log('1');
if (valid) {
let data = {};
if (this.accountform.paytype == '支付宝') {

@ -1,8 +1,8 @@
import comstemutil from "./comstemutil";
//es6
const baseUrl = 'http://192.168.0.229:9999';
// const baseUrl = 'https://www.bjkeyware.com/test-api';
// const baseUrl = 'http://192.168.0.229:9999';
const baseUrl = 'https://www.bjkeyware.com/test-api';
// const baseUrl = 'https://www.bjkeyware.com/prod-api';
// const baseUrl = 'http://172.16.36.180:9999';

@ -0,0 +1,56 @@
/* 使if else
* 若等级规则增加给scoreStrategies数组添加对象即可 所有和等级相关的都会随之更改
* 食用方式
* const { level, equity} = getLevel(score)
* level:等级 equity:权益
*/
export const scoreStrategies = [
{ minScore: 5000, level: "4" },
{ minScore: 2000, level: "3" },
{ minScore: 500, level: "2" },
{ minScore: 100, level: "1" },
{ minScore: 0, level: "0" },
];
export const gradeEquity = function (level) {
return `${level * 1 === 0 ? "无门槛" : "V" + level}`;
};
export function getLevel(score) {
for (let i = 0; i < scoreStrategies.length; i++) {
if (score >= scoreStrategies[i].minScore) {
return {
level: scoreStrategies[i].level,
equity: gradeEquity(`${scoreStrategies[i].level}`),
};
}
}
console.error(`score=${score},无法确定等级`);
return "无法确定等级";
/*
strategyV1: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV2: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV3: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV4: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
};
*/
// const levelMap = {};
// for (let strategy in scoreStrategies) {
// const level = scoreStrategies(strategy)(score);
// if (level) {
// return level;
// }
// }
// console.error(`score=${score},无法确定等级`);
// return "无法确定等级";
}

@ -1,7 +1,7 @@
/* start--微信小程序编译后页面有组件名的元素,特别处理--start */
/* #ifdef MP-WEIXIN || MP-QQ */
u-td, u-th {
flex: 1;
// flex: 1;
align-self: stretch;
}

Loading…
Cancel
Save