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
a5cef984
Commit
a5cef984
authored
Jun 11, 2024
by
牛虎林
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
58c7ac85
e855aaf7
Changes
26
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
2828 additions
and
202 deletions
+2828
-202
performanceModel.ts
src/api/project/model/performanceModel.ts
+84
-0
settlementManageModel.ts
src/api/project/model/settlementManageModel.ts
+2
-3
monthlyPlan.ts
src/api/project/monthlyPlan.ts
+6
-2
performance.ts
src/api/project/performance.ts
+58
-4
props.ts
src/components/Table/src/props.ts
+0
-1
annualPlan.ts
src/router/routes/modules/annualPlan.ts
+10
-0
monthlyPlan.ts
src/router/routes/modules/monthlyPlan.ts
+23
-1
performance.ts
src/router/routes/modules/performance.ts
+10
-0
annualPlanEdit.vue
src/views/annualPlan/annualPlanEdit/annualPlanEdit.vue
+402
-0
tableData.tsx
src/views/annualPlan/annualPlanEdit/tableData.tsx
+263
-0
annualPlanModel.vue
src/views/annualPlan/annualPlanModel/annualPlanModel.vue
+74
-0
data.tsx
src/views/annualPlan/annualPlanModel/data.tsx
+161
-0
index.vue
src/views/annualPlan/index.vue
+19
-3
index.vue
src/views/biddingPlan/index.vue
+1
-0
engineeringEdit.vue
...ws/engineeringProject/engineeringEdit/engineeringEdit.vue
+0
-1
index.vue
src/views/engineeringProject/index.vue
+6
-1
data.tsx
src/views/monthlyPlan/data.tsx
+15
-15
index.vue
src/views/monthlyPlan/index.vue
+25
-7
monthlyPlanEdit.vue
src/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue
+402
-0
tableData.tsx
src/views/monthlyPlan/monthlyPlanEdit/tableData.tsx
+263
-0
data.tsx
src/views/performance/data.tsx
+592
-85
index.vue
src/views/performance/index.vue
+104
-63
performanceEdit.vue
src/views/performance/performanceEdit.vue
+205
-0
performanceModel.vue
src/views/performance/performanceModel.vue
+75
-0
data.ts
src/views/potentialSafety/data.ts
+14
-8
data.ts
src/views/safetyEducation/data.ts
+14
-8
No files found.
src/api/project/model/performanceModel.ts
0 → 100644
View file @
a5cef984
import
{
BasicPageParams
,
BasicFetchResult
}
from
'@/api/model/baseModel'
;
export
type
ProjectParams
=
{
//年份
givenYear
?:
string
;
//companyName
companyName
?:
string
;
//季度
quarter
:
string
;
};
export
type
ProjectPageParams
=
BasicPageParams
&
ProjectParams
;
export
interface
ProjectListItem
{
id
:
string
;
//合同id
contractId
:
string
;
projectInvestment
:
string
;
biddingMethod
:
string
;
firstPartyName
:
string
;
secondPartyName
:
string
;
formOfContract
:
string
;
contractSigningTime
:
string
;
closingTime
:
string
;
contractAmount
:
string
;
superContractScale
:
string
;
submittedForSettlement
:
string
;
meetingMinutes
:
string
;
remark
:
string
;
fundingSource
:
string
;
projectName
:
string
;
proportionContractAmount
:
string
;
createTime
:
null
;
createBy
:
string
;
updateTime
:
null
;
updateBy
:
string
;
}
export
interface
ChangModel
{
id
?:
string
|
number
;
constructionMode
:
string
;
isReserveProject
:
string
;
projectType
:
string
;
projectOverview
:
string
;
constructionPurpose
:
string
;
}
export
interface
ProjectModel
<
P
,
C
>
{
management
:
P
[];
proClosingQuarter
:
C
;
}
export
interface
ContentModel
{
id
?:
string
|
number
;
quarter
:
string
|
number
;
companyName
:
string
;
givenYear
:
string
;
yearQuarter
:
string
;
status
:
string
;
}
export
interface
PlanModel
{
id
:
string
|
number
;
contractId
:
string
|
number
;
projectId
:
string
|
number
;
projectInvestment
:
string
|
number
;
biddingMethod
:
string
|
number
;
contracYpe
:
string
|
number
;
contractName
:
string
|
number
;
firstPartyName
:
string
|
number
;
secondPartyName
:
string
|
number
;
formOfContract
:
string
|
number
;
closingTime
:
string
|
number
;
closingTimeDatetime
:
string
|
number
;
contractAmount
:
string
|
number
;
submittedForSettlement
:
string
|
number
;
superContractScale
:
string
|
number
;
sumOfMoney
:
string
|
number
;
proportionContractAmount
:
string
|
number
;
meetingMinutes
:
string
|
number
;
proClosingQuarterId
:
string
|
number
;
remark
:
string
|
number
;
}
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
export
type
EditModel
=
ProjectModel
<
PlanModel
[],
ContentModel
>
;
src/api/project/model/settlementManageModel.ts
View file @
a5cef984
...
...
@@ -5,7 +5,7 @@ export type ProjectParams = {
//companyName
companyName
?:
string
;
//季度
quarter
:
string
quarter
:
string
;
};
export
type
ProjectPageParams
=
BasicPageParams
&
ProjectParams
;
...
...
@@ -80,6 +80,5 @@ export interface PlanModel {
remark
:
string
|
number
;
}
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
export
type
EditModel
=
ProjectModel
<
PlanModel
[],
ContentModel
>
export
type
EditModel
=
ProjectModel
<
PlanModel
[],
ContentModel
>
;
src/api/project/monthlyPlan.ts
View file @
a5cef984
...
...
@@ -2,7 +2,11 @@ import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
GetList
=
'/statement/list/page'
,
GetList
=
'/pro/monthEngineer/page'
,
GetMonthlyPlanProjectList
=
''
,
}
export
const
getMonthlyPlanList
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
export
const
getMonthlyPlanProjectList
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetMonthlyPlanProjectList
,
data
:
params
});
src/api/project/performance.ts
View file @
a5cef984
import
{
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
}
from
'./model/projectModel'
;
import
{
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
,
}
from
'./model/engineeringprojectModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
ListItem
,
ProjectPageParams
}
from
'@/api/project/model/biddingPlanModel'
;
enum
Api
{
GetList
=
'/statement/list/page'
,
GetList
=
'/pro/completion/getList'
,
AddProject
=
'/pro/completion/add'
,
UpdateProject
=
'/pro/completion/edit'
,
ProjectDetail
=
'/pro/completion/getById'
,
DeleteProject
=
'/pro/completion/delete'
,
engineeringList
=
'/pro/completion/getCanCompletion'
,
GetEngineProjectList
=
'/pro/completion/getCompletionPro'
,
audit
=
'/pro/completion/audit'
,
Itemdelete
=
'/pro/completion/delProject'
,
}
export
const
get
performanceList
=
(
params
?:
ProjectParams
)
=>
export
const
get
ListByPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
export
const
addItem
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
AddProject
,
data
:
params
,
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
});
export
const
updateItem
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
UpdateProject
,
data
:
params
,
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
});
export
const
deleteItem
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
DeleteProject
,
params
});
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ListItem
[]
>
({
url
:
Api
.
ProjectDetail
,
params
});
export
const
getEngineeringList
=
(
params
?:
any
)
=>
defHttp
.
post
<
ListItem
[]
>
({
url
:
Api
.
engineeringList
,
data
:
params
});
export
const
GetEngineProjectList
=
(
params
?:
any
)
=>
defHttp
.
post
<
ListItem
[]
>
({
url
:
Api
.
GetEngineProjectList
,
data
:
params
,
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
});
export
const
auditItem
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
audit
,
data
:
params
,
});
export
const
Itemdelete
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
Itemdelete
,
params
});
src/components/Table/src/props.ts
View file @
a5cef984
...
...
@@ -22,7 +22,6 @@ export const basicProps = {
isTreeTable
:
Boolean
,
tableSetting
:
propTypes
.
shape
<
TableSetting
>
({}),
inset
:
Boolean
,
title
:
string
,
sortFn
:
{
type
:
Function
as
PropType
<
(
sortInfo
:
SorterResult
)
=>
any
>
,
default
:
DEFAULT_SORT_FN
,
...
...
src/router/routes/modules/annualPlan.ts
View file @
a5cef984
...
...
@@ -24,6 +24,16 @@ const annualPlan: AppRouteModule = {
orderNo
:
10
,
},
},
{
path
:
'annualPlanEdit'
,
name
:
'annualPlanEdit'
,
component
:
()
=>
import
(
'@/views/annualPlan/annualPlanEdit/annualPlanEdit.vue'
),
meta
:
{
// affix: true,
title
:
'新建计划(储备)'
,
orderNo
:
8
,
},
},
],
};
...
...
src/router/routes/modules/monthlyPlan.ts
View file @
a5cef984
...
...
@@ -2,7 +2,19 @@ import type { AppRouteModule } from '@/router/types';
import
{
LAYOUT
}
from
'@/router/constant'
;
const
monthlyPlan
:
AppRouteModule
=
{
const
monthlyPlan
:
{
redirect
:
string
;
path
:
string
;
component
:
()
=>
Promise
<
{}
>
;
children
:
{
path
:
string
;
component
:
()
=>
Promise
<
{}
>
;
meta
:
{
orderNo
:
number
;
title
:
string
};
name
:
string
;
}[];
meta
:
{
orderNo
:
number
;
icon
:
string
;
hideChildrenInMenu
:
boolean
;
title
:
string
};
name
:
string
;
}
=
{
path
:
'/monthlyPlan'
,
name
:
'monthlyPlan'
,
component
:
LAYOUT
,
...
...
@@ -24,6 +36,16 @@ const monthlyPlan: AppRouteModule = {
orderNo
:
11
,
},
},
{
path
:
'monthlyPlanEdit'
,
name
:
'monthlyPlanEdit'
,
component
:
()
=>
import
(
'@/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue'
),
meta
:
{
// affix: true,
title
:
'新建计划(工程)'
,
orderNo
:
8
,
},
},
],
};
...
...
src/router/routes/modules/performance.ts
View file @
a5cef984
...
...
@@ -24,6 +24,16 @@ const performance: AppRouteModule = {
orderNo
:
9
,
},
},
{
path
:
'edit'
,
name
:
'performanceEdit'
,
component
:
()
=>
import
(
'@/views/performance/performanceEdit.vue'
),
meta
:
{
// affix: true,
title
:
'工程项目投资计划完成情况'
,
orderNo
:
9
,
},
},
],
};
...
...
src/views/annualPlan/annualPlanEdit/annualPlanEdit.vue
0 → 100644
View file @
a5cef984
This diff is collapsed.
Click to expand it.
src/views/annualPlan/annualPlanEdit/tableData.tsx
0 → 100644
View file @
a5cef984
import
{
optionsListApi
}
from
'@/api/demo/select'
;
import
{
FormProps
,
FormSchema
,
BasicColumn
}
from
'@/components/Table'
;
import
{
VxeFormItemProps
,
VxeGridPropTypes
}
from
'@/components/VxeTable'
;
import
{
ref
}
from
'vue'
;
import
{
Input
}
from
'ant-design-vue'
;
export
function
getBasicColumns
():
BasicColumn
[]
{
return
[
{
title
:
'年份'
,
dataIndex
:
'year'
,
width
:
80
,
},
{
title
:
'金额(万元)'
,
dataIndex
:
'amount'
,
width
:
150
,
// sorter: true,
// defaultHidden: true,
edit
:
true
,
},
];
}
export
const
formSchema
:
({
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
valueFormat
:
string
;
format
:
string
;
style
:
{
width
:
string
};
placeholder
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
options
:
({
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
})[]
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
icon
:
string
;
componentProps
:
{
style
:
{
width
:
string
};
placeholder
:
string
[]
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
options
:
({
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
})[]
};
label
:
string
;
required
:
boolean
})[]
=
[
{
field
:
'projectName'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionSite'
,
label
:
'建设地点'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionMode'
,
label
:
'建设模式'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectType'
,
label
:
'项目类型'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionScale'
,
label
:
'建设规模'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectOverview'
,
label
:
'项目概况:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'fundingSource'
,
label
:
'资金来源:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'implementingEntity'
,
label
:
'实施主体:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectOverview'
,
label
:
'项目概况:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'filingCycle'
,
label
:
'填报年度:'
,
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
picker
:
'year'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'totalInvestment'
,
label
:
'总投资'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'competentDepartment'
,
label
:
'项目主管部门'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'matchingFunds'
,
label
:
'2024年财政预算匹配资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'specialBondFunds'
,
label
:
'其中专项债项目2024年预计使用专项债资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'planFunds'
,
label
:
'2024年计划资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'attribute'
,
label
:
'建设性质'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'新建'
,
value
:
'0'
},
{
label
:
'结转'
,
value
:
'1'
},
{
label
:
'缓建'
,
value
:
'2'
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'time'
,
component
:
'RangePicker'
,
label
:
'开竣工时间'
,
required
:
true
,
icon
:
'healthicons:i-schedule-school-date-time-outline'
,
colProps
:
{
span
:
7
,
offset
:
1
},
componentProps
:
{
placeholder
:
[
'开始日期'
,
'结束日期'
],
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
},
},
{
field
:
'schedule'
,
label
:
'2024年底预计形象进度'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'A(已经立项实施的跨年工程)'
,
value
:
'0'
},
{
label
:
'B(该年度必须建设的项目)'
,
value
:
'1'
},
{
label
:
'C(该年度必须建设的项目)'
,
value
:
'2'
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'备注'
,
field
:
'remarks'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
// {
// field: 'isReserveProject',
// label: '是否为储备项目',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '是', value: '1' },
// { label: '否', value: '0' },
// ],
// },
// },
// {
// field: 'status',
// label: '状态',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// },
];
src/views/annualPlan/annualPlanModel/annualPlanModel.vue
0 → 100644
View file @
a5cef984
<
template
>
<BasicModal
width=
"70%"
v-bind=
"$attrs"
@
register=
"register"
title=
"选择投资计划"
:minHeight=
"30"
okText=
"导入"
@
ok=
"handleSubmit"
@
visible-change=
"handleVisibleChange"
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, text, record, index }">
<!-- 当前列是序号列时,显示序号 -->
<span
v-if=
"column.dataIndex === 'serialNumber'"
>
{{
index
+
1
}}
</span>
<!-- 其他列正常显示 -->
<span
v-else
>
{{
text
}}
</span>
</
template
>
</BasicTable>
<!-- <button @click="getSelectRowList">获取数据</button>-->
</BasicModal>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/project'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
getMonthlyPlanProjectList
}
from
"@/api/project/monthlyPlan"
;
const
[
registerTable
,
{
reload
,
getSelectRows
}]
=
useTable
({
api
:
getMonthlyPlanProjectList
,
title
:
'123'
,
columns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
type
:
'engineering'
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
rowSelection
:
{
type
:
'checkbox'
,
},
// actionColumn: {
// width: 80,
// title: '操作',
// dataIndex: 'action',
// // slots: { customRender: 'action' },
// fixed: undefined,
// },
});
const
{
createMessage
}
=
useMessage
();
function
getSelectRowList
()
{
// createMessage.info('请在控制台查看!');
// console.log(getSelectRows());
emit
(
'close'
,
getSelectRows
());
}
const
emit
=
defineEmits
([
'close'
]);
function
handleVisibleChange
(
v
)
{}
const
[
register
,
{
closeModal
}]
=
useModalInner
((
data
)
=>
{
data
;
});
function
handleSubmit
()
{
getSelectRowList
();
closeModal
();
}
</
script
>
src/views/annualPlan/annualPlanModel/data.tsx
0 → 100644
View file @
a5cef984
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
h
}
from
'vue'
;
import
{
Switch
}
from
'ant-design-vue'
;
import
{
setRoleStatus
}
from
'@/api/demo/system'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
type
CheckedType
=
boolean
|
string
|
number
;
export
const
columns
:
(
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
|
{
dataIndex
:
string
;
width
:
number
;
title
:
string
}
)[]
=
[
{
title
:
'年度'
,
dataIndex
:
'projectName'
,
width
:
180
,
},
{
title
:
'类型'
,
dataIndex
:
'implementingEntity'
,
width
:
180
,
},
{
title
:
'项目数量'
,
dataIndex
:
'constructionMode'
,
width
:
200
,
},
{
title
:
'总投资'
,
dataIndex
:
'constructionSite'
,
width
:
180
,
},
{
title
:
'合同总额合计'
,
dataIndex
:
'projectType'
,
width
:
180
,
},
{
title
:
'三年滚动投资计划合计'
,
dataIndex
:
'fundingSource'
,
width
:
180
,
},
{
title
:
'公司名称'
,
dataIndex
:
'constructionPurpose'
,
width
:
180
,
},
{
title
:
'最新更新人'
,
dataIndex
:
'constructionScale'
,
width
:
180
,
},
{
title
:
'最新更新时间'
,
dataIndex
:
'constructionScale'
,
width
:
180
,
},
{
title
:
'审核状态'
,
dataIndex
:
'constructionScale'
,
width
:
180
,
},
{
title
:
'审核人'
,
dataIndex
:
'constructionScale'
,
width
:
180
,
},
{
title
:
'审核时间'
,
dataIndex
:
'constructionScale'
,
width
:
180
,
},
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
field
:
'projectName'
,
label
:
''
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'搜索关键字'
,
},
colProps
:
{
span
:
4
},
},
];
export
const
formSchema
:
FormSchema
[]
=
[
{
field
:
'projectName'
,
label
:
'项目名称'
,
component
:
'Input'
,
required
:
true
,
componentProps
:
{
placeholder
:
'XXXX项目'
,
disabled
:
true
,
style
:
{
background
:
'none'
,
border
:
'none'
,
},
},
colProps
:
{
span
:
8
},
},
{
field
:
'projectName'
,
label
:
'建设地点'
,
component
:
'Input'
,
required
:
true
,
componentProps
:
{
placeholder
:
'华苑片区'
,
disabled
:
true
,
style
:
{
background
:
'none'
,
border
:
'none'
,
},
},
colProps
:
{
span
:
8
},
},
{
field
:
'projectName'
,
label
:
'建设模式'
,
component
:
'Input'
,
required
:
true
,
componentProps
:
{
placeholder
:
'自建'
,
disabled
:
true
,
style
:
{
background
:
'none'
,
border
:
'none'
,
},
},
colProps
:
{
span
:
8
},
},
// {
// field: 'isReserveProject',
// label: '是否为储备项目',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '是', value: '1' },
// { label: '否', value: '0' },
// ],
// },
// },
// {
// field: 'status',
// label: '状态',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// },
];
src/views/annualPlan/index.vue
View file @
a5cef984
...
...
@@ -2,7 +2,7 @@
<div>
<BasicTable
@
register=
"registerTable"
:title=
"'年度工程资金计划'"
>
<template
#
toolbar
>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
Import
"
>
新建年度工程资金计划
</a-button>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
addAnnualPlan
"
>
新建年度工程资金计划
</a-button>
</
template
>
<
template
#
bodyCell=
"{ column, text, record, index }"
>
...
...
@@ -33,17 +33,23 @@
</
template
>
</template>
</BasicTable>
<yearModal
@
register=
"register"
@
close=
"handleNew"
/>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getAnnualPlanList
}
from
'@/api/project/annualPlan'
;
import
yearModal
from
'@/components/yearModal.vue'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
useModal
}
from
"@/components/Modal"
;
import
{
router
}
from
"@/router"
;
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
defineOptions
({
name
:
'Performance'
});
...
...
@@ -85,8 +91,18 @@ function handleSuccess() {
reload
();
}
const
Import
=
()
=>
{
console
.
log
(
'新建年度工程资金计划'
);
const
addAnnualPlan
=
()
=>
{
openModal
(
true
,
{
data
:
[
'year'
],
});
};
const
handleNew
=
(
e
)
=>
{
console
.
log
(
'eeee'
,
e
);
router
.
push
({
path
:
'/annualPlan/annualPlanEdit'
,
query
:
e
,
});
};
const
change
=
(
key
:
string
)
=>
{
...
...
src/views/biddingPlan/index.vue
View file @
a5cef984
...
...
@@ -54,6 +54,7 @@
},
]"
/>
</
template
>
</template>
</BasicTable>
...
...
src/views/engineeringProject/engineeringEdit/engineeringEdit.vue
View file @
a5cef984
...
...
@@ -38,7 +38,6 @@
import
{
BasicTable
,
useTable
}
from
'@/components/Table'
;
import
{
getBasicColumns
}
from
'./tableData'
;
import
{
ref
,
nextTick
,
onMounted
,
unref
,
computed
,
reactive
}
from
'vue'
;
import
{
demoListApi
}
from
'@/api/demo/table'
;
import
engineeringprojectModel
from
'../engineeringProjectModel/engineeringprojectModel.vue'
;
import
{
useRoute
}
from
'vue-router'
;
...
...
src/views/engineeringProject/index.vue
View file @
a5cef984
...
...
@@ -19,11 +19,17 @@
label: '详情',
// icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
},
{
label: '修改',
// icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => {
return record.reviewStatus == null;
},
},
{
label: '审核',
...
...
@@ -51,7 +57,6 @@
import
{
useModal
}
from
'@/components/Modal'
;
import
{
getEngineeringList
,
auditItem
}
from
'@/api/project/engineeringProject'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
...
...
src/views/monthlyPlan/data.tsx
View file @
a5cef984
...
...
@@ -23,57 +23,57 @@ export const columns: (
},
{
title
:
'月份'
,
dataIndex
:
'
projectName
'
,
dataIndex
:
'
monthYear
'
,
width
:
200
,
},
{
title
:
'类型'
,
dataIndex
:
'implementingEntity'
,
width
:
180
,
},
//
{
//
title: '类型',
//
dataIndex: 'implementingEntity',
//
width: 180,
//
},
{
title
:
'合同额总计'
,
dataIndex
:
'
constructionMode
'
,
dataIndex
:
'
totalcontractamount
'
,
width
:
180
,
},
{
title
:
'资金缺口总计'
,
dataIndex
:
'
projectType
'
,
dataIndex
:
'
totalfundgap
'
,
width
:
180
,
},
{
title
:
'年资金缺口'
,
dataIndex
:
'
fundingSource
'
,
dataIndex
:
'
totalfundgapyear
'
,
width
:
180
,
},
{
title
:
'公司名称'
,
dataIndex
:
'co
nstructionPurpos
e'
,
dataIndex
:
'co
mpanyNam
e'
,
width
:
180
,
},
{
title
:
'最新更新人'
,
dataIndex
:
'
国constructionScale
'
,
dataIndex
:
'
createBy
'
,
width
:
180
,
},
{
title
:
'最新更新时间'
,
dataIndex
:
'
国constructionScal
e'
,
dataIndex
:
'
createTim
e'
,
width
:
180
,
},
{
title
:
'审核状态'
,
dataIndex
:
'
国constructionScale
'
,
dataIndex
:
'
revieweStatus
'
,
width
:
180
,
},
{
title
:
'审核人'
,
dataIndex
:
'
国constructionScale
'
,
dataIndex
:
'
revieweUser
'
,
width
:
180
,
},
{
title
:
'审核时间'
,
dataIndex
:
'
国constructionScal
e'
,
dataIndex
:
'
reviewTim
e'
,
width
:
180
,
},
];
...
...
src/views/monthlyPlan/index.vue
View file @
a5cef984
...
...
@@ -2,7 +2,7 @@
<div>
<BasicTable
@
register=
"registerTable"
:title=
"'月度工程资金计划'"
>
<template
#
toolbar
>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
Import
"
>
新建月度工程资金计划
</a-button>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
addMonthlyPlan
"
>
新建月度工程资金计划
</a-button>
</
template
>
<
template
#
bodyCell=
"{ column, text, record, index }"
>
...
...
@@ -33,6 +33,7 @@
</
template
>
</template>
</BasicTable>
<yearModal
@
register=
"register"
@
close=
"handleNew"
/>
</div>
</template>
<
script
lang=
"ts"
setup
>
...
...
@@ -47,9 +48,16 @@ import { columns, searchFormSchema } from './data';
defineOptions
({
name
:
'MonthlyPlan'
});
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
import
yearModal
from
'@/components/yearModal.vue'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
router
}
from
"@/router"
;
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
get
ListByPage
,
api
:
get
MonthlyPlanList
,
title
:
'123'
,
columns
,
formConfig
:
{
...
...
@@ -85,13 +93,23 @@ function handleSuccess() {
reload
();
}
const
Import
=
()
=>
{
console
.
log
(
'导入数据'
);
};
const
change
=
(
key
:
string
)
=>
{
reload
();
};
const
addMonthlyPlan
=
()
=>
{
openModal
(
true
,
{
data
:
[
'year'
],
});
};
const
handleNew
=
(
e
)
=>
{
console
.
log
(
'eeee'
,
e
);
router
.
push
({
path
:
'/monthlyPlan/monthlyPlanEdit'
,
query
:
e
,
});
};
</
script
>
<
style
scoped
>
.btn
{
...
...
src/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue
0 → 100644
View file @
a5cef984
This diff is collapsed.
Click to expand it.
src/views/monthlyPlan/monthlyPlanEdit/tableData.tsx
0 → 100644
View file @
a5cef984
import
{
optionsListApi
}
from
'@/api/demo/select'
;
import
{
FormProps
,
FormSchema
,
BasicColumn
}
from
'@/components/Table'
;
import
{
VxeFormItemProps
,
VxeGridPropTypes
}
from
'@/components/VxeTable'
;
import
{
ref
}
from
'vue'
;
import
{
Input
}
from
'ant-design-vue'
;
export
function
getBasicColumns
():
BasicColumn
[]
{
return
[
{
title
:
'年份'
,
dataIndex
:
'year'
,
width
:
80
,
},
{
title
:
'金额(万元)'
,
dataIndex
:
'amount'
,
width
:
150
,
// sorter: true,
// defaultHidden: true,
edit
:
true
,
},
];
}
export
const
formSchema
:
({
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
readonly
:
boolean
;
style
:
{
border
:
string
}
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
valueFormat
:
string
;
format
:
string
;
style
:
{
width
:
string
};
placeholder
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
addonAfter
:
string
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
options
:
({
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
})[]
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
icon
:
string
;
componentProps
:
{
style
:
{
width
:
string
};
placeholder
:
string
[]
};
label
:
string
;
required
:
boolean
}
|
{
colProps
:
{
offset
:
number
;
span
:
number
};
component
:
string
;
field
:
string
;
componentProps
:
{
options
:
({
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
}
|
{
label
:
string
;
value
:
string
})[]
};
label
:
string
;
required
:
boolean
})[]
=
[
{
field
:
'projectName'
,
label
:
'项目名称'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionSite'
,
label
:
'建设地点'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionMode'
,
label
:
'建设模式'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectType'
,
label
:
'项目类型'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'constructionScale'
,
label
:
'建设规模'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectOverview'
,
label
:
'项目概况:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'fundingSource'
,
label
:
'资金来源:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'implementingEntity'
,
label
:
'实施主体:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'projectOverview'
,
label
:
'项目概况:'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
readonly
:
true
,
style
:
{
border
:
'none'
},
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'filingCycle'
,
label
:
'填报年度:'
,
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
picker
:
'year'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'totalInvestment'
,
label
:
'总投资'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'competentDepartment'
,
label
:
'项目主管部门'
,
required
:
true
,
component
:
'Input'
,
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'matchingFunds'
,
label
:
'2024年财政预算匹配资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'specialBondFunds'
,
label
:
'其中专项债项目2024年预计使用专项债资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'planFunds'
,
label
:
'2024年计划资金'
,
required
:
true
,
component
:
'Input'
,
componentProps
:
{
addonAfter
:
'万元'
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'attribute'
,
label
:
'建设性质'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'新建'
,
value
:
'0'
},
{
label
:
'结转'
,
value
:
'1'
},
{
label
:
'缓建'
,
value
:
'2'
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
field
:
'time'
,
component
:
'RangePicker'
,
label
:
'开竣工时间'
,
required
:
true
,
icon
:
'healthicons:i-schedule-school-date-time-outline'
,
colProps
:
{
span
:
7
,
offset
:
1
},
componentProps
:
{
placeholder
:
[
'开始日期'
,
'结束日期'
],
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
},
},
{
field
:
'schedule'
,
label
:
'2024年底预计形象进度'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'A(已经立项实施的跨年工程)'
,
value
:
'0'
},
{
label
:
'B(该年度必须建设的项目)'
,
value
:
'1'
},
{
label
:
'C(该年度必须建设的项目)'
,
value
:
'2'
},
],
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
{
label
:
'备注'
,
field
:
'remarks'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
100
,
showCount
:
true
,
},
colProps
:
{
span
:
7
,
offset
:
1
},
},
// {
// field: 'isReserveProject',
// label: '是否为储备项目',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '是', value: '1' },
// { label: '否', value: '0' },
// ],
// },
// },
// {
// field: 'status',
// label: '状态',
// component: 'RadioButtonGroup',
// defaultValue: '0',
// componentProps: {
// options: [
// { label: '启用', value: '1' },
// { label: '停用', value: '0' },
// ],
// },
// },
];
src/views/performance/data.tsx
View file @
a5cef984
This diff is collapsed.
Click to expand it.
src/views/performance/index.vue
View file @
a5cef984
...
...
@@ -2,55 +2,80 @@
<div>
<BasicTable
@
register=
"registerTable"
:title=
"'工程项目投资计划完成情况'"
>
<template
#
toolbar
>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
Import
"
>
新建完成情况
</a-button>
<a-button
class=
"btn"
type=
"primary"
@
click=
"
handleCreate
"
>
新建完成情况
</a-button>
</
template
>
<
template
#
bodyCell=
"{ column, text, record, index }"
>
<!-- 当前列是序号列时,显示序号 -->
<span
v-if=
"column.dataIndex === 'serialNumber'"
>
{{
index
+
1
}}
</span>
<!-- 其他列正常显示 -->
<span
v-else
>
{{
text
}}
</span>
<template
v-if=
"column.key === 'completionResult'"
>
<Tag
color=
"processing"
>
{{
record
.
completionResult
==
1
?
'已审核'
:
'未审核'
}}
</Tag>
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
label: '详情',
onClick: handleEdit.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
{
label: '修改',
onClick: handleEdit.bind(null, record, 0),
ifShow: (_action) => {
return record.completionResult == 0;
},
},
{
icon: 'ant-design:delete-outlined
',
label: '删除
',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return record.completionResult == 0;
},
},
{
label: '审核',
color: 'success',
popConfirm: {
title: '是否确认审核',
placement: 'left',
confirm: examine.bind(null, record, true),
},
ifShow: (_action) => {
return record.completionResult == 0;
},
},
]"
/>
</
template
>
</template>
</BasicTable>
<performanceModel
@
register=
"register"
@
close=
"handleNew"
/>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getperformanceList
}
from
'@/api/project/performance'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
defineOptions
({
name
:
'Performance'
});
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
[
registerTable
,
{
reload
}]
=
useTable
({
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
,
auditItem
,
deleteItem
}
from
'@/api/project/performance'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
useRouter
}
from
'vue-router'
;
const
{
push
}
=
useRouter
();
import
performanceModel
from
'./performanceModel.vue'
;
import
{
Tag
}
from
'ant-design-vue'
;
const
[
register
,
{
openModal
:
openModal
}]
=
useModal
();
defineOptions
({
name
:
'Performance'
});
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
title
:
'123
'
,
title
:
'工程项目投资计划完成情况
'
,
columns
,
formConfig
:
{
labelWidth
:
120
,
...
...
@@ -61,40 +86,56 @@ const [registerTable, { reload }] = useTable({
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
80
,
width
:
1
80
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleEdit
(
record
:
Recordable
)
{
openDrawer
(
true
,
{
record
,
isUpdate
:
true
,
});
}
function
handleDelete
(
record
:
Recordable
)
{
console
.
log
(
record
);
}
function
handleEdit
(
record
:
Recordable
,
disabled
:
number
)
{
push
({
path
:
'/performance/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
function
handleSuccess
()
{
function
handleDelete
(
record
:
Recordable
)
{
deleteItem
({
id
:
record
.
id
});
reload
();
}
}
const
Import
=
()
=>
{
console
.
log
(
'新建完成情况'
);
};
function
handleSuccess
()
{
reload
(
);
}
const
change
=
(
key
:
string
)
=>
{
function
handleCreate
()
{
openModal
(
true
,
{
data
:
'2023'
,
});
}
function
handleNew
(
e
)
{
console
.
log
(
e
);
push
({
path
:
'/performance/edit'
,
query
:
{
source
:
JSON
.
stringify
(
e
),
},
});
}
async
function
examine
(
record
:
Recordable
)
{
const
id
=
record
.
id
;
const
res
=
await
auditItem
({
id
});
console
.
log
(
res
);
reload
();
};
}
</
script
>
<
style
scoped
>
.btn
{
.btn
{
margin-right
:
10px
;
}
}
</
style
>
src/views/performance/performanceEdit.vue
0 → 100644
View file @
a5cef984
<
template
>
<PageWrapper
:title=
"getTitle"
v-loading=
"loadingRef"
loading-tip=
"加载中..."
:contentBackground=
"false"
headerSticky
>
<template
#
extra
>
<a-button
type=
"primary"
danger
>
删除
</a-button>
<a-button
type=
"primary"
v-if=
"!disabled"
@
click=
"handleSubmit"
>
提交
</a-button>
<a-button
type=
"default"
@
click=
"router.back()"
>
返回
</a-button>
</
template
>
<PageCard
v-for=
"(item, index) in tabsFormSchema"
:key=
"index"
:title=
"item.name"
>
<
template
#
right
>
<a-button
v-if=
"!disabled"
type=
"text"
preIcon=
"ant-design:delete-outlined"
danger
@
click=
"deleteItem(index)"
>
</a-button>
</
template
>
<BasicForm
:loading=
"loading"
@
register=
"item.Form[0]"
/>
</PageCard>
<!-- <a-button type="dashed" @click="add" preIcon="ei:plus"> 从项目库导入 </a-button>
<a-button type="dashed" @click="handleAdd" class="ml-2" preIcon="ei:plus"> 新建项目 </a-button> -->
<!-- <projectDrawer v-if="!disabled" @register="registerDrawer" @success="handleSuccess" />
<projectlibraryModel v-if="!disabled" @register="register" @close="handleNewData" /> -->
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
unref
,
computed
,
onMounted
,
ref
,
reactive
,
nextTick
}
from
'vue'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
import
{
BasicForm
,
useForm
,
FormProps
,
UseFormReturnType
}
from
'@/components/Form'
;
import
{
formSchema1
,
formSchema2
}
from
'./data'
;
import
{
deepMerge
}
from
'@/utils'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
editModel
}
from
'@/api/project/model/performance'
;
import
{
router
}
from
'@/router'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
addItem
,
updateItem
,
getItem
,
GetEngineProjectList
,
Itemdelete
,
}
from
'@/api/project/performance'
;
const
loadingRef
=
ref
(
false
);
const
{
createMessage
}
=
useMessage
();
const
isUpdate
=
ref
(
false
);
const
loading
=
ref
(
false
);
const
formData
=
ref
<
editModel
>
({});
const
disabled
=
ref
(
false
);
const
getTitle
=
ref
(
''
);
onMounted
(
async
()
=>
{
loadingRef
.
value
=
true
;
const
route
=
useRoute
();
const
id
=
route
.
query
.
id
;
// 获取名为id的参数
if
(
!
id
)
{
formData
.
value
.
planCompletion
=
[];
isUpdate
.
value
=
false
;
getTitle
.
value
=
'创建完成情况'
;
let
ids
=
JSON
.
parse
(
route
.
query
.
source
);
let
result
=
await
GetEngineProjectList
({
ids
,
});
formData
.
value
.
ids
=
ids
;
result
.
map
((
res
)
=>
{
let
item
=
res
;
item
.
time
=
item
.
beginTime
+
'/'
+
item
.
endTime
;
handleNew
(
item
);
});
}
else
{
isUpdate
.
value
=
true
;
disabled
.
value
=
route
.
query
.
disabled
==
'0'
?
false
:
true
;
if
(
disabled
.
value
)
{
getTitle
.
value
=
'查看完成情况'
;
}
else
{
getTitle
.
value
=
'编辑完成情况'
;
}
let
res
=
await
getItem
({
id
});
formData
.
value
.
id
=
id
;
formData
.
value
.
planCompletion
=
[];
for
(
let
i
=
0
;
i
<
res
.
length
;
i
++
)
{
const
source
=
res
[
i
];
const
item
=
{
name
:
'序号'
+
(
i
+
1
),
forceRender
:
true
,
Form
:
useForm
(
Object
.
assign
(
{
schemas
:
source
.
planType
==
'承建'
?
formSchema1
:
formSchema2
,
disabled
},
baseFormConfig
,
)
as
FormProps
,
),
};
const
{
setFieldsValue
,
clearValidate
}
=
item
.
Form
[
1
];
source
.
time
=
source
.
beginTime
+
'/'
+
source
.
endTime
;
tabsFormSchema
.
push
(
item
);
formData
.
value
.
planCompletion
.
push
({
id
:
source
.
id
,
investmentld
:
source
.
investmentId
,
});
nextTick
(()
=>
{
setFieldsValue
({
...
source
,
});
clearValidate
();
});
}
}
loadingRef
.
value
=
false
;
});
type
TabsFormType
=
{
name
:
string
;
forceRender
?:
boolean
;
Form
:
UseFormReturnType
;
};
const
baseFormConfig
:
Partial
<
FormProps
>
=
{
showActionButtonGroup
:
false
,
labelWidth
:
260
,
layout
:
'vertical'
,
};
const
tabsFormSchema
=
reactive
<
TabsFormType
[]
>
([]);
/***
*
*/
async
function
handleNew
(
info
:
any
)
{
console
.
log
(
info
);
const
item
=
{
name
:
'序号'
+
(
tabsFormSchema
.
length
+
1
),
forceRender
:
true
,
Form
:
useForm
(
Object
.
assign
(
{
schemas
:
info
.
planType
==
'承建'
?
formSchema1
:
formSchema2
,
disabled
},
baseFormConfig
,
)
as
FormProps
,
),
};
const
{
setFieldsValue
,
clearValidate
}
=
item
.
Form
[
1
];
tabsFormSchema
.
push
(
item
);
formData
.
value
.
planCompletion
.
push
({
id
:
info
.
id
,
investmentId
:
info
.
investmentId
,
});
nextTick
(()
=>
{
setFieldsValue
(
info
);
clearValidate
();
});
}
async
function
deleteItem
(
index
:
any
)
{
loadingRef
.
value
=
true
;
const
id
=
formData
.
value
.
planCompletion
[
index
].
id
;
if
(
id
)
{
await
Itemdelete
({
id
,
});
formData
.
value
.
planCompletion
.
splice
(
index
,
1
);
tabsFormSchema
.
splice
(
index
,
1
);
loadingRef
.
value
=
false
;
}
else
{
formData
.
value
.
planCompletion
.
splice
(
index
,
1
);
tabsFormSchema
.
splice
(
index
,
1
);
loadingRef
.
value
=
false
;
}
}
async
function
handleSubmit
()
{
loadingRef
.
value
=
true
;
try
{
for
(
let
i
=
0
;
i
<
tabsFormSchema
.
length
;
i
++
)
{
let
item
=
tabsFormSchema
[
i
];
const
{
validate
,
getFieldsValue
}
=
item
.
Form
[
1
];
await
validate
();
let
res
=
getFieldsValue
();
formData
.
value
.
planCompletion
[
i
]
=
deepMerge
(
formData
.
value
.
planCompletion
[
i
],
res
);
formData
.
value
.
planCompletion
[
i
].
actualOutputValue
=
Number
(
formData
.
value
.
planCompletion
[
i
].
actualOutputValue
,
);
formData
.
value
.
planCompletion
[
i
].
actualPay
=
Number
(
formData
.
value
.
planCompletion
[
i
].
actualPay
,
);
console
.
log
(
formData
.
value
.
planCompletion
);
}
formData
.
value
.
proNumber
=
formData
.
value
.
planCompletion
.
Length
;
let
res
=
isUpdate
.
value
?
await
updateItem
(
unref
(
formData
))
:
await
addItem
(
unref
(
formData
));
loadingRef
.
value
=
true
;
console
.
log
(
res
);
createMessage
.
success
(
'提交成功!'
);
router
.
back
();
}
catch
(
e
)
{
// 验证失败或出错,切换到对应标签页
console
.
log
(
e
);
}
finally
{
loadingRef
.
value
=
false
;
}
}
</
script
>
src/views/performance/performanceModel.vue
0 → 100644
View file @
a5cef984
<
template
>
<BasicModal
width=
"70%"
v-bind=
"$attrs"
@
register=
"register"
title=
"选择投资计划"
:minHeight=
"30"
okText=
"新建"
@
ok=
"handleSubmit"
@
visible-change=
"handleVisibleChange"
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, text, record, index }">
<!-- 当前列是序号列时,显示序号 -->
<span
v-if=
"column.dataIndex === 'serialNumber'"
>
{{
index
+
1
}}
</span>
<!-- 其他列正常显示 -->
<span
v-else
>
{{
text
}}
</span>
</
template
>
</BasicTable>
<!-- <button @click="getSelectRowList">获取数据</button>-->
</BasicModal>
</template>
<
script
lang=
"ts"
setup
>
import
{
getEngineeringList
}
from
'@/api/project/performance'
;
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
modelColumns
,
searchModelFormSchema
}
from
'./data'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
const
[
registerTable
,
{
reload
,
getSelectRows
}]
=
useTable
({
api
:
getEngineeringList
,
title
:
'123'
,
columns
:
modelColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchModelFormSchema
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
rowSelection
:
{
type
:
'checkbox'
,
},
// actionColumn: {
// width: 80,
// title: '操作',
// dataIndex: 'action',
// // slots: { customRender: 'action' },
// fixed: undefined,
// },
});
const
{
createMessage
}
=
useMessage
();
function
getSelectRowList
()
{
// createMessage.info('请在控制台查看!');
// console.log(getSelectRows());
const
ids
=
getSelectRows
().
map
((
i
)
=>
{
return
i
.
id
;
});
emit
(
'close'
,
ids
);
}
const
emit
=
defineEmits
([
'close'
]);
function
handleVisibleChange
(
v
)
{}
const
[
register
,
{
closeModal
}]
=
useModalInner
((
data
)
=>
{
data
;
});
function
handleSubmit
()
{
getSelectRowList
();
closeModal
();
}
</
script
>
src/views/potentialSafety/data.ts
View file @
a5cef984
...
...
@@ -8,10 +8,13 @@ export const formSchema: FormSchema[] = [
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
},
{
...
...
@@ -171,10 +174,13 @@ export const searchFormSchema: FormSchema[] = [
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
4
},
},
...
...
src/views/safetyEducation/data.ts
View file @
a5cef984
...
...
@@ -8,10 +8,13 @@ export const formSchema: FormSchema[] = [
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
},
{
...
...
@@ -167,10 +170,13 @@ export const searchFormSchema: FormSchema[] = [
label
:
''
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择填报周期'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'年份'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
width
:
'100%'
,
},
},
colProps
:
{
span
:
4
},
},
...
...
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