Commit f063d064 authored by chenshouchao's avatar chenshouchao

nothing

parent b51d512d
...@@ -7,7 +7,7 @@ main::-webkit-scrollbar { ...@@ -7,7 +7,7 @@ main::-webkit-scrollbar {
div::-webkit-scrollbar-track, div::-webkit-scrollbar-track,
main::-webkit-scrollbar-track { main::-webkit-scrollbar-track {
background-color: #fff; background-color: transparent;
-webkit-border-radius: 3em; -webkit-border-radius: 3em;
-moz-border-radius: 3em; -moz-border-radius: 3em;
border-radius: 3em; border-radius: 3em;
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
.taskProgress { .taskProgress {
height: 32px; height: 32px;
margin: 12px 0; margin: 12px 0 16px;
} }
.progressInfo { .progressInfo {
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
margin-right: 8px; margin-right: 8px;
} }
.outputTitle{ .outputTitle {
display: inline-block; display: inline-block;
height: 22px; height: 22px;
line-height: 22px; line-height: 22px;
......
.topFixed { .topFixed {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 10; z-index: 10;
background-color: #fff; background-color: #fff;
} }
.basicInformation { .basicInformation {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 0 24px; margin: 0 24px;
padding: 20px 0; padding: 24px 0 20px;
border-bottom: 1px solid #EDEFF2; border-bottom: 1px solid #edeff2;
} }
.basicInformationRight { .basicInformationRight {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 12px; font-size: 12px;
} }
.titleBox { .titleBox {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
} }
.projectName { .projectName {
margin-left: 12px; margin-left: 12px;
font-size: 18px; font-size: 18px;
line-height: 26px; line-height: 26px;
font-weight: 600; font-weight: 600;
} }
.otherInformation { .otherInformation {
display: flex; display: flex;
font-size: 12px; font-size: 12px;
margin-top: 16px; margin-top: 16px;
} }
.informationcolor { .informationcolor {
color: #8A9099; color: #8a9099;
} }
.otherInformationBox { .otherInformationBox {
margin-right: 24px; margin-right: 24px;
color: #565C66; color: #565c66;
} }
.otherInformationBoxRight { .otherInformationBoxRight {
line-height: 22px; line-height: 22px;
margin-bottom: 4px; margin-bottom: 4px;
color: #565C66; color: #565c66;
} }
.numberDisplay { .numberDisplay {
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
color: #1E2633; color: #1e2633;
margin-right: 8px; margin-right: 8px;
} }
.verticalLine { .verticalLine {
height: 32px; height: 32px;
border-right: 1px solid #EBEDF0; border-right: 1px solid #ebedf0;
margin-left: 28px; margin-left: 28px;
margin-right: 28px; margin-right: 28px;
} }
.searchBox { .searchBox {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 24px 24px 0 24px; margin: 24px 24px 0 24px;
padding-bottom: 20px; padding-bottom: 20px;
} }
.searchLineLeft { .searchLineLeft {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.taskOverview { .taskOverview {
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
margin-right: 18px; margin-right: 18px;
} }
.projectDataSearch { .projectDataSearch {
padding-left: 12px; padding-left: 12px;
padding-right: 8px; padding-right: 8px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #ebedf0; border: 1px solid #ebedf0;
} }
.taskDisplay { .taskDisplay {
position: relative; position: relative;
margin: 0 24px 20px; margin: 0 24px 20px;
padding-bottom: 16px; padding-bottom: 16px;
overflow: hidden; overflow: hidden;
background: #F7F8FA; background: #f7f8fa;
border-radius: 8px; border-radius: 8px;
min-height: calc(100vh - 291px); min-height: calc(100vh - 291px);
} }
.noDataBox { .noDataBox {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.noDataText { .noDataText {
margin-top: 8px; margin-top: 8px;
font-size: 14px; font-size: 14px;
line-height: 22px; line-height: 22px;
color: #8a9099; color: #8a9099;
} }
.loadingBox { .loadingBox {
width: 100%; width: 100%;
display: flex; display: flex;
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
import React, { useState, useCallback, useEffect, useMemo } from "react"; 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 useMyRequest from "@/hooks/useMyRequest"; import useMyRequest from "@/hooks/useMyRequest";
import { import { getOverviewInfo, getTaskOverview } from "@/api/project_api";
getOverviewInfo,
getTaskOverview,
} from "@/api/project_api";
import { useStores } from "@/store/index"; import { useStores } from "@/store/index";
import NoProject from "@/components/BusinessComponents/NoProject"; import NoProject from "@/components/BusinessComponents/NoProject";
import RadioGroupOfButtonStyle from "@/components/CommonComponents/RadioGroupOfButtonStyle"; import RadioGroupOfButtonStyle from "@/components/CommonComponents/RadioGroupOfButtonStyle";
import Loading from "@/views/Loading"; import Loading from "@/views/Loading";
import SearchInput from "@/components/BusinessComponents/SearchInput"; import SearchInput from "@/components/BusinessComponents/SearchInput";
import TaskCard from './TaskCard' import TaskCard from "./TaskCard";
import projectImg from "@/assets/project/projectIconSmall.svg"; import projectImg from "@/assets/project/projectIconSmall.svg";
import noFile from "@/assets/project/noFile.svg"; import noFile from "@/assets/project/noFile.svg";
import style from "./index.module.css"; import style from "./index.module.css";
const ProjectOverview = observer(() => { const ProjectOverview = observer(() => {
const { currentProjectStore } = useStores(); const { currentProjectStore } = useStores();
// 概览基本信息 // 概览基本信息
const [overviewInfo, setOverviewInfo] = useState<any>({}); const [overviewInfo, setOverviewInfo] = useState<any>({});
// 任务概览列表 // 任务概览列表
const [taskList, setTaskList] = useState([]) const [taskList, setTaskList] = useState([]);
const [jobName, setJobName] = useState('') const [jobName, setJobName] = useState("");
const [page, setPage] = useState(0) const [page, setPage] = useState(0);
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 { run: getOverview, loading } = useMyRequest(getOverviewInfo, { const { run: getOverview, loading } = useMyRequest(getOverviewInfo, {
onSuccess: (result: any) => { onSuccess: (result: any) => {
setOverviewInfo(result.data); setOverviewInfo(result.data);
}, },
}); });
// 获取任务概览 // 获取任务概览
const { run: getTaskOverviewList } = useMyRequest(getTaskOverview, { const { run: getTaskOverviewList } = useMyRequest(getTaskOverview, {
onSuccess: (result: any) => { onSuccess: (result: any) => {
setTaskList(result.data.content); setTaskList(result.data.content);
}, },
}); });
useEffect(() => {
// 切项目时重置为初始7
setDay("7");
if (currentProjectStore.currentProjectInfo.id) {
getOverview({
id: currentProjectStore.currentProjectInfo.id as string,
});
}
}, [currentProjectStore.currentProjectInfo.id, getOverview]);
useEffect(() => { useEffect(() => {
if (currentProjectStore.currentProjectInfo.id) { // 切项目时重置为初始7
getTaskOverviewList({ setDay("7");
projectId: currentProjectStore.currentProjectInfo.id as string, if (currentProjectStore.currentProjectInfo.id) {
jobName: jobName, getOverview({
day: Number(day), id: currentProjectStore.currentProjectInfo.id as string,
page: page, });
size: size, }
}); }, [currentProjectStore.currentProjectInfo.id, getOverview]);
}
}, [currentProjectStore.currentProjectInfo.id, getTaskOverviewList, day, jobName]);
const handleKeyWordChangeKeyUp = (e: any) => { useEffect(() => {
if (e.keyCode === 13) { if (currentProjectStore.currentProjectInfo.id) {
setJobName(e.target.value); getTaskOverviewList({
} projectId: currentProjectStore.currentProjectInfo.id as string,
} jobName: jobName,
day: Number(day),
page: page,
size: size,
});
}
}, [
currentProjectStore.currentProjectInfo.id,
getTaskOverviewList,
day,
jobName,
]);
const handleKeyWordChangeBlur = (e: any) => { const handleKeyWordChangeKeyUp = (e: any) => {
setJobName(e.target.value); if (e.keyCode === 13) {
} setJobName(e.target.value);
}
};
const storageUnitFromB = (b: number) => { const handleKeyWordChangeBlur = (e: any) => {
if (b <= 0) { setJobName(e.target.value);
return { data: '0.00', unit: 'KB' }; };
} else if (b < 1024 * 1024) {
return { data: (b / 1024).toFixed(2), unit: 'KB' };
} else if (b < 1024 * 1024 * 1024) {
return { data: (b / (1024 * 1024)).toFixed(2), unit: 'MB' };
} else if (b < 1024 * 1024 * 1024 * 1024) {
return { data: (b / (1024 * 1024 * 1024)).toFixed(2), unit: 'G' };
} else {
return { data: (b / (1024 * 1024 * 1024 * 1024)).toFixed(2), unit: 'T' };
}
};
if (currentProjectStore.currentProjectInfo.name) { const storageUnitFromB = (b: number) => {
if (loading) { if (b <= 0) {
return ( return { data: "0.00", unit: "KB" };
<div className={style.loadingBox}> } else if (b < 1024 * 1024) {
<Loading /> return { data: (b / 1024).toFixed(2), unit: "KB" };
</div> } else if (b < 1024 * 1024 * 1024) {
); return { data: (b / (1024 * 1024)).toFixed(2), unit: "MB" };
} else { } else if (b < 1024 * 1024 * 1024 * 1024) {
return ( return { data: (b / (1024 * 1024 * 1024)).toFixed(2), unit: "G" };
<> } else {
<div className={style.topFixed}> return { data: (b / (1024 * 1024 * 1024 * 1024)).toFixed(2), unit: "T" };
<div className={style.basicInformation}> }
<div> };
<div className={style.titleBox}>
<img src={projectImg} alt="项目logo" style={{ width: 30, height: 30 }} />
<span className={style.projectName}>
{currentProjectStore.currentProjectInfo.name}
</span>
</div>
<div className={style.otherInformation}>
<div className={style.otherInformationBox}><span>角色:</span><span className={style.informationcolor}>{overviewInfo.projectRoleExhibit}</span></div>
<div className={style.otherInformationBox}><span>计算区:</span><span className={style.informationcolor}>{overviewInfo.zoneIdExhibit}</span></div>
<div className={style.otherInformationBox}><span>创建日期:</span><span className={style.informationcolor}>{moment(overviewInfo.createdAt).format('yyyy-MM-DD')}</span></div>
</div>
</div>
<div className={style.basicInformationRight}>
<div>
<div className={style.otherInformationBoxRight}>项目总消费</div>
<div><span className={style.numberDisplay}>{overviewInfo.projectCost?.toFixed(2)}</span></div>
</div>
<div className={style.verticalLine}></div>
<div>
<div className={style.otherInformationBoxRight}>项目剩余预算</div>
<div><span className={style.numberDisplay}>{overviewInfo.projectRemainingBudget?.toFixed(2)}</span></div>
</div>
<div className={style.verticalLine}></div>
<div>
<div className={style.otherInformationBoxRight} style={{ marginRight: '20px' }}>项目存储大小</div>
<div>
<span className={style.numberDisplay}>{overviewInfo.projectStorage !== undefined ? storageUnitFromB(overviewInfo.projectStorage).data : ''}</span>
{overviewInfo.projectStorage !== undefined ? storageUnitFromB(overviewInfo.projectStorage).unit : ''}
</div>
</div>
</div>
</div>
<div className={style.searchBox}>
<div className={style.searchLineLeft}>
<div className={style.taskOverview}>任务概览</div>
<RadioGroupOfButtonStyle
value={day}
radioOptions={[
{ value: "7", label: "近7天" },
{ value: "15", label: "近15天" },
{ value: "30", label: "近30天" },
]}
handleRadio={setDay}
></RadioGroupOfButtonStyle>
</div>
<SearchInput
onKeyUp={handleKeyWordChangeKeyUp}
onBlur={handleKeyWordChangeBlur}
sx={{ width: 340 }}
/>
</div>
</div>
<div className={style.taskDisplay}>
{/* 任务列表为空展示 */}
{taskList.length === 0 && (
<div className={style.noDataBox}>
<img className={style.noDataImg} src={noFile} alt="" />
<span className={style.noDataText}>暂无任务</span>
</div>
)}
{/* 任务列表卡片渲染 */}
{taskList.length > 0 && taskList.map((item: any) => {
return <TaskCard
id={item.id}
name={item.name}
creator={item.creator}
state={item.state}
completeNum={item.completeNum}
totalNum={item.totalNum}
costTime={item.costTime}
jobCost={item.jobCost}
outputs={item.outputs}
key={item.id}
/>
})}
</div>
</>
);
}
} else { if (currentProjectStore.currentProjectInfo.name) {
return <NoProject />; if (loading) {
} return (
}) <div className={style.loadingBox}>
export default ProjectOverview <Loading />
\ No newline at end of file </div>
);
} else {
return (
<>
<div className={style.topFixed}>
<div className={style.basicInformation}>
<div>
<div className={style.titleBox}>
<img
src={projectImg}
alt="项目logo"
style={{ width: 30, height: 30 }}
/>
<span className={style.projectName}>
{currentProjectStore.currentProjectInfo.name}
</span>
</div>
<div className={style.otherInformation}>
<div className={style.otherInformationBox}>
<span>角色:</span>
<span className={style.informationcolor}>
{overviewInfo.projectRoleExhibit}
</span>
</div>
<div className={style.otherInformationBox}>
<span>计算区:</span>
<span className={style.informationcolor}>
{overviewInfo.zoneIdExhibit}
</span>
</div>
<div className={style.otherInformationBox}>
<span>创建日期:</span>
<span className={style.informationcolor}>
{moment(overviewInfo.createdAt).format("yyyy-MM-DD")}
</span>
</div>
</div>
</div>
<div className={style.basicInformationRight}>
<div>
<div className={style.otherInformationBoxRight}>
项目总消费
</div>
<div>
<span className={style.numberDisplay}>
{overviewInfo.projectCost?.toFixed(2)}
</span>
</div>
</div>
<div className={style.verticalLine}></div>
<div>
<div className={style.otherInformationBoxRight}>
项目剩余预算
</div>
<div>
<span className={style.numberDisplay}>
{overviewInfo.projectRemainingBudget?.toFixed(2)}
</span>
</div>
</div>
<div className={style.verticalLine}></div>
<div>
<div
className={style.otherInformationBoxRight}
style={{ marginRight: "20px" }}
>
项目存储大小
</div>
<div>
<span className={style.numberDisplay}>
{overviewInfo.projectStorage !== undefined
? storageUnitFromB(overviewInfo.projectStorage).data
: ""}
</span>
{overviewInfo.projectStorage !== undefined
? storageUnitFromB(overviewInfo.projectStorage).unit
: ""}
</div>
</div>
</div>
</div>
<div className={style.searchBox}>
<div className={style.searchLineLeft}>
<div className={style.taskOverview}>任务概览</div>
<RadioGroupOfButtonStyle
value={day}
radioOptions={[
{ value: "7", label: "近7天" },
{ value: "15", label: "近15天" },
{ value: "30", label: "近30天" },
]}
handleRadio={setDay}
></RadioGroupOfButtonStyle>
</div>
<SearchInput
onKeyUp={handleKeyWordChangeKeyUp}
onBlur={handleKeyWordChangeBlur}
sx={{ width: 340 }}
/>
</div>
</div>
<div className={style.taskDisplay}>
{/* 任务列表为空展示 */}
{taskList.length === 0 && (
<div className={style.noDataBox}>
<img className={style.noDataImg} src={noFile} alt="" />
<span className={style.noDataText}>暂无任务</span>
</div>
)}
{/* 任务列表卡片渲染 */}
{taskList.length > 0 &&
taskList.map((item: any) => {
return (
<TaskCard
id={item.id}
name={item.name}
creator={item.creator}
state={item.state}
completeNum={item.completeNum}
totalNum={item.totalNum}
costTime={item.costTime}
jobCost={item.jobCost}
outputs={item.outputs}
key={item.id}
/>
);
})}
</div>
</>
);
}
} else {
return <NoProject />;
}
});
export default ProjectOverview;
...@@ -85,7 +85,7 @@ const ProjectListPopper = observer((props: any) => { ...@@ -85,7 +85,7 @@ const ProjectListPopper = observer((props: any) => {
> >
<SearchIcon <SearchIcon
className={style.searchIcon} className={style.searchIcon}
style={{ color: "rgba(153, 153, 153, 1)" }} style={{ color: "#8A9099", fontSize: "22px" }}
/> />
</IconButton> </IconButton>
<InputBase <InputBase
...@@ -96,7 +96,7 @@ const ProjectListPopper = observer((props: any) => { ...@@ -96,7 +96,7 @@ const ProjectListPopper = observer((props: any) => {
onChange={nameChange} onChange={nameChange}
sx={{ sx={{
fontSize: "14px", fontSize: "14px",
color: "rgba(194, 198, 204, 1)", // color: "rgba(194, 198, 204, 1)",
height: "22px", height: "22px",
}} }}
/> />
......
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