import './proj-edit.css'; // import {Link, useNavigate, useParams} from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom"; import { Button, // FloatButton, message, Modal, Tag, Upload, // GetProp, UploadProps, } from "antd"; import { UploadOutlined } from '@ant-design/icons'; import TextArea from "antd/es/input/TextArea"; import StepProjEdit from "../../components/step/StepProjEdit.tsx"; import CardProjEdit from "../../components/card/CardProjEdit.tsx"; import { Process } from "../../interfaces/step/IStepProj.ts"; import CardProjLoading from "../../components/card/CardProjLoading.tsx"; import CardProjResult from "../../components/card/CardProjResult.tsx"; import CardProjDownload from "../../components/card/CardProjDownload.tsx"; import CardProjJump from "../../components/card/CardProjJump.tsx"; import { useEffect, useState } from "react"; import { Axios, get, put, post, uploadFileUrl, DevUserId, downloadUrl } from "../../util/AjaxUtils.ts"; import { EditStepEnum, IProjEdit } from "../../interfaces/card/ICardProj.ts"; import { MIN_MOD_SIZE } from "./edit/ProjConfigModList.tsx"; import { GenerateStatus } from "../../interfaces/proj/IProj.ts"; // import AiHelper from "../../components/ai/AiHelper.tsx"; import TitleIntroduction from '../../route/proj/edit/ProjEditStep1.tsx' import TitleIntroductionShow from '../../route/proj/edit/ProjEditStep1Show.tsx' import SoftwareInfo from '../../route/proj/edit/ProjEditStep2.tsx' import SoftwareInfoShow from '../../route/proj/edit/ProjEditStep2Show.tsx' import SoftwareFeatures from '../../route/proj/edit/ProjEditStep3.tsx' import SoftwareFeaturesShow from '../../route/proj/edit/ProjEditStep3Show.tsx' import LoginPage from '../../route/proj/edit/ProjConfigLoginpage.tsx' import LoginPageShow from '../../route/proj/edit/ProjConfigLoginpageShow.tsx' 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' import PRODUCTION from '../../static/status/PRODUCTION.gif' import SUBMIT from '../../static/status/SUBMIT.gif' import DONE from '../../static/status/DONE.gif' import ING from '../../static/status/ING.gif' // import aiGif from '../../static/ai.gif' // type AiHelperType = { // projId: string; // projIntroduction: string; // projDesc: string; // projMods: ProjModType[]; // } // type ProjModType = { // name: string, // desc: string // } // type FileType = Parameters>[0]; export default function ProjEditAll() { // 进度提示弹窗 const [progressModal, setprogressModal] = useState(true) // 当前进度 const [progress, setprogress] = useState('') //证书img const [certificate, setcertificate] = useState('') // 回复信息 const [aContent, setaContent] = useState('') // 回复问题的id const [projMaterialsAddId, setprojMaterialsAddId] = useState('') // 上传附件 const [uploadedFiles, setUploadedFiles] = useState([]); // 接口需要的文件id数组 // const [aFiles, setAFiles] = useState([]) const [isUploadDisabled, setIsUploadDisabled] = useState(false); const props: UploadProps = { maxCount: 6,//上传限制最多6个 action: uploadFileUrl(), headers: { 'X-USER-ID': DevUserId, }, // headers={{'X-USER-ID': DevUserId}} beforeUpload: (file) => { const isPNG = file.type === 'application/pdf'; if (!isPNG) { message.error('只能上传 PDF 格式文件!'); return Upload.LIST_IGNORE; // 不允许上传非PDF文件 } // return isPNG || Upload.LIST_IGNORE; // 检查是否已经上传过相同文件 const isDuplicate = uploadedFiles.some(uploadedFile => ( uploadedFile.name === file.name && uploadedFile.size === file.size )); if (isDuplicate) { message.error('文件已经存在,请勿重复上传!'); return Upload.LIST_IGNORE; // 不允许上传重复文件 } return true; // 允许上传文件 }, onChange: (info) => { // console.log(info.fileList); if (info.file.status === 'done') { message.success('上传成功'); // info.file.name = '协议文件'; // console.log('列表', info.file); setUploadedFiles([...uploadedFiles, info.file]); // 将上传成功的文件信息添加到列表中 // setUploadSignFileId(info.file.response.data.fileId); } else if (info.file.status === 'error') { message.error('上传失败'); } setIsUploadDisabled(info.fileList.length >= 6); }, // action={uploadFileUrl()} onRemove: (info) => { // console.log('删除', info); setUploadedFiles(prevFiles => prevFiles.filter(prevFile => prevFile.uid !== info.uid)); } }; // const [uploadSignFileId, setUploadSignFileId] = useState(''); //第一步 标题简介弹窗 const [titleIntroductionOpen, setTitleIntroductionOpen] = useState(false) const [titleIntroductionShowOpen, setTitleIntroductionShowOpen] = useState(false) //第二步 软件基本信息弹窗 const [softwareInfoOpen, setSoftwareOpen] = useState(false) const [softwareInfoShowOpen, setSoftwareShowOpen] = useState(false) // 第三步 软件功能特点弹窗 const [softwareFeaturesOpen, setSoftwareFeaturesOpen] = useState(false) const [softwareFeaturesShowOpen, setSoftwareFeaturesShowOpen] = useState(false) // 第四步 登陆页面设置 const [loginPageOpne, setLoginPageOpne] = useState(false) const [loginPageShowOpne, setLoginPageShowOpne] = useState(false) // 第五步 软件功能管理 const [softwareManagementOpen, setSoftwareManagementOpen] = useState(false) const [softwareManagementShowOpen, setSoftwareManagementShowOpen] = useState(false) // 第六步 显示顺序 const [displayOrderOpen, setDisplayOrderOpen] = useState(false) const [displayOrderShowOpen, setDisplayOrderShowOpen] = useState(false) // 判断是否完成状态 成功未处理/失败/正在处理 // 模块数量 // const [projModCount, setprojModCount] = useState(0) const height = window.innerHeight - 180; const nav = useNavigate(); const pathParams = useParams(); // 是否显示下载代码压缩包模块 // const [showZpi, setShowZpi] = useState(false) const [messageApi, contextHolder] = message.useMessage(); const [editStepArray, setEditStepArray] = useState([]); const [configArray, setConfigArray] = useState([]); const [isEditStepEdited, setIsEditStepEdited] = useState(false); const [isConfigEdited, setIsConfigEdited] = useState(false); const [canGenerate, setCanGenerate] = useState(false); const [generateStatus, setGenerateStatus] = useState(GenerateStatus.NONE); const [generateEmainingTime, setGenerateEmainingTime] = useState(0); const [isGenerateModalOpen, setIsGenerateModalOpen] = useState(false); const [previewUrl, setPreviewUrl] = useState(''); const [generateErrorModal, setGenerateErrorModal] = useState(false); const [generateErrorMsg, setGenerateErrorMsg] = useState(''); const [aiHelperModalOpen, setAiHelperModalOpen] = useState(false); // const [aiHelper, setAiHelper] = useState({ // projId: '', // projIntroduction: '', // projDesc: '', // projMods: [], // }); // 点击回复弹窗 const [replyModal, setReplyModal] = useState(false) // const height = window.innerHeight - 240; const renderEditStep = (data: any, isEdited: boolean) => { // console.log('嘻嘻', data); // projIntroduction const editStepArray: IProjEdit[] = []; editStepArray.push( { title: '第1步:软件简介确认', desc: '修改软件系统的相关简介与详细介绍', step: 1, // btnName: !isGenerateSuccess ? '设置' : '查看', btnName: '查看', status: data.projIntroduction ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (!isGenerateSuccess) { // // nav(`/proj-edit/step1/${pathParams.projId}`) // setTitleIntroductionOpen(true) // } else { // nav(`/proj-edit/step1-show/${pathParams.projId}`) setTitleIntroductionShowOpen(true) // } } }, { title: '第2步:软件基本信息填写', desc: '完善软件简称、版本号、软件所属者及联系人等信息', step: 2, // btnName: !isGenerateSuccess ? '设置' : '查看', btnName: '查看', status: data.apply.projDevCompleteDate ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (generateStatus != GenerateStatus.SUCCESS) { // if (!isGenerateSuccess) { // // nav(`/proj-edit/step2/${pathParams.projId}`) // setSoftwareOpen(true) // } else { // nav(`/proj-edit/step2-show/${pathParams.projId}`) setSoftwareShowOpen(true) // } } }, { title: '第3步:软件功能特点设置', desc: '设置软件相关功能特点', step: 3, btnName: '查看', status: data.apply.envHardDev ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (!isGenerateSuccess) { // // nav(`/proj-edit/step3/${pathParams.projId}`) // setSoftwareFeaturesOpen(true) // } else { // nav(`/proj-edit/step3-show/${pathParams.projId}`) setSoftwareFeaturesShowOpen(true) // } } }, { title: '第4步:登录页面设置', desc: '对登录界面进行个性化设置,包括背景图片等', step: 1, btnName: '查看', // 状态判断lyp status: data.loginpage.loginpageId ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (!isGenerateSuccess) { // // nav(`/proj-edit/config-loginpage/${pathParams.projId}`) // setLoginPageOpne(true) // } else { // nav(`/proj-edit/config-loginpage-show/${pathParams.projId}`) setLoginPageShowOpne(true) // } } }, // { // title: '著作人信息', // desc: '请完善著作人相关信息', // step: 4, // btnName: !isGenerateSuccess ? '设置' : '查看', // status: editSteps[3].editStatus, // handleEdit() { // if (!isGenerateSuccess) { // nav(`/proj-edit/step4/${pathParams.projId}`) // } else { // nav(`/proj-edit/step4-show/${pathParams.projId}`) // } // } // }, // { // title: '申请人信息', // desc: '请完善申请人信息', // step: 5, // btnName: !isGenerateSuccess ? '设置' : '查看', // status: editSteps[4].editStatus, // handleEdit() { // if (!isGenerateSuccess) { // nav(`/proj-edit/step5/${pathParams.projId}`) // } else { // nav(`/proj-edit/step5-show/${pathParams.projId}`) // } // } // }, // { // title: '选择登录页面', // desc: '选择软件的登录页面模板', // step: 6, // btnName: !isGenerateSuccess ? '设置' : '查看', // status: editSteps[5].editStatus, // handleEdit() { // if (!isGenerateSuccess) { // nav(`/proj-edit/step6/${pathParams.projId}`) // } else { // nav(`/proj-edit/step6-show/${pathParams.projId}`) // } // } // } ) setEditStepArray(editStepArray); setIsEditStepEdited(isEdited); } const renderSetting = (data: any, isConfig: boolean) => { const configArray: IProjEdit[] = []; configArray.push( // { // title: '登录界面设置', // desc: '请对登录界面完成个性化设置', // step: 1, // btnName: !isGenerateSuccess ? '设置' : '查看', // status: data.loginpage.loginpageId ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, // handleEdit() { // if (!isGenerateSuccess) { // nav(`/proj-edit/config-loginpage/${pathParams.projId}`) // } else { // nav(`/proj-edit/config-loginpage-show/${pathParams.projId}`) // } // } // }, { title: '第5步:对软件功能进行管理', desc: '可对软件功能列表进行添加与修改', step: 2, btnName: '查看', status: data.projModCount >= MIN_MOD_SIZE ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (!isGenerateSuccess) { // // nav(`/proj-edit/config-mod-list/${pathParams.projId}`) // setSoftwareManagementOpen(true) // } else { // nav(`/proj-edit/config-mod-list-show/${pathParams.projId}`) setSoftwareManagementShowOpen(true) // } } }, { title: '第6步:设置功能列表显示顺序', desc: '调整菜单顺序', step: 3, btnName: '查看', status: data.projModCount >= MIN_MOD_SIZE ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { // if (!isGenerateSuccess) { // // nav(`/proj-edit/config-menu-list/${pathParams.projId}`) // setDisplayOrderOpen(true) // } else { // nav(`/proj-edit/config-menu-list-show/${pathParams.projId}`) setDisplayOrderShowOpen(true); // } } } ) setConfigArray(configArray); setIsConfigEdited(isConfig); } const renderData = () => { get({ messageApi: messageApi, // url: `/api/proj/get/${pathParams.projId}`, url: `/api/proj/claim/get/${pathParams.projId}`, onSuccess({ data }) { // console.log('嘻嘻', data); setcertificate(data.certificates) setprogress(data.progress) // console.log('状态判断', data.pay.chargeAdditionals); // setShowZpi(true) // const isShow = data.pay.chargeAdditionals.includes('PKG') // console.log(isShow); // if (isShow) { // setShowZpi(true) // } else { // setShowZpi(false) // } // const isEdited = data.editSteps[0].editStatus == EditStepEnum.EDITED // && data.editSteps[1].editStatus == EditStepEnum.EDITED // && data.editSteps[2].editStatus == EditStepEnum.EDITED // && data.editSteps[3].editStatus == EditStepEnum.EDITED // && data.editSteps[4].editStatus == EditStepEnum.EDITED // && data.editSteps[5].editStatus == EditStepEnum.EDITED; // setprojModCount(data.projModCount) const isEdited = Boolean(data.projIntroduction) == true && Boolean(data.apply.projDevCompleteDate) == true && Boolean(data.apply.envHardDev) == true && Boolean(data.loginpage.loginpageId) == true // console.log('isEdited',isEdited); const isConfig = data.loginpage.loginpageId && data.projModCount >= MIN_MOD_SIZE; const isGenerate = isEdited && isConfig; // const isGenerateSuccess: boolean = data.generate.generateStatus == GenerateStatus.SUCCESS || data.generate.generateStatus == GenerateStatus.GENERATING; renderEditStep(data, isEdited); renderSetting(data, isConfig,); setCanGenerate(isGenerate); setGenerateStatus(data.generate.generateStatus); setPreviewUrl(data.previewUrl); setGenerateEmainingTime(data.generate.generateEmainingTime); setGenerateErrorMsg(data.generate.generateMsg); // setAiHelper({ // projId: data.projId, // projIntroduction: data.projIntroduction, // projDesc: data.projDesc, // projMods: data.projMods // }) // setAiHelperModalOpen(!data.projIntroduction || !data.projDesc) } }) } const [questionList, setQuestionList] = useState([]) // 获取问题及回复列表 const getQuestionList = () => { get({ messageApi: messageApi, url: `/api/proj/materials/add/listpage/${pathParams.projId}`, onSuccess({ data }) { // console.log('问题列表', data); setQuestionList(data.rows) // console.log(JSON.parse(data.rows[0].aFiles)); } }) } useEffect(() => { renderData(); getQuestionList() }, []) return (
{contextHolder} {/* 首页}, {title: 创建项目}, {title: '编辑项目'}, ]} /> */} {/*
*/}
{ editStepArray.map((item, index) => { return }) } {/*trueisEditStepEdited*/} { configArray.map((item, index) => { return }) } { isEditStepEdited && isConfigEdited ? ( { window.open(`${Axios.defaults?.baseURL}/${previewUrl}`, '_blank') }} /> ) : <> } { generateStatus == GenerateStatus.NONE || generateStatus == GenerateStatus.FAILED ? ( { setIsGenerateModalOpen(true); // setTimeout(() => { // window.location.reload(); // }, 1000) }} // background = {status == EditStepEnum.EDITED?'#F5FAFE':'#f3f3f3'} // shadow = {status == EditStepEnum.EDITED?'0px 3px 0px 0px rgba(55,144,215,0.18)':''} background='#f3f3f3' /> ) : <> } { generateStatus == GenerateStatus.PENDING ? ( { setTimeout(() => { window.location.reload(); }, 1000) }} /> ) : <> } { generateStatus == GenerateStatus.GENERATING ? ( { renderData(); }} handleCountDownOver={() => { renderData(); }} /> ) : <> } { generateStatus == GenerateStatus.SUCCESS ? ( ) : <> } { generateStatus == GenerateStatus.FAILED ? ( { setGenerateErrorModal(true); console.log('反馈') }} /> ) : <> } { window.open(`${Axios.defaults?.baseURL}/route/proj/download/apply/${pathParams.projId}`) }} /> { window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${pathParams.projId}`) }} /> {/* {showZpi && ( */} { window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${pathParams.projId}`) }} /> {/* )} */} {/* { window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${pathParams.projId}`) }} /> */} { window.open(`${Axios.defaults?.baseURL}/route/proj/download/code/${pathParams.projId}`) }} /> { window.open(downloadUrl(certificate, false), '_blank') }} /> {/* {*/} {/* nav(`/agent-select/${pathParams.projId}`);*/} {/* }}*/} {/*/>*/}
资料补充
暂无数据
{questionList.length == 0 ? (<> ) : (<> {questionList.map((item, index) => (
提问
{item.status == 'NONE' ? '未回复' : item.status == 'PASSED' ? '通过' : item.status == 'UN_PASSED' ? '未通过' : item.status == 'PENDING' ? '待审核' : ''}
{item.qContent}
{/*
{ window.open(downloadUrl(item.qFiles)) }}>{item.qFiles}
*/} {item.qFileKVs.length == 0 ? (<>) : (<> {item.qFileKVs.map((item: any, index: number) => (
{ // window.open(downloadUrl(item.key)) window.open(downloadUrl(item.key, false), '_blank') }}>{item.value}
{/* , */}
))} )}
未通过原因:{item.reason}
回复
{item.aContent}
{item.aFileKVs.length == 0 ? (<>) : (<> {item.aFileKVs.map((item: any, index: number) => (
{ // window.open(downloadUrl(item.key)) window.open(downloadUrl(item.key, false), '_blank') }}>{item.value}
{/* , */}
))} )}
))} )} {/*
提问
未通过
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
文件1,文件2
回复
哈哈哈哈哈哈哈哈
文件1,文件2
*/}
{/* { setAiHelperModalOpen(true) }} description={AI} >AI助手 */} {/*
{ setAiHelperModalOpen(true) }}>
*/} { setTimeout(() => { window.location.reload(); }, 1000) post({ messageApi, url: `/api/proj/generate/proj-id/${pathParams.projId}`, body: {}, onSuccess() { messageApi.success('提交成功'); setIsGenerateModalOpen(false); renderData(); } }) }} onCancel={() => { setIsGenerateModalOpen(false); }}>
点击“确定按钮”后,项目便无法再次修改,建议通过预览查看系统,确认无误后点击“确定按钮”。
{ setGenerateErrorModal(false) }} >

{generateErrorMsg}

{ setAiHelperModalOpen(false); renderData() // setAiHelperModalOpen(false); // console.log(123); }} > {/*
{ renderData() }} />
*/}
{/* 第1步设置 */} { setTitleIntroductionOpen(false); // setTimeout(() => { // window.location.reload() // }, 500) }} footer={null} > { setTitleIntroductionOpen(false) renderData() }}> {/* 第1步查看 */} { setTitleIntroductionShowOpen(false); }} footer={null} > {/* 第二步设置 */} { setSoftwareOpen(false); // setTimeout(() => { // props.closeModal() // window.location.reload(); // 刷新页面 // }, 1000); // setTimeout(() => { // window.location.reload() // }, 500) }} footer={null} > { setSoftwareOpen(false) renderData() }}> {/* 第二步查看 */} { setSoftwareShowOpen(false); }} footer={null} > {/* 第三步 设置 */} { setSoftwareFeaturesOpen(false); // setTimeout(() => { // window.location.reload() // }, 500) }} footer={null} > { setSoftwareFeaturesOpen(false) renderData() }}> {/* 第三步 查看 */} { setSoftwareFeaturesShowOpen(false); }} footer={null} > {/* 第四步 设置 */} { setLoginPageOpne(false); // setTimeout(() => { // window.location.reload() // }, 500) }} footer={null} > { setLoginPageOpne(false) renderData() }}> {/* 第四步 查看 */} { setLoginPageShowOpne(false); }} footer={null} > {/* 第五步 设置 */} { renderData() setSoftwareManagementOpen(false); }} footer={null} > {/* 第五步 查看 */} { setSoftwareManagementShowOpen(false); }} destroyOnClose={true} footer={null} > {/* 第六步 设置 */} { renderData() setDisplayOrderOpen(false); }} footer={null} > {/* 第六步 查看 */} { setDisplayOrderShowOpen(false); }} footer={null} > { // console.log('上传文件', uploadedFiles); // return // console.log('上传信息', aContent) if (aContent == '') { messageApi.open({ type: 'error', content: '请回复内容' }) } else if (uploadedFiles.length == 0) { messageApi.open({ type: 'error', content: '请上传文件' }) } else { put({ messageApi, url: `/api/proj/materials/add/update-a/${projMaterialsAddId}`, body: { aContent, // aFiles: uploadedFiles.map(file => file.response.data.fileId) aFiles: uploadedFiles.map(file => file.response.data.fileId).join(',') }, onBefore() { }, onSuccess() { // alert('编辑成功') messageApi.open({ type: 'success', content: '回复成功' }) setTimeout(() => { setReplyModal(false); getQuestionList() // window.location.reload(); // 刷新页面 }, 1000); // getProjOwnerList() }, onFinally() { } }) } // uploadedFiles.map(file => file.uid); // put({ // messageApi, // url: `/api/proj/materials/add/update-a/${projMaterialsAddId}`, // body: { // aContent, // aFiles: uploadedFiles.map(file => file.response.data.fileId) // }, // onBefore() { // }, // onSuccess() { // // alert('编辑成功') // messageApi.open({ // type: 'success', // content: '回复成功' // }) // setTimeout(() => { // setReplyModal(false); // getQuestionList() // // window.location.reload(); // 刷新页面 // }, 1000); // // getProjOwnerList() // }, // onFinally() { // } // }) }} onCancel={() => { setReplyModal(false); }}>
附件:
{ setprogressModal(false); }}>
{progress=='PRODUCTION'?'您申请的软著正在制作中,预计一日内完成':progress=='SUBMIT_FOR_REVIEW'? '您申请的软著已提交国家版权中心,预计60个工作日内下证':progress=='DONE'? '您申请的软著已完成,请在页面证书下载处下载':'您申请的软著等待制作中,预计两日内完成'}
) }