Browse Source

产权交易

rongxin_prod
庞东旭 2 years ago
parent
commit
5d8a59692a
9 changed files with 484 additions and 5 deletions
  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 View File

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

+ 4
- 0
src/permission.js View File

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

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


+ 27
- 0
src/router/index.js View File

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


+ 84
- 2
src/views/notice/index.vue View File

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


+ 111
- 0
src/views/notice/inviteTendersDetail.vue View File

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

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

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


+ 18
- 1
src/views/project/projectDetail.vue View File

@@ -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(){


+ 115
- 0
src/views/project/projectNeedsDetail.vue View File

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

Loading…
Cancel
Save