任务详情页中用户及企业主页

main
lijingyu007 5 months ago
parent f424f5239b
commit bc9541aca7
  1. 16
      pages.json
  2. 2
      pages/index/test.vue
  3. 124
      pages/index/testcrowdsourc/companyInfo.vue
  4. 52
      pages/index/testcrowdsourc/crowdsourcingdetails.vue
  5. 368
      pages/index/testcrowdsourc/onlinejl.vue
  6. 16
      pages/index/testcrowdsourc/testcrowdsourc.vue
  7. 614
      pages/index/testcrowdsourc/userInfo.vue
  8. 6
      pages/personal/mycrowdtest/mycrowdtest.vue
  9. 22
      pages/personal/personal.vue
  10. 36
      pages/personal/personalresume/advantage.vue
  11. 15
      pages/personal/setup/Information.vue
  12. 4
      utils/http.js

@ -168,6 +168,13 @@
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/testcrowdsourc/onlinejl",
"style": {
"navigationBarTitleText": "在线简历",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/customerservice",
"style": {
@ -306,7 +313,14 @@
{
"path": "pages/index/testcrowdsourc/companyInfo",
"style": {
"navigationBarTitleText": "发布者主页",
"navigationBarTitleText": "企业主页",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/testcrowdsourc/userInfo",
"style": {
"navigationBarTitleText": "个人主页",
"navigationBarBackgroundColor": "#284CD1"
}
},

@ -1,6 +1,6 @@
<template>
<view class="">
<web-view id="myWebView" src="https://w102.ttkefu.com/k/linkurl/?t=6F5CCH6"></web-view>
<web-view id="myWebView" src="https://w1022.ttkefu.com/k/linkurl/?t=6F5CCH6"></web-view>
</view>
</template>

@ -2,28 +2,42 @@
<view class="peixunbanpage">
<!-- 公司信息 -->
<view class="companyinfo">
<image class="" :src="task.avatar" mode=""></image>
<view class="comname">{{task.company_name}}</view>
<view class="newinfo">
<image class="newinfoimg" :src="task.avatar" mode=""></image>
<view class="newinfoM">
<view class="newinfoMT">
<view class="newnaem">
{{task.company_name}}
</view>
<view class="newline">
|
</view>
<view v-if="task.commentsStar && task.commentsStar != 0" class="raterow">
<span> 评分</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{task.commentsStar}}</span>
<u-rate :current="task.commentsStar" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</view>
<view v-else style="font-weight: 500;font-size: r26px;color: #808080;" >
暂无评价
<view v-else style="min-width: 120rpx;font-weight: 500;font-size: 26rpx;color: #808080;" >
暂无评分
</view>
</view>
<view class="newinfoMB">
企业
</view>
</view>
</view>
<view class="tabnav">
<view class="tabnavitem" :class="{'activeitem': activetab == 1}" @click="tabnavClick(1)">
众包任务
企业信息
</view>
<view class="tabnavitem" :class="{'activeitem': activetab == 2}" @click="tabnavClick(2)">
评价
收到的评价
</view>
</view>
</view>
<!-- 任务列表 -->
<template v-if="activetab == 1">
<!-- <template v-if="activetab == 1">
<view class="notice" @click="details('crpwd',item.taskId)" v-for="(item,key) of crowdlist" :key="key">
<view style="width:160rpx;height:160rpx;margin-right:39rpx;">
<image v-if="item.testType.split(',')[0]=='static'"
@ -67,9 +81,13 @@
</view>
</view>
</view>
</template>
</template> -->
<template v-if="activetab == 1">
<view class="companyinfotext">
{{task.company_desc}}
</view>
</template>
<!-- 评价列表 -->
<template v-if="activetab == 2">
@ -128,7 +146,7 @@
onLoad(options) {
const task = JSON.parse(decodeURIComponent(options.taskInfo))
this.task = task
this.getTaskList()
// this.getTaskList()
},
methods: {
dateFormat,
@ -137,11 +155,11 @@
goTaskDetail() {
},
//
getTaskList() {
this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
this.crowdlist = res.data.rows;
})
},
// getTaskList() {
// this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
// this.crowdlist = res.data.rows;
// })
// },
//
getReviewList() {
this.http.quickGet(`/comment/comments/${this.task.publisher_id}?pageNum=${this.queryparams1.pageNum}&pageSize=${this.queryparams1.pageSize}`, false).then(res=>{
@ -152,7 +170,7 @@
tabnavClick(val) {
this.activetab = val
if (val == 1) {
this.getTaskList()
// this.getTaskList()
} else {
this.getReviewList()
}
@ -168,14 +186,14 @@
onReachBottom() {
if (this.activetab == 1) {
//
if (this.crowdlist.length % 10 != 0) {
return
} else {
this.queryparams.pageNum++
this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
this.crowdlist.push(...res.data.rows);
})
}
// if (this.crowdlist.length % 10 != 0) {
// return
// } else {
// this.queryparams.pageNum++
// this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
// this.crowdlist.push(...res.data.rows);
// })
// }
} else {
//
@ -199,11 +217,59 @@
background: #f5f7fa;
padding: 25rpx 25rpx 25rpx 25rpx;
box-sizing: border-box;
.companyinfotext {
width: 100%;
background: #FFFFFF;
border-radius: 10rpx;
padding: 35rpx;
box-sizing: border-box;
font-weight: 500;
font-size: 26rpx;
color: #4D4D4D;
line-height: 54rpx;
}
.newinfo {
width: 100%;
height: 179rpx;
background: linear-gradient(90deg, #E2EDFD, #FEE4E4);
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding: 40rpx 25rpx 0 25rpx;
display: flex;
.newinfoimg {
width: 102rpx;
height: 102rpx;
margin-right: 20rpx;
}
.newinfoMT {
display: flex;
align-items: center;
.newnaem {
font-weight: bold;
font-size: 32rpx;
color: #1A1A1A;
}
.newline {
color: #d1cfd0;
margin: 0 10rpx;
}
}
.newinfoMB {
width: 86rpx;
height: 32rpx;
background: linear-gradient(90deg, #F9BD55, #F49C45);
border-radius: 16rpx;
font-weight: 500;
font-size: 22rpx;
color: #FEFEFE;
line-height: 32rpx;
text-align: center;
margin-top: 10rpx;
}
}
//
.companyinfo {
width: 100%;
height: 350rpx;
background-color: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 30rpx;
@ -212,11 +278,7 @@
justify-content: space-between;
align-items: center;
image {
width: 95rpx;
height: 95rpx;
margin-top: 30rpx;
}
.comname {
font-weight: bold;

@ -8,27 +8,22 @@
<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="width:50px;margin-right:8rpx">
<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>
</view>
<view class='tabone' style="min-width:60px;background: #E8EEF5;color:#525B65;margin-right: 8rpx;"
<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}}
</span>
<!-- <span v-if="crowddata.task.test_type=='static'">静态测试</span>
<span v-if="crowddata.task.test_type=='function'">功能测试</span>
<span v-if="crowddata.task.test_type=='performance'">性能测试</span>
<span v-if="crowddata.task.test_type=='security'">安全测试</span>
<span v-if="crowddata.task.test_type=='configuration'">配置项测试</span>
<span v-if="crowddata.task.test_type=='reliability'">可靠性测试</span>
<span v-if="crowddata.task.test_type=='development'">研发任务</span>
<span v-if="crowddata.task.test_type=='outsource'">用人任务</span>
<span v-if="crowddata.task.test_type=='other'">其他</span> -->
</view>
<block v-if="crowddata.task.language">
<view class="tabone tabone1" v-for="it in crowddata.task.language.split(',')" :key="it">
{{it}}
</view>
</block>
</view>
</view>
<u-line></u-line>
@ -44,13 +39,6 @@
<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'>竞标者要求
<span v-if='crowddata.task.applicant_type==0'>个人测试者</span>
<span v-if='crowddata.task.applicant_type==1'>认证测试公司</span>
<span v-if='crowddata.task.applicant_type==2'>个人测试者/认证测试公司</span>
</p> -->
<!-- <p style='margin-bottom:10px'>需支持/适配的客户端网站</p>
<p>合作倾向希望与关键科技合作</p> -->
</view>
</view>
<view class="schedule">
@ -109,12 +97,11 @@
<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">
<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="" />
</view>
<!-- <img v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" alt="" /> -->
<img style="margin-bottom: 4px;" v-else src="../../../static/crowd/defaultAva.jpg" alt="" />
<p>{{item.nick_name.slice(0,1)}}**</p>
<view class="success" v-if="item.status != 0 && item.status != 2">
@ -462,6 +449,20 @@
}
},
methods: {
//
goUserDetail(item) {
const data = {
commentsStar: 0,
publisher_id: item.user_id,
name: item.nick_name,
avatar: item.avatar,
userId: item.user_id,
taskId: this.crowddata.task.task_id
}
uni.navigateTo({
url: `/pages/index/testcrowdsourc/userInfo?taskInfo=${encodeURIComponent(JSON.stringify(data))}`
})
},
findLabelValueByPropnew,
//
goCompanyInfo() {
@ -807,7 +808,7 @@
}
.tabone {
padding: 6rpx;
padding: 10rpx 15rpx;
color: #FFFFFF;
background: #2286FA;
border-radius: 5rpx;
@ -815,6 +816,13 @@
text-align: center;
margin-bottom: 10rpx;
}
.tabone1 {
background: #FCF0E6;
font-weight: 500;
font-size: 20rpx;
color: #544841;
margin-right: 10rpx;
}
.vertical {
width: 6rpx;

@ -0,0 +1,368 @@
<template>
<view class="jianlibox">
<view class="accounmt">
<view class="accounmtBox">
<view class="newTitle paddingL">
<view class="newTitlename">
{{resumedata.name}}
</view>
<view class="newTitlesex">
性别{{resumedata.sex}}
</view>
</view>
<div class="contenBox paddingL">
<!-- 基本信息 -->
<div class="contenItem paddingL">
<div class="contenItemTIle">
<div class="contenItemTIleL">基本信息</div>
</div>
<div class="contenItemC">
<div class="contenItemCIt">
所在城市{{resumedata.city}}
</div>
<div class="contenItemCIt">
技能方向{{resumedata.test_skills}}
</div>
<div class="contenItemCIt">
个人优势{{resumedata.personalAdvantage}}
</div>
</div>
</div>
<!-- 工作经历 -->
<div class="contenItem paddingL">
<div class="contenItemTIle">
<div class="contenItemTIleL">工作经历</div>
</div>
<div class="contenItemC">
<div class="contenItemCitem" v-for="(item,key) of worklist" :key="key">
<div class="contenItemCitemT">
<div class="contenItemCitemL">{{item.name}}</div>
<div class="contenItemCitemR">{{item.startTime}}-{{item.endTime}}
<u-icon name="arrow-right" color="#666666" size="24"></u-icon>
</div>
</div>
<div class="contenItemCitemM">
{{item.title}}
</div>
<div class="contenItemCIt">
工作内容{{item.intro}}
</div>
</div>
</div>
</div>
<!-- 项目经历 -->
<div class="contenItem paddingL">
<div class="contenItemTIle">
<div class="contenItemTIleL">项目经历</div>
</div>
<div class="contenItemC">
<div class="contenItemCitem" v-for="(item,key) of projectlist" :key="key">
<div class="contenItemCitemT">
<div class="contenItemCitemL">{{item.name}}</div>
<div class="contenItemCitemR">{{item.startTime}}-{{item.endTime}}
<u-icon name="arrow-right" color="#666666" size="24"></u-icon>
</div>
</div>
<div class="contenItemCitemM">
{{item.title}}
</div>
<div class="contenItemCIt">
应用技术{{item.applyTech}}
</div>
<div class="contenItemCIt">
工作内容{{item.intro}}
</div>
</div>
</div>
</div>
<!-- 教育经历 -->
<div class="contenItem paddingL">
<div class="contenItemTIle">
<div class="contenItemTIleL">教育经历</div>
</div>
<div class="contenItemC">
<div class="contenItemCitem" v-for="(item,key) of educationlist" :key="key">
<div class="contenItemCitemT">
<div class="contenItemCitemL">{{item.name}}</div>
<div class="contenItemCitemR">{{item.startTime}}-{{item.endTime}}
<u-icon name="arrow-right" color="#666666" size="24"></u-icon>
</div>
</div>
<div class="contenItemCitemM">
学历{{item.education}} 专业{{item.major}}
</div>
</div>
</div>
</div>
<!-- 资格证书 -->
<div class="contenItem paddingL">
<div class="contenItemTIle">
<div class="contenItemTIleL">资格证书</div>
</div>
<div class="contenItemC">
<div class="contenItemCitem" v-for="(item,key) of credentialsList" :key="key">
<div class="contenItemCitemimgBoxT">
<div class="contenItemCitemimgBoxTL">
证书名称{{item.fileName}}
</div>
</div>
<image class="contenItemCitemimg" @click.stop="priveimg(item.fileUrl)"
:src="item.fileUrl" alt=""></image>
</div>
</div>
</div>
</div>
</div>
</view>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
showida: false,
userinfo: {},
projectlist: [], //
worklist: [], //
educationlist: [], //
resumedata: {},
credentialsList: [], //
}
},
onLoad(options) {
const data = JSON.parse(decodeURIComponent(options.msg))
//
this.projectlist = data.projectCase.filter(it => it.type == 0)
this.worklist = data.projectCase.filter(it => it.type == 1)
this.educationlist = data.projectCase.filter(it => it.type == 2)
//
this.resumedata = data.data
//
this.credentialsList = data.credentials
},
methods: {
//
priveimg(logourl) {
// console.log('')
let imgsArray = [];
imgsArray[0] = logourl
uni.previewImage({
current: 0,
urls: imgsArray
});
},
}
}
</script>
<style lang="scss" scoped>
.topTip {
width: 100%;
height: 130rpx;
background: #FFFFFF;
padding: 25rpx 45rpx;
box-sizing: border-box;
font-weight: 500;
font-size: 26rpx;
color: #4D4D4D;
}
.topTip text {
color: #1578ED;
}
.accounmt {
padding: 25rpx;
box-sizing: border-box;
.accounmtBox {
width: 100%;
background: #ffffff;
border-radius: 6rpx;
.newTitle {
width: 100%;
height: 100rpx;
background: linear-gradient(90deg, #E2EDFD, #FEE4E4);
border-radius: 6rpx 6rpx 0rpx 0rpx;
display: flex;
align-items: center;
justify-content: space-between;
.newTitlename {
font-weight: bold;
font-size: 36rpx;
color: #000000;
}
.newTitlesex {
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.contenBox {
.contenItem {
border-bottom: 1px solid rgba(153, 153, 153, 0.15);
padding-bottom: 44rpx;
.contenItemTIle {
height: 100rpx;
display: flex;
align-items: center;
justify-content: space-between;
.contenItemTIleL {
font-weight: bold;
font-size: 32rpx;
color: #000000;
}
.contenItemTIleR {
width: 25rpx;
height: 25rpx;
}
.contenItemTIleR2 {
width: 30rpx;
height: 30rpx;
}
}
.contenItemC {
.contenItemCIt {
font-weight: 500;
font-size: 24rpx;
color: #4D4D4D;
line-height: 46rpx;
}
.contenItemCitem {
.contenItemCitemM {
font-weight: 500;
font-size: 24rpx;
color: #1A1A1A;
margin: 25rpx 0;
}
.contenItemCitemT {
display: flex;
align-items: center;
justify-content: space-between;
.contenItemCitemL {
font-weight: bold;
font-size: 26rpx;
color: #000000;
}
.contenItemCitemR {
font-weight: 500;
font-size: 24rpx;
color: #666666;
}
}
}
}
}
}
}
}
.contenItemCitemimgBoxT {
display: flex;
align-items: center;
justify-content: space-between;
.contenItemCitemimgBoxTL {
font-weight: 500;
font-size: 24rpx;
color: #4D4D4D;
}
.contenItemCitemimgBoxTR {
font-weight: 500;
font-size: 22rpx;
color: #FD4747;
}
}
.contenItemCitemimg {
width: 300rpx;
height: 200rpx;
margin: 20rpx 0;
}
.paddingL {
padding: 0 25rpx;
}
.maskDia {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(5, 5, 7, 0.5);
display: flex;
align-items: center;
justify-content: center;
.maskBox {
width: 570rpx;
height: 220rpx;
background: linear-gradient(0deg, #FFFFFF, #EFF3FE);
box-shadow: 0rpx 4rpx 21rpx 4rpx rgba(22, 27, 33, 0.1);
border-radius: 6rpx;
border: 1px solid #999999;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.maskBoxT {
color: #1A1A1A;
font-size: 26rpx;
font-weight: bold;
}
.maskBoxM {
color: #1A1A1A;
font-size: 26rpx;
font-weight: 500;
margin: 20rpx 0;
}
.maskBoxB {
color: #1578ED;
font-size: 26rpx;
font-weight: 500;
}
}
}
</style>

@ -112,25 +112,13 @@
<view class="lefttypej">
类型{{findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue', 'dictLabel')}}
</view>
<!-- <view class="righttypej">
I 状态<text v-if="item.taskStatus == 0" style="color: #F28F25;">报名中</text>
<text v-else style="color: #FD4646;">报名结束</text>
</view> -->
</p>
<!-- <p class="typej" v-if="item.testType=='function'">类型功能测试</p>
<p class="typej" v-if="item.testType=='performance'">类型性能测试</p>
<p class="typej" v-if="item.testType=='security'">类型安全测试</p>
<p class="typej" v-if="item.testType=='configuration'">类型配置项测试</p>
<p class="typej" v-if="item.testType=='reliability'">类型可靠性测试</p>
<p class="typej" v-if="item.testType=='development'">类型研发任务</p>
<p class="typej" v-if="item.testType=='outsource'">类型用人任务</p>
<p class="typej" v-if="item.testType=='other'">类型其他</p> -->
<!-- <p class="typej">工期{{item.period}} I 参与{{(item.companyAppCount + item.personalAppCount) == 20 ? "已满":(item.companyAppCount + item.personalAppCount) +'人' }} </p> -->
<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>
<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>
@ -189,7 +177,7 @@
crowdobj: {
crowdlist: [],
PageIndex: 1,
PageSize: 10,
PageSize: 99,
feeType: '',
period: '',
onsiteType: '',

@ -0,0 +1,614 @@
<template>
<view class="peixunbanpage">
<!-- 公司信息 -->
<view class="companyinfo">
<view class="newinfo">
<image class="newinfoimg" :src="userInfo.avatar" mode=""></image>
<view class="newinfoM">
<view class="newinfoMT">
<view class="newnaem">
{{userInfo.name}}
</view>
<view class="newline">
|
</view>
<view v-if="userInfo.commentsStar && userInfo.commentsStar != 0" class="raterow">
<span> 评分</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{userInfo.commentsStar}}</span>
</view>
<view v-else style="min-width: 120rpx;font-weight: 500;font-size: 26rpx;color: #808080;">
暂无评分
</view>
</view>
<view class="newinfoMB" v-if="userInfo.tester_status == 2">
云员工
</view>
</view>
<!-- 在线简历 -->
<view class="onlineJl" @click="goonline">
在线简历
</view>
</view>
<view class="tabnav">
<view class="tabnavitem" :class="{'activeitem': activetab == 1}" @click="tabnavClick(1)">
中标记录
</view>
<view class="tabnavitem" :class="{'activeitem': activetab == 2}" @click="tabnavClick(2)">
收到的评价
</view>
</view>
</view>
<!-- 任务列表 -->
<template v-if="activetab == 1">
<view v-for="(item,key) of crowdlist" class="sign_list" @click="signupdetails(item.task_id)">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view v-if='item.status==0' class="rightb"
style="background: linear-gradient(90deg, #FFDC00, #ED9706);"> 竞标中
</view>
<view v-if='item.status==1' class="rightb"> 实施中 </view>
<view v-if='item.status==3' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待验收 </view>
<view v-if='item.status==4' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待付款 </view>
<view v-if='item.status==2' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);">竞标失败</view>
<view v-if='item.status==5' class="rightb"
style="background: linear-gradient(90deg, #1BF5B3, #08C78F);"> 已完成 </view>
<view v-if='item.status==6' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 验收不通过 </view>
<!-- <view v-if='item.status==2 && item.process_status==3' class="rightb" style="background: linear-gradient(90deg, #FCA141, #FD6940);">竞标成功</view> -->
<p style="color:#FD461A;">{{item.price}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>项目名称{{item.project_name}}</p>
<p>项目周期{{item.period}}</p>
</view>
</view>
</template>
<!-- 评价列表 -->
<template v-if="activetab == 2">
<view class="pxitembox" v-for="it in reviewList" :key="it.comment_id">
<view class="pxitemboxt">
<view class="pxitemboxtl">
<image class="pxitemboxtlimg" src="../../../static/crowd/defaultAva.jpg" mode=""></image>
<!-- {来自{{it.from_city}}的伙伴} -->
{{it.user_name}}
</view>
<view class="pxitemboxtr">
{{dateFormat(new Date(it.create_time)) }}
</view>
</view>
<view class="pxitemboxc">
<view class="ratebox">
<u-rate v-model="it.star" :current="2" :disabled="true" active-color="#fa9c22"
inactive-color="#CDCECE"></u-rate>
</view>
<view class="pxitemboxcremark">
{{it.content}}
</view>
<view class="pxitemboxctask" @click="goTaskDetail">
{{it.project_name}}
</view>
</view>
</view>
</template>
</view>
</template>
<script>
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
import {
dateFormat
} from '@/utils/util.js'
export default {
mixins: [mixin],
data() {
return {
activetab: 1,
task: {},
crowdlist: [],
reviewList: [],
//
queryparams: {
pageSize: 10,
pageNum: 1,
},
queryparams1: {
pageSize: 10,
pageNum: 1,
},
userInfo: {},
obj: {},
}
},
onLoad(options) {
const task = JSON.parse(decodeURIComponent(options.taskInfo))
this.task = task
this.getDetail()
this.getTaskList()
},
methods: {
dateFormat,
findLabelValueByPropnew,
//
goonline() {
uni.navigateTo({
url: `/pages/index/testcrowdsourc/onlinejl?msg=${encodeURIComponent(JSON.stringify(this.obj))}`
})
},
//
getDetail() {
this.http.quickGet(
`/crowdsource/tester/detail/${this.task.userId}/${this.task.taskId}`, true).then(res => {
this.obj = res.data
this.userInfo = res.data.data
if (this.userInfo.avatar.indexOf('http') == -1) {
this.userInfo.avatar = this.http.baseUrl + this.userInfo.avatar
console.log(this.userInfo.avatar);
}
})
},
//
goTaskDetail() {},
//
getTaskList() {
this.http.quickGet(
`/crowdsource/claim/my/${this.task.userId}?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`, true).then(res => {
// status=0,1,2
this.crowdlist = res.data.rows
})
},
//
getReviewList() {
this.http.quickGet(
`/comment/comments/${this.task.publisher_id}?pageNum=${this.queryparams1.pageNum}&pageSize=${this.queryparams1.pageSize}`,
false).then(res => {
this.reviewList = res.data.rows
})
},
// tabbar
tabnavClick(val) {
this.activetab = val
if (val == 1) {
this.getTaskList()
} else {
this.getReviewList()
}
},
//
details(type, id) {
uni.navigateTo({
url: `./crowdsourcingdetails?id=${id}`
})
},
},
//
onReachBottom() {
if (this.activetab == 1) {
//
if (this.crowdlist.length % 10 != 0) {
return
} else {
this.queryparams.pageNum++
this.http.quickGet(
`/crowdsource/claim/my/${this.task.userId}?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`, true
).then(res => {
this.crowdlist.push(...res.data.rows);
})
}
} else {
//
if (this.reviewList.length % 10 != 0) {
return
} else {
this.queryparams1.pageNum++
this.http.quickGet(
`/comment/comments/${this.task.publisher_id}?pageNum=${this.queryparams1.pageNum}&pageSize=${this.queryparams1.pageSize}`).then(res => {
this.reviewList.push(...res.data.rows);
})
}
}
}
}
</script>
<style lang="scss" scoped>
.peixunbanpage {
width: 100vw;
height: 100%;
background: #f5f7fa;
padding: 25rpx 25rpx 25rpx 25rpx;
box-sizing: border-box;
.companyinfotext {
width: 100%;
background: #FFFFFF;
border-radius: 10rpx;
padding: 35rpx;
box-sizing: border-box;
font-weight: 500;
font-size: 26rpx;
color: #4D4D4D;
line-height: 54rpx;
}
.newinfo {
width: 100%;
height: 179rpx;
background: linear-gradient(90deg, #E2EDFD, #FEE4E4);
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding: 40rpx 25rpx 0 25rpx;
display: flex;
position: relative;
.onlineJl {
position: absolute;
top: 40rpx;
right: 30rpx;
font-weight: 500;
font-size: 28rpx;
color: #1578ED;
}
.newinfoimg {
width: 102rpx;
height: 102rpx;
margin-right: 20rpx;
}
.newinfoMT {
display: flex;
align-items: center;
.newnaem {
font-weight: bold;
font-size: 32rpx;
color: #1A1A1A;
}
.newline {
color: #d1cfd0;
margin: 0 10rpx;
}
}
.newinfoMB {
width: 86rpx;
height: 32rpx;
background: linear-gradient(90deg, #FC6C6C, #3873FA);
border-radius: 16rpx;
font-weight: 500;
font-size: 22rpx;
color: #FEFEFE;
line-height: 32rpx;
text-align: center;
margin-top: 10rpx;
}
}
//
.companyinfo {
width: 100%;
background-color: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.comname {
font-weight: bold;
font-size: 30rpx;
color: #333333;
}
.raterow {
font-weight: 500;
font-size: 26rpx;
color: #808080;
}
.tabnav {
width: 100%;
height: 72rpx;
border-top: 1px solid #EBEBEB;
box-sizing: border-box;
display: flex;
.tabnavitem {
flex: 1;
font-weight: 500;
font-size: 28rpx;
color: #4C4C4C;
display: flex;
justify-content: center;
align-items: center;
}
.activeitem {
font-weight: bold;
font-size: 28rpx;
color: #1578ED;
border-bottom: 4rpx solid #1578ED;
}
}
}
.pxitembox {
width: 100%;
background: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 30rpx;
.pxitemboxt {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid rgba(153, 153, 153, 0.2);
padding: 0 25rpx;
box-sizing: border-box;
}
.pxitemboxtl {
height: 89rpx;
display: flex;
align-items: center;
font-weight: 500;
font-size: 28rpx;
color: #1A1A1A;
.pxitemboxtlimg {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
margin-right: 10rpx;
}
}
.pxitemboxtr {
font-weight: 500;
font-size: 22rpx;
color: #808080;
}
.pxitemboxc {
width: 100%;
padding: 25rpx;
box-sizing: border-box;
.ratebox {
margin-bottom: 20rpx;
}
.ratebox ::v-deep .u-icon {
font-size: 20px !important;
}
.pxitemboxcremark {
font-weight: 500;
font-size: 22rpx;
color: #333333;
}
.pxitemboxctask {
margin-top: 20rpx;
font-weight: 500;
font-size: 22rpx;
color: #2084F9;
}
}
}
}
.notice {
background: #FFFFFF;
border-radius: 10px;
display: flex;
padding: 10px 15px;
align-items: center;
margin-bottom: 30rpx;
}
.typej {
font-size: 24rpx;
color: #9D9D9D;
margin: 13rpx 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.leop {
font-size: 30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.buttonyz1 {
width: 139rpx;
height: 49rpx;
background: #a8aeb6;
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.buttonyz {
width: 139rpx;
height: 49rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.daodile {
text-align: center;
margin: 20rpx 0;
font-size: 24rpx;
color: #9D9D9D;
}
.navTab {
padding: 2vh 13px;
}
.sign_list {
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin-bottom: 20px;
padding-bottom: 15px;
}
.rightb {
width: 183rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size: .8rem;
line-height: 54rpx;
text-align: center;
}
.fline {
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
.reviewbtnbox {
display: flex;
justify-content: flex-end;
}
.reviewbtn {
width: 150rpx;
height: 50rpx;
background: #FBA02A;
border-radius: 6rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
line-height: 50rpx;
text-align: center;
}
.reviewDialog {
position: fixed;
z-index: 99999999999999999999999999999999;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
.reviewbox {
position: relative;
width: 559rpx;
height: 593rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 21rpx 4rpx rgba(19, 106, 189, 0.15);
padding: 25rpx;
box-sizing: border-box;
.titlereview {
font-weight: bold;
font-size: 30rpx;
color: #1A1A1A;
text-align: center;
height: 70rpx;
line-height: 70rpx;
}
.closereview {
font-weight: bold;
font-size: 30rpx;
color: #1A1A1A;
font-weight: 400;
font-size: 40rpx;
color: #858994;
position: absolute;
top: 0;
right: 20rpx;
}
.tipcon {
font-weight: 500;
font-size: 22rpx;
color: #333333;
text-align: center;
margin: 20rpx 0;
}
.ratebox {
display: flex;
justify-content: center;
margin-bottom: 23rpx;
}
.ratebox ::v-deep .u-icon {
font-size: 20px !important;
}
.remarkbox {
margin-bottom: 30rpx;
}
.reviewbtn {
width: 100%;
height: 60rpx;
background: #2084F9;
border-radius: 6rpx;
line-height: 60rpx;
text-align: center;
}
}
.successbox {
width: 500rpx;
height: 70rpx;
background: #FDF7EE;
box-shadow: 0rpx 1rpx 15rpx 0rpx rgba(39, 50, 63, 0.15);
border-radius: 6rpx;
font-weight: bold;
font-size: 26rpx;
color: #000000;
display: flex;
align-items: center;
justify-content: center;
image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
}
}
</style>

@ -13,7 +13,7 @@
<view class="rightb" style="background: linear-gradient(90deg, #FFDC00, #ED9706);"> 竞标中
</view>
<p v-if="item.price == 0" style="color:#FD461A;">赏金金额面议 </p>
<p v-else style="color:#FD461A;">赏金金额{{item.price}} </p>
<p v-else style="color:#FD461A;">金额{{item.price}} </p>
</view>
<view class="fline"> </view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
@ -34,7 +34,7 @@
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待验收 </view>
<view v-if='item.status==4' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待付款 </view>
<p style="color:#FD461A;">赏金金额{{item.price}} </p>
<p style="color:#FD461A;">金额{{item.price}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
@ -57,7 +57,7 @@
<view v-if='item.status==6' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 验收不通过 </view>
<!-- <view v-if='item.status==2 && item.process_status==3' class="rightb" style="background: linear-gradient(90deg, #FCA141, #FD6940);">竞标成功</view> -->
<p style="color:#FD461A;">赏金金额{{item.price}} </p>
<p style="color:#FD461A;">金额{{item.price}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">

@ -1,7 +1,8 @@
<template>
<view>
<image src="http://image.bjkeyware.com/static/index/renliwb/newseticon.png" class="seticon" @click="goSetUp">
</image>
<view class="seticon" @click="goUserInfo">
编辑资料>
</view>
<view class="topbg">
<view style="display: flex;justify-content: space-between;">
<view v-if='phoneuserinfo' style="display: flex;align-items: center">
@ -10,7 +11,6 @@
:src="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>
<view style='margin-left:10px;'>
<p v-if='phoneuserinfo.companyName' style='margin-bottom:5px;font-size:17px;font-weight:600;'>
@ -18,10 +18,6 @@
</p>
<p v-else style='margin-bottom:5px;font-size:17px;font-weight:600;'>{{nickName}}</p>
<view style="display: flex;align-items: center;">
<!-- <p v-if='phoneuserinfo.userName'
style='color:rgb(0 0 0/0.7);margin-right:10px;font-size:15px;'>UID:
{{phoneuserinfo.userName}}
</p> -->
<block v-if="!applyInfo.applyId && !applyInfo.companyApplyId">
<view class="unapply" @click="goApply">
未认证
@ -182,6 +178,13 @@
用人记录
</view>
</view>
<view class="cycontentit" @click="goSetUp">
<image src="http://image.bjkeyware.com/static/index/renliwb/newseticon.png" class="cycontentitimg"
mode=""></image>
<view class="cycontentittext">
设置
</view>
</view>
</view>
</view>
@ -525,8 +528,9 @@
position: fixed;
top: 93rpx;
right: 40rpx;
width: 35rpx;
height: 35rpx;
font-weight: 500;
font-size: 28rpx;
color: #4D4D4D;
}
.changyong {

@ -16,8 +16,14 @@
</u-form-item>
<u-form-item label="技能方向:" prop="testSkills" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" v-model="basicobj.testSkills" placeholder='输入技能方向' />
<view class="sinput sinput1">
<u-input style="width:100%;" v-model="basicobj.testSkills" type="select"
@click="skillshow = true" placeholder='输入技能方向' />
<u-select v-model="skillshow" :list="skillList" @confirm="skillchange"
mode="mutil-column-auto"></u-select>
<br />
<u-input v-show="basicobj.testSkills == '其他'" style="width:100%;" v-model="testSkillValue"
placeholder='输入技能方向' />
</view>
</u-form-item>
<u-form-item label="个人优势:" prop="personalAdvantage" border-bottom='false' required='true'>
@ -43,12 +49,26 @@
wxUserInfo: null,
testerdata: null,
cityList: [],
skillList: [{
label: 'java',
value: 'java'
},
{
label: 'python',
value: 'python'
},
{
label: '其他',
value: '其他'
},
],
skillshow: false,
testSkillValue: '',
certRules: {
city: [{
required: true,
message: '请选择城市',
trigger: 'change'
trigger: 'blur'
}],
testSkills: [{
required: true,
@ -86,12 +106,17 @@
},
methods: {
skillchange(e) {
this.basicobj.testSkills = e[0].label
this.testSkillValue = ''
},
citychange(e) {
this.basicobj.city = e[0].label + '-' + e[1].label
},
resource() {
this.$refs.basicobj.validate(valid => {
if (valid) {
this.basicobj.testSkills = this.testSkillValue ? this.testSkillValue : this.basicobj.testSkills
this.http.quickPost(`/tester/cert/profile`, this.basicobj, true).then(res => {
if (res.data.code == 200) {
this.$refs.uToast.show({
@ -125,6 +150,9 @@
align-items: center;
/* height: 50px; */
}
.sinput1 {
display: block;
}
.u-form-left__content__label {
color: #808080 !important;

@ -102,7 +102,6 @@
let email=uni.getStorageSync('email');
let nickName=uni.getStorageSync('nickName');
let sex=uni.getStorageSync('sex');
console.log('wxUserInfo',this.wxUserInfo,)
let {phonenumber}=this.wxUserInfo;
let setavatar='',sexdata='';
if(avatar){
@ -178,12 +177,12 @@
})
return;
}
let avatar='',avtimg=this.infornobj.avatar;
if(avtimg&&avtimg.indexOf('h')==0){
avatar=avtimg
}else{
avatar=this.http.baseUrl+avtimg
}
// let avatar='',avtimg=this.infornobj.avatar;
// if(avtimg&&avtimg.indexOf('h')==0){
// avatar=avtimg
// }else{
// avatar=this.http.baseUrl+avtimg
// }
let sexindex=this.sexList.filter(item=>item.label==this.infornobj.sex)[0].value;
let data={
@ -191,7 +190,7 @@
nickName:this.infornobj.nickName,
email:this.infornobj.email,
sex:sexindex,
avatar,
avatar: this.infornobj.avatar,
}
console.log('data---',data)
// return;

@ -1,9 +1,9 @@
import comstemutil from "./comstemutil";
//es6
// const baseUrl = 'http://192.168.0.229:9999';
const baseUrl = 'http://192.168.0.229:9999';
// const baseUrl = 'http://172.16.36.180:9999';
const baseUrl = 'https://www.bjkeyware.com/prod-api';
// const baseUrl = 'https://www.bjkeyware.com/prod-api';
const devStatus = false;
const commonhttp = (params, header) => {
return new Promise((resolve, reject) => {

Loading…
Cancel
Save