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
fdfbd2b6
Commit
fdfbd2b6
authored
Oct 09, 2020
by
张冬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新大部分
parent
e280408e
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
1132 additions
and
860 deletions
+1132
-860
dist.zip
dist.zip
+0
-0
list.js
src/api/common/list.js
+11
-1
bid.js
src/api/purchaser/bid.js
+35
-7
noticeDetail.vue
src/components/detail/noticeDetail.vue
+42
-26
priceDetail.vue
src/components/detail/priceDetail.vue
+24
-8
projectDetail.vue
src/components/detail/projectDetail.vue
+206
-0
bidOpenhal.vue
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
+78
-46
bidSet.vue
src/pages/purchaser/bid/bidStage/bidSet.vue
+2
-4
changeList.vue
src/pages/purchaser/bid/bidStage/changeList/changeList.vue
+1
-1
propose.vue
src/pages/purchaser/bid/bidStage/clearManagement/propose.vue
+16
-9
failNotice.vue
src/pages/purchaser/bid/bidStage/failList/failNotice.vue
+125
-122
projectInformation.vue
src/pages/purchaser/bid/bidStage/projectInformation.vue
+94
-0
edit.vue
src/pages/purchaser/bid/bidSure/bidResult/edit.vue
+49
-20
list.vue
src/pages/purchaser/bid/bidSure/bidResult/list.vue
+64
-20
contract.vue
src/pages/purchaser/bid/bidSure/contract.vue
+0
-0
determine.vue
src/pages/purchaser/bid/bidSure/determine.vue
+34
-17
notice.vue
src/pages/purchaser/bid/bidSure/notice.vue
+31
-30
edit.vue
src/pages/purchaser/bid/bidSure/winBid/edit.vue
+23
-13
list.vue
src/pages/purchaser/bid/bidSure/winBid/list.vue
+124
-96
message.vue
src/pages/purchaser/bid/releaseProject/message.vue
+7
-6
SeeinquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
+14
-13
bidInvitation.vue
src/pages/purchaser/bid/reviewed/bidInvitation.vue
+3
-1
inquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
+2
-2
tenderAnnouncement.vue
src/pages/purchaser/bid/reviewed/tenderAnnouncement.vue
+4
-1
workbench.vue
src/pages/purchaser/bid/workbench.vue
+53
-133
bidOpenhal.vue
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
+17
-13
projectInformation.vue
...es/supply/bid/joinProject/bidStage/projectInformation.vue
+6
-165
seePrice.vue
src/pages/supply/bid/joinProject/bidStage/seePrice.vue
+4
-1
contractManagement.vue
...ges/supply/bid/joinProject/bidSure/contractManagement.vue
+1
-0
workbench.vue
src/pages/supply/bid/joinProject/workbench.vue
+52
-103
seeAnnouncement.vue
src/pages/supply/bid/signupOnline/seeAnnouncement.vue
+5
-2
index.js
src/router/index.js
+5
-0
No files found.
dist.zip
0 → 100644
View file @
fdfbd2b6
File added
src/api/common/list.js
View file @
fdfbd2b6
...
...
@@ -136,6 +136,15 @@ export function biddingProjectId(projectId) {
method
:
'get'
})
}
//获取项目的分类
export
function
projectClassify
(
projectId
)
{
return
request
({
url
:
`project/projectClassify/
${
projectId
}
`
,
method
:
'get'
})
}
// 部署线上
export
function
autodeploy
()
{
...
...
@@ -147,4 +156,4 @@ export function autodeploy() {
name
:
"me"
}
})
}
}
\ No newline at end of file
src/api/purchaser/bid.js
View file @
fdfbd2b6
...
...
@@ -248,6 +248,13 @@ export function messageRecord(projectId) {
method
:
'get'
,
})
}
// 结束开标
export
function
bidFinish
(
projectId
)
{
return
request
({
url
:
`open-bid/finish/
${
projectId
}
`
,
method
:
'get'
,
})
}
// 2.1.5
// 评标管理:变更公告列表
...
...
@@ -397,6 +404,13 @@ export function sentBookList(projectId) {
method
:
'get'
})
}
// 中标通知书提交审核
export
function
sentBookAduit
(
projectId
)
{
return
request
({
url
:
`/tender-decide/winner/sentBook/aduit/
${
projectId
}
`
,
method
:
'put'
})
}
// 保存/编辑中标通知书
export
function
editSentBook
(
data
)
{
return
request
({
...
...
@@ -405,6 +419,7 @@ export function editSentBook(data) {
data
:
data
})
}
// 招标结果通知书列表
export
function
resultBookList
(
projectId
)
{
return
request
({
...
...
@@ -412,7 +427,7 @@ export function resultBookList(projectId) {
method
:
'get'
})
}
// 保存/编辑
中标
通知书
// 保存/编辑
招标结果
通知书
export
function
editResultBook
(
data
)
{
return
request
({
url
:
"/tender-decide/resultBook/save"
,
...
...
@@ -420,6 +435,15 @@ export function editResultBook(data) {
data
:
data
})
}
// 招标结果提交审核
export
function
resultBookAduit
(
projectId
)
{
return
request
({
url
:
`/tender-decide/resultBook/aduit/
${
projectId
}
`
,
method
:
'put'
})
}
// 合同管理保存
export
function
contract
(
data
)
{
return
request
({
...
...
@@ -469,10 +493,6 @@ export function winPersonInfo(projectId) {
// 标书费提交
export
function
operationAduit
(
data
)
{
return
request
({
...
...
@@ -483,8 +503,6 @@ export function operationAduit(data) {
}
// 招标文件下载
export
function
bidBookDownload
(
projectId
)
{
return
request
({
...
...
@@ -492,3 +510,13 @@ export function bidBookDownload(projectId) {
method
:
'get'
,
})
}
// 工作台接口
export
function
projectConsole
(
params
)
{
return
request
({
url
:
"/project/console"
,
method
:
'get'
,
params
:
params
})
}
src/components/detail/noticeDetail.vue
View file @
fdfbd2b6
<
template
>
<div
class=
"noticeDetail"
>
<div
class=
"info_mes"
>
<p>
项目名称:
{{
projectName
}}
</p>
<p>
项目 项目编号:
{{
projectCode
}}
</p>
<p
>
发布日期:
{{
detail
.
createTime
}}
</p>
</div>
<h1>
{{
detail
.
title
}}
</h1>
<div
v-html=
"detail.content"
></div>
<div
class=
"content_list"
>
<div
class=
"flex-item"
>
<div>
附件下载:
</div>
<ul
v-if=
"detail.accessoryVOList"
>
<li
v-for=
"item in detail.accessoryVOList"
:key=
"item.id"
>
<a
:href=
"item.accessoryUrl"
>
{{
item
.
fileName
}}
</a>
</li>
</ul>
<ul
v-else
>
无附件
</ul>
<div
v-if=
"state"
>
<div
class=
"info_mes"
>
<p>
项目名称:
{{
projectName
}}
</p>
<p>
项目 项目编号:
{{
projectCode
}}
</p>
<p
>
发布日期:
{{
detail
.
createTime
}}
</p>
</div>
<h1>
{{
detail
.
title
}}
</h1>
<div
v-html=
"detail.content"
></div>
<div
class=
"content_list"
>
<div
class=
"flex-item"
>
<div>
附件下载:
</div>
<ul
v-if=
"detail.accessoryVOList"
>
<li
v-for=
"item in detail.accessoryVOList"
:key=
"item.id"
>
<a
:href=
"item.accessoryUrl"
>
{{
item
.
fileName
}}
</a>
</li>
</ul>
<ul
v-else
>
无附件
</ul>
</div>
</div>
<slot></slot>
</div>
<div
v-else
class=
"no-notice"
>
未找到该公告详情
</div>
</div>
</
template
>
...
...
@@ -38,7 +44,8 @@
return
{
projectName
:
""
,
projectCode
:
""
,
detail
:
""
detail
:
""
,
state
:
true
}
},
methods
:
{
...
...
@@ -49,7 +56,11 @@
data
,
code
}
=
await
biddingProjectId
(
projectId
)
this
.
detail
=
data
if
(
code
==
200
){
this
.
detail
=
data
}
else
if
(
code
==
500
){
this
.
state
=
false
}
},
},
created
()
{
...
...
@@ -61,6 +72,11 @@
</
script
>
<
style
scoped
>
.no-notice
{
margin-top
:
30px
;
text-align
:
center
;
margin-bottom
:
30px
;
}
.info_mes
{
margin-bottom
:
40px
;
display
:
flex
;
...
...
src/components/detail/priceDetail.vue
View file @
fdfbd2b6
<
template
>
<div
>
<div>
<h1>
{{
projectName
}}
在线询价公告
</h1>
<div
class=
"flex-center"
>
<div
class=
"flex-center"
v-if=
"state"
>
<h6
style=
"margin-right:60px;margin-top:30px"
v-if=
"detail.area"
>
询价所在地:
{{
detail
.
area
}}
</h6>
<h6
style=
"margin-buttom:60px;margin-top:30px"
>
日期:
{{
detail
.
createTime
}}
</h6>
</div>
<div
class=
"form"
>
<div
class=
"form"
v-if=
"state"
>
<h3
style=
"margin-buttom:30px"
>
基本信息
</h3>
<table
border=
"0"
width=
"100%"
height=
"120px"
>
<tr>
...
...
@@ -68,6 +68,10 @@
</div>
<div
v-html=
"detail.commercialRequirements"
></div>
</div>
<slot></slot>
</div>
<div
v-if=
"!state"
class=
"no-notice"
>
未找到该公告详情
</div>
</div>
</
template
>
...
...
@@ -86,6 +90,7 @@
},
data
()
{
return
{
state
:
true
,
tableData
:[],
projectName
:
""
,
detail
:
""
,
...
...
@@ -124,6 +129,9 @@
}
},
methods
:
{
back
()
{
this
.
$router
.
go
(
-
1
)
},
// 获取详情
async
getenquiryProjectId
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
...
...
@@ -131,11 +139,14 @@
data
,
code
}
=
await
enquiryProjectId
(
projectId
)
data
.
endTime
=
getTime1
(
data
.
endTime
)
data
.
startTime
=
getTime1
(
data
.
startTime
)
data
.
createTime
=
data
.
createTime
.
substring
(
0
,
10
)
this
.
detail
=
data
if
(
code
==
200
){
data
.
endTime
=
getTime1
(
data
.
endTime
)
data
.
startTime
=
getTime1
(
data
.
startTime
)
data
.
createTime
=
data
.
createTime
.
substring
(
0
,
10
)
this
.
detail
=
data
}
else
if
(
code
==
500
){
this
.
state
=
false
}
},
},
created
()
{
...
...
@@ -146,6 +157,11 @@
</
script
>
<
style
scoped
>
.no-notice
{
margin-top
:
30px
;
text-align
:
center
;
margin-bottom
:
30px
;
}
.filelist
{
box-sizing
:
border-box
;
padding
:
20px
...
...
src/components/detail/projectDetail.vue
0 → 100644
View file @
fdfbd2b6
<
template
>
<div
class=
"message"
>
<!-- 基本信息 -->
<div>
<div
class=
"describe"
>
基本信息
</div>
<div
class=
"message-form"
>
<div>
项目名称:
{{
projectdetail
.
projectName
}}
</div>
<div
class=
"flex-between"
>
<div>
项目编号:
{{
projectdetail
.
projectCode
}}
</div>
<div>
项目分类:
{{
projectdetail
.
classifyName
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
采购单位:
{{
projectdetail
.
purchaseAgent
}}
</div>
<div>
项目归属行业:
{{
projectdetail
.
industry
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
项目归属地区:
{{
projectdetail
.
local
}}
</div>
<div>
最小投标单位数:
{{
projectdetail
.
minTender
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
招标联系人:
{{
projectdetail
.
contacts
}}
</div>
<div>
联系方式:
{{
projectdetail
.
contactsWay
}}
</div>
</div>
</div>
</div>
<!-- 标书费用 -->
<div>
<div
class=
"describe"
>
标书费用信息
</div>
<div
class=
"message-form"
>
<div
class=
"flex-between"
>
<div>
标书费结算账号:
{{
projectdetail
.
bidBookInfoDO
.
account
}}
</div>
<div>
标书费结算开户行:
{{
projectdetail
.
bidBookInfoDO
.
bank
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
标书费结算账户名:
{{
projectdetail
.
bidBookInfoDO
.
accountName
}}
</div>
<div>
标书费结算联系电话:
{{
projectdetail
.
bidBookInfoDO
.
phone
}}
</div>
</div>
</div>
</div>
<!-- 保证金费用 -->
<div>
<div
class=
"describe"
>
保证金费用信息
</div>
<div
class=
"message-form"
>
<div>
是否需要投标保证金:
{{
projectdetail
.
isNeedEarnest
?
"是"
:
"否"
}}
</div>
<div
class=
'price'
v-if=
"projectdetail.isNeedEarnest"
>
<div>
投标保证金金额:
{{
projectdetail
.
earnestInfoDO
.
money
}}
</div>
<div
class=
"flex-between"
>
<div>
投标保证金结算账号:
{{
projectdetail
.
earnestInfoDO
.
account
}}
</div>
<div>
投标保证金结算开户行:
{{
projectdetail
.
earnestInfoDO
.
bank
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
投标保证金结算账户名:
{{
projectdetail
.
earnestInfoDO
.
userName
}}
</div>
<div>
投标保证金结算联系电话:
{{
projectdetail
.
earnestInfoDO
.
phone
}}
</div>
</div>
</div>
</div>
</div>
<div>
<div
class=
"describe"
>
标的需求
</div>
<dataTable
:table-data=
"projectdetail.commodityVOList"
:columns=
"columns"
:margin-top=
"10"
:margin-bottom=
"0"
>
</dataTable>
</div>
<div
class=
"button"
>
<el-button
@
click=
"back"
>
返回
</el-button>
</div>
</div>
</
template
>
<
script
>
import
{
projectdetail
,
timeInfo
}
from
'@api/supply/bid'
import
dataTable
from
'@components/nopageTable.vue'
export
default
{
components
:
{
dataTable
,
},
data
()
{
return
{
projectdetail
:
""
,
breads
:
[
'投标管理'
,
'我参与的项目'
,
'工作台 '
],
nav
:
[
'供应商'
],
dialogFormVisible
:
false
,
tip
:
'请上传于招标项目相关的文件,如委托单,技术附件,招标方案,项目真是材料等(文件格式PDF,JPG,JPEG,ZIP,RAR,数量不超过20个,单个文件大小不超过25M)'
,
managers
:
[],
belongTypes
:
[],
projectTypes
:
[],
textarea
:
''
,
tableData
:
[],
columns
:
[{
label
:
'标的编码'
,
prop
:
'encoding'
},
{
label
:
'标的名称'
,
prop
:
'bidName'
},
{
label
:
'数量'
,
prop
:
'quantity'
},
{
label
:
'计量单位'
,
prop
:
'unit'
},
{
label
:
'品牌'
,
prop
:
'brand'
},
{
label
:
'规格型号'
,
prop
:
'specification'
},
{
label
:
'标杆价(元)'
,
prop
:
'price'
},
{
label
:
'备注'
,
prop
:
'remark'
},
],
ruleForm
:
{
projectName
:
''
,
projectCode
:
''
,
classify
:
''
,
purchaseAgent
:
''
,
industry
:
''
,
region
:
''
,
minTender
:
''
,
contacts
:
''
,
contactsWay
:
''
,
// 招标方式
bidType
:
0
,
isPublishAd
:
false
,
content
:
''
,
// 标的需求
isNeedEarnest
:
false
,
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
}
}
},
computed
:
{
},
created
()
{
this
.
getprojectdetail
()
this
.
gettimeInfo
()
},
methods
:
{
async
getprojectdetail
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
}
=
await
projectdetail
(
projectId
)
this
.
projectdetail
=
data
},
async
gettimeInfo
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
}
=
await
timeInfo
(
projectId
)
this
.
timeInfo
=
data
},
back
(){
this
.
$router
.
go
(
-
1
)
}
}
}
</
script
>
<
style
>
.message
>
div
{
background
:
#fff
;
margin-bottom
:
30px
;
}
.message-form
>
div
,
.price
>
div
{
margin-bottom
:
10px
}
.message-form
{
width
:
80%
;
margin
:
0
auto
}
.message-form
{
padding-bottom
:
15px
;
}
.message
{
background
:
#F0F2F5
;
}
.button
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
10px
20px
;
}
.bid
{
margin-bottom
:
20px
;
}
</
style
>
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
View file @
fdfbd2b6
...
...
@@ -10,11 +10,14 @@
<p>
截标倒计时:
</p>
<timeDown
:remain-time=
"remaintime"
@
countDowmEnd=
"remaintimeEnd"
></timeDown>
</div>
<div
class=
"flex"
v-show=
"decodeTime"
>
<!--
<div
class=
"flex"
v-show=
"decodeTime"
>
-->
<div
class=
"flex"
v-show=
"openStatus==2"
>
<p>
解密倒计时:
</p>
<timeDown
:remain-time=
"decodeTime"
@
countDowmEnd=
"decodeTimeEnd"
></timeDown>
</div>
<div
class=
"flex"
v-show=
"signatureTime"
>
<!--
<div
class=
"flex"
v-show=
"signatureTime"
>
-->
<div
class=
"flex"
v-show=
"openStatus==2"
>
openStatus==2
<p>
签名倒计时:
</p>
<timeDown
:remain-time=
"signatureTime"
@
countDowmEnd=
"signatureTimeEnd"
></timeDown>
</div>
...
...
@@ -29,7 +32,7 @@
<div
@
click=
"isMessge=true"
>
签到解密签名情况
</div>
</div>
<div
class=
"hal-center"
>
<ul>
<ul
id=
"chatRecord1"
>
<li
v-for=
"(item,index) in halList"
:key=
"index"
class=
"flex-item"
>
<div>
{{
item
.
time
}}
</div>
<div>
{{
item
.
name
}}
</div>
...
...
@@ -40,14 +43,13 @@
<div
class=
"hal-right"
>
<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>
-->
<el-button
v-if=
"endbidButton"
type=
"primary"
@
click=
"end"
style=
"margin-top: 10px;"
>
结束开标
</el-button>
<el-button
v-if=
"openStatus==1"
type=
"primary"
@
click=
"confirm"
style=
"margin-left: 10px;"
:disabled=
"openbidButton"
>
立即开标
</el-button>
<el-button
v-if=
"openStatus==2"
type=
"primary"
@
click=
"end"
style=
"margin-top: 10px;"
:disabled=
"endbidButton"
>
结束开标
</el-button>
</div>
</div>
<!-- 在线对话 -->
<div
class=
"dialogue"
style=
"margin-top: 30px;"
v-show=
"dialogue"
>
<ul
class=
"dialogueList"
id=
"chat
Container
"
>
<ul
class=
"dialogueList"
id=
"chat
Record
"
>
<li
v-for=
"(item,index) in dialogueList"
:key=
"index"
:class=
"myId==item.userId?'flex-left':'flex-right'"
>
<div>
<div
class=
"flex-item"
>
...
...
@@ -59,13 +61,13 @@
</div>
</li>
</ul>
<el-input
placeholder=
"请输入内容"
v-model
.
trim
=
"content"
clearable
@
keyup
.
enter
.
native=
"send"
maxlength=
"30"
>
<el-input
placeholder=
"请输入内容"
v-model=
"content"
clearable
@
keyup
.
enter
.
native=
"send"
maxlength=
"30"
>
</el-input>
</div>
</div>
<!-- 最下面一栏 -->
<div
class=
"flex-between buttons"
>
<el-button
@
click=
"isfailInfo=true"
v-if=
"
isfail
"
>
流标
</el-button>
<el-button
@
click=
"isfailInfo=true"
v-if=
"
!isFailed
"
>
流标
</el-button>
<el-button
@
click=
"failDetail"
v-else
>
流标信息
</el-button>
<div>
<el-button
icon=
"el-icon-refresh"
>
刷新
</el-button>
...
...
@@ -142,7 +144,7 @@
<div>
{{userName}}
</div>
</el-form-item>
<el-form-item
label=
"流标原因"
prop=
"reason"
>
<el-input
v-model
.
trim=
"form.reason"
maxlength=
"300"
type=
"textarea"
:rows=
"2"
></el-input>
<el-input
v-model
.
trim=
"form.reason"
maxlength=
"300"
type=
"textarea"
:rows=
"2"
></el-input>
</el-form-item>
<el-form-item
label=
"上传附件"
>
<singleUpload
:limit=
"1"
:max=
"10"
tip=
"支持上传1份附件,不差过10M."
@
input=
"getfile"
></singleUpload>
...
...
@@ -185,7 +187,8 @@
signdetail
,
startbid
,
openbidFailed
,
bidFaileddetail
bidFaileddetail
,
bidFinish
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
timeDown
from
'@components/timeDown.vue'
...
...
@@ -202,12 +205,13 @@
},
data
()
{
return
{
openStatus
:
''
,
faildetail
:
""
,
isfailDetail
:
false
,
projectCode
:
""
,
projectName
:
""
,
userName
:
""
,
is
fail
:
true
,
is
Failed
:
true
,
rules
:
{
reason
:
[{
required
:
true
,
...
...
@@ -280,10 +284,9 @@
dialogueList
:
[],
myId
:
""
,
leftmessage
:
""
,
timer
:
""
timer
:
""
}
},
created
()
{
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
...
...
@@ -298,20 +301,40 @@
// 中国标准时间
let
currentTime
=
getTime
()
this
.
currentTime
=
currentTime
this
.
timer1
=
setInterval
(()
=>
{
this
.
timer1
=
setInterval
(()
=>
{
let
currentTime
=
getTime
()
this
.
currentTime
=
currentTime
},
1000
)
// websocket
this
.
createWebSocket
()
// 长轮训获取
this
.
timer
=
setInterval
(()
=>
{
this
.
getstartInfo
()
},
5000
);
this
.
timer
=
setInterval
(()
=>
{
this
.
getstartInfo
()
},
5000
);
},
methods
:
{
end
()
{
async
end
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
msg
,
code
}
=
await
bidFinish
(
projectId
)
if
(
code
==
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
},
down
(
url
)
{
window
.
open
(
url
)
...
...
@@ -342,11 +365,11 @@
if
(
code
===
200
)
{
this
.
$message
.
success
(
msg
)
this
.
isfailInfo
=
false
this
.
is
fail
=
false
this
.
is
Failed
=
false
}
else
if
(
code
===
500
)
{
this
.
$message
.
error
(
msg
)
this
.
isfailInfo
=
false
this
.
is
fail
=
false
this
.
is
Failed
=
false
}
}
}
catch
(
e
)
{
...
...
@@ -389,6 +412,8 @@
}
=
await
startInfo
(
projectId
)
if
(
code
==
200
)
{
this
.
startDetail
=
data
this
.
openStatus
=
data
.
openStatus
this
.
isFailed
=
data
.
isFailed
}
}
catch
(
e
)
{
console
.
log
(
e
)
...
...
@@ -466,7 +491,8 @@
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
code
code
,
msg
}
=
await
startbid
(
projectId
)
if
(
code
==
200
)
{
this
.
isOpenbid
=
false
...
...
@@ -478,6 +504,11 @@
message
:
'开标成功'
,
type
:
'success'
})
}
else
{
this
.
$message
({
message
:
msg
,
type
:
'error'
})
}
}
catch
(
e
)
{
console
.
log
(
e
)
...
...
@@ -499,10 +530,10 @@
},
// 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
+
"/"
+
token
)
//
this.websocket = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
// this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId + "/" + token
)
this
.
websocket
=
new
WebSocket
(
'ws://60.205.251.80:8085/webSocket/'
+
projectId
+
"/"
+
token
)
// 连接成功时
this
.
websocket
.
onopen
=
()
=>
{}
this
.
websocket
.
onmessage
=
event
=>
{
...
...
@@ -529,38 +560,39 @@
},
send
()
{
let
content
=
this
.
content
;
this
.
websocket
.
send
(
content
)
if
(
content
.
split
(
" "
).
join
(
""
).
length
==
0
){
this
.
$message
.
error
(
"请输入内容"
)
}
else
{
this
.
websocket
.
send
(
content
)
}
}
},
// watch: {
// chatlog() {
// console.log("chatlog change");
// this.$nextTick(() => {
// var container = this.$el.querySelector("#chatContainer");
// console.log(container);
// container.scrollTop = container.scrollHeight;
// })
// // document.getElementById('chatContainer').scrollTop = document.getElementById('chatContainer').scrollHeight+150;
// }
// },
destroyed
()
{
//清除定时器
clearInterval
(
this
.
timer
);
clearInterval
(
this
.
timer1
);
}
updated
(){
// 聊天定位到底部
let
ele
=
document
.
getElementById
(
'chatRecord'
);
ele
.
scrollTop
=
ele
.
scrollHeight
;
let
ele1
=
document
.
getElementById
(
'chatRecord1'
);
ele1
.
scrollTop
=
ele1
.
scrollHeight
;
},
destroyed
()
{
//清除定时器
clearInterval
(
this
.
timer
);
clearInterval
(
this
.
timer1
);
}
}
</
script
>
<
style
scoped
>
.flex-left
{
.flex-left
{
display
:
flex
;
justify-content
:
flex-start
;
}
.flex-right
{
.flex-right
{
display
:
flex
;
justify-content
:
flex-end
;
}
.dialogue
{
position
:
absolute
;
top
:
10%
;
...
...
src/pages/purchaser/bid/bidStage/bidSet.vue
View file @
fdfbd2b6
...
...
@@ -25,7 +25,7 @@
<div>
<el-form-item
label=
"开标人"
prop=
"bidOpener"
>
<el-select
v-model=
"ruleForm.bidOpener"
placeholder=
"请选择"
style=
"width: 250px;"
>
<el-option
v-for=
"item in
bidOpener
s"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
<el-option
v-for=
"item in
option
s"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
...
...
@@ -55,9 +55,7 @@
</div>
</div>
</
template
>
<
script
>
import
{
bidsetting
}
from
'@api/purchaser/bid'
import
{
opener
,
mamager
}
from
'@api/common/list'
import
dataTable
from
'@components/dataTable.vue'
...
...
@@ -134,7 +132,7 @@ export default {
code
}
=
await
mamager
(
projectId
)
if
(
code
===
200
)
{
this
.
bidOpeners
=
data
this
.
ruleForm
.
bidOpener
=
data
}
},
//提交表单
...
...
src/pages/purchaser/bid/bidStage/changeList/changeList.vue
View file @
fdfbd2b6
...
...
@@ -50,7 +50,7 @@ export default {
},
{
label
:
'状态'
,
prop
:
'Status'
prop
:
'
project
Status'
},
{
label
:
'备注'
,
...
...
src/pages/purchaser/bid/bidStage/clearManagement/propose.vue
View file @
fdfbd2b6
...
...
@@ -49,6 +49,14 @@ export default {
quillEditor
},
data
()
{
let
checkSpace
=
(
rule
,
value
,
callback
)
=>
{
console
.
log
(
value
.
split
(
" "
).
join
(
""
).
length
)
if
(
value
.
split
(
" "
).
join
(
""
).
length
==
0
)
{
callback
(
new
Error
(
'请输入'
))
}
else
{
callback
()
}
}
return
{
accessoryPOList
:
[],
editorOption
:
{},
...
...
@@ -61,23 +69,22 @@ export default {
title
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blu
e
'
trigger
:
'blu
r
'
}],
release
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blu
e
'
trigger
:
'blu
r
'
}],
// file: [{
// required: true,
// message: '请输入',
// trigger: 'blue'
// }],
content
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}]
trigger
:
'blur'
},
{
validator
:
checkSpace
,
trigger
:
'blur'
}]
}
}
},
...
...
src/pages/purchaser/bid/bidStage/failList/failNotice.vue
View file @
fdfbd2b6
<
template
>
<div>
<div
class=
"content-head"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<h3>
{{
title
}}
</h3>
<h5>
{{
title
}}
</h5>
</div>
<div
class=
"content"
>
<div
class=
"describe"
>
流标公告
</div>
<div
class=
"form"
>
<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"
placeholder=
"请输入"
maxlength=
"30"
></el-input>
</el-form-item>
<el-form-item
label=
"上传附件"
prop=
"file
"
>
<singleUpload
tip=
"支持扩展名:.rar .zip .doc .docx .pdf .jpg..."
@
input=
"getfile"
></singleUpload>
</el-form-item>
<el-form-item
label=
"公告内容"
prop=
"content"
>
<quill-editor
ref=
"text"
v-model=
"ruleForm.content"
:options=
"editorOption"
class=
"myQuillEditor"
/>
</el-form-item>
</el-form>
<div
class=
"button"
>
<el-button
@
click=
"cancle"
>
取消
</el-button>
<el-button
type=
"primary
"
>
提交审核
</el-button>
</div>
</div>
</div>
</div>
<div>
<div
class=
"content-head"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<h3>
{{
title
}}
</h3>
<h5>
{{
title
}}
</h5>
</div>
<div
class=
"content"
>
<div
class=
"describe"
>
流标公告
</div>
<div
class=
"form"
>
<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"
placeholder=
"请输入"
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"
>
<quill-editor
ref=
"text"
v-model=
"ruleForm.content"
:options=
"editorOption"
class=
"myQuillEditor"
/>
</el-form-item>
</el-form>
<div
class=
"button"
>
<el-button
@
click=
"cancle"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"submit
"
>
提交审核
</el-button>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
createAbortive
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
import
{
quillEditor
}
from
'vue-quill-editor'
import
'quill/dist/quill.core.css'
import
'quill/dist/quill.snow.css'
import
'quill/dist/quill.bubble.css'
export
default
{
components
:
{
dataBreadcrumb
,
singleUpload
,
quillEditor
},
data
()
{
return
{
editorOption
:
{},
title
:
'发布流标公告'
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
ruleForm
:
{
title
:
''
,
content
:
''
,
accessoryPOList
:
[]
},
rules
:
{
title
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
release
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
file
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
content
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}]
}
}
},
created
()
{
let
type
=
this
.
$route
.
query
.
type
console
.
log
(
type
)
if
(
type
===
'modify'
)
{
this
.
ruleForm
=
{
title
:
'修改'
,
content
:
'大修改'
}
this
.
title
=
'修改流标公告'
}
},
methods
:
{
cancle
()
{
this
.
$router
.
go
(
-
1
)
},
//提交表单
async
submit
()
{
let
ruleForm
=
this
.
ruleForm
ruleForm
.
projectId
=
1
let
type
=
this
.
$route
.
query
.
type
if
(
type
===
'modify'
)
{
ruleForm
.
changeId
=
1
}
try
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
const
{
code
,
msg
}
=
await
createAbortive
(
this
.
ruleForm
)
if
(
code
===
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
})
// this.$router.go(-1)
}
}
}
catch
(
err
)
{
console
.
log
(
err
)
}
}
}
import
{
createAbortive
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
import
{
quillEditor
}
from
'vue-quill-editor'
import
'quill/dist/quill.core.css'
import
'quill/dist/quill.snow.css'
import
'quill/dist/quill.bubble.css'
export
default
{
components
:
{
dataBreadcrumb
,
singleUpload
,
quillEditor
},
data
()
{
return
{
editorOption
:
{},
title
:
'发布流标公告'
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
ruleForm
:
{
title
:
''
,
content
:
''
,
accessoryPOList
:
[]
},
rules
:
{
title
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
release
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
content
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}]
}
}
},
created
()
{
let
type
=
this
.
$route
.
query
.
type
console
.
log
(
type
)
if
(
type
===
'modify'
)
{
this
.
ruleForm
=
{
title
:
'修改'
,
content
:
'大修改'
}
this
.
title
=
'修改流标公告'
}
},
methods
:
{
getfile
(
val
){
this
.
ruleForm
.
accessoryPOList
=
val
},
cancle
()
{
this
.
$router
.
go
(
-
1
)
},
//提交表单
async
submit
()
{
let
ruleForm
=
this
.
ruleForm
ruleForm
.
projectId
=
1
let
type
=
this
.
$route
.
query
.
type
if
(
type
===
'modify'
)
{
ruleForm
.
changeId
=
1
}
try
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
const
{
code
,
msg
}
=
await
createAbortive
(
this
.
ruleForm
)
if
(
code
===
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
err
)
{
console
.
log
(
err
)
}
}
}
}
}
</
script
>
...
...
src/pages/purchaser/bid/bidStage/projectInformation.vue
0 → 100644
View file @
fdfbd2b6
<
template
>
<div>
<div
class=
"content-head"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<h3>
项目信息
</h3>
<h5>
查看项目信息
</h5>
</div>
<div
class=
"othercontent"
>
<projectDetail></projectDetail>
</div>
</div>
</
template
>
<
script
>
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
projectDetail
from
'@components/detail/projectDetail.vue'
export
default
{
components
:
{
dataBreadcrumb
,
projectDetail
},
data
()
{
return
{
projectdetail
:
""
,
breads
:
[
'投标管理'
,
'我参与的项目'
,
'工作台 '
],
nav
:
[
'供应商'
],
dialogFormVisible
:
false
,
tip
:
'请上传于招标项目相关的文件,如委托单,技术附件,招标方案,项目真是材料等(文件格式PDF,JPG,JPEG,ZIP,RAR,数量不超过20个,单个文件大小不超过25M)'
,
managers
:
[],
belongTypes
:
[],
projectTypes
:
[],
textarea
:
''
,
ruleForm
:
{
projectName
:
''
,
projectCode
:
''
,
classify
:
''
,
purchaseAgent
:
''
,
industry
:
''
,
region
:
''
,
minTender
:
''
,
contacts
:
''
,
contactsWay
:
''
,
// 招标方式
bidType
:
0
,
isPublishAd
:
false
,
content
:
''
,
// 标的需求
isNeedEarnest
:
false
,
provinceId
:
''
,
cityId
:
''
,
districtId
:
''
}
}
},
computed
:
{
},
}
</
script
>
<
style
scoped
>
.message
>
div
{
background
:
#fff
;
margin-bottom
:
30px
;
}
.message-form
>
div
,
.price
>
div
{
margin-bottom
:
10px
}
.message-form
{
width
:
80%
;
margin
:
0
auto
}
.message-form
{
padding-bottom
:
15px
;
}
.message
{
background
:
#F0F2F5
;
}
.button
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
10px
20px
;
}
.bid
{
margin-bottom
:
20px
;
}
</
style
>
src/pages/purchaser/bid/bidSure/bidResult/edit.vue
View file @
fdfbd2b6
...
...
@@ -12,25 +12,25 @@
<div>
项目名称:
{{
projectName
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
日期:
{{
date
}}
</div>
<div>
中标金额:100.00元
</div>
<div>
日期:
{{
winDate
}}
</div>
<div>
中标金额:
{{
money
}}
</div>
</div>
<div
class=
"flex-between"
>
<div
class=
"flex"
>
<div
>
上传附件:
</div>
<singleUpload
tips=
"支持上传一个pdf格式文件,大小不超过100M。
"
></singleUpload>
<singleUpload
:limit=
'1'
tip=
"支持上传一个pdf格式文件,大小不超过100M。"
accept=
'.pdf'
@
input=
"getfile
"
></singleUpload>
</div>
<div>
<el-form
ref=
"ruleForm"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"150px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"招标结果通知书编号"
prop=
"
code
"
>
<el-input
v-model
.
trim=
"ruleForm.
code
"
oninput=
"value=value.replace(/[^\d]/g,'')"
></el-input>
<el-form-item
label=
"招标结果通知书编号"
prop=
"
number
"
>
<el-input
v-model
.
trim=
"ruleForm.
number
"
oninput=
"value=value.replace(/[^\d]/g,'')"
></el-input>
</el-form-item>
</el-form>
</div>
</div>
<div
class=
"flex-center button"
>
<el-button
>
取消
</el-button>
<el-button
type=
"primary
"
>
保存
</el-button>
<el-button
@
click=
"back"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"submitData
"
>
保存
</el-button>
</div>
</div>
</div>
...
...
@@ -38,6 +38,7 @@
</
template
>
<
script
>
import
{
editResultBook
}
from
'@api/purchaser/bid'
import
dataTable
from
'@components/dataTable.vue'
import
singleUpload
from
'@components/Upload/singleUpload.vue'
export
default
{
...
...
@@ -48,13 +49,16 @@ export default {
},
data
()
{
return
{
money
:
""
,
winDate
:
""
,
projectCode
:
""
,
projectName
:
""
,
ruleForm
:
{
code
:
''
number
:
''
,
fileList
:[]
},
rules
:
{
code
:
[{
number
:
[{
required
:
true
,
message
:
'请填写编号'
,
trigger
:
'blur'
...
...
@@ -65,22 +69,47 @@ export default {
}
},
created
()
{
this
.
resultId
=
this
.
$route
.
query
.
id
;
this
.
money
=
this
.
$route
.
query
.
money
this
.
winDate
=
this
.
$route
.
query
.
winDate
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
addDate
()
},
methods
:
{
addDate
()
{
let
nowDate
=
new
Date
()
let
date
=
{
year
:
nowDate
.
getFullYear
(),
month
:
nowDate
.
getMonth
()
+
1
,
date
:
nowDate
.
getDate
()
methods
:
{
back
(){
this
.
$router
.
go
(
-
1
)
},
getfile
(
val
){
this
.
ruleForm
.
fileList
=
val
},
//提交表单
async
submitData
()
{
try
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
let
ruleForm
=
this
.
ruleForm
;
ruleForm
.
id
=
this
.
resultId
ruleForm
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
ruleForm
.
companyId
=
localStorage
.
getItem
(
"companyId"
)
const
{
code
,
msg
}
=
await
editResultBook
(
ruleForm
);
if
(
code
===
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
let
systemDate
=
date
.
year
+
'-'
+
0
+
date
.
month
+
'-'
+
0
+
date
.
date
this
.
date
=
systemDate
}
}
}
}
</
script
>
...
...
src/pages/purchaser/bid/bidSure/bidResult/list.vue
View file @
fdfbd2b6
...
...
@@ -18,14 +18,18 @@
</dataTable>
<div
class=
"button flex-center"
>
<el-button
@
click=
"back"
>
返回
</el-button>
<el-button
type=
"primary"
>
提交审核
</el-button>
<el-button
type=
"primary"
@
click=
"submitData"
>
提交审核
</el-button>
</div>
</div>
</div>
</template>
<
script
>
import
dataTable
from
'@components/dataTable.vue'
import
{
resultBookList
,
resultBookAduit
}
from
'@api/purchaser/bid'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
export
default
{
...
...
@@ -68,26 +72,66 @@ export default {
slot
:
'operate'
}
],
// 操作列
pageObj
:
{
size
:
10
,
total
:
1
,
currentPage
:
1
,
sizes
:
[
100
,
200
,
300
],
func
:
(
currentPage
)
=>
{
this
.
pageTurning
(
currentPage
)
}
}
}
},
methods
:
{
examine
()
{
this
.
$router
.
push
(
'/admin/bid/bidingDetail'
)
},
back
()
{
this
.
$router
.
go
(
-
1
)
}
}
methods
:
{
edit
(
row
)
{
this
.
$router
.
push
(
`/purchaser/bid/bidSure/bidResult/edit?id=
${
row
.
id
}
&winDate=
${
row
.
winDate
}
&money=
${
row
.
money
}
`
)
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
// 获取列表
async
getresultBookList
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
);
const
{
data
,
code
}
=
await
resultBookList
(
projectId
)
if
(
code
===
200
)
{
for
(
let
item
of
data
)
{
if
(
item
.
status
==
0
)
{
item
.
state
=
"未审核"
}
else
if
(
item
.
status
==
1
)
{
item
.
state
=
"通过审核"
}
else
if
(
item
.
status
==
2
)
{
item
.
state
=
"未通过审核"
}
else
if
(
item
.
status
==
-
1
)
{
item
.
state
=
"暂存本地"
}
}
this
.
tableData
=
data
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
},
async
submitData
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
msg
,
code
}
=
await
resultBookAduit
(
projectId
)
if
(
code
==
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
}
}
</
script
>
...
...
src/pages/purchaser/bid/bidSure/contract.vue
View file @
fdfbd2b6
This diff is collapsed.
Click to expand it.
src/pages/purchaser/bid/bidSure/determine.vue
View file @
fdfbd2b6
...
...
@@ -10,7 +10,7 @@
<div
style=
"margin-right: 100px;"
>
项目名称:
{{
projectName
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
项目分类:
货物
</div>
<div>
项目分类:
{{
classify
}}
</div>
<div
class=
"flex"
>
<div
class=
"adjustment"
>
上传附件:
</div>
<singleUpload
:limit=
"1"
tip=
"支持上传1个附件,不超过20M"
@
input=
"getfile"
></singleUpload>
...
...
@@ -20,8 +20,8 @@
<div
class=
"form"
>
<h3>
确定中标人
</h3>
<el-radio-group
v-model=
"companyId"
>
<el-radio
:label=
"item.companyId"
v-for=
"(item,index) in tableData"
:key=
"index"
>
{{
item
.
companyName
}}
</el-radio>
</el-radio-group>
<el-radio
:label=
"item.companyId"
v-for=
"(item,index) in tableData"
:key=
"index"
>
{{
item
.
companyName
}}
</el-radio>
</el-radio-group>
<h3
style=
"margin-top:30px"
>
说明
</h3>
<el-input
:rows=
"3"
v-model
.
trim=
"content"
type=
"textarea"
placeholder=
"请输入内容"
maxlength=
"300"
>
</el-input>
...
...
@@ -41,7 +41,9 @@
candidate
,
winnerSave
}
from
'@api/purchaser/bid'
import
{
projectClassify
}
from
'@api/common/list'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
...
...
@@ -55,10 +57,11 @@
},
data
()
{
return
{
projectCode
:
""
,
projectName
:
""
,
file
:[],
companyId
:
""
,
classify
:
""
,
projectCode
:
""
,
projectName
:
""
,
file
:
[],
companyId
:
""
,
projectId
:
2
,
content
:
''
,
navs
:
[
'确认中标人'
],
...
...
@@ -85,12 +88,13 @@
},
created
()
{
this
.
getcandidate
();
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getprojectClassify
();
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
},
methods
:
{
getfile
(
val
){
this
.
file
=
val
getfile
(
val
)
{
this
.
file
=
val
},
back
()
{
this
.
$router
.
go
(
-
1
)
...
...
@@ -116,14 +120,27 @@
console
.
log
(
e
)
}
},
// 获取项目分类
async
getprojectClassify
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
);
try
{
const
{
data
,
code
}
=
await
projectClassify
(
projectId
)
this
.
classify
=
data
;
}
catch
(
e
)
{
console
.
log
(
e
)
}
},
// 提交中标人
async
submitData
()
{
try
{
let
data
=
{};
data
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
data
.
companyId
=
this
.
companyId
data
.
remark
=
this
.
remark
;
data
.
fileList
=
this
.
file
;
let
data
=
{};
data
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
data
.
companyId
=
this
.
companyId
data
.
remark
=
this
.
remark
;
data
.
fileList
=
this
.
file
;
const
{
msg
,
code
...
...
src/pages/purchaser/bid/bidSure/notice.vue
View file @
fdfbd2b6
...
...
@@ -14,7 +14,8 @@
<div
class=
"flex-between"
>
<div
class=
"flex"
>
<div
class=
"adjustment"
>
上传附件:
</div>
<singleUpload
tips=
"支持上传1个附件,不超过20M"
></singleUpload>
<singleUpload
:limit=
"1"
tip=
"支持上传1个附件,不超过20M"
@
input=
"getfile"
></singleUpload>
</div>
<div>
发布媒体:捷安采官网
</div>
</div>
...
...
@@ -51,7 +52,7 @@
<el-dialog
:visible
.
sync=
"dialogFormVisible"
title=
"收货地址"
width=
"30%"
>
<el-form
:model=
"form"
>
<el-form-item
label-width=
"120px"
label=
"输入中标价"
>
<el-input
v-model=
"form.price"
type=
"number"
autocomplete=
"off"
></el-input
>
<el-input
-number
v-model=
"form.price"
:min=
"0"
:controls=
"false"
:precision=
"2"
placeholder=
"输入"
></el-input-number
>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
...
...
@@ -64,7 +65,8 @@
<
script
>
import
{
createwin
,
winPersonInfo
createwin
,
winPersonInfo
}
from
'@api/purchaser/bid'
import
{
quillEditor
...
...
@@ -74,23 +76,23 @@
import
'quill/dist/quill.bubble.css'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
singleUpload
from
'@components/Upload/
single
Upload.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
export
default
{
components
:
{
dataTable
,
dataBreadcrumb
,
singleUpload
,
singleUpload
,
quillEditor
},
data
()
{
return
{
projectCode
:
""
,
projectName
:
""
,
projectCode
:
""
,
projectName
:
""
,
editorOption
:
{},
file
:
[],
ruleForm
:
{
title
:
''
,
content
:
''
content
:
''
,
accessoryPOList
:[]
},
rules
:
{
title
:
[{
...
...
@@ -108,13 +110,12 @@
price
:
''
},
dialogFormVisible
:
false
,
remark
:
''
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
tableData
:
[],
columns
:
[{
label
:
'中标人'
,
prop
:
'
bidPerson
'
prop
:
'
companyName
'
},
{
label
:
'中标价(元)'
,
...
...
@@ -128,32 +129,32 @@
},
methods
:
{
getfile
(
val
)
{
this
.
file
=
val
this
.
ruleForm
.
accessoryPOList
=
val
},
edit
(
row
)
{
this
.
dialogFormVisible
=
true
this
.
form
=
row
},
// 中标人列表
async
getwinPersonInfo
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
winPersonInfo
(
projectId
)
this
.
tableData
=
data
}
catch
(
e
)
{
console
.
log
(
e
)
}
},
async
getwinPersonInfo
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
winPersonInfo
(
projectId
)
this
.
tableData
.
push
(
data
)
}
catch
(
e
)
{
console
.
log
(
e
)
}
},
async
submitData
()
{
try
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
let
ruleForm
=
this
.
ruleForm
;
ruleForm
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
ruleForm
.
accessoryPOList
=
this
.
fil
e
ruleForm
.
price
=
this
.
tableData
[
0
].
pric
e
const
{
code
,
msg
...
...
@@ -174,11 +175,11 @@
}
}
},
created
()
{
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getwinPersonInfo
();
}
created
()
{
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getwinPersonInfo
();
}
}
</
script
>
...
...
src/pages/purchaser/bid/bidSure/winBid/edit.vue
View file @
fdfbd2b6
...
...
@@ -12,18 +12,18 @@
<div>
项目名称:
{{
projectName
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
日期:
{{
date
}}
</div>
<div>
中标金额:
100.00元
</div>
<div>
日期:
{{
winDate
}}
</div>
<div>
中标金额:
{{
money
}}
</div>
</div>
<div>
<div
class=
"flex"
style=
"margin-bottom:50px"
>
<div
>
上传附件:
</div>
<div
class=
"adjustment"
>
上传附件:
</div>
<singleUpload
:limit=
'1'
tip=
"支持上传一个pdf格式文件,大小不超过100M。"
accept=
'.pdf'
@
input=
"getfile"
></singleUpload>
</div>
<div>
<el-form
ref=
"ruleForm"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"120px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"中标通知书编号"
prop=
"number"
>
<el-input
v-model=
"ruleForm.number"
placeholder=
"请输入"
></el-input>
<el-input
v-model=
"ruleForm.number"
placeholder=
"请输入"
oninput=
"value=value.replace(/[^\d]/g,'')"
></el-input>
</el-form-item>
</el-form>
</div>
...
...
@@ -38,7 +38,6 @@
</
template
>
<
script
>
import
{
getTime
}
from
'@utils/time'
import
{
editSentBook
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
...
...
@@ -50,11 +49,14 @@ export default {
},
data
()
{
return
{
money
:
""
,
winDate
:
""
,
projectCode
:
""
,
projectName
:
""
,
resultId
:
""
,
ruleForm
:
{
number
:
''
number
:
''
,
fileList
:[]
},
rules
:
{
number
:
[{
...
...
@@ -63,14 +65,13 @@ export default {
trigger
:
'blur'
}]
},
date
:
''
,
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
]
}
},
created
()
{
let
date
=
getTime
();
this
.
date
=
date
.
substring
(
0
,
9
)
this
.
resultId
=
this
.
$route
.
query
.
id
;
this
.
money
=
this
.
$route
.
query
.
money
this
.
winDate
=
this
.
$route
.
query
.
winDate
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
},
...
...
@@ -87,13 +88,22 @@ export default {
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
let
ruleForm
=
this
.
ruleForm
;
ruleForm
.
resultI
d
=
this
.
resultId
ruleForm
.
i
d
=
this
.
resultId
ruleForm
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
ruleForm
.
companyId
=
localStorage
.
getItem
(
"companyId"
)
const
{
code
,
msg
}
=
await
editSentBook
(
ruleForm
);
if
(
code
===
2000
)
{
this
.
$success
.
success
(
msg
)
}
if
(
code
===
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
e
)
{
console
.
log
(
e
)
...
...
src/pages/purchaser/bid/bidSure/winBid/list.vue
View file @
fdfbd2b6
<
template
>
<div
>
<div
class=
"content"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
:is-pageobj=
"false"
>
<el-table-column
slot=
"code"
label=
"中标通知书编号"
align=
"center"
fixed=
"right"
>
<template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.code"
></div>
<div
v-else
>
(空)
</div>
</
template
>
</el-table-column>
<el-table-column
slot=
"operate"
label=
"操作"
align=
"center"
fixed=
"right"
width=
"150"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"edit(scope.row.id
)"
>
通知书编辑
</el-button>
</
template
>
</el-table-column>
</dataTable>
<div
class=
"button flex-center"
>
<el-button
@
click=
"back"
>
返回
</el-button>
<el-button
type=
"primary
"
>
提交审核
</el-button>
</div>
</div>
</div>
<div
>
<div
class=
"content"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
:is-pageobj=
"false"
>
<el-table-column
slot=
"code"
label=
"中标通知书编号"
align=
"center"
fixed=
"right"
>
<template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.code"
></div>
<div
v-else
>
(空)
</div>
</
template
>
</el-table-column>
<el-table-column
slot=
"operate"
label=
"操作"
align=
"center"
fixed=
"right"
width=
"150"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"edit(scope.row
)"
>
通知书编辑
</el-button>
</
template
>
</el-table-column>
</dataTable>
<div
class=
"button flex-center"
>
<el-button
@
click=
"back"
>
返回
</el-button>
<el-button
type=
"primary"
@
click=
"submitData
"
>
提交审核
</el-button>
</div>
</div>
</div>
</template>
<
script
>
import
{
sentBookList
}
from
'@api/purchaser/bid'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
export
default
{
components
:
{
dataTable
,
dataBreadcrumb
,
changeNav
},
data
()
{
return
{
projectId
:
2
,
navs
:
[
'中标通知书'
],
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
tableData
:
[],
columns
:
[{
label
:
'投标人'
,
prop
:
'bidder'
},
{
slot
:
'code'
},
{
label
:
'状态'
,
prop
:
'state'
},
{
label
:
'接收人'
,
prop
:
'receiver'
},
{
slot
:
'operate'
}
],
// 操作列
}
},
created
()
{
this
.
getsentBookList
();
},
methods
:
{
edit
(
id
)
{
this
.
$router
.
push
(
`/purchaser/bid/bidSure/winBid/edit?id=
${
id
}
`
)
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
async
getsentBookList
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
);
const
{
data
,
code
}
=
await
sentBookList
(
projectId
)
if
(
code
===
200
)
{
for
(
let
item
of
data
){
item
.
bidder
=
"杭州光海科技有限公司"
item
.
receiver
=
"杭州泰基科技有限公司"
if
(
item
.
status
==
0
){
item
.
state
=
"未审核"
}
else
if
(
item
.
status
==
1
){
item
.
state
=
"审核通过"
}
else
{
item
.
state
=
"未审核"
import
{
sentBookList
,
sentBookAduit
}
from
'@api/purchaser/bid'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
export
default
{
components
:
{
dataTable
,
dataBreadcrumb
,
changeNav
},
data
()
{
return
{
projectId
:
2
,
navs
:
[
'中标通知书'
],
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
tableData
:
[],
columns
:
[{
label
:
'投标人'
,
prop
:
'companyName'
},
{
slot
:
'code'
},
{
label
:
'状态'
,
prop
:
'state'
},
{
label
:
'接收人'
,
prop
:
'companyName'
},
{
slot
:
'operate'
}
],
// 操作列
}
},
created
()
{
this
.
getsentBookList
();
},
methods
:
{
edit
(
row
)
{
this
.
$router
.
push
(
`/purchaser/bid/bidSure/winBid/edit?id=
${
row
.
id
}
&winDate=
${
row
.
winDate
}
&money=
${
row
.
money
}
`
)
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
// 获取列表
async
getsentBookList
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
);
const
{
data
,
code
}
=
await
sentBookList
(
projectId
)
if
(
code
===
200
)
{
for
(
let
item
of
data
)
{
if
(
item
.
status
==
0
)
{
item
.
state
=
"未审核"
}
else
if
(
item
.
status
==
1
)
{
item
.
state
=
"通过审核"
}
else
if
(
item
.
status
==
2
)
{
item
.
state
=
"未通过审核"
}
else
if
(
item
.
status
==
-
1
)
{
item
.
state
=
"暂存本地"
}
}
this
.
tableData
=
data
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
this
.
tableData
=
data
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
}
}
},
async
submitData
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
msg
,
code
}
=
await
sentBookAduit
(
projectId
)
if
(
code
==
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
,
duration
:
1500
})
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
}
}
</
script
>
<
style
scoped
>
.button
{
.button
{
width
:
100%
;
height
:
400px
;
}
...
...
src/pages/purchaser/bid/releaseProject/message.vue
View file @
fdfbd2b6
...
...
@@ -99,18 +99,18 @@
</el-form-item>
</div>
<div
class=
"flex-between"
>
<el-form-item
label=
"
标书费
结算账号:"
prop=
"account"
>
<el-form-item
label=
"
保证金
结算账号:"
prop=
"account"
>
<el-input
v-model
.
trim=
"earnestInfoPO.account"
placeholder=
"请输入"
maxlength=
"30"
></el-input>
</el-form-item>
<el-form-item
label=
"
标书费
结算开户行:"
prop=
"bank"
>
<el-form-item
label=
"
保证金
结算开户行:"
prop=
"bank"
>
<el-input
v-model
.
trim=
"earnestInfoPO.bank"
placeholder=
"请输入"
maxlength=
"30"
></el-input>
</el-form-item>
</div>
<div
class=
"flex-between"
>
<el-form-item
label=
"
标书费结算账户名:"
prop=
"account
Name"
>
<el-form-item
label=
"
保证金结算账户名:"
prop=
"user
Name"
>
<el-input
v-model
.
trim=
"earnestInfoPO.accountName"
placeholder=
"请输入"
maxlength=
"30"
></el-input>
</el-form-item>
<el-form-item
label=
"
标书费
结算联系电话:"
prop=
"phone"
>
<el-form-item
label=
"
保证金
结算联系电话:"
prop=
"phone"
>
<el-input
v-model
.
trim=
"earnestInfoPO.phone"
placeholder=
"请输入"
maxlength=
"30"
></el-input>
</el-form-item>
</div>
...
...
@@ -440,7 +440,7 @@ export default {
purchaseAgent
:
''
,
industry
:
''
,
region
:
''
,
minTender
:
''
,
minTender
:
3
,
contacts
:
''
,
contactsWay
:
''
,
// 招标方式
...
...
@@ -582,10 +582,11 @@ export default {
// 获取项目经理
async
userList
()
{
let
id
=
localStorage
.
getItem
(
"companyId"
)
const
{
code
,
data
}
=
await
userList
(
1
)
}
=
await
userList
(
id
)
if
(
code
===
200
)
{
this
.
managers
=
data
}
...
...
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
View file @
fdfbd2b6
...
...
@@ -6,19 +6,20 @@
<h5>
查看询价公告
</h5>
</div>
<div
class=
"content"
>
<priceDetail></priceDetail>
<div
class=
'form'
>
<h3>
参与报价供应商情况
</h3>
<dataTable
:table-data=
"Bidderlist"
:columns=
"offerBiddercolumns"
:is-index=
"true"
>
<el-table-column
slot=
"operate"
label=
"操作"
align=
"center"
fixed=
"right"
width=
"200"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"see(scope.row.companyId)"
>
查看报价明细
</el-button>
</
template
>
</el-table-column>
</dataTable>
<div
class=
"centerButton"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
<priceDetail>
<slot>
<h3>
参与报价供应商情况
</h3>
<dataTable
:table-data=
"Bidderlist"
:columns=
"offerBiddercolumns"
:is-index=
"true"
>
<el-table-column
slot=
"operate"
label=
"操作"
align=
"center"
fixed=
"right"
width=
"200"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"see(scope.row.companyId)"
>
查看报价明细
</el-button>
</
template
>
</el-table-column>
</dataTable>
</slot>
</priceDetail>
<div
class=
"centerButton"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
</div>
<el-dialog
title=
"收货地址"
:visible
.
sync=
"dialogFormVisible"
>
...
...
src/pages/purchaser/bid/reviewed/bidInvitation.vue
View file @
fdfbd2b6
...
...
@@ -100,7 +100,9 @@ export default {
type
:
'success'
})
this
.
$router
.
go
(
-
1
)
}
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
err
)
{
console
.
log
(
err
)
...
...
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
View file @
fdfbd2b6
...
...
@@ -29,7 +29,7 @@
</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"
style=
"width: 250px;"
></el-input>
<el-input
v-model
.
trim=
"ruleForm.inquiryCode"
onkeyup=
"value=value.replace(/[^\d]/g,'')"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 250px;"
></el-input>
</el-form-item>
<el-form-item
label=
"采购目录"
prop=
"purchaseCategory"
>
<el-input
v-model
.
trim=
"ruleForm.purchaseCategory"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 250px;"
></el-input>
...
...
@@ -338,7 +338,7 @@ export default {
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
if
(
code
==
500
)
{
}
else
{
this
.
$message
.
error
(
msg
)
}
}
...
...
src/pages/purchaser/bid/reviewed/tenderAnnouncement.vue
View file @
fdfbd2b6
...
...
@@ -22,7 +22,7 @@
</div>
</div>
<div
class=
"bottomButton"
>
<el-button>
取消
</el-button>
<el-button
@
click=
"back"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"submit"
>
提交审核
</el-button>
</div>
</div>
...
...
@@ -78,6 +78,9 @@ export default {
}
},
methods
:
{
back
(){
this
.
$router
.
go
(
-
1
)
},
cancel
()
{
this
.
$router
.
go
(
-
1
)
},
...
...
src/pages/purchaser/bid/workbench.vue
View file @
fdfbd2b6
...
...
@@ -3,25 +3,33 @@
<div
class=
"content"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
<h1>
项目状态:
项目待审核
</h1>
<h1>
项目状态:
{{
remark
}}
</h1>
<div
class=
"flex state"
>
<ul
class=
"flex-left"
>
<!--
<ul
class=
"flex-left"
>
<li
v-for=
"(item,index) in states"
:key=
"index"
class=
"flex"
>
<div>
{{
item
.
title
}}
</div>
<ul
class=
"inside flex"
>
<li
v-for=
"(mods,index) in item.modulars"
:key=
"index"
class=
"flex-center"
>
<!--
<div
:class=
"[mods=='项目信息'||mods=='项目终止'?'active':'']"
>
{{
mods
}}
</div>
-->
<div
class=
"active"
@
click=
"jump(mods.label,mods.url)"
>
{{
mods
.
label
}}
</div>
</li>
</ul>
</li>
</ul>
</ul>
-->
<ul
class=
"flex"
>
<li
v-for=
"(item,index) in states"
:key=
"index"
>
<el-button
type=
"primary"
@
click=
"jump(item.button,item.uri)"
>
{{
item
.
button
}}
</el-button>
</li>
</ul>
</div>
<div
class=
"centerButton"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
projectConsole
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
export
default
{
...
...
@@ -31,136 +39,16 @@ export default {
},
data
()
{
return
{
states
:[],
breads
:
[
'招标管理'
,
'招标项目管理 '
,
'工作台'
],
navs
:
[
'工作台'
],
states
:
[{
title
:
'公告'
,
modulars
:[{
label
:
"变更公告管理"
,
url
:
"/purchaser/bid/bidStage/changeList"
},
{
label
:
"流标公告管理"
,
url
:
"/purchaser/bid/bidStage/failList"
}]
},
{
title
:
'招标'
,
modulars
:[
{
label
:
"发布询价公告"
,
url
:
"/purchaser/bid/reviewed/inquiryAnnouncement"
},
{
label
:
"查看询价公告"
,
url
:
"/purchaser/bid/reviewed/SeeinquiryAnnouncement"
},
{
label
:
"发布招标公告"
,
url
:
"/purchaser/bid/reviewed/tenderAnnouncement"
},
{
label
:
"查看招标公告"
,
url
:
"/purchaser/bid/reviewed/SeetenderAnnouncement"
},
{
label
:
"发布投标邀请书"
,
url
:
"/purchaser/bid/reviewed/bidInvitation"
},
{
label
:
"招标文件澄清管理"
,
url
:
"/purchaser/bid/bidStage/clearManagement"
}]
},
{
title
:
'投标'
,
modulars
:
[{
label
:
"投标信息查看"
,
url
:
"/purchaser/bid/bidStage/tenderInformationlist"
}]
},
{
title
:
'开标'
,
modulars
:
[{
label
:
"开标设置"
,
url
:
"/purchaser/bid/bidStage/bidSet"
},
{
label
:
"开标大厅"
,
url
:
"/purchaser/bid/bidOpen/bidOpenhal"
},
{
label
:
"开标过程记录查看"
,
url
:
"/purchaser/bid/bidEvaluation/hallInformation"
}]
},
{
title
:
'评标'
,
modulars
:
[
{
label
:
"专家评审"
,
url
:
"/purchaser/bid/bidEvaluation/review/review"
},
{
label
:
"项目经理"
,
url
:
"/purchaser/bid/bidEvaluation/projectManager/content"
},
{
label
:
"评标查看"
,
url
:
"/purchaser/bid/bidSure/see"
}]
},
{
title
:
'定标'
,
modulars
:
[
{
label
:
"中标候选人公示"
,
url
:
"/purchaser/bid/bidSure/publicity"
},
{
label
:
"确定中标人"
,
url
:
"/purchaser/bid/bidSure/determine"
},
{
label
:
"重新确定中标人"
,
url
:
"/purchaser/bid/bidSure/determine"
},
{
label
:
"发布中标公告"
,
url
:
"/purchaser/bid/bidSure/notice"
},
{
label
:
"中标通知书处理"
,
url
:
"/purchaser/bid/bidSure/winBid/list"
},
{
label
:
"合同管理"
,
url
:
"/purchaser/bid/bidSure/contract"
}]
},
{
title
:
'费用'
,
modulars
:
[{
label
:
"标书费缴纳管理"
,
url
:
"/purchaser/bid/bidStage/tenderFeelist"
},
{
label
:
"保证金缴纳管理"
,
url
:
"/purchaser/bid/bidStage/bondList"
}]
},
{
title
:
'功能'
,
modulars
:
[{
label
:
"项目终止"
,
url
:
""
}]
}
]
remark
:
""
}
},
methods
:
{
back
(){
this
.
$router
.
go
(
-
1
)
},
async
jump
(
label
,
url
){
console
.
log
(
label
,
url
)
if
(
label
==
"项目终止"
){
...
...
@@ -174,7 +62,30 @@ export default {
}
else
{
this
.
$router
.
push
(
url
)
}
}
},
async
getprojectConsole
()
{
try
{
let
message
=
{}
message
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
message
.
type
=
1
const
{
data
,
msg
,
code
}
=
await
projectConsole
(
message
)
if
(
code
==
200
){
this
.
states
=
data
this
.
remark
=
data
[
0
].
remark
}
else
{
this
.
$message
.
error
(
msg
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
},
created
()
{
this
.
getprojectConsole
()
}
}
</
script
>
...
...
@@ -182,10 +93,19 @@ export default {
<
style
scoped
>
.state
{
margin-top
:
30px
;
margin-left
:
50px
;
/* margin-left: 50px; */
}
.state
>
ul
{
flex-wrap
:
wrap
;
}
.state
>
ul
>
li
{
margin-right
:
50px
;
margin-bottom
:
50px
;
cursor
:
pointer
;
}
.flex-left
>
li
{
/*
.flex-left>li {
font-weight: bold;
font-size: 20px;
height: 50px;
...
...
@@ -210,5 +130,5 @@ export default {
}
.inside>li>.active{
background: #2288EE
}
}
*/
</
style
>
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
View file @
fdfbd2b6
...
...
@@ -28,7 +28,7 @@
</div>
</div>
<div
class=
"hal-center"
>
<ul>
<ul
id=
"chatRecord1"
>
<li
v-for=
"(item,index) in halList"
:key=
"index"
class=
"flex-item"
>
<div>
{{
item
.
time
}}
</div>
<div>
{{
item
.
role
}}
</div>
...
...
@@ -44,7 +44,7 @@
</div>
<!-- 在线对话 -->
<div
class=
"dialogue"
style=
"margin-top: 30px;"
v-show=
"dialogue"
>
<ul
class=
"dialogueList"
id=
"chat
Container
"
>
<ul
class=
"dialogueList"
id=
"chat
Record
"
>
<li
v-for=
"(item,index) in dialogueList"
:key=
"index"
:class=
"myId==item.userId?'flex-left':'flex-right'"
>
<div>
<div
class=
"flex-item"
>
...
...
@@ -56,7 +56,7 @@
</div>
</li>
</ul>
<el-input
placeholder=
"请输入内容"
v-model
.
trim
=
"content"
clearable
@
keyup
.
enter
.
native=
"send"
maxlength=
"30"
>
<el-input
placeholder=
"请输入内容"
v-model=
"content"
clearable
@
keyup
.
enter
.
native=
"send"
maxlength=
"30"
>
</el-input>
</div>
</div>
...
...
@@ -192,13 +192,6 @@
myId
:
""
}
},
watch
:
{
chatlog
()
{
var
container
=
this
.
$el
.
querySelector
(
"#chatContainer"
);
console
.
log
(
container
);
container
.
scrollTop
=
container
.
scrollHeight
;
}
},
mounted
()
{
this
.
add
()
},
...
...
@@ -225,8 +218,8 @@
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 = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
//
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
this
.
websocket
=
new
WebSocket
(
'ws://60.205.251.80:8085/webSocket/'
+
projectId
+
"/"
+
token
)
// 连接成功时
this
.
websocket
.
onopen
=
()
=>
{}
this
.
websocket
.
onmessage
=
event
=>
{
...
...
@@ -253,8 +246,12 @@
})
},
send
()
{
let
content
=
this
.
content
;
let
content
=
this
.
content
;
if
(
content
.
split
(
" "
).
join
(
""
).
length
==
0
){
this
.
$message
.
error
(
"请输入内容"
)
}
else
{
this
.
websocket
.
send
(
content
)
}
},
back
()
{
this
.
$router
.
go
(
-
1
)
...
...
@@ -345,6 +342,13 @@
}
},
},
updated
(){
// 聊天定位到底部
let
ele
=
document
.
getElementById
(
'chatRecord'
);
ele
.
scrollTop
=
ele
.
scrollHeight
;
let
ele1
=
document
.
getElementById
(
'chatRecord1'
);
ele1
.
scrollTop
=
ele1
.
scrollHeight
;
},
destroyed
()
{
//清除定时器
clearInterval
(
this
.
timer1
);
...
...
src/pages/supply/bid/joinProject/bidStage/projectInformation.vue
View file @
fdfbd2b6
...
...
@@ -6,92 +6,22 @@
<h5>
查看项目信息
</h5>
</div>
<div
class=
"othercontent"
>
<div
class=
"message"
>
<!-- 基本信息 -->
<div>
<div
class=
"describe"
>
基本信息
</div>
<div
class=
"message-form"
>
<div>
项目名称:
{{
projectdetail
.
projectName
}}
</div>
<div
class=
"flex-between"
>
<div>
项目编号:
{{
projectdetail
.
projectCode
}}
</div>
<div>
项目分类:
{{
projectdetail
.
classify
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
采购单位:
{{
projectdetail
.
purchaseAgent
}}
</div>
<div>
项目归属行业:
{{
projectdetail
.
industry
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
项目归属地区:
{{
projectdetail
.
local
}}
</div>
<div>
最小投标单位数:
{{
projectdetail
.
minTender
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
招标联系人:
{{
projectdetail
.
contacts
}}
</div>
<div>
联系方式:
{{
projectdetail
.
contactsWay
}}
</div>
</div>
</div>
</div>
<!-- 标书费用 -->
<div>
<div
class=
"describe"
>
标书费用信息
</div>
<div
class=
"message-form"
>
<div
class=
"flex-between"
>
<div>
标书费结算账号:
{{
projectdetail
.
account
}}
</div>
<div>
标书费结算开户行:
{{
projectdetail
.
bank
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
标书费结算账户名:
{{
projectdetail
.
accountName
}}
</div>
<div>
标书费结算联系电话:
{{
projectdetail
.
phone
}}
</div>
</div>
</div>
</div>
<!-- 保证金费用 -->
<div>
<div
class=
"describe"
>
保证金费用信息
</div>
<div
class=
"message-form"
>
<div>
是否需要投标保证金:
{{
projectdetail
.
isNeedEarnest
}}
</div>
<div>
投标保证金金额:
{{
projectdetail
.
money
}}
</div>
<div
class=
"flex-between"
>
<div>
投标保证金结算账号:
{{
projectdetail
.
account
}}
</div>
<div>
投标保证金结算开户行:
{{
projectdetail
.
bank
}}
</div>
</div>
<div
class=
"flex-between"
>
<div>
投标保证金结算账户名:
{{
projectdetail
.
accountName
}}
</div>
<div>
投标保证金结算联系电话:
{{
projectdetail
.
phone
}}
</div>
</div>
</div>
</div>
<div>
<div
class=
"describe"
>
标的需求
</div>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
:margin-top=
"10"
:margin-bottom=
"0"
>
<el-table-column
slot=
"operate"
label=
"操作"
align=
"center"
fixed=
"right"
width=
"100"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</dataTable>
</div>
<div
class=
"button"
>
<el-button
@
click=
"back"
>
返回
</el-button>
</div>
</div>
<projectDetail></projectDetail>
</div>
</div>
</
template
>
<
script
>
import
{
projectdetail
,
timeInfo
}
from
'@api/supply/bid'
import
dataTable
from
'@components/nopageTable.vue'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
projectDetail
from
'@components/detail/projectDetail.vue'
export
default
{
components
:
{
data
Table
,
dataBreadcrumb
data
Breadcrumb
,
projectDetail
},
data
()
{
return
{
projectdetail
:
""
,
projectdetail
:
""
,
breads
:
[
'投标管理'
,
'我参与的项目'
,
'工作台 '
],
nav
:
[
'供应商'
],
dialogFormVisible
:
false
,
...
...
@@ -100,44 +30,6 @@ export default {
belongTypes
:
[],
projectTypes
:
[],
textarea
:
''
,
tableData
:
[],
columns
:
[{
label
:
'标的编码'
,
prop
:
'code'
},
{
label
:
'标的名称'
,
prop
:
'name'
},
{
label
:
'数量'
,
prop
:
'number'
},
{
label
:
'计量单位'
,
prop
:
'meter'
},
{
label
:
'品牌'
,
prop
:
'brand'
},
{
label
:
'规格型号'
,
prop
:
'model'
},
{
label
:
'标杆价(元)'
,
prop
:
'price'
},
{
label
:
'备注'
,
prop
:
'remark'
},
{
slot
:
'operate'
}
],
ruleForm
:
{
projectName
:
''
,
projectCode
:
''
,
...
...
@@ -163,60 +55,9 @@ export default {
computed
:
{
},
created
()
{
this
.
getprojectdetail
()
this
.
gettimeInfo
()
},
methods
:
{
async
getprojectdetail
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
}
=
await
projectdetail
(
projectId
)
this
.
projectdetail
=
data
},
async
gettimeInfo
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
}
=
await
timeInfo
(
projectId
)
this
.
timeInfo
=
data
},
back
(){
this
.
$router
.
go
(
-
1
)
}
}
}
</
script
>
<
style
scoped
>
.message
>
div
{
background
:
#fff
;
margin-bottom
:
30px
;
}
.message-form
>
div
{
margin-bottom
:
10px
}
.message-form
{
width
:
80%
;
margin
:
0
auto
}
.message-form
{
padding-bottom
:
15px
;
}
.message
{
background
:
#F0F2F5
;
}
.button
{
display
:
flex
;
justify-content
:
flex-end
;
padding
:
10px
20px
;
}
.bid
{
margin-bottom
:
20px
;
}
</
style
>
src/pages/supply/bid/joinProject/bidStage/seePrice.vue
View file @
fdfbd2b6
...
...
@@ -32,7 +32,10 @@
methods
:
{
Prev
()
{
this
.
$router
.
push
(
'/supply/Join_items/work_place/all_content'
)
}
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
},
}
</
script
>
...
...
src/pages/supply/bid/joinProject/bidSure/contractManagement.vue
View file @
fdfbd2b6
...
...
@@ -114,6 +114,7 @@
data
,
code
}
=
await
contractdetail
(
projectId
)
this
.
form
=
data
}
},
created
()
{
...
...
src/pages/supply/bid/joinProject/workbench.vue
View file @
fdfbd2b6
...
...
@@ -3,25 +3,33 @@
<div
class=
"content"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
<h1>
项目状态:
项目待审核
</h1>
<h1>
项目状态:
{{
remark
}}
</h1>
<div
class=
"flex state"
>
<ul
class=
"flex-left"
>
<!--
<ul
class=
"flex-left"
>
<li
v-for=
"(item,index) in states"
:key=
"index"
class=
"flex"
>
<div>
{{
item
.
title
}}
</div>
<ul
class=
"inside flex"
>
<li
v-for=
"(mods,index) in item.modulars"
:key=
"index"
class=
"flex-center"
>
<!--
<div
:class=
"[mods=='项目信息'||mods=='项目终止'?'active':'']"
>
{{
mods
}}
</div>
-->
<div
class=
"active"
@
click=
"jump(mods.label,mods.url)"
>
{{
mods
.
label
}}
</div>
</li>
</ul>
</li>
</ul>
</ul>
-->
<ul
class=
"flex"
>
<li
v-for=
"(item,index) in states"
:key=
"index"
>
<el-button
type=
"primary"
@
click=
"jump(item.button,item.uri)"
>
{{
item
.
button
}}
</el-button>
</li>
</ul>
</div>
<div
class=
"centerButton"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
projectConsole
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
export
default
{
...
...
@@ -33,104 +41,14 @@ export default {
return
{
breads
:
[
'投标管理'
,
'我参与的项目 '
,
'工作台'
],
navs
:
[
'工作台'
],
states
:
[{
title
:
'公告'
,
modulars
:[{
label
:
"变更公告管理"
,
url
:
"/supply/bid/joinProject/bidStage/changeList"
},
{
label
:
"流标公告管理"
,
url
:
"/supply/bid/joinProject/bidStage/failList"
}]
},
{
title
:
'招标'
,
modulars
:[
{
label
:
"项目信息"
,
url
:
"/supply/bid/joinProject/bidStage/projectInformation"
},
{
label
:
"查看询价公告"
,
url
:
"/supply/bid/joinProject/bidStage/seePrice"
},
{
label
:
"查看招标公告"
,
url
:
"/supply/bid/signupOnline/seeAnnouncement"
},
{
label
:
"招标文件下载"
,
url
:
"/supply/bid/joinProject/bidStage/fileDownload"
},
{
label
:
"招标文件澄清管理"
,
url
:
"/supply/bid/joinProject/bidStage/clearManagement"
}]
},
// 下面的没配置
{
title
:
'投标'
,
modulars
:
[{
label
:
"递交投标文件"
,
url
:
"/supply/bid/joinProject/bidSubmit/bidSubmit"
}]
},
{
title
:
'开标'
,
modulars
:
[
{
label
:
"参与开标"
,
url
:
"/supply/bid/joinProject/bidOpen/bidOpenhal"
}]
},
{
title
:
'评标'
,
modulars
:
[{
label
:
"评标问题澄清"
,
url
:
"/supply/bid/joinProject/bidEvaluation/evaluationList"
}]
},
{
title
:
'定标'
,
modulars
:
[{
label
:
"中标候选人公示查看"
,
url
:
"/supply/bid/joinProject/bidSure/candidateSee"
},
{
label
:
"中标公告查看"
,
url
:
"/supply/bid/joinProject/bidSure/noticeSee"
},
{
label
:
"中标通知书查看"
,
url
:
"/supply/bid/joinProject/bidSure/bidwinAdvice"
},
{
label
:
"招标结果通知书查看"
,
url
:
"/supply/bid/joinProject/bidSure/bidresultAdvice"
},
{
label
:
"合同管理"
,
url
:
"/supply/bid/joinProject/bidSure/contractManagement"
}]
},
{
title
:
'费用'
,
modulars
:
[{
label
:
"标书费缴纳管理"
,
url
:
"/supply/bid/joinProject/bidStage/tenderFee"
},
{
label
:
"保证金缴纳管理"
,
url
:
"/supply/bid/joinProject/bidStage/bond"
}]
},
]
states
:
[],
remark
:
""
}
},
methods
:
{
back
(){
this
.
$router
.
go
(
-
1
)
},
async
jump
(
label
,
url
){
console
.
log
(
label
,
url
)
if
(
label
==
"项目终止"
){
...
...
@@ -144,7 +62,29 @@ export default {
}
else
{
this
.
$router
.
push
(
url
)
}
}
},
async
getprojectConsole
()
{
try
{
let
message
=
{}
message
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
message
.
type
=
2
const
{
data
,
code
}
=
await
projectConsole
(
message
)
if
(
code
==
200
){
this
.
states
=
data
this
.
remark
=
data
[
0
].
remark
}
else
{
this
.
$message
.
error
(
msg
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
},
created
()
{
this
.
getprojectConsole
()
}
}
</
script
>
...
...
@@ -152,10 +92,19 @@ export default {
<
style
scoped
>
.state
{
margin-top
:
30px
;
margin-left
:
50px
;
/* margin-left: 50px; */
}
.state
>
ul
{
flex-wrap
:
wrap
;
}
.state
>
ul
>
li
{
margin-right
:
50px
;
margin-bottom
:
50px
;
cursor
:
pointer
;
}
.flex-left
>
li
{
/*
.flex-left>li {
font-weight: bold;
font-size: 20px;
height: 50px;
...
...
@@ -180,5 +129,5 @@ export default {
}
.inside>li>.active{
background: #2288EE
}
}
*/
</
style
>
src/pages/supply/bid/signupOnline/seeAnnouncement.vue
View file @
fdfbd2b6
...
...
@@ -3,10 +3,13 @@
<div
class=
"content"
>
<div>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<noticeDetail></noticeDetail>
<noticeDetail>
<slot>
<div
@
click=
"jump"
class=
"jump"
>
项目报价
</div>
</slot>
</noticeDetail>
</div>
<div
class=
"info_box"
>
<div
@
click=
"jump"
class=
"jump"
>
项目报价
</div>
<el-row>
<el-button
@
click=
"back"
>
返回
</el-button>
<el-button
type=
"primary"
@
click=
"signup"
>
报名
</el-button>
...
...
src/router/index.js
View file @
fdfbd2b6
...
...
@@ -337,6 +337,11 @@ export default new Router({
show
:
true
,
component
:
()
=>
import
(
'../pages/purchaser/bid/bidStage/bidSet.vue'
)
},
{
path
:
'/purchaser/bid/bidStage/projectInformation'
,
show
:
true
,
component
:
()
=>
import
(
'../pages/purchaser/bid/bidStage/projectInformation.vue'
)
},
{
path
:
'/purchaser/bid/bidStage/clearManagement/propose'
,
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