system-copyright-react/src/components/card/CardProj.tsx

188 lines
8.0 KiB
TypeScript
Raw Normal View History

2024-03-13 16:11:28 +08:00
import './card-proj.css';
2024-03-19 19:19:07 +08:00
import {
2024-03-26 21:09:41 +08:00
CheckOutlined,
ClockCircleOutlined,
CloseCircleOutlined,
CreditCardOutlined,
2024-03-19 19:19:07 +08:00
DownloadOutlined,
EditOutlined,
EyeOutlined,
FolderOutlined,
2024-03-26 21:09:41 +08:00
LoadingOutlined,
2024-03-19 19:19:07 +08:00
SearchOutlined,
SettingOutlined,
2024-03-26 21:09:41 +08:00
WarningOutlined
2024-03-19 19:19:07 +08:00
} from '@ant-design/icons';
2024-03-18 18:50:36 +08:00
import {Button, ConfigProvider, Tag} from 'antd';
2024-03-19 19:19:07 +08:00
import {GenerateStatus, IProj, PayStatus} from "../../interfaces/proj/IProj.ts";
2024-03-26 21:09:41 +08:00
import {useNavigate} from "react-router-dom";
import {Axios} from "../../util/AjaxUtils.ts";
2024-03-19 19:19:07 +08:00
export default function CardProj(props: { item: IProj }) {
2024-03-26 21:09:41 +08:00
const nav = useNavigate();
2024-03-19 19:19:07 +08:00
const data = props.item;
/**
*
*/
const renderGenerateStatus = () => {
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.PENDING) {
2024-03-19 19:19:07 +08:00
return <Tag color="cyan"><ClockCircleOutlined/> </Tag>
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.GENERATING) {
2024-03-19 19:19:07 +08:00
return <Tag color="magenta"><LoadingOutlined/> </Tag>
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
2024-03-19 19:19:07 +08:00
return <Tag color="green"><CheckOutlined/> </Tag>
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.FAILED) {
2024-03-19 19:19:07 +08:00
return <Tag color="red"><WarningOutlined/> </Tag>
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.NONE) {
2024-03-19 19:19:07 +08:00
return <Tag color="cyan"></Tag>
}
return <Tag color="red"><CloseCircleOutlined/> </Tag>
}
const renderOption = () => {
2024-03-26 21:09:41 +08:00
if(data.pay.payStatus == PayStatus.UNPAID) {
2024-03-19 19:19:07 +08:00
return (
<>
<div className="option">
<Button size="small" type="text"><CreditCardOutlined /> </Button>
</div>
</>
)
}
return (
<>
<div className="option">
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
if(data.generate.generateStatus == GenerateStatus.SUCCESS) {
nav(`/proj-edit/config-loginpage-show/${data.projId}`)
} else {
nav(`/proj-edit/config-loginpage/${data.projId}`)
}
}}><SettingOutlined/> </Button>
<Button size="small" type="text" onClick={() => {
if(data.generate.generateStatus == GenerateStatus.SUCCESS) {
nav(`/proj-edit/config-mod-list-show/${data.projId}`)
} else {
nav(`/proj-edit/config-mod-list/${data.projId}`)
}
2024-03-28 19:35:54 +08:00
}}><SettingOutlined/> ({data.projModCount})</Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
if(data.generate.generateStatus == GenerateStatus.SUCCESS) {
nav(`/proj-edit/config-menu-list-show/${data.projId}`)
} else {
nav(`/proj-edit/config-menu-list/${data.projId}`)
}
2024-03-28 19:35:54 +08:00
}}><SettingOutlined/> ({data.projModCount})</Button>
2024-03-19 19:19:07 +08:00
</div>
{
2024-03-26 21:09:41 +08:00
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
2024-03-19 19:19:07 +08:00
<div className="option">
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/apply/${data.projId}`)
}}><DownloadOutlined/> </Button>
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${data.projId}`)
}}><DownloadOutlined/> </Button>
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${data.projId}`)
}}><DownloadOutlined/> </Button>
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${data.projId}`)
}}><DownloadOutlined/> </Button>
2024-03-19 19:19:07 +08:00
</div>
) : <></>
}
</>
)
}
2024-03-13 16:11:28 +08:00
return (
<div className="card-proj">
<div className="title">
<div className="left">
2024-03-19 19:19:07 +08:00
<a href="/#">{data.projName}</a>
2024-03-13 16:11:28 +08:00
</div>
<div className="right">
2024-03-19 19:19:07 +08:00
<span className="context">{data.projContext}</span>
<span className="date">{data.gmtCreate}</span>
<span className="status">{renderGenerateStatus()}</span>
2024-03-13 16:11:28 +08:00
</div>
</div>
<hr/>
<div className="body">
<div className="line">
<div className="left">
2024-03-26 21:09:41 +08:00
<span>{data.pay.payment / 100}</span>
2024-03-13 16:11:28 +08:00
</div>
<div className="right">
2024-03-26 21:09:41 +08:00
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span>
<SearchOutlined/>
<a href="/#" onClick={(e) => {
e.preventDefault();
nav(`/proj-edit/${data.projId}`)
}}></a>
</span>
) : (
<span>
<EditOutlined/>
<a href="/#" onClick={(e) => {
e.preventDefault();
nav(`/proj-edit/${data.projId}`)
}}></a>
</span>
)
}
2024-03-13 16:11:28 +08:00
<span>
<EyeOutlined/>
2024-03-19 19:19:07 +08:00
<a href="/#" onClick={(e) => {
e.stopPropagation();
2024-03-26 21:09:41 +08:00
window.open(`${Axios.defaults?.baseURL}/${data.previewUrl}`, '_blank')
2024-03-19 19:19:07 +08:00
}}></a>
2024-03-13 16:11:28 +08:00
</span>
</div>
</div>
<div className="line">
2024-03-28 19:35:54 +08:00
<div className="left">
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span>
<SearchOutlined/>
<a href="/#" onClick={(e) => {
e.preventDefault();
nav(`/agent-select/${data.projId}`);
}}></a>
</span>
) : <></>
}
</div>
2024-03-13 16:11:28 +08:00
<div className="right">
<span>
2024-03-18 18:50:36 +08:00
<FolderOutlined/>
2024-03-13 16:11:28 +08:00
<a href="/#"></a>
</span>
</div>
</div>
</div>
2024-03-18 18:50:36 +08:00
<hr/>
<div className="foot">
<ConfigProvider theme={{
components: {
Button: {
contentFontSizeSM: 12,
}
}
}}>
2024-03-19 19:19:07 +08:00
{renderOption()}
2024-03-18 18:50:36 +08:00
</ConfigProvider>
</div>
2024-03-13 16:11:28 +08:00
</div>
)
}