@ -5,248 +5,251 @@ import { IconAlertCircle, IconAlertTriangle } from '@douyinfe/semi-icons';
function adminModal ( props ) {
const {
close ,
cancel ,
visible ,
dispatch ,
actions ,
systemEdit , / / 是 否 是 编 辑
peplist , / / 项 企 项 目 列 表
anxincloudList , / / 安 心 云 项 目 列 表
appList , / / 应 用 列 表
pepProjectId , / / 已 选 择 项 企 i d
pepname , / / 修 改 时 自 定 义 项 目 名 称
anxincloudArr , / / 修 改 时 已 经 选 择 的 安 心 云 列 表
anxinDelete , / / 修 改 时 安 心 云 项 目 有 删 除 , 显 示 提 示 信 息
appArr , / / 修 改 时 添 加 应 用
bindId
} = props ;
const { install } = actions ;
const form = useRef ( ) ; / / 表 单
const [ custom , setCustom ] = useState ( false ) ; / / 是 否 是 自 定 义 项 目
const [ myprojectType , setMyprojectType ] = useState ( 'pep' ) ; / / 是 否 是 自 定 义 项 目
/ / 初 始 化
useEffect ( ( ) => {
if ( pepname ) {
setCustom ( true )
setMyprojectType ( 'axy' )
}
} , [ ] ) ;
const {
close ,
cancel ,
visible ,
dispatch ,
actions ,
systemEdit , / / 是 否 是 编 辑
peplist , / / 项 企 项 目 列 表
anxincloudList , / / 安 心 云 项 目 列 表
appList , / / 应 用 列 表
pepProjectId , / / 已 选 择 项 企 i d
pepname , / / 修 改 时 自 定 义 项 目 名 称
anxincloudArr , / / 修 改 时 已 经 选 择 的 安 心 云 列 表
anxinDelete , / / 修 改 时 安 心 云 项 目 有 删 除 , 显 示 提 示 信 息
appArr , / / 修 改 时 添 加 应 用
bindId
} = props ;
const { install } = actions ;
const form = useRef ( ) ; / / 表 单
const [ custom , setCustom ] = useState ( false ) ; / / 是 否 是 自 定 义 项 目
const [ myprojectType , setMyprojectType ] = useState ( 'pep' ) ; / / 是 否 是 自 定 义 项 目
/ / 初 始 化
useEffect ( ( ) => {
if ( pepname ) {
setCustom ( true )
setMyprojectType ( 'axy' )
}
} , [ ] ) ;
function handleOk ( ) {
/ / 点 击 弹 框 确 定 右 边 按 钮
form . current
. validate ( )
. then ( ( values ) => {
if ( systemEdit ) {
let appArr = [ ]
for ( let i = 0 ; i < values . appId . length ; i ++ ) {
appArr . push ( JSON . parse ( values . appId [ i ] ) . id )
}
let bindObj = JSON . parse ( JSON . stringify ( values ) )
bindObj . appId = appArr
dispatch ( install . postProjectBind ( { ... bindObj , bindId : bindId , msg : '修改映射关系' } ) ) . then ( ( res ) => { / / 获 取 项 企 ( P E P ) 全 部 部 门 及 其 下 用 户
if ( res . success ) {
close ( ) ;
function handleOk ( ) {
/ / 点 击 弹 框 确 定 右 边 按 钮
form . current
. validate ( )
. then ( ( values ) => {
if ( systemEdit ) {
let appArr = [ ]
for ( let i = 0 ; i < values . appId . length ; i ++ ) {
appArr . push ( JSON . parse ( values . appId [ i ] ) . id )
}
let bindObj = JSON . parse ( JSON . stringify ( values ) )
bindObj . appId = appArr
dispatch ( install . postProjectBind ( { ... bindObj , bindId : bindId , msg : '修改映射关系' } ) ) . then ( ( res ) => { / / 获 取 项 企 ( P E P ) 全 部 部 门 及 其 下 用 户
if ( res . success ) {
close ( ) ;
}
} )
}
else {
let appArr = [ ]
for ( let i = 0 ; i < values . appId . length ; i ++ ) {
appArr . push ( JSON . parse ( values . appId [ i ] ) . id )
}
let bindObj = JSON . parse ( JSON . stringify ( values ) )
bindObj . appId = appArr
dispatch ( install . postProjectBind ( { ... bindObj , msg : '添加映射关系' } ) ) . then ( ( res ) => { / / 获 取 项 企 ( P E P ) 全 部 部 门 及 其 下 用 户
if ( res . success ) {
close ( ) ;
}
} )
}
} )
}
function handleCancel ( ) {
cancel ( ) ;
/ / 点 击 弹 框 取 消 左 边 按 钮
}
const renderMultipleWithCustomTag = ( optionNode , { onClose } ) => {
const content = (
< Tag closable = { true }
onClose = { onClose }
size = 'large' >
{ JSON . parse ( optionNode . value ) . name }
< / Tag >
) ;
return {
isRenderInTag : false ,
content
} ;
}
return (
< >
< Modal
title = { systemEdit ? '修改映射关系' : '添加映射关系' }
okText = "确定"
cancelText = "取消"
visible = { visible }
onOk = { handleOk }
width = { 666 }
onCancel = { handleCancel }
>
< div style = { { margin : "0px 25px" } } >
< div style = { { width : '100%' , lineHeight : 2 , background : '#F4F8FF' , borderRadius : 2 , border : '1px solid #C7E1FF' , display : 'flex' } } >
< div style = { { display : 'flex' , marginLeft : 12 , marginTop : 5.5 } } > < IconAlertCircle style = { { color : '#0F7EFB' } } / > < / div >
< div style = { { color : '#0F7EFB' , fontSize : 12 , marginLeft : 8 , marginRight : 12 } } > 映射关系由项企立项项目与安心云项目关联产生 , 若项目未在项企中有记载 , 可选自定义项目 , 待项企立项项后再进行修改 ! < / div >
< / div >
< Form
allowEmpty
labelPosition = "left"
labelAlign = "right"
labelWidth = "110px"
onValueChange = { ( values , field ) => {
for ( var key in field ) {
if ( key == 'projectType' ) {
if ( field . projectType == 'pep' ) {
setCustom ( false )
}
else {
setCustom ( true )
}
}
} )
}
else {
let appArr = [ ]
for ( let i = 0 ; i < values . appId . length ; i ++ ) {
appArr . push ( JSON . parse ( values . appId [ i ] ) . id )
}
let bindObj = JSON . parse ( JSON . stringify ( values ) )
bindObj . appId = appArr
dispatch ( install . postProjectBind ( { ... bindObj , msg : '添加映射关系' } ) ) . then ( ( res ) => { / / 获 取 项 企 ( P E P ) 全 部 部 门 及 其 下 用 户
if ( res . success ) {
close ( ) ;
}
} }
getFormApi = { ( formApi ) => ( form . current = formApi ) }
>
< div >
< Form.RadioGroup field = "projectType" initValue = { myprojectType } label = '项目类型:'
disabled = { systemEdit && ! pepname } >
< Form.Radio value = 'pep' > 项企项目 < / Form.Radio >
< Form.Radio value = 'axy' > 自定义项目 ( 未在项企中立项的项目可选 ) < / Form.Radio >
< / Form.RadioGroup >
< / div >
{ custom ? (
< div >
< Form.Input
field = "name"
label = '自定义项目:'
style = { { width : 425 } }
maxLength = { 15 }
initValue = { pepname || "" }
placeholder = "请输入项目名称,且名称需与项企区分"
showClear
rules = { [ { required : true , message : "请输入项目名称,且名称需与项企区分" } ] } / >
< / div >
) : (
< div >
< Form.Select
label = "PEP项企项目:"
field = "pepProjectId"
filter
placeholder = "请选择PEP项企项目"
style = { { width : 425 } }
rules = { [ { required : true , message : "请选择PEP项企项目" } ] }
initValue = { pepProjectId || "" }
disabled = { systemEdit && ! pepname }
showClear
>
{
peplist . reduce ( ( arr , item ) => {
if ( ! item . binded ) {
arr . push (
< Form.Select.Option key = { item . id } value = { item . id } >
{ item . project_name }
< / Form.Select.Option >
)
}
return arr
} , [ ] )
}
< / Form.Select >
< / div >
) }
< div >
< Form.Select
label = "安心云项目:"
field = "anxinProjectId"
multiple
filter
placeholder = "请选择安心云项目"
style = { { width : 425 } }
rules = { [ { required : true , message : "请选择安心云项目" } ] }
initValue = { anxincloudArr || [ ] }
showClear
>
{
anxincloudList . map ( ( item , index ) => {
return (
< Form.Select.Option key = { index } value = { item . id } >
{ item . name }
< / Form.Select.Option >
)
} )
}
} )
}
} )
}
function handleCancel ( ) {
cancel ( ) ;
/ / 点 击 弹 框 取 消 左 边 按 钮
}
const renderMultipleWithCustomTag = ( optionNode , { onClose } ) => {
const content = (
< Tag closable = { true }
onClose = { onClose }
size = 'large' >
{ JSON . parse ( optionNode . value ) . name }
< / Tag >
) ;
return {
isRenderInTag : false ,
content
} ;
}
return (
< >
< Modal
title = { systemEdit ? '修改映射关系' : '添加映射关系' }
okText = "确定"
cancelText = "取消"
visible = { visible }
onOk = { handleOk }
width = { 666 }
onCancel = { handleCancel }
>
< div style = { { margin : "0px 25px" } } >
< div style = { { width : '100%' , lineHeight : 2 , background : '#F4F8FF' , borderRadius : 2 , border : '1px solid #C7E1FF' , display : 'flex' } } >
< div style = { { display : 'flex' , marginLeft : 12 , marginTop : 5.5 } } > < IconAlertCircle style = { { color : '#0F7EFB' } } / > < / div >
< div style = { { color : '#0F7EFB' , fontSize : 12 , marginLeft : 8 , marginRight : 12 } } > 映射关系由项企立项项目与安心云项目关联产生 , 若项目未在项企中有记载 , 可选自定义项目 , 待项企立项项后再进行修改 ! < / div >
< / div >
< Form
allowEmpty
labelPosition = "left"
labelAlign = "right"
labelWidth = "110px"
onValueChange = { ( values , field ) => {
for ( var key in field ) {
if ( key == 'projectType' ) {
if ( field . projectType == 'pep' ) {
setCustom ( false )
}
else {
setCustom ( true )
}
}
}
} }
getFormApi = { ( formApi ) => ( form . current = formApi ) }
>
< div >
< Form.RadioGroup field = "projectType" initValue = { myprojectType } label = '项目类型:'
disabled = { systemEdit && ! pepname } >
< Form.Radio value = 'pep' > 项企项目 < / Form.Radio >
< Form.Radio value = 'axy' > 自定义项目 ( 未在项企中立项的项目可选 ) < / Form.Radio >
< / Form.RadioGroup >
< / div >
{ custom ? (
< div >
< Form.Input
field = "name"
label = '自定义项目:'
style = { { width : 425 } }
maxLength = { 15 }
initValue = { pepname || "" }
placeholder = "请输入项目名称,且名称需与项企区分"
showClear
rules = { [ { required : true , message : "请输入项目名称,且名称需与项企区分" } ] } / >
< / div >
) : (
< div >
< Form.Select
label = "PEP项企项目:"
field = "pepProjectId"
filter
placeholder = "请选择PEP项企项目"
style = { { width : 425 } }
rules = { [ { required : true , message : "请选择PEP项企项目" } ] }
initValue = { pepProjectId || "" }
disabled = { systemEdit && ! pepname }
showClear
>
{
peplist . map ( ( item , index ) => {
return (
< Form.Select.Option key = { item . id } value = { item . id } >
{ item . project_name }
< / Form.Select.Option >
)
} )
}
< / Form.Select >
< / div >
) }
< div >
< Form.Select
label = "安心云项目:"
field = "anxinProjectId"
multiple
filter
placeholder = "请选择安心云项目"
style = { { width : 425 } }
rules = { [ { required : true , message : "请选择安心云项目" } ] }
initValue = { anxincloudArr || [ ] }
showClear
>
{
anxincloudList . map ( ( item , index ) => {
return (
< Form.Select.Option key = { index } value = { item . id } >
{ item . name }
< / Form.Select.Option >
)
} )
}
< / Form.Select >
< / Form.Select >
< / div >
{
anxinDelete . length > 0 ? (
< div style = { { display : 'flex' } } >
< div style = { { marginTop : 3 } } >
< img src = "/assets/images/install/risk.png" alt = "" style = { { height : 24 , width : 24 , } } / >
< / div >
< div style = { {
background : 'rgba(255, 51, 0, 0.28)' , color : '#FF3300' ,
fontSize : 12 , marginLeft : 8 , lineHeight : 2 , padding : '0px 5px' ,
border : '1px solid rgba(255,51,0,0.3)' , width : 515
} } >
确认关联后 “ { anxinDelete . join ( '、' ) } ” 将被系统移除映射关系 , 原因是项目已在 【 安心云 】 中被删除 !
< / div >
< / div >
) : ( '' )
}
< div >
< Form.Select
label = "添加应用:"
field = "appId"
multiple
filter
placeholder = "请选择添加应用"
style = { { width : 425 } }
initValue = { appArr || [ ] }
showClear
renderSelectedItem = { renderMultipleWithCustomTag }
>
{
anxinDelete . length > 0 ? (
< div style = { { display : 'flex' } } >
< div style = { { marginTop : 3 } } >
< img src = "/assets/images/install/risk.png" alt = "" style = { { height : 24 , width : 24 , } } / >
appList . map ( ( item , index ) => {
return (
< Form.Select.Option key = { 'a' + index } value = { JSON . stringify ( item ) } label = {
< div >
< div style = { { fontSize : 14 , fontWeight : 600 } } >
{ item . name }
< / div >
< div style = { { fontSize : 12 , color : 'rgb(139, 139, 139)' } } >
URL : { item . url }
< / div >
< / div >
< div style = { {
background : 'rgba(255, 51, 0, 0.28)' , color : '#FF3300' ,
fontSize : 12 , marginLeft : 8 , lineHeight : 2 , padding : '0px 5px' ,
border : '1px solid rgba(255,51,0,0.3)' , width : 515
} } >
确认关联后 “ { anxinDelete . join ( '、' ) } ” 将被系统移除映射关系 , 原因是项目已在 【 安心云 】 中被删除 !
< / div >
< / div >
) : ( '' )
} >
< / Form.Select.Option >
)
} )
}
< div >
< Form.Select
label = "添加应用:"
field = "appId"
multiple
filter
placeholder = "请选择添加应用"
style = { { width : 425 } }
initValue = { appArr || [ ] }
showClear
renderSelectedItem = { renderMultipleWithCustomTag }
>
{
appList . map ( ( item , index ) => {
return (
< Form.Select.Option key = { 'a' + index } value = { JSON . stringify ( item ) } label = {
< div >
< div style = { { fontSize : 14 , fontWeight : 600 } } >
{ item . name }
< / div >
< div style = { { fontSize : 12 , color : 'rgb(139, 139, 139)' } } >
URL : { item . url }
< / div >
< / div >
} >
< / Form.Select.Option >
)
} )
}
< / Form.Select >
< / div >
< / Form >
< / div >
< / Modal >
< / >
) ;
< / Form.Select >
< / div >
< / Form >
< / div >
< / Modal >
< / >
) ;
}
function mapStateToProps ( state ) {
const { auth , global , members } = state ;
return {
/ / l o a d i n g : m e m b e r s . i s R e q u e s t i n g ,
user : auth . user ,
actions : global . actions ,
/ / m e m b e r s : m e m b e r s . d a t a ,
} ;
const { auth , global , members } = state ;
return {
/ / l o a d i n g : m e m b e r s . i s R e q u e s t i n g ,
user : auth . user ,
actions : global . actions ,
/ / m e m b e r s : m e m b e r s . d a t a ,
} ;
}
export default connect ( mapStateToProps ) ( adminModal ) ;