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
a8044d79
Commit
a8044d79
authored
Jun 13, 2024
by
jiaxu.yan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 项目详情
parent
fc4bcbe2
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
1965 additions
and
578 deletions
+1965
-578
contract.ts
src/api/contract/contract.ts
+21
-17
projectModel.ts
src/api/project/model/projectModel.ts
+4
-0
monthlyPlan.ts
src/api/project/monthlyPlan.ts
+4
-7
project.ts
src/api/project/project.ts
+20
-1
settlementManage.ts
src/api/project/settlementManage.ts
+46
-52
index.ts
src/utils/http/axios/index.ts
+0
-1
contractDrawer.vue
src/views/contract/contractDrawer.vue
+87
-73
monthlyPlanEdit.vue
src/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue
+5
-2
detail.vue
src/views/project/detail.vue
+58
-9
project.data.ts
src/views/project/project.data.ts
+13
-13
Article.vue
src/views/project/tabs/Article.vue
+0
-214
InvestmentPlan.vue
src/views/project/tabs/InvestmentPlan.vue
+37
-4
annex.vue
src/views/project/tabs/annex.vue
+72
-0
annualPlan.vue
src/views/project/tabs/annualPlan.vue
+62
-0
biddingManagement.vue
src/views/project/tabs/biddingManagement.vue
+66
-0
biddingPlan.vue
src/views/project/tabs/biddingPlan.vue
+66
-0
changeSignature.vue
src/views/project/tabs/changeSignature.vue
+66
-0
completed.vue
src/views/project/tabs/completed.vue
+62
-0
contract.vue
src/views/project/tabs/contract.vue
+66
-0
data.ts
src/views/project/tabs/data.ts
+582
-2
monthlyPlan.vue
src/views/project/tabs/monthlyPlan.vue
+62
-0
performance.vue
src/views/project/tabs/performance.vue
+68
-0
potentialSafety.vue
src/views/project/tabs/potentialSafety.vue
+66
-0
safetyEducation.vue
src/views/project/tabs/safetyEducation.vue
+66
-0
settlementManagement.vue
src/views/project/tabs/settlementManagement.vue
+66
-0
updateRecords.vue
src/views/project/tabs/updateRecords.vue
+14
-0
uploadModal.vue
src/views/project/uploadModal.vue
+103
-0
data.ts
src/views/safetyEducation/data.ts
+183
-183
No files found.
src/api/contract/contract.ts
View file @
a8044d79
import
{
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
}
from
'@/api/project/model/projectModel'
;
import
{
import
{
ProjectListItem
}
from
"@/api/contract/model/contractModel"
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
,
}
from
'@/api/project/model/projectModel'
;
import
{
ProjectListItem
}
from
'@/api/contract/model/contractModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
enum
Api
{
//分页查询合同集合
//分页查询合同集合
GetList
=
'/pro/settlement/select-contract'
,
GetList
=
'/pro/settlement/select-contract'
,
//查询项目下拉框集合
//查询项目下拉框集合
ProjectSelect
=
'/pro/investmentPlan/project-list'
,
ProjectSelect
=
'/pro/investmentPlan/project-list'
,
//新增合同
//新增合同
Add
=
'/pro/settlement/add-contract'
,
Add
=
'/pro/settlement/add-contract'
,
}
}
export
const
getContractListPage
=
(
params
?:
ProjectParams
)
=>
export
const
getContractListPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
//查询下拉列表
//查询下拉列表
export
const
getProjectSelect
=
(
params
?:
any
)
=>
export
const
getProjectSelect
=
(
params
?:
any
)
=>
defHttp
.
get
<
ProjectListItem
>
({
url
:
Api
.
ProjectSelect
,
params
});
defHttp
.
get
<
ProjectListItem
>
({
url
:
Api
.
ProjectSelect
,
params
});
export
const
addItem
=
(
params
?:
any
)
=>
export
const
addItem
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
Add
,
url
:
Api
.
Add
,
data
:
params
,
data
:
params
,
headers
:
{
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
},
});
});
\ No newline at end of file
src/api/project/model/projectModel.ts
View file @
a8044d79
...
@@ -41,4 +41,8 @@ export interface ProjectCountModel {
...
@@ -41,4 +41,8 @@ export interface ProjectCountModel {
countbuildbyhold
:
number
;
countbuildbyhold
:
number
;
countreserve
:
number
;
countreserve
:
number
;
}
}
export
interface
AnnexListItem
{
id
?:
string
|
number
;
}
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
export
type
ProjectListGetResultModel
=
BasicFetchResult
<
ProjectListItem
>
;
src/api/project/monthlyPlan.ts
View file @
a8044d79
import
{
import
{
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
}
from
'./model/projectModel'
;
ProjectParams
,
ProjectListGetResultModel
,
ProjectModel
,
}
from
'./model/projectModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
enum
Api
{
...
@@ -35,7 +31,7 @@ export const updateItem = (params?: any) =>
...
@@ -35,7 +31,7 @@ export const updateItem = (params?: any) =>
},
},
});
});
export
const
auditItem
=
(
params
?:
any
)
=>
export
const
auditItem
=
(
params
?:
any
)
=>
defHttp
.
ge
t
<
ProjectModel
>
({
defHttp
.
pos
t
<
ProjectModel
>
({
url
:
Api
.
audit
,
url
:
Api
.
audit
,
params
,
params
,
});
});
...
@@ -45,4 +41,5 @@ export const deleteItem = (params?: any) =>
...
@@ -45,4 +41,5 @@ export const deleteItem = (params?: any) =>
export
const
Itemdelete
=
(
params
?:
any
)
=>
export
const
Itemdelete
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
Itemdelete
,
params
});
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
Itemdelete
,
params
});
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ProjectModel
>
({
url
:
Api
.
ProjectDetail
,
params
});
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ProjectModel
>
({
url
:
Api
.
ProjectDetail
,
params
});
src/api/project/project.ts
View file @
a8044d79
...
@@ -3,7 +3,8 @@ import {
...
@@ -3,7 +3,8 @@ import {
ProjectListGetResultModel
,
ProjectListGetResultModel
,
ProjectModel
,
ProjectModel
,
ProjectListItem
,
ProjectListItem
,
ProjectCountModel
ProjectCountModel
,
AnnexListItem
,
}
from
'./model/projectModel'
;
}
from
'./model/projectModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
...
@@ -14,6 +15,9 @@ enum Api {
...
@@ -14,6 +15,9 @@ enum Api {
DeleteProject
=
'/pro/project/del'
,
DeleteProject
=
'/pro/project/del'
,
ProjectDetail
=
'/pro/project/details'
,
ProjectDetail
=
'/pro/project/details'
,
ProjectCount
=
'/pro/project/count'
,
ProjectCount
=
'/pro/project/count'
,
annexList
=
'/pro/annex/listByProId'
,
annexAdd
=
'/pro/annex/add'
,
deleteAnnex
=
'/pro/annex/del'
,
}
}
export
const
getListByPage
=
(
params
?:
ProjectParams
)
=>
export
const
getListByPage
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectListGetResultModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
defHttp
.
post
<
ProjectListGetResultModel
>
({
url
:
Api
.
GetList
,
data
:
params
});
...
@@ -32,3 +36,18 @@ export const getItem = (params?: any) =>
...
@@ -32,3 +36,18 @@ export const getItem = (params?: any) =>
export
const
getProjectCount
=
(
params
?:
any
)
=>
export
const
getProjectCount
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectCountModel
>
({
url
:
Api
.
ProjectCount
,
params
});
defHttp
.
post
<
ProjectCountModel
>
({
url
:
Api
.
ProjectCount
,
params
});
export
const
getAnnexList
=
(
params
?:
any
)
=>
defHttp
.
get
<
AnnexListItem
>
({
url
:
Api
.
annexList
,
params
});
export
const
AnnexAdd
=
(
params
?:
any
)
=>
defHttp
.
post
<
AnnexListItem
>
({
url
:
Api
.
annexAdd
,
data
:
params
,
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
});
export
const
deleteAnnex
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
deleteAnnex
,
params
});
src/api/project/settlementManage.ts
View file @
a8044d79
// import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
// import { ProjectParams, ProjectListGetResultModel, ProjectModel } from './model/projectModel';
import
{
ProjectParams
,
ProjectModel
}
from
'./model/settlementManageModel'
import
{
ProjectParams
,
ProjectModel
}
from
'./model/settlementManageModel'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
import
{
defHttp
}
from
'@/utils/http/axios'
;
enum
Api
{
enum
Api
{
//查询list
//查询list
GetList
=
'/pro/settlement/page'
,
GetList
=
'/pro/settlement/page'
,
//新增接口
//新增接口
Add
=
'/pro/settlement/add'
,
Add
=
'/pro/settlement/add'
,
//根据id查询详情
//根据id查询详情
GetItem
=
'/pro/settlement/findById'
,
GetItem
=
'/pro/settlement/findById'
,
//修改接口
//修改接口
update
=
'/pro/settlement/update-settlement'
,
update
=
'/pro/settlement/update-settlement'
,
//根据id删除
//根据id删除
deleteItem
=
'/pro/settlement/byid-del'
,
deleteItem
=
'/pro/settlement/byid-del'
,
//审核接口
//审核接口
audit
=
'/pro/settlement/byId-examine'
,
audit
=
'/pro/settlement/byId-examine'
,
//删除列表接口
//删除列表接口
deleteList
=
'/pro/settlement/del'
,
deleteList
=
'/pro/settlement/del'
,
}
}
export
const
getSettlementManageList
=
(
params
?:
ProjectParams
)
=>
export
const
getSettlementManageList
=
(
params
?:
ProjectParams
)
=>
defHttp
.
post
<
ProjectParams
>
({
url
:
Api
.
GetList
,
data
:
params
});
defHttp
.
post
<
ProjectParams
>
({
url
:
Api
.
GetList
,
data
:
params
});
export
const
addItem
=
(
params
?:
any
)
=>
export
const
addItem
=
(
params
?:
any
)
=>
defHttp
.
post
<
ProjectModel
>
({
defHttp
.
post
<
ProjectModel
>
({
url
:
Api
.
Add
,
url
:
Api
.
Add
,
data
:
params
,
data
:
params
,
headers
:
{
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
},
});
});
//根据id查询详情
//根据id查询详情
export
const
getItem
=
(
params
?:
any
)
=>
export
const
getItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ProjectModel
>
({
defHttp
.
get
<
ProjectModel
>
({
url
:
Api
.
GetItem
,
url
:
Api
.
GetItem
,
params
,
params
,
});
});
/**
/**
* 修改
* 修改
*/
*/
export
const
updateItem
=
(
params
?:
any
)
=>
export
const
updateItem
=
(
params
?:
any
)
=>
defHttp
.
put
<
ProjectModel
>
({
defHttp
.
put
<
ProjectModel
>
({
url
:
Api
.
update
,
url
:
Api
.
update
,
data
:
params
.
management
,
data
:
params
.
management
,
headers
:
{
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
,
'Content-Type'
:
'application/json;charset=UTF-8'
,
},
},
});
});
/**
/**
* 根据id删除
* 根据id删除
*/
*/
export
const
deleteOne
=
(
params
?:
any
)
=>
export
const
deleteOne
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
deleteItem
,
url
:
Api
.
deleteItem
,
params
,
params
,
});
});
/**
/**
* 审核接口
* 审核接口
*/
*/
export
const
auditItem
=
(
params
?:
any
)
=>
export
const
auditItem
=
(
params
?:
any
)
=>
defHttp
.
get
<
ProjectModel
>
({
defHttp
.
get
<
ProjectModel
>
({
url
:
Api
.
audit
,
url
:
Api
.
audit
,
params
,
params
,
});
});
/**
/**
* deleteList
* deleteList
*/
*/
export
const
deleteList
=
(
params
?:
any
)
=>
export
const
deleteList
=
(
params
?:
any
)
=>
defHttp
.
delete
<
ProjectModel
>
({
defHttp
.
delete
<
ProjectModel
>
({
url
:
Api
.
deleteList
,
url
:
Api
.
deleteList
,
params
,
params
,
});
});
src/utils/http/axios/index.ts
View file @
a8044d79
...
@@ -51,7 +51,6 @@ const transform: AxiosTransform = {
...
@@ -51,7 +51,6 @@ const transform: AxiosTransform = {
// 这里 code,msg 为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
// 这里 code,msg 为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
const
{
code
,
data
,
msg
,
message
}
=
res
.
data
;
const
{
code
,
data
,
msg
,
message
}
=
res
.
data
;
console
.
log
(
1
);
// 这里逻辑可以根据项目进行修改
// 这里逻辑可以根据项目进行修改
const
hasSuccess
=
const
hasSuccess
=
...
...
src/views/contract/contractDrawer.vue
View file @
a8044d79
<
template
>
<
template
>
<BasicDrawer
<BasicDrawer
v-bind=
"$attrs"
v-bind=
"$attrs"
@
register=
"registerDrawer"
@
register=
"registerDrawer"
showFooter
showFooter
:title=
"getTitle"
:title=
"getTitle"
width=
"700px"
width=
"700px"
@
ok=
"handleSubmit"
@
ok=
"handleSubmit"
>
>
<BasicForm
ref=
"formElRef"
@
register=
"registerForm"
>
<BasicForm
ref=
"formElRef"
@
register=
"registerForm"
>
<!--
<template
#
menu=
"
{ model, field }">
</
template
>
-->
<!--
<template
#
menu=
"
{ model, field }">
</
template
>
-->
...
@@ -13,81 +13,95 @@
...
@@ -13,81 +13,95 @@
</BasicDrawer>
</BasicDrawer>
</template>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
unref
,
computed
,
onMounted
,
ref
,
reactive
}
from
'vue'
;
import
{
unref
,
computed
,
onMounted
,
ref
,
reactive
}
from
'vue'
;
import
{
BasicForm
,
useForm
,
FormActionType
}
from
'@/components/Form'
;
import
{
BasicForm
,
useForm
,
FormActionType
}
from
'@/components/Form'
;
import
{
getProjectSelect
,
addItem
}
from
"@/api/contract/contract"
import
{
getProjectSelect
,
addItem
}
from
'@/api/contract/contract'
;
import
{
formSchema
}
from
'./project.data'
;
import
{
formSchema
}
from
'./project.data'
;
import
{
BasicDrawer
,
useDrawerInner
}
from
'@/components/Drawer'
;
import
{
BasicDrawer
,
useDrawerInner
}
from
'@/components/Drawer'
;
// import { addItem, updateItem } from '@/api/project/project';
// import { addItem, updateItem } from '@/api/project/project';
const
emit
=
defineEmits
([
'success'
,
'register'
]);
const
emit
=
defineEmits
([
'success'
,
'register'
]);
const
isUpdate
=
ref
(
true
);
const
isUpdate
=
ref
(
true
);
const
detailId
=
ref
(
0
);
const
projectId
=
ref
(
0
);
const
formElRef
=
ref
<
Nullable
<
FormActionType
>>
(
null
);
const
detailId
=
ref
(
0
);
const
stype
=
ref
(
null
);
const
formElRef
=
ref
<
Nullable
<
FormActionType
>>
(
null
);
const
[
registerForm
,
{
resetFields
,
setFieldsValue
,
validate
,
updateSchema
}]
=
useForm
({
const
stype
=
ref
(
null
);
labelWidth
:
90
,
const
[
registerForm
,
{
resetFields
,
setFieldsValue
,
validate
,
updateSchema
}]
=
useForm
({
baseColProps
:
{
span
:
24
},
labelWidth
:
90
,
schemas
:
formSchema
,
baseColProps
:
{
span
:
24
},
showActionButtonGroup
:
false
,
schemas
:
formSchema
,
});
showActionButtonGroup
:
false
,
});
const
[
registerDrawer
,
{
setDrawerProps
,
closeDrawer
}]
=
useDrawerInner
(
async
(
data
)
=>
{
const
[
registerDrawer
,
{
setDrawerProps
,
closeDrawer
}]
=
useDrawerInner
(
async
(
data
)
=>
{
stype
.
value
=
await
getProjectSelect
();
stype
.
value
=
await
getProjectSelect
();
updateSchema
({
updateSchema
({
field
:
'projectId'
,
field
:
'projectId'
,
componentProps
:
{
componentProps
:
{
options
:
unref
(
stype
),
options
:
unref
(
stype
),
},
},
})
resetFields
();
stype
.
value
=
await
getProjectSelect
()
setDrawerProps
({
confirmLoading
:
false
});
isUpdate
.
value
=
!!
data
?.
isUpdate
;
if
(
isUpdate
.
value
)
{
detailId
.
value
=
data
.
record
.
id
;
getTitle
.
value
=
'编辑项目'
;
}
else
{
getTitle
.
value
=
'新建合同'
;
}
if
(
data
.
disabled
==
true
)
{
getTitle
.
value
=
'查看项目'
;
const
formEl
=
unref
(
formElRef
);
if
(
!
formEl
)
return
;
await
formEl
.
setProps
({
disabled
:
true
,
});
});
}
resetFields
();
stype
.
value
=
await
getProjectSelect
();
if
(
unref
(
isUpdate
))
{
setDrawerProps
({
confirmLoading
:
false
});
setFieldsValue
({
isUpdate
.
value
=
!!
data
?.
isUpdate
;
...
data
.
record
,
console
.
log
(
data
);
});
}
projectId
.
value
=
data
.
projectId
;
});
// });
const
getTitle
=
ref
(
''
);
async
function
handleSubmit
()
{
try
{
const
values
=
await
validate
();
setDrawerProps
({
confirmLoading
:
true
});
if
(
isUpdate
.
value
)
{
if
(
isUpdate
.
value
)
{
values
.
id
=
detailId
.
value
;
detailId
.
value
=
data
.
record
.
id
;
getTitle
.
value
=
'编辑项目'
;
}
else
{
getTitle
.
value
=
'新建合同'
;
}
if
(
data
.
disabled
==
true
)
{
getTitle
.
value
=
'查看项目'
;
const
formEl
=
unref
(
formElRef
);
if
(
!
formEl
)
return
;
await
formEl
.
setProps
({
disabled
:
true
,
});
}
}
// TODO custom api
console
.
log
(
values
);
let
res
=
await
addItem
(
values
);
if
(
unref
(
isUpdate
))
{
setFieldsValue
({
...
data
.
record
,
});
}
if
(
unref
(
projectId
))
{
console
.
log
(
projectId
,
'projectId'
);
setFieldsValue
({
projectId
:
Number
(
projectId
.
value
),
});
updateSchema
({
field
:
'projectId'
,
componentProps
:
{
disabled
:
true
,
},
});
}
});
// });
const
getTitle
=
ref
(
''
);
async
function
handleSubmit
()
{
try
{
const
values
=
await
validate
();
setDrawerProps
({
confirmLoading
:
true
});
if
(
isUpdate
.
value
)
{
values
.
id
=
detailId
.
value
;
}
// TODO custom api
console
.
log
(
values
);
console
.
log
(
r
es
);
let
res
=
await
addItem
(
valu
es
);
closeDrawer
();
console
.
log
(
res
);
emit
(
'success'
,
res
);
}
finally
{
closeDrawer
();
setDrawerProps
({
confirmLoading
:
false
});
emit
(
'success'
,
res
);
}
finally
{
setDrawerProps
({
confirmLoading
:
false
});
}
}
}
}
</
script
>
</
script
>
src/views/monthlyPlan/monthlyPlanEdit/monthlyPlanEdit.vue
View file @
a8044d79
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
<a-button
type=
"dashed"
@
click=
"add"
preIcon=
"ei:plus"
v-if=
"!disabled"
>
<a-button
type=
"dashed"
@
click=
"add"
preIcon=
"ei:plus"
v-if=
"!disabled"
>
从合同中导入
从合同中导入
</a-button>
</a-button>
<a-button
type=
"dashed"
@
click=
"handleAdd"
class=
"ml-2"
preIcon=
"ei:plus"
v-if=
"!disabled"
>
<a-button
type=
"dashed"
@
click=
"handleAdd"
class=
"ml-2"
preIcon=
"ei:plus"
v-if=
"!disabled"
>
新建合同
新建合同
</a-button>
</a-button>
...
@@ -97,7 +98,9 @@
...
@@ -97,7 +98,9 @@
name
:
'项目:'
+
source
.
projectName
,
name
:
'项目:'
+
source
.
projectName
,
projectId
:
source
.
projectId
,
projectId
:
source
.
projectId
,
forceRender
:
true
,
forceRender
:
true
,
Form
:
useForm
(
Object
.
assign
({
schemas
:
formSchema
},
baseFormConfig
)
as
FormProps
),
Form
:
useForm
(
Object
.
assign
({
schemas
:
formSchema
,
disabled
},
baseFormConfig
)
as
FormProps
,
),
list
:
[],
list
:
[],
};
};
tabsFormSchema
.
push
(
item
);
tabsFormSchema
.
push
(
item
);
...
@@ -105,7 +108,7 @@
...
@@ -105,7 +108,7 @@
for
(
let
t
=
0
;
t
<
source
.
engineerConList
.
length
;
t
++
)
{
for
(
let
t
=
0
;
t
<
source
.
engineerConList
.
length
;
t
++
)
{
const
content
=
source
.
engineerConList
[
t
];
const
content
=
source
.
engineerConList
[
t
];
let
from
=
useForm
(
let
from
=
useForm
(
Object
.
assign
({
schemas
:
subFormSchema
},
baseFormConfig
)
as
FormProps
,
Object
.
assign
({
schemas
:
subFormSchema
,
disabled
},
baseFormConfig
)
as
FormProps
,
);
);
item
.
list
.
push
({
item
.
list
.
push
({
name
:
'合同:'
+
content
.
contrcatName
,
name
:
'合同:'
+
content
.
contrcatName
,
...
...
src/views/project/detail.vue
View file @
a8044d79
...
@@ -12,10 +12,10 @@
...
@@ -12,10 +12,10 @@
<a-button
type=
"default"
class=
"btn"
preIcon=
"ri:edit-line"
@
click=
"handleEdit"
>
<a-button
type=
"default"
class=
"btn"
preIcon=
"ri:edit-line"
@
click=
"handleEdit"
>
编辑项目
编辑项目
</a-button>
</a-button>
<a-button
type=
"default"
class=
"btn"
preIcon=
"mdi:book-add"
@
click=
"handle
Edi
t"
>
<a-button
type=
"default"
class=
"btn"
preIcon=
"mdi:book-add"
@
click=
"handle
Conten
t"
>
添加合同
添加合同
</a-button>
</a-button>
<a-button
type=
"default"
class=
"btn"
preIcon=
"humbleicons:upload"
@
click=
"handle
Edit
"
>
<a-button
type=
"default"
class=
"btn"
preIcon=
"humbleicons:upload"
@
click=
"handle
Upload
"
>
上传附件
上传附件
</a-button>
</a-button>
<a-button
<a-button
...
@@ -75,10 +75,15 @@
...
@@ -75,10 +75,15 @@
</Tabs>
</Tabs>
</div>
</div>
<projectDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/>
<projectDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/>
<contractDrawer
@
register=
"register2"
@
success=
"handleRegisterSuccess"
/>
<uploadModal
@
register=
"registerModal"
@
close=
"handleNewFile"
/>
</template>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
projectDrawer
from
'./projectDrawer.vue'
;
import
projectDrawer
from
'./projectDrawer.vue'
;
import
uploadModal
from
'./uploadModal.vue'
;
import
{
Tabs
}
from
'ant-design-vue'
;
import
{
Tabs
}
from
'ant-design-vue'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
{
getItem
,
deleteItem
}
from
'@/api/project/project'
;
import
{
getItem
,
deleteItem
}
from
'@/api/project/project'
;
import
{
tabList
}
from
'./project.data'
;
import
{
tabList
}
from
'./project.data'
;
import
{
ref
,
onMounted
,
provide
}
from
'vue'
;
import
{
ref
,
onMounted
,
provide
}
from
'vue'
;
...
@@ -87,21 +92,51 @@
...
@@ -87,21 +92,51 @@
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
router
}
from
'@/router'
;
import
{
router
}
from
'@/router'
;
import
InvestmentPlan
from
'./tabs/InvestmentPlan.vue'
;
import
InvestmentPlan
from
'./tabs/InvestmentPlan.vue'
;
import
performance
from
'./tabs/performance.vue'
;
import
annualPlan
from
'./tabs/annualPlan.vue'
;
import
monthlyPlan
from
'./tabs/monthlyPlan.vue'
;
import
completed
from
'./tabs/completed.vue'
;
import
biddingPlan
from
'./tabs/biddingPlan.vue'
;
import
biddingManagement
from
'./tabs/biddingManagement.vue'
;
import
settlementManagement
from
'./tabs/settlementManagement.vue'
;
import
changeSignature
from
'./tabs/changeSignature.vue'
;
import
potentialSafety
from
'./tabs/potentialSafety.vue'
;
import
safetyEducation
from
'./tabs/safetyEducation.vue'
;
import
contract
from
'./tabs/contract.vue'
;
import
annex
from
'./tabs/annex.vue'
;
import
updateRecords
from
'./tabs/updateRecords.vue'
;
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
[
register2
,
{
openDrawer
:
openDrawer2
}]
=
useDrawer
();
const
[
registerModal
,
{
openModal
:
openModal
}]
=
useModal
();
import
contractDrawer
from
'@/views/contract/contractDrawer.vue'
;
const
tabs
=
{
const
tabs
=
{
InvestmentPlan
,
InvestmentPlan
,
performance
,
annualPlan
,
monthlyPlan
,
completed
,
biddingPlan
,
biddingManagement
,
settlementManagement
,
changeSignature
,
potentialSafety
,
safetyEducation
,
contract
,
annex
,
updateRecords
,
};
};
const
TabPane
=
Tabs
.
TabPane
;
const
TabPane
=
Tabs
.
TabPane
;
const
{
createMessage
}
=
useMessage
();
const
{
createMessage
}
=
useMessage
();
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
let
detail
=
ref
<
any
>
({});
let
detail
=
ref
<
any
>
({});
let
detailId
=
ref
<
any
>
(
0
);
let
detailId
=
ref
<
any
>
(
0
);
const
activeKey
=
ref
(
'1'
);
const
activeKey
=
ref
(
'1'
);
onMounted
(
async
()
=>
{
//
onMounted(async () => {
const
route
=
useRoute
();
const
route
=
useRoute
();
detailId
.
value
=
route
.
query
.
id
;
// 获取名为id的参数
detailId
.
value
=
route
.
query
.
id
;
// 获取名为id的参数
provide
(
'detailId'
,
detailId
.
value
);
provide
(
'detailId'
,
detailId
.
value
);
await
handleDetail
();
handleDetail
();
});
//
});
function
handleEdit
()
{
function
handleEdit
()
{
openDrawer
(
true
,
{
openDrawer
(
true
,
{
...
@@ -109,6 +144,20 @@
...
@@ -109,6 +144,20 @@
isUpdate
:
true
,
isUpdate
:
true
,
});
});
}
}
function
handleContent
()
{
openDrawer2
(
true
,
{
projectId
:
detailId
.
value
,
isUpdate
:
false
,
});
}
function
handleUpload
()
{
openModal
(
true
,
{
projectId
:
detailId
.
value
,
});
}
async
function
handleRegisterSuccess
(
params
:
any
)
{
// handleNew(params);
}
async
function
handleSuccess
(
record
:
any
)
{
async
function
handleSuccess
(
record
:
any
)
{
// detail.value = record;
// detail.value = record;
await
handleDetail
();
await
handleDetail
();
...
...
src/views/project/project.data.ts
View file @
a8044d79
...
@@ -402,66 +402,66 @@ export const tabList = [
...
@@ -402,66 +402,66 @@ export const tabList = [
{
{
key
:
'2'
,
key
:
'2'
,
tab
:
'计划完成情况'
,
tab
:
'计划完成情况'
,
component
:
'
InvestmentPlan
'
,
component
:
'
performance
'
,
},
},
{
{
key
:
'3'
,
key
:
'3'
,
tab
:
'年度资金计划'
,
tab
:
'年度资金计划'
,
component
:
'
Investment
Plan'
,
component
:
'
annual
Plan'
,
},
},
{
{
key
:
'4'
,
key
:
'4'
,
tab
:
'月度资金计划'
,
tab
:
'月度资金计划'
,
component
:
'
Investment
Plan'
,
component
:
'
monthly
Plan'
,
},
},
{
{
key
:
'5'
,
key
:
'5'
,
tab
:
'已竣工验收项目陈欠资金计划'
,
tab
:
'已竣工验收项目陈欠资金计划'
,
component
:
'
InvestmentPlan
'
,
component
:
'
completed
'
,
},
},
{
{
key
:
'6'
,
key
:
'6'
,
tab
:
'招标计划'
,
tab
:
'招标计划'
,
component
:
'
Investment
Plan'
,
component
:
'
bidding
Plan'
,
},
},
{
{
key
:
'7'
,
key
:
'7'
,
tab
:
'招标管理'
,
tab
:
'招标管理'
,
component
:
'
InvestmentPlan
'
,
component
:
'
biddingManagement
'
,
},
},
{
{
key
:
'8'
,
key
:
'8'
,
tab
:
'结算管理'
,
tab
:
'结算管理'
,
component
:
'
InvestmentPlan
'
,
component
:
'
settlementManagement
'
,
},
},
{
{
key
:
'9'
,
key
:
'9'
,
tab
:
'变更签证管理'
,
tab
:
'变更签证管理'
,
component
:
'
InvestmentPlan
'
,
component
:
'
changeSignature
'
,
},
},
{
{
key
:
'10'
,
key
:
'10'
,
tab
:
'安全隐患管理'
,
tab
:
'安全隐患管理'
,
component
:
'
InvestmentPlan
'
,
component
:
'
potentialSafety
'
,
},
},
{
{
key
:
'11'
,
key
:
'11'
,
tab
:
'安全教育培训'
,
tab
:
'安全教育培训'
,
component
:
'
InvestmentPla
n'
,
component
:
'
safetyEducatio
n'
,
},
},
{
{
key
:
'12'
,
key
:
'12'
,
tab
:
'合同管理'
,
tab
:
'合同管理'
,
component
:
'
InvestmentPlan
'
,
component
:
'
contract
'
,
},
},
{
{
key
:
'13'
,
key
:
'13'
,
tab
:
'附件记录'
,
tab
:
'附件记录'
,
component
:
'
InvestmentPlan
'
,
component
:
'
annex
'
,
},
},
{
{
key
:
'14'
,
key
:
'14'
,
tab
:
'更新记录'
,
tab
:
'更新记录'
,
component
:
'
InvestmentPlan
'
,
component
:
'
updateRecords
'
,
},
},
];
];
src/views/project/tabs/Article.vue
deleted
100644 → 0
View file @
fc4bcbe2
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
toolbar
>
<a-button
type=
"primary"
preIcon=
"mdi:plus"
@
click=
"handleCreate"
>
新增项目
</a-button>
</
template
>
<
template
#
bodyCell=
"{ column, record }"
>
<template
v-if=
"column.key === 'projectName'"
>
<Tag
color=
"warning"
v-if=
"record.isReserveProject == 'true'"
>
储备
</Tag>
{{
record
.
projectName
}}
</
template
>
<
template
v-if=
"column.key === 'constructionMode'"
>
<Tag
color=
"processing"
>
{{
record
.
constructionMode
}}
</Tag>
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record, false),
},
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</
template
>
</template>
</BasicTable>
<projectDrawer
@
register=
"registerDrawer"
@
success=
"handleSuccess"
/>
</template>
<
script
lang=
"ts"
setup
>
import
{
Tag
}
from
'ant-design-vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
,
deleteItem
,
getItem
}
from
'@/api/project/project'
;
import
{
columns
,
searchFormSchema
}
from
'../project.data'
;
import
{
Row
,
Col
}
from
'ant-design-vue'
;
import
projectDrawer
from
'../projectDrawer.vue'
;
import
{
useDrawer
}
from
'@/components/Drawer'
;
import
{
useRouter
}
from
'vue-router'
;
const
{
push
}
=
useRouter
();
const
[
registerDrawer
,
{
openDrawer
}]
=
useDrawer
();
const
prefixCls
=
'list-basic'
;
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleCreate
()
{
openDrawer
(
true
,
{
isUpdate
:
false
,
});
}
function
handleDetail
(
record
:
any
)
{
push
({
path
:
'/project/detail'
,
query
:
{
id
:
record
.
id
,
},
});
}
async
function
handleEdit
(
record
:
Recordable
,
disabled
:
boolean
)
{
// let res = await getItem({ id: record.id });
// console.log(res);
// res[0]
openDrawer
(
true
,
{
record
,
isUpdate
:
true
,
disabled
,
});
}
function
handleDelete
(
record
:
Recordable
)
{
deleteItem
({
id
:
record
.
id
});
reload
();
}
function
handleSuccess
()
{
reload
();
}
</
script
>
<
style
lang=
"less"
scoped
>
.list-basic {
&__top {
height: 150px;
padding: 35px;
background-color: @component-background;
text-align: center;
position: relative;
margin: 16px;
margin-bottom: 0;
&-img {
width: 58px;
height: 54px;
position: absolute;
left: 10%;
}
&-col {
// &:not(:last-child) {
// border-right: 1px dashed @border-color-base;
// }
.title {
margin-bottom: 12px;
color: #5d5d5d;
font-size: 18px;
text-align: center;
line-height: 22px;
}
.content {
display: flex;
align-items: flex-end;
width: 100%;
justify-content: center;
}
p {
margin: 0;
color: @text-color-base;
font-size: 40px;
color: #225bde;
font-family: DINAlternate;
font-weight: 700;
margin-bottom: -7px;
}
span {
text-align: center;
display: flex;
align-items: flex-end;
justify-content: center;
color: #878787;
}
}
}
&__list {
&-header {
color: #333;
font-weight: bold;
}
}
&__content {
background-color: @component-background;
.list {
position: relative;
}
.icon {
font-size: 40px !important;
}
.extra {
position: absolute;
top: 20px;
right: 15px;
color: @primary-color;
font-weight: normal;
cursor: pointer;
}
.description {
display: inline-block;
width: 40%;
}
.info {
display: inline-block;
width: 30%;
text-align: center;
div {
display: inline-block;
padding: 0 20px;
span {
display: block;
}
}
}
.progress {
display: inline-block;
width: 15%;
vertical-align: top;
}
}
}
</
style
>
src/views/project/tabs/InvestmentPlan.vue
View file @
a8044d79
...
@@ -9,7 +9,10 @@
...
@@ -9,7 +9,10 @@
:actions=
"[
:actions=
"[
{
{
label: '查看详情',
label: '查看详情',
onClick: handleDetail.bind(null, record),
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
},
},
]"
]"
/>
/>
...
@@ -21,17 +24,20 @@
...
@@ -21,17 +24,20 @@
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
inject
}
from
'vue'
;
import
{
inject
}
from
'vue'
;
import
{
getListByPage
}
from
'@/api/project/project'
;
import
{
getEngineeringList
}
from
'@/api/project/engineeringProject'
;
import
{
router
}
from
'@/router'
;
let
detailId
=
inject
(
'detailId'
);
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
get
ListByPage
,
api
:
get
EngineeringList
,
columns
,
columns
,
formConfig
:
{
formConfig
:
{
labelWidth
:
120
,
labelWidth
:
120
,
schemas
:
searchFormSchema
,
schemas
:
searchFormSchema
,
},
},
searchInfo
:
{},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
useSearchForm
:
true
,
showTableSetting
:
false
,
showTableSetting
:
false
,
bordered
:
true
,
bordered
:
true
,
...
@@ -44,4 +50,31 @@
...
@@ -44,4 +50,31 @@
fixed
:
undefined
,
fixed
:
undefined
,
},
},
});
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
if
(
record
.
planType
===
'工程'
)
{
router
.
push
({
path
:
'/engineeringProject/engineeringEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
else
if
(
record
.
planType
===
'承建'
)
{
router
.
push
({
path
:
'/engineeringProject/constructionEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
else
if
(
record
.
planType
===
'储备'
)
{
router
.
push
({
path
:
'/engineeringProject/reserveEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
}
</
script
>
</
script
>
src/views/project/tabs/annex.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '下载',
onClick: handleDown.bind(null, record),
},
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
ifShow: (_action) => {
return record.reviewStatus == null;
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
annexColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getAnnexList
,
deleteAnnex
}
from
'@/api/project/project'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getAnnexList
,
columns
:
annexColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
proId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDown
(
record
:
Recordable
)
{
window
.
open
(
record
.
url
);
}
function
handleDelete
(
record
:
Recordable
)
{
deleteAnnex
({
id
:
record
.
id
});
}
</
script
>
src/views/project/tabs/annualPlan.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
annualPlanColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
inject
}
from
'vue'
;
import
{
getAnnualPlanList
}
from
'@/api/project/annualPlan'
;
import
{
router
}
from
'@/router'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getAnnualPlanList
,
columns
:
annualPlanColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/annualPlan/annualPlanEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/biddingManagement.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
biddingManagementColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/biddingManagement'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
:
biddingManagementColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/biddingManagement/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/biddingPlan.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
biddingPlanColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/biddingPlan'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
:
biddingPlanColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/biddingPlan/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/changeSignature.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
changeSignatureColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getSettlementManageList
}
from
'@/api/changeSignatrue/changeSignatrue'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getSettlementManageList
,
columns
:
changeSignatureColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/changeSignature/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/completed.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
completedColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
inject
}
from
'vue'
;
import
{
getCompletedList
}
from
'@/api/project/completed'
;
import
{
router
}
from
'@/router'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getCompletedList
,
columns
:
completedColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/completed/completedEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/contract.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
contractColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getContractListPage
}
from
'@/api/contract/contract'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getContractListPage
,
columns
:
contractColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/contract/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/data.ts
View file @
a8044d79
This diff is collapsed.
Click to expand it.
src/views/project/tabs/monthlyPlan.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.reviewStatus == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
monthlyPlanColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
inject
}
from
'vue'
;
import
{
getAnnualPlanList
}
from
'@/api/project/annualPlan'
;
import
{
router
}
from
'@/router'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getAnnualPlanList
,
columns
:
monthlyPlanColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/monthlyPlan/monthlyPlanEdit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/performance.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'completionResult'"
>
<Tag
color=
"processing"
>
{{
record
.
completionResult
==
1
?
'已审核'
:
'未审核'
}}
</Tag>
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
performanceColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/performance'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
:
performanceColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/performance/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/potentialSafety.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
potentialSafetyColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/saftyManage'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
:
potentialSafetyColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/potentialSafety/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/safetyEducation.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
safetyEducationColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getListByPage
}
from
'@/api/project/safetyEducation'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getListByPage
,
columns
:
safetyEducationColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/safetyEducation/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/settlementManagement.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicTable
@
register=
"registerTable"
>
<template
#
bodyCell=
"
{ column, record, index }">
<template
v-if=
"column.key === 'serialNumber'"
>
{{
index
+
1
}}
</
template
>
<
template
v-if=
"column.key === 'tenderYear'"
>
{{
record
.
tenderYear
+
'年'
+
record
.
biddingQuarter
+
'季度'
}}
</
template
>
<
template
v-if=
"column.key === 'action'"
>
<TableAction
:actions=
"[
{
label: '查看详情',
onClick: handleDetail.bind(null, record, 1),
ifShow: (_action) => {
return record.completionResult == '1';
},
},
]"
/>
</
template
>
</template>
</BasicTable>
</template>
<
script
lang=
"ts"
setup
>
import
{
settlementManagementColumns
,
searchFormSchema
}
from
'./data'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'@/components/Table'
;
import
{
getSettlementManageList
}
from
'@/api/project/settlementManage'
;
import
{
inject
}
from
'vue'
;
import
{
router
}
from
'@/router'
;
import
{
Tag
}
from
'ant-design-vue'
;
let
detailId
=
inject
(
'detailId'
);
console
.
log
(
'detailId'
,
detailId
);
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
getSettlementManageList
,
columns
:
settlementManagementColumns
,
formConfig
:
{
labelWidth
:
120
,
schemas
:
searchFormSchema
,
},
searchInfo
:
{
projectId
:
detailId
,
},
useSearchForm
:
true
,
showTableSetting
:
false
,
bordered
:
true
,
showIndexColumn
:
false
,
actionColumn
:
{
width
:
200
,
title
:
'操作'
,
dataIndex
:
'action'
,
// slots: { customRender: 'action' },
fixed
:
undefined
,
},
});
function
handleDetail
(
record
:
Recordable
,
disabled
:
number
)
{
router
.
push
({
path
:
'/settlementManagement/edit'
,
query
:
{
id
:
record
.
id
,
disabled
:
String
(
disabled
),
},
});
}
</
script
>
src/views/project/tabs/updateRecords.vue
0 → 100644
View file @
a8044d79
<
template
>
<pageCard>
<Timeline>
<Timeline
.
Item
></Timeline
.Item
>
<Timeline
.
Item
></Timeline
.Item
>
<Timeline
.
Item
></Timeline
.Item
>
<Timeline
.
Item
></Timeline
.Item
>
</Timeline>
</pageCard>
</
template
>
<
script
lang=
"ts"
setup
>
import
PageCard
from
'@/components/Page/src/PageCard.vue'
;
import
{
Timeline
}
from
'ant-design-vue'
;
</
script
>
src/views/project/uploadModal.vue
0 → 100644
View file @
a8044d79
<
template
>
<BasicModal
v-bind=
"$attrs"
@
register=
"register"
title=
"上传附件"
:minHeight=
"30"
okText=
"保存"
@
ok=
"handleSubmit"
@
visible-change=
"handleVisibleChange"
>
<BasicForm
@
register=
"registerForm"
:model=
"modelRef"
/>
</BasicModal>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
ref
,
nextTick
,
reactive
}
from
'vue'
;
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicForm
,
FormSchema
,
useForm
}
from
'@/components/Form'
;
import
{
uploadApi
}
from
'@/api/sys/upload'
;
import
{
AnnexAdd
}
from
'@/api/project/project'
;
const
projectId
=
ref
(
0
);
const
schemas
:
FormSchema
[]
=
[
{
field
:
'url'
,
component
:
'Upload'
,
label
:
'上传附件'
,
required
:
true
,
componentProps
:
{
api
:
uploadApi
,
resultField
:
'data.data.fullPath'
,
accept
:
[
'rar'
,
'zip'
,
'doc'
,
'docx'
,
'pdf'
],
multiple
:
false
,
maxSize
:
20
,
maxNumber
:
1
,
name
:
'multipartFile'
,
},
colProps
:
{
span
:
24
,
},
},
{
field
:
'remarks'
,
label
:
'备注内容'
,
required
:
true
,
component
:
'InputTextArea'
,
componentProps
:
{
maxlength
:
300
,
showCount
:
true
,
},
colProps
:
{
span
:
24
},
},
];
const
props
=
defineProps
({
userData
:
{
type
:
Object
},
});
const
emit
=
defineEmits
([
'close'
]);
const
modelRef
=
ref
({});
const
[
registerForm
,
{
getFieldsValue
,
validate
,
// // setFieldsValue,
// // setProps
},
]
=
useForm
({
labelWidth
:
120
,
schemas
,
showActionButtonGroup
:
false
,
actionColOptions
:
{
span
:
24
,
},
});
const
[
register
,
{
closeModal
}]
=
useModalInner
((
data
)
=>
{
data
&&
onDataReceive
(
data
);
});
function
onDataReceive
(
data
)
{
console
.
log
(
'Data Received'
,
data
);
projectId
.
value
=
data
.
projectId
;
console
.
log
(
projectId
.
value
);
}
function
handleVisibleChange
(
v
)
{
v
&&
props
.
userData
&&
nextTick
(()
=>
onDataReceive
(
props
.
userData
));
}
function
handleSubmit
()
{
validate
().
then
(
async
()
=>
{
const
value
=
getFieldsValue
();
let
url
:
String
=
value
.
url
[
0
];
let
res
=
await
AnnexAdd
({
url
,
remark
:
value
.
remarks
,
proId
:
projectId
.
value
,
});
// console.log(res);
emit
(
'close'
);
closeModal
();
});
}
</
script
>
src/views/safetyEducation/data.ts
View file @
a8044d79
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
export
const
formSchema
:
FormSchema
[]
=
[
export
const
formSchema
:
FormSchema
[]
=
[
{
{
field
:
'fillingPeriod'
,
field
:
'fillingPeriod'
,
labelWidth
:
'140px'
,
labelWidth
:
'140px'
,
label
:
'填报周期'
,
label
:
'填报周期'
,
required
:
true
,
required
:
true
,
component
:
'DatePicker'
,
component
:
'DatePicker'
,
componentProps
:
{
componentProps
:
{
placeholder
:
'年份'
,
placeholder
:
'年份'
,
picker
:
'year'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
style
:
{
width
:
'100%'
,
width
:
'100%'
,
},
},
},
},
{
field
:
'trainingTime'
,
labelWidth
:
'140px'
,
label
:
'培训时间'
,
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择培训时间'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
},
},
{
label
:
'培训主题'
,
labelWidth
:
'140px'
,
field
:
'trainingTheme'
,
required
:
true
,
component
:
'Input'
,
},
{
label
:
'培训类型'
,
labelWidth
:
'140px'
,
field
:
'trainingType'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'类型一'
,
value
:
'类型一'
,
},
},
},
{
{
label
:
'类型二'
,
field
:
'trainingTime'
,
value
:
'类型二'
,
labelWidth
:
'140px'
,
label
:
'培训时间'
,
required
:
true
,
component
:
'DatePicker'
,
componentProps
:
{
placeholder
:
'选择培训时间'
,
style
:
{
width
:
'100%'
},
valueFormat
:
'YYYY-MM-DD'
,
format
:
'YYYY-MM-DD'
,
},
},
},
],
{
},
label
:
'培训主题'
,
},
labelWidth
:
'140px'
,
{
field
:
'trainingTheme'
,
label
:
'培训形式'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Input'
,
field
:
'trainingFormat'
,
},
required
:
true
,
{
component
:
'Input'
,
label
:
'培训类型'
,
},
labelWidth
:
'140px'
,
{
field
:
'trainingType'
,
field
:
'trainingMeet'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Select'
,
label
:
'培训会议'
,
componentProps
:
{
required
:
true
,
options
:
[
component
:
'Input'
,
{
},
label
:
'类型一'
,
{
value
:
'类型一'
,
field
:
'trainers'
,
},
labelWidth
:
'140px'
,
{
label
:
'培训人员'
,
label
:
'类型二'
,
required
:
true
,
value
:
'类型二'
,
component
:
'Select'
,
},
componentProps
:
{
],
options
:
[
{
label
:
'人员一'
,
value
:
'人员一'
,
},
},
},
{
{
label
:
'人员二'
,
label
:
'培训形式'
,
value
:
'人员二'
,
labelWidth
:
'140px'
,
field
:
'trainingFormat'
,
required
:
true
,
component
:
'Input'
},
{
field
:
'trainingMeet'
,
labelWidth
:
'140px'
,
label
:
'培训会议'
,
required
:
true
,
component
:
'Input'
},
{
field
:
'trainers'
,
labelWidth
:
'140px'
,
label
:
'培训人员'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'人员一'
,
value
:
'人员一'
,
},
{
label
:
'人员二'
,
value
:
'人员二'
,
},
],
},
},
},
],
{
},
label
:
'学时(合计)'
,
},
labelWidth
:
'140px'
,
{
field
:
'knowledge'
,
label
:
'学时(合计)'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Input'
,
field
:
'knowledge'
,
},
required
:
true
,
{
component
:
'Input'
,
label
:
'人数(人)'
,
},
labelWidth
:
'140px'
,
{
field
:
'numberOfPeople'
,
label
:
'人数(人)'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Input'
,
field
:
'numberOfPeople'
,
},
required
:
true
,
{
component
:
'Input'
,
label
:
'备注'
,
},
labelWidth
:
'140px'
,
{
field
:
'remark'
,
label
:
'备注'
,
required
:
true
,
labelWidth
:
'140px'
,
component
:
'Input'
,
field
:
'remark'
,
},
required
:
true
,
component
:
'Input'
,
},
];
];
export
const
columns
:
BasicColumn
[]
=
[
export
const
columns
:
BasicColumn
[]
=
[
{
{
title
:
'填报周期'
,
title
:
'填报周期'
,
dataIndex
:
'fillingPeriod'
,
dataIndex
:
'fillingPeriod'
,
width
:
150
,
width
:
150
,
},
},
{
{
title
:
'培训时间'
,
title
:
'培训时间'
,
dataIndex
:
'trainingTime'
,
dataIndex
:
'trainingTime'
,
width
:
150
,
width
:
150
,
},
},
{
{
title
:
'培训主题'
,
title
:
'培训主题'
,
dataIndex
:
'trainingTheme'
,
dataIndex
:
'trainingTheme'
,
width
:
150
,
width
:
150
,
},
},
{
{
title
:
'培训类型'
,
title
:
'培训类型'
,
dataIndex
:
'trainingType'
,
dataIndex
:
'trainingType'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'培训形式'
,
title
:
'培训形式'
,
dataIndex
:
'trainingFormat'
,
dataIndex
:
'trainingFormat'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'计划会议'
,
title
:
'计划会议'
,
dataIndex
:
'trainingMeet'
,
dataIndex
:
'trainingMeet'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'培训人员'
,
title
:
'培训人员'
,
dataIndex
:
'trainers'
,
dataIndex
:
'trainers'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'学识(合计)'
,
title
:
'学识(合计)'
,
dataIndex
:
'knowledge'
,
dataIndex
:
'knowledge'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'人数'
,
title
:
'人数'
,
dataIndex
:
'numberOfPeople'
,
dataIndex
:
'numberOfPeople'
,
width
:
180
,
width
:
180
,
},
},
{
{
title
:
'备注'
,
title
:
'备注'
,
dataIndex
:
'remark'
,
dataIndex
:
'remark'
,
width
:
180
,
width
:
180
,
},
},
];
];
export
const
searchFormSchema
:
FormSchema
[]
=
[
export
const
searchFormSchema
:
FormSchema
[]
=
[
{
{
field
:
'fillingPeriod'
,
field
:
'fillingPeriod'
,
label
:
''
,
label
:
''
,
component
:
'DatePicker'
,
component
:
'DatePicker'
,
componentProps
:
{
componentProps
:
{
placeholder
:
'年份'
,
placeholder
:
'年份'
,
picker
:
'year'
,
picker
:
'year'
,
valueFormat
:
'YYYY'
,
valueFormat
:
'YYYY'
,
format
:
'YYYY'
,
format
:
'YYYY'
,
style
:
{
style
:
{
width
:
'100%'
,
width
:
'100%'
,
},
},
},
},
colProps
:
{
span
:
4
},
colProps
:
{
span
:
4
},
},
},
{
{
field
:
'trainers'
,
field
:
'trainers'
,
label
:
''
,
label
:
''
,
component
:
'Select'
,
component
:
'Select'
,
componentProps
:
{
componentProps
:
{
options
:
[
options
:
[
{
label
:
'人员一'
,
value
:
'人员一'
},
{
label
:
'人员一'
,
value
:
'人员一'
},
{
label
:
'人员二'
,
value
:
'人员二'
},
{
label
:
'人员二'
,
value
:
'人员二'
},
],
],
placeholder
:
'培训人员'
,
placeholder
:
'培训人员'
,
},
},
colProps
:
{
span
:
4
},
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