Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
bkunyun
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
sunyihao
bkunyun
Commits
de4f0a6d
Commit
de4f0a6d
authored
Jul 07, 2022
by
chenshouchao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 自定义模板样式完成
parent
b9a6c048
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
451 additions
and
78 deletions
+451
-78
Tabs.tsx
src/components/mui/Tabs.tsx
+74
-70
index.module.css
...workbenchTemplate/components/AddTemplate/index.module.css
+107
-0
index.tsx
...kbench/workbenchTemplate/components/AddTemplate/index.tsx
+252
-0
index.tsx
...iews/Project/ProjectWorkbench/workbenchTemplate/index.tsx
+18
-8
No files found.
src/components/mui/Tabs.tsx
View file @
de4f0a6d
...
...
@@ -15,87 +15,91 @@ import { TabContext, TabList, TabPanel } from "@mui/lab";
import
{
Typography
}
from
"@mui/material"
;
interface
ITabList
{
label
:
string
;
value
:
string
;
component
:
JSX
.
Element
;
icon
?:
string
;
iconed
?:
string
;
hide
?:
boolean
;
label
:
string
;
value
:
string
;
component
:
JSX
.
Element
;
icon
?:
string
;
iconed
?:
string
;
hide
?:
boolean
;
}
interface
IProps
{
tabList
:
ITabList
[];
defaultValue
?:
string
;
tabList
:
ITabList
[];
defaultValue
?:
string
;
}
const
Tabs
=
(
props
:
IProps
)
=>
{
const
{
tabList
,
defaultValue
}
=
props
;
const
[
value
,
setValue
]
=
useState
(
defaultValue
||
tabList
.
filter
(
e
=>
!
e
.
hide
)[
0
].
value
);
const
{
tabList
,
defaultValue
}
=
props
;
const
[
value
,
setValue
]
=
useState
(
defaultValue
||
tabList
.
filter
((
e
)
=>
!
e
.
hide
)[
0
].
value
);
const
onChange
=
(
val
:
string
)
=>
{
setValue
(
val
);
};
const
onChange
=
(
val
:
string
)
=>
{
setValue
(
val
);
};
const
labelRender
=
(
item
:
ITabList
,
key
:
number
)
=>
{
return
(
<
Box
style=
{
{
display
:
"flex"
,
alignItems
:
"center"
}
}
>
{
item
.
icon
?
(
<
img
style=
{
{
width
:
"14px"
,
marginRight
:
"10px"
}
}
src=
{
value
===
item
.
value
?
item
.
iconed
:
item
.
icon
}
alt=
""
/>
)
:
(
""
)
}
<
Typography
sx=
{
{
fontSize
:
"14px"
,
fontWeight
:
"400"
}
}
>
{
item
.
label
}
</
Typography
>
</
Box
>
);
};
const
labelRender
=
(
item
:
ITabList
,
key
:
number
)
=>
{
return
(
<
Box
style=
{
{
display
:
"flex"
,
alignItems
:
"center"
}
}
>
{
item
.
icon
?
(
<
img
style=
{
{
width
:
"14px"
,
marginRight
:
"10px"
}
}
src=
{
value
===
item
.
value
?
item
.
iconed
:
item
.
icon
}
alt=
""
/>
)
:
(
""
)
}
<
Typography
sx=
{
{
fontSize
:
"14px"
,
fontWeight
:
"400"
}
}
>
{
item
.
label
}
</
Typography
>
</
Box
>
);
};
return
(
<
TabContext
value=
{
value
}
>
<
Box
sx=
{
{
borderBottom
:
1
,
borderColor
:
"#F0F2F5"
}
}
>
<
TabList
onChange=
{
(
e
:
any
,
val
:
string
)
=>
{
onChange
(
val
);
}
}
>
{
tabList
?.
map
((
item
,
key
)
=>
{
if
(
item
.
hide
)
return
""
;
return
(
<
Tab
key=
{
key
}
label=
{
labelRender
(
item
,
key
)
}
value=
{
item
.
value
}
id=
{
item
.
value
}
/>
);
})
}
</
TabList
>
</
Box
>
{
tabList
?.
map
((
item
)
=>
{
return
(
<
TabPanel
sx=
{
{
padding
:
"20px 0 0 0"
}
}
value=
{
item
.
value
}
key=
{
item
.
value
}
>
{
item
.
component
}
</
TabPanel
>
);
})
}
</
TabContext
>
);
return
(
<
TabContext
value=
{
value
}
>
<
Box
sx=
{
{
borderBottom
:
1
,
borderColor
:
"#F0F2F5"
}
}
>
<
TabList
onChange=
{
(
e
:
any
,
val
:
string
)
=>
{
onChange
(
val
);
}
}
>
{
tabList
?.
filter
((
item
)
=>
!
item
.
hide
)
.
map
((
item
,
key
)
=>
{
return
(
<
Tab
key=
{
key
}
label=
{
labelRender
(
item
,
key
)
}
value=
{
item
.
value
}
id=
{
item
.
value
}
/>
);
})
}
</
TabList
>
</
Box
>
{
tabList
?.
filter
((
item
)
=>
!
item
.
hide
)
.
map
((
item
)
=>
{
return
(
<
TabPanel
sx=
{
{
padding
:
"20px 0 0 0"
}
}
value=
{
item
.
value
}
key=
{
item
.
value
}
>
{
item
.
component
}
</
TabPanel
>
);
})
}
</
TabContext
>
);
};
const
handleEqual
=
(
prvProps
:
IProps
,
nextProps
:
IProps
)
=>
{
if
(
isEqual
(
prvProps
,
nextProps
))
{
return
true
;
}
return
false
;
if
(
isEqual
(
prvProps
,
nextProps
))
{
return
true
;
}
return
false
;
};
export
default
memo
(
Tabs
,
handleEqual
);
src/views/Project/ProjectWorkbench/workbenchTemplate/components/AddTemplate/index.module.css
0 → 100644
View file @
de4f0a6d
.addTemplateBox
{
width
:
100vw
;
height
:
100vh
;
position
:
fixed
;
top
:
0
;
left
:
0
;
background-color
:
rgba
(
0
,
0
,
0
,
0.78
);
z-index
:
100
;
display
:
flex
;
flex-direction
:
column
;
}
.closeBox
{
display
:
flex
;
justify-content
:
flex-end
;
height
:
40px
;
align-items
:
center
;
/* background-color: ; */
}
.content
{
flex
:
1
;
background-color
:
#fff
;
border-radius
:
16px
0
0
0
;
padding
:
24px
32px
;
box-sizing
:
border-box
;
overflow
:
scroll
;
}
.templateList
{
/* height: 2000px; */
display
:
flex
;
justify-content
:
space-between
;
flex-wrap
:
wrap
;
}
.templateLi
{
height
:
146px
;
box-sizing
:
border-box
;
padding
:
16px
20px
;
cursor
:
pointer
;
border
:
1px
solid
rgba
(
235
,
237
,
240
,
1
);
border-radius
:
4px
;
min-width
:
20%
;
flex
:
1
;
margin-right
:
16px
;
margin-bottom
:
16px
;
}
.templateLiCustom
{
height
:
194px
;
}
.templateLiHidden
{
visibility
:
hidden
;
}
.addCustomTemplate
{
height
:
194px
;
box-sizing
:
border-box
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
flex-direction
:
column
;
}
.addCustomTemplateText
{
margin-top
:
12px
;
line-height
:
22px
;
font-size
:
14px
;
color
:
rgba
(
138
,
144
,
153
,
1
);
}
.templateLi
:hover
{
box-shadow
:
6px
8px
22px
0px
rgba
(
0
,
24
,
57
,
0.08
);
}
.templateLi
:nth-child
(
4n
)
{
margin-right
:
0
;
}
.templateLiTop
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.templateTitle
{
font-size
:
14px
;
font-weight
:
600
;
color
:
#1e2633
;
margin-bottom
:
4px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
line-height
:
22px
;
}
.templateLiInfo
{
margin-bottom
:
8px
;
}
.templateLiInfoText
{
line-height
:
20px
;
font-size
:
12px
;
color
:
rgba
(
19
,
112
,
255
,
1
);
}
.templateLiDesc
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
-webkit-box-orient
:
vertical
;
-webkit-line-clamp
:
3
;
display
:
-webkit-box
;
height
:
54px
;
font-size
:
12px
;
color
:
rgba
(
138
,
144
,
153
,
1
);
}
.templateLiEditBox
{
display
:
flex
;
justify-content
:
flex-end
;
margin-top
:
16px
;
}
src/views/Project/ProjectWorkbench/workbenchTemplate/components/AddTemplate/index.tsx
0 → 100644
View file @
de4f0a6d
import
{
memo
,
useEffect
,
useState
,
useMemo
}
from
"react"
;
import
style
from
"./index.module.css"
;
import
classNames
from
"classnames"
;
import
CloseOutlinedIcon
from
"@mui/icons-material/CloseOutlined"
;
import
{
Box
,
Typography
}
from
"@mui/material"
;
import
RadioGroupOfButtonStyle
from
"@/components/CommonComponents/RadioGroupOfButtonStyle"
;
import
SearchIcon
from
"@mui/icons-material/Search"
;
import
Button
from
"@/components/mui/Button"
;
import
OutlinedInput
from
"@mui/material/OutlinedInput"
;
import
Checkbox
from
"@mui/material/Checkbox"
;
import
useMyRequest
from
"@/hooks/useMyRequest"
;
import
AddIcon
from
"@mui/icons-material/Add"
;
import
{
useStores
}
from
"@/store"
;
import
_
from
"lodash"
;
import
{
observer
}
from
"mobx-react-lite"
;
import
noData
from
"../../../../../../assets/project/noTemplate.svg"
;
import
{
getWorkbenchTemplate
,
deleteWorkbenchTemplate
,
getAddWorkbenchTemplate
,
addWorkbenchTemplate
,
}
from
"@/api/workbench_api"
;
import
{
toJS
}
from
"mobx"
;
type
IAddTemplateProps
=
{
setShowAddTemplate
:
any
;
};
const
radioOptions
=
[
{
value
:
"public"
,
label
:
"公共"
,
},
{
value
:
"custom"
,
label
:
"自定义"
,
},
];
const
AddTemplate
=
observer
((
props
:
IAddTemplateProps
)
=>
{
const
{
currentProjectStore
}
=
useStores
();
const
projectId
=
toJS
(
currentProjectStore
.
currentProjectInfo
.
id
);
const
productId
=
toJS
(
currentProjectStore
.
currentProductInfo
.
id
);
const
{
setShowAddTemplate
}
=
props
;
const
handleSearch
=
(
value
:
string
)
=>
{
console
.
log
(
value
);
};
/** 可增加模板列表 */
const
[
addTemplateList
,
setAddTemplateList
]
=
useState
([]);
/** 已选择增加的模板列表 */
const
[
selectTemplateData
,
setSelectTemplateData
]
=
useState
<
string
[]
>
([]);
const
[
templateType
,
setTemplateType
]
=
useState
(
"public"
);
const
handleRadio
=
(
value
:
string
)
=>
{
setTemplateType
(
value
);
};
const
handleAddTemplate
=
()
=>
{
console
.
log
(
"handleAddTemplate"
);
};
// 添加工作流模板-获取模板列表
const
{
run
:
getAddTemplateList
}
=
useMyRequest
(
getAddWorkbenchTemplate
,
{
onSuccess
:
(
result
:
any
)
=>
{
console
.
log
(
result
);
setAddTemplateList
(
result
.
data
);
// setOpenAddTemplate(true);
},
});
useEffect
(()
=>
{
getAddTemplateList
({
projectId
:
projectId
as
string
,
productId
:
productId
as
string
,
});
},
[
getAddTemplateList
,
projectId
,
productId
]);
const
hiddenBoxArr
=
useMemo
(()
=>
{
const
length
=
templateType
===
"public"
?
addTemplateList
.
length
:
addTemplateList
.
length
+
1
;
const
hiddenBoxNumber
=
4
-
(
length
%
4
);
const
arr
=
new
Array
(
hiddenBoxNumber
).
fill
(
""
);
return
arr
;
},
[
addTemplateList
,
templateType
]);
return
(
<
div
className=
{
style
.
addTemplateBox
}
>
<
div
className=
{
style
.
closeBox
}
>
<
CloseOutlinedIcon
sx=
{
{
color
:
"#ffffff"
,
marginRight
:
"10px"
,
cursor
:
"pointer"
}
}
onClick=
{
()
=>
{
setShowAddTemplate
(
false
);
}
}
/>
</
div
>
<
div
className=
{
style
.
content
}
>
<
Typography
sx=
{
{
fontSize
:
"18px"
,
fontWeight
:
"600"
,
color
:
"#1E2633"
}
}
>
添加工作流模版
</
Typography
>
<
Box
sx=
{
{
display
:
"flex"
,
justifyContent
:
"space-between"
,
alignItems
:
"center"
,
marginBottom
:
"20px"
,
}
}
>
<
OutlinedInput
onChange=
{
(
e
:
any
)
=>
{
_
.
debounce
(()
=>
{
// searchTemplateNameCallback(e.target.value);
handleSearch
(
e
.
target
.
value
);
},
200
)();
}
}
placeholder=
"输入关键词搜索"
size=
"small"
sx=
{
{
width
:
340
,
height
:
32
,
marginTop
:
"20px"
}
}
endAdornment=
{
<
SearchIcon
style=
{
{
color
:
"#8A9099"
}
}
/>
}
/>
<
Box
sx=
{
{
display
:
"flex"
,
justifyContent
:
"flex-end"
,
alignItems
:
"center"
,
}
}
>
<
RadioGroupOfButtonStyle
value=
{
templateType
}
radioOptions=
{
radioOptions
}
handleRadio=
{
handleRadio
}
></
RadioGroupOfButtonStyle
>
<
Button
// click={addTemplateCallback}
click=
{
handleAddTemplate
}
size=
{
"small"
}
style=
{
{
marginLeft
:
"12px"
,
}
}
text=
{
"添加模版"
+
(
selectTemplateData
.
length
===
0
?
""
:
`(${selectTemplateData.length})`
)
}
/>
</
Box
>
</
Box
>
{
templateType
===
"public"
&&
addTemplateList
.
length
===
0
&&
(
<
Box
sx=
{
{
display
:
"flex"
,
alignItems
:
"center"
,
flexDirection
:
"column"
,
minHeight
:
"calc(100vh - 376px)"
,
justifyContent
:
"center"
,
}
}
>
<
img
alt=
""
src=
{
noData
}
/>
<
Typography
sx=
{
{
fontSize
:
"12px"
,
fontWeight
:
"400"
,
color
:
"#8A9099"
}
}
>
暂无相关模版
</
Typography
>
</
Box
>
)
}
<
div
className=
{
style
.
templateList
}
>
{
templateType
!==
"public"
&&
(
<
div
className=
{
classNames
({
[
style
.
templateLi
]:
true
,
[
style
.
addCustomTemplate
]:
true
,
})
}
>
<
AddIcon
/>
<
span
className=
{
style
.
addCustomTemplateText
}
>
创建自定义模板
</
span
>
</
div
>
)
}
{
addTemplateList
.
map
((
item
:
any
,
index
)
=>
{
return
(
<
div
className=
{
classNames
({
[
style
.
templateLi
]:
true
,
[
style
.
templateLiCustom
]:
templateType
!==
"public"
,
})
}
key=
{
index
}
>
<
div
className=
{
style
.
templateLiTop
}
>
<
span
className=
{
style
.
templateTitle
}
>
{
item
.
title
}
</
span
>
<
Checkbox
size=
"small"
sx=
{
{
padding
:
"0px"
}
}
checked=
{
selectTemplateData
.
includes
(
item
.
id
)
}
/>
</
div
>
<
div
className=
{
style
.
templateLiInfo
}
>
<
span
className=
{
style
.
templateLiInfoText
}
style=
{
{
marginRight
:
"24px"
}
}
>
版本:
{
item
.
version
}
</
span
>
<
span
className=
{
style
.
templateLiInfoText
}
>
更新时间:
{
item
.
updateTime
}
</
span
>
</
div
>
<
div
className=
{
style
.
templateLiDesc
}
>
{
item
.
description
}
</
div
>
{
templateType
!==
"public"
&&
(
<
div
className=
{
style
.
templateLiEditBox
}
>
<
Button
click=
{
handleAddTemplate
}
size=
{
"small"
}
style=
{
{
height
:
"32px"
,
}
}
color=
"inherit"
text=
"编辑模板"
/>
</
div
>
)
}
</
div
>
);
})
}
{
hiddenBoxArr
.
length
!==
4
&&
hiddenBoxArr
.
map
((
item
,
index
)
=>
{
return
(
<
div
key=
{
`-${index}`
}
className=
{
classNames
({
[
style
.
templateLi
]:
true
,
[
style
.
templateLiHidden
]:
true
,
})
}
/>
);
})
}
</
div
>
</
div
>
</
div
>
);
});
export
default
AddTemplate
;
src/views/Project/ProjectWorkbench/workbenchTemplate/index.tsx
View file @
de4f0a6d
...
...
@@ -19,7 +19,8 @@ import Button from "@/components/mui/Button";
import
useMyRequest
from
"@/hooks/useMyRequest"
;
import
TemplateBox
from
"./components/templateBox"
;
import
SimpleDialog
from
"./components/simpleDialog"
;
import
AddTemplate
from
"./components/addTemplate"
;
// import AddTemplate from "./components/addTemplate";
import
AddTemplate
from
"./components/AddTemplate/index"
;
import
noData
from
"../../../../assets/project/noTemplate.svg"
;
import
{
getWorkbenchTemplate
,
...
...
@@ -62,6 +63,8 @@ const ProjectMembers = observer(() => {
}
);
const
[
showAddTemplate
,
setShowAddTemplate
]
=
useState
(
false
);
// 获取模板列表
const
{
run
:
getTemplateInfo
}
=
useMyRequest
(
getWorkbenchTemplate
,
{
onSuccess
:
(
result
:
any
)
=>
{
...
...
@@ -130,10 +133,11 @@ const ProjectMembers = observer(() => {
/** 增加模板 */
const
addTemplateBlock
=
()
=>
{
getAddTemplateList
({
projectId
:
currentProjectStore
.
currentProjectInfo
.
id
as
string
,
productId
:
"cadd"
,
});
setShowAddTemplate
(
true
);
// getAddTemplateList({
// projectId: currentProjectStore.currentProjectInfo.id as string,
// productId: "cadd",
// });
};
/** 关闭增加模板 */
...
...
@@ -231,7 +235,9 @@ const ProjectMembers = observer(() => {
{
templateList
&&
templateList
.
length
>
0
&&
templateList
.
map
((
item
,
key
)
=>
{
return
<
TemplateBox
data=
{
item
}
startDialog=
{
startDialog
}
/>;
return
(
<
TemplateBox
key=
{
key
}
data=
{
item
}
startDialog=
{
startDialog
}
/>
);
})
}
</
Box
>
)
}
...
...
@@ -260,7 +266,7 @@ const ProjectMembers = observer(() => {
</
Box
>
)
}
<
AddTemplate
{
/*
<AddTemplate
openAddTemplate={openAddTemplate}
closeAddTemplateBlock={closeAddTemplateBlock}
addTemplateList={addTemplateList}
...
...
@@ -268,7 +274,11 @@ const ProjectMembers = observer(() => {
selectTemplateData={selectTemplateData}
addTemplateCallback={addTemplateCallback}
searchTemplateNameCallback={searchTemplateNameCallback}
/>
/> */
}
{
showAddTemplate
&&
(
<
AddTemplate
setShowAddTemplate=
{
setShowAddTemplate
}
/>
)
}
{
customTemplateInfo
?.
show
?
<
WorkFlowEdit
/>
:
null
}
...
...
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