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

510 lines
25 KiB
TypeScript
Raw Normal View History

2024-04-29 17:22:26 +08:00
/* eslint-disable @typescript-eslint/no-unused-vars */
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,
2024-04-02 18:45:46 +08:00
CreditCardOutlined, DeleteOutlined,
2024-04-01 20:39:22 +08:00
DownloadOutlined, DownOutlined,
2024-03-19 19:19:07 +08:00
EditOutlined,
EyeOutlined,
2024-03-26 21:09:41 +08:00
LoadingOutlined,
2024-03-19 19:19:07 +08:00
SearchOutlined,
SettingOutlined,
2024-05-07 17:00:32 +08:00
WarningOutlined,
FolderOutlined
2024-03-19 19:19:07 +08:00
} from '@ant-design/icons';
2024-04-29 17:22:26 +08:00
import { Button, ConfigProvider, Dropdown, Tag } from 'antd';
import { GenerateStatus, IProj, PayStatus, ProjChargeType } from "../../interfaces/proj/IProj.ts";
import { useNavigate } from "react-router-dom";
import { Axios, put } from "../../util/AjaxUtils.ts";
import { useContext, useEffect, useState } from "react";
import { IndexListContext } from "../../context/IndexListContext.ts";
2024-04-01 20:39:22 +08:00
import useMessage from "antd/es/message/useMessage";
2024-04-29 17:22:26 +08:00
import setImg from '../../static/right/set.png'
import orderImg from '../../static/right/order.png'
import menuImg from '../../static/right/menu.png'
2024-05-07 17:00:32 +08:00
import testImg from '../../static/test.jpg'
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-05-23 18:21:31 +08:00
// const [showZpi,setShowZpi] = useState(false)
2024-03-19 19:19:07 +08:00
const data = props.item;
2024-05-23 18:21:31 +08:00
const isShow = data.pay.chargeAdditionals.includes('PKG')
2024-04-01 20:39:22 +08:00
const [messageApi, messageContext] = useMessage();
2024-04-02 18:45:46 +08:00
const [projCategoryId, setProjCategoryId] = useState(data.projCategoryId);
2024-04-01 20:39:22 +08:00
const [projCategoryName, setProjCategoryName] = useState(data.projCategoryName);
2024-04-12 18:18:14 +08:00
const [charge, setCharge] = useState('');
2024-04-12 14:12:38 +08:00
const [payCharge, setPayCharge] = useState('');
2024-04-01 20:39:22 +08:00
const indexListContext = useContext(IndexListContext);
2024-03-19 19:19:07 +08:00
/**
*
*/
const renderGenerateStatus = () => {
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.PENDING) {
2024-04-29 17:22:26 +08:00
return <Tag color="cyan"><ClockCircleOutlined /> </Tag>
2024-03-19 19:19:07 +08:00
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.GENERATING) {
2024-04-29 17:22:26 +08:00
return <Tag color="magenta"><LoadingOutlined /> </Tag>
2024-03-19 19:19:07 +08:00
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
2024-04-29 17:22:26 +08:00
return <Tag color="green"><CheckOutlined /> </Tag>
2024-03-19 19:19:07 +08:00
}
2024-03-26 21:09:41 +08:00
if (data.generate.generateStatus == GenerateStatus.FAILED) {
2024-04-29 17:22:26 +08:00
return <Tag color="red"><WarningOutlined /> </Tag>
2024-03-19 19:19:07 +08:00
}
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>
}
2024-04-29 17:22:26 +08:00
return <Tag color="red"><CloseCircleOutlined /> </Tag>
2024-03-19 19:19:07 +08:00
}
const renderOption = () => {
2024-04-01 20:39:22 +08:00
if (data.pay.payStatus == PayStatus.UNPAID) {
2024-03-19 19:19:07 +08:00
return (
<>
<div className="option">
2024-04-29 17:22:26 +08:00
<Button size="small" type="text"><CreditCardOutlined /> </Button>
2024-03-19 19:19:07 +08:00
</div>
</>
)
}
return (
<>
<div className="option">
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
2024-04-01 20:39:22 +08:00
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
2024-03-26 21:09:41 +08:00
nav(`/proj-edit/config-loginpage-show/${data.projId}`)
} else {
nav(`/proj-edit/config-loginpage/${data.projId}`)
}
2024-04-29 17:22:26 +08:00
}}><SettingOutlined /> </Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
2024-04-01 20:39:22 +08:00
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
2024-03-26 21:09:41 +08:00
nav(`/proj-edit/config-mod-list-show/${data.projId}`)
} else {
nav(`/proj-edit/config-mod-list/${data.projId}`)
}
2024-04-29 17:22:26 +08:00
}}><SettingOutlined /> ({data.projModCount})</Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
2024-04-01 20:39:22 +08:00
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
2024-03-26 21:09:41 +08:00
nav(`/proj-edit/config-menu-list-show/${data.projId}`)
} else {
nav(`/proj-edit/config-menu-list/${data.projId}`)
}
2024-04-29 17:22:26 +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}`)
2024-04-29 17:22:26 +08:00
}}><DownloadOutlined /> </Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${data.projId}`)
2024-04-29 17:22:26 +08:00
}}><DownloadOutlined /> </Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${data.projId}`)
2024-04-29 17:22:26 +08:00
}}><DownloadOutlined /> </Button>
2024-03-26 21:09:41 +08:00
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${data.projId}`)
2024-04-29 17:22:26 +08:00
}}><DownloadOutlined /> </Button>
2024-03-19 19:19:07 +08:00
</div>
) : <></>
}
</>
)
}
2024-03-13 16:11:28 +08:00
2024-04-12 18:18:14 +08:00
const goEdit = () => {
2024-04-29 17:22:26 +08:00
if (charge == ProjChargeType.ALL) {
2024-04-12 18:18:14 +08:00
nav(`/proj-eall/${data.projId}`);
2024-04-29 17:22:26 +08:00
} else if (charge == ProjChargeType.FREE) {
2024-04-12 18:18:14 +08:00
nav(`/proj-efree/${data.projId}`);
} else {
nav(`/proj-edit/${data.projId}`);
}
}
2024-04-12 14:12:38 +08:00
useEffect(() => {
const charge = props.item.pay.charge.split(':')[0];
let chargeName = '';
if (charge == ProjChargeType.ALL) {
chargeName = '全托管';
} else if (charge == ProjChargeType.MATERIAL_AGENT) {
chargeName = '写材料+代理';
} else if (charge == ProjChargeType.MATERIAL_AGENT_URGENT) {
chargeName = '写材料+代理(加急)';
} else if (charge == ProjChargeType.MATERIAL) {
chargeName = '写材料';
} else {
chargeName = '免费试用';
}
2024-04-12 18:18:14 +08:00
setCharge(charge)
2024-04-12 14:12:38 +08:00
setPayCharge(chargeName);
}, [])
2024-03-13 16:11:28 +08:00
return (
2024-04-01 20:39:22 +08:00
<>
<div className="card-proj">
2024-05-07 17:00:32 +08:00
<div className='cp-top'>
<div className='cpt-left'>
<div className='dottedLine'></div>
<div className='cpt-title' onClick={goEdit}>{data.projName}</div>
<div className='cp-tag'>
{payCharge}
</div>
<div className='cp-num'>
{data.projContext}
</div>
<div className='cp-smallLine'>
</div>
<div className='cp-time'>
{data.gmtCreate}
</div>
</div>
<div className='cpt-right'>
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span className="cpt-text-btn">
<SearchOutlined />
<span className='text-btn' onClick={goEdit}></span>
</span>
) : (
<span className="cpt-text-btn">
<EditOutlined />
<span className='text-btn' onClick={goEdit}></span>
</span>
)
}
<span className='orignLine'>|</span>
<span className="cpt-text-btn">
<EyeOutlined />
<span className='text-btn' onClick={() => {
window.open(`${Axios.defaults?.baseURL}/${data.previewUrl}`, '_blank')
}}></span>
</span>
</div>
</div>
<div className='cp-bot'>
<div className='cpb-left'>
2024-05-23 14:57:22 +08:00
<img src={data.img} className='cpb-left-img' alt="" />
2024-05-07 17:00:32 +08:00
<div className='cpbl-right'>
<div className='cpbl-money'>
<span className='money'>() : </span>
<span className='num'>{data.pay.payment / 100}</span>
</div>
<div className='cpbl-btn'>
<div className='threeBtn' onClick={() => {
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
nav(`/proj-edit/config-loginpage-show/${data.projId}`)
} else {
nav(`/proj-edit/config-loginpage/${data.projId}`)
}
}}>
<img src={setImg} alt="" />
<div></div>
</div>
<div className='threeBtn' 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}`)
}
}}>
<img src={menuImg} alt="" />
<div>({data.projModCount})</div>
</div>
<div className='threeBtn rightBit' 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}`)
}
}}>
<img src={orderImg} alt="" />
<div>({data.projModCount})</div>
</div>
</div>
</div>
</div>
<div className='cline'></div>
<div className='cpb-center'>
<div className='cpbc-top'>
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<div className="option">
<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>
2024-05-23 18:21:31 +08:00
{
isShow && <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={() => {
2024-05-07 17:00:32 +08:00
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${data.projId}`)
2024-05-23 18:21:31 +08:00
}}><DownloadOutlined /> </Button> */}
2024-05-07 17:00:32 +08:00
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${data.projId}`)
}}><DownloadOutlined /> </Button>
</div>
) : <></>
}
</div>
<div className='cpbc-bot'>
<div>
<FolderOutlined />
</div>
{/* 层级 */}
<Dropdown menu={{
items: indexListContext.categorys,
onClick: (e) => {
const span = e.domEvent.target as HTMLSpanElement;
put<any>({
messageApi,
url: `/api/proj/update-category/${data.projId}/${e.key}`,
onSuccess() {
messageApi.success('修改成功');
setProjCategoryId(e.key);
setProjCategoryName(span.innerText);
}
});
}
}}>
<span>
<span className="text-btn">{projCategoryId ? projCategoryName : '无目录'}</span>
<DownOutlined />
</span>
</Dropdown>
{
projCategoryId ? (
<DeleteOutlined title="移除目录" onClick={() => {
put<any>({
messageApi,
url: `/api/proj/cancel-category/${data.projId}`,
onSuccess() {
messageApi.success('取消成功');
setProjCategoryId('');
setProjCategoryName('');
}
});
}} />
) : <></>
}
</div>
</div>
{/* <div className='cline'></div> */}
<div className='cpb-right'>
<div className='cpbr-top'>
--
</div>
<div className='cpbr-bot'>
{renderGenerateStatus()}
</div>
</div>
</div>
{/* <div className="card-proj-title">
2024-04-29 17:22:26 +08:00
<div className='titleLift'>
<div className="left">
<div className='boxline'></div>
<span className="text-btn" onClick={goEdit}>{data.projName}</span>
</div>
<div className="right">
<span className="context">{data.projContext}</span>
<span className='line'></span>
2024-05-07 17:00:32 +08:00
<span className="date">{data.gmtCreate}</span> */}
{/* 状态标签 */}
{/* <span className="status">{renderGenerateStatus()}</span> */}
{/* </div>
2024-03-13 16:11:28 +08:00
</div>
2024-04-29 17:22:26 +08:00
<div className="titleRight">
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span>
<SearchOutlined />
<span className="text-btn" onClick={goEdit}></span>
</span>
) : (
<span>
<EditOutlined />
<span className="text-btn" onClick={goEdit}></span>
</span>
)
}
<span className='orignLine'>|</span>
<span>
<EyeOutlined />
<span className="text-btn" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/${data.previewUrl}`, '_blank')
}}></span>
</span>
2024-03-13 16:11:28 +08:00
</div>
2024-05-07 17:00:32 +08:00
</div> */}
2024-04-29 17:22:26 +08:00
{/* <hr/> */}
2024-05-07 17:00:32 +08:00
{/* <div className="body">
2024-04-01 20:39:22 +08:00
<div className="line">
2024-05-07 17:00:32 +08:00
<div className="left"> */}
{/* <Tag color="magenta">{payCharge}</Tag> */}
{/* 金额 */}
{/* <Tag color="gold">¥{data.pay.payment / 100}</Tag> */}
{/* </div> */}
{/* <div className='centerl'>
2024-04-29 17:22:26 +08:00
<div className='c-top'>
<span className='money'>() : </span>
<span className='num'>{data.pay.payment / 100}</span>
</div>
<div className='c-bot'>
<div className='set' onClick={() => {
if (data.generate.generateStatus == GenerateStatus.SUCCESS) {
nav(`/proj-edit/config-loginpage-show/${data.projId}`)
} else {
nav(`/proj-edit/config-loginpage/${data.projId}`)
}
}}>
<img src={setImg} alt="" />
<div></div>
</div>
<div className='set' 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}`)
}
}}>
<img src={menuImg} alt="" />
<div>({data.projModCount})</div>
</div>
<div className='set' 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}`)
}
}}>
<img src={orderImg} alt="" />
<div>({data.projModCount})</div>
</div>
</div>
2024-05-07 17:00:32 +08:00
</div> */}
{/* 目录层级结构*/}
{/* <div className='centerr'>
2024-04-29 17:22:26 +08:00
</div>
<div className='right'>
<div className='rigth-t'>
- -
</div>
<div className="status">{renderGenerateStatus()}</div>
2024-05-07 17:00:32 +08:00
</div> */}
2024-04-29 17:22:26 +08:00
2024-05-07 17:00:32 +08:00
{/* <div className="right">
2024-04-12 14:12:38 +08:00
{
2024-04-01 20:39:22 +08:00
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span>
<SearchOutlined/>
2024-04-12 18:18:14 +08:00
<span className="text-btn" onClick={goEdit}></span>
2024-04-01 20:39:22 +08:00
</span>
) : (
<span>
<EditOutlined/>
2024-04-12 18:18:14 +08:00
<span className="text-btn" onClick={goEdit}></span>
2024-04-01 20:39:22 +08:00
</span>
)
}
<span>
<EyeOutlined/>
2024-04-12 14:12:38 +08:00
<span className="text-btn" onClick={() => {
2024-04-01 20:39:22 +08:00
window.open(`${Axios.defaults?.baseURL}/${data.previewUrl}`, '_blank')
2024-04-12 14:12:38 +08:00
}}></span>
2024-04-01 20:39:22 +08:00
</span>
2024-04-29 17:22:26 +08:00
</div> */}
2024-05-07 17:00:32 +08:00
{/* </div> */}
{/* <div className="line">
2024-04-01 20:39:22 +08:00
<div className="left">
{
data.generate.generateStatus == GenerateStatus.SUCCESS ? (
<span>
<SearchOutlined/>
2024-04-12 14:12:38 +08:00
<span className="text-btn" onClick={(e) => {
2024-04-01 20:39:22 +08:00
e.preventDefault();
nav(`/agent-select/${data.projId}`);
2024-04-12 14:12:38 +08:00
}}></span>
2024-04-01 20:39:22 +08:00
</span>
) : <></>
}
</div>
<div className="right">
<Dropdown menu={{
items: indexListContext.categorys,
onClick: (e) => {
const span = e.domEvent.target as HTMLSpanElement;
put<any>({
messageApi,
url: `/api/proj/update-category/${data.projId}/${e.key}`,
onSuccess() {
messageApi.success('修改成功');
2024-04-02 18:45:46 +08:00
setProjCategoryId(e.key);
2024-04-01 20:39:22 +08:00
setProjCategoryName(span.innerText);
}
});
}
}}>
2024-04-02 18:45:46 +08:00
<span>
2024-04-12 14:12:38 +08:00
<span className="text-btn">{projCategoryId ? projCategoryName : '无目录'}</span>
2024-04-01 20:39:22 +08:00
<DownOutlined/>
</span>
</Dropdown>
2024-04-02 18:45:46 +08:00
{
projCategoryId ? (
<DeleteOutlined title="移除目录" onClick={() => {
put<any>({
messageApi,
url: `/api/proj/cancel-category/${data.projId}`,
onSuccess() {
messageApi.success('取消成功');
setProjCategoryId('');
setProjCategoryName('');
}
});
}}/>
) : <></>
}
2024-04-01 20:39:22 +08:00
</div>
2024-04-29 17:22:26 +08:00
</div> */}
2024-05-07 17:00:32 +08:00
{/* </div> */}
2024-04-29 17:22:26 +08:00
{/* <hr/> */}
{/* <div className="foot">
2024-04-01 20:39:22 +08:00
<ConfigProvider theme={{
components: {
Button: {
contentFontSizeSM: 12,
}
2024-03-18 18:50:36 +08:00
}
2024-04-01 20:39:22 +08:00
}}>
{renderOption()}
</ConfigProvider>
2024-04-29 17:22:26 +08:00
</div> */}
2024-03-18 18:50:36 +08:00
</div>
2024-04-02 18:45:46 +08:00
{messageContext}
2024-04-01 20:39:22 +08:00
</>
2024-03-13 16:11:28 +08:00
)
}