软测宝小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keysass_app/pages/index/testcrowdsourc/crowdsourcingdetails.vue

995 lines
31 KiB

7 months ago
<template>
<view v-if="crowddata" style="padding-bottom:70px;">
<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 v-if="crowddata.task.price == 0" style="color:#FD461A;">面议</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="width:50px;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;"
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>
</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'>驻场需求
<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'>竞标者要求
<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">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">需求描述</view>
</view>
<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>
</view>
<p v-else style="color:#808080;line-height:23px;font-size: 24rpx;white-space:pre-line;"></p>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<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>
</view>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">附件</view>
</view>
<view style='margin-bottom: 10px;'>
<!-- <div style='display:flex;align-items: center;margin-bottom: 10px;' v-if="crowddata.task.attachment&&crowddata.task.attachment.indexOf('/upload')>0">
<img style="width:17px;height:20px;margin-right:5px;" src="/static/crowd/upload.png" alt="" />
<p @click="openurl(crowddata.task.attachment)" style="color:#1578ED;font-size: 12px;cursor: pointer;">项目附件</p>
</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(',')">
<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>
</div>
</template>
<!-- -->
<p v-else style="color:#808080;font-size: 12px;"></p>
<!-- <p style="color:#1578ED;font-size: 12px;">项目附件.zip</p> -->
</view>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<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">
<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">
<image src="/static/index/success.png" mode=""></image>
竞标成功
</view>
<view class="success1" v-else>
</view>
</view>
</view>
<view v-else style="color: #808080;font-size: 12px;">
</view>
<!-- <img style="width:280px;height:50px;" src="/static/crowd/signlist.png" alt="" /> -->
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">发布者信息</view>
</view>
<view style='display:flex;align-items: center;margin-bottom:15px;'>
<!-- <img style="width:50px;height:50px;margin-right:5px" src="/static/crowd/crowdlogo.png" alt="" /> -->
<img style="width:50px;height:50px;margin-right:5px;border-radius: 50%;" :src="crowddata.task.avatar"
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>
<!-- <img v-if="crowddata.task.email" style="width:15px;height:15px;margin:0 5px;" src="/static/crowd/email.png" alt="" />
<img v-else style="width:15px;height:15px;margin:0 5px;" src="/static/crowd/noemail.png" alt="" /> -->
<!-- <img @click="callingphone(crowddata.task.contact_tel)" v-if="crowddata.task.contact_tel" style="width:15px;height:15px;margin-left: 20rpx;" src="/static/crowd/phone.png" alt="" />
<img v-else style="width:15px;height:15px;margin-left: 20rpx;" src="/static/crowd/nophone.png" alt="" /> -->
</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.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>
<u-rate :current="crowddata.task.commentsStar" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</block>
<span v-else>暂无评价</span>
</p>
</view>
</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>
</view>
</view>
<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>竞标附件
<span @click="openurl(userprogramme.attachment)" v-if="userprogramme.attachment"
style="color:#1578ED;cursor: pointer;">项目附件</span>
<span v-else style="margin-left: -3px"></span>
</p>
</div>
</view>
<view class="submitt" v-if="crowddata.task.task_status == 0">
<!-- style="letter-spacing:0.5rem" -->
<view v-if='type==1' class="button-g"
style="width:100%;margin-left:0;border-radius: 10px;background: #909399;">
<p>已竞标</p>
</view>
<view v-else class="button-g" style="width:100%;margin-left:0;border-radius: 10px;" @click="application">
<p>竞标报名</p>
</view>
</view>
<view class="submitt" v-else>
<!-- style="letter-spacing:0.5rem" -->
<view class="button-g" style="width:100%;margin-left:0;border-radius: 10px;background: #A8Aeb6;">
<p>报名结束</p>
</view>
</view>
<u-popup v-model="isPopupShow" @close="close" @open="open" mode="bottom" length="80%" height='350px'
border-radius="15" :closeable='true' :mask-close-able="false">
<!-- <view class='peodi'>
<u-icon name="error-circle-fill" color="#FE5517" size="35"></u-icon>
<span class="poptext">确定要竞标此众包任务吗</span>
</view> -->
<view style="background:#66666;padding:20px 0px 30px 10px; ">
<view class='peodi'>提交竞标方案</view>
<u-line></u-line>
<view class="sinput">
<p style="color:#fa3534;margin-right:3px">* </p>
<img src="/static/crowd/commny.png" alt="">
<view style="display: flex;align-items: center;">
<u-input v-model="biddingobj.period" placeholder='请输入预算周期' borrder="true" />
<span style="margin-left:5px;"></span>
</view>
</view>
<view class="sinputrt">
<p style="color:#fa3534;margin-right:3px">* </p>
<img src="/static/crowd/like.png" alt="">
<u-input v-model="biddingobj.competitionEdge" placeholder='请输入竞标优势...' type="textarea"
auto-height="true" />
</view>
<!-- <view class="sinput" style="align-items: baseline;margin:20px 0 50px 0;">
<img src="/static/crowd/fjupload.png" alt="">
<u-upload ref="upload" width='100px' height='100px'
max-count="1"
:action="action"
:header="headers"
:auto-upload="true"
:custom-btn="true"
:show-progress="false"
:limitType='typeupload'
:deletable="true"
:file-list="biddingobj.attachment"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" hover-class="slot-btn__hover" hover-stay-time="150">
<view >
<u-icon name="arrow-upward" color="#B3B3B3" size='40'></u-icon>
</view>
</view>
</u-upload>
</view>
<p style="margin:-83px 0 0 40px;color: #1578ED;" v-if="biddingobj.attachment">已上传</p>
<p v-if="biddingobj.attachment==''" style="margin-left: 30px;">上传文件最大限 <span style="color: #F0AA2F;">20M</span> </p>
-->
</view>
<!-- <u-line ></u-line> -->
<view class="submitt" style="display: flex;justify-content: space-between;">
<view class="button-g"
style="width:43vw;background:#FFFFFF;border: 1px solid #D9D9D9;color: #666666;margin-left:0"
@click="popcilk('cancel')">取消</view>
<view @click="popcilk('determine')" class="button-g"
style="width:43vw;background:linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF;margin-left:0">
确定</view>
</view>
</u-popup>
<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>
<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='未实名认证的用户无法报名,请先去个人中心做实名认证'
ref="ucertif" confirm-text='去实名认证' :show-title='false'></u-modal>
<!-- :async-close="true" -->
</view>
</template>
<script>
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
export default {
mixins: [mixin],
data() {
return {
base: this.http.baseUrl,
certifshow: false,
isPopupShow: false,
crowddata: null,
totalshow: false,
tokenshow: false,
biddingobj: {
taskId: '',
applicantId: '',
period: '',
competitionEdge: '',
attachment: ''
},
typeupload: ['pdf', 'doc', 'docx', ],
headers: {
Authorization: 'Bearer ' + uni.getStorageSync('accessToken'),
},
action: 'https://www.keyitest.cn/prod-api/upload',
//竞标者要求
applicantlist: [{
label: '个人测试者',
value: '0'
},
{
label: '认证测试公司',
value: '1'
},
{
label: '个人测试者/认证测试公司',
value: '2'
},
],
//驻场要求
onsiteTypelist: [{
label: '无需驻场',
value: '0'
},
{
label: '偶尔驻场',
value: '1'
},
{
label: '定期驻场',
value: '2'
},
],
//任务状态
processStatuslist: [{
label: '竞标中',
value: 0
},
{
label: '竞标成功',
value: 1
},
{
label: '待验收',
value: 3
},
{
label: '确认完成',
value: 4
},
// {label: '没有竞标者,过期下架', value:4},
// {label: '未指定测试者,过期下架', value:5},
// {label: '未上传结果,过期下架', value:6},
// {label: '未确认测试结果,过期下架', value:7},
// {label: '测试结果不合格', value:8},
],
userinform: null,
type: '',
testerdata: {}, //实名认证信息
userprogramme: {}, //当前用户竞标方案
}
},
filters: {
filtersRichText(html) { //控制小程序中图片大小
if (html) {
let newContent = html.replace(/<img[^>]*>/gi, (match, capture) => {
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match;
});
newContent = newContent.replace(/style="[^"]+"/gi, (match, capture) => {
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi,
'max-width:100%;');
return match;
});
// let newContentsss = html.replace(/<span[^>]*>/gi, (match, capture)=>{
// console.log('sss---',match, capture)
// if(capture==12428 || capture==12693){
// match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
// match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
// match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
// }
// return match;
// });
newContent = newContent.replace(/<br[^>]*\/>/gi, '');
newContent = newContent.replace(/\<img/gi,
'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"');
// newContentsss = newContentsss.replace(/\<span/gi,
// '<span style="word-wrap:break-word;width:90vw;display:block;margin:10rpx auto;"');newContentsss;
return newContent;
}
}
},
onShow() {
let Token = uni.getStorageSync('accessToken');
this.userinform = uni.getStorageSync('wxUserInfo');
if (Token && this.userinform) {
console.log('this.userinform---', this.userinform)
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
console.log('实名认证信息onShow---', res)
if (res.data.code == 200) {
this.testerdata = res.data.data
}
})
}
},
onLoad(options) {
this.type = options.type;
if (this.type && this.type == 1) {
uni.setNavigationBarTitle({
title: '我的众包'
});
} else {
uni.setNavigationBarTitle({
title: '任务详情'
});
}
this.userinform = uni.getStorageSync('wxUserInfo');
// if(this.userinform){
// this.http.quickGet(`/crowdsource/applicant/${options.id}`,true).then(res=>{
// console.log('当前任务的竞标列表---',res)
// if(res.data.data.length>0){
// let testerdata=res.data.data
// console.log('testerdata---',testerdata)
// this.userprogramme=testerdata.find(item=>this.userinform.userId==item.applicantId)
// console.log('当前用户竞标方案---',this.userprogramme)
// }
// })
// }
const url = this.userinform && this.userinform.userId ? `?userId=${this.userinform.userId}` : ''
this.http.quickGet(`/crowdsource/detail/${options.id}${url}`, false).then(res => {
this.crowddata = res.data;
this.userprogramme = res.data.user_plan ? res.data.user_plan : {}
let currentis = null
if (this.crowddata.entrants.length > 0) {
this.crowddata.entrants.forEach(item => {
if (this.userinform.userId == item.user_id) {
currentis = item
}
})
}
console.log('众包详情', res.data)
if (currentis) {
// console.log('currentis---',currentis)
this.type = 1
}
})
this.userinform = uni.getStorageSync('wxUserInfo');
if (this.userinform) {
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
if (res.data.code == 200) {
this.testerdata = res.data.data
}
})
}
},
methods: {
findLabelValueByPropnew,
// 公司主页
goCompanyInfo() {
uni.navigateTo({
url: `/pages/index/testcrowdsourc/companyInfo?taskInfo=${encodeURIComponent(JSON.stringify(this.crowddata.task))}`
})
},
//文件上传成功回调
fielUploadSuc(data, index, lists) {
console.log('-', data, '*', index, lists)
if (data.code === 200) {
this.biddingobj.attachment = data.filePath
console.log('竞标附件', this.biddingobj.attachment)
}
},
//移除
deleteUpfile(index, lists) {
console.log('del头像', this.biddingobj.attachment)
this.biddingobj.attachment = ''
},
errorUpfile(data, index) {
},
application() {
this.userinform = uni.getStorageSync('wxUserInfo');
let accessToken = uni.getStorageSync('accessToken');
console.log('open', this.userinform, this.crowddata.task);
if (!accessToken) {
this.tokenshow = true
} else {
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
// console.log('竞标实名认证信息---',res)
if (res.data.code == 200) {
this.testerdata = res.data.data
if (parseInt(this.userinform.userId) == this.crowddata.task.publisher_id) {
uni.showToast({
title: '您是发布者,无法竞标自己发布的任务。',
icon: 'warning',
duration: 2000
});
return;
}
console.log('testerdata.status---', this.testerdata)
if (this.testerdata) {
if (this.testerdata.status != 1) { //不是测试者或认证尚未成功
this.certifshow = true;
} else {
if (this.crowddata.task.applicant_type != 2) { //2是个人测试者或企业测试都都可以
if (this.crowddata.task.applicant_type == 0) { //要求个人测试者
if (this.userinform.companyStatus != 0) {
uni.showToast({
title: '您是认证测试公司或正在申请成为认证测试公司,无法认证该任务,该任务只允许个人测试者竞标。',
icon: 'none',
duration: 1000
});
return;
}
} else { //要求企业测试者
if (this.userinform.companyStatus != 2) {
uni.showToast({
title: '对不起,您是个人测试者,该任务只允许认证测试公司竞标。',
icon: 'none',
duration: 3000
});
return;
}
}
}
this.isPopupShow = true
this.biddingobj = {
taskId: '',
applicantId: '',
period: '',
competitionEdge: '',
attachment: ''
}
}
} else {
this.certifshow = true;
}
}
})
}
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
confirmtt() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
taskconfirm() {
// setTimeout(() => {
// 3秒后自动关闭
// this.totalshow = false;
// 如果不想关闭,而单是清除loading状态,需要通过ref手动调用方法
// this.$refs.uModal.clearLoading();
uni.navigateTo({
url: '/pages/personal/mycrowdtest/mycrowdtest'
})
// }, 1000)
},
//竞标时没有认证的让跳去认证
certifconfirm() {
this.certifshow = false;
uni.navigateTo({
url: '/pages/personal/setup/certification'
})
},
popcilk(type) {
if (type == 'cancel') {
this.isPopupShow = false
} else if (type == 'determine') {
let attachment = '';
console.log('附件', this.biddingobj.attachment)
if (this.biddingobj.attachment.indexOf('https') == 0) {
attachment = this.biddingobj.attachment
} else {
if (this.biddingobj.attachment == '') {
attachment = ''
} else {
attachment = 'https://www.keyitest.cn/prod-api' + this.biddingobj.attachment
}
}
if (!this.biddingobj.period) {
this.$refs.uToast.show({
title: '请输入预算周期',
type: 'info'
})
return;
}
if (!/^[1-9]\d*$/.test(this.biddingobj.period)) {
this.$refs.uToast.show({
title: '周期需填写正整数',
type: 'info'
})
return;
}
if (this.biddingobj.period > 1000) {
this.$refs.uToast.show({
title: '周期最多为1000天',
type: 'info'
})
return;
}
if (!this.biddingobj.competitionEdge) {
this.$refs.uToast.show({
title: '请输入竞标优势',
type: 'info'
})
return;
}
if (this.biddingobj.competitionEdge.length > 2800) {
this.$refs.uToast.show({
title: '最多输入2800字',
type: 'info'
})
return;
}
let data = {
taskId: this.crowddata.task.task_id,
applicantId: this.userinform.userId,
period: parseInt(this.biddingobj.period),
competitionEdge: this.biddingobj.competitionEdge,
attachment,
}
console.log('竞标数据', data)
// return;
this.http.quickPost(`/crowdsource/bidding`, data, true).then(res => {
console.log('竞标结果', res)
// return;
this.isPopupShow = false
if (res.data.data.code == 200) {
this.totalshow = true
// this.$refs.uToast.show({ title: '竞标成功', type: 'success'})
} else {
this.$refs.uToast.show({
title: res.data.msg,
type: 'info'
})
}
// let reuse=parseInt(res.data.data)
// console.log('竞标结果',res.data.data,typeof(res.data.data),typeof(reuse))
// if(reuse){
// if(reuse==1){
// this.$refs.uToast.show({
// title: "该任务竞标者人数已满。",
// type: 'warning',
// duration: 2000,
// })
// }else{
// this.totalshow=true
// }
// }else{
// if(reuse==0){
// this.totalshow=true
// }
// }
})
}
},
// 拨打电话
callingphone(phone) {
uni.makePhoneCall({
// 手机号
phoneNumber: phone,
// 成功回调
success: (res) => {
console.log('调用成功!')
// uni.showToast({
// title: '拨打成功'
// })
},
// 失败回调
fail: (res) => {
console.log('调用失败!')
}
});
},
openurl(url) {
// uni.downloadFile({
// url:url, //仅为示例,并非真实的资源
// success: (res) => {
// if (res.statusCode === 200) {
// console.log('下载成功');
// }
// }
// });
// return;
if (url != '') {
// console.log('999---',url,url.lastIndexOf('https'),url.slice(32))
var index = url.indexOf('https'); // 字符出现的位置
var num = 0; // 这个字符出现的次数
while (index !== -1) {
// console.log(index); // 打印字符串出现的位置
num++; // 每出现一次 次数加一
index = url.indexOf('https', index + 1); // 从字符串出现的位置的下一位置开始继续查找
}
if (num == 1) {
// this.$message.success('下载成功')
// var wxFile = uni.getFileSystemManager()
uni.downloadFile({
url, //仅为示例,并非真实的资源
success: (res) => {
if (res.statusCode === 200) {
// wxFile.saveFile({
// tempFilePath:filePaths,
// //将该文件从临时路径tempFilePath转移到本地文件filePath中,并重新给他起一个文件名
// filePath:`${wx.env.USER_DATA_PATH}/a.docx`,
// })
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
console.log('打开文档成功');
}
});
}
}
});
} else {
console.log('num2---', url.slice(32 * (num - 1)))
// this.$message.success('下载成功')
let uelt = url.slice(32 * (num - 1))
// window.location.href=uelt
uni.downloadFile({
url: url, //仅为示例,并非真实的资源
success: (res) => {
if (res.statusCode === 200) {
// console.log('下载成功');
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
console.log('打开文档成功');
}
});
}
}
});
}
}
},
}
}
</script>
<style>
.ratebox ::v-deep .u-icon {
font-size: 13px !important;
}
.logobg {
width: 100vw;
object-fit: contain;
}
.schedule {
width: 94vw;
margin: 12px 3vw;
background: #FFFFFF;
padding: 25rpx;
border-radius: 10rpx;
}
.tabone {
padding: 6rpx;
color: #FFFFFF;
background: #2286FA;
border-radius: 5rpx;
font-size: 20rpx;
text-align: center;
margin-bottom: 10rpx;
}
.vertical {
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 10rpx;
margin-right: 5px;
}
.submitt {
height: 70px;
font-size: 20px;
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 20px;
}
.success {
width: 130rpx;
height: 40rpx;
background: #21B96C;
border-radius: 22rpx;
font-weight: 500;
font-size: 22rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
.success image {
width: 20rpx;
height: 20rpx;
}
.success1 {
width: 130rpx;
height: 40rpx;
}
.button-g {
width: 280rpx;
height: 80rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 43rpx;
text-align: center;
line-height: 80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left: 13px;
}
/* line-height: 15%; */
.peodi {
/* line-height: 15%; */
margin: 5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size: 36rpx;
font-weight: bold;
}
.poptext {
font-size: 33rpx;
font-weight: 500;
color: #333333;
line-height: 24rpx;
margin-left: 5px;
}
.signst {
display: flex;
flex-direction: column;
align-items: center;
margin: 5px;
}
.signst img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.signst p {
font-size: 11px;
margin-top: 5px;
}
.article-body {
line-height: 26px !important;
/* width: 100%; */
/* color:rgb(17, 16, 16)!important; */
}
.article-body p {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
.article-body>>>span {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
.sinput {
display: flex;
align-items: center;
height: 50px;
padding: 10px 0;
margin: 10px 0 0 0;
}
.sinput img {
width: 20px;
height: 20px;
margin-right: 10px;
}
.sinput .u-input {
width: 75vw;
height: 35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding: 0 10px !important;
}
.sinputrt {
display: flex;
/* align-items: center; */
height: 50px;
padding: 10px 0;
margin: 0px 0 70px 0;
}
.sinputrt img {
width: 20px;
height: 20px;
margin-right: 10px;
}
.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 {
/* width:75vw;
height: 45px;
display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx;
border: 1px solid #C2C2C2;
zIndex:99; */
width: 80px;
height: 80px;
background: #FFFFFF;
border-radius: 4rpx;
border: 1px solid #E6E6E6;
line-height: 80px;
text-align: center;
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.u-list-item {
margin: 0 !important;
background: transparent !important;
color: #000000 !important;
width: 100px !important;
height: 28px !important;
zIndex: 0 !important;
border-radius: 0 !important;
border: none !important;
}
/* .u-list-item :before {
content: "已上传";
position: absolute;
left: 7px;
} */
</style>