Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
W
web-purchase
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张冬
web-purchase
Commits
13079aac
Commit
13079aac
authored
Sep 28, 2020
by
张冬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新
parent
c3742962
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
987 additions
and
174 deletions
+987
-174
list.js
src/api/common/list.js
+9
-0
bid.js
src/api/purchaser/bid.js
+7
-0
bid.js
src/api/supply/bid.js
+8
-0
Header.vue
src/components/common/Header.vue
+4
-3
hallInformation.vue
src/pages/purchaser/bid/bidEvaluation/hallInformation.vue
+84
-46
bidOpenhal.vue
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
+5
-5
bidSet.vue
src/pages/purchaser/bid/bidStage/bidSet.vue
+10
-6
propose.vue
src/pages/purchaser/bid/bidStage/clearManagement/propose.vue
+1
-1
see.vue
src/pages/purchaser/bid/bidStage/clearManagement/see.vue
+1
-1
SeeinquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
+297
-0
SeetenderAnnouncement.vue
src/pages/purchaser/bid/reviewed/SeetenderAnnouncement.vue
+233
-0
bidInvitation.vue
src/pages/purchaser/bid/reviewed/bidInvitation.vue
+4
-4
inquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
+51
-43
workbench.vue
src/pages/purchaser/bid/workbench.vue
+31
-8
bidOpenhal.vue
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
+230
-55
workbench.vue
src/pages/supply/bid/joinProject/workbench.vue
+2
-2
index.js
src/router/index.js
+10
-0
No files found.
src/api/common/list.js
View file @
13079aac
...
...
@@ -104,3 +104,11 @@ export function simpleList(params) {
params
:
params
})
}
// 询价商品清单列表接口
export
function
commoditylist
(
projectId
)
{
return
request
({
url
:
`bidder-apply/commodity/list/
${
projectId
}
`
,
method
:
'get'
})
}
\ No newline at end of file
src/api/purchaser/bid.js
View file @
13079aac
...
...
@@ -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
// 评标管理:变更公告列表
...
...
src/api/supply/bid.js
View file @
13079aac
...
...
@@ -274,3 +274,11 @@ export function openBidsign(projectId) {
method
:
'get'
,
})
}
// 开标大厅三个截止时间
export
function
opentimeInfo
(
projectId
)
{
return
request
({
url
:
`open-bid/timeInfo/
${
projectId
}
`
,
method
:
'get'
,
})
}
src/components/common/Header.vue
View file @
13079aac
...
...
@@ -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
)
},
...
...
src/pages/purchaser/bid/bidEvaluation/hallInformation.vue
View file @
13079aac
...
...
@@ -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
{
changeIndex
:
'0'
,
navs
:
[
'开标大厅消息'
,
'对话消息'
]
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
tableData
:
[{
name
:
'发送人'
,
data
:
'2017-10-01 12:00
'
,
content
:
'米西米西密西
'
nopagecolumns
:
[{
label
:
'投标人名称'
,
prop
:
'companyName'
},
{
label
:
'投标报价(元)
'
,
prop
:
'price
'
},
{
name
:
'发送人'
,
data
:
'2017-10-01 12:00'
,
content
:
'米西米西密西'
label
:
'是否签名'
,
prop
:
'isSign'
,
},
],
//
changeIndex
:
'0'
,
navs
:
[
'开标大厅消息'
,
'对话消息'
],
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
behaviorList
:
[],
behavior
:
[
{
name
:
'发送人'
,
data
:
'2017-10-01 12:00'
,
content
:
'米西米西密西'
slot
:
'operate'
}
],
c
olumns
:
[{
],
// 操作列
c
hat
:
[{
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
>
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
View file @
13079aac
...
...
@@ -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
=>
{
...
...
src/pages/purchaser/bid/bidStage/bidSet.vue
View file @
13079aac
<
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
()
},
...
...
src/pages/purchaser/bid/bidStage/clearManagement/propose.vue
View file @
13079aac
...
...
@@ -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"
>
...
...
src/pages/purchaser/bid/bidStage/clearManagement/see.vue
View file @
13079aac
...
...
@@ -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>
...
...
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
0 → 100644
View file @
13079aac
<
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
>
src/pages/purchaser/bid/reviewed/SeetenderAnnouncement.vue
0 → 100644
View file @
13079aac
<
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
>
src/pages/purchaser/bid/reviewed/bidInvitation.vue
View file @
13079aac
...
...
@@ -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=
"1
0
0px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"
招标邀请书
"
prop=
"title"
>
<el-form
ref=
"ruleForm"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"1
2
0px"
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>
...
...
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
View file @
13079aac
...
...
@@ -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,7 +45,7 @@
</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%"
>
...
...
@@ -56,11 +56,11 @@
<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,47 +139,36 @@ 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
:
'无'
},
tableData
:
[],
columns
:
[
{
name
:
'大白菜'
,
number
:
'100'
,
meter
:
'斤'
,
brand
:
'天然'
,
model
:
'大型'
,
price
:
'100'
,
remark
:
'无'
}
],
columns
:
[{
label
:
'标的名称'
,
prop
:
'n
ame'
prop
:
'bidN
ame'
},
{
label
:
'数量'
,
prop
:
'number
'
prop
:
'quantity
'
},
{
label
:
'计量单位'
,
prop
:
'meter
'
prop
:
'unit
'
},
{
label
:
'品牌'
,
...
...
@@ -183,18 +176,17 @@ export default {
},
{
label
:
'规格型号'
,
prop
:
'model
'
prop
:
'specification
'
},
{
label
:
'标杆价
'
,
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,6 +340,15 @@ export default {
}
catch
(
err
)
{
console
.
log
(
err
)
}
},
// 获取列表
async
getcommoditylist
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
commoditylist
(
projectId
)
this
.
tableData
=
data
}
}
...
...
src/pages/purchaser/bid/workbench.vue
View file @
13079aac
...
...
@@ -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"
},
{
...
...
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
View file @
13079aac
...
...
@@ -8,45 +8,69 @@
<div
class=
"time-message flex-between"
>
<div
class=
"flex"
>
<p>
截标倒计时:
</p>
<timeDown
:remain-time=
"12"
@
countDowmEnd=
"countDowmEnd"
></timeDown>
<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>
解密倒计时:
{{
minutes
}}
分钟
{{
seconds
}}
秒
</div>
<div>
签名倒计时:
{{
minutes
}}
分钟
{{
seconds
}}
秒
</div>
</div>
<div
class=
"flex"
>
<div
class=
"hal-left"
>
<div>
<h1>
签到 是
</h1>
<h1>
解密 否
</h1>
<h1>
签名 否
</h1>
<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
"
>
<li
v-for=
"(item,index) in halList"
:key=
"index"
class=
"flex-item
"
>
<div>
{{
item
.
time
}}
</div>
<div>
{{
item
.
role
}}
</div>
<div>
{{
item
.
person
}}
</div>
<div>
{{
item
.
name
}}
</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>
<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
>
查看开标一览表
</el-button>
<el-button
>
退出大厅
<i
class=
"el-icon-right"
></i></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=
"开标规则说明"
>
<!-- 开标说明 -->
<el-dialog
:visible
.
sync=
"dialogFormVisible"
title=
"开标规则说明"
>
<div
class=
"explain"
>
<h1>
开标说明
</h1>
<div>
一系列说明
</div>
...
...
@@ -55,27 +79,47 @@
<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
{
import
{
openBidsign
,
opentimeInfo
,
openInfolist
}
from
'@api/supply/bid'
import
{
getTime
}
from
'@utils/time'
}
from
'@utils/time'
openBidsign
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
timeDown
from
'@components/timeDown.vue'
import
dataTable
from
'@components/dataTable.vue'
export
default
{
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
dataTable
,
nopageTable
},
data
()
{
return
{
projectName
:
""
,
isDecode
:
true
,
dialogue
:
false
,
isopenInfo
:
false
,
remaintime
:
""
,
decodeTime
:
""
,
signatureTime
:
""
,
projectName
:
""
,
pageObj
:
{
size
:
10
,
total
:
1000
,
...
...
@@ -85,27 +129,7 @@ export default {
}
},
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
:
'重新确定中标人'
}],
tableData
:
[],
columns
:
[{
label
:
'中标供应商'
,
prop
:
'name'
...
...
@@ -127,6 +151,19 @@ export default {
slot
:
'operate'
}
],
//
nopagecolumns
:
[{
label
:
'投标人名称'
,
prop
:
'companyName'
},
{
label
:
'投标报价(元)'
,
prop
:
'price'
},
{
label
:
'是否签名'
,
prop
:
'isSign'
,
},
],
//
isOpenbid
:
false
,
buttonWords
:
'立即开标'
,
openbidButton
:
false
,
...
...
@@ -146,7 +183,13 @@ export default {
minutes
:
'6'
,
seconds
:
'60'
,
currentTime
:
''
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
]
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
leftmessage
:
""
,
websocket
:
""
,
dialogueList
:[],
halList
:[],
content
:
""
,
myId
:
""
}
},
mounted
()
{
...
...
@@ -156,14 +199,66 @@ export default {
// 中国标准时间
let
currentTime
=
getTime
()
this
.
currentTime
=
currentTime
setInterval
(()
=>
{
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
...
...
@@ -183,29 +278,101 @@ export default {
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"
)
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
openBidsign
()
}
=
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
;
}
...
...
@@ -220,12 +387,14 @@ export default {
.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
>
src/pages/supply/bid/joinProject/workbench.vue
View file @
13079aac
...
...
@@ -75,7 +75,7 @@ export default {
title
:
'投标'
,
modulars
:
[{
label
:
"递交投标文件"
,
url
:
"/supply/bid/
bidStage/tenderInformationlis
t"
url
:
"/supply/bid/
joinProject/bidSubmit/bidSubmi
t"
}]
},
{
...
...
@@ -83,7 +83,7 @@ export default {
modulars
:
[
{
label
:
"参与开标"
,
url
:
"/supply/bid/bidOpen/bidOpenhal"
url
:
"/supply/bid/
joinProject/
bidOpen/bidOpenhal"
}]
},
{
...
...
src/router/index.js
View file @
13079aac
...
...
@@ -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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment