Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-operate-sys-cscec
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
fulixin
dsk-operate-sys-cscec
Commits
f51623ca
Commit
f51623ca
authored
Feb 20, 2024
by
huangjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*
parent
a3dec409
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
536 additions
and
195 deletions
+536
-195
index.js
dsk-operate-ui/src/api/projectCostLedger/index.js
+48
-0
index.vue
dsk-operate-ui/src/views/projectCostLedger/index.vue
+225
-41
index.vue
dsk-operate-ui/src/views/projectCostLedger/upload/index.vue
+263
-154
No files found.
dsk-operate-ui/src/api/projectCostLedger/index.js
View file @
f51623ca
...
...
@@ -15,6 +15,22 @@ export function addProject (data) {
data
:
data
,
})
}
//修改项目
export
function
editProjectInfo
(
data
)
{
return
request
({
url
:
'/cbProjectRecord/editProjectInfo'
,
method
:
'PUT'
,
data
:
data
,
})
}
//新增新阶段项目
export
function
addNewStageProject
(
data
)
{
return
request
({
url
:
'/cbProjectRecord/addNewStageProject'
,
method
:
'POST'
,
data
:
data
,
})
}
//获取当前项目文件上传
export
function
getProjectFileUploadDetail
(
projectId
)
{
return
request
({
...
...
@@ -30,3 +46,35 @@ export function getDraftDialogList (projectId) {
method
:
'get'
,
})
}
//上传文件
export
function
uploadCbProjectFile
(
data
)
{
return
request
({
url
:
'/cbProjectFile/uploadCbProjectFile'
,
method
:
'post'
,
data
})
}
//删除文件
export
function
deleteCbProjectFile
(
fileId
)
{
return
request
({
url
:
'/cbProjectFile/deleteCbProjectFile/'
+
fileId
,
method
:
'Delete'
,
})
}
//删除草稿
export
function
deleteDraft
(
projectId
)
{
return
request
({
url
:
'/cbProjectRecord/deleteDraft/'
+
projectId
,
method
:
'Delete'
,
})
}
//查询当前项目可删除成本阶段
export
function
getProjectCbStageNotDraft
(
relatedId
)
{
return
request
({
url
:
'/cbProjectRecord/getProjectCbStageNotDraft/'
+
relatedId
,
method
:
'get'
,
})
}
dsk-operate-ui/src/views/projectCostLedger/index.vue
View file @
f51623ca
...
...
@@ -16,12 +16,12 @@
<el-input
v-model=
"formdata.customerName"
placeholder=
"请输入IPM项目编码"
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"成本阶段"
>
<el-select
v-model=
"formdata.customerClass"
multiple
placeholder=
"请选择"
:collapse-tags=
"true"
clearable
>
<el-select
v-model=
"formdata.customerClass"
placeholder=
"请选择"
:collapse-tags=
"true"
clearable
>
<el-option
v-for=
"(item,index) in cbStagelist"
:label=
"item.dictLabel"
:value=
"item.dictValue"
:key=
"index"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"项目状态"
>
<el-select
v-model=
"formdata.customerClass"
multiple
placeholder=
"请选择"
:collapse-tags=
"true"
clearable
>
<el-select
v-model=
"formdata.customerClass"
placeholder=
"请选择"
:collapse-tags=
"true"
clearable
>
<el-option
v-for=
"(item,index) in ztStagelist"
:label=
"item.dictLabel"
:value=
"item.dictValue"
:key=
"index"
></el-option>
</el-select>
</el-form-item>
...
...
@@ -64,19 +64,19 @@
<el-table-column
label=
"工程名称"
width=
"416"
:resizable=
"false"
>
<
template
slot-scope=
"scope"
>
<div
style=
"display:flex;align-items:center"
>
<
el-tooltip
placement=
"top"
v-if=
"scope.row.customerText.length>20"
>
<
div
slot=
"content"
>
{{
scope
.
row
.
customerText
}}
</div
>
<
div
class=
"renling"
>
<
router-link
v-if=
"scope.row.companyId"
:to=
"`/enterprise/$
{encodeStr(scope.row.companyId)}?path=cooperationRecord
&
companyName=${scope.row.customerName}`" tag="a"
class="wordprimary" v-html="scope.row.customerName">
</router-link
>
<
span
v-else
v-html=
"scope.row.customerName"
></span
>
<
/div
>
<
/el-tooltip
>
<
div
class=
"renling"
v-else
>
<
router-link
v-if=
"scope.row.companyId"
:to=
"`/enterprise/$
{encodeStr(scope.row.companyId)}?path=cooperationRecord
&
companyName=${scope.row.customerName}`" tag="a"
class="wordprimary" v-html="scope.row.customerName">
</router-link
>
<
span
v-else
v-html=
"scope.row.customerName"
></span
>
<
/div
>
<
!--
<el-tooltip
placement=
"top"
v-if=
"scope.row.customerText.length>20"
>
--
>
<
!--
<div
slot=
"content"
>
{{
scope
.
row
.
customerText
}}
</div>
--
>
<
!--
<div
class=
"renling"
>
--
>
<
!--
<router-link
v-if=
"scope.row.companyId"
:to=
"`/enterprise/$
{encodeStr(scope.row.companyId)}?path=cooperationRecord
&
companyName=${scope.row.customerName}`" tag="a"-->
<!--class="wordprimary" v-html="scope.row.customerName">
</router-link>
--
>
<
!--
<span
v-else
v-html=
"scope.row.customerName"
></span>
--
>
<
!--
</div>
--
>
<
!--
</el-tooltip>
--
>
<
!--
<div
class=
"renling"
v-else
>
--
>
<
!--
<router-link
v-if=
"scope.row.companyId"
:to=
"`/enterprise/$
{encodeStr(scope.row.companyId)}?path=cooperationRecord
&
companyName=${scope.row.customerName}`" tag="a"-->
<!--class="wordprimary" v-html="scope.row.customerName">
</router-link>
--
>
<
!--
<span
v-else
v-html=
"scope.row.customerName"
></span>
--
>
<
!--
</div>
--
>
</div>
</
template
>
...
...
@@ -107,9 +107,9 @@
</el-table-column>
<el-table-column
label=
"操作"
min-width=
"256"
:resizable=
"false"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<span
class=
"wordprimary tabs"
@
click=
"
goAccess
(scope.row)"
>
修改项目信息
</span>
<span
class=
"wordprimary tabs"
@
click=
"
goAssessment
(scope.row)"
>
查看导入进度
</span>
<span
class=
"worddel tabs"
@
click=
"
goDisposal
(scope.row)"
>
删除
</span>
<span
class=
"wordprimary tabs"
@
click=
"
editpro
(scope.row)"
>
修改项目信息
</span>
<span
class=
"wordprimary tabs"
@
click=
"
detailpro
(scope.row)"
>
查看导入进度
</span>
<span
class=
"worddel tabs"
@
click=
"
deleetpro
(scope.row)"
>
删除
</span>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -121,6 +121,24 @@
</el-pagination>
</div>
</div>
<el-dialog
title=
"删除项目"
:visible
.
sync=
"deletevisible"
width=
"480px"
custom-class=
'dialog-supplier'
>
<el-divider></el-divider>
<div
class=
"protypes"
>
<div
class=
"ck"
v-if=
"typenum>1"
>
项目台账共有3个阶段
</div>
<div
class=
"ck"
v-else
>
是否删除此项目?删除后无法返回。
</div>
<div
class=
"ck"
><el-checkbox
:indeterminate=
"indeterminate"
v-model=
"checkAll"
@
change=
"handleCheckAllChange"
>
删除全部
</el-checkbox></div>
<el-checkbox-group
v-model=
"checkds"
@
change=
"handleCheck"
>
<div
class=
"ck"
v-for=
"(item,index) in allchecks"
>
<el-checkbox
:key=
"index"
:label=
"item.label"
>
{{item.text}}
</el-checkbox>
</div>
</el-checkbox-group>
</div>
<el-divider></el-divider>
<div
style=
"padding: 16px 20px 24px;text-align: right"
>
<el-button
size=
"small"
@
click=
"deletevisible = false"
>
取消
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"getDelete"
>
确定删除
</el-button>
</div>
</el-dialog>
<el-dialog
class=
"pro-news"
:visible
.
sync=
"dialogVisible"
...
...
@@ -141,19 +159,22 @@
<el-input
type=
"text"
placeholder=
"请输入文件名称"
v-model=
"queryParam.projectFileName"
></el-input>
</el-form-item>
<el-form-item
label=
"成本阶段"
class=
"row"
prop=
"cbStage"
>
<el-select
placeholder=
"请选择成本阶段"
v-model=
"queryParam.cbStage"
>
<el-checkbox
v-model=
"ischeck"
v-if=
"isedit"
class=
"checkcb"
></el-checkbox>
<el-select
placeholder=
"请选择成本阶段"
v-model=
"queryParam.cbStage"
:disabled=
"!ischeck"
>
<el-option
v-for=
"(item,index) in cbStagelist"
:label=
"item.dictLabel"
:value=
"item.dictValue"
:key=
"index"
></el-option>
</el-select>
</el-form-item>
</el-form
>
<div
class=
"popbot"
>
<div
class=
"btn btn_cancel h32"
@
click=
"dialogVisible = false"
>
取消
</div>
<div
class=
"btn btn_primary h32"
@
click=
"insertPro"
:class=
"{'btn_disabled':!queryParam.cbStage}"
:disabled=
"!queryParam.cbStage"
>
下一步,导入数据
</div>
<div
class=
"btn btn_primary h32"
v-if=
"isedit && !ischeck"
@
click=
"savepro"
>
保存
</div>
<div
class=
"btn btn_primary h32"
v-if=
"isedit && ischeck"
@
click=
"changepro"
>
下一步,导入数据
</div>
<div
class=
"btn btn_primary h32"
v-if=
"!isedit && !ischeck"
@
click=
"insertPro"
:class=
"{'btn_disabled':!queryParam.cbStage}"
:disabled=
"!queryParam.cbStage"
>
下一步,导入数据
</div>
</div>
</el-dialog>
</div>
<proupload
v-if=
"isupload"
:uploadData=
uploadData
></proupload>
<proupload
v-if=
"isupload"
:uploadData=
"uploadData"
:cbStagelist=
"cbStagelist"
:prodetail=
"prodetail"
@
closeupload=
"colsepro"
></proupload>
<el-dialog
title=
"草稿箱"
:visible
.
sync=
"cgxVisible"
width=
"960px"
custom-class=
'dialog-supplier'
>
<el-divider></el-divider>
...
...
@@ -176,7 +197,7 @@
</el-table-column>
<el-table-column
label=
"成本阶段"
width=
"105px"
>
<
template
slot-scope=
"scope"
>
<div
v-for=
"
item in cbStagelist
"
>
<div
v-for=
"
(item,index) in cbStagelist"
:key=
"index+11
"
>
<span
v-if=
"scope.row.cbStage == item.dictValue"
>
{{
item
.
dictLabel
}}
</span>
</div>
</
template
>
...
...
@@ -189,14 +210,14 @@
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<span
class=
"wordprimary"
@
click=
"jxbj(scope.row)"
>
继续编辑
</span>
<span
class=
"worddel"
>
删除
</span>
<span
class=
"worddel"
@
click=
"deletecg(scope.row.id)"
>
删除
</span>
</
template
>
</el-table-column>
</el-table>
</div>
<div
class=
"pagination clearfix"
v-show=
"total>
formdata.pageS
ize"
>
<el-pagination
background
:page-size=
"
formdata.pageSize"
:current-page
.
sync=
"formdata.pageN
um"
@
current-change=
"
handleCurrentChange
"
layout=
"prev, pager, next"
<div
class=
"pagination clearfix"
v-show=
"total>
cgPages
ize"
>
<el-pagination
background
:page-size=
"
cgPagesize"
:current-page
.
sync=
"cgPagen
um"
@
current-change=
"
getCGXlist
"
layout=
"prev, pager, next"
:total=
"cgxtotal"
>
</el-pagination>
</div>
...
...
@@ -206,7 +227,14 @@
</template>
<
script
>
import
'@/assets/styles/public.scss'
import
{
checkProjectCodeExist
,
addProject
,
getDraftDialogList
}
from
'@/api/projectCostLedger/index'
import
{
addNewStageProject
,
addProject
,
checkProjectCodeExist
,
deleteDraft
,
editProjectInfo
,
getDraftDialogList
,
getProjectCbStageNotDraft
}
from
'@/api/projectCostLedger/index'
import
{
getDicts
}
from
'@/api/system/dict/data'
import
proupload
from
'@/views/projectCostLedger/upload/index'
import
skeleton
from
'@/views/project/projectList/component/skeleton'
...
...
@@ -216,6 +244,7 @@
components
:{
proupload
,
skeleton
},
data
()
{
return
{
typenum
:
2
,
formdata
:{},
isSkeleton
:
false
,
total
:
10
,
...
...
@@ -235,12 +264,24 @@
cbStage
:[{
required
:
true
,
message
:
'请选择成本阶段!'
,
trigger
:
'blur'
},],
},
isupload
:
false
,
tableData
:[],
tableData
:[
{}
],
cgxVisible
:
false
,
cgxSkeleton
:
false
,
cgxtotal
:
0
,
cgxlist
:[],
uploadData
:{},
//新增项目返回的数据
uploadData
:{
cbStage
:
0
,
},
//新增项目返回的数据
cgPagesize
:
10
,
cgPagenum
:
1
,
prodetail
:
false
,
isedit
:
false
,
//是否修改项目
ischeck
:
false
,
//是否可选
deletevisible
:
false
,
indeterminate
:
false
,
//半选状态
checkAll
:
false
,
checkds
:[],
allchecks
:[],
//可以用的项目阶段
};
},
//可访问data属性
...
...
@@ -256,6 +297,8 @@
})
//获取草稿箱
this
.
getCGXlist
()
//获取列表
this
.
getlist
()
},
//计算集
computed
:
{
...
...
@@ -263,7 +306,79 @@
},
//方法集
methods
:
{
getlist
(){
},
handleCheckAllChange
(
val
){
this
.
checkAll
=
val
this
.
checkds
=
[]
if
(
val
==
true
){
this
.
allchecks
.
forEach
(
item
=>
{
this
.
checkds
.
push
(
item
.
label
)
})
}
this
.
indeterminate
=
false
},
handleCheck
(){
if
(
this
.
checkds
.
length
==
this
.
typenum
){
this
.
checkAll
=
true
}
else
{
this
.
checkAll
=
false
}
this
.
indeterminate
=
this
.
checkds
.
length
>
0
&&
this
.
checkds
.
length
<
this
.
typenum
},
//修改项目
editpro
(
row
){
this
.
isedit
=
true
this
.
ischeck
=
false
this
.
prodetail
=
false
this
.
dialogVisible
=
true
this
.
queryParam
=
{}
this
.
queryParam
=
[...
this
.
queryParam
,...
row
]
this
.
protitle
=
'修改项目信息'
},
//查看进度
detailpro
(
row
){
this
.
uploadData
=
row
this
.
uploadData
.
id
=
this
.
uploadData
.
projectId
this
.
prodetail
=
true
},
//删除项目
deleetpro
(
row
){
this
.
deletevisible
=
true
this
.
prodetail
=
false
getProjectCbStageNotDraft
(
row
.
relatedId
).
then
(
res
=>
{
let
list
=
res
.
data
let
cb
=
this
.
cbStagelist
let
datas
=
[]
list
.
forEach
(
item
=>
{
cb
.
for
(
i
=>
{
if
(
item
.
dictValue
==
i
){
let
arr
=
{
'label'
:
i
,
'text'
:
item
.
dictLabel
}
datas
.
push
(
arr
)
}
})
})
this
.
allchecks
=
datas
this
.
typenum
=
list
.
length
this
.
checkds
=
[]
})
},
getDelete
(){
// this.checkds 勾选了要删除的数据
this
.
getlist
()
},
//返回列表
colsepro
(){
this
.
isupload
=
false
this
.
getCGXlist
()
this
.
getlist
()
},
addPro
(){
this
.
ischeck
=
true
this
.
isedit
=
false
this
.
dialogVisible
=
true
this
.
queryParam
=
{
projectName
:
''
,
//项目名称
...
...
@@ -276,7 +391,8 @@
},
getSearch
(){
this
.
formdata
.
pageNum
=
1
// this.customerAll()
this
.
getlist
()
},
getipmProjectNo
(){
//点击且校验了当前编码有数据才获取
...
...
@@ -315,10 +431,25 @@
}
})
},
//修改项目
savepro
(){
editProjectInfo
(
JSON
.
stringify
(
this
.
queryParam
)).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
dialogVisible
=
false
this
.
getlist
()
}
})
},
//修改阶段
changepro
(){
addNewStageProject
(
JSON
.
parse
(
JSON
.
stringify
(
this
.
queryParam
))).
then
(
res
=>
{
this
.
uploadData
=
res
.
data
this
.
uploadData
.
id
=
this
.
uploadData
.
projectId
this
.
isupload
=
true
})
},
//继续编辑
jxbj
(
data
){
console
.
log
(
this
.
cgxlist
)
console
.
log
(
data
)
this
.
uploadData
=
data
this
.
isupload
=
true
this
.
cgxVisible
=
false
...
...
@@ -339,18 +470,47 @@
return
"enterprise-name-row"
;
},
getcgx
(){
this
.
getCGXlist
()
if
(
this
.
cgxtotal
>
0
){
this
.
getCGXlist
(
1
)
this
.
cgxVisible
=
true
}
},
getCGXlist
(){
getCGXlist
(
page
){
this
.
cgxSkeleton
=
true
getDraftDialogList
().
then
(
res
=>
{
this
.
cgxtotal
=
res
.
data
.
length
this
.
cgxlist
=
res
.
data
this
.
cgPagenum
=
page
let
param
=
{
pageSize
:
this
.
cgPagesize
,
pageNum
:
this
.
cgPagenum
}
getDraftDialogList
(
param
).
then
(
res
=>
{
this
.
cgxtotal
=
res
.
total
this
.
cgxlist
=
res
.
rows
this
.
cgPagenum
=
res
.
currentPage
this
.
cgxSkeleton
=
false
})
},
deletecg
(
id
){
this
.
$confirm
(
'是否确定删除此项目,删除后无法找回。'
,
'提示'
,
{
confirmButtonText
:
'确定删除'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
deleteDraft
(
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
$message
({
type
:
'success'
,
message
:
'删除成功!'
});
this
.
getCGXlist
(
1
)
}
})
}).
catch
(()
=>
{
this
.
$message
({
type
:
'info'
,
message
:
'已取消删除'
});
});
},
},
}
</
script
>
...
...
@@ -455,7 +615,10 @@
.row
{
margin-bottom
:
16px
;
position
:
relative
;
.checkcb
{
position
:
absolute
;
left
:
-100px
;
}
.el-form-item__label
{
font-weight
:
400
;
opacity
:
0
.8
;
...
...
@@ -575,8 +738,29 @@
padding
:
0
;
}
}
.wordprimary
{
margin-left
:
12px
;
}
.worddel
{
color
:
#FA5351
;
padding-left
:
12px
;
cursor
:
pointer
;
}
.pagination
{
padding-top
:
16px
;
text-align
:
right
;
}
.protypes
{
padding
:
24px
20px
;
.ck
{
margin-bottom
:
12px
;
height
:
22px
;
font-size
:
14px
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
line-height
:
22px
;
&
:last-child
{
margin-bottom
:
0
;
}
}
}
</
style
>
dsk-operate-ui/src/views/projectCostLedger/upload/index.vue
View file @
f51623ca
<
template
>
<div
class=
"project-cost-ledger-inner"
>
<el-upload
ref=
"uploadpro"
class=
"upload-demo"
:multiple=
"true"
accept=
".xls,.xlsx"
action=
""
drag
:auto-upload=
"false"
:on-change=
"handleFileListChange"
:headers=
"headers"
>
</el-upload>
<div
class=
"pro-upload"
>
<div
class=
"title_wrap i"
>
<div
class=
"title-small"
><span>
项目成本台账
<i
class=
"el-icon-arrow-right"
></i>
</span>
导入项目
</div>
...
...
@@ -11,7 +23,7 @@
<el-form
:model=
"formdata"
label-width=
"82px"
:rules=
"rules"
label-position=
"right"
:inline=
"true"
>
<el-row>
<el-form-item
label=
"项目名称"
>
<el-input
v-model=
"formdata.
customer
Name"
disabled
placeholder=
"请输入工程名称"
clearable
></el-input>
<el-input
v-model=
"formdata.
project
Name"
disabled
placeholder=
"请输入工程名称"
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"IPM项目编码"
label-width=
"100px"
>
<el-input
v-model=
"formdata.ipmProjectNo"
disabled
placeholder=
"请输入IPM项目编码"
clearable
></el-input>
...
...
@@ -20,7 +32,7 @@
<el-input
v-model=
"formdata.projectFileName"
disabled
placeholder=
"请输入文件名称"
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"成本阶段"
prop=
"cbStage"
>
<el-select
v-model=
"formdata.cbStage"
disabled
multiple
placeholder=
"请选择"
:collapse-tags=
"true"
<el-select
v-model=
"formdata.cbStage"
disabled
placeholder=
"请选择"
:collapse-tags=
"true"
clearable
>
<el-option
v-for=
"(item,index) in cbStagelist"
:label=
"item.dictLabel"
:value=
"item.dictValue"
:key=
"index"
></el-option>
...
...
@@ -39,152 +51,168 @@
<el-row>
<el-form-item
label=
"直接费成本"
prop=
"zjfcb"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
>
<div
class=
"fileli"
v-for=
"(item,index) in directExpense"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls
</div>
<div
class=
"prostatus i1"
>
解析成功
</div>
<div
class=
"cz"
>
<div>
重新上传
</div>
<div>
删除
</div>
</div>
<div
class=
"name"
>
{{
item
.
fileName
}}
</div>
<template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
<div
class=
"wrong"
>
失败原因:解析失败的原因展示
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
<div
class=
"fileli"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls
</div>
<div
class=
"prostatus i2"
>
解析中
</div>
<div
class=
"cz"
>
<div>
重新上传
</div>
<div>
删除
</div>
</div>
</div>
<div
class=
"upload"
>
<el-button
class=
"uploadpro"
@
click=
"uplpro(0)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
<div
class=
"fileli"
>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"工料汇总"
prop=
"glhz"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
v-for=
"(item,index) in quantitySummary"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls
</div>
<div
class=
"prostatus i3"
>
解析失败
</div>
<div
class=
"cz"
>
<div>
重新上传
</div>
<div>
删除
</div>
<div
class=
"name"
>
{{item.fileName}}
</div>
<
template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
</div>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"工料汇总"
prop=
"glhz"
>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
<el-button
class=
"uploadpro"
@
click=
"uplpro(1)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"措施项目"
prop=
"csxm"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
v-for=
"(item,index) in measureProject"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
{{item.fileName}}
</div>
<
template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
<el-button
class=
"uploadpro"
@
click=
"uplpro(2)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"其他项目"
prop=
"qtxm"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
v-for=
"(item,index) in otherProject"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
{{item.fileName}}
</div>
<
template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
<el-button
class=
"uploadpro"
@
click=
"uplpro(3)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"现场经费"
prop=
"xcjf"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
v-for=
"(item,index) in sceneExpense"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
{{item.fileName}}
</div>
<
template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
<el-button
class=
"uploadpro"
@
click=
"uplpro(4)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item
label=
"成本汇总"
prop=
"cbhz"
>
<div
class=
"filelist"
>
<div
class=
"fileli"
v-for=
"(item,index) in cbSummary"
>
<div>
<img
src=
"../../../assets/images/icon_wrapper.png"
>
<div
class=
"name"
>
{{item.fileName}}
</div>
<
template
v-if=
"item.fileParseStatus"
>
<div
class=
"prostatus i2"
v-if=
"item.fileParseStatus == 1"
>
解析中
</div>
<div
class=
"prostatus i1"
v-if=
"item.fileParseStatus == 2"
>
解析成功
</div>
<div
class=
"prostatus i3"
v-if=
"item.fileParseStatus == 3"
>
解析失败
</div>
</
template
>
<div
class=
"cz"
v-if=
"item.fileParseStatus != 1"
>
<div
v-if=
"item.fileParseStatus != 3"
><a
:href=
"item.fileOssUrl"
>
下载
</a></div>
<div
v-if=
"item.fileParseStatus == 3 && prodetail == false"
>
重新上传
</div>
<div
class=
"i"
@
click=
"deletefille(item.id)"
v-if=
"prodetail == false"
>
删除
</div>
</div>
</div>
<div
class=
"wrong"
v-if=
"item.fileParseStatus&&item.fileParseStatus == 3"
>
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div
class=
"upload"
>
<el-upload
class=
"upload-demo"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
multiple
:limit=
"3"
:on-exceed=
"handleExceed"
:file-list=
"fileList"
>
<el-button
class=
"uploadpro"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
<!--
<div
slot=
"tip"
class=
"el-upload__tip"
>
只能上传jpg/png文件,且不超过500kb
</div>
-->
</el-upload>
<el-button
class=
"uploadpro"
@
click=
"uplpro(5)"
><img
src=
"../../../assets/images/tips-plus.png"
>
上传文件
</el-button>
</div>
</el-form-item>
</el-row>
...
...
@@ -193,7 +221,7 @@
<el-divider></el-divider>
<div
class=
"pro-btns"
>
<el-button
type=
"primary"
size=
"small"
>
导入数据
</el-button>
<el-button
size=
"small"
>
返回
</el-button>
<el-button
size=
"small"
@
click=
"goback"
>
返回
</el-button>
</div>
</div>
...
...
@@ -201,18 +229,25 @@
</template>
<
script
>
import
{
getDicts
}
from
'@/api/system/dict/data'
import
{
getProjectFileUploadDetail
}
from
'@/api/projectCostLedger/index'
import
{
getToken
}
from
'@/utils/auth'
// import { getDicts } from '@/api/system/dict/data'
import
{
deleteCbProjectFile
,
getProjectFileUploadDetail
,
uploadCbProjectFile
}
from
'@/api/projectCostLedger/index'
export
default
{
name
:
'upload'
,
props
:{
uploadData
:
null
},
props
:
{
uploadData
:
Object
,
cbStagelist
:
Array
,
prodetail
:
Boolean
,
//是否是查看 true 不可编辑 false 可编辑
},
data
(){
return
{
formdata
:{
cbStage
:
null
,
cbStage
:
""
,
},
headers
:
{
Authorization
:
"Bearer "
+
getToken
(),
},
cbStagelist
:[],
rules
:{
cbStage
:[{
required
:
true
,
message
:
'请选择成本阶段!'
,
trigger
:
'blur'
},],
},
...
...
@@ -225,57 +260,127 @@
xcjf
:[{
required
:
true
,
trigger
:
'blur'
},],
cbhz
:[{
required
:
true
,
trigger
:
'blur'
},],
},
fileList
:[],
//各个类型数据集
directExpense
:[],
quantitySummary
:[],
measureProject
:[],
otherProject
:[],
sceneExpense
:[],
cbSummary
:[],
uploadtype
:
0
,
//上传的版块类型
}
},
created
()
{
//成本阶段
getDicts
(
'pro_cbstage'
).
then
(
res
=>
{
this
.
cbStagelist
=
res
.
data
})
getProjectFileUploadDetail
(
this
.
uploadData
.
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
if
(
res
.
data
){
this
.
directExpense
=
res
.
data
.
directExpense
this
.
quantitySummary
=
res
.
data
.
quantitySummary
this
.
measureProject
=
res
.
data
.
measureProject
this
.
otherProject
=
res
.
data
.
otherProject
this
.
sceneExpense
=
res
.
data
.
sceneExpense
this
.
cbSummary
=
res
.
data
.
cbSummary
}
else
{
this
.
formdata
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
uploadData
))
this
.
formdata
.
cbStage
=
this
.
formdata
.
cbStage
.
toString
()
this
.
getDetail
()
},
methods
:{
goback
(){
this
.
$emit
(
'closeupload'
)
},
getDetail
(){
this
.
directExpense
=
[]
this
.
quantitySummary
=
[]
this
.
measureProject
=
[]
this
.
otherProject
=
[]
this
.
sceneExpense
=
[]
this
.
cbSummary
=
[]
getProjectFileUploadDetail
(
this
.
uploadData
.
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
if
(
res
.
data
){
this
.
directExpense
=
[...
this
.
directExpense
,...
res
.
data
.
directExpense
]
this
.
quantitySummary
=
[...
this
.
quantitySummary
,...
res
.
data
.
quantitySummary
]
this
.
measureProject
=
[...
this
.
measureProject
,...
res
.
data
.
measureProject
]
this
.
otherProject
=
[...
this
.
otherProject
,...
res
.
data
.
otherProject
]
this
.
sceneExpense
=
[...
this
.
sceneExpense
,...
res
.
data
.
sceneExpense
]
this
.
cbSummary
=
[...
this
.
cbSummary
,...
res
.
data
.
cbSummary
]
}
}
})
this
.
formdata
=
this
.
uploadData
console
.
log
(
this
.
uploadData
)
},
methods
:{
handleRemove
(
file
,
fileList
)
{
console
.
log
(
file
,
fileList
);
},
handlePreview
(
file
)
{
console
.
log
(
file
);
uplpro
(
type
){
if
(
!
this
.
prodetail
){
this
.
uploadtype
=
type
this
.
$refs
.
uploadpro
.
$el
.
querySelector
(
'input'
).
click
()
}
},
handleExceed
(
files
,
fileList
)
{
this
.
$message
.
warning
(
`当前限制选择 3 个文件,本次选择了
${
files
.
length
}
个文件,共选择了
${
files
.
length
+
fileList
.
length
}
个文件`
);
deletefille
(
id
){
this
.
$confirm
(
'此操作将永久删除该文件, 是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
deleteCbProjectFile
(
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
$message
({
type
:
'success'
,
message
:
'删除成功!'
});
this
.
getDetail
()
}
})
}).
catch
(()
=>
{
this
.
$message
({
type
:
'info'
,
message
:
'已取消删除'
});
});
},
beforeRemove
(
file
,
fileList
)
{
return
this
.
$confirm
(
`确定移除
${
file
.
name
}
?`
);
handleFileListChange
(
file
,
fileList
)
{
var
testmsg
=
file
.
name
.
substring
(
file
.
name
.
lastIndexOf
(
"."
)
+
1
);
const
extension
=
testmsg
===
"xlsx"
;
const
extension1
=
testmsg
===
"xls"
;
if
(
!
extension
&&
!
extension1
)
{
this
.
$message
({
message
:
"上传文件只能是.xls,.xlsx格式!"
,
type
:
"warning"
,
});
return
false
;
}
const
isLt2M
=
file
.
size
/
1024
/
1024
<
10
if
(
!
isLt2M
)
{
this
.
$refs
.
upload
.
clearFiles
()
this
.
$message
({
message
:
'上传文件大小不能超过 10MB!'
,
type
:
'warning'
})
return
false
}
const
formdata
=
new
FormData
()
formdata
.
append
(
"file"
,
new
File
([
file
.
raw
],
encodeURIComponent
(
file
.
name
)))
formdata
.
append
(
"projectId"
,
this
.
formdata
.
id
)
formdata
.
append
(
"cbType"
,
this
.
uploadtype
)
uploadCbProjectFile
(
formdata
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
let
data
=
res
.
data
data
.
id
=
data
.
fileId
switch
(
this
.
uploadtype
)
{
case
0
:
this
.
directExpense
.
push
(
data
)
break
;
case
1
:
this
.
quantitySummary
.
push
(
data
)
break
;
case
2
:
this
.
measureProject
.
push
(
data
)
break
;
case
3
:
this
.
otherProject
.
push
(
data
)
break
;
case
4
:
this
.
sceneExpense
.
push
(
data
)
break
;
case
5
:
this
.
cbSummary
.
push
(
data
)
break
;
default
:
break
}
}
})
},
}
}
</
script
>
...
...
@@ -389,7 +494,7 @@
margin-left
:
12px
;
color
:
#0081FF
;
display
:
inline-block
;
&
:last-child
{
&
.i
{
color
:
#FF3C3C
;
}
}
...
...
@@ -445,5 +550,9 @@
margin-left
:
12px
;
}
}
.upload-demo
{
opacity
:
0
;
position
:
absolute
;
z-index
:
-9999
;
}
</
style
>
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