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

912 lines
44 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-09-13 16:45:01 +08:00
import { useDispatch } from 'react-redux'
2024-03-19 19:19:07 +08:00
import {
2024-03-26 21:09:41 +08:00
CheckOutlined,
ClockCircleOutlined,
2024-08-01 16:53:23 +08:00
CloseCircleOutlined,
DownloadOutlined,
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,
2024-05-07 17:00:32 +08:00
WarningOutlined,
2024-03-19 19:19:07 +08:00
} from '@ant-design/icons';
2024-08-01 16:53:23 +08:00
import { Button, Tag, Modal, Carousel } from 'antd';
2024-08-30 16:14:54 +08:00
import { GenerateStatus } from "../../interfaces/proj/IProj.ts";
2024-04-29 17:22:26 +08:00
import { useNavigate } from "react-router-dom";
2024-10-28 17:29:45 +08:00
import { Axios, post, downloadUrl, get } from "../../util/AjaxUtils.ts";
2024-08-27 18:29:20 +08:00
import { useEffect, useState } from "react";
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-06-17 16:35:28 +08:00
// import LoginPage from '../../components/LoginPage/LoginPage.tsx'
import LoginPage from '../../route/proj/edit/ProjConfigLoginpage.tsx'
// import LoginPageShow from '../../components/LoginPageShow/LoginPageShow.tsx'
import LoginPageShow from '../../route/proj/edit/ProjConfigLoginpageShow.tsx'
2024-05-28 18:00:42 +08:00
import SoftwareManagement from '../../route/proj/edit/ProjConfigModList.tsx'
import SoftwareManagementShow from '../../route/proj/edit/ProjConfigModListShow.tsx'
import DisplayOrder from '../../route/proj/edit/ProjConfigMenuList.tsx'
import DisplayOrderShow from '../../route/proj/edit/ProjConfigMenuListShow.tsx'
2024-07-15 16:58:47 +08:00
export default function CardProj(props: any) {
2024-10-28 17:29:45 +08:00
const height = window.innerHeight - 250;
// 下载等待弹窗
const [downModal,setDownModal] = useState(false)
// 是否已经点击下载按钮
const [hasDown,setHasDown] = useState(false)
2024-08-01 08:36:15 +08:00
// // 选项数组
// const [tagArray, setTagArray] = useState([])
// // 获取标签
// const getTag = () => {
// get({
// messageApi,
// url: `/api/proj/tag/list-tag`,
// onBefore() {
2024-07-31 18:41:25 +08:00
2024-08-01 08:36:15 +08:00
// },
// onSuccess(data: any) {
// // console.log('标签信息', data);
// const newarrty: any = (data.data).map((item: any) => ({
// value: item.key,
// label: item.value
// }));
// // console.log('标签信息', newarrty);
2024-07-31 18:41:25 +08:00
2024-08-01 08:36:15 +08:00
// setTagArray(newarrty)
2024-07-31 18:41:25 +08:00
2024-08-01 08:36:15 +08:00
// },
// onFinally() {
2024-07-31 18:41:25 +08:00
2024-08-01 08:36:15 +08:00
// }
// })
// }
2024-08-01 11:15:33 +08:00
const data = props.item;
2024-09-02 16:41:02 +08:00
// data.generate.generateStatus == GenerateStatus.SUCCESS ?'查看':'编辑'
2024-08-01 11:15:33 +08:00
const [tagIdArray, setTagIdArray] = useState(data.tagDataIds)
// 动态显示标签状态
// const [tagStatus, setTagStatus] = useState('')
2024-10-28 17:29:45 +08:00
// const downAll = (projId: string) => {
// get({
// messageApi,
// url: `${Axios.defaults?.baseURL}/route/proj/download/all/${projId}`,
// onBefore() {
// console.log('正在打包')
// },
// onSuccess(data: any) {
// console.log(data)
// },
// onFinally() {
// }
// })
// }
const downAll = async (projId: string,name:string) => {
setHasDown(true)
if(!hasDown){
try {
setDownModal(true)
setHasDown(true)
// 发送请求
const response = await Axios.get(
`${Axios.defaults?.baseURL}/route/proj/download/all/${projId}`,
{
responseType: 'blob', // 设置响应类型为 blob
headers: {
'Content-Type': 'application/octet-stream',
},
}
);
// 检查状态码
if (response.status === 200) {
setDownModal(false)
// 创建 Blob 对象
const blob = new Blob([response.data], { type: response.headers['content-type'] });
// 创建下载链接
const url = window.URL.createObjectURL(blob);
// 创建一个临时的 <a> 元素
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `${name}全部资料.zip`); // 设置下载文件的名称
document.body.appendChild(link);
link.click(); // 触发下载
document.body.removeChild(link); // 下载完成后移除 <a> 元素
// 释放 URL 对象
window.URL.revokeObjectURL(url);
} else {
console.error('下载失败');
// 你可以在这里处理错误情况,例如显示错误消息
}
} catch (error) {
console.error('请求失败', error);
// 你可以在这里处理错误情况,例如显示错误消息
}finally {
// 无论请求成功与否,下载完成后都重置 hasDown 状态
setHasDown(false);
setDownModal(false); // 关闭模态框
}
}else{
setDownModal(true);
}
};
2024-07-31 18:41:25 +08:00
// 更新标签状态
2024-08-01 11:15:33 +08:00
const upTag = (dataId: string, projId: string) => {
2024-07-31 18:41:25 +08:00
post<any>({
messageApi,
url: `/api/proj/tag/save-or-delete`,
body: {
dataId,
projId
},
onBefore() {
2024-08-01 11:15:33 +08:00
2024-07-31 18:41:25 +08:00
},
2024-08-01 11:15:33 +08:00
onSuccess(data) {
// console.log(data.data.data);
// props.upData
// props.updata()
// setTagStatus(data.data.data)
// 根据返回的状态更新 tagIdArray
if (data.data.data === 'SAVE') {
setTagIdArray((prevArray: any) => [...prevArray, dataId]);
} else if (data.data.data === 'DELETE') {
setTagIdArray((prevArray: any[]) => prevArray.filter(id => id !== dataId));
}
2024-07-31 18:41:25 +08:00
},
onFinally() {
2024-08-01 11:15:33 +08:00
2024-07-31 18:41:25 +08:00
}
})
}
2024-08-01 11:15:33 +08:00
// 更改data加入数组
// const upData = (tagId:string) => {
// if(tagStatus=='SAVE'){
// setTagIdArray(tagIdArray.push(tagId))
// }
// }
2024-05-28 18:00:42 +08:00
// 第四步 登陆页面设置
const [loginPageOpne, setLoginPageOpne] = useState(false)
const [loginPageShowOpne, setLoginPageShowOpne] = useState(false)
2024-03-26 21:09:41 +08:00
const nav = useNavigate();
2024-05-28 18:00:42 +08:00
// 第五步 软件功能管理
const [softwareManagementOpen, setSoftwareManagementOpen] = useState(false)
const [softwareManagementShowOpen, setSoftwareManagementShowOpen] = useState(false)
2024-05-23 18:21:31 +08:00
// const [showZpi,setShowZpi] = useState(false)
2024-05-28 18:00:42 +08:00
// 第六步 显示顺序
const [displayOrderOpen, setDisplayOrderOpen] = useState(false)
const [displayOrderShowOpen, setDisplayOrderShowOpen] = useState(false)
2024-08-01 11:15:33 +08:00
2024-07-31 16:00:30 +08:00
const pkg = data.pay.chargeAdditionals.match(/PKG:(\d+)/);
const video = data.pay.chargeAdditionals.match(/VIDEO_DEMO:(\d+)/);
const URGENT = data.pay.chargeAdditionals.match(/URGENT:(\d+)/);
// 基础服务费
// const basics = data.pay.charge.match(/:(\d+)/);
const pkgValue: number | null = pkg ? parseInt(pkg[1], 10) / 100 : null;
const videoDemoValue: number | null = video ? parseInt(video[1], 10) / 100 : null;
const URGENTvalue: number | null = URGENT ? parseInt(URGENT[1], 10) / 100 : null;
// const basicsValue: number | null = basics ? parseInt(basics[1], 10)/100 : null;
2024-05-28 18:00:42 +08:00
const [projId] = useState(data.projId)
2024-08-28 11:21:51 +08:00
// 修改
2024-08-29 17:56:39 +08:00
const isShow = data.pay.chargeAdditionals.includes('PKG') || data.pay.chargeType == 'ALL'
2024-08-28 11:21:51 +08:00
2024-05-28 18:00:42 +08:00
2024-04-01 20:39:22 +08:00
const [messageApi, messageContext] = useMessage();
2024-08-01 08:36:15 +08:00
// const [projCategoryId, setProjCategoryId] = useState(data.projCategoryId);
// const [projCategoryName, setProjCategoryName] = useState(data.projCategoryName);
2024-08-28 11:21:51 +08:00
// const [charge, setCharge] = useState('');
2024-04-12 14:12:38 +08:00
const [payCharge, setPayCharge] = useState('');
2024-08-01 08:36:15 +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
}
2024-09-02 16:41:02 +08:00
const dispath = useDispatch()
2024-04-12 18:18:14 +08:00
const goEdit = () => {
2024-08-29 17:56:39 +08:00
if (data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' || data.pay.payStatus == 'CORRECTION2_REFUND' || data.pay.payStatus == 'CORRECTION1_REFUND') {
if (data.pay.chargeType == 'ALL') {
nav(`/proj-eall/${data.projId}`);
2024-09-02 16:41:02 +08:00
dispath({
type: 'upProjName',
val: data.projName
})
dispath({
type: 'upProjStatus',
2024-09-13 16:45:01 +08:00
val: data.generate.generateStatus == GenerateStatus.SUCCESS ? '查看' : '编辑'
2024-09-02 16:41:02 +08:00
})
2024-08-29 17:56:39 +08:00
} else if (data.pay.chargeType == 'FREE') {
nav(`/proj-efree/${data.projId}`);
2024-09-02 16:41:02 +08:00
dispath({
type: 'upProjName',
val: data.projName
})
dispath({
type: 'upProjStatus',
2024-09-13 16:45:01 +08:00
val: data.generate.generateStatus == GenerateStatus.SUCCESS ? '查看' : '编辑'
2024-09-02 16:41:02 +08:00
})
2024-08-29 17:56:39 +08:00
} else {
nav(`/proj-edit/${data.projId}`);
2024-09-02 16:41:02 +08:00
dispath({
type: 'upProjName',
val: data.projName
})
dispath({
type: 'upProjStatus',
2024-09-13 16:45:01 +08:00
val: data.generate.generateStatus == GenerateStatus.SUCCESS ? '查看' : '编辑'
2024-09-02 16:41:02 +08:00
})
2024-08-29 17:56:39 +08:00
}
2024-04-12 18:18:14 +08:00
}
2024-08-29 17:56:39 +08:00
2024-04-12 18:18:14 +08:00
}
2024-04-12 14:12:38 +08:00
useEffect(() => {
2024-08-28 11:21:51 +08:00
// 修改
// const charge = props.item.pay.charge.split(':')[0];
2024-04-12 14:12:38 +08:00
let chargeName = '';
2024-08-28 11:21:51 +08:00
if (data.pay.chargeType == 'ALL') {
2024-04-12 14:12:38 +08:00
chargeName = '全托管';
2024-08-29 17:56:39 +08:00
} else if (data.pay.chargeType == 'MATERIAL_AGENT') {
2024-04-12 14:12:38 +08:00
chargeName = '写材料+代理';
2024-08-28 11:21:51 +08:00
} else if (data.pay.chargeType == 'MATERIAL_AGENT_URGENT') {
2024-04-12 14:12:38 +08:00
chargeName = '写材料+代理(加急)';
2024-08-28 11:21:51 +08:00
} else if (data.pay.chargeType == 'MATERIAL') {
2024-04-12 14:12:38 +08:00
chargeName = '写材料';
} else {
chargeName = '免费试用';
}
2024-08-28 11:21:51 +08:00
// data.pay.chargeType
// setCharge(charge)
2024-04-12 14:12:38 +08:00
setPayCharge(chargeName);
2024-07-31 16:00:30 +08:00
// console.log('额外收费安装包',pkgValue);
// console.log('额外收费视频',videoDemoValue);
// console.log('额外收费加急',URGENTvalue);
// console.log('基础服务费',basicsValue);
2024-08-01 08:36:15 +08:00
// getTag()
2024-08-27 18:29:20 +08:00
// console.log('查看数据', data);
// console.log('查看状态', data.pay.payStatus);
2024-09-13 16:45:01 +08:00
2024-04-12 14:12:38 +08:00
}, [])
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>
2024-08-27 18:29:20 +08:00
<div className='cp-tag'
style={{
background: payCharge == '全托管' ? '#6bd2b4' : payCharge == '免费试用' ? '#ff9226' : payCharge == '写材料' ? '#5279f4' : '', color: '#fff',
display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? 'unset' : 'none'
}}>
{payCharge}
</div>
<div className='cp-tag'
style={{
background: '#8a8a8a', color: '#fff',
display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? 'none' : 'unset'
}}>
2024-05-07 17:00:32 +08:00
{payCharge}
</div>
<div className='cp-num'>
{data.projContext}
</div>
<div className='cp-smallLine'>
</div>
<div className='cp-time'>
{data.gmtCreate}
</div>
2024-08-01 11:15:33 +08:00
{props.tagArray.map((item: any) => {
2024-07-31 18:41:25 +08:00
return (
2024-08-01 11:15:33 +08:00
2024-07-31 18:41:25 +08:00
<div className='proj-progress' key={item.value} style={{
2024-08-01 11:15:33 +08:00
background: tagIdArray.includes(item.value) ? '#ff7b00' : '',
color: tagIdArray.includes(item.value) ? '#ffffff' : '#5a5a5a',
2024-08-01 13:25:33 +08:00
border: tagIdArray.includes(item.value) ? ' 1px solid #ff7b00' : ' 1px solid #5a5a5a',
2024-08-27 18:29:20 +08:00
// display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? 'block' : 'none'
2024-07-31 18:41:25 +08:00
}}
2024-08-01 11:15:33 +08:00
onClick={() => {
upTag(item.value, data.projId)
// upData(item.value)
// props.updata()
}}
2024-07-31 18:41:25 +08:00
>
{item.label}
</div>
2024-08-01 11:15:33 +08:00
2024-07-31 18:41:25 +08:00
)
})}
2024-08-01 11:15:33 +08:00
2024-07-31 16:00:30 +08:00
</div>
2024-07-31 18:41:25 +08:00
2024-07-31 16:00:30 +08:00
{/* <div style={{ display: payCharge !== '' ? 'block' : 'none' }}>
<div className='proj-progress' style={{display:data.progress?'block':'none'}}>
{data.progress == 'DONE' ? '已完成' : data.progress == 'SUBMIT_FOR_REVIEW' ? '已提交版权中心' : data.progress == 'PRODUCTION' ? '正在制作中' : '等待制作中'}
</div>
</div> */}
2024-08-29 17:56:39 +08:00
<div className='cpt-right' style={{ display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' || data.pay.payStatus == 'CORRECTION2_REFUND' || data.pay.payStatus == 'CORRECTION1_REFUND' ? 'block' : 'none' }}>
2024-07-31 16:00:30 +08:00
2024-05-07 17:00:32 +08:00
{
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>
)
}
2024-08-29 17:56:39 +08:00
<span className='orignLine' style={{ display: data.projStatus == 'EXPIRED' || data.pay.payStatus == 'CORRECTION2_REFUND' ? 'none' : 'unset' }}>|</span>
<span className="cpt-text-btn" style={{ display: data.projStatus == 'EXPIRED' || data.pay.payStatus == 'CORRECTION2_REFUND' ? 'none' : 'unset' }}>
2024-05-07 17:00:32 +08:00
<EyeOutlined />
2024-08-27 18:29:20 +08:00
<span className='text-btn'
onClick={() => {
window.open(`${Axios.defaults?.baseURL}/${data.previewUrl}`, '_blank')
}}></span>
2024-05-07 17:00:32 +08:00
</span>
</div>
</div>
<div className='cp-bot'>
<div className='cpb-left'>
2024-07-15 16:58:47 +08:00
{/* lyp */}
2024-08-27 18:29:20 +08:00
<div className='cpb-left-img' >
2024-07-15 16:58:47 +08:00
<Carousel autoplay dots={false}>
2024-07-25 16:58:56 +08:00
<div className='cpb-left-imgX'>
2024-08-01 16:28:16 +08:00
<img src={downloadUrl(data.loginpage.loginpagePreviewImgs, false)} height={'143px'} alt="" />
2024-07-15 16:58:47 +08:00
</div>
2024-07-25 16:58:56 +08:00
<div className='cpb-left-imgX'>
2024-08-01 16:28:16 +08:00
<img src={downloadUrl(data.codeTypePage.previewImgs, false)} height={'143px'} alt="" />
2024-07-15 16:58:47 +08:00
</div>
2024-07-25 16:58:56 +08:00
2024-07-15 16:58:47 +08:00
</Carousel>
2024-08-28 11:21:51 +08:00
<div className='payStatus' style={{ background: data.pay.payStatus == 'UNPAID' ? '#E85454 ' : data.pay.payStatus == 'PAID' ? '#40BF76' : data.pay.payStatus == 'ARREARS' ? '#FFA200' : data.pay.payStatus == 'FULL_REFUND' ? '#C9C9C9' : data.pay.payStatus == 'CORRECTION1_REFUND' ? '#99B5BD' : data.pay.payStatus == 'CORRECTION2_REFUND' ? '#99A3BD' : '' }}>
{data.pay.payStatus == 'UNPAID' ? '未付款' : data.pay.payStatus == 'PAID' ? '已付款' : data.pay.payStatus == 'ARREARS' ? '欠费' : data.pay.payStatus == 'FULL_REFUND' ? '全额退款' : data.pay.payStatus == 'CORRECTION1_REFUND' ? '补正1次退款' : data.pay.payStatus == 'CORRECTION2_REFUND' ? '补正2次退款' : ''}
2024-08-27 18:29:20 +08:00
</div>
2024-07-15 16:58:47 +08:00
</div>
{/* <img src={downloadUrl(data.codeTypePage.previewImgs)} className='cpb-left-img' alt="" /> */}
2024-05-07 17:00:32 +08:00
<div className='cpbl-right'>
2024-07-31 16:00:30 +08:00
<div style={{ display: 'flex' }}>
2024-08-27 18:29:20 +08:00
<div className='cpbl-money'
style={{ background: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? '#f7edce' : '#ebebeb' }}
>
2024-09-06 17:26:09 +08:00
<div className='money'
2024-08-27 18:29:20 +08:00
style={{ color: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? '#FF5D15' : '#8a8a8a' }}
2024-09-06 17:26:09 +08:00
>() : </div>
<div className='num'
2024-08-27 18:29:20 +08:00
style={{ color: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? '#FF5D15' : '#8a8a8a' }}
2024-08-28 11:21:51 +08:00
>
{data.pay.payment / 100}
2024-09-06 17:26:09 +08:00
</div>
2024-09-13 16:45:01 +08:00
<div className='coupon-num' style={{ display: data.pay.couponAmount ? 'unset' : 'none', color: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? '#FF5D15' : '#8a8a8a' }}>({data.pay.couponAmount / 100})</div>
2024-07-31 16:00:30 +08:00
</div>
<div className='otherMoney'>
{/* <div>基础费用:{basicsValue}</div> */}
<Tag color="#f50" style={{ display: URGENTvalue ? 'block' : 'none' }}>:{URGENTvalue}</Tag>
<Tag color="#2db7f5" style={{ display: pkgValue ? 'block' : 'none' }}>:{pkgValue}</Tag>
<Tag color="#87d068" style={{ display: videoDemoValue ? 'block' : 'none' }}>:{videoDemoValue}</Tag>
</div>
2024-05-07 17:00:32 +08:00
</div>
2024-08-27 18:29:20 +08:00
<div style={{ display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' ? 'block' : 'none' }}>
<div className='cpbl-btn'>
<div className='threeBtn' onClick={() => {
if (data.generate.generateStatus == GenerateStatus.SUCCESS || payCharge == '全托管') {
// nav(`/proj-edit/config-loginpage-show/${data.projId}`)
setLoginPageShowOpne(true);
} else {
// nav(`/proj-edit/config-loginpage/${data.projId}`)
setLoginPageOpne(true)
}
}}>
<img src={setImg} alt="" />
<div></div>
</div>
<div className='threeBtn' onClick={() => {
if (data.generate.generateStatus == GenerateStatus.SUCCESS || payCharge == '全托管') {
// nav(`/proj-edit/config-mod-list-show/${data.projId}`)
setSoftwareManagementShowOpen(true)
} else {
setSoftwareManagementOpen(true)
// 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 || payCharge == '全托管') {
// nav(`/proj-edit/config-menu-list-show/${data.projId}`)
setDisplayOrderShowOpen(true);
} else {
// nav(`/proj-edit/config-menu-list/${data.projId}`)
setDisplayOrderOpen(true);
}
}}>
<img src={orderImg} alt="" />
<div>({data.projModCount})</div>
</div>
2024-05-07 17:00:32 +08:00
</div>
</div>
2024-08-27 18:29:20 +08:00
2024-05-07 17:00:32 +08:00
</div>
</div>
<div className='cline'></div>
2024-08-27 18:29:20 +08:00
<div className='cpb-center' >
<div style={{ fontSize: 16, fontWeight: 500, color: data.projStatus == 'REFUND_APPLYING' ? '' : data.projStatus == 'CLOSE' ? '#73A350 ' : data.projStatus == 'EXPIRED' ? '#FFB667 ' : '' }}>
{data.projStatus == 'REFUND_APPLYING' ? '退款申请中' : data.projStatus == 'CLOSE' ? '该项目已关闭' : data.projStatus == 'EXPIRED' ? '该项目已过期' : ''}
</div>
2024-08-29 17:56:39 +08:00
<div className='cpbc-top' style={{ display: data.projStatus == 'NORMAL' || data.projStatus == 'EXPIRED' || data.pay.payStatus == 'CORRECTION2_REFUND' || data.pay.payStatus == 'CORRECTION1_REFUND' ? 'block' : 'none' }}>
2024-05-07 17:00:32 +08:00
{
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>
2024-09-13 16:45:01 +08:00
{/* <Button size="small" type="text" onClick={() => {
2024-05-07 17:00:32 +08:00
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${data.projId}`)
2024-09-13 16:45:01 +08:00
}}><DownloadOutlined /> </Button> */}
<div className='downloadBox'>
<div className='down-title'>
<DownloadOutlined />
</div>
<div className='down-bot'>
<Button size="small" type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${data.projId}`)
}}> word</Button>
<Button size="small" type="text"
className='down-pdf'
onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/pdf/${data.projId}`)
}}> pdf</Button>
</div>
</div>
2024-05-23 18:21:31 +08:00
{
2024-09-13 16:45:01 +08:00
isShow && <Button className='zpibtn' size="small" type="text" onClick={() => {
2024-05-23 18:21:31 +08:00
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${data.projId}`)
2024-09-13 16:45:01 +08:00
}}
><DownloadOutlined /> </Button>
2024-05-23 18:21:31 +08:00
}
{/* <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-09-13 16:45:01 +08:00
{/* <Button size="small" type="text" onClick={() => {
2024-05-07 17:00:32 +08:00
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${data.projId}`)
2024-09-13 16:45:01 +08:00
}}><DownloadOutlined /> </Button> */}
<div className='downloadBox'>
<div className='down-title'>
<DownloadOutlined />
</div>
<div className='down-bot'>
<Button size="small" type="text" onClick={() => {
2024-10-28 17:33:38 +08:00
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${data.projId}`)
2024-09-13 16:45:01 +08:00
}}> word</Button>
<Button size="small"
className='down-pdf'
type="text" onClick={() => {
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/pdf/${data.projId}`)
}}> pdf</Button>
</div>
</div>
2024-10-28 17:29:45 +08:00
<Button size="small" type="text" onClick={() => {
// window.open(`${Axios.defaults?.baseURL}/route/proj/download/all/${data.projId}`)
downAll(data.projId,data.projName)
}}><DownloadOutlined /> </Button>
2024-05-07 17:00:32 +08:00
</div>
) : <></>
}
</div>
2024-07-31 16:00:30 +08:00
{/* <div className='cpbc-bot'>
2024-05-07 17:00:32 +08:00
<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('');
}
});
}} />
) : <></>
}
2024-07-31 16:00:30 +08:00
</div> */}
2024-07-31 18:41:25 +08:00
<div className='cpbc-bot' style={{ color: '#FFA415' }}>
2024-09-10 11:52:02 +08:00
2024-07-31 18:41:25 +08:00
:{data.apply.authorName}
2024-05-07 17:00:32 +08:00
</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-07-25 16:58:56 +08:00
</div >
2024-05-28 18:00:42 +08:00
{/* 第四步 设置 */}
2024-07-25 16:58:56 +08:00
< Modal open={loginPageOpne}
2024-05-28 18:00:42 +08:00
title="登陆页面设置"
width={1700}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
setLoginPageOpne(false);
2024-05-29 14:43:48 +08:00
// window.location.reload(); // 在取消时刷新页面
2024-07-25 16:58:56 +08:00
}
}
2024-05-28 18:00:42 +08:00
footer={null}
>
<LoginPage projId={projId} closeModal={() => { setLoginPageOpne(false) }}></LoginPage>
2024-07-25 16:58:56 +08:00
</ Modal>
2024-05-28 18:00:42 +08:00
{/* 第四步 查看 */}
2024-07-25 16:58:56 +08:00
< Modal open={loginPageShowOpne}
2024-05-28 18:00:42 +08:00
title="登陆页面查看"
width={1700}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
setLoginPageShowOpne(false);
2024-05-29 14:43:48 +08:00
2024-05-28 18:00:42 +08:00
}}
footer={null}
>
<LoginPageShow projId={projId}></LoginPageShow>
2024-07-25 16:58:56 +08:00
</Modal >
2024-05-28 18:00:42 +08:00
{/* 第五步 设置 */}
2024-07-25 16:58:56 +08:00
< Modal open={softwareManagementOpen}
2024-05-28 18:00:42 +08:00
title="软件功能管理设置"
width={1500}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
2024-07-16 16:53:47 +08:00
// props.upreqData()
2024-05-28 18:00:42 +08:00
setSoftwareManagementOpen(false);
2024-06-07 16:39:22 +08:00
// props.getreqData()
2024-05-29 14:43:48 +08:00
// window.location.reload(); // 在取消时刷新页面
2024-05-28 18:00:42 +08:00
}}
footer={null}
>
<SoftwareManagement projId={projId}></SoftwareManagement>
2024-07-25 16:58:56 +08:00
</Modal >
2024-05-28 18:00:42 +08:00
{/* 第五步 查看 */}
2024-07-25 16:58:56 +08:00
< Modal open={softwareManagementShowOpen}
2024-05-28 18:00:42 +08:00
title="软件功能管理查看"
width={1500}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
setSoftwareManagementShowOpen(false);
}}
footer={null}
>
<SoftwareManagementShow projId={projId}></SoftwareManagementShow>
2024-07-25 16:58:56 +08:00
</Modal >
2024-05-28 18:00:42 +08:00
{/* 第六步 设置 */}
2024-07-25 16:58:56 +08:00
< Modal open={displayOrderOpen}
2024-05-28 18:00:42 +08:00
title="设置功能列表显示顺序"
width={1500}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
2024-07-16 16:53:47 +08:00
// props.upreqData()
2024-05-28 18:00:42 +08:00
setDisplayOrderOpen(false);
}}
footer={null}
>
<DisplayOrder projId={projId}></DisplayOrder>
2024-07-25 16:58:56 +08:00
</Modal >
2024-05-28 18:00:42 +08:00
{/* 第六步 查看 */}
2024-07-25 16:58:56 +08:00
< Modal open={displayOrderShowOpen}
2024-05-28 18:00:42 +08:00
title="查看功能列表显示顺序"
width={1500}
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-28 18:00:42 +08:00
onCancel={() => {
setDisplayOrderShowOpen(false);
}}
footer={null}
>
<DisplayOrderShow projId={projId}></DisplayOrderShow>
2024-07-25 16:58:56 +08:00
</Modal >
2024-04-02 18:45:46 +08:00
{messageContext}
2024-10-28 17:29:45 +08:00
<Modal title="提示"
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
height: `${height}px`,
}}
destroyOnClose={true}
open={downModal}
footer={
<Button
type="primary"
onClick={() => setDownModal(false)}
// style={{
// backgroundColor: '#ff4d4f', // 自定义背景颜色
// borderColor: '#ff4d4f', // 自定义边框颜色
// color: '#fff', // 自定义文字颜色
// }}
>
</Button>
}
onCancel={() => { setDownModal(false) }} width={500} >
<div style={{width:500}}>
<span style={{marginLeft:10}}><LoadingOutlined /></span>
</div>
</Modal>
2024-04-01 20:39:22 +08:00
</>
2024-03-13 16:11:28 +08:00
)
}