From 2a6d12ed782b4eecad6496db418aedee24419b20 Mon Sep 17 00:00:00 2001 From: lyp Date: Wed, 28 May 2025 17:28:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/request/api.ts | 22 +- src/route/AppElectron/AppEdit.tsx | 102 +- src/route/AppElectron/AppElectron.tsx | 27 +- .../components/AppCompany/AppCompany.tsx | 75 +- .../components/EditAppFiles/EditAppFiles.tsx | 940 +++++++++----- .../components/EditAppInfo/EditAppInfo.tsx | 1092 +++++++++++------ src/route/Correction/Correction.tsx | 4 +- src/route/index/Index.tsx | 18 +- 8 files changed, 1500 insertions(+), 780 deletions(-) diff --git a/src/request/api.ts b/src/request/api.ts index b3710fe..8b50a97 100644 --- a/src/request/api.ts +++ b/src/request/api.ts @@ -127,13 +127,13 @@ export const unbind = () => phoneRequest.get(`/operator/api/user-wx-update-usern // APP电子软著接口---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //获取APP电子软著可买商品展示列表 -export const appGoodsList = () => aiShopRequest.get(`/aishop/api/data/listbyparentid/71831561-108f-49f0-92c8-f9e4f0483c02`) +export const appGoodsList = () => aiShopRequest.get(`/aishop/api/apporder/money-list`) // 获取运行系统选项 export const runSystemList = () => aiShopRequest.get(`/aishop/api/data/listbyparentid/9fc8636a-b930-4e82-beb3-db7ca6151e6b`) // 获取大类选项 export const bigClassList = () => aiShopRequest.get(`/aishop/api/data/listbyparentid/8abb5b58-83d2-465c-b164-a189efee28c1`) // 获取小类 -export const smallClassList = (id:string) => aiShopRequest.get(`/aishop/api/data/listbyparentid/8abb5b58-83d2-465c-b164-a189efee28c1/${id}`) +export const twoClass = (id:string) => aiShopRequest.get(`/aishop/api/data/listbyparentid/${id}`) // 下单购买APP电子软著 export const buyAppGoods = (orderMoneyId:string) => aiShopRequest.post(`/aishop/api/apporder/pay/${orderMoneyId}`) @@ -142,7 +142,21 @@ export const appOrderList = (params:any) => aiShopRequest.get(`/aishop/api/appor // 获取app电子软著详情 export const appOrderDetail = (appOrderId:any) => aiShopRequest.get(`/aishop/api/apporder/get/${appOrderId}`) // 生成授权书word文件 -export const authorizeWord = (appOrderId:any,companyName:string) => aiShopRequest.get(`/aishop/api/apporder/create-file/SHOP04/${appOrderId}?name=${companyName}授权书&companyName=${companyName}`) -// 企业认证 +export const authorizeWord = (appOrderId:string,companyName:string) => aiShopRequest.get(`/aishop/api/apporder/create-file/SHOP04/${appOrderId}?name=${companyName}授权书&companyName=${companyName}`) +// 生成合协议word文件 +export const agreementWord = (appOrderId:string,appName:string,versionName:string) => aiShopRequest.get(`aishop/api/apporder/create-file/SHOP01/${appOrderId}?name=${appName}合作协议&appName=${appName}&versionName=${versionName}`) +// 生成源码文档word文件 +export const sourceCodeWord = (appOrderId:string,) => aiShopRequest.get(`aishop/api/apporder/create-file/SHOP02/${appOrderId}?name=源码文档示例`) +// 生成软件文档word文件 +export const softwareDocumentWord = (appOrderId:string,) => aiShopRequest.get(`aishop/api/apporder/create-file/SHOP03/${appOrderId}?name=软件文档示例`) + +// 获取文件详细信息 +export const fileDetail = (fileId:string) => aiShopRequest.get(`aishop/api/file/list?ids=${fileId}`) +// 第一步 企业认证 export const companyAuth = (appOrderId:any,params:any) => aiShopRequest.post(`aishop/api/apporder/update/1/${appOrderId}`,params) +// 第二步 软件基本信息填写 +export const softwareInfo = (appOrderId:any,params:any) => aiShopRequest.post(`aishop/api/apporder/update/2/${appOrderId}`,params) +// 第三步 上传鉴别材料 +export const uploadMaterial = (appOrderId:any,params:any) => aiShopRequest.post(`/aishop/api/apporder/update/3/${appOrderId}`,params) + // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/src/route/AppElectron/AppEdit.tsx b/src/route/AppElectron/AppEdit.tsx index e261f0e..3bd8361 100644 --- a/src/route/AppElectron/AppEdit.tsx +++ b/src/route/AppElectron/AppEdit.tsx @@ -8,7 +8,12 @@ import EditAppFiles from './components/EditAppFiles/EditAppFiles'; import AppInfo from './components/AppInfo/AppInfo'; import AppCompany from './components/AppCompany/AppCompany'; import { useParams } from 'react-router-dom' -import { runSystemList, bigClassList, smallClassList } from '../../request/api' +import { + runSystemList, bigClassList, + // twoClass, + // fileDetail +} from '../../request/api' +// import { showImage } from '../../request/request' import './app-edit.css' import { RightOutlined @@ -25,7 +30,7 @@ export default function AppEdit() { const appOrderId = pathParams.appOrderId; const [systemList, setSystemList] = useState([]); // 运行系统选项 const [bigClass, setBigClass] = useState([]); // 软件分类(大类)选项 - const [smallClass, setSmallClass] = useState([]); // 软件分类(小类)选项 + // const [smallClass, setSmallClass] = useState([]); // 软件分类(小类)选项 // 获取运行系统选项 const getRunSystemList = async () => { try { @@ -59,17 +64,17 @@ export default function AppEdit() { const getBigClassList = async () => { try { const res: any = await bigClassList(); - console.log('大类选项', res.map((item: any) => { + // console.log('大类选项', res.map((item: any) => { + // return { + // label: item.dataName, + // value: item.dataId, + // } + // })); + setBigClass(res.map((item: any) => { return { label: item.dataName, value: item.dataId, } - })); - setBigClass(res.map((item: any) => { - return { - label: item.dataId, - value: item.dataName, - } })) } catch (error: any) { @@ -85,29 +90,29 @@ export default function AppEdit() { } } // 获取小类选项 - const getSmallClassList = async (id: string) => { - try { - const res: any = await smallClassList(id); - console.log(res); - setSmallClass(res.map((item: any) => { - return { - label: item.dataId, - value: item.dataName, - } - })) - } catch (error: any) { + // const getSmallClassList = async (id: string) => { + // try { + // const res: any = await twoClass(id); + // console.log('小类', res); + // setSmallClass(res.map((item: any) => { + // return { + // label: item.dataId, + // value: item.dataName, + // } + // })) + // } catch (error: any) { - if (error.response) { - const data = error.response.data; - messageApi.open({ - type: 'error', - content: data.msg ? data.msg : `${data.path}(${data.status})`, - }); - } else { - console.error(error) - } - } - } + // if (error.response) { + // const data = error.response.data; + // messageApi.open({ + // type: 'error', + // content: data.msg ? data.msg : `${data.path}(${data.status})`, + // }); + // } else { + // console.error(error) + // } + // } + // } const [loading, setLoading] = useState(false); const [editProcess, setEditProcess] = useState(1); @@ -132,16 +137,20 @@ export default function AppEdit() { projOwnerName: '',//著作权人姓名 projOwnerIdentity: '',//著作权人证件号 projOwnerId: '',//著作权人信息ID + getFile: '',//获取文件 }) // 材料信息 const [filesInfo, setFilesInfo] = useState({ sourceCodeDocFile: '',//源码 softwareDocFile: '',//软件 }) + // 文件想想请 + // const [fileList, setFileList] = useState([]); // 获取详情 const getAppOrderDetail = async () => { try { setLoading(true) + const res: any = await appOrderDetail(appOrderId); console.log('详情', res); setCompanyInfo({ @@ -163,12 +172,24 @@ export default function AppEdit() { projOwnerName: res.projOwnerName,//著作权人姓名 projOwnerIdentity: res.projOwnerIdentity,//著作权人证件号 projOwnerId: res.projOwnerId,//著作权人信息ID + getFile: res.getFile,//获取文件 }) setFilesInfo({ sourceCodeDocFile: res.sourceCodeDocFile,//源码 softwareDocFile: res.softwareDocFile,//软件 }) setEditProcess(Number(res.appOrderProgress) + 1) + // const fileres: any = await fileDetail(res.getFile) + // console.log('文件详情', fileres); + + // setFileList([ + // { + // uid: fileres[0].fileId, + // name: fileres[0].fileName, + // status: 'done', + // url: showImage(fileres[0].fileId) + // } + // ]) setLoading(false) } catch (error: any) { @@ -196,9 +217,9 @@ export default function AppEdit() { getRunSystemList() getBigClassList() - if (appInfo.bigClassify) { - getSmallClassList(appInfo.bigClassify) - } + // if (appInfo.bigClassify) { + // getSmallClassList(appInfo.bigClassify) + // } }, []); const height = window.innerHeight - 180; return ( @@ -327,8 +348,14 @@ export default function AppEdit() { appOrderId={appOrderId} bigClass={bigClass} systemList={systemList} - smallClass={smallClass} + // smallClass={smallClass} + // fileList={fileList} appInfo={appInfo} + setAppInfo={ + (val: any) => { + setAppInfo(val) + } + } setEditProcess={ (num: number) => { setEditProcess(num) @@ -346,6 +373,11 @@ export default function AppEdit() { { + setFilesInfo(val) + } + } setEditProcess={ (num: number) => { setEditProcess(num) diff --git a/src/route/AppElectron/AppElectron.tsx b/src/route/AppElectron/AppElectron.tsx index 430a7c0..49674cd 100644 --- a/src/route/AppElectron/AppElectron.tsx +++ b/src/route/AppElectron/AppElectron.tsx @@ -21,6 +21,8 @@ interface DataType { appOrderPayMoney: number; //支付金额; appOrderPayTime: string; //支付时间; gmtCreate: string; + bigClassifyName: string; //软件分类(大类) + subClassifyName: string; //软件分类(子类) } export default function AppElectron() { const nav = useNavigate(); @@ -33,12 +35,14 @@ export default function AppElectron() { dataIndex: 'index', key: 'index', align: 'center', + fixed: 'left', width: 90, render: (_text, _record, index) => (page - 1) * 10 + index + 1, // 显示序号,从1开始 }, { title: '项目名称', + fixed: 'left', dataIndex: 'appName', key: 'appOrderId', align: 'center', @@ -58,13 +62,13 @@ export default function AppElectron() { dataIndex: 'bigClassify', align: 'center', key: 'appOrderId', - width: 120, + width: 200, ellipsis: { showTitle: true, }, - render: (text) => ( + render: (text, record) => ( - {text ? text : '未完善'} + {text ? ` ${record.bigClassifyName} / ${record.subClassifyName}` : '未完善'} ) }, @@ -117,15 +121,19 @@ export default function AppElectron() { // dataIndex: 'contractManagementId', align: 'center', key: 'appOrderId', - width: 80, + width: 200, + // bordeLeft: true, + fixed: 'right', render: (record) => (
{ nav(`/app-edit/${record.appOrderId}`) // console.log(record); - + }}>编辑
) @@ -136,8 +144,8 @@ export default function AppElectron() { const height = window.innerHeight - 180; const { state } = useLocation() const keywords = state ? state.appKeyWords : '' - const checkStatus = state? state.checkStatus : '' - const appOrderStatus = state? state.appOrderStatus : '' + const checkStatus = state ? state.checkStatus : '' + const appOrderStatus = state ? state.appOrderStatus : '' const [page, setPage] = useState(1); // const [total, setTotal] = useState(0); const [loading, setLoading] = useState(false); @@ -146,7 +154,7 @@ export default function AppElectron() { const getAppOrderList = async (page: number) => { try { setLoading(true) - const res: any = await appOrderList({ page, keywords, rows: 10,checkStatus,appOrderStatus }) + const res: any = await appOrderList({ page, keywords, rows: 10, checkStatus, appOrderStatus }) // console.log(res); // setData(res.rows) // setTotal(res.total) @@ -174,7 +182,7 @@ export default function AppElectron() { useEffect(() => { setPage(1) getAppOrderList(1) - }, [state,checkStatus,appOrderStatus]) + }, [state, checkStatus, appOrderStatus]) return (
@@ -210,6 +218,7 @@ export default function AppElectron() { scroll={{ y: `${height - 150}px` }} dataSource={data.rows} columns={columns} + bordered // pagination={{ // defaultPageSize: 10, // 设置默认一页显示 5 条数据 // }} diff --git a/src/route/AppElectron/components/AppCompany/AppCompany.tsx b/src/route/AppElectron/components/AppCompany/AppCompany.tsx index 31a7d05..540142b 100644 --- a/src/route/AppElectron/components/AppCompany/AppCompany.tsx +++ b/src/route/AppElectron/components/AppCompany/AppCompany.tsx @@ -142,7 +142,7 @@ export default function AppCompany(props: any) { // }; const token = sessionStorage.getItem('token') - + const height = window.innerHeight - 460; const [form] = Form.useForm(); @@ -154,15 +154,43 @@ export default function AppCompany(props: any) { form.submit(); }; + function deepCompareObjects(obj1: any, obj2: any): boolean { + // 若两个值严格相等,直接返回 true + if (obj1 === obj2) { + return true; + } + // 若其中一个值为 null 或不是对象类型,返回 false + if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) { + return false; + } + + // 获取两个对象的键数组 + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + // 若键的数量不同,返回 false + if (keys1.length !== keys2.length) { + return false; + } + + // 遍历键,递归比较对应的值 + for (const key of keys1) { + if (!keys2.includes(key) || !deepCompareObjects(obj1[key], obj2[key])) { + return false; + } + } + + return true; + } const onFinish = async (values: any) => { // 处理表单提交逻辑 // console.log('表单提交成功', values); // console.log('发过来的数据', props.companyInfo); - if (JSON.stringify(values) !== JSON.stringify(props.companyInfo)) { + if (!deepCompareObjects(values, props.companyInfo)) { try { setDownLoading(true) - const res = await companyAuth(props.appOrderId, { + await companyAuth(props.appOrderId, { appOrderId: props.appOrderId, ...values }) @@ -171,7 +199,7 @@ export default function AppCompany(props: any) { }) props.setEditProcess(2); setDownLoading(false) - console.log(res); + // console.log(res); } catch (error: any) { setDownLoading(false) if (error.response) { @@ -186,17 +214,17 @@ export default function AppCompany(props: any) { } - }else{ + } else { props.setEditProcess(2); } - + }; useEffect(() => { - console.log('认证数据', props.companyInfo); + // console.log('认证数据', props.companyInfo); if (props.companyInfo.companyName) { - console.log('嘻嘻'); + // console.log('嘻嘻'); form.setFieldsValue({ companyName: props.companyInfo.companyName, companyNumber: props.companyInfo.companyNumber, @@ -356,15 +384,30 @@ export default function AppCompany(props: any) { onClick={async () => { // alert('下载授权书') if (form.getFieldValue('companyName')) { + try { + setDownLoading(true) + const res: any = await authorizeWord( + props.appOrderId, + form.getFieldValue('companyName'), + ) + setDownLoading(false) + window.open(showImage(res.fileId, false)); + } catch (error: any) { + setDownLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setDownLoading(false) + } // console.log(form.getFieldValue('companyName')); - setDownLoading(true) - const res: any = await authorizeWord( - props.appOrderId, - form.getFieldValue('companyName'), - ) - setDownLoading(false) - window.open(showImage(res.fileId, false)); - console.log(res); + } else { message.error('请完善企业/机构名称') diff --git a/src/route/AppElectron/components/EditAppFiles/EditAppFiles.tsx b/src/route/AppElectron/components/EditAppFiles/EditAppFiles.tsx index c5e26f9..693bfef 100644 --- a/src/route/AppElectron/components/EditAppFiles/EditAppFiles.tsx +++ b/src/route/AppElectron/components/EditAppFiles/EditAppFiles.tsx @@ -1,15 +1,64 @@ -import { useState } from 'react' -import { Button, Form, Upload, message, Modal } from "antd" -import { uploadFileUrl } from '../../../../request/request' +import { useEffect, useState } from 'react' +import { Button, Form, Upload, message, Modal, Spin } from "antd" +import { uploadFileUrl, showImage } from '../../../../request/request' import { UploadOutlined } from '@ant-design/icons'; +import { sourceCodeWord, softwareDocumentWord, uploadMaterial, fileDetail } from '../../../../request/api' import './edit-app-files.css' export default function EditAppFiles(props: any) { + const [messageApi, contextHolder] = message.useMessage(); + const [loading, setLoading] = useState(false) + const downCodeWord = async () => { + try { + setLoading(true) + const res: any = await sourceCodeWord(props.appOrderId) + window.open(showImage(res.fileId, false)); + setLoading(false) + + } catch (error: any) { + setLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setLoading(false) + } + + } + const downSoftWord = async () => { + try { + setLoading(true) + const res: any = await softwareDocumentWord(props.appOrderId) + setLoading(false) + + window.open(showImage(res.fileId, false)); + + } catch (error: any) { + setLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setLoading(false) + } + } // 源码文档弹窗 const [codeVisible, setCodeVisible] = useState(false) // 软件文档弹窗 const [softVisible, setSoftVisible] = useState(false) // 定义允许上传的文件格式 - const ALLOWED_FILE_TYPES = ['.pdf', '.doc', '.docx', '.jpg', '.jpeg', '.png']; + const ALLOWED_FILE_TYPES = ['.pdf']; const beforeUpload = (file: File) => { const fileExt = file.name.slice(file.name.lastIndexOf('.')).toLowerCase(); if (!ALLOWED_FILE_TYPES.includes(fileExt)) { @@ -26,57 +75,69 @@ export default function EditAppFiles(props: any) { }; // 上传文件源码文档列表 const [upCodeArray, setUpCodeArray] = useState([]) - const [codeDis, setCodeDis] = useState(false) - const validateCodeFileUpload = (_rule: any, value: any) => { - if (!value || value.fileList.length === 0) { - return Promise.reject('请选择上传文件'); + // const [codeDis, setCodeDis] = useState(false) + const isUploading = upCodeArray.some((file: any) => file.status === 'uploading'); + const validateCodeFileUpload = () => { + // if (!value || value.fileList.length === 0) { + // return Promise.reject('请选择上传文件'); - } - const file = value.fileList[0]; - if (file.status === 'uploading') { - setCodeDis(true) - return Promise.reject('文件上传中,请稍候'); - } else if (file.status === 'error') { - setCodeDis(true) - setUpCodeArray([]) - return Promise.reject('文件上传失败,请删除后重新上传'); + // } + // const file = value.fileList[0]; + // if (file.status === 'uploading') { + // return Promise.reject('文件上传中,请稍候'); + // } else if (file.status === 'error') { + // setUpCodeArray([]) + // return Promise.reject('文件上传失败,请删除后重新上传'); - } else if (file.status !== 'done') { - setCodeDis(true) - setUpCodeArray([]) + // } else if (file.status !== 'done') { + // setUpCodeArray([]) - return Promise.reject('文件上传失败,请删除后重新上传'); - } else if (file.status === 'done') { - setCodeDis(true) - return Promise.resolve(); + // return Promise.reject('文件上传失败,请删除后重新上传'); + // } else if (file.status === 'done') { + // return Promise.resolve(); + // } + // return Promise.resolve(); + + + // 若开发方式为合作开发且未上传文件,则验证失败 + if ((upCodeArray.length === 0 || isUploading)) { + const errorMessage = isUploading ? '文件正在上传中,请等待上传完成' : '请上传源码文档'; + return Promise.reject(new Error(errorMessage)); } return Promise.resolve(); }; // 上传文件软件文档列表 const [upSoftArray, setUpSoftArray] = useState([]) - const [softDis, setSoftDis] = useState(false) - const validateSoftFileUpload = (_rule: any, value: any) => { - if (!value || value.fileList.length === 0) { - return Promise.reject('请选择上传文件'); + const upLodaing = upSoftArray.some((file: any) => file.status === 'uploading'); - } - const file = value.fileList[0]; - if (file.status === 'uploading') { - setSoftDis(true) - return Promise.reject('文件上传中,请稍候'); - } else if (file.status === 'error') { - setSoftDis(true) - setUpSoftArray([]) - return Promise.reject('文件上传失败,请删除后重新上传'); + // const [softDis, setSoftDis] = useState(false) + const validateSoftFileUpload = () => { + // if (!value || value.fileList.length === 0) { + // return Promise.reject('请选择上传文件'); - } else if (file.status !== 'done') { - setSoftDis(true) - setUpSoftArray([]) + // } + // const file = value.fileList[0]; + // if (file.status === 'uploading') { + // setSoftDis(true) + // return Promise.reject('文件上传中,请稍候'); + // } else if (file.status === 'error') { + // setSoftDis(true) + // setUpSoftArray([]) + // return Promise.reject('文件上传失败,请删除后重新上传'); - return Promise.reject('文件上传失败,请删除后重新上传'); - } else if (file.status === 'done') { - setSoftDis(true) - return Promise.resolve(); + // } else if (file.status !== 'done') { + // setSoftDis(true) + // setUpSoftArray([]) + + // return Promise.reject('文件上传失败,请删除后重新上传'); + // } else if (file.status === 'done') { + // setSoftDis(true) + // return Promise.resolve(); + // } + // return Promise.resolve(); + if ((upSoftArray.length === 0 || upLodaing)) { + const errorMessage = upLodaing ? '文件正在上传中,请等待上传完成' : '请上传软件文档'; + return Promise.reject(new Error(errorMessage)); } return Promise.resolve(); }; @@ -86,173 +147,379 @@ export default function EditAppFiles(props: any) { const [form] = Form.useForm(); const handleSubmit = () => { // console.log(form); - props.setEditProcess(4); + // props.setEditProcess(4); // 调用表单实例的 submit 方法 form.submit(); }; - const submitInfo = (values: any) => { - message.success('提交成功'); - console.log(values); - props.setEditProcess(3); + function deepCompareObjects(obj1: any, obj2: any): boolean { + // 若两个值严格相等,直接返回 true + if (obj1 === obj2) { + return true; + } + // 若其中一个值为 null 或不是对象类型,返回 false + if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) { + return false; + } + // 获取两个对象的键数组 + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + // 若键的数量不同,返回 false + if (keys1.length !== keys2.length) { + return false; + } + + // 遍历键,递归比较对应的值 + for (const key of keys1) { + if (!keys2.includes(key) || !deepCompareObjects(obj1[key], obj2[key])) { + return false; + } + } + + return true; } - const onFinish = (values: any) => { + const onFinish = async (values: any) => { // 处理表单提交逻辑 - console.log('表单提交成功', values); - submitInfo(values) - console.log(upCodeArray); + // console.log('表单提交成功', values); + // submitInfo(values) + // console.log(upCodeArray); + // deepCompareObjects(values, props.filesInfo) + // console.log(!deepCompareObjects(values, props.filesInfo)); + // return + if (!deepCompareObjects(values, props.filesInfo)) { + try { + setLoading(true) + await uploadMaterial(props.appOrderId, { + ...values + }) + props.setFilesInfo( + { ...values } + ) + props.setEditProcess(4); + + + setLoading(false) + } catch (error: any) { + setLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setLoading(false) + } + } else { + props.setEditProcess(4); + } + + + }; + const getCodeFileDetail = async (id: string) => { + try { + const res: any = await fileDetail(id) + console.log('文件详情', res); + setUpCodeArray([ + { + uid: res[0].fileId, + name: res[0].fileName, + status: 'done', + url: showImage(res[0].fileId, false) + }, + + ]) + } catch (error: any) { + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } + } + const getSoftFileDetail = async (id: string) => { + try { + const res: any = await fileDetail(id) + console.log('文件详情', res); + setUpSoftArray([ + { + uid: res[0].fileId, + name: res[0].fileName, + status: 'done', + url: showImage(res[0].fileId, false) + }, + + ]) + } catch (error: any) { + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } + } + useEffect(() => { + + if (props.filesInfo.sourceCodeDocFile) { + getCodeFileDetail(props.filesInfo.sourceCodeDocFile) + } + if (props.filesInfo.softwareDocFile) { + getSoftFileDetail(props.filesInfo.softwareDocFile) + } + form.setFieldsValue({ + sourceCodeDocFile: props.filesInfo.sourceCodeDocFile, + softwareDocFile: props.filesInfo.softwareDocFile, + }) + }, [props.filesInfo]) return ( -
-
-
-
+
+ {contextHolder} +
+
-
{ - const errorMessages = errorInfo.errorFields.map((field: any) => field.errors[0]); - if (errorMessages.some((msg: any) => msg.includes('文件上传失败'))) { - message.error('文件上传失败,请重新上传'); - } else if (errorMessages.some((msg: any) => msg.includes('文件上传中'))) { - message.error('文件上传中,请稍候'); - } else if (errorMessages.some((msg: any) => msg.includes('文件状态异常'))) { - message.error('文件状态异常,请重新上传'); - } else { - message.error('请完善信息'); - } - }} - > -
-
-
+ { + const errorMessages = errorInfo.errorFields.map((field: any) => field.errors[0]); + if (errorMessages.some((msg: any) => msg.includes('文件上传失败'))) { + message.error('文件上传失败,请重新上传'); + } else if (errorMessages.some((msg: any) => msg.includes('文件上传中'))) { + message.error('文件上传中,请稍候'); + } else if (errorMessages.some((msg: any) => msg.includes('文件状态异常'))) { + message.error('文件状态异常,请重新上传'); + } else { + message.error('请完善信息'); + } + }} + > +
+
-
源码文档*
-
- - { - console.log(fileList); - // console.log(upCodeArray); +
源码文档*
+
+ + { + const { fileList } = info; + setUpCodeArray(fileList); + if (info.file.status === 'uploading') { + return; + } + if (info.file.status === 'done') { + // console.log(info.file.response.data); + setUpCodeArray([ + { + uid: info.file.response.data.fileId, + name: info.file.response.data.fileName, + status: 'done', + url: showImage(info.file.response.data.fileId, false) + } + ]) - }} - onRemove={() => { - setUpCodeArray([]) - setCodeDis(false) - }} - beforeUpload={beforeUpload} - onPreview={handlePreview} - // onChange={handleUploadChange} - headers={{ 'Auth': `Bearer ${token}` }} - > - - - + form.setFieldsValue({ + sourceCodeDocFile: info.file.response.data.fileId, + }); + } + if (info.file.status === 'error') { + // 显示错误提示 + message.error(`上传失败`); + form.setFieldsValue({ + sourceCodeDocFile: '', // 清除表单值 + }); + } + // console.log(upCodeArray); + + }} + onRemove={() => { + setUpCodeArray([]) + form.setFieldsValue({ + sourceCodeDocFile: '', // 清除表单值 + }); + }} + beforeUpload={beforeUpload} + onPreview={handlePreview} + // onChange={handleUploadChange} + headers={{ 'Auth': `Bearer ${token}` }} + > + + + +
+ [ 下载1 ]
[ 下载 ] -
- { - setCodeVisible(true) + // background:'red', + top: '80px', }} - >《应用软件源程序提交注意事项及相关规范》 -
-
-
{ + setCodeVisible(true) + }} + >《应用软件源程序提交注意事项及相关规范》 +
+
-
软件文档*
-
- - { - console.log(fileList); - }} - onRemove={() => { - setUpSoftArray([]) - setSoftDis(false) - }} - beforeUpload={beforeUpload} - // onChange={handleUploadChange} - headers={{ 'Auth': `Bearer ${token}` }} - > - - - +
软件文档*
+
+ + { + const { fileList } = info; + setUpSoftArray(fileList); + if (info.file.status === 'uploading') { + return; + } + if (info.file.status === 'done') { + // console.log(info.file.response.data); + setUpSoftArray([ + { + uid: info.file.response.data.fileId, + name: info.file.response.data.fileName, + status: 'done', + url: showImage(info.file.response.data.fileId, false) + } + ]) + + form.setFieldsValue({ + softwareDocFile: info.file.response.data.fileId, + }); + } + if (info.file.status === 'error') { + // 显示错误提示 + message.error(`上传失败`); + form.setFieldsValue({ + softwareDocFile: '', // 清除表单值 + }); + } + + }} + onRemove={() => { + setUpSoftArray([]) + form.setFieldsValue({ + softwareDocFile: '', // 清除表单值 + }); + // setSoftDis(false) + }} + beforeUpload={beforeUpload} + // onChange={handleUploadChange} + headers={{ 'Auth': `Bearer ${token}` }} + > + + + +
+ [ 下载 ]
[ 下载 ] -
- { - setSoftVisible(true) + // background:'red', + top: '80px', }} - >《应用软件文档提交注意事项及相关规范》 + onClick={() => { + setSoftVisible(true) + }} + >《应用软件文档提交注意事项及相关规范》 +
-
- -
- {/*
+ +
+ {/*
{Array.from({ length: 100 }).map((_, index) => ( */} -
- -
-
- - - -
- { - setCodeVisible(false) - - }}> - -
-
- -
-
- 源码文档需提交PDF格式的文件,软件源程序代码由前、后各连续30页组成。软件源程序多于60页的需要提交连续的前30及后30页,前30页和后30页应是各自连续的。 -
-
- 1、源程序的第1页应当是程序或一个功能模块的开头,源程序的第60页应当是程序或一个功能模块的结尾,不满60页的需全部提供; -
-
- 2、源程序每页应该≥50行,并标明页码; -
-
- 3、编写源程序的语言应和申请表填写的语言保持一致; -
-
- 4、源程序应和文档中介绍的主要功能存在关联性; -
-
- 5、源程序编写内容中出现的署名或版权声明以及任何与权利归属有关的内容,著作权人名称应与申请的著作权人保持一致; -
-
- 6、源程序中出现著作权人成立之前的创建或修改时间的,申请人应该确认是否存在前期开发行为,如有,需提交《前期开发说明》; - -
-
- 7、源程序中尽量不要出现软件开发完成之后的日期;(出现软件完成日期之后的创建或修改时间的,如果只是纠错性的修改、适应性的调整,不造成软件的功能或性能发生重大变化而发生软件版本升级的,是正常合理的。) -
-
- 8、源程序中出现他人的自由软件/开源软件的版权声明或相关许可证(License)信息的,且申请人认可源代码中含有他人的自由软件/开源软件源代码的情况,申请人需要提供相关的书面说明; -
-
- 9、源程序如果有页眉,页面的软件名称、版本号与申请信息及其他申请材料中的软件名称、版本号应当一致; -
-
- 10、源程序中的软件名称应与申请信息中的软件全称或简称一致,版本号也应该保持一致; -
-
- 11、源程序如果有文件名,应和申请的软件名称或权利人保持一致,文件名可不填。 -
-
- 12、源程序中不能含有危害国家安全、低俗、情色等非法内容。 -
-
- { - setSoftVisible(false) - - }}> - -
-
- -
-
- 文档指软件的使用说明书或者设计说明书(选择其一提交),需提交PDF格式。一般应提交10-60页,整个文档不到60页的应提交全部,超过60页时,提交前、后各连续的30页,文档应图文并茂,语句通顺,每页应≥30行(有图除外)。 -
-
- 1、软件使用说明书主要内容要求:从打开软件起开始截取软件的主要功能界面图,截图应带有主界面,不可截部分图,依次为主界面展示、界面的跳转,主要功能模块依次介绍,主要功能都应介绍。截图应截取完整的软件界面,且图片清晰可辨,需有详细的文字介绍,介绍其主要功能如何使用,上一个界面是通过什么操作跳转至下一个界面的; -
-
- 2、软件设计说明书主要内容要求:应包含软件的基本处理流程、程序系统的组织结构、功能模块划分、接口和数据结构设计等主要设计内容; - -
-
- 3、文档应和源程序存在一定的关联性; - -
-
- 4、文档中截图不能含有他人的商标,如使用他人商标,应提交《商标使用授权书》; - -
-
- 5、截图界面需和申请表中填写的硬件环境、软件环境相匹配; - -
-
- - 6、文档中不能出现重复截图; - -
-
- 7、文档页眉(如果有)的软件名称、版本号与申请表单及其他申请材料中的软件名称、版本号应当一致; - -
-
- 8、文档内容(包括文字、截图等)中的软件名称应与申请表单中的软件全称或简称一致,版本号也应该保持一致; - -
-
- 9、文档中出现的署名或版权声明以及任何与权利归属有关的内容,著作权人名称应与申请表单中一致; - -
-
- - 10、文档应标明页码; -
-
- 11、文档的文件名应和申请的软件名称或权利人保持一致,文件名可不填; - -
-
- 12、文档中不能含有危害国家安全、低俗、情色等非法内容。 - -
+
+
+ +
- + { + setCodeVisible(false) -
+ }}> + +
+
+ +
+
+ 源码文档需提交PDF格式的文件,软件源程序代码由前、后各连续30页组成。软件源程序多于60页的需要提交连续的前30及后30页,前30页和后30页应是各自连续的。 +
+
+ 1、源程序的第1页应当是程序或一个功能模块的开头,源程序的第60页应当是程序或一个功能模块的结尾,不满60页的需全部提供; +
+
+ 2、源程序每页应该≥50行,并标明页码; +
+
+ 3、编写源程序的语言应和申请表填写的语言保持一致; +
+
+ 4、源程序应和文档中介绍的主要功能存在关联性; +
+
+ 5、源程序编写内容中出现的署名或版权声明以及任何与权利归属有关的内容,著作权人名称应与申请的著作权人保持一致; +
+
+ 6、源程序中出现著作权人成立之前的创建或修改时间的,申请人应该确认是否存在前期开发行为,如有,需提交《前期开发说明》; + +
+
+ 7、源程序中尽量不要出现软件开发完成之后的日期;(出现软件完成日期之后的创建或修改时间的,如果只是纠错性的修改、适应性的调整,不造成软件的功能或性能发生重大变化而发生软件版本升级的,是正常合理的。) +
+
+ 8、源程序中出现他人的自由软件/开源软件的版权声明或相关许可证(License)信息的,且申请人认可源代码中含有他人的自由软件/开源软件源代码的情况,申请人需要提供相关的书面说明; +
+
+ 9、源程序如果有页眉,页面的软件名称、版本号与申请信息及其他申请材料中的软件名称、版本号应当一致; +
+
+ 10、源程序中的软件名称应与申请信息中的软件全称或简称一致,版本号也应该保持一致; +
+
+ 11、源程序如果有文件名,应和申请的软件名称或权利人保持一致,文件名可不填。 +
+
+ 12、源程序中不能含有危害国家安全、低俗、情色等非法内容。 +
+
+
+ { + setSoftVisible(false) + + }}> + +
+
+ +
+
+ 文档指软件的使用说明书或者设计说明书(选择其一提交),需提交PDF格式。一般应提交10-60页,整个文档不到60页的应提交全部,超过60页时,提交前、后各连续的30页,文档应图文并茂,语句通顺,每页应≥30行(有图除外)。 +
+
+ 1、软件使用说明书主要内容要求:从打开软件起开始截取软件的主要功能界面图,截图应带有主界面,不可截部分图,依次为主界面展示、界面的跳转,主要功能模块依次介绍,主要功能都应介绍。截图应截取完整的软件界面,且图片清晰可辨,需有详细的文字介绍,介绍其主要功能如何使用,上一个界面是通过什么操作跳转至下一个界面的; +
+
+ 2、软件设计说明书主要内容要求:应包含软件的基本处理流程、程序系统的组织结构、功能模块划分、接口和数据结构设计等主要设计内容; + +
+
+ 3、文档应和源程序存在一定的关联性; + +
+
+ 4、文档中截图不能含有他人的商标,如使用他人商标,应提交《商标使用授权书》; + +
+
+ 5、截图界面需和申请表中填写的硬件环境、软件环境相匹配; + +
+
+ + 6、文档中不能出现重复截图; + +
+
+ 7、文档页眉(如果有)的软件名称、版本号与申请表单及其他申请材料中的软件名称、版本号应当一致; + +
+
+ 8、文档内容(包括文字、截图等)中的软件名称应与申请表单中的软件全称或简称一致,版本号也应该保持一致; + +
+
+ 9、文档中出现的署名或版权声明以及任何与权利归属有关的内容,著作权人名称应与申请表单中一致; + +
+
+ + 10、文档应标明页码; +
+
+ 11、文档的文件名应和申请的软件名称或权利人保持一致,文件名可不填; + +
+
+ 12、文档中不能含有危害国家安全、低俗、情色等非法内容。 + +
+ + +
+
+ +
+ ) } diff --git a/src/route/AppElectron/components/EditAppInfo/EditAppInfo.tsx b/src/route/AppElectron/components/EditAppInfo/EditAppInfo.tsx index 5c6523d..697657d 100644 --- a/src/route/AppElectron/components/EditAppInfo/EditAppInfo.tsx +++ b/src/route/AppElectron/components/EditAppInfo/EditAppInfo.tsx @@ -1,15 +1,80 @@ import { useEffect, useState } from 'react' import BelongPeople from '../../../../components/BelongPeople/BelongPeople.tsx' -import { Button, Form, Input, message, Select, Modal, DatePicker, Upload } from "antd" +import { Button, Form, Input, message, Select, Modal, DatePicker, Upload, Spin } from "antd" import { UploadOutlined } from '@ant-design/icons'; -import { uploadFileUrl } from '../../../../request/request' +import { uploadFileUrl, showImage } from '../../../../request/request' +import { twoClass, agreementWord, softwareInfo, fileDetail } from '../../../../request/api' import './edit-app-info.css' import locale from 'antd/es/date-picker/locale/zh_CN'; +import dayjs, { } from 'dayjs'; export default function EditAppInfo(props: any) { + const [downLoading, setDownLoading] = useState(false) + const [messageApi, contextHolder] = message.useMessage(); + // const [upFileId, setUpFileId] = useState('') //上传文件id + // const [upFileName, setUpFileName] = useState('') //上传文件名称 + // 大类 + const [bigClass, setBigClass] = useState('') + // 小类 + const [smallClassList, setSmallClassList] = useState([]) + // 获取小类 + const getSmallClassList = async (id: string) => { + try { + const res: any = await twoClass(id) + console.log(res); + setSmallClassList(res.map((item: any) => { + return { + label: item.dataName, + value: item.dataId, + } + })) + } catch (error: any) { + + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } + } + useEffect(() => { + if (bigClass) { + // 获取小类 + getSmallClassList(bigClass) + } + }, [bigClass]) + const [upSoftArray, setUpSoftArray] = useState([ + // { + // uid: '1', + // name: 'example.pdf', + // status: 'done', + // url: 'http://gips3.baidu.com/it/u=3886271102,3123389489&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960' + // }, + ]) + // 检查是否存在上传中的文件 + const isUploading = upSoftArray.some((file: any) => file.status === 'uploading'); + const validateFileUpload = () => { + // if (upSoftArray.length == 0) { + // return Promise.reject(new Error('请上传合作协议')); + // } + // return Promise.resolve(); + const values = form.getFieldsValue(); + const developWay = values.developWay; + + // 若开发方式为合作开发且未上传文件,则验证失败 + if (developWay === '合作开发' && (upSoftArray.length === 0 || isUploading)) { + const errorMessage = isUploading ? '文件正在上传中,请等待上传完成' : '请上传合作协议'; + return Promise.reject(new Error(errorMessage)); + } + return Promise.resolve(); + }; const token = sessionStorage.getItem('token') const [upShow, setUpShow] = useState(false) //上传合作协议是否显示 // 定义允许上传的文件格式 - const ALLOWED_FILE_TYPES = ['.pdf', '.doc', '.docx', '.jpg', '.jpeg', '.png']; + const ALLOWED_FILE_TYPES = ['.pdf',]; const beforeUpload = (file: File) => { const fileExt = file.name.slice(file.name.lastIndexOf('.')).toLowerCase(); if (!ALLOWED_FILE_TYPES.includes(fileExt)) { @@ -19,8 +84,7 @@ export default function EditAppInfo(props: any) { return true; }; // 上传文件软件文档列表 - const [upSoftArray, setUpSoftArray] = useState([]) - const [softDis, setSoftDis] = useState(false) + // const [softDis, setSoftDis] = useState(false) // 所属者弹窗 const [belongModal, setBelongModal] = useState(false) const [belongPeopleInfo, setBelongPeopleInfo] = useState({ @@ -37,198 +101,373 @@ export default function EditAppInfo(props: any) { const setValue = (value: string) => { form.setFieldsValue({ - belongPeople: value + projOwnerName: value }) } - const submitInfo = (values: any) => { - message.success('提交成功'); - console.log(values); - props.setEditProcess(2); + // const submitInfo = (values: any) => { + // message.success('提交成功'); + // console.log(values); + // props.setEditProcess(2); - } + // } const height = window.innerHeight - 460; const [form] = Form.useForm(); const handleSubmit = () => { // console.log(form); - props.setEditProcess(3); + // props.setEditProcess(3); // 调用表单实例的 submit 方法 form.submit(); }; + function deepCompareObjects(obj1: any, obj2: any): boolean { + // 若两个值严格相等,直接返回 true + if (obj1 === obj2) { + return true; + } - const onFinish = (values: any) => { + // 若其中一个值为 null 或不是对象类型,返回 false + if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) { + return false; + } + + // 获取两个对象的键数组 + const keys1 = Object.keys(obj1); + const keys2 = Object.keys(obj2); + + // 若键的数量不同,返回 false + if (keys1.length !== keys2.length) { + return false; + } + + // 遍历键,递归比较对应的值 + for (const key of keys1) { + if (!keys2.includes(key) || !deepCompareObjects(obj1[key], obj2[key])) { + return false; + } + } + + return true; + } + const onFinish = async (values: any) => { // 处理表单提交逻辑 console.log('表单提交成功', values); - submitInfo(values) + console.log(dayjs(values.completeTime).format('YYYY-MM-DD')); + // 给表单赋值 time: dayjs(res.goodsGetTime, 'YYYY-MM-DD'), + // submitInfo(values) + // 给表单赋值 + const data = { + ...values, + completeTime: dayjs(values.completeTime).format('YYYY-MM-DD'), + projOwnerIdentity: belongPeopleInfo.authorIdCard,//著作权人证件号 + projOwnerId: belongPeopleInfo.authorId,//著作权人信息ID + } + + console.log('表单数据', data); + console.log('传递数据', props.appInfo); + // console.log(JSON.stringify(props.appInfo) == JSON.stringify(data)); + console.log(deepCompareObjects(props.appInfo, data)); + + // console.log(props.appInf == data); + // return + + if (!deepCompareObjects(props.appInfo, data)) { + + try { + setDownLoading(true) + await softwareInfo(props.appOrderId, { + // appName: values.appName, // 项目名称 + // subName: values.subName, // 软件简称 + // versionName: values.versionName, // 版本号 + // packageName: values.packageName, // 包名APPID + // systemName: values.systemName, // 运行系统 + // bigClassify: values.bigClassify, // 软件分类(大类) + // subClassify: values.subClassify, // 软件分类(小类) + // developWay: values.developWay, // 开发方式 + // completeTime: values.completeTime, // 开发完成时期 + // projOwnerName: values.projOwnerName,//著作权人姓名 + ...values, + completeTime: dayjs(values.completeTime).format('YYYY-MM-DD'), + projOwnerIdentity: belongPeopleInfo.authorIdCard,//著作权人证件号 + projOwnerId: belongPeopleInfo.authorId,//著作权人信息ID + appOrderId: props.appOrderId, + }) + props.setAppInfo({ + ...values, + completeTime: dayjs(values.completeTime).format('YYYY-MM-DD'), + getFile: upShow ? form.getFieldValue('getFile') : '', + projOwnerIdentity: belongPeopleInfo.authorIdCard,//著作权人证件号 + projOwnerId: belongPeopleInfo.authorId,//著作权人信息ID + }) + props.setEditProcess(3); + setDownLoading(false) + } catch (error: any) { + setDownLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setDownLoading(false) + } + } else { + props.setEditProcess(3); + + } + }; + const getFileDetail = async (id: string) => { + try { + const res: any = await fileDetail(id) + // console.log('文件详情', res); + setUpSoftArray([ + { + uid: res[0].fileId, + name: res[0].fileName, + status: 'done', + url: showImage(res[0].fileId, false) + }, + // { + // uid: '1', + // name: 'example.pdf', + // status: 'done', + // url: 'http://gips3.baidu.com/it/u=3886271102,3123389489&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960' + // }, + ]) + } catch (error: any) { + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } + } useEffect(() => { - - },[props.appInfo]) + if (props.appInfo.getFile) { + console.log('嘻嘻', props.appInfo.getFile); + getFileDetail(props.appInfo.getFile) + } + }, [props.appInfo.getFile]) + + useEffect(() => { + console.log('传过来的信息', props); + if (props.appInfo.appName) { + // setSmallClassList(props.smallClass) + form.setFieldsValue({ + appName: props.appInfo.appName, + subName: props.appInfo.subName, + versionName: props.appInfo.versionName, + packageName: props.appInfo.packageName, + systemName: props.appInfo.systemName, + bigClassify: props.appInfo.bigClassify, + subClassify: props.appInfo.subClassify, + developWay: props.appInfo.developWay, + // completeTime: props.appInfo.completeTime, + completeTime: dayjs(props.appInfo.completeTime, 'YYYY-MM-DD'), + projOwnerName: props.appInfo.projOwnerName, + getFile: props.appInfo.getFile, + }) + setBelongPeopleInfo(prevState => ({ + ...prevState, + authorName: props.appInfo.projOwnerName, + authorId: props.appInfo.projOwnerId, + authorIdCard: props.appInfo.projOwnerIdentity + })); + + + } + if (props.appInfo.bigClassify != '') { + getSmallClassList(props.appInfo.bigClassify) + } + if (props.appInfo.developWay == '合作开发') { + // setUpSoftArray([ + // { + // uid: '1', + // name: 'example.pdf', + // status: 'done', + // url: 'http://gips3.baidu.com/it/u=3886271102,3123389489&fm=3028&app=3028&f=JPEG&fmt=auto?w=1280&h=960' + // } + // ]) + // getFileDetail(props.appInfo.getFile) + setUpShow(true) + + + } + + }, [props.appInfo]) return ( -
-
-
- -
{ - message.error('请完善信息') - }} - > -
-
-
软件全称*
- - - -
-
+
+ {contextHolder} +
+
+ { + message.error('请完善信息') + }} + > +
-
软件简称:
- +
软件全称*
+ - - -
-
-
-
-
版本号*
- + + +
+
- - + }}> +
软件简称:
+ + + +
-
-
包名(APPID)*
- +
版本号*
+ - - + ]}> + +
+
+
+
包名(APPID)*
+ + + +
-
-
-
-
运行系统*
- +
+
运行系统*
+ - - + options={props.systemList} + // defaultValue="" + placeholder={'请选择运行系统'} + /> + +
+
+
软件分类*
+ + + +
-
-
软件分类*
- - - -
-
- -
- {/*
+
+ {/*
发表状态:
*/} -
-
+
开发方式*
- 开发方式*
+ - { - console.log(value); - if (value == '2') { - setUpShow(true) - }else{ - setUpShow(false) - } - }} - /> - -
-
-
开发完成日期*
- { + console.log(value); + if (value == '合作开发') { + setUpShow(true) + } else { + setUpShow(false) + // 清空表单上传文件 + form.setFieldsValue({ + getFile: '' + }) + setUpSoftArray([]) + } + }} + /> + +
+
+
开发完成日期*
+ - {/* + {/* */} - - + /> + +
-
-
- {/*
+
+ {/*
软件作品说明:
*/} -
-
产权所属者*
- - - -
{ - setBelongModal(true) - }} - > - 选择 -
-
- { - setValue('') - setBelongPeopleInfo({ - authorName: '', - authorType: '', - authorIdCardType: '', - authorIdCard: '', - authorCrcAccount: 0, - authorId: '', - authorProvinceCity: '', - authorCrcAccountUsername: '', - authorCrcAccountPassword: '', - }) - }}> 取消 -
-
-
-
上传合作协议*
+
产权所属者*
+ + +
- - { - console.log(fileList); - }} - onRemove={() => { - setUpSoftArray([]) - setSoftDis(false) - }} - beforeUpload={beforeUpload} - // onChange={handleUploadChange} - headers={{ 'Auth': `Bearer ${token}` }} - > - - - -
- [ 下载协议 ] -
-
+ width: '300px', + height: '42px', + top: '0', + right: '0', + // background: 'skyblue', + textAlign: 'right', + lineHeight: '42px', + cursor: 'pointer', + paddingRight: '10px', + color: '#1F79FF', -
- {/*
{ + setBelongModal(true) + }} + > + 选择 +
+
+ { + setValue('') + setBelongPeopleInfo({ + authorName: '', + authorType: '', + authorIdCardType: '', + authorIdCard: '', + authorCrcAccount: 0, + authorId: '', + authorProvinceCity: '', + authorCrcAccountUsername: '', + authorCrcAccountPassword: '', + }) + }}> 取消 +
+
+
+
+
上传合作协议*: +
(请上传PDF格式文件)
+
+
+ + { + const { fileList } = info; + setUpSoftArray(fileList); // 更新 upSoftArray 状态 + + if (info.file.status === 'uploading') { + return; + } + if (info.file.status === 'done') { + console.log(info.file.response.data); + setUpSoftArray([ + { + uid: info.file.response.data.fileId, + name: info.file.response.data.fileName, + status: 'done', + url: showImage(info.file.response.data.fileId, false) + } + ]) + + form.setFieldsValue({ + getFile: info.file.response.data.fileId, + }); + } + if (info.file.status === 'error') { + // 显示错误提示 + message.error(`上传失败`); + form.setFieldsValue({ + getFile: '', // 清除表单值 + }); + } + + // if (info.file.status === 'uploading') { + // return; + // } + // if (info.file.status === 'done') { + + // console.log(info.file.response.data); + // setUpSoftArray([ + // { + // uid: info.file.response.data.fileId, + // name: info.file.response.data.fileName, + // status: 'done', + // url: showImage(info.file.response.data.fileId, false) + // } + // ]) + + // form.setFieldsValue({ + // getFile: info.file.response.data.fileId, + // }) + + // // setUpFileName(fileName) + // } + // if (info.file.status === 'error') { + // // 显示错误提示 + // message.error(`上传失败`); + // //伤处表单name为ing的值 + // form.setFieldsValue({ + // getFile: '', // 将值设置为 undefined 以清除错误状态 + // }) + + // } + }} + onRemove={() => { + setUpSoftArray([]) + // setSoftDis(false) + form.setFieldsValue({ + getFile: '', // 将值设置为 undefined 以清除错误状态 + }) + }} + beforeUpload={beforeUpload} + // onChange={handleUploadChange} + headers={{ 'Auth': `Bearer ${token}` }} + > + + + +
+ { + form.getFieldValue('appName') + if (form.getFieldValue('appName') && form.getFieldValue('versionName')) { + try { + setDownLoading(true) + console.log(form.getFieldValue('appName'), form.getFieldValue('versionName')); + const res: any = await agreementWord(props.appOrderId, form.getFieldValue('appName'), form.getFieldValue('versionName')) + window.open(showImage(res.fileId, false)); + setDownLoading(false) + } catch (error: any) { + setDownLoading(false) + if (error.response) { + const data = error.response.data; + messageApi.open({ + type: 'error', + content: data.msg ? data.msg : `${data.path}(${data.status})`, + }); + } else { + console.error(error) + } + } finally { + setDownLoading(false) + } + + + } else { + message.error('需先填写软件全称和版本号') + } + }} + >[ 下载协议 ] +
+
+ +
+ {/*
@@ -523,47 +874,48 @@ export default function EditAppInfo(props: any) {
*/} - + +
+ +
+
+ + +
+ { + setBelongModal(false) + + }}> + + { setBelongModal(false) }} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={true}> +
- -
-
- - -
- { - setBelongModal(false) - - }}> - - { setBelongModal(false) }} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={true}> - -
+ ) } diff --git a/src/route/Correction/Correction.tsx b/src/route/Correction/Correction.tsx index 78961da..1d7bc4d 100644 --- a/src/route/Correction/Correction.tsx +++ b/src/route/Correction/Correction.tsx @@ -1136,7 +1136,7 @@ export default function Correction() { }
- {/* 换名 - */} + ) : ( <> - )} + )} {/* { return (
{ - setAppGoodsId(item.dataId) + setAppGoodsId(item.id) // console.log('item.dataId: ', item.dataId); }} @@ -3863,7 +3863,7 @@ export default function Index() { backgroundImage: index !== 1 ? `url(${topblack})` : `url(${topblue})`, }} > - {item.dataSummary} + {item.title}
@@ -3874,7 +3874,7 @@ export default function Index() { {item.dataName / 100} + }}>{item.money / 100} 元/件
@@ -3917,6 +3917,8 @@ export default function Index() { } else { console.error(error) } + } finally { + setBuyLoading(false) }