Commit 13079aac authored by 张冬's avatar 张冬

更新

parent c3742962
......@@ -103,4 +103,12 @@ export function simpleList(params) {
method: 'get',
params:params
})
}
// 询价商品清单列表接口
export function commoditylist(projectId) {
return request({
url:`bidder-apply/commodity/list/${projectId}`,
method: 'get'
})
}
\ No newline at end of file
......@@ -238,6 +238,13 @@ export function bidFaileddetail(projectId) {
method: 'get',
})
}
// 开标大厅消息记录
export function messageRecord(projectId) {
return request({
url: `open-bid/messageRecord/${projectId}`,
method: 'get',
})
}
// 2.1.5
// 评标管理:变更公告列表
......
......@@ -274,3 +274,11 @@ export function openBidsign(projectId) {
method: 'get',
})
}
// 开标大厅三个截止时间
export function opentimeInfo(projectId) {
return request({
url: `open-bid/timeInfo/${projectId}`,
method: 'get',
})
}
......@@ -93,14 +93,15 @@ export default {
}
},
join(){
// window.location.href="http://192.168.200.201:8081/"
window.location.href=" http://localhost:3000/"
window.location.href="http://192.168.200.201:8081/"
// window.location.href=" http://localhost:3000/"
},
// 用户名下拉菜单选择事件
handleCommand(command) {
localStorage.removeItem("token")
setTimeout(()=>{
window.location.href=" http://localhost:3000/"
window.location.href=" http://192.168.200.201:8081"
// window.location.href=" http://localhost:3000/"
},1000)
},
......
......@@ -4,26 +4,34 @@
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<div class="message">
<div class="flex-between">
<div>项目编号: 45670850050</div>
<div>项目名称:测试4567890</div>
<div>项目编号: {{projectCode}}</div>
<div>项目名称:{{projectName}}</div>
</div>
<div class="flex">
<div>
<div>开标一览表:</div>
<ul class="flex-item upload">
<div>开标一览表.xls</div>
<button>下载</button>
</ul>
<dataTable :tableData="tableData" :columns="nopagecolumns" :margin-top="0" :margin-bottom="0">
</dataTable>
</div>
</div>
<changeNav :navs="navs" @getIndex="getIndex"></changeNav>
<!-- 开标大厅消息 -->
<div v-show="changeIndex==0">
<dataTable :table-data="tableData1" :columns="columns1" :is-pageobj="false" :is-index="true">
<dataTable :table-data="behaviorList" :columns="behavior" :is-pageobj="false" :is-index="true">
<el-table-column slot="operate" label="消息内容" align="center" >
<template slot-scope="scope">
<div class="flex content">
<div>{{scope.row.time}}</div>
<div>{{scope.row.role}}</div>
<div>{{scope.row.name}}</div>
<div>{{scope.row.behavior}}</div>
</div>
</template>
</el-table-column>
</dataTable>
</div>
<!-- 对话消息 -->
<div v-show="changeIndex==1">
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false" :is-index="true">
<dataTable :table-data="chatList" :columns="chat" :is-pageobj="false" :is-index="true">
</dataTable>
</div>
</div>
......@@ -31,7 +39,8 @@
</template>
<script>
import dataTable from '@components/dataTable.vue'
import { messageRecord,openInfolist} from '@api/purchaser/bid'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
......@@ -42,54 +51,41 @@ export default {
},
data() {
return {
nopagecolumns: [{
label: '投标人名称',
prop: 'companyName'
},
{
label: '投标报价(元)',
prop: 'price'
},
{
label: '是否签名',
prop: 'isSign',
},
], //
changeIndex: '0',
navs: ['开标大厅消息', '对话消息'],
breads: ['招标管理', '招标项目管理', '工作台'],
tableData: [{
name: '发送人',
data: '2017-10-01 12:00',
content: '米西米西密西'
},
{
name: '发送人',
data: '2017-10-01 12:00',
content: '米西米西密西'
},
{
name: '发送人',
data: '2017-10-01 12:00',
content: '米西米西密西'
}
],
columns: [{
behaviorList: [],
behavior: [
{
slot: 'operate'
}
], // 操作列
chat: [{
label: '发送人',
prop: 'name'
},
{
label: '发送时间',
prop: 'data'
prop: 'time'
},
{
label: '发送内容',
prop: 'content'
}
], // 操作列
columns1: [{
label: '消息内容',
prop: 'content',
align: 'left'
prop: 'chatContent'
}],
tableData1: [{
content: '17:56:56 招标人 谢天项目经理 进入开标大厅'
},
{
content: '17:56:56 开标人确认可开标,解密开始,请投标人解密'
},
{
content: '17:56:56 投标人 测试1 进入开标大厅'
}
],
chatList:[],
pageObj: {
size: 10,
total: 1,
......@@ -98,7 +94,10 @@ export default {
func: (currentPage) => {
this.pageTurning(currentPage)
}
}
},
projectCode:"",
projectName:"",
tableData:[]
}
},
methods: {
......@@ -107,12 +106,51 @@ export default {
},
getIndex(val) {
this.changeIndex = val
}
},
async getmessageRecord() {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await messageRecord(projectId)
this.behaviorList=data.behaviorList;
this.chatList=data.chatList;
},
async getopenInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await openInfo(projectId)
if (code == 200) {
for (let item of data) {
if (item.isSign) {
item.isSign = "是"
} else {
item.isSign = "否"
}
}
this.tableData = data
}
} catch (e) {
console.log(e)
}
},
},
created() {
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getmessageRecord()
this.getopenInfo()
}
}
</script>
<style scoped>
.content>div{
margin-right: 10px;
}
.upload>button {
border: 1px solid #000000;
background: #fff;
......@@ -126,7 +164,7 @@ export default {
}
.message {
width: 50%;
margin: 30px 0 30px 50px;
}
</style>
......@@ -30,7 +30,7 @@
</div>
<div class="hal-center">
<ul>
<li v-for="(item,index) in halList" :key="index" class="flex">
<li v-for="(item,index) in halList" :key="index" class="flex-item">
<div>{{item.time}}</div>
<div>{{item.name}}</div>
<div>{{item.behavior}}</div>
......@@ -38,7 +38,7 @@
</ul>
</div>
<div class="hal-right">
<el-button @click=isdialogue>在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<el-button @click="isdialogue">在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<div class="button-pos">
<el-button v-if="openbidButton" type="primary" @click="confirm" style="margin-left: 10px;">立即开标</el-button>
<!-- <el-button v-else type="info" style="margin-left: 10px;">{{ buttonWords }}</el-button> -->
......@@ -416,7 +416,7 @@
const {
data,
code
} = await openInfo(projectId)
} = await c(projectId)
if (code == 200) {
for (let item of data) {
if (item.isSign) {
......@@ -499,9 +499,9 @@
},
// websocket
createWebSocket() {
let token = localStorage.getItem("token")
let token=localStorage.getItem("token")
let projectId = localStorage.getItem("projectId")
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId)
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
// 连接成功时
this.websocket.onopen = () => {}
this.websocket.onmessage = event => {
......
<template>
<template>
<div>
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<div class="set">
<div class="flex-between">
<div>项目编号:456789034567890-</div>
<div>项目名称:测试4567890</div>
<div>项目编号:{{projectCode}}</div>
<div>项目名称:{{projectName}}</div>
</div>
<div class="flex-between">
<div>开标时间:2020-08-08 18:08:00</div>
......@@ -16,10 +16,10 @@
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<div class="flex-between">
<el-form-item label="解密时限" prop="decodeTime">
<el-input v-model="ruleForm.decodeTime" style="width: 250px;" type="number" placeholder="请输入分钟数"></el-input>
<el-input v-model="ruleForm.decodeTime" style="width: 250px;" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入分钟数"></el-input>
</el-form-item>
<el-form-item label="签名时限" prop="signatureTime">
<el-input v-model="ruleForm.signatureTime" style="width: 250px;" type="number" placeholder="请输入分钟数"></el-input>
<el-input v-model="ruleForm.signatureTime" style="width: 250px;" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入分钟数"></el-input>
</el-form-item>
</div>
<div>
......@@ -99,10 +99,14 @@ export default {
}]
},
navs: ['开标设置'],
breads: ['招标管理', '招标项目管理', '工作台']
breads: ['招标管理', '招标项目管理', '工作台'],
projectCode:"",
projectName:""
}
},
created() {
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getopener()
this.getmamager()
},
......
......@@ -19,7 +19,7 @@
<singleUpload :limit="5" tip="最多上传5个文件,每个文件不超过100M。" @input="getfile"></singleUpload>
</el-form-item>
<el-form-item label="公告内容" prop="content">
<quill-editor ref="text" v-model="ruleForm.content" :options="editorOption" class="myQuillEditor" />
<quill-editor ref="text" v-model.trim="ruleForm.content" :options="editorOption" class="myQuillEditor" />
</el-form-item>
</el-form>
<div class="centerButton">
......
......@@ -14,7 +14,7 @@
</div>
<div class="flex-item clear-item">
<div><span>*</span>澄清问题内容:</div>
<div>{{ question.content }}</div>
<div v-html="question.content"></div>
</div>
<div v-if="question.accessoryList" class="flex-between">
<div><span>*</span>澄清问题附件:</div>
......
<template>
<div >
<div class="content-head">
<breadCrumb :breads = "breads"></breadCrumb>
<h3>查看询价公告</h3>
<h5>查看询价公告</h5>
</div>
<div class="home">
<h1>苍南县公安局关于督查视频服务器5台在线询价公告</h1>
<div class="flex-center">
<h6 style="margin-right:60px;margin-top:30px">询价所在地:苍南县</h6>
<h6 style="margin-buttom:60px;margin-top:30px">日期:2020-08-03</h6>
</div>
<div class="form">
<h3 style="margin-buttom:30px">基本信息</h3>
<table border="0" width="100%" height="120px">
<tr>
<td>询价单编号</td>
<td>32020080349638311</td>
<td>采购记录</td>
<td>服务器*</td>
<td>项目优先级</td>
<td>非紧急</td>
</tr>
<tr>
<td>报价开始时间</td>
<td>2020-08-03 10:28:39</td>
<td>报价截止时间</td>
<td>2020-08-06 15:00:00</td>
<td>采购单位</td>
<td>苍南县公安局</td>
</tr>
<tr>
<td>采购单位联系人</td>
<td>王荔荣</td>
<td>联系方式</td>
<td>13706628929</td>
<td>传真号码</td>
<td>0577-68710076</td>
</tr>
</table>
<div class="appendix ">
<div>预算金额(元)</div>
<div>435000.00</div>
</div>
<div class="appendix ">
<div>成交规则及确认方式</div>
<div>自动成交</div>
</div>
<h3 >供应商要求 </h3>
<div class="appendix ">
<div>供应商规模要求</div>
<div>阿里巴巴</div>
</div>
<div class="appendix ">
<div>供应商资格要求</div>
<div>自动成交</div>
</div>
<div class="appendix ">
<div>供应商区域范围要求</div>
<div>浙江省</div>
</div>
<h3>询价商品清单</h3>
<dataTable :table-data="tabledata" :columns = "columns"></dataTable>
<div class="appendix list pos">
<div >附件</div>
<div>IMG_0208.jpg</div><!-- 此处放文件 -->
</div>
<h3>商务要求</h3>
<div class="appendix bus-require pos">
<div class="flex-center">
<p>商务要求</p>
</div>
<div>1、 本次招标内容为开平碉楼与村落保护规划服务(具体详见技术要求)。投标人不得将本项目中的内容拆散来投标。 2、 投标人资格要求: (1)投标人应当是具有文物保护工程勘探设计甲级资质的法人,其中其业务范围必须包含文物保护规划编制; (2)投标人应当具有世界文化遗产保护规划设计的工作经验。 3、 投标人应当在投标文件中详细列出并提供相关证明文件证明本项目的管理负责人和技术负责人的学历、职称、从事相关工作的时间,承担过类似项目名称、责任内容、完成日期以及其它业绩证明材料。 4、 投标人应当具有完整的质量保证体系。 5、 投标人应当在投标文件中提供具有文物保护工程勘探设计资格证明等文件。</div>
</div>
<div class="button">
<el-button type="primary" @click="back">返回</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import dataTable from '@components/nopageTable.vue'
import breadCrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
dataTable,
breadCrumb
},
data() {
return {
dialogFormVisible: false,
breads: ['投标管理 ', '在线报名', '询价公告'],
tabledata: [{
name: '大白菜',
acount: '100',
unit: '斤',
brand: '天然',
size: '周杰伦',
price: '100',
remarks: '无',
quote: '100.00'
},
{
name: '大白菜',
acount: '100',
unit: '斤',
brand: '天然',
size: '周杰伦',
price: '100',
remarks: '无',
quote: '100.00'
}, {
name: '大白菜',
acount: '100',
unit: '斤',
brand: '天然',
size: '周杰伦',
price: '100',
remarks: '无',
quote: '100.00'
}, {
name: '大白菜',
acount: '100',
unit: '斤',
brand: '天然',
size: '周杰伦',
price: '100',
remarks: '无',
quote: '100.00'
}, {
name: '大白菜',
acount: '100',
unit: '斤',
brand: '天然',
size: '周杰伦',
price: '100',
remarks: '无',
quote: '100.00'
}],
columns: [{
label: '标的名称',
prop: 'name'
},
{
label: '数量',
prop: 'acount'
}, {
label: '计量单位',
prop: 'unit'
}, {
label: '品牌',
prop: 'brand'
}, {
label: '规格型号',
prop: 'size'
}, {
label: '标杆价',
prop: 'price'
}, {
label: '备注',
prop: 'remarks'
}, {
label: '我的报价(元)',
prop: 'quote'
}]
}
},
methods: {
Prev() {
this.$router.push('/supply/Join_items/work_place/all_content')
}
}
}
</script>
<style scoped>
.Tips{
color:#409EFF
}
.notice>h4{
font-size: 16px;
font-weight: bold;
margin-right: 30px;
}
.notice{
margin:20px 0;
border-bottom: 1px solid #ccc;
}
h2{
/* margin-top:; */
margin-bottom:10px;
}
h6{
margin-bottom:10px;
}
.home{
padding:30px;
background: #fff;
box-sizing: border-box;
/* margin-left:20px; */
}
h1{
display: flex;
justify-content: center;
}
.form{
padding:20px;
box-sizing: border-box;
}
.form h3{
margin-top:20px;
margin-bottom:20px;
font-weight: bold;
}
/* table>tr{
text-align: center;
} */
table{
border-collapse: collapse;
}
table>tr>td{
font-size: 16px;
border: 1px solid #ccc;
padding-left: 10px;
}
table>tr>td:nth-child(odd){
background: #F0F0F0
}
.right-s{
padding-right:200px;
}
.appendix{
display: flex;
border: 1px solid #ccc;
}
.appendix>div:first-child{
width:159px;
border-right: 1px solid #ccc;
box-sizing: border-box;
padding-left: 10px;
}
.appendix>div:last-child{
padding-left: 10px;
}
.appendix>div:nth-child(odd){
background: #F0F0F0
}
.appendix>div{
font-size:16px;
line-height: 40px;
}
.list>:first-child{
height:120px;
line-height: 120px;
}
.list{
margin-top: 20px;
}
.bus-require>div:first-child{
width:400px;
}
.bus-require>div:last-child{
font-size: 10px;
}
.pos>div:first-child{
display: flex;
justify-content: center;
}
.last-pos{
margin-left:40px;
margin-top:20px;
}
.last-pos>div:first-child{
width:65px;
}
input{
width:100%;
height:70px;
}
.button{
width:100px;
margin:50px auto
}
.home>h1{
font-weight: bold;
}
</style>
<template>
<div class="info">
<div class="content">
<div class="title_info">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
</div>
<div class="info_box">
<div class="info_mes">
<p class="left_mes">
项目名称:建设路北伸(丰南界-南湖大道)项目 项目编号:I1301000075023964001
</p>
<p class="right_mes">
发布日期:2020年07月30日
</p>
</div>
<h1>清河县京九线以东天然气供气工程招标公告</h1>
<div class="content_list">
<div>
<h3 style="border-bottom:1px solid #CCC">
1.招标条件
</h3>
<p>
本招标项目 清河县京九线以东天然气供气工程 (项目名称)已由 清河县行政审批局 (项目审批、核准或备案机关名称)以 清批核〔2020〕003号 (批文名称及编号)批准建设,招标人(项目业主)为 清河县盛焰天然气有限公司
,建设资金来自 自筹资金 (资金来源),项目出资比例为 100% 。项目已具备招标条件,现对该项目的施工进行公开招标
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
2.项目概况与招标范围
</h3>
<p>
2.1项目概况:2.1建设地点:油坊镇政府东侧-唐唐口村段,距道路边沿西侧、北侧3米;村道(张广庄-李庄)双城集村至前苑村,距道路边沿东侧4.5米:大许村西,道路边沿东侧3米(过村路段道路边沿1.5米,加装保护),大许村北-李家井,距道路边沿北侧、西侧3米,前屯-连冢寺,距道路边沿西侧3米;连冢寺村-710乡道,距道路边沿北侧6.5米;710乡(连冢寺西侧桥-张豆坞村北)距道路边沿东侧4米;连冢寺-常庄科距道路边沿北侧4米。2.2建设规模:清河县京九线以东天然气供气工程,铺设管道总长18.085㎞,具体详见审定施工图纸及工程量清单所列全部工程内容。2.3合同估算价:1353947.57元2.4质量标准:竣工验收达到合格标准2.5计划工期:60日历天。2.6标段划分:
1个标段。
2.2招标范围:经勘查现场,本工程未开工建设。本次招标范围为审定施工图纸及工程量清单所列全部工程内容。
(说明本次招标项目的建设地点、规模、合同估算价、计划工期、招标范围、标段划分(如果有)等)。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
3.投标人资格要求
</h3>
<p>
3.1 本次招标对投标人的资格要求如下:
3.1.1资质要求:1.投标人必须具有独立的法人资格。2.本次招标要求投标人须具备建设行政主管部门核发的市政公用工程施工总承包贰级及以上资质,具备特种设备安装改造维修许可证(压力管道,GB1),同时具备有效的安全生产许可证,并在人员、设备、资金等方面具有相应的施工能力。其中投标人拟派项目经理须具备市政公用工程专业贰级(含以上级)注册建造师执业资格,具备有效的安全生产考核合格证书(B
类),且未担任其他在施建设工程的项目经理。3.在河北省住房和城乡建设厅网站www.hebjs.gov.cn进冀建筑企业基础信息查询该企业进冀信息。4.投标单位没有违章查处和限制投标的情形,近一年无不良记录,评标时由评标专家对投标企业是否有不良记录上网查询:(1)信用中国(投标人在信用中国中的不良记录有明确的处罚结果,依据结果执行;投标企业在信用中国中为失信被执行人不得参与投标);(2)河北省住房和城乡建设厅(黑名单)http://zfcxjst.hebei.gov.cn/。提供《建筑材料采购使用承诺书》;5.与招标人存在利害关系可能影响招标公正性的投标人,不得投标。6.本次招标不接受联合体投标。
,其中,投标人拟派项目经理须具备 市政公用工程 专业 贰级(含以上级) 级注册建造师执业资格,具备有效的安全生产考核合格证书,且未担任其他在施建设工程项目的项目经理。
3.2 本次招标 不接受 (接受或不接受)联合体投标。
3.3 各投标人均可就本招标项目上述标段中的 1 (具体数量)个标段投标,但最多允许中标 1 (具体数量)个标段(适用于分标段的招标项目)。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
4.投标报名
</h3>
<p>
凡有意参加投标者,请于 2020-07-30 00:00 至 2020-08-05 23:59 (法定公休日、法定节假日除外),登录 惠招标(http://www.hbidding.com)
(电子招标投标交易平台名称)报名。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
5.招标文件的获取
</h3>
<p>
5.1 凡通过上述报名者,请于 2020-07-30 00:00 至 2020-08-05 23:59 (法定公休日、法定节假日除外),登录 惠招标(http://www.hbidding.com)
(电子招标投标交易平台名称)下载电子招标文件。
5.2 招标文件每套售价 0 元,售后不退。图纸押金 0 元,在退还图纸时退还(不计利息)。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
6. 投标文件的递交
</h3>
<p>
6.1 投标文件递交的截止时间(投标截止时间,下同)为 2020-08-21 14:30 ,投标人应在截止时间前通过 惠招标平台 (电子招标投标交易平台)递交电子投标文件。
6.2 逾期送达的投标文件,电子招标投标交易平台将予以拒收。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
7. 发布公告的媒介
</h3>
<p>
本次招标公告同时在 河北省招标投标公共服务平台、清河县公共资源交易中心网、惠招标电子招投标交易平台 (发布公告的媒介名称)上发布。
</p>
</div>
<div>
<h3 style="border-bottom:1px solid #CCC">
8. 联系方式
</h3>
<div class="flex message">
<p style="margin-right: 200px;">
招标人: 清河县盛焰天然气有限公司 <br>
地址: 清河县 <br>
邮编: 050000 <br>
联系人: 许剑英 <br>
电话: 13231980428 <br>
传真: / <br>
电子邮件: / <br>
网址: / <br>
开户银行: // <br>
帐号: / <br>
</p>
<p>
招标代理机构: 河北磊砺工程管理咨询有限公司 <br>
地址: 河北省邢台市桥东区新华南路328号7A13号 <br>
邮编: 054000 <br>
联系人: 杨现生 <br>
电话: 18617655375 <br>
传真: / <br>
电子邮件: 349933856@qq.com <br>
网址: / <br>
开户银行: 中国建设银行股份有限公司邢台新兴东大街支行 <br>
帐号: 13050165550800000847 <br>
</p>
</div>
<div class="flex">
<div>附件下载:</div>
<ul>
<li>111.pdf</li>
</ul>
</div>
</div>
</div>
<el-row>
<el-button @click="back">返回</el-button>
<el-button >拒绝要求</el-button>
<el-button type="primary">接受邀请</el-button>
</el-row>
</div>
</div>
</div>
</template>
<script>
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
export default {
components: {
dataBreadcrumb
},
data() {
return {
breads: ['投标管理', '我参与的项目', '查看投标邀请书']
}
},
methods: {
back() {
this.$router.go(-1)
}
}
}
</script>
<style scoped>
.info {
box-sizing: border-box;
padding: 30px;
background: rgb(240, 242, 245);
width: 100%;
}
.info>.info_prev {
box-sizing: border-box;
padding-left: 30px;
padding-top: 30px;
background: #fff;
}
.title_info {
margin-top: 20px;
margin-left: 40px;
margin-bottom: 50px;
}
.info_mes {
margin-bottom: 40px;
display: flex;
justify-content: center;
}
.info_mes p {
display: inline-block;
}
.info_mes .left_mes {
margin-right: 200px;
font-size:16px ;
}
.right_mes{
font-size:16px ;
}
h1 {
display: flex;
justify-content: center;
}
.content_list {
margin-left: 100px;
margin-right: 100px;
margin-top: 50px;
}
.content_list h3 {
margin-top: 30px;
font-weight: bold;
padding-bottom: 10px;
}
.content_list p {
margin-top: 10px;
margin-bottom: 10px;
}
.el-row {
display: flex;
justify-content: center;
margin-top: 50px;
}
.message>p{
font-weight: bold;
}
</style>
......@@ -6,16 +6,16 @@
<h5>发布投标邀请书</h5>
</div>
<div class="content">
<div class="describe">标邀请书</div>
<div class="describe">标邀请书</div>
<div class="form">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="招标邀请书" prop="title">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm">
<el-form-item label="投标邀请书标题" prop="title">
<el-input v-model.trim="ruleForm.title" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="上传附件">
<singleUpload tip="支持扩展名:.rar .zip .doc .docx .pdf .jpg..." @input="getfile"></singleUpload>
</el-form-item>
<el-form-item label="招标邀请书" prop="content">
<el-form-item label="投标邀请书内容" prop="content">
<!-- <el-button style="margin-bottom: 30px;">插入邀请投标单位名称</el-button> -->
<quill-editor ref="text" v-model="ruleForm.content" :options="editorOption" class="myQuillEditor" />
</el-form-item>
......
......@@ -23,10 +23,10 @@
</el-form-item>
<div class="flex-between" style="width:60%">
<el-form-item label="询价单编号" prop="inquiryCode">
<el-input v-model.trim="ruleForm.inquiryCode" placeholder="请输入" maxlength="30"></el-input>
<el-input v-model.trim="ruleForm.inquiryCode" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
</el-form-item>
<el-form-item label="采购目录" prop="catalog">
<el-input v-model.trim="ruleForm.catalog" placeholder="请输入" maxlength="30"></el-input>
<el-input v-model.trim="ruleForm.catalog" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
</el-form-item>
<el-form-item label="项目优先级" prop="priority">
<el-radio-group v-model="ruleForm.priority">
......@@ -45,22 +45,22 @@
</el-date-picker>
</el-form-item>
<el-form-item label="采购单位" prop="purchaseAgent">
<el-input v-model.trim="ruleForm.purchaseAgent" disabled></el-input>
<el-input v-model.trim="ruleForm.purchaseAgent" disabled style="width: 250px;"></el-input>
</el-form-item>
</div>
<div class="flex-between" style="width:60%">
<el-form-item label="采购单位联系人" prop="contact">
<el-input v-model.trim="ruleForm.contact" disabled></el-input>
</el-form-item>
</el-form-item>
<el-form-item label="联系方式" prop="contactPhone">
<el-input v-model.trim="ruleForm.contactPhone" disabled></el-input>
</el-form-item>
<el-form-item label="传真号码" prop="facsimile">
<el-input v-model.trim="ruleForm.facsimile" placeholder="请输入" maxlength="30"></el-input>
<el-input v-model.trim="ruleForm.facsimile" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
</el-form-item>
</div>
<el-form-item label="预算总额(元)" prop="budget" style="width: 20%;">
<el-input v-model.trim="ruleForm.budget" placeholder="请输入" maxlength="30"></el-input>
<el-input-number v-model="ruleForm.budget" :min="0" :controls="false" :precision="2" placeholder="输入"></el-input-number>
</el-form-item>
</el-form>
</div>
......@@ -127,6 +127,10 @@ import {
import {
getTime
} from '@utils/time'
import {
commoditylist
} from '@api/common/list'
export default {
components: {
dataTable,
......@@ -135,66 +139,54 @@ export default {
singleUpload
},
data() {
let checkfacsimile = async (rule, value, callback) => {
if (!value) {
return callback(new Error('传真号不能为空'));
} else {
const reg = /^(?:\d{3,4}-)?\d{7,8}(?:-\d{1,6})?$/
if (reg.test(value)) {
callback();
} else {
return callback(new Error('请输入正确的传真号'));
}
}
};
return {
projectName:"",
projectCode:"",
breads: ['招标管理', ' 招标项目管理', '工作台'],
tableData: [{
name: '大白菜',
number: '100',
meter: '斤',
brand: '天然',
model: '大型',
price: '100',
remark: '无'
},
{
name: '大白菜',
number: '100',
meter: '斤',
brand: '天然',
model: '大型',
price: '100',
remark: '无'
},
{
name: '大白菜',
number: '100',
meter: '斤',
brand: '天然',
model: '大型',
price: '100',
remark: '无'
}
],
columns: [{
label: '标的名称',
prop: 'name'
},
{
label: '数量',
prop: 'number'
},
{
label: '计量单位',
prop: 'meter'
},
{
label: '品牌',
prop: 'brand'
},
{
label: '规格型号',
prop: 'model'
},
{
label: '标杆价',
prop: 'price'
},
{
label: '备注',
prop: 'remark'
}
], //
tableData: [],
columns: [
{
label: '标的名称',
prop: 'bidName'
},
{
label: '数量',
prop: 'quantity'
},
{
label: '计量单位',
prop: 'unit'
},
{
label: '品牌',
prop: 'brand'
},
{
label: '规格型号',
prop: 'specification'
},
{
label: '标杆价(元)',
prop: 'price'
},
{
label: '备注',
prop: 'remark'
},
],
ruleForm: {
title: '',
projectId: '',
......@@ -258,7 +250,7 @@ export default {
}],
facsimile: [{
required: true,
message: '请输入',
validator: checkfacsimile,
trigger: 'blur'
}],
supplierScale: [{
......@@ -285,12 +277,19 @@ export default {
}
},
created() {
let userInfo=JSON.parse(localStorage.getItem("userInfo"))
console.log(userInfo)
this.ruleForm.purchaseAgent=userInfo.companyName
this.ruleForm.contact=userInfo.name
this.ruleForm.contactPhone=userInfo.phone
let data=getTime();
console.log(data);
this.ruleForm.stateTime=data;
this.ruleForm.endTime=data;
this.ruleForm.endTime=data;
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getcommoditylist()
},
methods: {
......@@ -325,7 +324,7 @@ export default {
code,
data
} = await createEnquiry(this.ruleForm)
if (code === 200) {
if (code == 200) {
this.$message({
message: msg,
type: 'success',
......@@ -341,7 +340,16 @@ export default {
} catch (err) {
console.log(err)
}
}
},
// 获取列表
async getcommoditylist() {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await commoditylist(projectId)
this.tableData=data
}
}
}
......
......@@ -51,12 +51,20 @@ export default {
label:"发布询价公告",
url:"/purchaser/bid/reviewed/inquiryAnnouncement"
},
{
label:"查看询价公告",
url:"/purchaser/bid/reviewed/SeeinquiryAnnouncement"
},
{
label:"发布招标公告",
url:"/purchaser/bid/reviewed/tenderAnnouncement"
},
{
label:"投标邀请书",
label:"查看招标公告",
url:"/purchaser/bid/reviewed/SeetenderAnnouncement"
},
{
label:"发布投标邀请书",
url:"/purchaser/bid/reviewed/bidInvitation"
},
{
......@@ -80,18 +88,36 @@ export default {
{
label:"开标大厅",
url:"/purchaser/bid/bidOpen/bidOpenhal"
},
{
label:"开标过程记录查看",
url:"/purchaser/bid/bidEvaluation/hallInformation"
}]
},
{
title: '评标',
modulars: [{
modulars: [
{
label:"专家评审",
url:"/purchaser/bid/bidEvaluation/projectManager/content"
},
{
label:"项目经理",
url:"/purchaser/bid/bidEvaluation/review/review"
},
{
label:"评标查看",
url:"/purchaser/bid/bidSure/see"
}]
},
{
title: '定标',
modulars: [{
modulars: [
{
label:"中标候选人公示",
url:"/purchaser/bid/bidSure/publicity"
},
{
label:"确定中标人",
url:"/purchaser/bid/bidSure/determine"
},
......@@ -99,12 +125,9 @@ export default {
label:"重新确定中标人",
url:"/purchaser/bid/bidSure/determine"
},
{
label:"中标候选人公示",
url:"/purchaser/bid/bidSure/publicity"
},
{
label:"中标公告",
label:"发布中标公告",
url:"/purchaser/bid/bidSure/notice"
},
{
......
<template>
<div>
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<div>中国标准时间:{{ currentTime }}</div>
<div class="hal">
<h2 style="text-align: center;">{{projectName}}项目开标大厅</h2>
<div class="time-message flex-between">
<div class="flex">
<p>截标倒计时:</p>
<timeDown :remain-time="12" @countDowmEnd="countDowmEnd"></timeDown>
</div>
<div>解密倒计时:{{ minutes }} 分钟{{ seconds }}</div>
<div>签名倒计时:{{ minutes }} 分钟{{ seconds }}</div>
</div>
<div class="flex">
<div class="hal-left">
<div>
<h1>签到 是</h1>
<h1>解密 否</h1>
<h1>签名 否</h1>
</div>
</div>
<div class="hal-center">
<ul>
<li v-for="(item,index) in halList" :key="index" class="flex">
<div>{{ item.time }}</div>
<div>{{ item.role }}</div>
<div>{{ item.person }}</div>
<div>{{ item.behavior }}</div>
</li>
</ul>
</div>
<div class="hal-right">
<el-button @click="dialogFormVisible=true">开标规则说明</el-button>
<el-button >在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<el-button disabled>解密投标文件</el-button>
</div>
</div>
<div class="flex-center buttons">
<div>
<el-button icon="el-icon-refresh">刷新</el-button>
<el-button>查看开标一览表</el-button>
<el-button>退出大厅<i class="el-icon-right"></i></el-button>
</div>
</div>
</div>
</div>
<el-dialog :visible.sync="dialogFormVisible" title="开标规则说明" >
<div class="explain">
<h1>开标说明</h1>
<div>一系列说明</div>
</div>
<div class="flex-center">
<el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
</div>
</el-dialog>
</div>
<div>
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<div>中国标准时间:{{ currentTime }}</div>
<div class="hal">
<h2 style="text-align: center;">{{projectName}}项目开标大厅</h2>
<div class="time-message flex-between">
<div class="flex">
<p>截标倒计时:</p>
<timeDown :remain-time="remaintime" @countDowmEnd="remaintimeEnd"></timeDown>
</div>
<div class="flex" v-show="decodeTime">
<p>解密倒计时:</p>
<timeDown :remain-time="decodeTime" @countDowmEnd="decodeTimeEnd"></timeDown>
</div>
<div class="flex" v-show="signatureTime">
<p>签名倒计时:</p>
<timeDown :remain-time="signatureTime" @countDowmEnd="signatureTimeEnd"></timeDown>
</div>
</div>
<div class="flex">
<div class="hal-left">
<div>
<h1>签到 {{leftmessage.signIn==0?"否":"是"}}</h1>
<h1>解密 {{leftmessage.decode==0?"否":"是"}}</h1>
<h1>签名 {{leftmessage.signature==0?"否":"是"}}</h1>
</div>
</div>
<div class="hal-center">
<ul>
<li v-for="(item,index) in halList" :key="index" class="flex-item">
<div>{{ item.time }}</div>
<div>{{ item.role }}</div>
<div>{{ item.name }}</div>
<div>{{ item.behavior }}</div>
</li>
</ul>
</div>
<div class="hal-right">
<el-button @click="dialogFormVisible=true" style="margin-left:10px">开标规则说明</el-button>
<el-button @click="isdialogue">在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<el-button :disabled="isDecode">解密投标文件</el-button>
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<ul class="dialogueList">
<li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<div>
<div class="flex-item">
<div v-if="myId==item.userId"></div>
<div v-else>{{item.name}}</div>
<div>({{item.time}})</div>
</div>
<div>{{item.chatContent}}</div>
</div>
</li>
</ul>
<el-input placeholder="请输入内容" v-model.trim="content" clearable @keyup.enter.native="send" maxlength="30">
</el-input>
</div>
</div>
<div class="flex-center buttons">
<div>
<el-button icon="el-icon-refresh">刷新</el-button>
<el-button @click="isopenInfo=true">查看开标一览表</el-button>
<el-button @click="back">退出大厅<i class="el-icon-right"></i></el-button>
</div>
</div>
</div>
</div>
<!-- 开标说明 -->
<el-dialog :visible.sync="dialogFormVisible" title="开标规则说明">
<div class="explain">
<h1>开标说明</h1>
<div>一系列说明</div>
</div>
<div class="flex-center">
<el-button type="primary" @click="dialogFormVisible = false">关闭</el-button>
</div>
</el-dialog>
<!-- 开标一览表 -->
<el-dialog :visible.sync="isopenInfo" title="开标一览表">
<nopageTable :tableData="tableData" :columns="nopagecolumns" :margin-top="0" :margin-bottom="0">
</nopageTable>
<div slot="footer" class="dialog-footer">
<el-button @click="isopenInfo=false">关闭 </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {openBidsign} from '@api/supply/bid'
import {
getTime
} from '@utils/time'
openBidsign
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import timeDown from '@components/timeDown.vue'
import dataTable from '@components/dataTable.vue'
export default {
components: {
dataBreadcrumb,
timeDown,
dataTable
},
data() {
return {
projectName:"",
pageObj: {
size: 10,
total: 1000,
currentPage: 1,
func: (currentPage) => {
this.pageTurning(currentPage)
}
},
dialogFormVisible: false,
tableData: [{
name: '胡彦斌',
project: '胡彦斌',
data: '2017-10-01 12:00',
remark: '重新确定中标人'
}, {
name: '胡彦斌',
project: '胡彦斌',
data: '2017-10-01 12:00',
remark: '重新确定中标人'
}, {
name: '胡彦斌',
project: '胡彦斌',
data: '2017-10-01 12:00',
remark: '重新确定中标人'
}, {
name: '胡彦斌',
project: '胡彦斌',
data: '2017-10-01 12:00',
remark: '重新确定中标人'
}],
columns: [{
label: '中标供应商',
prop: 'name'
},
{
label: '中标项目',
prop: 'project'
},
{
label: '中标时间',
prop: 'data',
sortable: true
},
{
label: '备注',
prop: 'remark'
},
{
slot: 'operate'
}
], //
isOpenbid: false,
buttonWords: '立即开标',
openbidButton: false,
halList: [{
time: '17:56:56',
role: '招标人',
person: '谢天',
behavior: '进入开标大厅'
},
{
time: '17:56:56',
role: '投标人',
person: '测试1',
behavior: '确认可开标'
}
],
minutes: '6',
seconds: '60',
currentTime: '',
breads: ['招标管理', '招标项目管理', '工作台']
}
},
mounted() {
this.add()
},
created() {
// 中国标准时间
let currentTime = getTime()
this.currentTime = currentTime
setInterval(() => {
let currentTime = getTime()
this.currentTime = currentTime
}, 1000)
this.projectName = localStorage.getItem("projectName")
this.getopenBidsign();
},
methods: {
// 计算分秒倒计时
add: function() {
var _this = this
var time = window.setInterval(function() {
if (_this.seconds === 0 && _this.minutes !== 0) {
_this.seconds = 59
_this.minutes -= 1
} else if (_this.minutes === 0 && _this.seconds === 0) {
_this.seconds = 0
window.clearInterval(time)
} else {
_this.seconds -= 1
}
}, 1000)
},
// 截标时间到了
countDowmEnd(val) {
this.openbidButton = val
},
async getopenBidsign() {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await openBidsign()
}
}
import {
openBidsign,
opentimeInfo,
openInfolist
} from '@api/supply/bid'
import {
getTime
} from '@utils/time'
openBidsign
import nopageTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import timeDown from '@components/timeDown.vue'
import dataTable from '@components/dataTable.vue'
export default {
components: {
dataBreadcrumb,
timeDown,
dataTable,
nopageTable
},
data() {
return {
isDecode:true,
dialogue: false,
isopenInfo: false,
remaintime: "",
decodeTime: "",
signatureTime: "",
projectName: "",
pageObj: {
size: 10,
total: 1000,
currentPage: 1,
func: (currentPage) => {
this.pageTurning(currentPage)
}
},
dialogFormVisible: false,
tableData: [],
columns: [{
label: '中标供应商',
prop: 'name'
},
{
label: '中标项目',
prop: 'project'
},
{
label: '中标时间',
prop: 'data',
sortable: true
},
{
label: '备注',
prop: 'remark'
},
{
slot: 'operate'
}
], //
nopagecolumns: [{
label: '投标人名称',
prop: 'companyName'
},
{
label: '投标报价(元)',
prop: 'price'
},
{
label: '是否签名',
prop: 'isSign',
},
], //
isOpenbid: false,
buttonWords: '立即开标',
openbidButton: false,
halList: [{
time: '17:56:56',
role: '招标人',
person: '谢天',
behavior: '进入开标大厅'
},
{
time: '17:56:56',
role: '投标人',
person: '测试1',
behavior: '确认可开标'
}
],
minutes: '6',
seconds: '60',
currentTime: '',
breads: ['招标管理', '招标项目管理', '工作台'],
leftmessage: "",
websocket: "",
dialogueList:[],
halList:[],
content:"",
myId:""
}
},
mounted() {
this.add()
},
created() {
// 中国标准时间
let currentTime = getTime()
this.currentTime = currentTime
this.timer1 = setInterval(() => {
let currentTime = getTime()
this.currentTime = currentTime
}, 1000)
this.projectName = localStorage.getItem("projectName")
this.getopenBidsign();
this.gettimeInfo();
this.getopenInfo();
this.createWebSocket()
this.myId = JSON.parse(localStorage.getItem("userInfo")).userId
},
methods: {
isdialogue() {
this.dialogue = !this.dialogue
},
// websocket
createWebSocket() {
let token=localStorage.getItem("token")
let projectId = localStorage.getItem("projectId")
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
// 连接成功时
this.websocket.onopen = () => {}
this.websocket.onmessage = event => {
// 后端发送的消息在event.data中
let data = JSON.parse(event.data);
console.log(data)
if (data.type == 1) {
this.content = ""
this.dialogueList.push(data)
} else {
this.halList.push(data)
}
}
this.websocket.onclose = function() {
console.log('关闭了')
}
// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常
window.onbeforeunload = function() {
this.websocket.close()
}
},
send() {
let content = this.content;
this.websocket.send(content)
},
back() {
this.$router.go(-1)
},
// 截标时间到了
remaintimeEnd(val) {
}
},
// 解密时间到了
decodeTimeEnd(val) {
this.isDecode=false
},
// 签名时间到了
signatureTimeEnd(val) {
},
// 计算分秒倒计时
add: function() {
var _this = this
var time = window.setInterval(function() {
if (_this.seconds === 0 && _this.minutes !== 0) {
_this.seconds = 59
_this.minutes -= 1
} else if (_this.minutes === 0 && _this.seconds === 0) {
_this.seconds = 0
window.clearInterval(time)
} else {
_this.seconds -= 1
}
}, 1000)
},
// 截标时间到了
countDowmEnd(val) {
this.openbidButton = val
},
// 左边信息栏
async getopenBidsign() {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await openBidsign(projectId)
this.leftmessage = data
},
async getopenBidsign() {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await openBidsign(projectId)
this.leftmessage = data
},
// 时间信息
async gettimeInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await opentimeInfo(projectId)
this.remaintime = Number(data.remainTime);
this.decodeTime = Number(data.decodeTime)
this.signatureTime = Number(data.signatureTime)
} catch (e) {
console.log(e)
}
},
// 开标一栏表
async getopenInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await openInfolist(projectId)
if (code == 200) {
for (let item of data) {
if (item.isSign) {
item.isSign = "是"
} else {
item.isSign = "否"
}
}
this.tableData = data
}
} catch (e) {
console.log(e)
}
},
},
destroyed() {
//清除定时器
clearInterval(this.timer1);
this.websocket.close()
}
}
</script>
<style scoped>
.explain>h1{
.hal {
position: relative;
}
.dialogue {
position: absolute;
top: 10%;
right: 10%;
}
.dialogue>.dialogueList {
box-sizing: border-box;
padding: 20px;
overflow: auto
}
.dialogueList>li {
margin-bottom: 20px;
}
.explain>h1 {
text-align: center;
margin:30px 0
margin: 30px 0
}
.buttons {
margin: 100px 0;
}
.hal-left {
width: 10%;
width: 200px;
}
......@@ -217,15 +384,17 @@ export default {
padding: 40px 20px
}
.hal-right {
width: 10%;
width: 200px;
height: 500px;
}
.hal-right>button{
.hal-right>button {
margin-bottom: 20px;
}
.hal-center {
flex: 1;
height: 500px;
......@@ -268,4 +437,10 @@ export default {
margin-right: 50px;
margin-bottom: 30px;
}
.dialogue>.dialogueList {
border: 1px solid #DCDFE6;
width: 400px;
height: 300px;
overflow: auto;
}
</style>
......@@ -75,7 +75,7 @@ export default {
title: '投标',
modulars: [{
label:"递交投标文件",
url:"/supply/bid/bidStage/tenderInformationlist"
url:"/supply/bid/joinProject/bidSubmit/bidSubmit"
}]
},
{
......@@ -83,7 +83,7 @@ export default {
modulars: [
{
label:"参与开标",
url:"/supply/bid/bidOpen/bidOpenhal"
url:"/supply/bid/joinProject/bidOpen/bidOpenhal"
}]
},
{
......
......@@ -307,11 +307,21 @@ export default new Router({
show: true,
component: () => import('../pages/purchaser/bid/reviewed/inquiryAnnouncement.vue')
},
{
path: '/purchaser/bid/reviewed/SeeinquiryAnnouncement',
show: true,
component: () => import('../pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue')
},
{
path: '/purchaser/bid/reviewed/tenderAnnouncement',
show: true,
component: () => import('../pages/purchaser/bid/reviewed/tenderAnnouncement.vue')
},
{
path: '/purchaser/bid/reviewed/SeetenderAnnouncement',
show: true,
component: () => import('../pages/purchaser/bid/reviewed/SeetenderAnnouncement.vue')
},
{
path: '/purchaser/bid/reviewed/bidInvitation',
show: true,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment