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
a51ef495
Commit
a51ef495
authored
Mar 17, 2025
by
高滢
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(年度招标管理): 导入
parent
7b431b87
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1330 additions
and
87 deletions
+1330
-87
biddingManagement.ts
src/api/project/biddingManagement.ts
+0
-3
biddingPlan.ts
src/api/project/biddingPlan.ts
+0
-4
yearTenderMan.ts
src/api/project/yearTenderMan.ts
+30
-0
biddingPlan.ts
src/router/routes/modules/biddingPlan.ts
+39
-6
index.vue
src/views/annualPlan/index.vue
+3
-3
biddingManagementEdit.vue
src/views/biddingManagement/biddingManagementEdit.vue
+0
-24
cycleModel.vue
src/views/biddingManagement/cycleModel/cycleModel.vue
+0
-45
index.vue
src/views/engineeringProject/statisticEngineering/index.vue
+2
-2
data.ts
src/views/tendeYearManage/data.ts
+381
-0
edit.vue
src/views/tendeYearManage/edit.vue
+332
-0
index.vue
src/views/tendeYearManage/index.vue
+321
-0
statistics.vue
src/views/tendeYearManage/statistics.vue
+222
-0
No files found.
src/api/project/biddingManagement.ts
View file @
a51ef495
...
...
@@ -14,7 +14,6 @@ enum Api {
DeleteProject
=
'/pro/tenderManager/del'
,
ProjectDetail
=
'/pro/tenderManager/details'
,
selectCount
=
'/pro/tenderManager/selectCount'
,
Itemdelete
=
'/pro/tenderManager/details/del'
,
audit
=
'/pro/tenderManager/examine'
,
GetListAll
=
'/pro/tenderManager/selectAll'
,
ExportCount
=
'/pro/export/tendMangeStatistic'
,
...
...
@@ -73,8 +72,6 @@ export const updateItem = (params?: any) =>
export
const
deleteItem
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
DeleteProject
,
params
});
export
const
Itemdelete
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
Itemdelete
,
params
});
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ListItem
[]
>
({
url
:
Api
.
ProjectDetail
,
params
});
...
...
src/api/project/biddingPlan.ts
View file @
a51ef495
...
...
@@ -8,7 +8,6 @@ enum Api {
UpdateProject
=
'/pro/tenderPlan/update'
,
DeleteProject
=
'/pro/tenderPlan/del'
,
ProjectDetail
=
'/pro/tenderPlan/details'
,
Itemdelete
=
'/pro/tenderPlan/details/del'
,
audit
=
'/pro/tenderPlan/examine'
,
selectCount
=
'/pro/tenderPlan/selectCount'
,
GetListAll
=
'/pro/tenderPlan/listAll'
,
...
...
@@ -96,7 +95,4 @@ export const auditItem = (params?: any) =>
export
const
deleteItem
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
DeleteProject
,
params
});
export
const
Itemdelete
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
Itemdelete
,
params
});
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
planModel
>
({
url
:
Api
.
ProjectDetail
,
params
});
src/api/project/yearTenderMan.ts
0 → 100644
View file @
a51ef495
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
GetPageList
=
'/pro/tenderYearManage/page'
,
AddProject
=
'/pro/tenderYearManage/add'
,
UpdateProject
=
'/pro/tenderYearManage/edit'
,
DeleteProject
=
'/pro/tenderYearManage/del'
,
ProjectDetail
=
'/pro/tenderYearManage/details'
,
Audit
=
'/pro/tenderYearManage/examine'
,
SelectCount
=
'/pro/tenderYearManage/selectCount'
,
GetListAll
=
'/pro/tenderYearManage/statistics'
,
Export
=
'/pro/tenderYearManage/export'
,
Import
=
'/pro/tenderYearManage/import'
,
}
export
const
selectPageList
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
GetPageList
,
data
:
params
});
export
const
addProject
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
AddProject
,
data
:
params
});
export
const
updateProject
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
UpdateProject
,
data
:
params
});
export
const
deleteProject
=
(
params
?:
any
)
=>
defHttp
.
get
({
url
:
Api
.
DeleteProject
,
data
:
params
});
export
const
selectDetail
=
(
params
?:
any
)
=>
defHttp
.
get
({
url
:
Api
.
ProjectDetail
,
data
:
params
});
export
const
handelExamine
=
(
params
?:
any
)
=>
defHttp
.
get
({
url
:
Api
.
Audit
,
data
:
params
});
export
const
getCount
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
SelectCount
,
data
:
params
});
export
const
selectListAll
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
GetListAll
,
data
:
params
});
export
const
exportTender
=
(
params
?:
any
)
=>
defHttp
.
post
({
url
:
Api
.
Export
,
data
:
params
});
src/router/routes/modules/biddingPlan.ts
View file @
a51ef495
...
...
@@ -21,7 +21,7 @@ const biddingPlan: AppRouteModule = {
component
:
()
=>
import
(
'@/views/biddingPlan/index.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingPlan/index'
,
title
:
'招标计划填报'
,
title
:
'
季度
招标计划填报'
,
orderNo
:
1
,
},
},
...
...
@@ -31,7 +31,7 @@ const biddingPlan: AppRouteModule = {
component
:
()
=>
import
(
'@/views/biddingPlan/biddingPlanData.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingPlan/index'
,
title
:
'招标计划统计'
,
title
:
'
季度
招标计划统计'
,
orderNo
:
2
,
},
},
...
...
@@ -41,7 +41,7 @@ const biddingPlan: AppRouteModule = {
component
:
()
=>
import
(
'@/views/biddingManagement/index.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'招标管理填报'
,
title
:
'
季度
招标管理填报'
,
orderNo
:
5
,
},
},
...
...
@@ -51,7 +51,7 @@ const biddingPlan: AppRouteModule = {
component
:
()
=>
import
(
'@/views/biddingManagement/statisticsBidding.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'招标管理统计'
,
title
:
'
季度
招标管理统计'
,
orderNo
:
6
,
},
},
...
...
@@ -64,7 +64,7 @@ const biddingPlan: AppRouteModule = {
hideMenu
:
true
,
hideBreadcrumb
:
true
,
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'
招标情况
'
,
title
:
'
季度招标管理编辑
'
,
orderNo
:
4
,
},
},
...
...
@@ -77,10 +77,43 @@ const biddingPlan: AppRouteModule = {
hideMenu
:
true
,
hideBreadcrumb
:
true
,
auth
:
'/www/dist/index.html#/biddingPlan/index'
,
title
:
'
招标计划
'
,
title
:
'
季度招标计划编辑
'
,
orderNo
:
3
,
},
},
{
path
:
'tendeYearManageEdit'
,
name
:
'TendeYearManageEdit'
,
component
:
()
=>
import
(
'@/views/tendeYearManage/edit.vue'
),
meta
:
{
hideTab
:
true
,
hideMenu
:
true
,
hideBreadcrumb
:
true
,
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'年度招标管理填报'
,
orderNo
:
5
,
},
},
{
path
:
'tendeYearManageSta'
,
name
:
'TendeYearManageSta'
,
component
:
()
=>
import
(
'@/views/tendeYearManage/statistics.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'年度招标管理统计'
,
orderNo
:
6
,
},
},
{
path
:
'tendeYearManage'
,
name
:
'TendeYearManage'
,
component
:
()
=>
import
(
'@/views/tendeYearManage/index.vue'
),
meta
:
{
auth
:
'/www/dist/index.html#/biddingManagement/index'
,
title
:
'年度招标管理填报'
,
orderNo
:
5
,
},
},
],
};
...
...
src/views/annualPlan/index.vue
View file @
a51ef495
...
...
@@ -64,10 +64,9 @@
</template>
<
script
lang=
"ts"
setup
>
import
{
useRouter
}
from
'vue-router'
;
const
{
push
}
=
useRouter
();
import
{
Tag
}
from
'ant-design-vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getAnnualPlanList
}
from
'@/api/project/annualPlan'
;
import
{
getAnnualPlanList
,
auditItem
,
deleteItem
}
from
'@/api/project/annualPlan'
;
import
annualPlanModel
from
'./annualPlanModel/annualPlanModel.vue'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
...
...
@@ -79,10 +78,11 @@
import
{
router
}
from
'@/router'
;
import
{
BasicForm
,
useForm
,
FormProps
,
UseFormReturnType
}
from
'@/components/Form'
;
import
{
formSchema
}
from
'@/views/annualPlan/annualPlanEdit/tableData'
;
import
{
auditItem
,
deleteItem
}
from
'@/api/project/annualPlan'
;
import
{
onMounted
}
from
'vue'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
const
{
push
}
=
useRouter
();
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
defineOptions
({
name
:
'Performance'
});
...
...
src/views/biddingManagement/biddingManagementEdit.vue
View file @
a51ef495
...
...
@@ -31,30 +31,6 @@
>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"item.Form[0]"
/>
<!-- 左上角为项目名 -->
<CollapseContainer
v-for=
"(content, key) in item.list"
:key=
"key"
class=
"subCard"
:title=
"content.name"
v-show=
"content.show"
>
<
template
#
title
>
<span
class=
"contractName"
>
{{
content
.
name
}}
</span>
</
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"
>
从项目库导入
...
...
src/views/biddingManagement/cycleModel/cycleModel.vue
View file @
a51ef495
...
...
@@ -24,22 +24,6 @@
const
[
registerForm
,
{
getFieldsValue
,
validate
}]
=
useForm
({
labelWidth
:
100
,
schemas
:
[
// {
// field: 'fillCycle',
// label: '填报周期',
// component: 'DatePicker',
// defaultValue: '',
// required: true,
// componentProps: {
// placeholder: '请选择填报周期',
// picker: 'month',
// valueFormat: 'YYYY-MM',
// format: 'YYYY-MM',
// style: {
// width: '100%',
// },
// },
// },
{
field
:
'tenderYear'
,
label
:
'选择填报周期'
,
...
...
@@ -54,35 +38,6 @@
},
colProps
:
{
span
:
12
},
},
{
field
:
'biddingQuarter'
,
label
:
'季度'
,
component
:
'Select'
,
required
:
true
,
componentProps
:
{
style
:
{
width
:
'100%'
},
options
:
[
{
label
:
'第一季度'
,
value
:
'第一季度'
,
},
{
label
:
'第二季度'
,
value
:
'第二季度'
,
},
{
label
:
'第三季度'
,
value
:
'第三季度'
,
},
{
label
:
'第四季度'
,
value
:
'第四季度'
,
},
],
placeholder
:
'季度'
,
},
colProps
:
{
span
:
12
},
},
],
showActionButtonGroup
:
false
,
actionColOptions
:
{
...
...
src/views/engineeringProject/statisticEngineering/index.vue
View file @
a51ef495
...
...
@@ -184,7 +184,7 @@
async
function
exportCount
()
{
if
(
groupByField
.
value
===
'company'
)
{
const
data
=
await
exportStatisticEngine
(
params
.
value
);
downloadByData
(
data
,
'投资计划按公司分类'
+
'.xls'
);
downloadByData
(
data
,
planType
.
value
+
'投资计划按公司分类'
+
'.xls'
);
}
else
{
let
fileName
=
groupByField
.
value
===
'attribute'
...
...
@@ -193,7 +193,7 @@
?
'按年底形象进度分类'
:
'按项目类型分类'
;
const
data
=
await
exportStatisticEngineerOther
(
params
.
value
);
downloadByData
(
data
,
'投资计划'
+
fileName
+
'.xls'
);
downloadByData
(
data
,
planType
.
value
+
'投资计划'
+
fileName
+
'.xls'
);
}
}
</
script
>
...
...
src/views/tendeYearManage/data.ts
0 → 100644
View file @
a51ef495
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
moment
from
'moment'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
useUserStore
}
from
'@/store/modules/user'
;
const
deptId
=
''
+
useUserStore
().
userInfo
.
deptParentId
;
//主模块-投资管理列表页
export
const
columns
:
BasicColumn
[]
=
[
{
title
:
'序号'
,
dataIndex
:
'serialNumber'
,
width
:
100
,
},
{
title
:
'填报周期'
,
dataIndex
:
'tenderYear'
,
width
:
200
,
},
{
title
:
'项目数量'
,
dataIndex
:
'proNumber'
,
width
:
180
,
},
{
title
:
'公司名称'
,
dataIndex
:
'companyName'
,
width
:
180
,
},
{
title
:
'最新更新人'
,
dataIndex
:
'updateBy'
,
width
:
180
,
},
{
title
:
'审核人'
,
dataIndex
:
'revieweUser'
,
width
:
180
,
},
{
title
:
'审核时间'
,
dataIndex
:
'reviewTime'
,
width
:
180
,
},
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
field
:
'tenderYear'
,
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
4
},
},
{
field
:
'companyId'
,
label
:
''
,
component
:
'Select'
,
ifShow
:
deptId
===
'100'
,
componentProps
:
{
options
:
[
{
label
:
'公司名称1'
,
value
:
'1'
},
{
label
:
'公司名称2'
,
value
:
'0'
},
],
placeholder
:
'公司名称'
,
},
colProps
:
{
span
:
4
},
},
];
export
const
formSchema
:
FormSchema
[]
=
[
{
field
:
'proName'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
disabled
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'fundingSource'
,
label
:
'资金来源'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
disabled
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'investmentAmount'
,
label
:
'立项投资额'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'field11'
,
component
:
'BasicTitle'
,
label
:
'招标方案'
,
componentProps
:
{
// line: true,
span
:
true
,
},
colProps
:
{
span
:
24
,
},
},
{
field
:
'biddingType'
,
label
:
'招标类型(施工、监理、设计、图审等)'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
labelWidth
:
400
,
},
{
field
:
'tenderContent'
,
label
:
'招标内容'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'controlPrice'
,
label
:
'招标控制价'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionMode'
,
label
:
'建设模式'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
componentProps
:
{
readonly
:
true
,
disabled
:
true
,
},
},
{
field
:
'biddingAgency'
,
label
:
'招标代理'
,
required
:
false
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'procurementMethod'
,
label
:
'招标采购方式'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'建委招标'
,
value
:
'建委招标'
,
},
{
label
:
'平台招标'
,
value
:
'平台招标'
,
},
{
label
:
'邀标比选'
,
value
:
'邀标比选'
,
},
{
label
:
'直接委托'
,
value
:
'直接委托'
,
},
{
label
:
'评定分离'
,
value
:
'评定分离'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'评标办法'
,
field
:
'evaluationMethod'
,
required
:
false
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'field11'
,
component
:
'BasicTitle'
,
label
:
'招标结果及完成情况汇总'
,
componentProps
:
{
// line: true,
span
:
true
,
},
colProps
:
{
span
:
24
,
},
},
{
label
:
'招标完成情况'
,
field
:
'completionStatus'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'开标时间'
,
field
:
'openingTime'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'winningBidder'
,
label
:
'中标单位'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'winningAmount'
,
label
:
'中标金额'
,
required
:
true
,
component
:
'InputNumber'
,
componentProps
:
{
addonAfter
:
'元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'winningPeriod'
,
label
:
'中标工期'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'signingDate'
,
label
:
'合同签订日期'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'会议纪要'
,
field
:
'meetingMinute'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'releaseChannels'
,
label
:
'招标信息发布渠道'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'中国招标投标公共服务平台'
,
value
:
'中国招标投标公共服务平台'
,
},
{
label
:
'公司OA和公众号'
,
value
:
'公司OA和公众号'
,
},
{
label
:
'天津市公共资源交易中心'
,
value
:
'天津市公共资源交易中心'
,
},
{
label
:
'邮箱'
,
value
:
'邮箱'
,
},
{
label
:
'其他'
,
value
:
'其他'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'detailedInformation'
,
label
:
'招标信息发布渠道-其他(详细填写)'
,
required
:
false
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'publishWebsite'
,
label
:
'招标公告发布网址(仅限公开招标项目)'
,
required
:
false
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'publicityWebsite'
,
label
:
'中标结果公示网址(仅限公开招标项目)'
,
required
:
false
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'isReportingSituation'
,
label
:
'是否存在投诉举报情况'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
style
:
{
width
:
'100%'
,
},
options
:
[
{
label
:
'是'
,
value
:
'是'
,
},
{
label
:
'否'
,
value
:
'否'
,
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'投诉举报解决处理情况'
,
field
:
'handSituation'
,
required
:
false
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'备注'
,
field
:
'remark'
,
// required: true,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
];
src/views/tendeYearManage/edit.vue
0 → 100644
View file @
a51ef495
This diff is collapsed.
Click to expand it.
src/views/tendeYearManage/index.vue
0 → 100644
View file @
a51ef495
This diff is collapsed.
Click to expand it.
src/views/tendeYearManage/statistics.vue
0 → 100644
View file @
a51ef495
<
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 }"
/>
</PageCard>
<StatisticWindow
@
register=
"register"
/>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
onMounted
,
ref
}
from
'vue'
;
import
{
Table
}
from
'ant-design-vue'
;
import
{
BasicForm
,
FormActionType
,
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'
;
import
moment
from
'moment'
;
import
{
getDepartmentList
}
from
'@/api/project/settlementManage'
;
import
{
exportTender
,
selectListAll
}
from
'@/api/project/yearTenderMan'
;
const
params
=
ref
({
tenderYear
:
''
,
companyName
:
''
});
const
deptId
=
''
+
useUserStore
().
userInfo
.
deptParentId
;
const
seach
=
ref
([
{
field
:
'tenderYear'
,
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'年份'
,
picker
:
'year'
,
defaultValue
:
moment
().
format
(
'YYYY'
),
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
4
},
},
{
field
:
'companyId'
,
label
:
''
,
component
:
'Select'
,
ifShow
:
deptId
===
'100'
,
componentProps
:
{
options
:
[],
placeholder
:
'公司名称'
,
},
colProps
:
{
span
:
4
},
},
]);
onMounted
(
async
()
=>
{
const
data
=
await
getDepartmentList
();
seach
.
value
[
1
].
componentProps
.
options
=
data
;
params
.
value
.
tenderYear
=
moment
().
format
(
'YYYY'
);
getStatisticList
();
});
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
data
=
await
exportTender
(
params
.
value
);
downloadByData
(
data
,
'年度招标管理统计报表'
+
'.xls'
);
}
const
loadingRef
=
ref
(
false
);
function
handleSubmit
()
{
let
data
=
getFieldsValue
();
params
.
value
=
data
;
getStatisticList
();
}
function
setRowClassName
(
record
)
{
if
(
record
.
projectName
===
'总计(万元)'
)
{
return
'rowcolor'
;
}
if
(
record
.
companyName
===
'合计(万元)'
)
{
return
'rowcolor'
;
}
else
{
return
;
}
}
async
function
getStatisticList
()
{
loadingRef
.
value
=
true
;
let
data
=
await
selectListAll
(
params
.
value
);
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
)
{
let
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
==
'proName'
)
{
let
count
=
0
;
//重复项的第一项
let
indexCount
=
1
;
//下一项
while
(
indexCount
<
data
.
length
)
{
let
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
,
fixed
:
'left'
,
customCell
:
(
_
,
any
)
=>
({
rowSpan
:
_
.
projectNamerowSpan
,
}),
},
{
title
:
'招标方案'
,
dataIndex
:
''
,
children
:
[
{
title
:
'招标类型'
,
dataIndex
:
'biddingType'
,
width
:
180
,
},
{
title
:
'招标控制价(万元)'
,
dataIndex
:
'controlPrice'
,
width
:
180
,
},
],
},
{
title
:
'招标情况'
,
dataIndex
:
''
,
children
:
[
{
title
:
'中标单位'
,
dataIndex
:
'winningBidder'
,
width
:
180
,
},
{
title
:
'中标金额(万元)'
,
dataIndex
:
'winningAmount'
,
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