@@ -33,3 +33,48 @@ export function AttestationDetail(id) { | |||
method: 'get' | |||
}) | |||
} | |||
//鉴证公告 | |||
export function needProject(id,query) { | |||
return request({ | |||
url: '/transaction/website/needProject/'+id, | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
//招标公告 | |||
export function tenderList(query) { | |||
return request({ | |||
url: '/transaction/website/tender/publicity', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
//中标公告 | |||
export function winList(query) { | |||
return request({ | |||
url: '/transaction/website/win/publicity', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
//招标公告详情 | |||
export function tenderDetail(id,query) { | |||
return request({ | |||
url: '/transaction/website/tender/'+id, | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
//中标公告详情 | |||
export function tenderWinDetail(id,query) { | |||
return request({ | |||
url: '/transaction/website/tenderWin/'+id, | |||
method: 'get', | |||
params: query | |||
}) | |||
} |
@@ -16,6 +16,10 @@ const whiteList = [ | |||
'/news/index', | |||
'/news/newDetail', | |||
'/notice/index', | |||
'/notice/inviteTendersDetail', | |||
'/notice/winTheBiddingDetail', | |||
'/project/projectNeedsDetail', | |||
'/supply/index', | |||
'/interaction/index', | |||
'/register/index', | |||
@@ -111,6 +111,33 @@ export const constantRoutes = [ | |||
}, | |||
component: (resolve) => require(['@/views/project/projectDetail'], resolve) | |||
}, | |||
{ | |||
path: '/project/projectNeedsDetail', | |||
name: 'projectNeedsDetail', | |||
meta: { | |||
title: '需求项目', | |||
hidden: true | |||
}, | |||
component: (resolve) => require(['@/views/project/projectNeedsDetail'], resolve) | |||
}, | |||
{ | |||
path: '/notice/inviteTendersDetail', | |||
name: 'inviteTendersDetail', | |||
meta: { | |||
title: '招标公告', | |||
hidden: true | |||
}, | |||
component: (resolve) => require(['@/views/notice/inviteTendersDetail'], resolve) | |||
}, | |||
{ | |||
path: '/notice/winTheBiddingDetail', | |||
name: 'winTheBiddingDetail', | |||
meta: { | |||
title: '中标公告', | |||
hidden: true | |||
}, | |||
component: (resolve) => require(['@/views/notice/winTheBiddingDetail'], resolve) | |||
}, | |||
{ | |||
path: '/news/index', | |||
name: 'news', | |||
@@ -24,7 +24,7 @@ | |||
</van-cell> | |||
</van-list> | |||
</van-tab> | |||
<van-tab title="选项"> | |||
<van-tab> | |||
<template #title><van-icon name="records" size="18" style="top: 4px"/>鉴证公告</template> | |||
<van-list | |||
v-model="attestationLoading" | |||
@@ -40,12 +40,44 @@ | |||
</van-cell> | |||
</van-list> | |||
</van-tab> | |||
<van-tab> | |||
<template #title><van-icon name="description" size="18" style="top: 4px"/>招标公告</template> | |||
<van-list | |||
v-model="inviteTendersLoading" | |||
:finished="inviteTendersFinished" | |||
finished-text="没有更多了" | |||
style="margin-top: 10px;" | |||
@load="getinviteTendersList" | |||
> | |||
<van-cell v-for="(item,index) in inviteTendersList" :key="index" icon="play" :title="item.projectName" :to="{name:'inviteTendersDetail', query: {id:item.id}}"> | |||
<template #label> | |||
招标方:{{item.tenderName}} <p style="float: right;">{{item.logintime}}</p> | |||
</template> | |||
</van-cell> | |||
</van-list> | |||
</van-tab> | |||
<van-tab> | |||
<template #title><van-icon name="completed" size="18" style="top: 4px"/>中标公告</template> | |||
<van-list | |||
v-model="winTheBiddingLoading" | |||
:finished="winTheBiddingFinished" | |||
finished-text="没有更多了" | |||
style="margin-top: 10px;" | |||
@load="getwinTheBiddingList" | |||
> | |||
<van-cell v-for="(item,index) in winTheBiddingList" :key="index" icon="play" :title="item.projectName" :to="{name:'winTheBiddingDetail', query: {id:item.id}}"> | |||
<template #label> | |||
招标方:{{item.tenderName}} <p style="float: right;">{{item.dealTime}}</p> | |||
</template> | |||
</van-cell> | |||
</van-list> | |||
</van-tab> | |||
</van-tabs> | |||
</div> | |||
</template> | |||
<script> | |||
import { noticeList , Attestation } from "@/api/notice/index"; | |||
import { noticeList , Attestation , tenderList , winList } from "@/api/notice/index"; | |||
export default { | |||
name: "notice", | |||
data() { | |||
@@ -58,8 +90,20 @@ export default { | |||
attestationLoading: false, | |||
//是否滚动到底部 | |||
attestationFinished: false, | |||
//是否显示加载 | |||
inviteTendersLoading: false, | |||
//是否滚动到底部 | |||
inviteTendersFinished: false, | |||
//是否显示加载 | |||
winTheBiddingLoading: false, | |||
//是否滚动到底部 | |||
winTheBiddingFinished: false, | |||
//成交公告集合 | |||
noticeList:[], | |||
//招标公告集合 | |||
inviteTendersList:[], | |||
//中标公告集合 | |||
winTheBiddingList:[], | |||
//鉴证公告集合 | |||
attestationList:[], | |||
//成交公告查询参数 | |||
@@ -68,6 +112,18 @@ export default { | |||
pageNum:1, | |||
pageSize:10 | |||
}, | |||
//招标公告查询参数 | |||
inviteTendersQueryParams: { | |||
deptId:100, | |||
pageNum:1, | |||
pageSize:10 | |||
}, | |||
//招标公告查询参数 | |||
winTheBiddingQueryParams: { | |||
deptId:100, | |||
pageNum:1, | |||
pageSize:10 | |||
}, | |||
//鉴证公告查询参数 | |||
attestationQueryParams: { | |||
deptId:100, | |||
@@ -107,6 +163,32 @@ export default { | |||
this.attestationLoading = false; | |||
}); | |||
}, | |||
//招标公告集合 | |||
getinviteTendersList(){ | |||
this.inviteTendersLoading = true; | |||
tenderList(this.inviteTendersQueryParams).then(response => { | |||
this.inviteTendersList = response.rows; | |||
if(this.inviteTendersList.length >= response.total){ | |||
this.inviteTendersFinished = true; | |||
return; | |||
} | |||
this.inviteTendersQueryParams.pageNum += 1 ; | |||
this.inviteTendersLoading = false; | |||
}); | |||
}, | |||
//招标公告集合 | |||
getwinTheBiddingList(){ | |||
this.winTheBiddingLoading = true; | |||
winList(this.winTheBiddingQueryParams).then(response => { | |||
this.winTheBiddingList = response.rows; | |||
if(this.winTheBiddingList.length >= response.total){ | |||
this.winTheBiddingFinished = true; | |||
return; | |||
} | |||
this.winTheBiddingQueryParams.pageNum += 1 ; | |||
this.winTheBiddingLoading = false; | |||
}); | |||
}, | |||
}, | |||
}; | |||
</script> | |||
@@ -0,0 +1,111 @@ | |||
<template> | |||
<div class="app-container"> | |||
<van-nav-bar | |||
title="招标公告" | |||
left-arrow | |||
fixed | |||
placeholder | |||
@click-left="onClickLeft" | |||
/> | |||
<p class="title">{{attestationDetail.projectName}}</p> | |||
<van-row> | |||
<van-col>招标方名称:{{attestationDetail.tenderName}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>资金来源:{{attestationDetail.moneySource}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标代理公司:{{attestationDetail.agentName}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>联系人:{{attestationDetail.linkman}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>联系电话:{{attestationDetail.linkphone}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>联系地址:{{attestationDetail.linkaddress}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标方意见:{{attestationDetail.tenderOpinion}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>代理公司意见:{{attestationDetail.agentOpinion}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>建设地点:{{attestationDetail.address}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>建设工期:{{attestationDetail.timeLimit}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>项目规模:{{attestationDetail.scale}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标内容:{{attestationDetail.tenderContent}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>投标人要求:{{attestationDetail.condition}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>保证金:{{attestationDetail.deposit}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标文件价格(元):{{attestationDetail.price}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标发布日期:{{attestationDetail.logintime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标书领取开始日期:{{attestationDetail.startTime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>招标书领取结束日期:{{attestationDetail.stopTime}}</van-col> | |||
</van-row> | |||
</div> | |||
</template> | |||
<script> | |||
import { tenderDetail } from "@/api/notice/index"; | |||
export default { | |||
name: "noticeDetail", | |||
data() { | |||
return { | |||
attestationDetail:'' | |||
}; | |||
}, | |||
created() { | |||
this.getDetail(); | |||
}, | |||
methods: { | |||
//成交公告集合 | |||
getDetail(){ | |||
tenderDetail(this.$route.query.id,{translate_dict:1}).then(response => { | |||
this.attestationDetail = response.data; | |||
// //公司性质字典 | |||
// this.getDicts("company_nature").then(res => { | |||
// this.attestationDetail.companyNature = this.selectDictLabel(res.data,response.data.companyNature); | |||
// }); | |||
}); | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style scoped lang="scss"> | |||
.app-container { | |||
padding: 0.5rem 5%; | |||
} | |||
.title{ | |||
font-size: 0.5rem; | |||
margin-bottom: 0.5rem; | |||
} | |||
.van-row{ | |||
margin-bottom: 0.4rem; | |||
} | |||
.van-col{ | |||
font-size: 0.4rem; | |||
color: #666666; | |||
} | |||
</style> |
@@ -0,0 +1,78 @@ | |||
<template> | |||
<div class="app-container"> | |||
<van-nav-bar | |||
title="中标公告" | |||
left-arrow | |||
fixed | |||
placeholder | |||
@click-left="onClickLeft" | |||
/> | |||
<p class="title">{{attestationDetail.projectName}}</p> | |||
<van-row> | |||
<van-col>招标方名称:{{attestationDetail.tenderName}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>中标人:{{attestationDetail.assignee}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>建设单位:{{attestationDetail.bulidPart}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>项目负责人:{{attestationDetail.partLinkman}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>中标价格:{{attestationDetail.transactionPrice}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>中标日期:{{attestationDetail.dealTime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>公示开始日期:{{attestationDetail.startTime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>公示结束日期:{{attestationDetail.stopTime}}</van-col> | |||
</van-row> | |||
</div> | |||
</template> | |||
<script> | |||
import { tenderWinDetail } from "@/api/notice/index"; | |||
export default { | |||
name: "noticeDetail", | |||
data() { | |||
return { | |||
attestationDetail:'' | |||
}; | |||
}, | |||
created() { | |||
this.getDetail(); | |||
}, | |||
methods: { | |||
//成交公告集合 | |||
getDetail(){ | |||
console.log(this.$route.query.id) | |||
tenderWinDetail(this.$route.query.id,{translate_dict:1}).then(response => { | |||
this.attestationDetail = response.data; | |||
}); | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style scoped lang="scss"> | |||
.app-container { | |||
padding: 0.5rem 5%; | |||
} | |||
.title{ | |||
font-size: 0.5rem; | |||
margin-bottom: 0.5rem; | |||
} | |||
.van-row{ | |||
margin-bottom: 0.4rem; | |||
} | |||
.van-col{ | |||
font-size: 0.4rem; | |||
color: #666666; | |||
} | |||
</style> |
@@ -50,10 +50,10 @@ | |||
</van-dropdown-item> | |||
</van-dropdown-menu> | |||
<van-list v-model="loading1" :finished="finished1" @load="getNeedProjectList" finished-text="没有更多了"> | |||
<router-link :to="{path:'project/projectDetail',query:{id:item.id}}" v-for="(item,index) in infoList1" :key="index"> | |||
<router-link :to="{path:'project/projectNeedsDetail',query:{id:item.id}}" v-for="(item,index) in infoList1" :key="index"> | |||
<van-card :thumb="item.fileUrl?'/api'+item.fileUrl:'../../static/images/zwtpxw.jpg'" > | |||
<template #tags> | |||
<p class="title">{{item.projectName}}</p> | |||
<p class="title">{{ item.projectName }}</p> | |||
<p class="type">{{ item.needname }}</p> | |||
<p class="timeEnd">需求开始时间 {{ item.needStartTime }}</p> | |||
<p class="timeEnd">需求结束时间 {{ item.needStopTime }}</p> | |||
@@ -67,11 +67,14 @@ | |||
<van-row> | |||
<van-col span="24"><span>竞价方式:</span>{{ detail.biddingType }}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col span="24"><span>竞价方向:</span>{{ detail.biddingDirect }}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col span="24"><span>阶梯价(加价幅度):</span>{{ detail.ladderPrice }}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col span="24"><span>延时周期:</span>2分钟报名<van-icon name="question" size="15" style="top: 3px;left: 5px;" color="#CDCDCD"/></van-col> | |||
<van-col span="24"><span>延时周期:</span>2分钟<van-icon name="question" size="15" style="top: 3px;left: 5px;" color="#CDCDCD"/></van-col> | |||
</van-row> | |||
</div> | |||
</van-tab> | |||
@@ -336,6 +339,9 @@ export default { | |||
this.getDicts("bidding_type").then(res => { | |||
this.detail.biddingType = this.selectDictLabel(res.data,response.data.biddingType); | |||
}); | |||
this.getDicts("bidding_direct").then(res => { | |||
this.detail.biddingDirect = this.selectDictLabel(res.data,response.data.biddingDirect); | |||
}); | |||
for(let i of this.detail.subjectList){ | |||
this.getDicts("area_unit").then(res => { | |||
i.areaUnit = this.selectDictLabel(res.data,i.areaUnit); | |||
@@ -346,6 +352,12 @@ export default { | |||
let signupStartTime = Date.parse(this.detail.signupStartTime)+0 | |||
let signupStopTime = Date.parse(this.detail.signupStopTime)+0 | |||
let nowDate = Date.parse(new Date()); | |||
console.log('biddingStartTime'+biddingStartTime) | |||
console.log('biddingStopTime'+biddingStopTime) | |||
console.log('signupStartTime'+signupStartTime) | |||
console.log('signupStopTime'+signupStopTime) | |||
if(signupStartTime>nowDate){ | |||
this.process= "报名未开始" | |||
this.tip=this.detail.signupStartTime+"开始报名" | |||
@@ -474,6 +486,11 @@ export default { | |||
}) | |||
}, | |||
add(){ | |||
if (this.detail.biddingDirect == '反向竞价'){ | |||
if(this.detail.price<this.price){ | |||
return; | |||
} | |||
} | |||
this.detail.ladderPrice?this.price=this.price+this.detail.ladderPrice:this.price+=1 | |||
}, | |||
sub(){ | |||
@@ -0,0 +1,115 @@ | |||
<template> | |||
<div class="app-container"> | |||
<van-nav-bar | |||
title="需求项目" | |||
left-arrow | |||
fixed | |||
placeholder | |||
@click-left="onClickLeft" | |||
/> | |||
<p class="title">{{noticeDetail.projectName}}</p> | |||
<van-row> | |||
<van-col>需求项目类别:{{noticeDetail.projectNumber}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>需求价格描述:{{noticeDetail.price}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>需求方名称:{{noticeDetail.needname}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>需求方地址:{{noticeDetail.address}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>单位性质:{{noticeDetail.company}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>单位法人:{{noticeDetail.legalPerson}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>联系人:{{noticeDetail.realname}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>联系电话:{{noticeDetail.phone}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>身份证号:{{noticeDetail.idCardNum}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>邮箱:{{noticeDetail.email}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>需求开始时间:{{noticeDetail.needStartTime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>需求结束时间:{{noticeDetail.needStopTime}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>用途与经营描述:{{noticeDetail.description}}</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col>附件图片:</van-col> | |||
</van-row> | |||
<van-row> | |||
<van-col><img :src="'/api'+item.fileUrl" v-for="(item , index) in noticeDetail.attachments" alt="" width="100%"></van-col> | |||
</van-row> | |||
</div> | |||
</template> | |||
<script> | |||
import { needProject } from "@/api/notice/index"; | |||
export default { | |||
name: "noticeDetail", | |||
data() { | |||
return { | |||
noticeDetail:'' | |||
}; | |||
}, | |||
created() { | |||
this.getDetail(); | |||
}, | |||
methods: { | |||
//成交公告集合 | |||
getDetail(){ | |||
needProject(this.$route.query.id,{translate_dict:1}).then(response => { | |||
this.noticeDetail = response.data; | |||
//转出方式字典 | |||
// this.getDicts("rollout_type").then(res => { | |||
// this.noticeDetail.rollout = this.selectDictLabel(res.data,response.data.rollout); | |||
// }); | |||
// //交易方式字典 | |||
// this.getDicts("deal_type").then(res => { | |||
// this.noticeDetail.dealType = this.selectDictLabel(res.data,response.data.dealType); | |||
// }); | |||
// //面积单位字典 | |||
// this.getDicts("area_unit").then(res => { | |||
// this.noticeDetail.allCountUnit = this.selectDictLabel(res.data,response.data.allCountUnit); | |||
// }); | |||
// //成交价格字典 | |||
// this.getDicts("price_unit").then(res => { | |||
// this.noticeDetail.unit = this.selectDictLabel(res.data,response.data.unit); | |||
// }); | |||
}); | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style scoped lang="scss"> | |||
.app-container { | |||
padding: 0.5rem 5%; | |||
} | |||
.title{ | |||
font-size: 0.5rem; | |||
margin-bottom: 0.5rem; | |||
} | |||
.van-row{ | |||
margin-bottom: 0.4rem; | |||
} | |||
.van-col{ | |||
font-size: 0.4rem; | |||
color: #666666; | |||
} | |||
</style> |