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
Show whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
917 additions
and
643 deletions
+917
-643
dist.zip
dist.zip
+0
-0
list.js
src/api/common/list.js
+9
-0
bid.js
src/api/purchaser/bid.js
+35
-7
noticeDetail.vue
src/components/detail/noticeDetail.vue
+17
-1
priceDetail.vue
src/components/detail/priceDetail.vue
+20
-4
projectDetail.vue
src/components/detail/projectDetail.vue
+206
-0
bidOpenhal.vue
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
+68
-36
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
+15
-8
failNotice.vue
src/pages/purchaser/bid/bidStage/failList/failNotice.vue
+23
-20
projectInformation.vue
src/pages/purchaser/bid/bidStage/projectInformation.vue
+94
-0
edit.vue
src/pages/purchaser/bid/bidSure/bidResult/edit.vue
+47
-18
list.vue
src/pages/purchaser/bid/bidSure/bidResult/list.vue
+58
-14
contract.vue
src/pages/purchaser/bid/bidSure/contract.vue
+42
-39
determine.vue
src/pages/purchaser/bid/bidSure/determine.vue
+32
-15
notice.vue
src/pages/purchaser/bid/bidSure/notice.vue
+17
-16
edit.vue
src/pages/purchaser/bid/bidSure/winBid/edit.vue
+22
-12
list.vue
src/pages/purchaser/bid/bidSure/winBid/list.vue
+54
-26
message.vue
src/pages/purchaser/bid/releaseProject/message.vue
+7
-6
SeeinquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
+4
-3
bidInvitation.vue
src/pages/purchaser/bid/reviewed/bidInvitation.vue
+2
-0
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
+51
-131
bidOpenhal.vue
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
+16
-12
projectInformation.vue
...es/supply/bid/joinProject/bidStage/projectInformation.vue
+4
-163
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
+50
-101
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
()
{
...
...
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
v-if=
"state"
>
<div
class=
"info_mes"
>
<p>
项目名称:
{{
projectName
}}
...
...
@@ -26,6 +27,11 @@
</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
)
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
)
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>
...
...
@@ -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,7 +301,7 @@
// 中国标准时间
let
currentTime
=
getTime
()
this
.
currentTime
=
currentTime
this
.
timer1
=
setInterval
(()
=>
{
this
.
timer1
=
setInterval
(()
=>
{
let
currentTime
=
getTime
()
this
.
currentTime
=
currentTime
},
1000
)
...
...
@@ -310,8 +313,28 @@
},
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,21 +560,20 @@
},
send
()
{
let
content
=
this
.
content
;
if
(
content
.
split
(
" "
).
join
(
""
).
length
==
0
){
this
.
$message
.
error
(
"请输入内容"
)
}
else
{
this
.
websocket
.
send
(
content
)
}
}
},
updated
(){
// 聊天定位到底部
let
ele
=
document
.
getElementById
(
'chatRecord'
);
ele
.
scrollTop
=
ele
.
scrollHeight
;
let
ele1
=
document
.
getElementById
(
'chatRecord1'
);
ele1
.
scrollTop
=
ele1
.
scrollHeight
;
},
// 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
);
...
...
@@ -553,14 +583,16 @@
</
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,22 +69,21 @@ 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
...
...
@@ -12,7 +12,7 @@
<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
"
>
<el-form-item
label=
"上传附件
"
>
<singleUpload
tip=
"支持扩展名:.rar .zip .doc .docx .pdf .jpg..."
@
input=
"getfile"
></singleUpload>
</el-form-item>
<el-form-item
label=
"公告内容"
prop=
"content"
>
...
...
@@ -21,7 +21,7 @@
</el-form>
<div
class=
"button"
>
<el-button
@
click=
"cancle"
>
取消
</el-button>
<el-button
type=
"primary
"
>
提交审核
</el-button>
<el-button
type=
"primary"
@
click=
"submit
"
>
提交审核
</el-button>
</div>
</div>
</div>
...
...
@@ -29,18 +29,18 @@
</
template
>
<
script
>
import
{
import
{
createAbortive
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
import
{
}
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
{
}
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
,
...
...
@@ -67,11 +67,6 @@ export default {
message
:
'请输入'
,
trigger
:
'blue'
}],
file
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blue'
}],
content
:
[{
required
:
true
,
message
:
'请输入'
,
...
...
@@ -92,6 +87,9 @@ export default {
}
},
methods
:
{
getfile
(
val
){
this
.
ruleForm
.
accessoryPOList
=
val
},
cancle
()
{
this
.
$router
.
go
(
-
1
)
},
...
...
@@ -113,9 +111,14 @@ export default {
if
(
code
===
200
)
{
this
.
$message
({
message
:
msg
,
type
:
'success'
type
:
'success'
,
duration
:
1500
})
// this.$router.go(-1)
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
err
)
{
...
...
@@ -124,7 +127,7 @@ export default {
}
}
}
}
</
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,20 +69,45 @@ 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
()
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
}
}
...
...
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,24 +72,64 @@ 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'
)
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
)
}
}
}
}
...
...
src/pages/purchaser/bid/bidSure/contract.vue
View file @
fdfbd2b6
<
template
>
<div
>
<div
>
<div
class=
"content"
>
<dataBreadcrumb
:breads=
" breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
...
...
@@ -45,11 +45,7 @@
</div>
<div
class=
"flex-between"
>
<el-form-item
label=
"合同有效期起止日期:"
prop=
"validityTime"
>
<el-date-picker
v-model=
"ruleForm.validityTime"
type=
"datetimerange"
range-separator=
"至"
start-placeholder=
"开始日期"
<el-date-picker
v-model=
"ruleForm.validityTime"
type=
"datetimerange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
>
</el-date-picker>
</el-form-item>
...
...
@@ -60,7 +56,7 @@
<el-form-item
label=
"合同文件:"
prop=
"file"
>
<singleUpload
:limit=
"1"
accept=
".pdf"
tip=
"支持扩展名:.rar .zip .doc .docx .pdf .jpg..."
@
input=
"getfile"
></singleUpload>
</el-form-item>
<el-form-item
label=
"其他附件:"
>
<el-form-item
label=
"其他附件:"
>
<singleUpload
:limit=
"3"
:max=
"3"
tip=
"支持扩展名:.rar .zip .doc .docx .pdf .jpg..."
@
input=
"getfile1"
></singleUpload>
</el-form-item>
<el-form-item
label=
"合同范围:"
prop=
"remark"
>
...
...
@@ -77,12 +73,14 @@
</
template
>
<
script
>
import
{
contract
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
import
multiUpload
from
'@components/Upload/multiUpload.vue'
export
default
{
import
{
contract
}
from
'@api/purchaser/bid'
import
dataBreadcrumb
from
'@components/dataBreadcrumb.vue'
import
changeNav
from
'@components/changeNav.vue'
import
singleUpload
from
'@components/Upload/Upload.vue'
import
multiUpload
from
'@components/Upload/multiUpload.vue'
export
default
{
components
:
{
dataBreadcrumb
,
changeNav
,
...
...
@@ -91,23 +89,23 @@ export default {
},
data
()
{
return
{
projectCode
:
""
,
projectName
:
""
,
projectCode
:
""
,
projectName
:
""
,
navs
:
[
'合同管理'
],
breads
:
[
'招投标管理'
,
'中标公告列表'
],
ruleForm
:
{
contractName
:
""
,
contractType
:
""
,
timeLimit
:
""
,
principalName
:
""
,
principalIdNumber
:
""
,
contractName
:
""
,
contractType
:
""
,
timeLimit
:
""
,
principalName
:
""
,
principalIdNumber
:
""
,
companyName
:
''
,
isAlliance
:
""
,
contractPrice
:
""
,
validityTime
:
""
,
deadline
:
""
,
FilePO
:
[],
remark
:
""
isAlliance
:
""
,
contractPrice
:
""
,
validityTime
:
""
,
deadline
:
""
,
FilePO
:
[],
remark
:
""
},
rules
:
{
validityTime
:
[{
...
...
@@ -127,10 +125,10 @@ export default {
examine
()
{
this
.
$router
.
push
(
'/admin/bid/bidingDetail'
)
},
getfile
(
val
)
{
getfile
(
val
)
{
console
.
log
(
val
)
},
getfile1
(
val
)
{
getfile1
(
val
)
{
console
.
log
(
val
)
},
// 提交表单
...
...
@@ -138,18 +136,22 @@ export default {
try
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
()
if
(
valid
)
{
const
{
code
,
msg
}
=
await
contract
(
this
.
ruleForm
);
if
(
code
===
200
)
{
this
.
$message
({
message
:
"成功"
,
type
:
'success'
,
duration
:
1500
duration
:
1500
})
setTimeout
(()
=>
{
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
// const { code,msg } = await contract(this.ruleForm);
// if (code === 200) {
// this.$success.success(msg)
// }
},
1500
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
e
)
{
console
.
log
(
e
)
...
...
@@ -160,15 +162,16 @@ export default {
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
);
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
);
}
}
}
</
script
>
<
style
scoped
>
.message
{
.message
{
width
:
70%
;
margin
:
0
auto
margin
:
0
auto
}
.button
{
.button
{
width
:
100%
;
height
:
100px
;
}
...
...
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>
...
...
@@ -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,7 +76,7 @@
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
,
...
...
@@ -84,13 +86,13 @@
},
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,7 +129,7 @@
},
methods
:
{
getfile
(
val
)
{
this
.
file
=
val
this
.
ruleForm
.
accessoryPOList
=
val
},
edit
(
row
)
{
this
.
dialogFormVisible
=
true
...
...
@@ -137,12 +138,12 @@
// 中标人列表
async
getwinPersonInfo
()
{
try
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
winPersonInfo
(
projectId
)
this
.
tableData
=
data
this
.
tableData
.
push
(
data
)
}
catch
(
e
)
{
console
.
log
(
e
)
}
...
...
@@ -153,7 +154,7 @@
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
...
...
@@ -175,8 +176,8 @@
}
},
created
()
{
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getwinPersonInfo
();
}
}
...
...
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,12 +88,21 @@ 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
)
{
...
...
src/pages/purchaser/bid/bidSure/winBid/list.vue
View file @
fdfbd2b6
<
template
>
<div
>
<div
>
<div
class=
"content"
>
<dataBreadcrumb
:breads=
"breads"
></dataBreadcrumb>
<changeNav
:navs=
"navs"
></changeNav>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
:is-pageobj=
"false"
>
<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>
...
...
@@ -12,24 +12,27 @@
</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>
<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
"
>
提交审核
</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
{
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
,
...
...
@@ -37,13 +40,13 @@ export default {
},
data
()
{
return
{
projectId
:
2
,
projectId
:
2
,
navs
:
[
'中标通知书'
],
breads
:
[
'招标管理'
,
'招标项目管理'
,
'工作台'
],
tableData
:
[],
columns
:
[{
label
:
'投标人'
,
prop
:
'bidder
'
prop
:
'companyName
'
},
{
slot
:
'code'
...
...
@@ -54,7 +57,7 @@ export default {
},
{
label
:
'接收人'
,
prop
:
'receiver
'
prop
:
'companyName
'
},
{
slot
:
'operate'
...
...
@@ -66,29 +69,30 @@ export default {
this
.
getsentBookList
();
},
methods
:
{
edit
(
id
)
{
this
.
$router
.
push
(
`/purchaser/bid/bidSure/winBid/edit?id=
${
id
}
`
)
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"
);
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
=
"未审核
"
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
...
...
@@ -96,13 +100,37 @@ export default {
}
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,8 +6,8 @@
<h5>
查看询价公告
</h5>
</div>
<div
class=
"content"
>
<priceDetail>
</priceDetail>
<div
class=
'form'
>
<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"
>
...
...
@@ -16,11 +16,12 @@
</
template
>
</el-table-column>
</dataTable>
</slot>
</priceDetail>
<div
class=
"centerButton"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
</div>
</div>
<el-dialog
title=
"收货地址"
:visible
.
sync=
"dialogFormVisible"
>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
></dataTable>
<div
slot=
"footer"
class=
"dialog-footer"
>
...
...
src/pages/purchaser/bid/reviewed/bidInvitation.vue
View file @
fdfbd2b6
...
...
@@ -100,6 +100,8 @@ export default {
type
:
'success'
})
this
.
$router
.
go
(
-
1
)
}
else
{
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
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
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,18 +62,50 @@ 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
>
<
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
=>
{
...
...
@@ -254,7 +247,11 @@
},
send
()
{
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,88 +6,18 @@
<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
{
...
...
@@ -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
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