Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
web-project
Project
Project
Details
Activity
Releases
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-project
Commits
31f59ecc
Commit
31f59ecc
authored
Oct 23, 2024
by
高滢
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
963cdc42
fdb12099
Changes
25
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
1727 additions
and
205 deletions
+1727
-205
monthlyPlan.ts
src/api/project/monthlyPlan.ts
+11
-0
performance.ts
src/api/project/performance.ts
+26
-0
saftyManage.ts
src/api/project/saftyManage.ts
+3
-0
settlementManage.ts
src/api/project/settlementManage.ts
+14
-0
engineeringProject.ts
src/router/routes/modules/engineeringProject.ts
+10
-0
settlementManagement.ts
src/router/routes/modules/settlementManagement.ts
+13
-1
biddingManagement.data.ts
src/views/biddingManagement/biddingManagement.data.ts
+1
-0
index.vue
src/views/biddingManagement/index.vue
+2
-2
statisticsBidding.vue
src/views/biddingManagement/statisticsBidding.vue
+2
-0
changeSignatrue.data.ts
src/views/changeSignature/changeSignatrue.data.ts
+1
-0
index.vue
src/views/changeSignature/index.vue
+20
-25
index.vue
src/views/performance/index.vue
+10
-4
performanceEdit.vue
src/views/performance/performanceEdit.vue
+152
-24
index.vue
src/views/performance/statisticPerformance/index.vue
+124
-0
performanceStatisticWindow.vue
...mance/statisticPerformance/performanceStatisticWindow.vue
+44
-0
statisticData.ts
src/views/performance/statisticPerformance/statisticData.ts
+267
-0
data.ts
src/views/potentialSafety/data.ts
+130
-20
index.vue
src/views/potentialSafety/index.vue
+278
-69
safetyDrawer.vue
src/views/potentialSafety/safetyDrawer.vue
+2
-2
safetyPotentialWindow.vue
src/views/potentialSafety/safetyPotentialWindow.vue
+172
-0
index.vue
src/views/safetyEducation/index.vue
+9
-1
data.tsx
src/views/settlementManagement/data.tsx
+4
-4
index.vue
src/views/settlementManagement/index.vue
+5
-2
settlementManageEdit.vue
src/views/settlementManagement/settlementManageEdit.vue
+176
-51
index.vue
src/views/settlementManagement/statistic/index.vue
+251
-0
No files found.
src/api/project/monthlyPlan.ts
View file @
31f59ecc
...
...
@@ -21,7 +21,9 @@ enum Api {
MothCycelEdit
=
'/pro/mothCycle/edit'
,
BusinessComDetails
=
'/pro/monthEngineer/businessComDetails'
,
EditStatus
=
'/pro/mothCycle/editStatus'
,
SafetyHazard
=
'/pro/export/safetyHazard'
}
export
const
getMonthlyPlanList
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
...
...
@@ -88,6 +90,15 @@ export const exportMonthCount = (params?: any) =>
},
{
errorMessageMode
:
'none'
,
isTransformResponse
:
false
},
);
export
const
exportSafetyHazard
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
(
{
url
:
Api
.
SafetyHazard
,
data
:
params
,
responseType
:
'blob'
,
},
{
errorMessageMode
:
'none'
,
isTransformResponse
:
false
},
);
export
const
getSelectDeptById
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
({
...
...
src/api/project/performance.ts
View file @
31f59ecc
...
...
@@ -19,6 +19,9 @@ enum Api {
Itemdelete
=
'/pro/completion/delProject'
,
GetPerformanceDetail
=
'/pro/reportCenter/details/completionSituation'
,
getProject
=
'/pro/completion/getProject'
,
statisticCompletion
=
'/pro/completion/statisticCompletion'
,
statisticCompletionDetails
=
'/pro/completion/statisticCompletionDetails'
,
ExportCount
=
'/pro/completion/statistic'
}
export
const
getListByPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
...
...
@@ -73,3 +76,26 @@ export const getPerformanceDetail = (params?: any) =>
export
const
getProject
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
getProject
,
params
});
export
const
getStatisticCompletionProject
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
({
url
:
Api
.
statisticCompletion
,
params
,
});
export
const
getStatisticCompletionDetails
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
({
url
:
Api
.
statisticCompletionDetails
,
params
,
});
export
const
exportStatisticList
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
(
{
url
:
Api
.
ExportCount
,
data
:
params
,
responseType
:
'blob'
,
},
{
errorMessageMode
:
'none'
,
isTransformResponse
:
false
},
);
src/api/project/saftyManage.ts
View file @
31f59ecc
...
...
@@ -3,6 +3,7 @@ import { ProjectModel, ProjectParams } from '@/api/project/model/projectModel';
enum
Api
{
GetList
=
'/pro/dangerManagement/page'
,
GetListAll
=
'/pro/dangerManagement/all'
,
potentialSafetyGetList
=
'/pro/dangerManagement/page'
,
UpdateProject
=
'/pro/dangerManagement/update'
,
DeleteProject
=
'/pro/dangerManagement/del'
,
...
...
@@ -10,6 +11,8 @@ enum Api {
export
const
getListByPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
export
const
getListByAll
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetListAll
,
data
:
params
});
export
const
potentialSafetyGetListByPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
potentialSafetyGetList
,
data
:
params
});
...
...
src/api/project/settlementManage.ts
View file @
31f59ecc
...
...
@@ -24,6 +24,8 @@ enum Api {
getDepartmentList
=
'/pro/sys/sysDeptId'
,
// 查询季度是否已经存在
isSettlement
=
'/pro/settlement/is-settlement'
,
GetListAll
=
'/pro/settlement/listAll'
,
ExportCount
=
'/pro/export/settlementManagementStatistic'
,
}
export
const
getSettlementManageList
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectParams
>
({
url
:
Api
.
GetList
,
data
:
params
});
...
...
@@ -96,3 +98,15 @@ export const isSettlement = (params?: any) =>
url
:
Api
.
isSettlement
,
params
,
});
export
const
getListAll
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetListAll
,
data
:
params
});
export
const
exportStatisticList
=
(
params
?:
any
)
=>
defHttp
.
post
<
any
>
(
{
url
:
Api
.
ExportCount
,
data
:
params
,
responseType
:
'blob'
,
},
{
errorMessageMode
:
'none'
,
isTransformResponse
:
false
},
);
src/router/routes/modules/engineeringProject.ts
View file @
31f59ecc
...
...
@@ -82,6 +82,16 @@ const engineeringProject: AppRouteModule = {
orderNo
:
2
,
},
},
{
path
:
'statisticPerformance'
,
name
:
'statisticPerformance'
,
component
:
()
=>
import
(
'@/views/performance/statisticPerformance/index.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/performance/index'
,
title
:
'统计项目投资计划完成情况'
,
orderNo
:
2
,
},
},
{
path
:
'performanceEdit'
,
name
:
'performanceEdit'
,
...
...
src/router/routes/modules/settlementManagement.ts
View file @
31f59ecc
...
...
@@ -8,13 +8,23 @@ const settlementManagement: AppRouteModule = {
component
:
LAYOUT
,
redirect
:
'/settlementManagement/index'
,
meta
:
{
hideChildrenInMenu
:
tru
e
,
hideChildrenInMenu
:
fals
e
,
icon
:
'icon-park-outline:align-text-left-one'
,
orderNo
:
4
,
auth
:
'/www/dist/index.html#/settlementManagement/index'
,
title
:
'结算管理'
,
},
children
:
[
{
path
:
'statistic'
,
name
:
'settlementManagementStatistic'
,
component
:
()
=>
import
(
'@/views/settlementManagement/statistic/index.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/settlementManagement/index'
,
title
:
'结算管理统计'
,
orderNo
:
11
,
},
},
{
path
:
'index'
,
name
:
'settlementManagement'
,
...
...
@@ -22,6 +32,7 @@ const settlementManagement: AppRouteModule = {
meta
:
{
auth
:
'/www/dist/index.html#/settlementManagement/index'
,
// affix: true,
// hideMenu: true,
title
:
'结算管理'
,
orderNo
:
4
,
},
...
...
@@ -33,6 +44,7 @@ const settlementManagement: AppRouteModule = {
meta
:
{
auth
:
'/www/dist/index.html#/settlementManagement/index'
,
// affix: true,
hideMenu
:
true
,
title
:
'新建结算管理'
,
orderNo
:
8
,
},
...
...
src/views/biddingManagement/biddingManagement.data.ts
View file @
31f59ecc
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
moment
from
"moment"
;
//主模块-投资管理列表页
export
const
columns
:
BasicColumn
[]
=
[
{
...
...
src/views/biddingManagement/index.vue
View file @
31f59ecc
...
...
@@ -25,7 +25,7 @@
label: '修改',
onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => {
return
record.reviewStatus == '0'||record.reviewStatus == null
;
return
true
;
},
},
{
...
...
@@ -37,7 +37,7 @@
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return
record.reviewStatus == '0'||record.reviewStatus == null
;
return
true
;
},
},
{
...
...
src/views/biddingManagement/statisticsBidding.vue
View file @
31f59ecc
...
...
@@ -42,6 +42,7 @@
componentProps
:
{
placeholder
:
'年份'
,
picker
:
'year'
,
defaultValue
:
moment
().
format
(
'YYYY'
),
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
...
...
@@ -56,6 +57,7 @@
component
:
'Select'
,
componentProps
:
{
placeholder
:
'季度'
,
defaultValue
:
'第一季度'
,
options
:
[
{
label
:
'第一季度'
,
...
...
src/views/changeSignature/changeSignatrue.data.ts
View file @
31f59ecc
...
...
@@ -83,6 +83,7 @@ export const searchFormSchema: FormSchema[] = [
field
:
'companyName'
,
label
:
''
,
component
:
'Select'
,
required
:
false
,
componentProps
:
{
options
:
[
{
label
:
'公司名称1'
,
value
:
'1'
},
...
...
src/views/changeSignature/index.vue
View file @
31f59ecc
...
...
@@ -8,14 +8,14 @@
</
template
>
<
template
#
bodyCell=
"{ column, record }"
>
<template
v-if=
"column.key === 'status'"
>
<Tag
color=
"warning"
v-if=
"record.status == '0'"
>
未审核
</Tag>
<Tag
color=
"warning"
v-if=
"record.status ==
=
'0'"
>
未审核
</Tag>
</
template
>
<
template
v-if=
"column.key === 'status'"
>
<Tag
color=
"success"
v-if=
"record.status == '1'"
>
已审核
</Tag>
<Tag
color=
"success"
v-if=
"record.status ==
=
'1'"
>
已审核
</Tag>
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
v-if=
"record.status == '0'"
v-if=
"record.status ==
=
'0'"
:actions=
"[
{
label: '修改',
...
...
@@ -70,24 +70,18 @@
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
operateType
,
addItemApi
,
addItemData
}
from
'@/api/operations/operations'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
yearModal
from
'@/components/yearModal/yearModal.vue'
;
import
{
getSettlementManageList
,
auditItem
,
deleteList
,
checkQuarter
,
}
from
'@/api/changeSignatrue/changeSignatrue'
;
import
{
columns
,
searchFormSchema
}
from
'@/views/changeSignature/changeSignatrue.data'
;
import
{
Tag
}
from
'ant-design-vue'
;
import
{
useRouter
}
from
'vue-router'
;
import
{
onMounted
}
from
'vue'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
addItemApi
,
addItemData
,
operateType
}
from
'@/api/operations/operations'
;
import
{
BasicTable
,
TableAction
,
useTable
}
from
'@/components/Table'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
auditItem
,
checkQuarter
,
deleteList
,
getSettlementManageList
,}
from
'@/api/changeSignatrue/changeSignatrue'
;
import
{
columns
,
searchFormSchema
}
from
'@/views/changeSignature/changeSignatrue.data'
;
import
{
Tag
}
from
'ant-design-vue'
;
import
{
useRouter
}
from
'vue-router'
;
import
{
onMounted
}
from
'vue'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
const
{
createMessage
}
=
useMessage
();
const
{
createMessage
}
=
useMessage
();
const
{
push
}
=
useRouter
();
const
[
register
,
{
openModal
:
openModal
,
closeModal
:
closeModal
}]
=
useModal
();
...
...
@@ -113,13 +107,14 @@
onMounted
(
async
()
=>
{
const
data
=
await
getDepartmentList
();
searchFormSchema
[
2
].
componentProps
.
options
=
data
;
console
.
log
(
searchFormSchema
[
2
].
componentProps
.
options
,
'数据仓库'
);
searchFormSchema
[
2
].
componentProps
.
options
=
data
.
map
(
item
=>
({
key
:
item
.
value
,
value
:
item
.
label
,
label
:
item
.
label
}));
});
async
function
handleDelete
(
record
:
Recordable
)
{
console
.
log
(
record
);
console
.
log
(
record
);
let
id
=
record
.
id
;
await
deleteList
({
id
});
reload
();
...
...
src/views/performance/index.vue
View file @
31f59ecc
...
...
@@ -7,7 +7,6 @@
<
template
#
bodyCell=
"{ column, text, record, index }"
>
<!-- 当前列是序号列时,显示序号 -->
<span
v-if=
"column.dataIndex === 'serialNumber'"
>
{{
index
+
1
}}
</span>
<template
v-if=
"column.key === 'completionResult'"
>
<Tag
color=
"processing"
>
{{
record
.
completionResult
==
1
?
'已审核'
:
'未审核'
}}
...
...
@@ -27,7 +26,7 @@
label: '修改',
onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => {
return
record.completionResult == 0
;
return
true
;
},
},
{
...
...
@@ -39,7 +38,7 @@
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return
record.completionResult == 0
;
return
true
;
},
},
{
...
...
@@ -52,6 +51,7 @@
},
ifShow: (_action) => {
return record.completionResult == 0;
// return record.completionResult == 0
&&
deptId != '100';
},
},
]"
...
...
@@ -72,9 +72,13 @@
import
{
useRouter
}
from
'vue-router'
;
import
performanceModel
from
'./performanceModel.vue'
;
import
{
Tag
}
from
'ant-design-vue'
;
import
{
onMounted
}
from
'vue'
;
import
{
onMounted
,
ref
}
from
'vue'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
useMessage
}
from
"@/hooks/web/useMessage"
;
import
{
useUserStore
}
from
"@/store/modules/user"
;
const
deptId
=
ref
(
''
);
const
{
createMessage
}
=
useMessage
();
const
{
push
}
=
useRouter
();
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
...
...
@@ -111,12 +115,14 @@
}
onMounted
(
async
()
=>
{
deptId
.
value
=
useUserStore
().
userInfo
.
deptId
;
const
data
=
await
getDepartmentList
();
searchFormSchema
[
2
].
componentProps
.
options
=
data
;
});
function
handleDelete
(
record
:
Recordable
)
{
deleteItem
({
id
:
record
.
id
});
createMessage
.
success
(
'删除成功!'
);
reload
();
}
...
...
src/views/performance/performanceEdit.vue
View file @
31f59ecc
...
...
@@ -10,26 +10,52 @@
<!-- page页的右上角操作(提交和返回)按钮 -->
<template
#
extra
>
<!--
<a-button
type=
"primary"
danger
>
删除
</a-button>
-->
<a-button
type=
"primary"
v-if=
"!disabled"
@
click=
"handleSubmit"
>
提交
</a-button>
<a-button
type=
"primary"
v-if=
"!disabled"
@
click=
"handleSubmit('0')"
>
暂存
</a-button>
<a-button
type=
"primary"
v-if=
"!disabled"
@
click=
"handleSubmit('1')"
>
提交
</a-button>
<a-button
type=
"primary"
@
click=
"history"
v-if=
"historyData"
>
历史记录
</a-button>
<a-button
type=
"default"
@
click=
"router.back()"
>
返回
</a-button>
</
template
>
<!-- page页 -->
<
template
v-for=
"(item, index) in tabsFormSchema"
>
<PageCard
v-if=
"item.show"
:key=
"index"
:title=
"item.name"
>
<!-- 右上角的删除按钮 -->
<template
#
right
>
<a-button
<CollapseContainer
v-for=
"(item, index) in tabsFormSchema"
:key=
"index"
>
<
template
#
title
>
<span
class=
"projectName"
>
{{
item
.
name
}}
</span>
</
template
>
<
template
#
action
>
<a-button
v-if=
"!disabled"
type=
"text"
preIcon=
"ant-design:delete-outlined"
danger
@
click=
"deleteItem(index)"
/>
@
click=
"deleteItemPro(index)"
>
删除项目
</a-button
>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"item.Form[0]"
/>
<!-- 左上角为项目名 -->
<CollapseContainer
v-for=
"(content, key) in item.list"
:key=
"key"
class=
"subCard"
:title=
"content.name"
>
<
template
#
title
>
<span
class=
"contractName"
>
{{
content
.
name
}}
</span>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"item.Form[0]"
/>
</PageCard>
</template>
<!-- 右上角的删除按钮 -->
<
template
#
action
>
<a-button
v-if=
"!disabled"
type=
"text"
preIcon=
"ant-design:delete-outlined"
danger
@
click=
"deleteItemCon(index, key)"
>
删除合同
</a-button
>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"content.form"
/>
</CollapseContainer>
</CollapseContainer>
<!--新增按钮-->
<a-button
v-if=
"!disabled"
type=
"dashed"
@
click=
"add"
preIcon=
"ei:plus"
>
从计划中添加
...
...
@@ -67,8 +93,10 @@
GetEngineProjectList
,
Itemdelete
,
}
from
'@/api/project/performance'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
import
CollapseContainer
from
'@/components/Container/src/collapse/CollapseContainer.vue'
;
//历史记录是否可查
const
historyData
=
ref
(
true
);
...
...
@@ -98,8 +126,10 @@
let
result
=
await
GetEngineProjectList
({
ids
,
});
console
.
log
(
'result:'
,
result
)
formData
.
value
.
ids
=
ids
;
result
.
map
((
res
)
=>
{
console
.
log
(
'res:'
,
res
)
let
item
=
res
;
item
.
time
=
item
.
beginTime
+
'/'
+
item
.
endTime
;
handleNew
(
item
);
...
...
@@ -117,8 +147,10 @@
formData
.
value
.
planCompletion
=
[];
for
(
let
i
=
0
;
i
<
res
.
length
;
i
++
)
{
const
source
=
res
[
i
];
console
.
log
(
'source:'
,
source
)
const
item
=
{
name
:
'序号'
+
(
i
+
1
),
name
:
'项目:'
+
source
.
projectName
,
proId
:
source
.
proId
,
forceRender
:
true
,
show
:
true
,
Form
:
useForm
(
...
...
@@ -158,13 +190,22 @@
};
const
tabsFormSchema
=
reactive
<
TabsFormType
[]
>
([]);
/*删除项目表单*/
async
function
deleteItemPro
(
index
:
any
)
{
formData
.
value
.
planCompletion
.
splice
(
index
,
1
);
tabsFormSchema
.
splice
(
index
,
1
);
loadingRef
.
value
=
false
;
console
.
log
(
formData
.
value
);
// }
}
/*创建完成情况*/
async
function
handleNew
(
info
:
any
)
{
console
.
log
(
info
);
console
.
log
(
'info:'
,
info
)
const
item
=
{
name
:
'
序号'
+
(
tabsFormSchema
.
length
+
1
)
,
name
:
'
项目:'
+
info
.
projectName
,
forceRender
:
true
,
proId
:
info
.
proId
,
show
:
true
,
Form
:
useForm
(
Object
.
assign
(
...
...
@@ -203,15 +244,86 @@
});
}
/*page页的右上角操作(提交和返回)按钮*/
async
function
handleSubmit
()
{
async
function
handleSubmit
(
isSubmit
)
{
for
(
let
i
=
0
;
i
<
tabsFormSchema
.
length
;
i
++
){
let
formSchema
=
tabsFormSchema
[
i
].
Form
[
1
]
const
{
updateSchema
}
=
formSchema
await
nextTick
(()
=>
{
if
(
isSubmit
==
'0'
)
{
updateSchema
([
{
field
:
'projectName'
,
required
:
false
},
{
field
:
'constructionSite'
,
required
:
false
},
{
field
:
'constructionMode'
,
required
:
false
},
{
field
:
'projectType'
,
required
:
false
},
{
field
:
'constructionScale'
,
required
:
false
},
{
field
:
'projectOverview'
,
required
:
false
},
{
field
:
'fundingSource'
,
required
:
false
},
{
field
:
'implementingEntity'
,
required
:
false
},
{
field
:
'filingCycle'
,
required
:
false
},
{
field
:
'totalInvestment'
,
required
:
false
},
{
field
:
'attribute'
,
required
:
false
},
{
field
:
'time'
,
required
:
false
},
{
field
:
'completionSchedule'
,
required
:
false
},
{
field
:
'outputValue'
,
required
:
false
},
{
field
:
'planNum'
,
required
:
false
},
{
field
:
'actualOutputValue'
,
required
:
false
},
{
field
:
'planFunds'
,
required
:
false
},
{
field
:
'actualPay'
,
required
:
false
},
{
field
:
'completionRemarks'
,
required
:
false
},
{
field
:
'fundingSource'
,
required
:
false
},
{
field
:
'projectApproval'
,
required
:
false
},
{
field
:
'fundingSource'
,
required
:
false
},
{
field
:
'competentDepartment'
,
required
:
false
},
{
field
:
'remark'
,
dynamicRules
:
({
values
})
=>
{
return
[{
required
:
false
,}]
},
},
])
}
else
{
updateSchema
([
{
field
:
'projectName'
,
required
:
true
},
{
field
:
'constructionSite'
,
required
:
true
},
{
field
:
'constructionMode'
,
required
:
true
},
{
field
:
'projectType'
,
required
:
true
},
{
field
:
'constructionScale'
,
required
:
true
},
{
field
:
'projectOverview'
,
required
:
true
},
{
field
:
'fundingSource'
,
required
:
true
},
{
field
:
'implementingEntity'
,
required
:
true
},
{
field
:
'filingCycle'
,
required
:
true
},
{
field
:
'totalInvestment'
,
required
:
true
},
{
field
:
'attribute'
,
required
:
true
},
{
field
:
'time'
,
required
:
true
},
{
field
:
'completionSchedule'
,
required
:
true
},
{
field
:
'outputValue'
,
required
:
true
},
{
field
:
'planNum'
,
required
:
true
},
{
field
:
'actualOutputValue'
,
required
:
true
},
{
field
:
'planFunds'
,
required
:
true
},
{
field
:
'actualPay'
,
required
:
true
},
{
field
:
'completionRemarks'
,
required
:
true
},
{
field
:
'fundingSource'
,
required
:
true
},
{
field
:
'projectApproval'
,
required
:
true
},
{
field
:
'fundingSource'
,
required
:
true
},
{
field
:
'competentDepartment'
,
required
:
true
},
{
field
:
'remark'
,
dynamicRules
:
({
values
})
=>
{
return
values
.
fundGap
?
[{
required
:
true
,
message
:
'说明必填'
}]
:
[];
},
}
])
}
})
}
loadingRef
.
value
=
true
;
try
{
for
(
let
i
=
0
;
i
<
tabsFormSchema
.
length
;
i
++
)
{
let
item
=
tabsFormSchema
[
i
];
console
.
log
(
'item1111:'
,
item
)
if
(
item
.
show
)
{
const
{
validate
,
getFieldsValue
}
=
item
.
Form
[
1
];
await
validate
();
let
res
=
getFieldsValue
();
formData
.
value
.
planCompletion
[
i
].
proId
=
item
.
proId
;
formData
.
value
.
planCompletion
[
i
]
=
deepMerge
(
formData
.
value
.
planCompletion
[
i
],
res
);
formData
.
value
.
planCompletion
[
i
].
actualOutputValue
=
Number
(
formData
.
value
.
planCompletion
[
i
].
actualOutputValue
,
...
...
@@ -219,21 +331,22 @@
formData
.
value
.
planCompletion
[
i
].
actualPay
=
Number
(
formData
.
value
.
planCompletion
[
i
].
actualPay
,
);
console
.
log
(
formData
.
value
.
planCompletion
);
}
}
formData
.
value
.
proNumber
=
formData
.
value
.
planCompletion
.
Length
;
formData
.
value
.
isSubmit
=
isSubmit
let
res
=
isUpdate
.
value
?
await
updateItem
(
unref
(
formData
))
:
await
addItem
(
unref
(
formData
));
addItemData
.
operateType
=
operateType
.
update
;
addItemData
.
businessId
=
routeId
.
value
;
addItemData
.
businessType
=
'工程项目投资计划完成情况'
;
const
showDatem
=
await
addItemApi
(
addItemData
);
console
.
log
(
showDatem
,
'记录添加成功'
);
loadingRef
.
value
=
true
;
console
.
log
(
res
);
createMessage
.
success
(
'提交成功!'
);
router
.
back
();
if
(
isSubmit
===
'0'
){
createMessage
.
success
(
'暂存成功!'
);
}
else
{
createMessage
.
success
(
'提交成功!'
);
}
// router.back();
}
catch
(
e
)
{
// 验证失败或出错,切换到对应标签页
console
.
log
(
e
);
...
...
@@ -250,3 +363,18 @@
console
.
log
(
'历史记录'
);
}
</
script
>
<
style
scoped
>
.subCard
{
border
:
1px
solid
#e8eaec
;
}
.projectName
{
border-left
:
blue
solid
6px
;
padding-left
:
10px
;
font-weight
:
bold
;
}
.contractName
{
border-left
:
red
solid
6px
;
padding-left
:
10px
;
font-weight
:
bold
;
}
</
style
>
src/views/performance/statisticPerformance/index.vue
0 → 100644
View file @
31f59ecc
<
template
>
<div
style=
"margin: 16px"
>
<PageCard
title=
"统计工程项目投资计划完成情况"
>
<BasicForm
ref=
"formElRef"
@
register=
"registerForm"
>
<template
#
formFooter
>
<a-button
type=
"primary"
@
click=
"handleSubmit"
>
查询
</a-button>
<a-button
type=
"primary"
@
click=
"exportCount"
style=
"margin-left: 10px"
>
导出
</a-button>
</
template
>
</BasicForm>
<Table
:pagination=
"false"
:dataSource=
"dataSource"
:columns=
"getBasicColumns(params.filingCycle, params.planType)"
bordered
:loading=
"loadingRef"
:rowClassName=
"setRowClassName"
>
<
template
#
projectType=
"{ text, record }"
>
<a
@
click=
"showDetails(record)"
>
{{
text
}}
</a>
</
template
>
</Table>
</PageCard>
<PerformanceStatisticWindow
@
register=
"register"
/>
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
BasicForm
,
useForm
}
from
'@/components/Form'
;
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
import
{
Table
}
from
'ant-design-vue'
;
import
{
onMounted
,
ref
}
from
'vue'
;
import
{
getBasicColumns
,
searchForm
,
}
from
'@/views/performance/statisticPerformance/statisticData'
;
import
{
getSelectDeptById
,
getStatistic
}
from
'@/api/project/monthlyPlan'
;
import
{
getStatisticCompletionProject
,
getStatisticCompletionDetails
}
from
'@/api/project/performance'
;
import
PerformanceStatisticWindow
from
'@/views/performance/statisticPerformance/performanceStatisticWindow.vue'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
exportStatisticList
}
from
"@/api/project/performance"
;
import
{
downloadByData
}
from
"@/utils/file/download"
;
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
onMounted
(
async
()
=>
{
const
data
=
await
getSelectDeptById
();
searchForm
[
2
].
componentProps
.
options
=
data
;
getStatisticList
();
});
const
dataSource
=
ref
([]);
const
loadingRef
=
ref
(
false
);
const
params
=
ref
({
filingCycle
:
'2024'
,
planType
:
'自投'
,
company
:
''
});
const
[
registerForm
,
{
getFieldsValue
}]
=
useForm
({
labelWidth
:
90
,
baseColProps
:
{
span
:
24
},
schemas
:
searchForm
,
showActionButtonGroup
:
false
,
});
function
handleSubmit
()
{
let
data
=
getFieldsValue
();
params
.
value
=
data
;
console
.
log
(
params
.
value
);
getStatisticList
();
}
function
setRowClassName
(
record
)
{
if
(
record
.
projectType
===
'总计'
)
{
return
'rowcolor'
;
}
else
{
return
;
}
}
async
function
exportCount
()
{
const
params
=
getFieldsValue
();
const
data
=
await
exportStatisticList
(
params
);
downloadByData
(
data
,
'统计项目计划投资完成情况报表'
+
'.xlsx'
);
}
async
function
getStatisticList
()
{
loadingRef
.
value
=
true
;
let
data
=
await
getStatisticCompletionProject
(
params
.
value
);
// dataSource.value = data;
let
propsList
=
[
'companyName'
];
propsList
.
map
((
item
)
=>
{
changeData
(
data
,
item
);
});
loadingRef
.
value
=
false
;
}
function
changeData
(
data
,
field
)
{
let
count
=
0
;
//重复项的第一项
let
indexCount
=
1
;
//下一项
while
(
indexCount
<
data
.
length
)
{
var
item
=
data
.
slice
(
count
,
count
+
1
)[
0
];
//获取没有比较的第一个对象
if
(
!
item
[
`
${
field
}
rowSpan`
])
{
item
[
`
${
field
}
rowSpan`
]
=
1
;
//初始化为1
}
if
(
item
[
field
]
===
data
[
indexCount
][
field
])
{
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item
[
`
${
field
}
rowSpan`
]
++
;
data
[
indexCount
][
`
${
field
}
rowSpan`
]
=
0
;
}
else
{
count
=
indexCount
;
}
indexCount
++
;
}
dataSource
.
value
=
data
;
}
function
showDetails
(
record
)
{
openModal
(
true
,
{
record
,
filingCycle
:
params
.
value
.
filingCycle
,
planType
:
params
.
value
.
planType
,
});
}
</
script
>
<
style
scoped
lang=
"less"
>
.tableHiddle {
display: none;
}
.tableshow {
display: revert;
}
::v-deep .ant-table-tbody .ant-table-row {
&.rowcolor .ant-table-cell-fix-left {
background-color: #f5f5f5;
}
}
</
style
>
src/views/performance/statisticPerformance/performanceStatisticWindow.vue
0 → 100644
View file @
31f59ecc
<
template
>
<BasicModal
v-bind=
"$attrs"
width=
"80%"
@
register=
"register"
:title=
"getTitle"
:showOkBtn=
"false"
>
<div
style=
"height: 500px"
>
<Table
:pagination=
"false"
:dataSource=
"dataSource"
:columns=
"getDtailsBasicColumns(params.filingCycle, params.planType)"
bordered
:sticky=
"true"
:loading=
"loadingRef"
:scroll=
"
{ x: 4000, y: 300 }"
>
<template
#
index=
"
{ text, record, index }">
{{
index
+
1
}}
</
template
>
</Table>
</div>
</BasicModal>
</template>
<
script
setup
lang=
"ts"
>
import
{
useModalInner
}
from
'@/components/Modal'
;
import
BasicModal
from
'@/components/Modal/src/BasicModal.vue'
;
import
{
ref
}
from
'vue'
;
import
{
Table
}
from
'ant-design-vue'
;
import
{
getDtailsBasicColumns
}
from
'@/views/performance/statisticPerformance/statisticData'
;
import
{
getStatisticCompletionDetails
}
from
'@/api/project/performance'
;
const
loadingRef
=
ref
(
false
);
// 列表
const
dataSource
=
ref
([]);
const
getTitle
=
ref
(
''
);
const
params
=
ref
({
companyId
:
''
,
projectType
:
''
,
filingCycle
:
''
,
planType
:
''
});
const
[
register
,
{
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
getTitle
.
value
=
data
.
record
.
company
;
params
.
value
.
companyId
=
data
.
record
.
companyId
;
params
.
value
.
projectType
=
data
.
record
.
projectType
;
params
.
value
.
filingCycle
=
data
.
filingCycle
;
params
.
value
.
planType
=
data
.
planType
;
dataSource
.
value
=
await
getStatisticCompletionDetails
(
params
.
value
);
// console.log('212', list);
});
</
script
>
<
style
scoped
lang=
"less"
></
style
>
src/views/performance/statisticPerformance/statisticData.ts
0 → 100644
View file @
31f59ecc
import
{
FormSchema
}
from
'@/components/Form'
;
import
{
useUserStore
}
from
'@/store/modules/user'
;
import
{
BasicColumn
}
from
'@/components/Table'
;
import
moment
from
"moment"
;
const
deptId
=
useUserStore
().
userInfo
.
deptParentId
;
export
const
searchForm
:
FormSchema
[]
=
[
{
field
:
'filingCycle'
,
label
:
''
,
defaultValue
:
new
Date
(),
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
style
:
{
width
:
'100%'
},
picker
:
'year'
,
defaultValue
:
moment
().
format
(
'YYYY'
),
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'planType'
,
label
:
''
,
defaultValue
:
'自投'
,
component
:
'Select'
,
componentProps
:
{
defaultValue
:
'自投'
,
options
:
[
{
label
:
'自投'
,
value
:
'自投'
},
{
label
:
'代建'
,
value
:
'代建'
},
{
label
:
'承建'
,
value
:
'承建'
},
{
label
:
'储备'
,
value
:
'储备'
},
],
placeholder
:
'类型'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'company'
,
label
:
''
,
show
:
deptId
==
'100'
,
component
:
'Select'
,
componentProps
:
{
options
:
[],
placeholder
:
'公司名称'
,
},
colProps
:
{
span
:
4
},
},
];
export
function
getBasicColumns
(
year
:
string
,
planType
:
string
):
BasicColumn
[]
{
return
[
{
title
:
year
+
'年'
+
planType
+
'工程项目投资计划完成情况'
,
colSpan
:
6
,
children
:
[
{
title
:
'公司名称'
,
dataIndex
:
'company'
,
fixed
:
'left'
,
width
:
250
,
customCell
:
(
_
,
any
)
=>
({
rowSpan
:
_
.
companyNamerowSpan
,
}),
},
{
title
:
'项目类型'
,
dataIndex
:
'projectType'
,
fixed
:
'left'
,
width
:
300
,
slots
:
{
customRender
:
'projectType'
},
},
{
title
:
'项目个数'
,
dataIndex
:
'proNum'
,
width
:
200
,
},
{
title
:
'合同总额'
,
dataIndex
:
'contractAmount'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
},
{
title
:
'投资总额(万元)'
,
dataIndex
:
'outputValue'
,
className
:
planType
!=
'承建'
?
'tableShow'
:
'tableHiddle'
,
},
{
title
:
year
+
'年计划完成产值'
,
dataIndex
:
'planCompleteOutputValue'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
},
{
title
:
year
+
'年计划完成投资额度'
,
dataIndex
:
'planOutputValue'
,
className
:
planType
!=
'承建'
?
'tableShow'
:
'tableHiddle'
,
},
{
title
:
year
+
'年计划资金'
,
dataIndex
:
'planFunds'
,
className
:
planType
!=
'储备'
?
'tableShow'
:
'tableHiddle'
,
},
],
},
];
}
export
function
getDtailsBasicColumns
(
year
:
string
,
planType
:
string
):
BasicColumn
[]
{
return
[
{
title
:
'序号'
,
dataIndex
:
'index'
,
fixed
:
'left'
,
width
:
180
,
slots
:
{
customRender
:
'index'
},
},
{
title
:
'项目名称'
,
dataIndex
:
'projectName'
,
fixed
:
'left'
,
width
:
180
,
},
{
title
:
'建设地点'
,
dataIndex
:
'constructionSite'
,
width
:
180
,
},
{
title
:
'项目概况'
,
dataIndex
:
'projectOverview'
,
width
:
200
,
},
{
title
:
'建设规模'
,
dataIndex
:
'constructionScale'
,
width
:
150
,
},
{
title
:
'建设目的及功能'
,
dataIndex
:
'constructionPurpose'
,
width
:
150
,
},
{
title
:
'建设模式'
,
dataIndex
:
'constructionMode'
,
width
:
150
,
},
{
title
:
'资金来源'
,
dataIndex
:
'fundingSource'
,
width
:
150
,
},
{
title
:
'项目类型'
,
dataIndex
:
'projectType'
,
width
:
150
,
},
{
title
:
'总投资'
,
dataIndex
:
'totalInvestment'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
// width: planType === '承建' ? 0 : 150,
width
:
150
,
},
{
title
:
year
+
'年之前总投资额(不包含'
+
year
+
'年)'
,
dataIndex
:
'outputValue'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年计划投资额'
,
dataIndex
:
'matchingFunds'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年实际完成投资额'
,
dataIndex
:
'actualOutputValue'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年计划资金'
,
dataIndex
:
'planFunds'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年实付资金'
,
dataIndex
:
'actualPay'
,
className
:
planType
!==
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
'合同总额'
,
dataIndex
:
'contractAmount'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年之前完成总产值(不包含'
+
year
+
'年)'
,
dataIndex
:
'matchingFunds'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年计划产值'
,
dataIndex
:
'outputValue'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
year
+
'年实际产值'
,
dataIndex
:
'actualOutputValue'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
'建设性质'
,
dataIndex
:
'attribute'
,
width
:
150
,
},
{
title
:
'开工时间'
,
dataIndex
:
'beginTime'
,
width
:
150
,
},
{
title
:
'竣工时间'
,
dataIndex
:
'endTime'
,
width
:
150
,
},
{
title
:
year
+
'年底形象季度'
,
dataIndex
:
'schedule'
,
width
:
150
,
},
{
title
:
'实施主体'
,
dataIndex
:
'implementingEntity'
,
width
:
150
,
},
{
title
:
'合同方式'
,
dataIndex
:
'contract'
,
className
:
planType
===
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
{
title
:
'项目主管部门'
,
dataIndex
:
'competentDepartment'
,
className
:
planType
!=
'承建'
?
'tableShow'
:
'tableHiddle'
,
width
:
150
,
},
// {
// title: '实施级别',
// dataIndex: 'implementationLevel',
// width: 150,
// },
{
title
:
'备注'
,
dataIndex
:
'remarks'
,
width
:
150
,
},
];
}
src/views/potentialSafety/data.ts
View file @
31f59ecc
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
useUserStore
}
from
"@/store/modules/user"
;
const
deptId
=
useUserStore
().
userInfo
.
deptId
;
console
.
log
(
'==========='
,
useUserStore
().
userInfo
)
//主模块-安全隐患列表页
export
const
formSchema
:
FormSchema
[]
=
[
// {
// field: 'fillingPeriod',
// labelWidth: '140px',
// label: '填报周期',
// required: true,
// component: 'DatePicker',
// componentProps: {
// placeholder: '填报周期',
// style: { width: '100%' },
// valueFormat: 'YYYY-MM-DD',
// format: 'YYYY-MM-DD',
// },
// },
{
field
:
'year'
,
label
:
'年份'
,
component
:
'DatePicker'
,
required
:
true
,
componentProps
:
{
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
11
,
offset
:
1
},},
{
field
:
'fillingPeriod'
,
labelWidth
:
'140px'
,
label
:
'填报周期'
,
field
:
'quarter'
,
label
:
'季度'
,
required
:
true
,
component
:
'
DatePicker
'
,
component
:
'
Select
'
,
componentProps
:
{
placeholder
:
'填报周期'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'季度'
,
options
:
[
{
label
:
'第一季度'
,
value
:
'第一季度'
,
},
{
label
:
'第二季度'
,
value
:
'第二季度'
,
},
{
label
:
'第三季度'
,
value
:
'第三季度'
,
},
{
label
:
'第四季度'
,
value
:
'第四季度'
,
},
],
},
colProps
:
{
span
:
11
,
offset
:
1
},
},
// {
// label: '公司名称',
// field: 'companyName',
// labelWidth: 150,
// },
{
label
:
'隐患描述'
,
field
:
'describe'
,
...
...
@@ -117,17 +168,38 @@ export const formSchema: FormSchema[] = [
},
},
];
export
const
columns
:
BasicColumn
[]
=
[
export
const
columns
Date
:
BasicColumn
[]
=
[
{
title
:
'
填报周期
'
,
dataIndex
:
'
fillingPeriod
'
,
title
:
'
公司名称
'
,
dataIndex
:
'
companyName
'
,
width
:
150
,
ifShow
:
deptId
===
'100'
,
fixed
:
'left'
,
customCell
:
(
_
,
any
)
=>
({
rowSpan
:
_
.
companyNamerowSpan
,
}),
// slots: { customRender: 'companyName' },
},
// {
// title: '填报周期',
// dataIndex: 'fillingPeriod',
// width: 150,
// },
{
title
:
'隐患描述'
,
dataIndex
:
'describe'
,
width
:
150
,
},
{
title
:
'年份'
,
dataIndex
:
'year'
,
width
:
150
,
},
{
title
:
'季度'
,
dataIndex
:
'quarter'
,
width
:
150
,
},
{
title
:
'隐患级别'
,
dataIndex
:
'level'
,
...
...
@@ -163,31 +235,69 @@ export const columns: BasicColumn[] = [
dataIndex
:
'responsiblePerson'
,
width
:
180
,
},
{
title
:
'操作'
,
dataIndex
:
'action'
,
width
:
180
,
slots
:
{
customRender
:
'action'
},
},
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
export
const
searchFormSchema
Date
:
FormSchema
[]
=
[
{
field
:
'
fillingPeriod
'
,
field
:
'
year
'
,
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'填报周期'
,
placeholder
:
'选择填报周期'
,
picker
:
'year'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY
-MM-DD
'
,
format
:
'YYYY
-MM-DD
'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'responsiblePerson'
,
field
:
'quarter'
,
label
:
''
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'第一季度'
,
value
:
'第一季度'
},
{
label
:
'第二季度'
,
value
:
'第二季度'
},
{
label
:
'第三季度'
,
value
:
'第三季度'
,
},
{
label
:
'第四季度'
,
value
:
'第四季度'
,
},
],
placeholder
:
'季度'
,
},
colProps
:
{
span
:
4
},
},
{
field
:
'companyName'
,
label
:
''
,
component
:
'Select'
,
ifShow
:
deptId
===
'100'
,
componentProps
:
{
placeholder
:
'公司名称'
,
options
:
[
{
label
:
'责任人一'
,
value
:
'责任人一'
},
{
label
:
'责任人二'
,
value
:
'责任人二'
},
{
label
:
'公司名称'
,
value
:
'公司名称'
,
key
:
'公司名称'
,
},
],
placeholder
:
'责任人'
,
},
colProps
:
{
span
:
4
},
},
...
...
src/views/potentialSafety/index.vue
View file @
31f59ecc
This diff is collapsed.
Click to expand it.
src/views/potentialSafety/safetyDrawer.vue
View file @
31f59ecc
...
...
@@ -31,8 +31,8 @@
showActionButtonGroup
:
false
,
});
onMounted
(
async
()
=>
{
const
data
=
await
getUserList
();
formSchema
[
8
].
componentProps
.
options
=
data
;
//
const data = await getUserList();
//
formSchema[8].componentProps.options = data;
});
const
[
registerDrawer
,
{
setDrawerProps
,
closeDrawer
}]
=
useDrawerInner
(
async
(
data
)
=>
{
resetFields
();
...
...
src/views/potentialSafety/safetyPotentialWindow.vue
0 → 100644
View file @
31f59ecc
<
template
>
<BasicModal
v-bind=
"$attrs"
width=
"80%"
@
register=
"register"
:title=
"getTitle"
:showOkBtn=
"false"
>
<div
style=
"height: 500px"
>
<Table
:pagination=
"false"
:dataSource=
"dataSource"
:columns=
"columns"
bordered
:sticky=
"true"
:loading=
"loadingRef"
:scroll=
"
{ x: 4000, y: 300 }"
/>
</div>
</BasicModal>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
useModalInner
}
from
'@/components/Modal'
;
import
BasicModal
from
'@/components/Modal/src/BasicModal.vue'
;
import
{
ref
}
from
'vue'
;
import
{
Table
}
from
'ant-design-vue'
;
import
{
getStatisticDetails
}
from
'@/api/project/monthlyPlan'
;
const
loadingRef
=
ref
(
false
);
// 列表
const
dataSource
=
ref
([]);
// 表头1
const
columns
=
[
{
title
:
''
,
dataIndex
:
''
,
children
:
[
{
title
:
'项目名称'
,
dataIndex
:
'projectName'
,
width
:
200
,
fixed
:
'left'
,
},
],
},
{
title
:
''
,
dataIndex
:
''
,
children
:
[
{
title
:
'合同名称'
,
dataIndex
:
'contractName'
,
width
:
180
,
},
{
title
:
'收款单位'
,
dataIndex
:
'collectingUnit'
,
width
:
180
,
},
{
title
:
'合同额(万元)'
,
dataIndex
:
'contractAmount'
,
width
:
150
,
},
],
},
{
title
:
'产值完成情况'
,
dataIndex
:
''
,
children
:
[
{
title
:
'上月实际完成值(万元)'
,
dataIndex
:
'completionValueActual'
,
width
:
180
,
},
{
title
:
'累计完成值(万元)'
,
dataIndex
:
'accumulateCompletionValue'
,
width
:
180
,
},
{
title
:
'本月计划完成值(万元)'
,
dataIndex
:
'planCompletionValue'
,
width
:
180
,
},
{
title
:
'上月计划数(万元)'
,
dataIndex
:
'lastMonthPlan'
,
width
:
180
,
},
],
},
{
title
:
'资金支付情况'
,
dataIndex
:
''
,
children
:
[
{
title
:
'上月实付数(万元)'
,
dataIndex
:
'lastMonthActual'
,
width
:
180
,
},
{
title
:
'累计支付数(万元)'
,
dataIndex
:
'accumulatePayment'
,
width
:
180
,
},
{
title
:
'本月计划数(万元)'
,
dataIndex
:
'thisPlanNumber'
,
width
:
180
,
},
],
},
{
title
:
'资金来源'
,
dataIndex
:
''
,
children
:
[
{
title
:
'专项债拨款(万元)'
,
dataIndex
:
'specialFund'
,
width
:
180
,
},
{
title
:
'政府拨款(万元)'
,
dataIndex
:
'governmentFund'
,
width
:
180
,
},
{
title
:
'银行融资(万元)'
,
dataIndex
:
'banFinancing'
,
width
:
180
,
},
{
title
:
'自有资金(万元)'
,
dataIndex
:
'ownFund'
,
width
:
180
,
},
{
title
:
'资金缺口'
,
dataIndex
:
'fundGap'
,
width
:
180
,
},
],
},
{
title
:
''
,
dataIndex
:
''
,
children
:
[
{
title
:
'支付等级'
,
dataIndex
:
'paymentLevel'
,
width
:
180
,
},
{
title
:
'备注'
,
dataIndex
:
'remark'
,
width
:
180
,
},
],
},
];
const
getTitle
=
ref
(
''
);
const
params
=
ref
({
companyId
:
''
,
sourceType
:
''
,
monthYear
:
''
});
const
[
register
,
{
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
console
.
log
(
'data'
,
data
)
loadingRef
.
value
=
true
;
getTitle
.
value
=
data
.
record
.
companyName
;
params
.
value
.
companyId
=
data
.
record
.
companyId
;
params
.
value
.
sourceType
=
data
.
record
.
sourceType
;
params
.
value
.
monthYear
=
data
.
monthYear
;
dataSource
.
value
=
await
getStatisticDetails
(
params
.
value
);
console
.
log
(
'params.value'
,
params
.
value
)
loadingRef
.
value
=
false
;
// console.log('212', list);
});
</
script
>
<
style
scoped
lang=
"less"
></
style
>
src/views/safetyEducation/index.vue
View file @
31f59ecc
...
...
@@ -56,8 +56,10 @@
import
{
useUserStore
}
from
'@/store/modules/user'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
downloadByData
}
from
'@/utils/file/download'
;
import
{
dataStyleTask
}
from
"echarts/types/src/visual/style"
;
const
deptId
=
useUserStore
().
userInfo
.
deptId
;
// const deptId = "764";
const
APopconfirm
=
Popconfirm
;
const
userStore
=
useUserStore
();
const
getUserInfo
=
computed
(()
=>
{
...
...
@@ -294,7 +296,13 @@
}
else
{
columns
.
value
=
columns2
;
}
searchForm
.
value
[
2
].
componentProps
.
options
=
await
getDepartmentList
();
const
data
=
await
getDepartmentList
();
// console.log(data);
searchForm
.
value
[
2
].
componentProps
.
options
=
data
.
map
((
item
)
=>
({
key
:
item
.
value
,
value
:
item
.
label
,
label
:
item
.
label
,
}));
getStatisticList
();
});
...
...
src/views/settlementManagement/data.tsx
View file @
31f59ecc
...
...
@@ -351,10 +351,10 @@ export const formSchema: FormSchema[] = [
label
:
'结算审核金额超合同额比例'
,
labelWidth
:
'300px'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'元'
,
},
component
:
'Input
Number
'
,
//
componentProps: {
//
addonAfter: '元',
//
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
// {
...
...
src/views/settlementManagement/index.vue
View file @
31f59ecc
...
...
@@ -22,7 +22,10 @@
title: '是否确认审核',
placement: 'left',
confirm: examine.bind(null, record,true),
}
},
ifShow: (_action) => {
return (record.reviewStatus == '0'||record.reviewStatus == null)
&&
record.isSubmit == '1'
&&
deptId !== '100';
},
},
{
label: '编辑',
...
...
@@ -101,7 +104,7 @@ onMounted(async () => {
function
handleEdit
(
record
:
Recordable
,
disabled
:
boolean
)
{
console
.
log
(
record
.
id
,
"ddddd"
)
console
.
log
(
record
,
"ddddd"
)
push
({
path
:
'/settlementManagement/edit'
,
query
:
{
...
...
src/views/settlementManagement/settlementManageEdit.vue
View file @
31f59ecc
This diff is collapsed.
Click to expand it.
src/views/settlementManagement/statistic/index.vue
0 → 100644
View file @
31f59ecc
<
template
>
<div
style=
"margin: 16px"
>
<PageCard
title=
"结算管理统计"
>
<BasicForm
ref=
"formElRef"
@
register=
"registerForm"
>
<template
#
formFooter
>
<a-button
type=
"primary"
@
click=
"handleSubmit"
>
查询
</a-button>
<a-button
type=
"primary"
@
click=
"exportCount"
style=
"margin-left: 10px"
>
导出
</a-button>
</
template
>
</BasicForm>
<Table
:pagination=
"false"
:dataSource=
"dataSource"
:columns=
"columns"
bordered
:loading=
"loadingRef"
:rowClassName=
"setRowClassName"
:scroll=
"{ x: 1300,y: 350 }"
>
</Table>
</PageCard>
<StatisticWindow
@
register=
"register"
/>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
onMounted
,
ref
}
from
'vue'
;
import
{
Table
}
from
'ant-design-vue'
;
import
{
getListAll
,
exportStatisticList
}
from
'@/api/project/settlementManage'
;
import
{
BasicForm
,
FormActionType
,
FormSchema
,
useForm
}
from
'@/components/Form'
;
import
StatisticWindow
from
'@/views/monthlyPlan/statisticWindow/statisticWindow.vue'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
useRouter
}
from
'vue-router'
;
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
import
{
downloadByData
}
from
'@/utils/file/download'
;
import
{
useUserStore
}
from
'@/store/modules/user'
;
const
seach
=
ref
([
{
field
:
'givenYear'
,
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
4
},
},
{
field
:
'quarter'
,
label
:
''
,
component
:
'Select'
,
componentProps
:
{
placeholder
:
'季度'
,
options
:
[
{
label
:
'第一季度'
,
value
:
'第一季度'
,
},
{
label
:
'第二季度'
,
value
:
'第二季度'
,
},
{
label
:
'第三季度'
,
value
:
'第三季度'
,
},
{
label
:
'第四季度'
,
value
:
'第四季度'
,
},
],
},
colProps
:
{
span
:
4
},
},
])
const
deptId
=
ref
(
''
);
onMounted
(
async
()
=>
{
deptId
.
value
=
useUserStore
().
userInfo
.
deptId
;
getStatisticList
();
});
// defineOptions({ name: 'MonthlyPlan' });
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
const
formElRef
=
ref
<
Nullable
<
FormActionType
>>
(
null
);
const
[
registerForm
,
{
getFieldsValue
}]
=
useForm
({
labelWidth
:
90
,
baseColProps
:
{
span
:
24
},
schemas
:
seach
,
showActionButtonGroup
:
false
,
});
async
function
exportCount
()
{
const
params
=
getFieldsValue
();
const
data
=
await
exportStatisticList
(
params
);
downloadByData
(
data
,
'招标管理统计报表'
+
'.xls'
);
}
const
loadingRef
=
ref
(
false
);
function
handleSubmit
()
{
getStatisticList
();
}
function
setRowClassName
(
record
)
{
if
(
record
.
projectName
===
'总计(万元)'
)
{
return
'rowcolor'
;
}
if
(
record
.
companyName
===
'合计(万元)'
){
return
'rowcolor'
;
}
else
{
return
;
}
}
function
getCurrentDateFormatted
()
{
const
now
=
new
Date
();
const
year
=
now
.
getFullYear
();
const
month
=
(
now
.
getMonth
()
+
1
).
toString
().
padStart
(
2
,
'0'
);
// 月份从0开始,所以要加1,并且格式化为两位数
return
`
${
year
}
-
${
month
}
`
;
}
async
function
getStatisticList
()
{
const
params
=
getFieldsValue
();
loadingRef
.
value
=
true
;
let
data
=
await
getListAll
(
params
);
// dataSource.value = data;
let
propsList
=
[
'companyName'
,
'projectName'
];
propsList
.
map
((
item
)
=>
{
changeData
(
data
,
item
);
});
loadingRef
.
value
=
false
;
}
function
changeData
(
data
,
field
)
{
if
(
field
==
'companyName'
){
let
count
=
0
;
//重复项的第一项
let
indexCount
=
1
;
//下一项
while
(
indexCount
<
data
.
length
)
{
var
item
=
data
.
slice
(
count
,
count
+
1
)[
0
];
//获取没有比较的第一个对象
if
(
!
item
[
`
${
field
}
rowSpan`
])
{
item
[
`
${
field
}
rowSpan`
]
=
1
;
//初始化为1
}
if
(
item
[
field
]
===
data
[
indexCount
][
field
])
{
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item
[
`
${
field
}
rowSpan`
]
++
;
data
[
indexCount
][
`
${
field
}
rowSpan`
]
=
0
;
}
else
{
count
=
indexCount
;
}
indexCount
++
;
}
}
if
(
field
==
'projectName'
){
let
count
=
0
;
//重复项的第一项
let
indexCount
=
1
;
//下一项
while
(
indexCount
<
data
.
length
)
{
var
item
=
data
.
slice
(
count
,
count
+
1
)[
0
];
//获取没有比较的第一个对象
if
(
!
item
[
`
${
field
}
rowSpan`
])
{
item
[
`
${
field
}
rowSpan`
]
=
1
;
//初始化为1
}
if
(
item
[
field
]
===
data
[
indexCount
][
field
]
&&
item
[
'companyName'
]
===
data
[
indexCount
][
'companyName'
])
{
//第一个对象与后面的对象相比,有相同项就累加,并且后面相同项设置为0
item
[
`
${
field
}
rowSpan`
]
++
;
data
[
indexCount
][
`
${
field
}
rowSpan`
]
=
0
;
}
else
{
count
=
indexCount
;
}
indexCount
++
;
}
}
dataSource
.
value
=
data
;
}
// 列表
const
dataSource
=
ref
([]);
// 表头
const
columns
=
[
{
title
:
'公司名称'
,
dataIndex
:
'companyName'
,
fixed
:
'left'
,
width
:
180
,
customCell
:
(
_
,
any
)
=>
({
rowSpan
:
_
.
companyNamerowSpan
,
}),
},
{
title
:
'项目名称'
,
dataIndex
:
'projectName'
,
width
:
180
,
},
{
title
:
'立即投资额(万元)'
,
dataIndex
:
'projectInvestment'
,
width
:
180
,
},
{
title
:
'资金来源'
,
dataIndex
:
'fundingSource'
,
width
:
180
,
},
{
title
:
'招标方式'
,
dataIndex
:
'biddingMethod'
,
width
:
180
,
},
{
title
:
'合同类型'
,
dataIndex
:
'contracYpe'
,
width
:
180
,
},
{
title
:
'合同名称'
,
dataIndex
:
'contractName'
,
width
:
180
,
},
{
title
:
'合同形式'
,
dataIndex
:
'formOfContract'
,
width
:
180
,
},
{
title
:
'合同金额(元)'
,
dataIndex
:
'contractAmount'
,
width
:
180
,
},
{
title
:
'签证变更金额(元)'
,
dataIndex
:
'submittedForSettlement'
,
width
:
180
,
},
{
title
:
'结算报送金额(元)'
,
dataIndex
:
'superContractScale'
,
width
:
180
,
},
{
title
:
'结算审定金额(元)'
,
dataIndex
:
'sumOfMoney'
,
width
:
180
,
},
];
const
{
push
}
=
useRouter
();
</
script
>
<
style
lang=
"less"
scoped
>
::v-deep .ant-table-tbody .ant-table-row {
&.rowcolor .ant-table-cell-fix-left {
background-color: #f5f5f5;
}
}
</
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