Commit 7f637d6c authored by wuyongsheng's avatar wuyongsheng

Merge branch 'feat-20220801' into 'release'

Feat 20220801

See merge request !83
parents 03e84843 6191c175
<?xml version="1.0" encoding="UTF-8"?>
<svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组</title>
<g id="上线UI" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="点击算子" transform="translate(-24.000000, -133.000000)">
<g id="编组-12" transform="translate(24.000000, 133.000000)">
<g id="编组-16" transform="translate(11.000000, 11.000000) scale(-1, 1) rotate(-90.000000) translate(-11.000000, -11.000000) ">
<rect id="矩形" x="0" y="0" width="22" height="22"></rect>
<g id="编组-14" transform="translate(5.500000, 8.250000)" stroke="#8A9099" stroke-linejoin="round" stroke-width="2">
<polyline id="路径-7备份" transform="translate(5.500000, 2.750000) scale(1, -1) translate(-5.500000, -2.750000) " points="0 5.5 5.5 2.98949133e-16 11 5.5"></polyline>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
...@@ -38,6 +38,9 @@ const SearchInput = (props: SearchInputProps) => { ...@@ -38,6 +38,9 @@ const SearchInput = (props: SearchInputProps) => {
height: "32px", height: "32px",
fontSize: "14px", fontSize: "14px",
paddingRight: "8px", paddingRight: "8px",
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
borderWidth: "1px",
},
"& .MuiOutlinedInput-notchedOutline": { "& .MuiOutlinedInput-notchedOutline": {
borderColor: '#DDE1E6', borderColor: '#DDE1E6',
}, },
......
...@@ -46,7 +46,7 @@ const theme = createTheme({ ...@@ -46,7 +46,7 @@ const theme = createTheme({
MuiButton: { MuiButton: {
styleOverrides: { styleOverrides: {
root: { root: {
minWidth: "48px", minWidth: "68px",
boxShadow: "none !important", boxShadow: "none !important",
"&.MuiButton-textError": { "&.MuiButton-textError": {
color: "rgba(255, 78, 78, 1)", color: "rgba(255, 78, 78, 1)",
...@@ -54,7 +54,7 @@ const theme = createTheme({ ...@@ -54,7 +54,7 @@ const theme = createTheme({
"&.MuiButton-outlinedError": { "&.MuiButton-outlinedError": {
color: "rgba(255, 78, 78, 1)", color: "rgba(255, 78, 78, 1)",
border: "1px solid rgba(255, 78, 78, 1)", border: "1px solid rgba(255, 78, 78, 1)",
"&:hover": { backgroundColor: 'transparent' }, "&:hover": { backgroundColor: "transparent" },
}, },
"& .MuiLoadingButton-loadingIndicator": { "& .MuiLoadingButton-loadingIndicator": {
color: "#fff", color: "#fff",
...@@ -110,16 +110,19 @@ const theme = createTheme({ ...@@ -110,16 +110,19 @@ const theme = createTheme({
"& p": { fontSize: "12px" }, "& p": { fontSize: "12px" },
height: "28px", height: "28px",
padding: "0 12px", padding: "0 12px",
minWidth: "60px",
}, },
sizeMedium: { sizeMedium: {
"& p": { fontSize: "14px" }, "& p": { fontSize: "14px" },
height: "32px", height: "32px",
padding: "0 16px", padding: "0 16px",
minWidth: "68px",
}, },
sizeLarge: { sizeLarge: {
"& p": { fontSize: "16px" }, "& p": { fontSize: "16px" },
height: "36px", height: "36px",
padding: "0 16px", padding: "0 16px",
minWidth: "80px",
}, },
}, },
}, },
......
...@@ -12,6 +12,7 @@ import FormControl from "@mui/material/FormControl"; ...@@ -12,6 +12,7 @@ import FormControl from "@mui/material/FormControl";
import FormHelperText from "@mui/material/FormHelperText"; import FormHelperText from "@mui/material/FormHelperText";
import Select, { SelectChangeEvent, SelectProps } from "@mui/material/Select"; import Select, { SelectChangeEvent, SelectProps } from "@mui/material/Select";
import { createTheme, ThemeProvider } from "@mui/material"; import { createTheme, ThemeProvider } from "@mui/material";
import selectActive from "@/assets/project/selectActive.svg";
export interface IOption { export interface IOption {
label: string; label: string;
...@@ -80,10 +81,26 @@ export default function MySelect(props: IProps) { ...@@ -80,10 +81,26 @@ export default function MySelect(props: IProps) {
}, },
}, },
input: { input: {
fontSize: "14px",
"&.Mui-disabled": { "&.Mui-disabled": {
background: "rgba(247, 248, 250, 1)", background: "rgba(247, 248, 250, 1)",
cursor: "not-allowed", cursor: "not-allowed",
}, },
img: {
display: "none",
},
},
},
},
MuiList: {
styleOverrides: {
root: {
"& .MuiButtonBase-root": {
"&.Mui-selected": {
backgroundColor: "#fff",
color: "#1370FF",
},
},
}, },
}, },
}, },
...@@ -91,9 +108,12 @@ export default function MySelect(props: IProps) { ...@@ -91,9 +108,12 @@ export default function MySelect(props: IProps) {
MuiMenuItem: { MuiMenuItem: {
styleOverrides: { styleOverrides: {
root: { root: {
paddingRight: "46px",
fontSize: "14px",
lineHeight: "24px",
":hover": { ":hover": {
backgroundColor: "#ECF4FF ", backgroundColor: "#F0F2F5 ",
color: "#1370FF", color: "#1E2633",
}, },
}, },
}, },
...@@ -152,6 +172,14 @@ export default function MySelect(props: IProps) { ...@@ -152,6 +172,14 @@ export default function MySelect(props: IProps) {
}, },
}, },
}, },
MuiPaper: {
styleOverrides: {
root: {
boxShadow: "0px 3px 10px 0px rgba(0,24,57,0.14)",
},
},
},
}, },
}); });
...@@ -186,6 +214,19 @@ export default function MySelect(props: IProps) { ...@@ -186,6 +214,19 @@ export default function MySelect(props: IProps) {
key={index} key={index}
> >
{item.label} {item.label}
{value === item.value && (
<img
style={{
width: "16px",
height: "16px",
position: "absolute",
top: "10px",
right: "12px",
}}
src={selectActive}
alt=""
/>
)}
</MenuItem> </MenuItem>
); );
}) })
......
.itemBox { .itemBox {
height: 50px; height: 50px;
padding: 16px 0; padding: 16px 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #f0f2f5; border-bottom: 1px solid #f0f2f5;
} }
.fileNameBox { .fileNameBox {
white-space: nowrap; white-space: nowrap;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
color: #1e2633; color: #1e2633;
max-width: 260px; max-width: 260px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
font-size: 14px; font-size: 14px;
} }
.contentBox {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.speedBox { .speedBox {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.rightBox { .rightBox {
cursor: pointer; cursor: pointer;
font-size: 12px; font-size: 12px;
color: #1370ff; color: #1370ff;
} }
.leftBox { .leftBox {
display: flex; display: flex;
} }
.span { .span {
color: #8a9099; color: #8a9099;
font-size: 12px; font-size: 12px;
} }
...@@ -98,7 +98,7 @@ const FileItem = observer((props: IProps) => { ...@@ -98,7 +98,7 @@ const FileItem = observer((props: IProps) => {
<div className={styles.itemBox}> <div className={styles.itemBox}>
<div className={styles.leftBox}> <div className={styles.leftBox}>
<img src={bkunyunFile} alt="" style={{ marginRight: 16 }} /> <img src={bkunyunFile} alt="" style={{ marginRight: 16 }} />
<div> <div className={styles.contentBox}>
<div> <div>
<b className={styles.fileNameBox} title={itemInfo?.name || ""}> <b className={styles.fileNameBox} title={itemInfo?.name || ""}>
{itemInfo?.name || ""} {itemInfo?.name || ""}
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生#A02208 yongsheng.wu@wholion.com * @Author: 吴永生#A02208 yongsheng.wu@wholion.com
* @Date: 2022-06-10 18:05:21 * @Date: 2022-06-10 18:05:21
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-09-01 15:54:33 * @LastEditTime: 2022-09-02 10:47:33
* @FilePath: /bkunyun/src/views/ConsoleLayout/components/TransferList/index.tsx * @FilePath: /bkunyun/src/views/ConsoleLayout/components/TransferList/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -20,16 +20,19 @@ const TranSferList = observer(() => { ...@@ -20,16 +20,19 @@ const TranSferList = observer(() => {
const uploadInfoStore = toJS(useGlobalStore("fileListStore")); const uploadInfoStore = toJS(useGlobalStore("fileListStore"));
return ( return (
<Box style={{ width: 520, padding: 20 }}> <Box style={{ width: 520 }}>
<MyTitle title="传输列表" /> <MyTitle style={{ padding: "12px 16px" }} title="传输列表" />
<Box <Box
style={{ style={{
display: "flex", display: "flex",
justifyContent: "space-between", justifyContent: "space-between",
alignItems: "center", alignItems: "center",
padding: "0 16px",
}} }}
> >
<Box style={{ color: "#8A9099" }}>请勿在上传过程中刷新页面!</Box> <Box style={{ color: "#8A9099", fontSize: 14 }}>
请勿在上传过程中刷新页面!
</Box>
<MySelect <MySelect
variant="standard" variant="standard"
value={"default"} value={"default"}
...@@ -43,7 +46,7 @@ const TranSferList = observer(() => { ...@@ -43,7 +46,7 @@ const TranSferList = observer(() => {
size="small" size="small"
/> />
</Box> </Box>
<div style={{ height: 400, overflow: "overlay" }}> <div style={{ height: 400, overflow: "overlay", padding: "0 16px" }}>
{uploadInfoStore?.fileList.map((item) => { {uploadInfoStore?.fileList.map((item) => {
return <FileItem fileItemInfo={item} key={item.id} />; return <FileItem fileItemInfo={item} key={item.id} />;
})} })}
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生 15770852798@163.com * @Author: 吴永生 15770852798@163.com
* @Date: 2022-08-02 11:43:28 * @Date: 2022-08-02 11:43:28
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-08-03 19:05:48 * @LastEditTime: 2022-09-02 12:01:12
* @FilePath: /bkunyun/src/views/MenuLayout/index.tsx * @FilePath: /bkunyun/src/views/MenuLayout/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -17,64 +17,80 @@ import classnames from "classnames"; ...@@ -17,64 +17,80 @@ import classnames from "classnames";
import { toJS } from "mobx"; import { toJS } from "mobx";
const MenuLayout = observer(() => { const MenuLayout = observer(() => {
const { permissionStore, currentProjectStore } = useStores(); const { permissionStore, currentProjectStore } = useStores();
let pathname = new URL(window.location.href).pathname; let pathname = new URL(window.location.href).pathname;
const navigate = useNavigate(); const navigate = useNavigate();
const productInfo = toJS(currentProjectStore.currentProductInfo); const productInfo = toJS(currentProjectStore.currentProductInfo);
// 未选择产品时 直接跳转home页面 // 未选择产品时 直接跳转home页面
if (!productInfo.name) { if (!productInfo.name) {
navigate("/home"); navigate("/home");
} }
const routerIcon = (id: string, isSelect: boolean) => { const routerIcon = (id: string, isSelect: boolean) => {
try { try {
const result = require(`../../assets/project/${id}${isSelect ? '_BLUE' : ''}.svg`) const result = require(`../../assets/project/${id}${
return result || '' isSelect ? "_BLUE" : ""
} catch (error) { }.svg`);
console.log(error) return result || "";
} } catch (error) {
} console.log(error);
}
};
return ( return (
<Box className={style.container}> <Box className={style.container}>
<Box className={style.aside}> <Box className={style.aside}>
{ {pathname.indexOf("userCenter") < 0 && <CurrentProject />}
pathname.indexOf('userCenter') < 0 && <CurrentProject /> <List
} sx={{
<List paddingTop: 0,
sx={{ paddingBottom: 0,
paddingTop: 0, }}
paddingBottom: 0, >
}} {permissionStore.sidebarRouters.map((item, index) => {
> if (item.show) {
{permissionStore.sidebarRouters.map((item, index) => { return (
if (item.show) { <li
return ( key={"sidebar" + index}
<li className={classnames({
key={"sidebar" + index} [style.listItem]: true,
className={classnames({ [style.active]: `/v3${item.path}` === pathname,
[style.listItem]: true, })}
[style.active]: `/v3${item.path}` === pathname, style={
})} `/v3${item.path}` === pathname
onClick={() => item.type === "page" && navigate(item.path)} ? { borderLeft: "3px solid #1370ff" }
> : undefined
<img className={style.routerIcon} src={routerIcon(item.id || '', `/v3${item.path}` === pathname) || undefined} alt='' /> }
<span style={{ verticalAlign: 'middle', fontWeight: '500' }}>{item.name}</span> onClick={() => item.type === "page" && navigate(item.path)}
</li> >
); <img
} className={style.routerIcon}
return null; src={
})} routerIcon(
</List> item.id || "",
</Box> `/v3${item.path}` === pathname
<Box className={style.content}> ) || undefined
<Outlet></Outlet> }
</Box> alt=""
</Box> />
); <span style={{ verticalAlign: "middle", fontWeight: "500" }}>
{item.name}
</span>
</li>
);
}
return null;
})}
</List>
</Box>
<Box className={style.content}>
<Outlet></Outlet>
</Box>
</Box>
);
}); });
export default MenuLayout; export default MenuLayout;
.rootTitle { .rootTitle {
border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0;
background-color: rgba(25, 118, 210, 0.08); background-color: rgba(25, 118, 210, 0.08);
/* background-color: rgba(25, 118, 210, 0.5); */ line-height: 44px;
line-height: 44px; color: rgba(30, 38, 51, 1);
color: rgba(30, 38, 51, 1); font-size: 14px;
font-size: 14px; font-weight: 600;
font-weight: 600; display: flex;
display: flex; justify-content: flex-start;
justify-content: flex-start; align-items: center;
align-items: center;
} }
.rootTitleActive { .rootTitleActive {
background-color: rgba(25, 118, 210, 0.2); background-color: rgba(25, 118, 210, 0.2);
} }
.bigFolderIcon { .bigFolderIcon {
margin: 0 9px; margin: 0 9px;
} }
.treeLabel { .treeLabel {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.treeLabelText{ .treeLabelText {
line-height: 44px; line-height: 44px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
-o-text-overflow:ellipsis; -o-text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
width: 320px; width: 320px;
} }
.labelFolderIcon { .labelFolderIcon {
margin-right: 9px; margin-right: 9px;
} }
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
top: 0; top: 0;
height: 56px; height: 56px;
background-color: #fff; background-color: #fff;
box-shadow: 0px 3px 10px 0px rgba(0, 24, 57, 0.04); box-shadow: 0px 3px 10px 0px rgba(0, 24, 57, 0.06);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.goBackIcon {
cursor: pointer;
}
.swTemplateTitle { .swTemplateTitle {
margin: 0 19px 0 8px; margin: 0 19px 0 8px;
line-height: 22px; line-height: 22px;
...@@ -39,7 +42,7 @@ ...@@ -39,7 +42,7 @@
} }
.swFormBox { .swFormBox {
background-color: #fff; background-color: #fff;
border-right: 1xp solid rgba(235, 237, 240, 1); border-right: 1px solid #ebedf0;
width: 360px; width: 360px;
overflow-y: overlay; overflow-y: overlay;
box-sizing: border-box; box-sizing: border-box;
......
...@@ -11,8 +11,6 @@ import { toJS } from "mobx"; ...@@ -11,8 +11,6 @@ import { toJS } from "mobx";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
import classNames from "classnames"; import classNames from "classnames";
import { useLocation, useNavigate } from "react-router-dom"; import { useLocation, useNavigate } from "react-router-dom";
import ArrowBackIosNewIcon from "@mui/icons-material/ArrowBackIosNew";
import IconButton from "@mui/material/IconButton";
import MyButton from "@/components/mui/MyButton"; import MyButton from "@/components/mui/MyButton";
import useMyRequest from "@/hooks/useMyRequest"; import useMyRequest from "@/hooks/useMyRequest";
...@@ -27,6 +25,7 @@ import jobStop from "@/assets/project/jobStop.svg"; ...@@ -27,6 +25,7 @@ import jobStop from "@/assets/project/jobStop.svg";
import jobRun from "@/assets/project/jobRun.svg"; import jobRun from "@/assets/project/jobRun.svg";
import fullScreen from "@/assets/project/fullScreen.svg"; import fullScreen from "@/assets/project/fullScreen.svg";
import partialScreen from "@/assets/project/partialScreen.svg"; import partialScreen from "@/assets/project/partialScreen.svg";
import goback from "@/assets/project/goback.svg";
import CloudEController from "@/api/fileserver/CloudEController"; import CloudEController from "@/api/fileserver/CloudEController";
import jobFail from "@/assets/project/jobFail.svg"; import jobFail from "@/assets/project/jobFail.svg";
import fileIcon from "@/assets/project/fileIcon.svg"; import fileIcon from "@/assets/project/fileIcon.svg";
...@@ -422,36 +421,17 @@ const ProjectSubmitWork = observer(() => { ...@@ -422,36 +421,17 @@ const ProjectSubmitWork = observer(() => {
{fullScreenShow ? null : ( {fullScreenShow ? null : (
<div className={styles.swHeader}> <div className={styles.swHeader}>
<div className={styles.swHeaderLeft}> <div className={styles.swHeaderLeft}>
<IconButton <img
color="primary"
onClick={onBack} onClick={onBack}
aria-label="upload picture" className={styles.goBackIcon}
component="span" src={goback}
size="small" alt=""
> />
<ArrowBackIosNewIcon
sx={{
color: "rgba(194, 198, 204, 1)",
width: "12px",
height: "12px",
}}
/>
</IconButton>
<div className={styles.swTemplateTitle}>{name}</div> <div className={styles.swTemplateTitle}>{name}</div>
</div> </div>
{returnPermission && ( {returnPermission && (
<div className={styles.swHeaderRight}> <div className={styles.swHeaderRight}>
{/* <MyPopconfirm
title={
state === "RUNNING"
? "正在运行的任务终止后将无法重新运行,确认继续吗?"
: "任务被删除后将无法恢复,确认继续吗?"
}
onConfirm={() => {
state === "RUNNING" ? onStopJob() : onDeleteJob();
}}
> */}
<MyButton <MyButton
text={ text={
["SUBMITTED", "RUNNING"].includes(state || "") ["SUBMITTED", "RUNNING"].includes(state || "")
...@@ -459,7 +439,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -459,7 +439,7 @@ const ProjectSubmitWork = observer(() => {
: "删除" : "删除"
} }
variant="outlined" variant="outlined"
color="secondary" color="error"
onClick={(e: any) => onClick={(e: any) =>
handleShowPopper( handleShowPopper(
e, e,
...@@ -468,9 +448,7 @@ const ProjectSubmitWork = observer(() => { ...@@ -468,9 +448,7 @@ const ProjectSubmitWork = observer(() => {
: "任务被删除后将无法恢复,确认继续吗?" : "任务被删除后将无法恢复,确认继续吗?"
) )
} }
// click={onStopJob}
></MyButton> ></MyButton>
{/* </MyPopconfirm> */}
</div> </div>
)} )}
</div> </div>
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
.cardLeft { .cardLeft {
flex: 1; flex: 1;
cursor: pointer;
padding: 16px 24px; padding: 16px 24px;
} }
......
.box {
height: calc(100vh - 57px);
overflow: overlay;
}
.topFixed { .topFixed {
position: sticky; position: sticky;
top: 0; top: 0;
...@@ -5,6 +10,10 @@ ...@@ -5,6 +10,10 @@
background-color: #fff; background-color: #fff;
} }
.topFixedShadow {
box-shadow: 0 5px 4px -4px rgb(0, 0, 0, 0.12);
}
.basicInformation { .basicInformation {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -125,4 +134,4 @@ ...@@ -125,4 +134,4 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: calc(100vh - 100px); height: calc(100vh - 100px);
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react"; ...@@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
import _ from "lodash"; import _ from "lodash";
import moment from "moment"; import moment from "moment";
import classNames from "classnames";
import useMyRequest from "@/hooks/useMyRequest"; import useMyRequest from "@/hooks/useMyRequest";
import { getOverviewInfo, getTaskOverview } from "@/api/project_api"; import { getOverviewInfo, getTaskOverview } from "@/api/project_api";
...@@ -27,6 +28,16 @@ const ProjectOverview = observer(() => { ...@@ -27,6 +28,16 @@ const ProjectOverview = observer(() => {
const [size, setSize] = useState(999); const [size, setSize] = useState(999);
// 选择近7天or近15天or近30天 // 选择近7天or近15天or近30天
const [day, setDay] = useState("7"); const [day, setDay] = useState("7");
// 滚轮是否到顶,判断是否显示阴影
const [isTop, setIsTop] = useState(true)
// 滚动滚轮时监听是否到顶
const onscroll = (e: any) => {
if (e.target.scrollTop <= 0) {
setIsTop(true)
} else {
setIsTop(false)
}
}
// 获取概览基本信息 // 获取概览基本信息
const { run: getOverview, loading } = useMyRequest(getOverviewInfo, { const { run: getOverview, loading } = useMyRequest(getOverviewInfo, {
onSuccess: (result: any) => { onSuccess: (result: any) => {
...@@ -100,8 +111,13 @@ const ProjectOverview = observer(() => { ...@@ -100,8 +111,13 @@ const ProjectOverview = observer(() => {
); );
} else { } else {
return ( return (
<> <div className={style.box} onScroll={onscroll}>
<div className={style.topFixed}> <div
className={classNames({
[style.topFixed]: true,
[style.topFixedShadow]: !isTop,
})}
>
<div className={style.basicInformation}> <div className={style.basicInformation}>
<div> <div>
<div className={style.titleBox}> <div className={style.titleBox}>
...@@ -227,7 +243,7 @@ const ProjectOverview = observer(() => { ...@@ -227,7 +243,7 @@ const ProjectOverview = observer(() => {
); );
})} })}
</div> </div>
</> </div>
); );
} }
} else { } else {
......
...@@ -58,6 +58,7 @@ const ProjectWorkbench = observer(() => { ...@@ -58,6 +58,7 @@ const ProjectWorkbench = observer(() => {
lineHeight: "26px", lineHeight: "26px",
fontWeight: "600", fontWeight: "600",
color: "#1E2633", color: "#1E2633",
marginBottom: "3px",
}} }}
> >
工作台 工作台
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
.tabBox { .tabBox {
padding: 16px 0px 16px 24px; padding: 16px 0px 16px 24px;
cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
...@@ -95,6 +96,12 @@ ...@@ -95,6 +96,12 @@
justify-content: center; justify-content: center;
} }
.jobOperateImgBox:hover {
padding: 8px;
border-radius: 4px;
background-color: #ebedf0;
}
.tabUpdate { .tabUpdate {
cursor: pointer; cursor: pointer;
width: 32px; width: 32px;
...@@ -109,7 +116,8 @@ ...@@ -109,7 +116,8 @@
border-radius: 4px; border-radius: 4px;
} }
.pagination { .pagination {
padding: 19px 0; padding: 19px 0 0px;
display: flex; display: flex;
justify-content: end; justify-content: end;
align-items: center;
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生#A02208 yongsheng.wu@wholion.com * @Author: 吴永生#A02208 yongsheng.wu@wholion.com
* @Date: 2022-05-31 10:18:13 * @Date: 2022-05-31 10:18:13
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-09-01 16:35:02 * @LastEditTime: 2022-09-02 14:45:04
* @FilePath: /bkunyun/src/views/Project/ProjectSetting/index.tsx * @FilePath: /bkunyun/src/views/Project/ProjectSetting/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -480,6 +480,7 @@ const ProjectMembers = observer(() => { ...@@ -480,6 +480,7 @@ const ProjectMembers = observer(() => {
<img <img
alt="" alt=""
src={jobDel} src={jobDel}
className={styles.jobOperateImgBox}
style={{ cursor: "pointer" }} style={{ cursor: "pointer" }}
onClick={(event) => { onClick={(event) => {
event.stopPropagation(); event.stopPropagation();
...@@ -495,14 +496,14 @@ const ProjectMembers = observer(() => { ...@@ -495,14 +496,14 @@ const ProjectMembers = observer(() => {
); );
})} })}
</MyCircularProgress> </MyCircularProgress>
<div className={styles.pagination}>
<MyPagination
page={page}
pageChange={handleChangePage}
count={count || jobList.length}
/>
</div>
</Box> </Box>
<div className={styles.pagination}>
<MyPagination
page={page}
pageChange={handleChangePage}
count={count || jobList.length}
/>
</div>
{/* <TablePagination {/* <TablePagination
rowsPerPageOptions={[5, 10, 20, 50]} rowsPerPageOptions={[5, 10, 20, 50]}
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
} }
.headerBoxShadow { .headerBoxShadow {
box-shadow: 0 5px 4px -4px rgb(0, 0, 0, 0.15); box-shadow: 0 5px 4px -4px rgb(0, 0, 0, 0.12);
} }
.templateBox { .templateBox {
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
margin-bottom: 16px; margin-bottom: 16px;
position: relative; position: relative;
box-sizing: border-box; box-sizing: border-box;
transition: box-shadow .2s cubic-bezier(0, 0, 1, 1);
} }
.templateBlock:hover { .templateBlock:hover {
box-shadow: 6px 8px 22px 0px rgba(0, 24, 57, 0.08); box-shadow: 6px 8px 22px 0px rgba(0, 24, 57, 0.08);
......
...@@ -10,7 +10,8 @@ import { memo, useEffect, useState } from "react"; ...@@ -10,7 +10,8 @@ import { memo, useEffect, useState } from "react";
import { Box, Typography } from "@mui/material"; import { Box, Typography } from "@mui/material";
import { toJS } from "mobx"; import { toJS } from "mobx";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
import Add from "@mui/icons-material/Add"; import FormatListBulletedRoundedIcon from '@mui/icons-material/FormatListBulletedRounded';
import MyButton from "@/components/mui/MyButton"; import MyButton from "@/components/mui/MyButton";
import SearchInput from "@/components/BusinessComponents/SearchInput"; import SearchInput from "@/components/BusinessComponents/SearchInput";
...@@ -115,7 +116,7 @@ const ProjectMembers = observer(() => { ...@@ -115,7 +116,7 @@ const ProjectMembers = observer(() => {
{isPass("PROJECT_WORKBENCH_FLOES_ADD", "MANAGER") && ( {isPass("PROJECT_WORKBENCH_FLOES_ADD", "MANAGER") && (
<MyButton <MyButton
text={"管理工作流模板"} text={"管理工作流模板"}
img={<Add />} startIcon={<FormatListBulletedRoundedIcon fontSize="small"/>}
onClick={addTemplateBlock} onClick={addTemplateBlock}
size={"medium"} size={"medium"}
/> />
......
.batchNode { .batchNode {
background-color: #fff; background-color: #fff;
border-radius: 4px; border-radius: 4px;
box-shadow: 0px 3px 10px 0px rgba(0, 24, 57, 0.06);
/* padding: 12px 20px; */ /* padding: 12px 20px; */
border: 1px solid #e6e8eb; /* border: 1px solid #e6e8eb; */
border-left: 4px solid #e6e8eb; border-left: 4px solid #e6e8eb;
/* display: flex; */ /* display: flex; */
align-items: center; align-items: center;
} }
.batchNode:hover {
box-shadow: 0px 3px 10px 0px rgba(0, 24, 57, 0.14);
}
.doneBatchNode { .doneBatchNode {
border-left: 4px solid #0dd09b; border-left: 4px solid #0dd09b;
} }
...@@ -45,7 +50,7 @@ ...@@ -45,7 +50,7 @@
/* transform: translateX(-50%) rotate(-90deg); */ /* transform: translateX(-50%) rotate(-90deg); */
} }
.handleBox::before{ .handleBox::before {
content: ""; content: "";
position: absolute; position: absolute;
left: -4px; left: -4px;
......
...@@ -44,3 +44,9 @@ ...@@ -44,3 +44,9 @@
width: 14px; width: 14px;
height: 14px; height: 14px;
} }
.handleBox {
background: #fff;
width: 6px;
height: 6px;
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: 吴永生#A02208 yongsheng.wu@wholion.com * @Author: 吴永生#A02208 yongsheng.wu@wholion.com
* @Date: 2022-07-12 11:29:46 * @Date: 2022-07-12 11:29:46
* @LastEditors: 吴永生 15770852798@163.com * @LastEditors: 吴永生 15770852798@163.com
* @LastEditTime: 2022-08-31 17:09:31 * @LastEditTime: 2022-09-02 14:23:07
* @FilePath: /bkunyun/src/views/Project/components/Flow/components/FlowNode/index.tsx * @FilePath: /bkunyun/src/views/Project/components/Flow/components/FlowNode/index.tsx
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
...@@ -86,8 +86,6 @@ const FlowNode = (props: any) => { ...@@ -86,8 +86,6 @@ const FlowNode = (props: any) => {
className={styles.handleBox} className={styles.handleBox}
id={item.name} id={item.name}
style={{ style={{
background: "#fff ",
border: "1px solid #D1D6DE",
...inStyle, ...inStyle,
left: index * 24 + 16, left: index * 24 + 16,
}} }}
...@@ -98,8 +96,10 @@ const FlowNode = (props: any) => { ...@@ -98,8 +96,10 @@ const FlowNode = (props: any) => {
); );
}) })
: null} : null}
<div style={{display: 'flex', alignItems: 'center'}}> <div style={{ display: "flex", alignItems: "center" }}>
<span style={{fontSize: '12px', lineHeight: '24px'}}>{title || ""} {showVersion && version}</span> <span style={{ fontSize: "12px", lineHeight: "20px" }}>
{title || ""} {showVersion && version}
</span>
{flowType !== "edit" && isCheck ? ( {flowType !== "edit" && isCheck ? (
<span className={styles.successDot}></span> <span className={styles.successDot}></span>
) : null} ) : null}
...@@ -108,7 +108,7 @@ const FlowNode = (props: any) => { ...@@ -108,7 +108,7 @@ const FlowNode = (props: any) => {
) : null} ) : null}
{getImgUrl(executionStatus) && ( {getImgUrl(executionStatus) && (
<img <img
style={{ marginLeft: "6px" }} style={{ marginLeft: "6px", width: "12px", height: "12px" }}
src={getImgUrl(executionStatus)} src={getImgUrl(executionStatus)}
alt="" alt=""
/> />
...@@ -122,8 +122,6 @@ const FlowNode = (props: any) => { ...@@ -122,8 +122,6 @@ const FlowNode = (props: any) => {
className={styles.handleBox} className={styles.handleBox}
id={item.name} id={item.name}
style={{ style={{
background: "#fff ",
border: "1px solid #D1D6DE",
...outStyle, ...outStyle,
left: index * 24 + 16, left: index * 24 + 16,
}} }}
......
...@@ -11,7 +11,7 @@ import ReactFlow, { ...@@ -11,7 +11,7 @@ import ReactFlow, {
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import { uuid } from "@/utils/util"; import { uuid } from "@/utils/util";
import { IParameter, ITask } from "../../ProjectSubmitWork/interface"; import { IParameter, ITask } from "../../ProjectSubmitWork/interface";
import { ILine } from "./interface"; import { ILine } from "./interface";
import BatchNode from "./components/BatchNode"; import BatchNode from "./components/BatchNode";
import FlowNode from "./components/FlowNode"; import FlowNode from "./components/FlowNode";
...@@ -61,7 +61,7 @@ const Flow = (props: IProps) => { ...@@ -61,7 +61,7 @@ const Flow = (props: IProps) => {
showControls = true, showControls = true,
...other ...other
} = props; } = props;
/** 自定义的节点类型 */ /** 自定义的节点类型 */
const nodeTypes = useMemo(() => { const nodeTypes = useMemo(() => {
return { batchNode: BatchNode, flowNode: FlowNode }; return { batchNode: BatchNode, flowNode: FlowNode };
...@@ -311,22 +311,25 @@ const Flow = (props: IProps) => { ...@@ -311,22 +311,25 @@ const Flow = (props: IProps) => {
/** tasks 数据 */ /** tasks 数据 */
tasks: tasks, tasks: tasks,
} }
: { selectedStatus: externalSelectedNodeId : {
? externalSelectedNodeId.includes(item.id) selectedStatus: externalSelectedNodeId
: inSideFlowNodeId === item.id,}), ? externalSelectedNodeId.includes(item.id)
: inSideFlowNodeId === item.id,
}),
/** 输入输出圆点状态 */ /** 输入输出圆点状态 */
// dotStatus: nodesInputAndOutputStatus(item.id), // dotStatus: nodesInputAndOutputStatus(item.id),
/** 样式 */ /** 样式 */
style: { style: {
...getBatchStyle(item), ...getBatchStyle(item),
marginTop: '-44px', marginTop: "-44px",
padding: "12px 20px", padding: "12px 20px 20px 20px",
}, },
}, },
/** 坐标 */ /** 坐标 */
position: { position: {
x: Number(item.position?.x) || 0, /** 流算子生成的时候多加了15 兼容历史模版数据 直接这边减去15 */
x: Number(item.position?.x - 15) || 0,
y: Number(item.position?.y) || 0, y: Number(item.position?.y) || 0,
}, },
/** /**
...@@ -379,11 +382,11 @@ const Flow = (props: IProps) => { ...@@ -379,11 +382,11 @@ const Flow = (props: IProps) => {
style: { stroke: "#1370FF", strokeWidth: 2 }, style: { stroke: "#1370FF", strokeWidth: 2 },
animated: true, animated: true,
} }
: {}), : { stroke: "#D1D6DE" }),
/** 点击batch节点选中 */ /** 点击batch节点选中 */
...(item?.batchId === newSelectId ...(item?.batchId === newSelectId
? { style: { stroke: "#1370FF" }, animated: true } ? { style: { stroke: "#1370FF" }, animated: true }
: {}), : { stroke: "#D1D6DE" }),
labelStyle: { fill: "#8A9099" }, labelStyle: { fill: "#8A9099" },
labelBgStyle: { fill: "#F7F8FA " }, labelBgStyle: { fill: "#F7F8FA " },
label: item.label ? `(${item.label})` : "", label: item.label ? `(${item.label})` : "",
...@@ -641,7 +644,7 @@ const Flow = (props: IProps) => { ...@@ -641,7 +644,7 @@ const Flow = (props: IProps) => {
// const onNodesChange = (val: any)=>{ // const onNodesChange = (val: any)=>{
// // 自定义change事件 不允许react flow组件本身删除事件 // // 自定义change事件 不允许react flow组件本身删除事件
// // return // // return
// } // }
// const onEdgesChange = (val: any) =>{ // const onEdgesChange = (val: any) =>{
......
...@@ -56,7 +56,8 @@ ...@@ -56,7 +56,8 @@
border-top: 1px solid #f0f2f5; border-top: 1px solid #f0f2f5;
} }
.noProjectBox { .noProjectBox {
color: #edeff2; color: #8a9099;
font-size: 14px;
height: 48px; height: 48px;
line-height: 48px; line-height: 48px;
text-align: center; text-align: center;
......
...@@ -3,6 +3,17 @@ ...@@ -3,6 +3,17 @@
border-radius: 4px; border-radius: 4px;
cursor: grab; cursor: grab;
padding: 16px 16px 0 24px; padding: 16px 16px 0 24px;
background-color: #fff;
}
.operatorItemBox:hover {
position: relative;
z-index: 1;
top: -1px;
left: 24px;
box-shadow: 6px 8px 22px 0px rgba(0, 24, 57, 0.08);
}
.operatorItemBox:hover .footerBox {
border-bottom: none;
} }
.dragBox { .dragBox {
...@@ -34,15 +45,17 @@ ...@@ -34,15 +45,17 @@
.versionBox { .versionBox {
display: inline-block; display: inline-block;
background: #f0f2f5;
color: #1e2633; color: #1e2633;
cursor: pointer;
padding: 1px 9px;
border-radius: 2px; border-radius: 2px;
font-size: 12px; font-size: 12px;
padding: 2px 8px; line-height: 20px;
background-color: #f0f2f5;
} }
.searchBox { .searchBox {
padding: 0 24px 16px 24px; padding: 0 24px 8px 24px;
} }
.footerBox { .footerBox {
...@@ -60,16 +73,8 @@ ...@@ -60,16 +73,8 @@
overflow-y: overlay; overflow-y: overlay;
height: calc(100% - 48px); height: calc(100% - 48px);
position: relative; position: relative;
overflow-x: visible;
} }
.versionBox {
background: #e6e8eb;
color: #1e2633;
cursor: pointer;
padding: 0 8px;
border-radius: 2px;
}
.noData { .noData {
display: flex; display: flex;
justify-content: center; justify-content: center;
......
...@@ -13,6 +13,7 @@ import { IResponse } from "@/api/http"; ...@@ -13,6 +13,7 @@ import { IResponse } from "@/api/http";
import { fetchOperatorList } from "@/api/workbench_api"; import { fetchOperatorList } from "@/api/workbench_api";
import { useStores } from "@/store"; import { useStores } from "@/store";
import noTemplate from "@/assets/project/noTemplate.svg"; import noTemplate from "@/assets/project/noTemplate.svg";
import SearchInput from "@/components/BusinessComponents/SearchInput";
import styles from "./index.module.css"; import styles from "./index.module.css";
...@@ -198,7 +199,18 @@ const OperatorList = observer((props: IOperatorListProps) => { ...@@ -198,7 +199,18 @@ const OperatorList = observer((props: IOperatorListProps) => {
return ( return (
<div className={styles.operatorListBox}> <div className={styles.operatorListBox}>
<div className={styles.searchBox}> <div className={styles.searchBox}>
<OutlinedInput <SearchInput
onChange={(e) => {
if (e.target.value?.length > 30) return;
setKeyword(e.target.value);
}}
value={keyword}
placeholder="输入关键词搜索"
onKeyUp={handleEnterCode}
size="medium"
sx={{ height: 32, width: "100%" }}
/>
{/* <OutlinedInput
onChange={(e) => { onChange={(e) => {
if (e.target.value?.length > 30) return; if (e.target.value?.length > 30) return;
setKeyword(e.target.value); setKeyword(e.target.value);
...@@ -209,7 +221,7 @@ const OperatorList = observer((props: IOperatorListProps) => { ...@@ -209,7 +221,7 @@ const OperatorList = observer((props: IOperatorListProps) => {
size="small" size="small"
sx={{ height: 32, width: "100%" }} sx={{ height: 32, width: "100%" }}
endAdornment={<SearchIcon style={{ color: "#8A9099" }} />} endAdornment={<SearchIcon style={{ color: "#8A9099" }} />}
/> /> */}
</div> </div>
<div className={styles.listBox}> <div className={styles.listBox}>
{operatorListData.filter((item) => item.type === "BATCH")?.length ? ( {operatorListData.filter((item) => item.type === "BATCH")?.length ? (
......
...@@ -25,6 +25,19 @@ ...@@ -25,6 +25,19 @@
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.goBackIcon {
margin-right: 8px;
cursor: pointer;
}
/* .goBackIcon:hover:{
color: ;
} */
.goBack {
cursor: pointer;
color: #1e2633;
font-size: 14px;
font-weight: 600;
}
.swContent { .swContent {
display: flex; display: flex;
height: calc(100vh - 56px); height: calc(100vh - 56px);
...@@ -53,8 +66,8 @@ ...@@ -53,8 +66,8 @@
color: RGBA(66, 141, 255, 1); color: RGBA(66, 141, 255, 1);
cursor: pointer; cursor: pointer;
background-color: #fff; background-color: #fff;
transition: width 1s; transition: width 0.4s;
-webkit-transition: width 1s; -webkit-transition: width 0.4s;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
justify-content: start; justify-content: start;
...@@ -74,5 +87,5 @@ ...@@ -74,5 +87,5 @@
} }
.radiosBox { .radiosBox {
background-color: #fff; background-color: #fff;
padding: 24px; padding: 24px 24px 20px;
} }
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import React, { useCallback, useEffect, useState, useMemo } from "react"; import React, { useCallback, useEffect, useState, useMemo } from "react";
import ArrowBackIosNewIcon from "@mui/icons-material/ArrowBackIosNew";
import IconButton from "@mui/material/IconButton";
import _ from "lodash"; import _ from "lodash";
import { observer } from "mobx-react-lite"; import { observer } from "mobx-react-lite";
...@@ -26,6 +24,7 @@ import useMyRequest from "@/hooks/useMyRequest"; ...@@ -26,6 +24,7 @@ import useMyRequest from "@/hooks/useMyRequest";
import CustomOperator from "../CustomOperator"; import CustomOperator from "../CustomOperator";
import SaveCustomTemplate from "./components/SaveCustomTemplate"; import SaveCustomTemplate from "./components/SaveCustomTemplate";
import AddIcon from "@mui/icons-material/Add"; import AddIcon from "@mui/icons-material/Add";
import goback from "@/assets/project/goback.svg";
import styles from "./index.module.css"; import styles from "./index.module.css";
...@@ -189,8 +188,18 @@ const WorkFlowEdit = observer((props: IProps) => { ...@@ -189,8 +188,18 @@ const WorkFlowEdit = observer((props: IProps) => {
return ( return (
<div className={styles.swBox}> <div className={styles.swBox}>
<div className={styles.swHeader}> <div className={styles.swHeader}>
<div className={styles.swHeaderLeft}> <div
<IconButton className={styles.swHeaderLeft}
onClick={(e: any) =>
handleShowPopper(
e,
"返回后,当前页面已填写内容将不保存,确认返回吗?"
)
}
>
<img className={styles.goBackIcon} src={goback} alt="" />
<span className={styles.goBack}>返回</span>
{/* <IconButton
color="primary" color="primary"
aria-label="upload picture" aria-label="upload picture"
component="span" component="span"
...@@ -209,7 +218,8 @@ const WorkFlowEdit = observer((props: IProps) => { ...@@ -209,7 +218,8 @@ const WorkFlowEdit = observer((props: IProps) => {
height: "12px", height: "12px",
}} }}
/> />
</IconButton> 返回
</IconButton> */}
</div> </div>
<div className={styles.swHeaderRight}> <div className={styles.swHeaderRight}>
<MyButton text="保存" onClick={() => handlePreserve()}></MyButton> <MyButton text="保存" onClick={() => handlePreserve()}></MyButton>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment