庞东旭 2 лет назад
Родитель
Сommit
5d8a59692a
9 измененных файлов: 484 добавлений и 5 удалений
  1. +45
    -0
      src/api/notice/index.js
  2. +4
    -0
      src/permission.js
  3. +27
    -0
      src/router/index.js
  4. +84
    -2
      src/views/notice/index.vue
  5. +111
    -0
      src/views/notice/inviteTendersDetail.vue
  6. +78
    -0
      src/views/notice/winTheBiddingDetail.vue
  7. +2
    -2
      src/views/project/index.vue
  8. +18
    -1
      src/views/project/projectDetail.vue
  9. +115
    -0
      src/views/project/projectNeedsDetail.vue

+ 45
- 0
src/api/notice/index.js Просмотреть файл

@@ -33,3 +33,48 @@ export function AttestationDetail(id) {
method: 'get' 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
})
}

+ 4
- 0
src/permission.js Просмотреть файл

@@ -16,6 +16,10 @@ const whiteList = [
'/news/index', '/news/index',
'/news/newDetail', '/news/newDetail',
'/notice/index', '/notice/index',
'/notice/inviteTendersDetail',
'/notice/winTheBiddingDetail',
'/project/projectNeedsDetail',

'/supply/index', '/supply/index',
'/interaction/index', '/interaction/index',
'/register/index', '/register/index',


+ 27
- 0
src/router/index.js Просмотреть файл

@@ -111,6 +111,33 @@ export const constantRoutes = [
}, },
component: (resolve) => require(['@/views/project/projectDetail'], resolve) 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', path: '/news/index',
name: 'news', name: 'news',


+ 84
- 2
src/views/notice/index.vue Просмотреть файл

@@ -24,7 +24,7 @@
</van-cell> </van-cell>
</van-list> </van-list>
</van-tab> </van-tab>
<van-tab title="选项">
<van-tab>
<template #title><van-icon name="records" size="18" style="top: 4px"/>鉴证公告</template> <template #title><van-icon name="records" size="18" style="top: 4px"/>鉴证公告</template>
<van-list <van-list
v-model="attestationLoading" v-model="attestationLoading"
@@ -40,12 +40,44 @@
</van-cell> </van-cell>
</van-list> </van-list>
</van-tab> </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> </van-tabs>
</div> </div>
</template> </template>


<script> <script>
import { noticeList , Attestation } from "@/api/notice/index";
import { noticeList , Attestation , tenderList , winList } from "@/api/notice/index";
export default { export default {
name: "notice", name: "notice",
data() { data() {
@@ -58,8 +90,20 @@ export default {
attestationLoading: false, attestationLoading: false,
//是否滚动到底部 //是否滚动到底部
attestationFinished: false, attestationFinished: false,
//是否显示加载
inviteTendersLoading: false,
//是否滚动到底部
inviteTendersFinished: false,
//是否显示加载
winTheBiddingLoading: false,
//是否滚动到底部
winTheBiddingFinished: false,
//成交公告集合 //成交公告集合
noticeList:[], noticeList:[],
//招标公告集合
inviteTendersList:[],
//中标公告集合
winTheBiddingList:[],
//鉴证公告集合 //鉴证公告集合
attestationList:[], attestationList:[],
//成交公告查询参数 //成交公告查询参数
@@ -68,6 +112,18 @@ export default {
pageNum:1, pageNum:1,
pageSize:10 pageSize:10
}, },
//招标公告查询参数
inviteTendersQueryParams: {
deptId:100,
pageNum:1,
pageSize:10
},
//招标公告查询参数
winTheBiddingQueryParams: {
deptId:100,
pageNum:1,
pageSize:10
},
//鉴证公告查询参数 //鉴证公告查询参数
attestationQueryParams: { attestationQueryParams: {
deptId:100, deptId:100,
@@ -107,6 +163,32 @@ export default {
this.attestationLoading = false; 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> </script>


+ 111
- 0
src/views/notice/inviteTendersDetail.vue Просмотреть файл

@@ -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>

+ 78
- 0
src/views/notice/winTheBiddingDetail.vue Просмотреть файл

@@ -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>

+ 2
- 2
src/views/project/index.vue Просмотреть файл

@@ -50,10 +50,10 @@
</van-dropdown-item> </van-dropdown-item>
</van-dropdown-menu> </van-dropdown-menu>
<van-list v-model="loading1" :finished="finished1" @load="getNeedProjectList" finished-text="没有更多了"> <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'" > <van-card :thumb="item.fileUrl?'/api'+item.fileUrl:'../../static/images/zwtpxw.jpg'" >
<template #tags> <template #tags>
<p class="title">{{item.projectName}}</p>
<p class="title">{{ item.projectName }}</p>
<p class="type">{{ item.needname }}</p> <p class="type">{{ item.needname }}</p>
<p class="timeEnd">需求开始时间 {{ item.needStartTime }}</p> <p class="timeEnd">需求开始时间 {{ item.needStartTime }}</p>
<p class="timeEnd">需求结束时间 {{ item.needStopTime }}</p> <p class="timeEnd">需求结束时间 {{ item.needStopTime }}</p>


+ 18
- 1
src/views/project/projectDetail.vue Просмотреть файл

@@ -67,11 +67,14 @@
<van-row> <van-row>
<van-col span="24"><span>竞价方式:</span>{{ detail.biddingType }}</van-col> <van-col span="24"><span>竞价方式:</span>{{ detail.biddingType }}</van-col>
</van-row> </van-row>
<van-row>
<van-col span="24"><span>竞价方向:</span>{{ detail.biddingDirect }}</van-col>
</van-row>
<van-row> <van-row>
<van-col span="24"><span>阶梯价(加价幅度):</span>{{ detail.ladderPrice }}</van-col> <van-col span="24"><span>阶梯价(加价幅度):</span>{{ detail.ladderPrice }}</van-col>
</van-row> </van-row>
<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> </van-row>
</div> </div>
</van-tab> </van-tab>
@@ -336,6 +339,9 @@ export default {
this.getDicts("bidding_type").then(res => { this.getDicts("bidding_type").then(res => {
this.detail.biddingType = this.selectDictLabel(res.data,response.data.biddingType); 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){ for(let i of this.detail.subjectList){
this.getDicts("area_unit").then(res => { this.getDicts("area_unit").then(res => {
i.areaUnit = this.selectDictLabel(res.data,i.areaUnit); i.areaUnit = this.selectDictLabel(res.data,i.areaUnit);
@@ -346,6 +352,12 @@ export default {
let signupStartTime = Date.parse(this.detail.signupStartTime)+0 let signupStartTime = Date.parse(this.detail.signupStartTime)+0
let signupStopTime = Date.parse(this.detail.signupStopTime)+0 let signupStopTime = Date.parse(this.detail.signupStopTime)+0
let nowDate = Date.parse(new Date()); 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){ if(signupStartTime>nowDate){
this.process= "报名未开始" this.process= "报名未开始"
this.tip=this.detail.signupStartTime+"开始报名" this.tip=this.detail.signupStartTime+"开始报名"
@@ -474,6 +486,11 @@ export default {
}) })
}, },
add(){ 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 this.detail.ladderPrice?this.price=this.price+this.detail.ladderPrice:this.price+=1
}, },
sub(){ sub(){


+ 115
- 0
src/views/project/projectNeedsDetail.vue Просмотреть файл

@@ -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>

Загрузка…
Отмена
Сохранить