Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈智峰
jinfa-platform
Commits
6a7825aa
Commit
6a7825aa
authored
May 20, 2021
by
Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 会员考评页面
parent
95508cac
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
1626 additions
and
161 deletions
+1626
-161
memberRoute.ts
config/routes/memberRoute.ts
+67
-0
index.tsx
src/components/ExamVerify/index.tsx
+104
-0
schema.tsx
src/components/ExamVerify/schema.tsx
+51
-0
createRichText.tsx
src/components/RangeTime/createRichText.tsx
+46
-0
UploadFiles.less
src/components/UploadFiles/UploadFiles.less
+6
-5
UploadFiles.tsx
src/components/UploadFiles/UploadFiles.tsx
+22
-7
index.tsx
src/pages/member/components/CustomizeQueryList/index.tsx
+3
-5
detail.tsx
src/pages/member/memberEvaluate/allQuery/detail.tsx
+45
-51
index.tsx
src/pages/member/memberEvaluate/allQuery/index.tsx
+6
-3
index.tsx
...r/memberEvaluate/components/FormilySelectMember/index.tsx
+18
-15
add.less
src/pages/member/memberEvaluate/createEvaluate/add.less
+5
-1
add.tsx
src/pages/member/memberEvaluate/createEvaluate/add.tsx
+13
-14
index.tsx
src/pages/member/memberEvaluate/createEvaluate/index.tsx
+8
-5
useFetchInfo.tsx
src/pages/member/memberEvaluate/hooks/useFetchInfo.tsx
+65
-0
useGetDetailCommon.tsx
src/pages/member/memberEvaluate/hooks/useGetDetailCommon.tsx
+123
-0
useModal.tsx
src/pages/member/memberEvaluate/hooks/useModal.tsx
+20
-52
add.tsx
src/pages/member/memberEvaluate/schema/add.tsx
+4
-3
detail.less
src/pages/member/memberEvaluate/tobeEvaluate/detail.less
+20
-0
detail.tsx
src/pages/member/memberEvaluate/tobeEvaluate/detail.tsx
+125
-0
index.tsx
src/pages/member/memberEvaluate/tobeEvaluate/index.tsx
+49
-0
schema.tsx
src/pages/member/memberEvaluate/tobeEvaluate/schema.tsx
+178
-0
detail.tsx
src/pages/member/memberEvaluate/tobeInformed/detail.tsx
+52
-0
index.tsx
src/pages/member/memberEvaluate/tobeInformed/index.tsx
+51
-0
detail.tsx
src/pages/member/memberEvaluate/tobeReviewI/detail.tsx
+63
-0
index.tsx
src/pages/member/memberEvaluate/tobeReviewI/index.tsx
+51
-0
detail.tsx
src/pages/member/memberEvaluate/tobeReviewII/detail.tsx
+63
-0
index.tsx
src/pages/member/memberEvaluate/tobeReviewII/index.tsx
+51
-0
detail.less
...pages/member/memberEvaluate/tobeSubmitSummary/detail.less
+7
-0
detail.tsx
src/pages/member/memberEvaluate/tobeSubmitSummary/detail.tsx
+151
-0
index.tsx
src/pages/member/memberEvaluate/tobeSubmitSummary/index.tsx
+52
-0
schema.tsx
src/pages/member/memberEvaluate/tobeSubmitSummary/schema.tsx
+107
-0
No files found.
config/routes/memberRoute.ts
View file @
6a7825aa
...
...
@@ -327,6 +327,7 @@ const MemberRoute: RouterChild = {
path
:
'/memberCenter/memberAbility/memberEvaluate/detail'
,
name
:
'会员考评详情'
,
component
:
'@/pages/member/memberEvaluate/allQuery/detail'
,
hideInMenu
:
true
,
noMargin
:
true
,
},
{
...
...
@@ -338,7 +339,73 @@ const MemberRoute: RouterChild = {
path
:
'/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add'
,
name
:
'新建考评单'
,
component
:
'@/pages/member/memberEvaluate/createEvaluate/add'
,
hideInMenu
:
true
,
},
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeEvaluate'
,
name
:
'待考评打分'
,
component
:
'@/pages/member/memberEvaluate/tobeEvaluate/index'
,
},
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeEvaluate/detail'
,
name
:
'待考评打分详情'
,
component
:
'@/pages/member/memberEvaluate/tobeEvaluate/detail'
,
noMargin
:
true
,
hideInMenu
:
true
,
},
// 待提交汇总考评结果
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeSubmitSummary'
,
name
:
'待提交汇总考评结果'
,
component
:
'@/pages/member/memberEvaluate/tobeSubmitSummary/index'
,
},
// 待提交汇总考评结果详情
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeSubmitSummary/detail'
,
name
:
'待提交汇总考评结果详情'
,
component
:
'@/pages/member/memberEvaluate/tobeSubmitSummary/detail'
,
noMargin
:
true
,
hideInMenu
:
true
,
},
// 待审核考评结果(一级)
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeReviewI'
,
name
:
'待审核考评结果(一级)'
,
component
:
'@/pages/member/memberEvaluate/tobeReviewI/index'
,
},
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeReviewI/detail'
,
name
:
'待审核考评结果(一级)'
,
component
:
'@/pages/member/memberEvaluate/tobeReviewI/detail'
,
noMargin
:
true
,
hideInMenu
:
true
,
},
// 待审核考评结果(二级)
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeReviewII'
,
name
:
'待审核考评结果(二级)'
,
component
:
'@/pages/member/memberEvaluate/tobeReviewII/index'
,
},
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeReviewII/detail'
,
name
:
'待审核考评结果(二级)详情'
,
component
:
'@/pages/member/memberEvaluate/tobeReviewII/detail'
,
hideInMenu
:
true
,
noMargin
:
true
,
},
// 待通报考评结果
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeInformed'
,
name
:
'待通报考评结果'
,
component
:
'@/pages/member/memberEvaluate/tobeInformed/index'
,
},
{
path
:
'/memberCenter/memberAbility/memberEvaluate/tobeInformed/detail'
,
name
:
'待通报考评结果详情'
,
component
:
'@/pages/member/memberEvaluate/tobeInformed/detail'
,
hideInMenu
:
true
,
noMargin
:
true
,
}
]
},
]
...
...
src/components/ExamVerify/index.tsx
0 → 100644
View file @
6a7825aa
/**
* 详情页审核
*/
import
React
,
{
useEffect
}
from
'react'
;
import
{
createAsyncFormActions
,
createFormActions
,
ISchema
,
FormEffectHooks
}
from
'@formily/antd'
;
import
{
Modal
}
from
'antd'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
{
defaultSchema
}
from
'./schema'
;
const
formActions
=
createFormActions
();
const
{
onFieldValueChange$
}
=
FormEffectHooks
interface
Iprops
{
/**
* 显示/隐藏
*/
visible
:
boolean
,
/**
* 模态框标题
*/
title
:
string
,
/**
* form表单schema, 先写死
*/
// schema?: ISchema,
/**
* schemaComponent
*/
// components?: { [key: string]: any },
/**
* value, 表单值
*/
value
:
{
[
key
:
string
]:
any
},
// expressionScope: any,
// effects: () =>
/**
* 提交
*/
onSubmit
:
(
value
:
{[
key
:
string
]:
any
})
=>
void
,
onCancel
:
()
=>
void
}
export
type
SubmitDataTypes
=
{
/**
* @params 0 => 审核不通过, 1 => 审核通过
*/
status
:
0
|
1
,
/**
* 当审核不通过时,才有审核不通过原因填写
*/
reason
?:
string
}
const
ExamVerify
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
title
,
visible
,
onSubmit
,
onCancel
,
value
}
=
props
;
const
handleOk
=
()
=>
{
formActions
.
submit
()
}
const
handleFormSubmit
=
(
values
:
SubmitDataTypes
)
=>
{
onSubmit
?.(
values
)
}
const
handleCancel
=
()
=>
{
onCancel
?.();
}
useEffect
(()
=>
{
if
(
!
visible
)
{
return
;
}
if
(
value
.
status
===
0
)
{
formActions
.
setFieldState
(
'status'
,
state
=>
{
state
.
editable
=
false
;
})
}
},
[
visible
,
value
])
return
(
<
Modal
title=
{
title
}
visible=
{
visible
}
onOk=
{
handleOk
}
onCancel=
{
handleCancel
}
>
<
NiceForm
value=
{
value
}
actions=
{
formActions
}
schema=
{
defaultSchema
}
onSubmit=
{
handleFormSubmit
}
/>
</
Modal
>
)
}
ExamVerify
.
defaultProps
=
{
// schema: defaultSchema,
value
:
{},
}
export
default
ExamVerify
src/components/ExamVerify/schema.tsx
0 → 100644
View file @
6a7825aa
import
{
ISchema
}
from
'@formily/antd'
;
export
const
defaultSchema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
layout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
labelCol
:
5
,
full
:
true
,
labelAlign
:
'left'
},
properties
:
{
status
:
{
title
:
'审核状态'
,
type
:
'string'
,
'x-component'
:
'RadioGroup'
,
enum
:
[
{
label
:
'审核通过'
,
value
:
1
},
{
label
:
'审核不通过'
,
value
:
0
},
],
'x-rules'
:
[
{
required
:
true
,
message
:
'请选择审核状态'
,
},
],
'x-linkages'
:
[
{
type
:
'value:visible'
,
target
:
'*(reason)'
,
condition
:
'{{$value === 0}}'
},
]
},
reason
:
{
title
:
"不通过原因"
,
type
:
'textarea'
,
'x-rules'
:
[
{
required
:
true
,
message
:
'请填写审核不通过原因'
,
},
],
},
}
}
}
}
src/components/RangeTime/createRichText.tsx
0 → 100644
View file @
6a7825aa
import
React
from
"react"
import
{
Tooltip
}
from
'antd'
;
import
{
QuestionCircleOutlined
}
from
"@ant-design/icons"
const
createRichTextUtils
=
()
=>
{
return
{
text
(...
args
)
{
return
React
.
createElement
(
'span'
,
{},
...
args
)
},
link
(
text
:
string
,
href
:
string
,
target
:
"_blank"
|
"_self"
|
"_parent"
|
"_top"
)
{
return
React
.
createElement
(
'a'
,
{
href
,
target
},
text
)
},
gray
(
text
:
string
)
{
return
React
.
createElement
(
'span'
,
{
style
:
{
color
:
'gray'
,
margin
:
'0 3px'
}
},
text
)
},
red
(
text
:
string
)
{
return
React
.
createElement
(
'span'
,
{
style
:
{
color
:
'red'
,
margin
:
'0 3px'
}
},
text
)
},
help
(
text
:
string
,
offset
=
3
)
{
return
React
.
createElement
(
Tooltip
,
{
title
:
text
},
<
QuestionCircleOutlined
style=
{
{
margin
:
'0 3px'
,
cursor
:
'default'
,
marginLeft
:
offset
}
}
/>
)
},
tips
(
text
:
string
,
tips
:
string
)
{
return
React
.
createElement
(
Tooltip
,
{
title
:
tips
},
<
span
style=
{
{
margin
:
'0 3px'
,
cursor
:
'default'
}
}
>
{
text
}
</
span
>
)
}
}
}
export
default
createRichTextUtils
src/components/UploadFiles/UploadFiles.less
View file @
6a7825aa
...
...
@@ -5,10 +5,11 @@
.renderFileItemContainer {
position: relative;
padding:
0 @padding-xs
;
padding:
4px 0
;
display: flex;
flex-direction: column;
justify-content: center;
cursor: pointer;
.uploadProgress {
position: absolute;
...
...
@@ -30,10 +31,10 @@
margin-right: @margin-sm;
}
}
&:hover {
background-color: @secondary-color;
color: @main-color;
}
//
&:hover {
//
background-color: @secondary-color;
//
color: @main-color;
//
}
}
}
...
...
src/components/UploadFiles/UploadFiles.tsx
View file @
6a7825aa
...
...
@@ -11,22 +11,36 @@ type PickProps = "headers" | "action" | "accept" | "beforeUpload" | "onChange" |
interface
PickUploadProps
extends
Pick
<
UploadProps
,
PickProps
>
{
children
?:
React
.
ReactElement
,
customizeItemRender
?:
((
files
:
UploadFile
[],
handleRemove
:
(
fileItem
:
UploadFile
)
=>
void
)
=>
React
.
ReactNode
)
|
null
,
onRemove
?:
((
fileItem
:
UploadFile
)
=>
void
)
|
null
,
disable
?:
boolean
,
mode
?:
"text"
|
"link"
|
"ghost"
|
"default"
|
"primary"
|
"dashed"
,
buttonText
?:
string
,
fileContainerClassName
?:
string
customizeItemRender
?:
((
files
:
UploadFile
[],
handleRemove
:
(
fileItem
:
UploadFile
)
=>
void
)
=>
React
.
ReactNode
)
|
null
,
onRemove
?:
((
fileItem
:
UploadFile
)
=>
void
)
|
null
,
}
const
UploadFiles
:
React
.
FC
<
PickUploadProps
>
=
(
props
:
PickUploadProps
)
=>
{
const
{
headers
,
action
,
accept
,
beforeUpload
,
onChange
,
children
,
customizeItemRender
,
onRemove
,
disable
,
mode
,
buttonText
}
=
props
;
const
{
headers
,
action
,
accept
,
beforeUpload
,
onChange
,
children
,
customizeItemRender
,
onRemove
,
disable
,
mode
,
buttonText
,
fileContainerClassName
}
=
props
;
const
hasFileListProps
=
"fileList"
in
props
;
const
[
files
,
setFiles
]
=
useState
<
UploadFile
[]
>
([]);
const
renderFiles
=
hasFileListProps
?
props
.
fileList
:
files
;
const
filesContainerCs
=
cx
({
[
styles
.
fileEmpty
]:
renderFiles
.
length
===
0
,
},
styles
.
renderFileContainer
)
},
styles
.
renderFileContainer
,
fileContainerClassName
)
const
uploadProps
=
{
name
:
'file'
,
...
...
@@ -108,8 +122,8 @@ const UploadFiles: React.FC<PickUploadProps> = (props: PickUploadProps) => {
<
Upload
{
...
uploadProps
}
>
{
children
||
(
<
Button
type=
{
mode
}
>
<
CloudUploadOutlined
/>
{
buttonText
}
<
Button
type=
{
mode
}
icon=
{
<
CloudUploadOutlined
/>
}
>
{
buttonText
}
</
Button
>
)
}
...
...
@@ -130,7 +144,8 @@ UploadFiles.defaultProps = {
onRemove
:
null
,
disable
:
false
,
mode
:
'default'
,
buttonText
:
'上传文件'
buttonText
:
'上传文件'
,
fileContainerClassName
:
''
// fileList: []
}
...
...
src/pages/member/components/CustomizeQueryList/index.tsx
View file @
6a7825aa
...
...
@@ -3,11 +3,9 @@
*/
import
React
,
{
useRef
}
from
'react'
;
import
{
Card
}
from
'antd'
import
{
StandardTable
}
from
'god'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
{
createFormActions
,
ISchema
}
from
'@formily/antd'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
interface
Iprops
{
...
...
@@ -20,7 +18,7 @@ interface Iprops {
const
formActions
=
createFormActions
();
const
Customize
Column
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
Customize
QueryList
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
columns
,
schema
,
fetchListData
,
expressionScope
,
effects
}
=
props
;
const
ref
=
useRef
<
any
>
({});
...
...
@@ -51,9 +49,9 @@ const CustomizeColumn: React.FC<Iprops> = (props: Iprops) => {
)
}
Customize
Column
.
defaultProps
=
{
Customize
QueryList
.
defaultProps
=
{
expressionScope
:
{},
effects
:
null
}
export
default
Customize
Column
export
default
Customize
QueryList
src/pages/member/memberEvaluate/allQuery/detail.tsx
View file @
6a7825aa
...
...
@@ -4,6 +4,7 @@ import AnchorPage from '@/layouts/AnchorPage';
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
const
{
Step
}
=
Steps
;
...
...
@@ -30,47 +31,47 @@ const EvaluateDetail = () => {
name
:
'流转记录'
}
]
const
columnList
=
{
col1
:
[
{
title
:
'考察主题
'
,
dataIndex
:
'theme'
,
},
{
title
:
'会员名称'
,
dataIndex
:
'memberName'
,
},
{
title
:
'考察类型
'
,
dataIndex
:
'type'
}
],
col2
:
[
{
title
:
'考察日期
'
,
dataIndex
:
'date'
},
{
title
:
'考察代表'
,
dataIndex
:
'present'
}
,
{
title
:
"考察原因"
,
dataIndex
:
'reason'
}
]
,
col3
:
[
{
title
:
'考察要求附件'
,
dataIndex
:
'file'
,
render
:
(
value
?)
=>
{
return
(
<
div
>
132
</
div
>
)
}
},
]
}
const
columnList
=
[
{
title
:
'考聘工单号'
,
value
:
'theme
'
,
},
{
title
:
'会员名称'
,
value
:
'memberName'
,
},
{
title
:
'附件
'
,
value
:
(
<
div
>
123
</
div
>
)
},
{
title
:
'考评主题
'
,
value
:
(
<
div
>
123
</
div
>
)
}
,
{
title
:
'考察范围'
,
value
:
'date'
}
,
{
title
:
''
,
value
:
''
,
},
{
title
:
"内部状态"
,
value
:
<
div
>
一通报考评结果
</
div
>
},
{
title
:
"考评完成时间"
,
value
:
'reason'
},
]
const
resultList
=
{
col
:
[
...
...
@@ -120,22 +121,15 @@ const EvaluateDetail = () => {
anchors=
{
anchorHeader
}
// extra={headExtra && headExtra(detailInfo, returnAddress, exchangeAddress)}
>
<
Card
title=
"流转进度"
id=
"progress"
>
<
Steps
current=
{
1
}
progressDot
>
<
Step
title=
"Finished"
description=
"You can hover on the dot."
/>
<
Step
title=
"In Progress"
description=
"You can hover on the dot."
/>
<
Step
title=
"Waiting"
description=
"You can hover on the dot."
/>
<
Step
title=
"Waiting"
description=
"You can hover on the dot."
/>
</
Steps
>
</
Card
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
columns=
{
columnList
}
dataSource=
{
{}
}
title=
"基本信息"
/>
<
CustomizeColumn
id=
"detail"
data=
{
columnList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"考评项目"
id=
"project"
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
Table
columns=
{
projectColumns
}
></
Table
>
</
Card
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"result"
columns=
{
resultList
}
dataSource=
{
{}
}
title=
"考评结果"
/>
{
/* <CustomizeColumn id="result" columns={resultList} dataSource={{}} title="考评结果" /> */
}
</
div
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
...
...
src/pages/member/memberEvaluate/allQuery/index.tsx
View file @
6a7825aa
...
...
@@ -11,6 +11,7 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
import
{
Link
}
from
'react-router-dom'
;
// const formActions = createFormActions();
...
...
@@ -31,9 +32,11 @@ const List: React.FC<Iprops> = (props: Iprops) => {
const
controllerBtns
=
(
<
div
>
<
Button
type=
"primary"
>
<
PlusOutlined
/>
新建
</
Button
>
<
Link
to=
{
"/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add"
}
>
<
Button
type=
"primary"
>
<
PlusOutlined
/>
新建
</
Button
>
</
Link
>
</
div
>
)
...
...
src/pages/member/memberEvaluate/components/FormilySelectMember/index.tsx
View file @
6a7825aa
import
React
,
{
useCallback
,
useRef
,
useState
}
from
'react'
;
import
React
,
{
useCallback
,
use
Effect
,
use
Ref
,
useState
}
from
'react'
;
import
{
Drawer
,
Button
}
from
'antd'
;
// import { useModel } from '@/.umi/plugin-model/useModel';
import
useMod
e
l
from
'../../hooks/useModal'
;
import
useMod
a
l
from
'../../hooks/useModal'
;
import
{
StandardTable
}
from
'god'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
createFormActions
}
from
'@formily/antd'
;
...
...
@@ -22,16 +22,21 @@ interface Iprops {
[
'x-component-props'
]:
any
,
},
mutators
:
{
change
:
(
checked
:
boolean
)
=>
void
change
:
(
record
:
any
)
=>
void
},
}
const
FormilySelectMember
:
React
.
FC
<
Iprops
>
&
{
isFieldComponent
:
boolean
}
=
(
props
:
Iprops
)
=>
{
const
{
value
,
editable
}
=
props
;
const
ref
=
useRef
<
any
>
({});
const
{
visible
,
toggleShow
,
handleCancel
,
handleConfirm
}
=
useModel
({});
const
[
selectedRecord
,
setSelectedRecord
]
=
useState
<
any
>
(
null
);
// schema.getExtendsComponentProps() || {}
const
{
visible
,
toggle
}
=
useModal
();
const
[
prevState
,
setPrevState
]
=
useState
(
null
);
useEffect
(()
=>
{
if
(
visible
)
{
setPrevState
(
value
)
}
},
[
visible
])
const
columns
:
ColumnsType
=
[
{
...
...
@@ -70,20 +75,18 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
}
}
const
onSelectChange
=
(
record
,
selected
,
selectedRows
)
=>
{
console
.
log
(
'selectedRowKeys changed: '
,
record
,
selected
,
selectedRows
);
setSelectedRecord
(
record
);
props
.
mutators
.
change
(
record
);
};
const
onCancel
=
useCallback
(()
=>
{
handleCancel
()
},
[
handleCancel
])
props
.
mutators
.
change
(
prevState
);
toggle
(
false
)
},
[
toggle
,
prevState
])
const
onConfirm
=
()
=>
{
handleConfirm
(()
=>
{
props
.
mutators
.
change
(
selectedRecord
);
})
toggle
(
false
);
}
return
(
...
...
@@ -142,7 +145,7 @@ const FormilySelectMember: React.FC<Iprops> & { isFieldComponent: boolean } = (p
<
span
className=
{
styles
.
name
}
>
{
value
?.
name
}
</
span
>
{
editable
&&
(
<
span
className=
{
styles
.
main
}
onClick=
{
toggleShow
}
>
{
value
?
'重新选择'
:
'选择考评人'
}
</
span
>
<
span
className=
{
styles
.
main
}
onClick=
{
()
=>
toggle
(
true
)
}
>
{
value
?
'重新选择'
:
'选择考评人'
}
</
span
>
)
}
</
div
>
...
...
src/pages/member/memberEvaluate/createEvaluate/add.less
View file @
6a7825aa
...
...
@@ -4,7 +4,11 @@
padding: 8px 8px;
}
.ant-btn {
padding: 2px 0px;
// padding: 2px 0px;
}
.customizeFileContainer {
margin-bottom: 0;
color: @main-color;
}
}
}
src/pages/member/memberEvaluate/createEvaluate/add.tsx
View file @
6a7825aa
...
...
@@ -4,9 +4,7 @@ import { history } from 'umi';
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
;
import
{
LinkOutlined
,
PlusOutlined
,
SaveOutlined
}
from
'@ant-design/icons'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
{
ArrayTable
,
}
from
'@formily/antd-components'
import
{
ArrayTable
}
from
'@formily/antd-components'
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
{
evaluateAddSchema
}
from
'../schema/add'
;
...
...
@@ -49,7 +47,17 @@ const EvaluateAdd = () => {
memberName
:
{
"id"
:
2
,
"name"
:
"456"
}
},
moban
:
[
{
name
:
'zzz.png'
,
url
:
'http://www.baidu.com/zzz.png'
,
},
{
name
:
'zzz1.png'
,
url
:
'http://www.baidu.com/zzz1.png'
,
},
]
}
]
})
...
...
@@ -75,16 +83,7 @@ const EvaluateAdd = () => {
}
const
renderListTableRemove
=
(
index
:
number
)
=>
(
<>
<
a
onClick=
{
()
=>
handleRemove
(
index
)
}
style=
{
{
color
:
'#ff4d4f'
,
}
}
>
删除
</
a
>
</>
<
a
onClick=
{
()
=>
handleRemove
(
index
)
}
style=
{
{
color
:
'#ff4d4f'
}
}
>
删除
</
a
>
);
return
(
...
...
src/pages/member/memberEvaluate/createEvaluate/index.tsx
View file @
6a7825aa
...
...
@@ -11,6 +11,7 @@ import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilte
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
Link
}
from
'umi'
;
const
formActions
=
createFormActions
();
...
...
@@ -39,12 +40,14 @@ const MemberEvaluate: React.FC<Iprops> = (props: Iprops) => {
])
const
controllerBtns
=
(
<
div
>
<
Button
type=
"primary"
>
<
PlusOutlined
/>
新建
</
Button
>
<
Space
>
<
Link
to=
{
"/memberCenter/memberAbility/memberEvaluate/evaluate/createEvaluate/add"
}
>
<
Button
type=
"primary"
>
<
PlusOutlined
/>
新建
</
Button
>
</
Link
>
<
Button
>
导入
</
Button
>
</
div
>
</
Space
>
)
return
(
<
Card
>
...
...
src/pages/member/memberEvaluate/hooks/useFetchInfo.tsx
0 → 100644
View file @
6a7825aa
import
React
,
{
useEffect
,
useState
}
from
'react'
;
/**
* 获取详情
*/
type
ParamsType
=
{
id
:
number
,
}
type
HeadersType
=
{
[
key
:
string
]:
any
,
}
type
Ires
=
{
code
:
number
,
data
:
{
[
key
:
string
]:
any
},
message
:
string
}
function
useFetchInfo
<
T
extends
Ires
>
(
api
:
(
data
:
any
)
=>
Promise
<
T
>
,
params
:
ParamsType
,
headers
?:
HeadersType
)
{
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
const
[
initialValue
,
setInitialValue
]
=
useState
<
null
|
Ires
[
"data"
]
>
(
null
);
useEffect
(()
=>
{
async
function
init
()
{
setLoading
(
true
)
return
new
Promise
<
void
>
((
resolve
)
=>
{
setTimeout
(()
=>
{
setLoading
(
false
);
setInitialValue
({
theme
:
'hellow'
,
files
:
[
{
name
:
'百度12312'
,
url
:
"http://www.baidu.com"
}
],
scoringList
:
[
{
id
:
1
,
projectName
:
"123"
,
memberName
:
{
"id"
:
2
,
"name"
:
"456"
},
baogao
:
[
{
name
:
'123'
,
url
:
'http://www.baidu.com/zzz.png'
,
}
]
}
]
})
resolve
()
},
1500
)
})
}
init
()
},
[])
return
{
loading
,
initialValue
}
}
export
default
useFetchInfo
src/pages/member/memberEvaluate/hooks/useGetDetailCommon.tsx
0 → 100644
View file @
6a7825aa
import
React
,
{
useMemo
,
useState
}
from
'react'
;
import
{
Progress
}
from
'antd'
;
/**
* 获取考评详情页的公共部分
*/
type
Options
=
{
blackList
:
string
[]
initialValue
?:
any
,
}
function
useGetDetailCommon
(
options
:
Options
)
{
const
{
blackList
,
initialValue
=
{}
}
=
options
;
const
[
anchorHeader
]
=
useState
(()
=>
{
const
temp
=
[
{
key
:
'progress'
,
name
:
'流转进度'
,
},
{
key
:
'detail'
,
name
:
'基本信息'
,
},
{
key
:
'project'
,
name
:
'考评项目'
},
{
key
:
'result'
,
name
:
'考评结果'
},
{
key
:
'record'
,
name
:
'流转记录'
}
]
return
temp
.
filter
((
item
)
=>
!
blackList
.
includes
(
item
.
key
));
});
const
basicInfoList
=
useMemo
(()
=>
{
return
[
{
title
:
'考聘工单号'
,
value
:
'theme'
,
},
{
title
:
'会员名称'
,
value
:
'memberName'
,
},
{
title
:
'附件'
,
value
:
(
<
div
>
{
initialValue
?.
files
?.
map
((
_row
)
=>
_row
.
name
)
}
</
div
>
)
},
{
title
:
'考评主题'
,
value
:
(
<
div
>
123
</
div
>
)
},
{
title
:
'考察范围'
,
value
:
'date'
},
{
title
:
''
,
value
:
''
,
},
{
title
:
"内部状态"
,
value
:
<
div
>
一通报考评结果
</
div
>
},
{
title
:
"考评完成时间"
,
value
:
'reason'
},
]
},
[
initialValue
]);
const
evaluateResultColumn
=
useMemo
(()
=>
{
return
[
{
title
:
'考评最终分'
,
value
:
(
<
div
style=
{
{
width
:
'60px'
,
height
:
'30px'
}
}
>
<
Progress
type=
"dashboard"
percent=
{
75
}
gapDegree=
{
145
}
width=
{
60
}
/>
</
div
>
)
},
{
title
:
'考察结果'
,
value
:
'b级,需要整改'
,
},
{
title
:
'附件'
,
value
:
(
<
div
>
123
</
div
>
)
},
{
title
:
''
,
value
:
''
},
{
title
:
'通知考评结果'
,
value
:
'是'
}
]
},
[])
return
{
anchorHeader
,
basicInfoList
,
evaluateResultColumn
}
}
export
default
useGetDetailCommon
;
src/pages/member/memberEvaluate/hooks/useModal.tsx
View file @
6a7825aa
import
React
,
{
useCallback
,
use
Effect
,
use
State
}
from
'react'
;
import
React
,
{
useCallback
,
useState
}
from
'react'
;
type
ParamsType
=
{
// onCancel?: (() => void) | (() => Promise<any>)
// onConfirm?: (() => void) | (() => Promise<any>)
onVisible
?:
(()
=>
void
)
}
// type ParamsType = {
// onVisible?: (() => void)
// }
const
isPromise
=
(
value
:
any
)
=>
{
return
value
&&
Object
.
prototype
.
toString
.
call
(
value
)
===
"[object Promise]"
}
//
const isPromise = (value: any) => {
//
return value && Object.prototype.toString.call(value) === "[object Promise]"
//
}
function
useModal
(
params
:
ParamsType
)
{
function
useModal
()
{
const
[
visible
,
setVisible
]
=
useState
<
boolean
>
(
false
);
const
[
loading
,
setLoading
]
=
useState
<
boolean
>
(
false
);
//
const [loading, setLoading] = useState<boolean>(false);
useEffect
(()
=>
{
if
(
visible
)
{
params
.
onVisible
?.()
}
},
[
visible
])
//
useEffect(() => {
//
if (visible) {
// params?
.onVisible?.()
//
}
//
}, [visible])
/**
* 取消
*/
const
handleCancel
=
useCallback
((
onCancel
?:
(()
=>
void
)
|
(()
=>
Promise
<
any
>
))
=>
{
if
(
isPromise
(
onCancel
))
{
setLoading
(()
=>
true
);
(
onCancel
()
as
Promise
<
any
>
)
.
then
((
data
)
=>
{
setLoading
(()
=>
false
);
setVisible
(()
=>
false
)
})
return
;
}
onCancel
?.();
setVisible
(
false
);
},
[])
/**
* 确认
*/
const
handleConfirm
=
useCallback
((
onConfirm
?:
(()
=>
void
)
|
(()
=>
Promise
<
any
>
))
=>
{
if
(
isPromise
(
onConfirm
))
{
setLoading
(()
=>
true
);
(
onConfirm
()
as
Promise
<
any
>
)
.
then
((
data
)
=>
{
setLoading
(()
=>
false
);
setVisible
(()
=>
false
)
})
return
;
}
onConfirm
?.();
setVisible
(()
=>
false
)
},
[])
// const onCancel = useCallback(() => {
// setVisible(() => false)
// }, [])
const
toggle
Show
=
useCallback
((
)
=>
{
setVisible
(()
=>
true
)
const
toggle
=
useCallback
((
status
:
boolean
)
=>
{
setVisible
(()
=>
status
)
},
[])
return
{
visible
,
loading
,
handleConfirm
,
handleCancel
,
toggleShow
}
return
{
visible
,
toggle
}
}
export
default
useModal
src/pages/member/memberEvaluate/schema/add.tsx
View file @
6a7825aa
...
...
@@ -88,7 +88,6 @@ export const evaluateAddSchema: ISchema = {
}
],
},
files
:
{
title
:
'考察要求附件'
,
type
:
'object'
,
...
...
@@ -207,7 +206,8 @@ export const evaluateAddSchema: ISchema = {
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
mode
:
'link'
,
buttonText
:
'上传'
buttonText
:
'上传'
,
fileContainerClassName
:
'customizeFileContainer'
},
"x-props"
:
{
width
:
180
,
...
...
@@ -219,7 +219,8 @@ export const evaluateAddSchema: ISchema = {
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
mode
:
'link'
,
buttonText
:
'上传'
buttonText
:
'上传'
,
fileContainerClassName
:
'customizeFileContainer'
},
"x-props"
:
{
width
:
180
,
...
...
src/pages/member/memberEvaluate/tobeEvaluate/detail.less
0 → 100644
View file @
6a7825aa
.form {
:global {
.ant-table-thead {
.ant-table-cell {
background-color: #F7F8FA;
color: #909399;
}
}
.ant-table-cell {
padding: 12px 12px;
}
.ant-btn {
padding: 2px 0px;
}
.customizeFileContainer {
margin-bottom: 0;
color: @main-color;
}
}
}
src/pages/member/memberEvaluate/tobeEvaluate/detail.tsx
0 → 100644
View file @
6a7825aa
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
{
Spin
,
Card
,
Table
,
Button
,
Drawer
}
from
'antd'
;
import
AnchorPage
from
'@/layouts/AnchorPage'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
import
useGetDetailCommon
from
'../hooks/useGetDetailCommon'
;
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
FormilyUploadFiles
from
'@/components/UploadFiles/FormilyUploadFiles'
;
import
{
ArrayTable
,}
from
'@formily/antd-components'
import
{
SchemaForm
,
createFormActions
}
from
'@formily/antd'
import
{
scoringSchema
}
from
'./schema'
;
import
useModal
from
'../hooks/useModal'
;
import
styles
from
'./detail.less'
;
const
formActions
=
createFormActions
();
const
TobeEvaluateDetail
=
()
=>
{
const
{
visible
,
toggle
}
=
useModal
()
const
[
initialValue
,
setInitialValue
]
=
useState
({});
const
{
anchorHeader
,
basicInfoList
}
=
useGetDetailCommon
({
blackList
:
[
'project'
,
'result'
],
initialValue
:
initialValue
})
/**
* @todo 抽出来
*/
useEffect
(()
=>
{
async
function
init
()
{
return
new
Promise
<
void
>
((
resolve
)
=>
{
setTimeout
(()
=>
{
setInitialValue
({
theme
:
'hellow'
,
files
:
[
{
name
:
'百度12312'
,
url
:
"http://www.baidu.com"
}
],
scoringList
:
[
{
id
:
1
,
projectName
:
"123"
,
memberName
:
{
"id"
:
2
,
"name"
:
"456"
},
baogao
:
[
{
name
:
'123'
,
url
:
'http://www.baidu.com/zzz.png'
,
}
]
}
]
})
resolve
()
},
1500
)
})
}
init
();
},
[])
const
onDrawerConfirm
=
()
=>
{
// handleConfirm()
formActions
.
submit
();
}
const
onSubmit
=
(
value
:
any
)
=>
{
console
.
log
(
value
);
// handleConfirm();
toggle
(
false
);
}
return
(
<
Spin
spinning=
{
false
}
>
<
AnchorPage
title=
{
`温州市隆昌皮业有限公式`
}
anchors=
{
anchorHeader
}
extra=
{
<
Button
onClick=
{
()
=>
toggle
(
true
)
}
>
考评打分
</
Button
>
}
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
data=
{
basicInfoList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
</
Card
>
</
AnchorPage
>
<
Drawer
title=
"考评打分"
visible=
{
visible
}
width=
{
1200
}
onClose=
{
()
=>
toggle
(
false
)
}
footer=
{
<
div
style=
{
{
textAlign
:
'right'
}
}
>
<
Button
onClick=
{
()
=>
toggle
(
false
)
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
onClick=
{
onDrawerConfirm
}
type=
"primary"
>
确认
</
Button
>
</
div
>
}
>
<
div
className=
{
styles
.
form
}
>
<
SchemaForm
onSubmit=
{
onSubmit
}
initialValues=
{
initialValue
}
schema=
{
scoringSchema
}
actions=
{
formActions
}
components=
{
{
FormilyUploadFiles
,
ArrayTable
,
}
}
/>
</
div
>
</
Drawer
>
</
Spin
>
)
}
export
default
TobeEvaluateDetail
src/pages/member/memberEvaluate/tobeEvaluate/index.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Card
,
Space
}
from
'antd'
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
{
querySchema
}
from
'./schema'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
interface
Iprops
{};
const
List
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
fetchListData
}
=
useFetchList
();
const
{
columns
}
=
useEvaluateColumn
<
InspectionData
>
([
{
title
:
'操作'
,
render
:
(
_text
,
_record
)
=>
(
<
Space
>
<
a
>
考评打分
</
a
>
</
Space
>
)
}
])
const
handleFetch
=
async
(
params
)
=>
{
const
result
=
fetchListData
(
PublicApi
.
getMemberAbilitySubPage
,
params
);
return
result
}
return
(
<
Card
>
<
CustomizeQueryList
columns=
{
columns
}
schema=
{
querySchema
}
fetchListData=
{
handleFetch
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
,
);
}
}
/>
</
Card
>
)
}
export
default
List
src/pages/member/memberEvaluate/tobeEvaluate/schema.tsx
0 → 100644
View file @
6a7825aa
import
{
ISchema
}
from
'@formily/antd'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
/**
* 会员考评页scheam
*/
export
const
querySchema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
megaLayout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
properties
:
{
name
:
{
type
:
'string'
,
'x-component'
:
'Search'
,
'x-component-props'
:
{
placeholder
:
'搜索通知单号'
,
align
:
'flex-left'
,
tip
:
'输入通知单号进行搜索'
,
},
},
[
FORM_FILTER_PATH
]:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
grid
:
true
,
full
:
true
,
autoRow
:
true
,
columns
:
6
,
},
properties
:
{
summary
:
{
type
:
'string'
,
'x-component-props'
:
{
placeholder
:
'通知单摘要'
,
allowClear
:
true
,
},
},
processName
:
{
type
:
'string'
,
'x-component-props'
:
{
placeholder
:
'加工企业名'
,
allowClear
:
true
,
},
},
outerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'外部状态(全部)'
,
allowClear
:
true
,
},
},
innerStatus
:
{
type
:
'string'
,
default
:
undefined
,
enum
:
[],
'x-component-props'
:
{
placeholder
:
'内部状态(全部)'
,
allowClear
:
true
,
},
},
submit
:
{
'x-component'
:
'Submit'
,
'x-mega-props'
:
{
span
:
1
,
},
'x-component-props'
:
{
children
:
'查询'
,
},
},
},
},
},
},
},
};
export
const
scoringSchema
:
ISchema
=
{
type
:
'object'
,
properties
:
{
scoringList
:
{
"type"
:
"array"
,
"x-component"
:
"arraytable"
,
"x-component-props"
:
{
// operations: false,
renderAddition
:
()
=>
null
,
renderRemove
:
()
=>
null
,
renderMoveDown
:
()
=>
null
,
renderMoveUp
:
()
=>
null
,
operations
:
false
,
},
items
:
{
type
:
"object"
,
properties
:
{
id
:
{
title
:
"序号"
,
editable
:
false
,
type
:
'string'
,
"x-props"
:
{
width
:
65
,
},
},
projectName
:
{
title
:
'考评项目'
,
type
:
'string'
,
"x-component-props"
:
{},
"x-props"
:
{
width
:
160
,
}
},
projectContent
:
{
title
:
'考评内容'
,
type
:
'textarea'
,
'x-props'
:
{
width
:
424
,
},
'x-component-props'
:
{
row
:
1
,
style
:
{
height
:
32
,
}
}
},
'memberName.name'
:
{
title
:
"考评人"
,
type
:
'string'
,
editable
:
false
,
'x-props'
:
{
width
:
128
,
},
// "x-component": "FormilySelectMember",
// "x-component-props": {
// children: '选择考评人'
// }
},
moban
:
{
title
:
'考评模板'
,
type
:
"object"
,
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
mode
:
'link'
,
buttonText
:
'上传'
,
fileContainerClassName
:
'customizeFileContainer'
},
"x-props"
:
{
width
:
180
,
}
},
baogao
:
{
title
:
'考评报告'
,
type
:
"object"
,
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
mode
:
'link'
,
buttonText
:
'上传'
,
fileContainerClassName
:
'customizeFileContainer'
},
"x-props"
:
{
width
:
180
,
}
},
score1
:
{
title
:
'考评计分'
,
type
:
'string'
,
"x-props"
:
{
width
:
95
,
},
"x-component-props"
:
{}
},
}
}
}
}
}
src/pages/member/memberEvaluate/tobeInformed/detail.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Spin
,
Card
,
Table
,
Button
}
from
'antd'
;
import
{
CheckCircleOutlined
}
from
'@ant-design/icons'
;
import
AnchorPage
from
'@/layouts/AnchorPage'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
useGetDetailCommon
from
'../hooks/useGetDetailCommon'
;
import
useFetchInfo
from
'../hooks/useFetchInfo'
;
import
useModal
from
'../hooks/useModal'
;
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
ExamVerify
,
{
SubmitDataTypes
}
from
'@/components/ExamVerify'
;
const
TobeEvaluateDetail
=
()
=>
{
const
{
initialValue
}
=
useFetchInfo
(
PublicApi
.
getMemberAbilitySubGet
,
{
id
:
1
})
const
{
anchorHeader
,
basicInfoList
,
evaluateResultColumn
}
=
useGetDetailCommon
({
blackList
:
[],
initialValue
:
initialValue
});
const
onSubmitRes
=
()
=>
{
}
return
(
<
Spin
spinning=
{
false
}
>
<
AnchorPage
title=
{
`温州市隆昌皮业有限公式`
}
anchors=
{
anchorHeader
}
extra=
{
<
Button
type=
"primary"
onClick=
{
onSubmitRes
}
>
提交考评结果
</
Button
>
}
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
data=
{
basicInfoList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"考评项目"
id=
"project"
>
<
Table
columns=
{
projectColumns
}
></
Table
>
</
Card
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"result"
data=
{
evaluateResultColumn
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
</
Card
>
</
div
>
</
AnchorPage
>
</
Spin
>
)
}
export
default
TobeEvaluateDetail
src/pages/member/memberEvaluate/tobeInformed/index.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Card
,
Space
,
Button
}
from
'antd'
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
{
evaluationListSchema
}
from
'../schema'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
interface
Iprops
{};
const
List
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
fetchListData
}
=
useFetchList
();
const
{
columns
}
=
useEvaluateColumn
<
InspectionData
>
([
{
title
:
'操作'
,
render
:
(
_text
,
_record
)
=>
(
<
Space
>
<
a
>
通报
</
a
>
</
Space
>
)
}
])
const
controllerBtns
=
(
<
Space
>
<
Button
>
批量通报
</
Button
>
</
Space
>
)
const
handleFetch
=
async
(
params
)
=>
{
const
result
=
fetchListData
(
PublicApi
.
getMemberAbilitySubPage
,
params
);
return
result
}
return
(
<
Card
>
<
CustomizeQueryList
columns=
{
columns
}
schema=
{
evaluationListSchema
}
fetchListData=
{
handleFetch
}
expressionScope=
{
{
controllerBtns
}
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
);
}
}
/>
</
Card
>
)
}
export
default
List
src/pages/member/memberEvaluate/tobeReviewI/detail.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Spin
,
Card
,
Table
,
Button
}
from
'antd'
;
import
{
CheckCircleOutlined
}
from
'@ant-design/icons'
;
import
AnchorPage
from
'@/layouts/AnchorPage'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
useGetDetailCommon
from
'../hooks/useGetDetailCommon'
;
import
useFetchInfo
from
'../hooks/useFetchInfo'
;
import
useModal
from
'../hooks/useModal'
;
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
ExamVerify
,
{
SubmitDataTypes
}
from
'@/components/ExamVerify'
;
const
TobeEvaluateDetail
=
()
=>
{
const
{
initialValue
}
=
useFetchInfo
(
PublicApi
.
getMemberAbilitySubGet
,
{
id
:
1
})
const
{
anchorHeader
,
basicInfoList
,
evaluateResultColumn
}
=
useGetDetailCommon
({
blackList
:
[],
initialValue
:
initialValue
});
const
{
visible
,
toggle
}
=
useModal
();
const
onSubmit
=
(
values
:
SubmitDataTypes
)
=>
{
console
.
log
(
values
)
}
const
onCancel
=
()
=>
{
toggle
(
false
);
}
const
examValue
=
{
status
:
0
,
reason
:
'123'
}
return
(
<
Spin
spinning=
{
false
}
>
<
AnchorPage
title=
{
`温州市隆昌皮业有限公式`
}
anchors=
{
anchorHeader
}
extra=
{
<
Button
type=
"primary"
onClick=
{
()
=>
toggle
(
true
)
}
icon=
{
<
CheckCircleOutlined
/>
}
>
单据审核
</
Button
>
}
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
data=
{
basicInfoList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"考评项目"
id=
"project"
>
<
Table
columns=
{
projectColumns
}
></
Table
>
</
Card
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"result"
data=
{
evaluateResultColumn
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
</
Card
>
</
div
>
</
AnchorPage
>
<
ExamVerify
visible=
{
visible
}
title=
"审核"
onSubmit=
{
onSubmit
}
onCancel=
{
onCancel
}
value=
{
examValue
}
/>
</
Spin
>
)
}
export
default
TobeEvaluateDetail
src/pages/member/memberEvaluate/tobeReviewI/index.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Card
,
Space
,
Button
}
from
'antd'
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
{
evaluationListSchema
}
from
'../schema'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
interface
Iprops
{};
const
List
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
fetchListData
}
=
useFetchList
();
const
{
columns
}
=
useEvaluateColumn
<
InspectionData
>
([
{
title
:
'操作'
,
render
:
(
_text
,
_record
)
=>
(
<
Space
>
<
a
>
审核
</
a
>
</
Space
>
)
}
])
const
controllerBtns
=
(
<
Space
>
<
Button
>
批量审核通过
</
Button
>
</
Space
>
)
const
handleFetch
=
async
(
params
)
=>
{
const
result
=
fetchListData
(
PublicApi
.
getMemberAbilitySubPage
,
params
);
return
result
}
return
(
<
Card
>
<
CustomizeQueryList
columns=
{
columns
}
schema=
{
evaluationListSchema
}
fetchListData=
{
handleFetch
}
expressionScope=
{
{
controllerBtns
}
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
);
}
}
/>
</
Card
>
)
}
export
default
List
src/pages/member/memberEvaluate/tobeReviewII/detail.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Spin
,
Card
,
Table
,
Button
}
from
'antd'
;
import
{
CheckCircleOutlined
}
from
'@ant-design/icons'
;
import
AnchorPage
from
'@/layouts/AnchorPage'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
useGetDetailCommon
from
'../hooks/useGetDetailCommon'
;
import
useFetchInfo
from
'../hooks/useFetchInfo'
;
import
useModal
from
'../hooks/useModal'
;
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
ExamVerify
,
{
SubmitDataTypes
}
from
'@/components/ExamVerify'
;
const
TobeReviewDetailII
=
()
=>
{
const
{
initialValue
}
=
useFetchInfo
(
PublicApi
.
getMemberAbilitySubGet
,
{
id
:
1
})
const
{
anchorHeader
,
basicInfoList
,
evaluateResultColumn
}
=
useGetDetailCommon
({
blackList
:
[],
initialValue
:
initialValue
});
const
{
visible
,
toggle
}
=
useModal
();
const
onSubmit
=
(
values
:
SubmitDataTypes
)
=>
{
console
.
log
(
values
)
}
const
onCancel
=
()
=>
{
toggle
(
false
);
}
const
examValue
=
{
status
:
0
,
reason
:
'123'
}
return
(
<
Spin
spinning=
{
false
}
>
<
AnchorPage
title=
{
`温州市隆昌皮业有限公式`
}
anchors=
{
anchorHeader
}
extra=
{
<
Button
type=
"primary"
onClick=
{
()
=>
toggle
(
true
)
}
icon=
{
<
CheckCircleOutlined
/>
}
>
单据审核
</
Button
>
}
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
data=
{
basicInfoList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"考评项目"
id=
"project"
>
<
Table
columns=
{
projectColumns
}
></
Table
>
</
Card
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"result"
data=
{
evaluateResultColumn
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
</
Card
>
</
div
>
</
AnchorPage
>
<
ExamVerify
visible=
{
visible
}
title=
"审核"
onSubmit=
{
onSubmit
}
onCancel=
{
onCancel
}
value=
{
examValue
}
/>
</
Spin
>
)
}
export
default
TobeReviewDetailII
src/pages/member/memberEvaluate/tobeReviewII/index.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Card
,
Space
,
Button
}
from
'antd'
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
{
evaluationListSchema
}
from
'../schema'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
interface
Iprops
{};
const
TobeReviewListII
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
fetchListData
}
=
useFetchList
();
const
{
columns
}
=
useEvaluateColumn
<
InspectionData
>
([
{
title
:
'操作'
,
render
:
(
_text
,
_record
)
=>
(
<
Space
>
<
a
>
审核
</
a
>
</
Space
>
)
}
])
const
controllerBtns
=
(
<
Space
>
<
Button
>
批量审核通过
</
Button
>
</
Space
>
)
const
handleFetch
=
async
(
params
)
=>
{
const
result
=
fetchListData
(
PublicApi
.
getMemberAbilitySubPage
,
params
);
return
result
}
return
(
<
Card
>
<
CustomizeQueryList
columns=
{
columns
}
schema=
{
evaluationListSchema
}
fetchListData=
{
handleFetch
}
expressionScope=
{
{
controllerBtns
}
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
);
}
}
/>
</
Card
>
)
}
export
default
TobeReviewListII
src/pages/member/memberEvaluate/tobeSubmitSummary/detail.less
0 → 100644
View file @
6a7825aa
.form {
:global {
.fileContainerClassName {
color: @main-color;
}
}
}
src/pages/member/memberEvaluate/tobeSubmitSummary/detail.tsx
0 → 100644
View file @
6a7825aa
import
React
,
{
useEffect
,
useState
,
useMemo
}
from
'react'
;
import
{
Spin
,
Card
,
Table
,
Button
,
Drawer
}
from
'antd'
;
import
{
SchemaForm
,
createFormActions
}
from
'@formily/antd'
import
{
CheckCircleOutlined
}
from
'@ant-design/icons'
;
import
{
ArrayTable
,}
from
'@formily/antd-components'
import
AnchorPage
from
'@/layouts/AnchorPage'
;
import
CustomizeColumn
from
'@/components/CustomizeColumn'
;
import
AuditProcess
from
'@/components/AuditProcess'
;
import
FormilyUploadFiles
from
'@/components/UploadFiles/FormilyUploadFiles'
;
import
{
modifyEvaluateScore
,
evaluateScoreRes
}
from
'./schema'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
{
projectColumns
,
recordColumn
}
from
'../columns/detail'
;
import
useGetDetailCommon
from
'../hooks/useGetDetailCommon'
;
import
useFetchInfo
from
'../hooks/useFetchInfo'
;
import
useModal
from
'../hooks/useModal'
;
import
styles
from
'./detail.less'
;
import
theme
from
'../../../../../config/lingxi.theme.config'
;
import
createRichTextUtils
from
'@/components/RangeTime/createRichText'
;
import
FormilyCheckbox
from
'../../components/FormilyCheckBox'
const
formActions
=
createFormActions
();
const
resultForm
=
createFormActions
();
const
TobeEvaluateDetail
=
()
=>
{
const
{
visible
,
toggle
}
=
useModal
();
const
{
visible
:
resultVisible
,
toggle
:
resultToggle
}
=
useModal
();
const
{
initialValue
}
=
useFetchInfo
(
PublicApi
.
getMemberAbilitySubGet
,
{
id
:
1
})
const
{
anchorHeader
,
basicInfoList
}
=
useGetDetailCommon
({
blackList
:
[
'result'
],
initialValue
:
initialValue
});
const
[
editingScoreData
,
setEditingScoreData
]
=
useState
<
any
>
({})
const
withEditProjectColumns
=
useMemo
(()
=>
{
const
temp
=
projectColumns
.
concat
({
title
:
'操作'
,
render
:
(
text
,
record
)
=>
{
return
<
a
onClick=
{
()
=>
editScore
(
record
)
}
>
修改
</
a
>
}
})
return
temp
;
},
[
projectColumns
])
const
editScore
=
(
record
:
any
)
=>
{
setEditingScoreData
(
record
);
}
const
onDrawerCancel
=
()
=>
{
// handleCancel();
toggle
(
false
)
}
const
onDrawerConfirm
=
(
type
:
'edit'
|
'result'
)
=>
{
if
(
type
===
'edit'
)
{
formActions
.
submit
();
}
else
{
resultForm
.
submit
();
}
}
const
onSubmit
=
(
value
:
any
)
=>
{
console
.
log
(
value
);
toggle
(
false
);
}
const
resultOnSubmit
=
(
value
)
=>
{
console
.
log
(
value
);
resultToggle
(
false
);
}
return
(
<
Spin
spinning=
{
false
}
>
<
AnchorPage
title=
{
`温州市隆昌皮业有限公式`
}
anchors=
{
anchorHeader
}
extra=
{
<
Button
onClick=
{
()
=>
resultToggle
(
true
)
}
icon=
{
<
CheckCircleOutlined
/>
}
>
考评结果
</
Button
>
}
>
<
AuditProcess
title=
"流转进度"
id=
"progress"
/>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
CustomizeColumn
id=
"detail"
data=
{
basicInfoList
}
title=
"基本信息"
column=
{
3
}
/>
</
div
>
<
Card
title=
"考评项目"
id=
"project"
>
<
Table
columns=
{
withEditProjectColumns
}
></
Table
>
</
Card
>
<
div
style=
{
{
margin
:
`${theme["@margin-md"]} 0`
}
}
>
<
Card
title=
"流转记录"
id=
"record"
extra=
{
<
Button
>
内部流转
</
Button
>
}
>
<
Table
columns=
{
recordColumn
}
></
Table
>
</
Card
>
</
div
>
</
AnchorPage
>
<
Drawer
title=
"修改考评计分"
visible=
{
visible
}
width=
{
1200
}
onClose=
{
onDrawerCancel
}
footer=
{
<
div
style=
{
{
textAlign
:
'right'
}
}
>
<
Button
onClick=
{
onDrawerCancel
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
onClick=
{
()
=>
onDrawerConfirm
(
'edit'
)
}
type=
"primary"
>
确认
</
Button
>
</
div
>
}
>
<
div
className=
{
styles
.
form
}
>
<
SchemaForm
onSubmit=
{
onSubmit
}
initialValues=
{
editingScoreData
}
schema=
{
modifyEvaluateScore
}
actions=
{
formActions
}
components=
{
{
FormilyUploadFiles
,
ArrayTable
,
}
}
/>
</
div
>
</
Drawer
>
<
Drawer
title=
"考评结果"
visible=
{
resultVisible
}
width=
{
800
}
onClose=
{
()
=>
resultToggle
(
false
)
}
footer=
{
<
div
style=
{
{
textAlign
:
'right'
}
}
>
<
Button
onClick=
{
()
=>
resultToggle
(
false
)
}
style=
{
{
marginRight
:
8
}
}
>
取消
</
Button
>
<
Button
onClick=
{
()
=>
onDrawerConfirm
(
'result'
)
}
type=
"primary"
>
确认
</
Button
>
</
div
>
}
>
<
SchemaForm
onSubmit=
{
onSubmit
}
initialValues=
{
initialValue
}
expressionScope=
{
createRichTextUtils
()
}
schema=
{
evaluateScoreRes
}
actions=
{
formActions
}
components=
{
{
FormilyUploadFiles
,
ArrayTable
,
FormilyCheckbox
}
}
/>
</
Drawer
>
</
Spin
>
)
}
export
default
TobeEvaluateDetail
src/pages/member/memberEvaluate/tobeSubmitSummary/index.tsx
0 → 100644
View file @
6a7825aa
import
React
from
'react'
;
import
{
Card
,
Space
,
Button
}
from
'antd'
import
useEvaluateColumn
,
{
InspectionData
}
from
'../hooks/useEvaluateColumn'
;
import
{
evaluationListSchema
}
from
'../schema'
;
import
useFetchList
from
'../hooks/useFetchList'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
CustomizeQueryList
from
'../../components/CustomizeQueryList'
;
interface
Iprops
{};
const
List
:
React
.
FC
<
Iprops
>
=
(
props
:
Iprops
)
=>
{
const
{
fetchListData
}
=
useFetchList
();
const
{
columns
}
=
useEvaluateColumn
<
InspectionData
>
([
{
title
:
'操作'
,
render
:
(
_text
,
_record
)
=>
(
<
Space
>
<
a
>
提交
</
a
>
<
a
>
编辑
</
a
>
</
Space
>
)
}
])
const
controllerBtns
=
(
<
Space
>
<
Button
>
批量提交
</
Button
>
</
Space
>
)
const
handleFetch
=
async
(
params
)
=>
{
const
result
=
fetchListData
(
PublicApi
.
getMemberAbilitySubPage
,
params
);
return
result
}
return
(
<
Card
>
<
CustomizeQueryList
columns=
{
columns
}
schema=
{
evaluationListSchema
}
fetchListData=
{
handleFetch
}
expressionScope=
{
{
controllerBtns
}
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
);
}
}
/>
</
Card
>
)
}
export
default
List
src/pages/member/memberEvaluate/tobeSubmitSummary/schema.tsx
0 → 100644
View file @
6a7825aa
import
{
ISchema
}
from
'@formily/antd'
;
/**
* 修改考评打分
*/
export
const
modifyEvaluateScore
:
ISchema
=
{
type
:
'object'
,
properties
:
{
layout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
labelCol
:
4
,
full
:
true
,
labelAlign
:
'left'
},
properties
:
{
projectName
:
{
title
:
'考评项目'
,
type
:
'string'
,
editable
:
false
},
content
:
{
title
:
"项目内容"
,
type
:
'string'
,
editable
:
false
,
},
memberName
:
{
title
:
'考评人'
,
type
:
"string"
,
editable
:
false
,
},
isMemberScore
:
{
title
:
'考评人打分'
,
type
:
'string'
,
editable
:
false
},
weight
:
{
title
:
'权重'
,
type
:
'string'
,
},
scoring
:
{
title
:
'考评计分'
,
type
:
'string'
,
},
files
:
{
title
:
'考评模板'
,
type
:
'object'
,
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
fileContainerClassName
:
'customizeFileContainer'
}
},
report
:
{
title
:
'考评报告'
,
type
:
'object'
,
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
fileContainerClassName
:
'customizeFileContainer'
}
},
}
}
}
}
/**
* 考评结果
*/
export
const
evaluateScoreRes
=
{
type
:
'object'
,
properties
:
{
layout
:
{
type
:
'object'
,
'x-component'
:
'mega-layout'
,
'x-component-props'
:
{
labelCol
:
4
,
full
:
true
,
labelAlign
:
'left'
},
properties
:
{
score
:
{
title
:
'考评最终分'
,
type
:
'string'
,
},
result
:
{
title
:
'考评结果'
,
type
:
'textarea'
,
},
noticeResult
:
{
title
:
"{{ text('通知考评结果',help('将考评结果通知给考察对象')) }}"
,
type
:
"string"
,
'x-component'
:
'FormilyCheckbox'
},
files
:
{
title
:
'考评模板'
,
type
:
'object'
,
'x-component'
:
'FormilyUploadFiles'
,
'x-component-props'
:
{
fileContainerClassName
:
'customizeFileContainer'
}
},
}
}
}
}
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