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
21085428
Commit
21085428
authored
Sep 28, 2020
by
张冬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改问题
parent
3eea3676
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
681 additions
and
496 deletions
+681
-496
list.js
src/api/common/list.js
+9
-2
bid.js
src/api/purchaser/bid.js
+10
-1
home.js
src/api/purchaser/home.js
+10
-0
bidOpenhal.vue
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
+2
-2
message.vue
src/pages/purchaser/bid/releaseProject/message.vue
+5
-5
releaseProject.vue
src/pages/purchaser/bid/releaseProject/releaseProject.vue
+1
-1
timeSet.vue
src/pages/purchaser/bid/releaseProject/timeSet.vue
+192
-131
SeeinquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
+337
-279
inquiryAnnouncement.vue
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
+41
-27
tenderAnnouncement.vue
src/pages/purchaser/bid/reviewed/tenderAnnouncement.vue
+3
-1
home.vue
src/pages/purchaser/home/home.vue
+65
-41
bidOpenhal.vue
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
+2
-2
request.js
src/utils/request.js
+4
-4
No files found.
src/api/common/list.js
View file @
21085428
...
...
@@ -111,4 +111,12 @@ export function commoditylist(projectId) {
url
:
`bidder-apply/commodity/list/
${
projectId
}
`
,
method
:
'get'
})
}
\ No newline at end of file
}
// 获取招标文件截止时间
export
function
inqueryinfo
(
projectId
)
{
return
request
({
url
:
`tender-project/inquery/info/
${
projectId
}
`
,
method
:
'get'
})
}
src/api/purchaser/bid.js
View file @
21085428
import
request
from
'@/utils/request'
// 采购商
// 2.1.1
// 创建招标项目
...
...
@@ -21,6 +23,13 @@ export function createEnquiry(data) {
data
:
data
})
}
// 查看询价公告(通过项目id)
export
function
enquiryProjectId
(
projectId
)
{
return
request
({
url
:
`/notice/enquiry?projectId=
${
projectId
}
`
,
method
:
'get'
})
}
// 发送招标公告
export
function
bidMessage
(
data
)
{
...
...
@@ -30,7 +39,7 @@ export function bidMessage(data) {
data
:
data
})
}
// 查看招标公告(通过项目id)
// 发送邀请公告
export
function
inviteMessage
(
data
)
{
return
request
({
...
...
src/api/purchaser/home.js
0 → 100644
View file @
21085428
import
request
from
'@/utils/request'
export
function
home
()
{
return
request
({
url
:
"tender-project/index"
,
method
:
'get'
,
})
}
\ No newline at end of file
src/pages/purchaser/bid/bidOpen/bidOpenhal.vue
View file @
21085428
...
...
@@ -501,8 +501,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://192.168.200.201:8082/webSocket/'
+
projectId
+
"/"
+
token
)
this
.
websocket
=
new
WebSocket
(
'ws://192.168.3.35:8085/webSocket/'
+
projectId
+
"/"
+
token
)
//
this.websocket = new WebSocket('ws://192.168.200.201:8082/webSocket/' + projectId +"/"+token )
// 连接成功时
this
.
websocket
.
onopen
=
()
=>
{}
this
.
websocket
.
onmessage
=
event
=>
{
...
...
src/pages/purchaser/bid/releaseProject/message.vue
View file @
21085428
...
...
@@ -39,8 +39,8 @@
</el-form-item>
</div>
<div>
<el-form-item
label=
"项目经理:"
prop=
"
m
anager"
>
<el-select
v-model=
"ruleForm.
m
anager"
placeholder=
"请选择"
>
<el-form-item
label=
"项目经理:"
prop=
"
projectM
anager"
>
<el-select
v-model=
"ruleForm.
projectM
anager"
placeholder=
"请选择"
>
<el-option
v-for=
"item in managers"
:key=
"item.id"
:label=
"item.userName"
:value=
"item.id"
>
</el-option>
</el-select>
...
...
@@ -354,7 +354,7 @@ export default {
}],
phone
:
[{
required
:
true
,
validator
:
checkPhone
,
validator
:
checkPhone
,
trigger
:
'blur'
}],
money
:
[{
...
...
@@ -402,7 +402,7 @@ validator: checkPhone,
validator
:
isMin
,
trigger
:
'blur'
}],
m
anager
:
[{
projectM
anager
:
[{
required
:
true
,
message
:
'请选择'
,
trigger
:
'change'
...
...
@@ -433,7 +433,7 @@ validator: checkPhone,
phone
:
''
},
ruleForm
:
{
m
anager
:
""
,
projectM
anager
:
""
,
projectName
:
''
,
projectCode
:
''
,
classify
:
''
,
...
...
src/pages/purchaser/bid/releaseProject/releaseProject.vue
View file @
21085428
...
...
@@ -56,7 +56,7 @@ export default {
},
data
()
{
return
{
activeIdx
:
0
,
activeIdx
:
2
,
allForm
:
{}
}
},
...
...
src/pages/purchaser/bid/releaseProject/timeSet.vue
View file @
21085428
<
template
>
<div>
<div
class=
"describe"
>
招标时间设置
</div>
<div
class=
"form"
>
<!--
<dataForm
:search-form=
"searchForm"
:search-data=
"searchData"
:is-handle=
"false"
label-width=
"250px"
></dataForm>
-->
<el-form
ref=
"ruleForm"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"250px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"招标公告正式发布时:"
prop=
"releaseTime"
>
<el-date-picker
v-model=
"ruleForm.releaseTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"releaseTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"标书获取开始时间:"
prop=
"startTime"
>
<el-date-picker
v-model=
"ruleForm.startTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"startTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"标书获取结束时间:"
prop=
"endTime"
>
<el-date-picker
v-model=
"ruleForm.endTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"endTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"投标人澄清答疑截止时间:"
prop=
"answerQuestionEndTime"
>
<el-date-picker
v-model=
"ruleForm.answerQuestionEndTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"answerQuestionEndTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"投标文件递交截止时间及开标时间:"
prop=
"openBidStartTime"
>
<el-date-picker
v-model=
"ruleForm.openBidStartTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"openBidStartTime"
>
</el-date-picker>
</el-form-item>
</el-form>
</div>
<div
class=
"button"
>
<el-button
@
click=
"upper"
>
上一步
</el-button>
<el-button
type=
"primary"
@
click=
"next"
>
下一步
</el-button>
</div>
</div>
</
template
>
<
script
>
import
dataForm
from
'@components/dataForm.vue'
export
default
{
name
:
'bidingList'
,
components
:
{
dataForm
},
data
()
{
return
{
ruleForm
:
{
releaseTime
:
''
,
startTime
:
''
,
endTime
:
''
,
answerQuestionEndTime
:
''
,
openBidStartTime
:
''
},
rules
:
{
releaseTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
}],
startTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
}],
endTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
}],
answerQuestionEndTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
}],
openBidStartTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
}]
}
}
},
methods
:
{
releaseTime
(
val
)
{
this
.
ruleForm
.
releaseTime
=
new
Date
(
val
).
getTime
()
},
startTime
(
val
)
{
this
.
ruleForm
.
startTime
=
new
Date
(
val
).
getTime
()
},
endTime
(
val
)
{
this
.
ruleForm
.
endTime
=
new
Date
(
val
).
getTime
()
},
answerQuestionEndTime
(
val
)
{
this
.
ruleForm
.
answerQuestionEndTime
=
new
Date
(
val
).
getTime
()
},
openBidStartTime
(
val
)
{
this
.
ruleForm
.
openBidStartTime
=
new
Date
(
val
).
getTime
()
},
async
next
()
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
();
if
(
valid
){
this
.
$emit
(
'getruleForm'
,
this
.
ruleForm
)
this
.
$parent
.
next
()
}
},
upper
()
{
this
.
$parent
.
upper
()
}
}
}
</
script
>
<
style
scoped
>
.form
{
width
:
50%
;
margin
:
0
auto
;
box-sizing
:
border-box
;
padding-bottom
:
30px
;
}
.button
{
display
:
flex
;
justify-content
:
flex-end
;
padding-bottom
:
20px
;
margin-right
:
20px
;
}
<
template
>
<div>
<div
class=
"describe"
>
招标时间设置
</div>
<div
class=
"form"
>
<!--
<dataForm
:search-form=
"searchForm"
:search-data=
"searchData"
:is-handle=
"false"
label-width=
"250px"
></dataForm>
-->
<el-form
ref=
"ruleForm"
:model=
"ruleForm"
:rules=
"rules"
label-width=
"250px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"招标公告正式发布时间:"
prop=
"releaseTime"
>
<el-date-picker
v-model=
"ruleForm.releaseTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"releaseTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"标书获取开始时间:"
prop=
"startTime"
>
<el-date-picker
v-model=
"ruleForm.startTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"startTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"标书获取结束时间:"
prop=
"endTime"
>
<el-date-picker
v-model=
"ruleForm.endTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"endTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"投标人澄清答疑截止时间:"
prop=
"answerQuestionEndTime"
>
<el-date-picker
v-model=
"ruleForm.answerQuestionEndTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"answerQuestionEndTime"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"投标文件递交截止时间及开标时间:"
prop=
"openBidStartTime"
>
<el-date-picker
v-model=
"ruleForm.openBidStartTime"
type=
"datetime"
placeholder=
"选择日期时间"
@
change=
"openBidStartTime"
>
</el-date-picker>
</el-form-item>
</el-form>
</div>
<div
class=
"button"
>
<el-button
@
click=
"upper"
>
上一步
</el-button>
<el-button
type=
"primary"
@
click=
"next"
>
下一步
</el-button>
</div>
</div>
</
template
>
<
script
>
import
dataForm
from
'@components/dataForm.vue'
export
default
{
name
:
'bidingList'
,
components
:
{
dataForm
},
data
()
{
let
checkTime
=
(
rule
,
value
,
callback
)
=>
{
let
nowTime
=
new
Date
().
getTime
()
if
(
nowTime
<
value
)
{
callback
();
}
else
{
return
callback
(
new
Error
(
'请选择大于当前的时间'
));
}
};
let
checkTime1
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
this
.
ruleForm
.
releaseTime
){
return
callback
(
new
Error
(
'请先选择招标公告正式发布时间'
));
}
else
{
if
(
value
>
this
.
ruleForm
.
releaseTime
){
callback
();
}
else
{
return
callback
(
new
Error
(
'请选择大于招标公告正式发布时间'
));
}
}
};
let
checkTime2
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
this
.
ruleForm
.
startTime
){
return
callback
(
new
Error
(
'请先选择标书获取开始时间'
));
}
else
{
if
(
value
>
this
.
ruleForm
.
startTime
){
callback
();
}
else
{
return
callback
(
new
Error
(
'请选择大于标书获取开始时间'
));
}
}
};
let
checkTime3
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
this
.
ruleForm
.
endTime
){
return
callback
(
new
Error
(
'请先选择标书获取结束时间'
));
}
else
{
if
(
value
>
this
.
ruleForm
.
endTime
){
callback
();
}
else
{
return
callback
(
new
Error
(
'请选择大于标书获取结束时间'
));
}
}
};
let
checkTime4
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
this
.
ruleForm
.
answerQuestionEndTime
){
return
callback
(
new
Error
(
'请先选择投标人澄清答疑截止时间'
));
}
else
{
if
(
value
>
this
.
ruleForm
.
answerQuestionEndTime
){
callback
();
}
else
{
return
callback
(
new
Error
(
'请选择投标人澄清答疑截止时间'
));
}
}
};
return
{
ruleForm
:
{
releaseTime
:
''
,
startTime
:
''
,
endTime
:
''
,
answerQuestionEndTime
:
''
,
openBidStartTime
:
''
},
rules
:
{
releaseTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
},
{
validator
:
checkTime
,
}],
startTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
},
{
validator
:
checkTime1
,
}],
endTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
},
{
validator
:
checkTime2
,
}],
answerQuestionEndTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
},
{
validator
:
checkTime3
,
}],
openBidStartTime
:
[{
type
:
'date'
,
required
:
true
,
message
:
'请选择时间'
,
trigger
:
'blur'
},
{
validator
:
checkTime4
,
}]
}
}
},
methods
:
{
releaseTime
(
val
)
{
this
.
ruleForm
.
releaseTime
=
new
Date
(
val
).
getTime
()
},
startTime
(
val
)
{
this
.
ruleForm
.
startTime
=
new
Date
(
val
).
getTime
()
},
endTime
(
val
)
{
this
.
ruleForm
.
endTime
=
new
Date
(
val
).
getTime
()
},
answerQuestionEndTime
(
val
)
{
this
.
ruleForm
.
answerQuestionEndTime
=
new
Date
(
val
).
getTime
()
},
openBidStartTime
(
val
)
{
this
.
ruleForm
.
openBidStartTime
=
new
Date
(
val
).
getTime
()
},
async
next
()
{
const
valid
=
await
this
.
$refs
[
'ruleForm'
].
validate
();
if
(
valid
){
this
.
$emit
(
'getruleForm'
,
this
.
ruleForm
)
this
.
$parent
.
next
()
}
},
upper
()
{
this
.
$parent
.
upper
()
}
}
}
</
script
>
<
style
scoped
>
.form
{
width
:
50%
;
margin
:
0
auto
;
box-sizing
:
border-box
;
padding-bottom
:
30px
;
}
.button
{
display
:
flex
;
justify-content
:
flex-end
;
padding-bottom
:
20px
;
margin-right
:
20px
;
}
</
style
>
...
...
src/pages/purchaser/bid/reviewed/SeeinquiryAnnouncement.vue
View file @
21085428
<
template
>
<div
>
<div
class=
"content-head"
>
<breadCrumb
:breads =
"breads"
></breadCrumb>
<h3>
查看询价公告
</h3>
<h5>
查看询价公告
</h5>
</div>
<div
class=
"home"
>
<h1>
苍南县公安局关于督查视频服务器5台在线询价公告
</h1>
<div
class=
"flex-center"
>
<h6
style=
"margin-right:60px;margin-top:30px"
>
询价所在地:苍南县
</h6>
<h6
style=
"margin-buttom:60px;margin-top:30px"
>
日期:2020-08-03
</h6>
</div>
<div
class=
"form"
>
<h3
style=
"margin-buttom:30px"
>
基本信息
</h3>
<table
border=
"0"
width=
"100%"
height=
"120px"
>
<tr>
<td>
询价单编号
</td>
<td>
32020080349638311
</td>
<td>
采购记录
</td>
<td>
服务器*
</td>
<td>
项目优先级
</td>
<td>
非紧急
</td>
</tr>
<tr>
<td>
报价开始时间
</td>
<td>
2020-08-03 10:28:39
</td>
<td>
报价截止时间
</td>
<td>
2020-08-06 15:00:00
</td>
<td>
采购单位
</td>
<td>
苍南县公安局
</td>
</tr>
<tr>
<td>
采购单位联系人
</td>
<td>
王荔荣
</td>
<td>
联系方式
</td>
<td>
13706628929
</td>
<td>
传真号码
</td>
<td>
0577-68710076
</td>
</tr>
</table>
<div
class=
"appendix "
>
<div>
预算金额(元)
</div>
<div>
435000.00
</div>
</div>
<div
class=
"appendix "
>
<div>
成交规则及确认方式
</div>
<div>
自动成交
</div>
</div>
<h3
>
供应商要求
</h3>
<div
class=
"appendix "
>
<div>
供应商规模要求
</div>
<div>
阿里巴巴
</div>
</div>
<div
class=
"appendix "
>
<div>
供应商资格要求
</div>
<div>
自动成交
</div>
</div>
<div
class=
"appendix "
>
<div>
供应商区域范围要求
</div>
<div>
浙江省
</div>
</div>
<h3>
询价商品清单
</h3>
<dataTable
:table-data=
"tabledata"
:columns =
"columns"
></dataTable>
<div
class=
"appendix list pos"
>
<div
>
附件
</div>
<div>
IMG_0208.jpg
</div>
<!-- 此处放文件 -->
</div>
<h3>
商务要求
</h3>
<div
class=
"appendix bus-require pos"
>
<div
class=
"flex-center"
>
<p>
商务要求
</p>
</div>
<div>
1、 本次招标内容为开平碉楼与村落保护规划服务(具体详见技术要求)。投标人不得将本项目中的内容拆散来投标。 2、 投标人资格要求: (1)投标人应当是具有文物保护工程勘探设计甲级资质的法人,其中其业务范围必须包含文物保护规划编制; (2)投标人应当具有世界文化遗产保护规划设计的工作经验。 3、 投标人应当在投标文件中详细列出并提供相关证明文件证明本项目的管理负责人和技术负责人的学历、职称、从事相关工作的时间,承担过类似项目名称、责任内容、完成日期以及其它业绩证明材料。 4、 投标人应当具有完整的质量保证体系。 5、 投标人应当在投标文件中提供具有文物保护工程勘探设计资格证明等文件。
</div>
</div>
<div
class=
"button"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
</div>
</div>
</div>
<div>
<div
class=
"content-head"
>
<breadCrumb
:breads=
"breads"
></breadCrumb>
<h3>
查看询价公告
</h3>
<h5>
查看询价公告
</h5>
</div>
<div
class=
"home"
>
<h1>
{{
projectName
}}
在线询价公告
</h1>
<div
class=
"flex-center"
>
<h6
style=
"margin-right:60px;margin-top:30px"
>
询价所在地:苍南县
</h6>
<h6
style=
"margin-buttom:60px;margin-top:30px"
>
日期:
{{
detail
.
createTime
.
substring
(
0
,
10
)
}}
</h6>
</div>
<div
class=
"form"
>
<h3
style=
"margin-buttom:30px"
>
基本信息
</h3>
<table
border=
"0"
width=
"100%"
height=
"120px"
>
<tr>
<td>
询价单编号
</td>
<td>
{{
detail
.
inquiryCode
}}
</td>
<td>
采购目录
</td>
<td>
{{
detail
.
purchaseCategory
}}
</td>
<td>
项目优先级
</td>
<td>
{{
detail
.
priority
==
0
?
"普通"
:
"紧急"
}}
</td>
</tr>
<tr>
<td>
报价开始时间
</td>
<td>
{{
detail
.
startTime
}}
</td>
<td>
报价截止时间
</td>
<td>
{{
detail
.
endTime
}}
</td>
<td>
采购单位
</td>
<td>
{{
detail
.
purchaseAgent
}}
</td>
</tr>
<tr>
<td>
采购单位联系人
</td>
<td>
{{
detail
.
contact
}}
</td>
<td>
联系方式
</td>
<td>
1
{{
detail
.
contactPhone
}}
</td>
<td>
传真号码
</td>
<td>
{{
detail
.
facsimile
}}
</td>
</tr>
</table>
<div
class=
"appendix "
>
<div>
预算金额(元)
</div>
<div>
{{
detail
.
budget
}}
</div>
</div>
<div
class=
"appendix "
>
<div>
成交规则及确认方式
</div>
<div>
自动成交
</div>
</div>
<h3>
供应商要求
</h3>
<div
class=
"appendix "
>
<div>
供应商规模要求
</div>
<div>
{{
detail
.
supplierScale
}}
</div>
</div>
<div
class=
"appendix "
>
<div>
供应商资格要求
</div>
<div>
{{
detail
.
supplierQualification
}}
</div>
</div>
<div
class=
"appendix "
>
<div>
供应商区域范围要求
</div>
<div>
{{
detail
.
supplierRegion
}}
</div>
</div>
<h3>
询价商品清单
</h3>
<dataTable
:table-data=
"detail.commodityVOList"
:columns=
"columns"
></dataTable>
<div
class=
"appendix list pos"
>
<div>
附件
</div>
<ul
v-if=
"detail.accessoryVOList"
>
<li
v-for=
"(item,index) in detail.accessoryVOList"
:key=
"index"
>
<div
@
click=
"down(item.accessoryUrl)"
>
{{
item
.
fileName
}}
</div>
</li>
</ul>
<div
v-else
>
无附件
</div>
</div>
<h3>
商务要求
</h3>
<div
class=
"appendix bus-require pos"
>
<div
class=
"flex-center"
>
<p>
商务要求
</p>
</div>
<div
v-html=
"detail.commercialRequirements"
></div>
</div>
<div
class=
"button"
>
<el-button
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</div>
<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)"
>
查看中标公告
</el-button>
</
template
>
</el-table-column>
</dataTable>
</div>
</div>
</div>
</template>
<
script
>
import
dataTable
from
'@components/nopageTable.vue'
import
breadCrumb
from
'@components/dataBreadcrumb.vue'
export
default
{
components
:
{
dataTable
,
breadCrumb
},
data
()
{
return
{
dialogFormVisible
:
false
,
breads
:
[
'投标管理 '
,
'在线报名'
,
'询价公告'
],
tabledata
:
[{
name
:
'大白菜'
,
acount
:
'100'
,
unit
:
'斤'
,
brand
:
'天然'
,
size
:
'周杰伦'
,
price
:
'100'
,
remarks
:
'无'
,
quote
:
'100.00'
},
{
name
:
'大白菜'
,
acount
:
'100'
,
unit
:
'斤'
,
brand
:
'天然'
,
size
:
'周杰伦'
,
price
:
'100'
,
remarks
:
'无'
,
quote
:
'100.00'
},
{
name
:
'大白菜'
,
acount
:
'100'
,
unit
:
'斤'
,
brand
:
'天然'
,
size
:
'周杰伦'
,
price
:
'100'
,
remarks
:
'无'
,
quote
:
'100.00'
},
{
name
:
'大白菜'
,
acount
:
'100'
,
unit
:
'斤'
,
brand
:
'天然'
,
size
:
'周杰伦'
,
price
:
'100'
,
remarks
:
'无'
,
quote
:
'100.00'
},
{
name
:
'大白菜'
,
acount
:
'100'
,
unit
:
'斤'
,
brand
:
'天然'
,
size
:
'周杰伦'
,
price
:
'100'
,
remarks
:
'无'
,
quote
:
'100.00'
}],
columns
:
[{
label
:
'标的名称'
,
prop
:
'name'
},
{
label
:
'数量'
,
prop
:
'acount'
},
{
label
:
'计量单位'
,
prop
:
'unit'
},
{
label
:
'品牌'
,
prop
:
'brand'
},
{
label
:
'规格型号'
,
prop
:
'size'
},
{
label
:
'标杆价'
,
prop
:
'price'
},
{
label
:
'备注'
,
prop
:
'remarks'
},
{
label
:
'我的报价(元)'
,
prop
:
'quote'
}]
}
},
methods
:
{
Prev
()
{
this
.
$router
.
push
(
'/supply/Join_items/work_place/all_content'
)
}
}
}
import
{
offerBidderlist
,
}
from
'@api/supply/bid'
import
{
getTime1
}
from
'@utils/time'
import
{
enquiryProjectId
}
from
'@api/purchaser/bid'
import
dataTable
from
'@components/nopageTable.vue'
import
breadCrumb
from
'@components/dataBreadcrumb.vue'
export
default
{
components
:
{
dataTable
,
breadCrumb
},
data
()
{
return
{
projectName
:
""
,
Bidderlist
:
[],
detail
:
""
,
dialogFormVisible
:
false
,
breads
:
[
'投标管理 '
,
'在线报名'
,
'询价公告'
],
columns
:
[
{
label
:
'标的名称'
,
prop
:
'bidName'
},
{
label
:
'数量'
,
prop
:
'quantity'
},
{
label
:
'计量单位'
,
prop
:
'unit'
},
{
label
:
'品牌'
,
prop
:
'brand'
},
{
label
:
'规格型号'
,
prop
:
'specification'
},
{
label
:
'标杆价(元)'
,
prop
:
'price'
},
{
label
:
'备注'
,
prop
:
'remark'
},
],
offerBiddercolumns
:
[{
label
:
'供应商名称'
,
prop
:
'companyName'
},
{
label
:
'报价时间'
,
prop
:
'updateTime'
},
{
label
:
'报价'
,
prop
:
'price'
,
sortable
:
true
},
{
slot
:
'operate'
}
]
}
},
methods
:
{
time
(
data
)
{
getTime1
(
data
)
},
back
()
{
this
.
$router
.
go
(
-
1
)
},
// 获取详情
async
getenquiryProjectId
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
enquiryProjectId
(
projectId
)
data
.
endTime
=
getTime1
(
data
.
endTime
)
data
.
startTime
=
getTime1
(
data
.
startTime
)
this
.
detail
=
data
},
// 参与报价的供应商的情况
async
getofferBidderlist
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
}
=
await
offerBidderlist
(
projectId
)
this
.
Bidderlist
=
data
},
see
()
{
}
},
created
()
{
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getenquiryProjectId
()
this
.
getofferBidderlist
()
}
}
</
script
>
<
style
scoped
>
.Tips
{
color
:
#409EFF
.Tips
{
color
:
#409EFF
}
.notice
>
h4
{
.notice
>
h4
{
font-size
:
16px
;
font-weight
:
bold
;
margin-right
:
30px
;
}
.notice
{
margin
:
20px
0
;
.notice
{
margin
:
20px
0
;
border-bottom
:
1px
solid
#ccc
;
}
h2
{
/* margin-top:; */
margin-bottom
:
10px
;
}
h6
{
margin-bottom
:
10px
;
}
.home
{
padding
:
30px
;
background
:
#fff
;
box-sizing
:
border-box
;
/* margin-left:20px; */
}
h1
{
display
:
flex
;
justify-content
:
center
;
}
.form
{
padding
:
20px
;
box-sizing
:
border-box
;
}
.form
h3
{
margin-top
:
20px
;
margin-bottom
:
20px
;
font-weight
:
bold
;
}
/* table>tr{
h2
{
/* margin-top:; */
margin-bottom
:
10px
;
}
h6
{
margin-bottom
:
10px
;
}
.home
{
padding
:
30px
;
background
:
#fff
;
box-sizing
:
border-box
;
/* margin-left:20px; */
}
h1
{
display
:
flex
;
justify-content
:
center
;
}
.form
{
padding
:
20px
;
box-sizing
:
border-box
;
}
.form
h3
{
margin-top
:
20px
;
margin-bottom
:
20px
;
font-weight
:
bold
;
}
/* table>tr{
text-align: center;
} */
table
{
border-collapse
:
collapse
;
}
table
>
tr
>
td
{
font-size
:
16px
;
border
:
1px
solid
#ccc
;
padding-left
:
10px
;
}
table
>
tr
>
td
:nth-child
(
odd
)
{
background
:
#F0F0F0
}
.right-s
{
padding-right
:
200px
;
}
.appendix
{
display
:
flex
;
border
:
1px
solid
#ccc
;
}
.appendix
>
div
:first-child
{
width
:
159px
;
border-right
:
1px
solid
#ccc
;
box-sizing
:
border-box
;
padding-left
:
10px
;
}
.appendix
>
div
:last-child
{
padding-left
:
10px
;
}
.appendix
>
div
:nth-child
(
odd
)
{
background
:
#F0F0F0
}
.appendix
>
div
{
font-size
:
16px
;
line-height
:
40px
;
}
.list
>
:first-child
{
height
:
120px
;
line-height
:
120px
;
}
.list
{
margin-top
:
20px
;
}
.bus-require
>
div
:first-child
{
width
:
400px
;
}
.bus-require
>
div
:last-child
{
font-size
:
10px
;
}
.pos
>
div
:first-child
{
display
:
flex
;
justify-content
:
center
;
}
.last-pos
{
margin-left
:
40px
;
margin-top
:
20px
;
}
.last-pos
>
div
:first-child
{
width
:
65px
;
}
input
{
width
:
100%
;
height
:
70px
;
}
.button
{
width
:
100px
;
margin
:
50px
auto
}
.home
>
h1
{
font-weight
:
bold
;
}
table
{
border-collapse
:
collapse
;
}
table
>
tr
>
td
{
font-size
:
16px
;
border
:
1px
solid
#ccc
;
padding-left
:
10px
;
}
table
>
tr
>
td
:nth-child
(
odd
)
{
background
:
#F0F0F0
;
width
:
160px
;
}
.right-s
{
padding-right
:
200px
;
}
.appendix
{
display
:
flex
;
border
:
1px
solid
#ccc
;
}
.appendix
>
div
:first-child
{
width
:
172px
;
border-right
:
1px
solid
#ccc
;
box-sizing
:
border-box
;
padding-left
:
10px
;
}
.appendix
>
div
:last-child
{
padding-left
:
10px
;
}
.appendix
>
div
:nth-child
(
odd
)
{
background
:
#F0F0F0
}
.appendix
>
div
{
font-size
:
16px
;
line-height
:
40px
;
}
.list
>
:first-child
{
height
:
120px
;
line-height
:
120px
;
}
.list
{
margin-top
:
20px
;
}
.bus-require
>
div
:first-child
{
width
:
400px
;
}
.bus-require
>
div
:last-child
{
font-size
:
10px
;
}
.pos
>
div
:first-child
{
display
:
flex
;
justify-content
:
center
;
}
.last-pos
{
margin-left
:
40px
;
margin-top
:
20px
;
}
.last-pos
>
div
:first-child
{
width
:
65px
;
}
input
{
width
:
100%
;
height
:
70px
;
}
.button
{
width
:
100px
;
margin
:
50px
auto
}
.home
>
h1
{
font-weight
:
bold
;
}
</
style
>
src/pages/purchaser/bid/reviewed/inquiryAnnouncement.vue
View file @
21085428
...
...
@@ -21,27 +21,27 @@
<el-form-item
label=
"询价所在地"
prop=
"address"
>
<citySelect
@
sendprovinceId=
"getprovinceId"
@
sendcityId=
"getcityId"
@
senddistrictId=
"getdistrictId"
></citySelect>
</el-form-item>
<el-form-item
label=
"项目优先级"
prop=
"priority"
>
<el-radio-group
v-model=
"ruleForm.priority"
class=
"flex"
>
<el-radio
:label=
"0"
>
普通
</el-radio>
<el-radio
:label=
"1"
>
紧急
</el-radio>
</el-radio-group>
</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-form-item>
<el-form-item
label=
"采购目录"
prop=
"catalog"
>
<el-input
v-model
.
trim=
"ruleForm.catalog"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 250px;"
></el-input>
</el-form-item>
<el-form-item
label=
"项目优先级"
prop=
"priority"
>
<el-radio-group
v-model=
"ruleForm.priority"
>
<el-radio
:label=
"0"
>
普通
</el-radio>
<el-radio
:label=
"1"
>
紧急
</el-radio>
</el-radio-group>
<el-form-item
label=
"采购目录"
prop=
"purchaseCategory"
>
<el-input
v-model
.
trim=
"ruleForm.purchaseCategory"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 250px;"
></el-input>
</el-form-item>
</div>
<div
class=
"flex-between"
style=
"width:60%"
>
<el-form-item
label=
"报价开始时间"
prop=
"sta
te
Time"
>
<el-date-picker
v-model=
"ruleForm.sta
teTime"
type=
"datetime"
placeholder=
"选择日期时间"
disabled
>
<el-form-item
label=
"报价开始时间"
prop=
"sta
rt
Time"
>
<el-date-picker
v-model=
"ruleForm.sta
rtTime"
type=
"datetime"
placeholder=
"选择日期时间"
disabled
style=
"width: 250px;"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"报价结束时间"
prop=
"endTime"
>
<el-date-picker
v-model=
"ruleForm.endTime"
type=
"datetime"
placeholder=
"选择日期时间"
disabled
>
<el-date-picker
v-model=
"ruleForm.endTime"
type=
"datetime"
placeholder=
"选择日期时间"
disabled
style=
"width: 250px;"
>
</el-date-picker>
</el-form-item>
<el-form-item
label=
"采购单位"
prop=
"purchaseAgent"
>
...
...
@@ -128,7 +128,7 @@ import {
getTime
}
from
'@utils/time'
import
{
commoditylist
commoditylist
,
inqueryinfo
}
from
'@api/common/list'
export
default
{
...
...
@@ -194,7 +194,7 @@ export default {
districtId
:
''
,
inquiryCode
:
''
,
priority
:
''
,
sta
te
Time
:
''
,
sta
rt
Time
:
''
,
endTime
:
''
,
purchaseAgent
:
'1'
,
contact
:
'1'
,
...
...
@@ -204,7 +204,9 @@ export default {
supplierScale
:
''
,
supplierQualification
:
''
,
supplierRegion
:
''
,
commercialRequirements
:
''
commercialRequirements
:
''
,
accessoryPOList
:[],
purchaseCategory
:
""
},
rules
:
{
...
...
@@ -233,7 +235,7 @@ export default {
message
:
'请输入请输入'
,
trigger
:
'blur'
}],
sta
te
Time
:
[{
sta
rt
Time
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'change'
...
...
@@ -278,25 +280,28 @@ export default {
},
created
()
{
let
userInfo
=
JSON
.
parse
(
localStorage
.
getItem
(
"userInfo"
))
console
.
log
(
userInfo
)
this
.
ruleForm
.
purchaseAgent
=
userInfo
.
companyName
this
.
ruleForm
.
contact
=
userInfo
.
name
this
.
ruleForm
.
contactPhone
=
userInfo
.
phone
let
data
=
getTime
();
console
.
log
(
data
);
this
.
ruleForm
.
stateTime
=
data
;
this
.
ruleForm
.
endTime
=
data
;
this
.
ruleForm
.
endTime
=
data
;
this
.
ruleForm
.
startTime
=
data
;
this
.
projectCode
=
localStorage
.
getItem
(
"projectCode"
)
this
.
projectName
=
localStorage
.
getItem
(
"projectName"
)
this
.
getcommoditylist
()
this
.
getinqueryinfo
()
},
methods
:
{
// 获取上传文件
getfile
(
val
)
{
this
.
ruleForm
.
requirementUrl
=
val
},
getfile
(
val
)
{
for
(
let
item
of
val
)
{
item
.
accessoryUrl
=
item
.
fileUrl
}
this
.
ruleForm
.
accessoryPOList
=
val
},
// 获取市ID
getprovinceId
(
val
)
{
this
.
ruleForm
.
provinceId
=
val
...
...
@@ -322,8 +327,8 @@ export default {
ruleForm
.
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
code
,
data
}
=
await
createEnquiry
(
this
.
ruleForm
)
msg
}
=
await
createEnquiry
(
ruleForm
)
if
(
code
==
200
)
{
this
.
$message
({
message
:
msg
,
...
...
@@ -333,9 +338,9 @@ export default {
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
}
else
{
}
else
if
(
code
==
500
){
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
err
)
{
console
.
log
(
err
)
...
...
@@ -349,7 +354,16 @@ export default {
code
}
=
await
commoditylist
(
projectId
)
this
.
tableData
=
data
}
},
// 获取招标截止时间
async
getinqueryinfo
()
{
let
projectId
=
localStorage
.
getItem
(
"projectId"
)
const
{
data
,
code
}
=
await
inqueryinfo
(
projectId
)
this
.
ruleForm
.
endTime
=
data
.
endTime
;
},
}
}
...
...
src/pages/purchaser/bid/reviewed/tenderAnnouncement.vue
View file @
21085428
...
...
@@ -108,7 +108,9 @@ export default {
setTimeout
(()
=>
{
this
.
$router
.
go
(
-
1
)
},
1500
)
}
}
else
if
(
code
==
500
){
this
.
$message
.
error
(
msg
)
}
}
}
catch
(
err
)
{
console
.
log
(
err
)
...
...
src/pages/purchaser/home/home.vue
View file @
21085428
...
...
@@ -3,11 +3,31 @@
<div
class=
"user"
>
<div>
你好 ,MaikoXie , 欢迎开始一天的工作!
</div>
<ul
class=
"user-list flex-between"
>
<li
v-for=
"item in imglist"
:key=
"item.id
"
>
<img
:src=
"item.im
g"
alt=
""
>
<div>
{{
item
.
user
}}
</div>
<div>
{{
item
.
number
}}
</div>
<li
class=
"flex-colunm
"
>
<img
src=
"@static/images/user.pn
g"
alt=
""
>
<div>
全部项目
</div>
<div>
{{
detail
.
projectCount
}}
</div>
</li>
<li
class=
"flex-colunm "
>
<img
src=
"@static/images/user.png"
alt=
""
>
<div>
我的供应商
</div>
<div>
{{
detail
.
bidderCount
}}
</div>
</li>
<li
class=
"flex-colunm "
>
<img
src=
"@static/images/user.png"
alt=
""
>
<div>
已定标项目
</div>
<div>
{{
detail
.
calibrated
}}
</div>
</li>
<li
class=
"flex-colunm "
>
<img
src=
"@static/images/user.png"
alt=
""
>
<div>
已流标项目
</div>
<div>
{{
detail
.
bidFailed
}}
</div>
</li>
<li
class=
"flex-colunm "
>
<img
src=
"@static/images/user.png"
alt=
""
>
<div>
已终止项目
</div>
<div>
{{
detail
.
end
}}
</div>
</li>
</ul>
<h1>
项目信息
</h1>
<dataTable
:table-data=
"tableData"
:columns=
"columns"
:is-pageobj=
"false"
>
...
...
@@ -19,18 +39,38 @@
</dataTable>
<h1>
待办事项
</h1>
<ul
class=
"flex-between project-list"
>
<li
v-for=
"item in projectlist"
:key=
"item.id
"
>
<img
:src=
"item.im
g"
alt=
""
>
<div>
{{ item. project }}
</div>
<div>
{{
item.number
}}
</div>
<li
class=
"flex-colunm
"
>
<img
src=
"@static/images/item.pn
g"
alt=
""
>
<div>
待修改项目
</div>
<div>
{{
detail.projectCount
}}
</div>
</li>
<li
class=
"flex-colunm"
>
<img
src=
"@static/images/item.png"
alt=
""
>
<div>
待修改询价公告
</div>
<div>
{{ detail.inquiryNoticeNeedModify }}
</div>
</li>
<li
class=
"flex-colunm"
>
<img
src=
"@static/images/item.png"
alt=
""
>
<div>
待修改招标公告
</div>
<div>
{{ detail.biddingNoticeNeedModify }}
</div>
</li>
<li
class=
"flex-colunm"
>
<img
src=
"@static/images/item.png"
alt=
""
>
<div>
待签署应收账款买断合同
</div>
<div>
{{ detail.payment }}
</div>
</li>
<li
class=
"flex-colunm"
>
<img
src=
"@static/images/item.png"
alt=
""
>
<div>
待确认供应商凭证
</div>
<div>
{{ detail.credentials }}
</div>
</li>
</ul>
</div>
</div>
</template>
<
script
>
import
{
home
}
from
'@api/purchaser/home'
import
{
getSearchString
}
from
'@utils/common'
import
dataTable
from
'@components/nopageTable.vue'
export
default
{
...
...
@@ -39,6 +79,7 @@ export default {
},
data
()
{
return
{
detail
:
""
,
tableData
:
[{
state
:
'审核通过待发布的项目'
,
number
:
'10'
,
...
...
@@ -99,48 +140,31 @@ export default {
number
:
'100'
}
],
imglist
:
[{
id
:
0
,
img
:
require
(
'@static/images/user.png'
),
user
:
'供应商'
,
number
:
'100'
},
{
id
:
1
,
img
:
require
(
'@static/images/user.png'
),
user
:
'采购商'
,
number
:
'100'
},
{
id
:
2
,
img
:
require
(
'@static/images/user.png'
),
user
:
'全部项目'
,
number
:
'100'
},
{
id
:
3
,
img
:
require
(
'@static/images/user.png'
),
user
:
'正在进行的项目'
,
number
:
'100'
},
{
id
:
4
,
img
:
require
(
'@static/images/user.png'
),
user
:
'参与投标总次数'
,
number
:
'100'
}
]
}
},
created
(){
let
token
=
getSearchString
(
"token"
);
console
.
log
(
token
)
localStorage
.
setItem
(
"token"
,
token
)
this
.
gethome
()
},
methods
:
{
handleSee
(
row
)
{
this
.
$router
.
push
(
row
.
url
)
},
async
gethome
()
{
const
{
data
,
code
}
=
await
home
()
this
.
detail
=
data
this
.
tableData
[
0
].
number
=
data
.
prePublic
this
.
tableData
[
1
].
number
=
data
.
sellingBidding
this
.
tableData
[
2
].
number
=
data
.
bidding
this
.
tableData
[
3
].
number
=
data
.
open
this
.
tableData
[
4
].
number
=
data
.
bidOpening
this
.
tableData
[
5
].
number
=
data
.
bidOevaluating
}
}
}
</
script
>
...
...
src/pages/supply/bid/joinProject/bidOpen/bidOpenhal.vue
View file @
21085428
...
...
@@ -218,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://192.168.200.201:8082/webSocket/'
+
projectId
+
"/"
+
token
)
this
.
websocket
=
new
WebSocket
(
'ws://192.168.3.35:8085/webSocket/'
+
projectId
+
"/"
+
token
)
//
this.websocket = new WebSocket('ws://192.168.200.201:8082/webSocket/' + projectId +"/"+token )
// 连接成功时
this
.
websocket
.
onopen
=
()
=>
{}
this
.
websocket
.
onmessage
=
event
=>
{
...
...
src/utils/request.js
View file @
21085428
...
...
@@ -5,8 +5,8 @@ import { Message, MessageBox } from 'element-ui'
// 创建axios实例
const
service
=
axios
.
create
({
baseURL
:
'http://192.168.200.201:8082/apis'
,
//
baseURL: 'http://192.168.3.35:8085/apis',
//
baseURL: 'http://192.168.200.201:8082/apis',
baseURL
:
'http://192.168.3.35:8085/apis'
,
timeout
:
35000
// 请求超时时间
})
...
...
@@ -42,8 +42,8 @@ service.interceptors.response.use(
Message
.
error
(
"登陆失效,请重新登录!"
)
localStorage
.
removeItem
(
'token'
);
setTimeout
(
function
()
{
location
.
href
=
'http://192.168.200.201:8081/login/user/'
;
//
location.href = 'http://localhost:3000/login/user/';
//
location.href = 'http://192.168.200.201:8081/login/user/';
location
.
href
=
'http://localhost:3000/login/user/'
;
},
2000
);
}
}
...
...
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