From b5243244148e15d26b6390d91f4ce4dfc6f38fb7 Mon Sep 17 00:00:00 2001 From: lyp Date: Tue, 27 May 2025 10:47:05 +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 --- .env.dev | 4 +- src/request/api.ts | 22 + src/request/request.ts | 2 +- src/route/AppElectron/AppEdit.tsx | 413 +++++++++++++----- src/route/AppElectron/AppElectron.tsx | 254 +++++++++-- .../components/AppCompany/AppCompany.tsx | 143 +----- .../components/EditAppFiles/EditAppFiles.tsx | 160 ++++++- src/route/Contract/Contract.tsx | 3 +- .../TrademarkMall/TrademarkExpertEdit.tsx | 10 + src/route/TrademarkMall/trademark-edit.css | 8 + src/route/index/Index.tsx | 381 ++++++++++++---- src/route/router.tsx | 7 +- src/store/index.ts | 36 +- 13 files changed, 1056 insertions(+), 387 deletions(-) create mode 100644 src/route/TrademarkMall/TrademarkExpertEdit.tsx create mode 100644 src/route/TrademarkMall/trademark-edit.css diff --git a/.env.dev b/.env.dev index 2799469..9e9f0da 100644 --- a/.env.dev +++ b/.env.dev @@ -6,7 +6,7 @@ VITE_OPERATOR_PLUGIN_BASE_URL=${VITE_BASE_URL}:8099 VITE_AI_SHOP_BASE_URL=http://192.168.0.115:8081 VITE_WEBSOCKET_BASE_URL=ws://${VITE_HOST}:7025/copyright # 18634604067 -# VITE_USERID=80d3365e-0597-4988-979e-18ef1c3ec671 -VITE_USERID=e3e40f95-7a3f-4b53-a1a0-51dd4e881d74 +VITE_USERID=80d3365e-0597-4988-979e-18ef1c3ec671 +# VITE_USERID=e3e40f95-7a3f-4b53-a1a0-51dd4e881d74 # VITE_CURRENT_THEME=fzkj VITE_CURRENT_THEME=mzw diff --git a/src/request/api.ts b/src/request/api.ts index 8f6d57a..bbb0f66 100644 --- a/src/request/api.ts +++ b/src/request/api.ts @@ -121,3 +121,25 @@ export const updateBindPhone = (params:any) => phoneRequest.post(`/operator/api/ export const unbind = () => phoneRequest.get(`/operator/api/user-wx-update-username/unlock-phone`) //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + +// APP电子软著接口---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +//获取APP电子软著可买商品展示列表 +export const appGoodsList = () => aiShopRequest.get(`/aishop/api/data/listbyparentid/71831561-108f-49f0-92c8-f9e4f0483c02`) +// 获取运行系统选项 +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}`) + + +// 下单购买APP电子软著 +export const buyAppGoods = (orderMoneyId:string) => aiShopRequest.post(`/aishop/api/apporder/pay/${orderMoneyId}`) +// 获取我的app电子软著订单列表 +export const appOrderList = (params:any) => aiShopRequest.get(`/aishop/api/apporder/listpage-self`, { params }) +// 获取app电子软著详情 +export const appOrderDetail = (appOrderId:any) => aiShopRequest.get(`/aishop/api/apporder/get/${appOrderId}`) +// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/src/request/request.ts b/src/request/request.ts index e5983da..ce4c7a7 100644 --- a/src/request/request.ts +++ b/src/request/request.ts @@ -64,7 +64,7 @@ request.interceptors.response.use( -// 买卖功能---------------------------------------------------------------------------- +// 买卖功能(交易中心/APP电子软著)---------------------------------------------------------------------------- const aiShopRequest = axios.create({ baseURL: aiShopBaseUrl, timeout: 5000, diff --git a/src/route/AppElectron/AppEdit.tsx b/src/route/AppElectron/AppEdit.tsx index 74976cf..03acd77 100644 --- a/src/route/AppElectron/AppEdit.tsx +++ b/src/route/AppElectron/AppEdit.tsx @@ -8,88 +8,265 @@ 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 './app-edit.css' import { RightOutlined } from '@ant-design/icons'; +import { + message, + Spin, + +} from 'antd'; +import { appOrderDetail } from '../../request/api' export default function AppEdit() { + const [messageApi, contextHolder] = message.useMessage(); const pathParams = useParams(); - // 进度 + const appOrderId = pathParams.appOrderId; + const [systemList, setSystemList] = useState([]); // 运行系统选项 + const [bigClass, setBigClass] = useState([]); // 软件分类(大类)选项 + const [smallClass, setSmallClass] = useState([]); // 软件分类(小类)选项 + // 获取运行系统选项 + const getRunSystemList = async () => { + try { + const res: any = await runSystemList(); + console.log('运行系统选项', res.map((item: any) => { + return { + label: item.dataName, + value: item.dataName, + } + })); + setSystemList(res.map((item: any) => { + return { + label: item.dataName, + 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) + } + } + } + // 获取大类选项 + const getBigClassList = async () => { + try { + const res: any = await bigClassList(); + console.log('大类选项', 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) { + + 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 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) { + + 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); + // 企业/机构认证 + const [companyInfo, setCompanyInfo] = useState({ + companyName: '', // 企业名称 + companyNumber: '', // 企业统一社会信用代码 + companyPhoto: '', // 企业照片 + companyAuth: '',//授权书 + }); + // 软件基本信息 + const [appInfo, setAppInfo] = useState({ + appName: '', // 项目名称 + subName: '', // 软件简称 + versionName: '', // 版本号 + packageName: '', // 包名APPID + systemName: '', // 运行系统 + bigClassify: '', // 软件分类(大类) + subClassify: '', // 软件分类(小类) + developWay: '', // 开发方式 + completeTime: '', // 开发完成时期 + projOwnerName: '',//著作权人姓名 + projOwnerIdentity: '',//著作权人证件号 + projOwnerId: '',//著作权人信息ID + }) + // 材料信息 + const [filesInfo, setFilesInfo] = useState({ + sourceCodeDocFile: '',//源码 + softwareDocFile: '',//软件 + }) + // 获取详情 + const getAppOrderDetail = async () => { + try { + setLoading(true) + const res: any = await appOrderDetail(appOrderId); + console.log('详情', res); + setCompanyInfo({ + companyName: res.companyName, // 企业名称 + companyNumber: res.companyNumber, // 企业统一社会信用代码 + companyPhoto: res.companyPhoto, // 企业照片 + companyAuth: res.companyAuth,//授权书 + }) + setAppInfo({ + appName: res.appName, // 项目名称 + subName: res.subName, // 软件简称 + versionName: res.versionName, // 版本号 + packageName: res.packageName, // 包名APPID + systemName: res.systemName, // 运行系统 + bigClassify: res.bigClassify, // 软件分类(大类) + subClassify: res.subClassify, // 软件分类(小类) + developWay: res.developWay, // 开发方式 + completeTime: res.completeTime, // 开发完成时期 + projOwnerName: res.projOwnerName,//著作权人姓名 + projOwnerIdentity: res.projOwnerIdentity,//著作权人证件号 + projOwnerId: res.projOwnerId,//著作权人信息ID + }) + setFilesInfo({ + sourceCodeDocFile: res.sourceCodeDocFile,//源码 + softwareDocFile: res.softwareDocFile,//软件 + }) + setEditProcess(Number(res.appOrderProgress) + 1) + setLoading(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) + } + } finally { + setLoading(false) + } + + + } + // 进度 + // 获取详情 useEffect(() => { + getAppOrderDetail() //获取进度 - setEditProcess(1) - // 带来的id - console.log('参数', pathParams); - // 获取 信息 - + // setEditProcess(1) + getRunSystemList() + getBigClassList() + if(appInfo.bigClassify) { + getSmallClassList(appInfo.bigClassify) + } }, []); const height = window.innerHeight - 180; return ( -
-
-
-
= 1 ? '#3B60E8' : '', - color: editProcess >= 1 ? '#fff' : '#B1B1B1', - borderColor: editProcess >= 1 ? '' : '#B1B1B1' - }} - >1
-
= 1 ? '#353535' : '#878787', - fontWeight: editProcess >= 1 ? 'bold' : 'normal' - }} - >企业/机构认证
-
-
-
-
= 2 ? '#3B60E8' : '', - color: editProcess >= 2 ? '#fff' : '#B1B1B1', - borderColor: editProcess >= 2 ? '' : '#B1B1B1' - }}>2
-
= 2 ? '#353535' : '#878787', - fontWeight: editProcess >= 2 ? 'bold' : 'normal' - }} - >软件基本信息
-
-
-
-
= 3 ? '#3B60E8' : '', - color: editProcess >= 3 ? '#fff' : '#B1B1B1', - borderColor: editProcess >= 3 ? '' : '#B1B1B1' - }}>3
-
= 3 ? '#353535' : '#878787', - fontWeight: editProcess >= 3 ? 'bold' : 'normal' - }} - >鉴别材料
-
-
-
-
= 4 ? '#3B60E8' : '', - color: editProcess >= 4 ? '#fff' : '#B1B1B1', - borderColor: editProcess >= 4 ? '' : '#B1B1B1' - }}>4
-
= 4 ? '#353535' : '#878787', - fontWeight: editProcess >= 4 ? 'bold' : 'normal' - }} - > - {/* 功能特点 */} - 填报完成 + +
+ {contextHolder} +
+
+
= 1 ? '#3B60E8' : '', + color: editProcess >= 1 ? '#fff' : '#B1B1B1', + borderColor: editProcess >= 1 ? '' : '#B1B1B1' + }} + >1
+
= 1 ? '#353535' : '#878787', + fontWeight: editProcess >= 1 ? 'bold' : 'normal' + }} + >企业/机构认证
-
- {/*
+
+
+
= 2 ? '#3B60E8' : '', + color: editProcess >= 2 ? '#fff' : '#B1B1B1', + borderColor: editProcess >= 2 ? '' : '#B1B1B1' + }}>2
+
= 2 ? '#353535' : '#878787', + fontWeight: editProcess >= 2 ? 'bold' : 'normal' + }} + >软件基本信息
+
+
+
+
= 3 ? '#3B60E8' : '', + color: editProcess >= 3 ? '#fff' : '#B1B1B1', + borderColor: editProcess >= 3 ? '' : '#B1B1B1' + }}>3
+
= 3 ? '#353535' : '#878787', + fontWeight: editProcess >= 3 ? 'bold' : 'normal' + }} + >鉴别材料
+
+
+
+
= 4 ? '#3B60E8' : '', + color: editProcess >= 4 ? '#fff' : '#B1B1B1', + borderColor: editProcess >= 4 ? '' : '#B1B1B1' + }}>4
+
= 4 ? '#353535' : '#878787', + fontWeight: editProcess >= 4 ? 'bold' : 'normal' + }} + > + {/* 功能特点 */} + 填报完成 +
+
+ {/*
= 5 ? '#3B60E8' : '', @@ -119,60 +296,73 @@ export default function AppEdit() {
*/} -
-
-
- { - setEditProcess(num) - } - }> - {/* +
+
+ { + setEditProcess(num) + } + }> + {/* { setEditProcess(num) } }> */} -
-
- { - setEditProcess(num) - } - }> - {/* +
+ { + setEditProcess(num) + } + }> + {/* { setEditProcess(num) } }> */} -
-
- { - setEditProcess(num) - } - }> -
-
- {/* +
+ { + setEditProcess(num) + } + }> +
+
+ {/* { setEditProcess(num) } }> */} - { - setEditProcess(num) - } - }> -
- {/*
{ + setEditProcess(num) + } + }> +
+ {/*
*/} +
-
+ ) } diff --git a/src/route/AppElectron/AppElectron.tsx b/src/route/AppElectron/AppElectron.tsx index 29b9e9e..430a7c0 100644 --- a/src/route/AppElectron/AppElectron.tsx +++ b/src/route/AppElectron/AppElectron.tsx @@ -1,47 +1,241 @@ import { useState, useEffect } from 'react' +import { useSelector, useDispatch } from 'react-redux' import { Pagination, // Table, // Modal, - // Spin + // Spin, + message, + Spin, + Table } from 'antd'; +import { appOrderList } from '../../request/api' import './app-election.css' import nothingImg from '../../static/appimgs/nothing.png' +import { useLocation } from 'react-router-dom'; +import type { TableProps } from 'antd'; +import { useNavigate } from "react-router-dom"; +interface DataType { + appName: string; //项目名称 + bigClassify: string; //软件分类(大类) + appOrderPayMoney: number; //支付金额; + appOrderPayTime: string; //支付时间; + gmtCreate: string; +} export default function AppElectron() { - const height = window.innerHeight - 180; - const [page, setPage] = useState(1); - const [total, setTotal] = useState(0); - const data = [ - // { name: '123' } - ] - useEffect(() => { - setTotal(100) - }, [page]) - return ( -
- {data.length <= 0 ? (
+ const nav = useNavigate(); + const dispath = useDispatch() + const redxuState: any = useSelector(state => state) + const data = redxuState.appGoodsListData; + const columns: TableProps['columns'] = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + align: 'center', + width: 90, + render: (_text, _record, index) => (page - 1) * 10 + index + 1, // 显示序号,从1开始 - + }, + { + title: '项目名称', + dataIndex: 'appName', + key: 'appOrderId', + align: 'center', + ellipsis: { + showTitle: true, + }, + width: 200, + render: (text) => ( + + {text ? text : '未完善'} + + ) + + }, + { + title: '软件分类', + dataIndex: 'bigClassify', + align: 'center', + key: 'appOrderId', + width: 120, + ellipsis: { + showTitle: true, + }, + render: (text) => ( + + {text ? text : '未完善'} + + ) + }, + { + title: '支付金额', + dataIndex: 'appOrderPayMoney', + key: 'appOrderId', + align: 'center', + width: 120, + render: (text) => ( + + {text / 100} + + ) + }, + { + title: '支付时间', + dataIndex: 'appOrderPayTime', + align: 'center', + key: 'appOrderId', + width: 200, + }, + { + title: '审核状态', + dataIndex: 'checkStatus', + align: 'center', + key: 'appOrderId', + width: 100, + render: (text) => ( + + {text == '1' ? '待审核' : text == '2' ? '通过' : text == '0' ? '未通过' : '未提交'} + + ) + }, + { + title: '申请状态', + dataIndex: 'appOrderStatus', + align: 'center', + key: 'appOrderId', + width: 100, + render: (text) => ( + + {text == '1' ? '未付款' : text == '2' ? '资料填写中' : text == '3' ? '资料审核中' : text == '4' ? '下线申请中' : text == '5' ? '已下证' : '未知'} + + ) + }, + + { + title: '操作', + // dataIndex: 'contractManagementId', + align: 'center', + key: 'appOrderId', + width: 80, + render: (record) => (
暂无数据
-
) : ( -
-
+ cursor: 'pointer', + color: '#007FFF', + }} onClick={() => { + nav(`/app-edit/${record.appOrderId}`) + // console.log(record); + + + }}>编辑
+ ) + + }, + ] + const [messageApi, contextHolder] = message.useMessage(); + const height = window.innerHeight - 180; + const { state } = useLocation() + const keywords = state ? state.appKeyWords : '' + 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); + // const [data, setData] = useState([]); + // 获取我得订单列表 + const getAppOrderList = async (page: number) => { + try { + setLoading(true) + const res: any = await appOrderList({ page, keywords, rows: 10,checkStatus,appOrderStatus }) + // console.log(res); + // setData(res.rows) + // setTotal(res.total) + setLoading(false) + dispath({ + type: 'upAppGoodsListData', + val: res + }) + } 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) + } + } finally { + setLoading(false) + } + + } + useEffect(() => { + setPage(1) + getAppOrderList(1) + }, [state,checkStatus,appOrderStatus]) + return ( + +
+ + + + {contextHolder} + + {data.length <= 0 ? ( +
+ + + +
暂无数据
+
+ ) : ( +
+
+ +
+ +
+
+ { + setPage(page) + getAppOrderList(page) + }} /> +
-
- { - setPage(page) - }} /> -
-
- )} + )} + +
+ + ) } diff --git a/src/route/AppElectron/components/AppCompany/AppCompany.tsx b/src/route/AppElectron/components/AppCompany/AppCompany.tsx index 820b2b6..7316fc0 100644 --- a/src/route/AppElectron/components/AppCompany/AppCompany.tsx +++ b/src/route/AppElectron/components/AppCompany/AppCompany.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useState,useEffect } from 'react' import './app-company.css' import { uploadFileUrl } from '../../../../request/request' import { Button, Form, Input, message, @@ -21,38 +21,7 @@ import type { GetProp, UploadProps } from 'antd'; // // pId: string; // } export default function AppCompany(props: any) { - // const [messageApi, contextHolder] = message.useMessage(); - // const [areaArray, setAreaArray] = useState([]); - // 加载城市列表 - // const loadCityList = async (selectedOptions: Option[]) => { - // const targetOption = selectedOptions[selectedOptions.length - 1]; - // // console.log('targetOption', targetOption.children); - // try { - // const res: any = await getCityList(targetOption.value as string); - // // console.log('城市列表', res); - - // const cities = res.map((city: any) => ({ - // value: city.areaId, - // label: city.areaName, - - // })); - // targetOption.children = cities; - // // 更新 areaArray 状态 - // setAreaArray([...areaArray]); - // } 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) - // } - // } - // }; + // 定义 beforeUpload 函数 const beforeUpload = (file: any) => { const isJpgOrPng = ['image/jpeg', 'image/png', 'image/bmp'].includes(file.type); @@ -138,6 +107,13 @@ export default function AppCompany(props: any) { submitInfo(values) }; + useEffect(() => { + // console.log('认证数据',props.companyInfo); + if(props.companyInfo.companyName){ + console.log('嘻嘻'); + + } + },[props.companyInfo]) return (
{/* {contextHolder} */} @@ -170,26 +146,7 @@ export default function AppCompany(props: any) { }} placeholder="请输入企业/机构名称" />
- {/*
-
所在省市:
- - - -
*/} +
统一社会信用代码*
@@ -206,85 +163,7 @@ export default function AppCompany(props: any) {
- {/*
-
-
企业/机构地址:
- - - -
-
-
成立日期:
- - - -
-
*/} - {/*
-
-
证件类型:
- - - - -
-
*/} +
{ @@ -107,6 +111,8 @@ export default function EditAppFiles(props: any) {
[ 下载 ]
- 源码文档说明 + { + setCodeVisible(true) + }} + >《应用软件源程序提交注意事项及相关规范》
@@ -272,6 +291,141 @@ export default function EditAppFiles(props: any) { }}>下一步
+ { + 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/Contract/Contract.tsx b/src/route/Contract/Contract.tsx index 2561da9..00e9b26 100644 --- a/src/route/Contract/Contract.tsx +++ b/src/route/Contract/Contract.tsx @@ -125,7 +125,8 @@ export default function CONTRACT() {
{/* 表格 */}
0 ? 'block' : 'none', padding: 10 }}> diff --git a/src/route/TrademarkMall/TrademarkExpertEdit.tsx b/src/route/TrademarkMall/TrademarkExpertEdit.tsx new file mode 100644 index 0000000..1ccf5d1 --- /dev/null +++ b/src/route/TrademarkMall/TrademarkExpertEdit.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import './trademark-edit.css' +export default function TrademarkExpertEdit() { + const height = window.innerHeight - 180; + return ( +
+ +
+ ) +} diff --git a/src/route/TrademarkMall/trademark-edit.css b/src/route/TrademarkMall/trademark-edit.css new file mode 100644 index 0000000..a64b9da --- /dev/null +++ b/src/route/TrademarkMall/trademark-edit.css @@ -0,0 +1,8 @@ +.trademarkExpertBox { + margin-top: 18px; + background-color: rgb(255, 255, 255); + padding: 0px 19px 0px 19px; + box-sizing: border-box; + padding: 30px 45px 0 45px; + box-sizing: border-box; +} \ No newline at end of file diff --git a/src/route/index/Index.tsx b/src/route/index/Index.tsx index 4819c29..ff8a4c9 100644 --- a/src/route/index/Index.tsx +++ b/src/route/index/Index.tsx @@ -1,8 +1,9 @@ import './index.css'; // import { MouseEvent, Reducer, useEffect, useReducer, useState, useContext } from "react"; -import { MouseEvent, Reducer, useEffect, useReducer, useState } from "react"; +import { MouseEvent, Reducer, useEffect, useReducer, useState, useContext } from "react"; import { useSelector, useDispatch } from 'react-redux' import { useNavigate, useSearchParams, Outlet } from "react-router-dom"; +import { GlobalDispatchContext, reloadUser } from "../../context/GlobalContext.ts"; import { Modal, // Row, @@ -21,7 +22,7 @@ import MenuWithBottomButtom from '../../components/menu/MenuWithBottomButton.tsx // import MenuTreeWithTopButton from "../../components/menu/MenuTreeWithTopButton.tsx"; // import ListProj from "../../components/list/ListProj.tsx"; // import ListProjAgent from "../../components/list/ListProjAgent.tsx"; -// import { getMenuActive } from '../../util/cache.ts' +import { getMenuActive } from '../../util/cache.ts' import { @@ -53,10 +54,14 @@ import { // downloadUrl, post, getCouponUrl } from '../../util/AjaxUtils.ts' -// import { getLanguageList, getSoftTypeList } from '../../request/api' -import { setMenuActive, +import { + // getLanguageList, getSoftTypeList + appGoodsList, buyAppGoods, appOrderList +} from '../../request/api' +import { + setMenuActive, // getMenuActive - } from '../../util/cache.ts' +} from '../../util/cache.ts' import gpsImg from '@theme/img/right/gps.png' import backImg from '@theme/img/right/back.png' // import { Link } from "react-router-dom"; @@ -80,10 +85,10 @@ interface DataType { } -// import app from '../../static/left/app.png' -// import appnew from '../../static/left/appnew.png' -// import tra from '../../static/left/tra.png' -// import tranew from '../../static/left/tranew.png' +import app from '../../static/left/app.png' +import appnew from '../../static/left/appnew.png' +import tra from '../../static/left/tra.png' +import tranew from '../../static/left/tranew.png' import topblack from '../../static/appimgs/topblack.png' import topblue from '../../static/appimgs/topblue.png' @@ -94,7 +99,7 @@ import firImg from '../../static/fir.png' import noFirImg from '../../static/noFir.png' export default function Index() { - + const globalDispatchContext = useContext(GlobalDispatchContext); // const height = window.innerHeight - 180; const columns: TableColumnsType = [ { @@ -880,7 +885,7 @@ export default function Index() { const copyrightKeyWordshandleSearch = () => { setCopyrightKeywords(copyrightNewKeywords) } - const [specialPrice,setSpecialPrice] = useState(false) //商品特价标识 + const [specialPrice, setSpecialPrice] = useState(false) //商品特价标识 const copyrightInit = () => { setMinPrice(null) setMaxPrice(null) @@ -906,11 +911,11 @@ export default function Index() { copyrightLanguage: copyrightLanguage, copyrightType: copyrightType, // 新增特价标识 - goodsFlag:specialPrice?'特价':'' + goodsFlag: specialPrice ? '特价' : '' } }) } - }, [copyrightKeywords, minPrice, maxPrice, sort, copyrightDate, copyrightLanguage, copyrightType,specialPrice]) + }, [copyrightKeywords, minPrice, maxPrice, sort, copyrightDate, copyrightLanguage, copyrightType, specialPrice]) // ---------------------------------------------------------------------------------------------- @@ -971,13 +976,103 @@ export default function Index() { // APP电子软著框是否显示---------------------------------------------------------------------------------------- const [appSearchBox, setAppSearchBox] = useState(false) + const [appKeyWords, setAppKeyWords] = useState('') // 电子软著搜索关键字 + const [showAppkeyWords, setShowAppkeyWords] = useState('') // 电子软著搜索关键字显示 const [appModal, setAppModal] = useState(false) // 申请电子软著弹窗 const [toEditsModal, setToEditsModal] = useState(false) // 电子软著编辑弹窗 + const [appGoodsArray, setAppGoodsArray] = useState([]) // 电子软著可选商品列表 + const [buyLoading, setBuyLoading] = useState(false) // 购买loading + const [appOrderId, setAppOrderId] = useState() // 电子软著订单id + const [appExamineStatus, setAppExamineStatus] = useState(null) // 电子软著审核状态 + const [appApplyStatus, setAppApplyStatus] = useState(null) // 电子软著申请状态 + const appInit = () => { + setAppKeyWords('') + setShowAppkeyWords('') + setAppExamineStatus(null) + setAppApplyStatus(null) + } + const getAppOrderList = async (page: number) => { + try { + + const res: any = await appOrderList({ page, keywords: '', rows: 10 }) + + dispath({ + type: 'upAppGoodsListData', + val: res + }) + } 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) + } + } finally { + setLoading(false) + } + + } + //电子软著点击搜索 + const handleAppSearch = (value: string) => { + setAppKeyWords(value) + // nav('/app-electron', { + // state: { + // appKeyWords: value, + // } + // }) + } + // 电子软著删除关键字 + const handleAppChange = (e: any) => { + setShowAppkeyWords(e.target.value) + if (e.target.value == '') { + setAppKeyWords('') + + + } + } + useEffect(() => { + nav('/app-electron', { + state: { + appKeyWords: appKeyWords, + checkStatus: appExamineStatus, + appOrderStatus: appApplyStatus + } + }) + }, [appKeyWords,appExamineStatus,appApplyStatus]) + // 获取电子软著可选商品列表 + const getAppGoodsList = async () => { + try { + const res = await appGoodsList() + // console.log('电子软著可选商品列表', res); + setAppGoodsArray(res) + } 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 [trademarkBox, setTrademarkBox] = useState(false) // 申请商标弹窗 const [trademarkModal, setTrademarkModal] = useState(false) // 申请商标弹窗 + // const [toRradeMarkModal, setToRradeMarkModal] = useState(false) // 申请商标编辑弹窗 // ---------------------------------------------------------------------------------------------------- const [correctionSearchBox, setCorrectionSearchBox] = useState(false) @@ -1155,16 +1250,17 @@ export default function Index() { // app电子软著数组 - const appGoodsArray = [ - { id: '1', title: '10个工作日下证', price: '500', back: 'black' }, - { id: '2', title: '3个工作日下证', price: '900', back: 'blue' }, - { id: '3', title: '1个工作日下证', price: '2599', back: 'black' }, - { id: '4', title: '当天下证', price: '3699', back: 'black' }, - ] + // const appGoodsArray = [ + // { id: '1', title: '10个工作日下证', price: '500', back: 'black' }, + // { id: '2', title: '3个工作日下证', price: '900', back: 'blue' }, + // { id: '3', title: '1个工作日下证', price: '2599', back: 'black' }, + // { id: '4', title: '当天下证', price: '3699', back: 'black' }, + // ] + // 商标数组 const trademarkArray = [ { - id: '1', title: '智能申请注册', nowprice: '500', + id: '1', title: '智能申请注册', nowprice: '270', old: true, //是否显示原价 oldprice: '318', //原价 cheap: true,//特价 @@ -1611,7 +1707,7 @@ export default function Index() { // getLanguageListDate() // getSoftTypeListDate() - + getAppGoodsList() }, []); useEffect(() => { // loactionStorage里的activeMenu @@ -1875,7 +1971,7 @@ export default function Index() { list={agentMenu.list} handleListItem={agentMenu.handleListItem} /> */} - {/* {THEME == 'mzw' ? ( + {THEME == 'mzw' ? ( <>
) : ( <> - )} */} + )} {THEME == 'mzw' ? ( + + + + + +
@@ -3667,73 +3827,105 @@ export default function Index() { centered > -
+
- {appGoodsArray.map((item: any) => { - return ( -
{ - setAppGoodsId(item.id) - }} - > -
-
- {item.title} -
+
+ {appGoodsArray.map((item: any, index: number) => { + return ( +
{ + setAppGoodsId(item.dataId) + // console.log('item.dataId: ', item.dataId); -
-
-
- - {item.price} - 元/件 + }} + > +
+
+ {item.dataSummary} +
+
+
+ + {item.dataName / 100} + 元/件 +
+ +
-
- ) + ) - })} + })} +
+
+
{ + if (appGoodsId) { + // alert('开发中') + // 创建按订单 如果成功 询问是否继续编辑 + // setAppGoodsId('') + try { + setBuyLoading(true) + const res = await buyAppGoods(appGoodsId) + setAppOrderId(res.data) + setBuyLoading(false) + setAppModal(false) + getAppOrderList(1) + setToEditsModal(true) + appInit() + reloadUser(messageApi, globalDispatchContext).then(() => { + messageApi.success('扣款成功'); + }); + // 更新redux中的appGoodsListAray + + } 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) + } + } + + + return + + } else { + messageApi.error('请选择商品') + } + }}>下单购买
+
-
-
{ - if (appGoodsId) { - // alert('开发中') - // 创建按订单 如果成功 询问是否继续编辑 - setAppGoodsId('') - setAppModal(false) - setToEditsModal(true) - } else { - messageApi.error('请选择商品') - } - }}>下单购买
-
-
+ { setToEditsModal(false) - nav('/app-edit/dajsdkjakdl') + nav(`/app-edit/${appOrderId}`) }} // 设置确定和取消得文字 okText="编辑" @@ -3758,6 +3950,7 @@ export default function Index() { >
已生成订单,是否编辑
+ {item.nowprice} +
{ console.log(item.nowprice); + setTrademarkModal(false) + nav('/trademark-expert-edit') + + console.log('简单'); }} - >立即购买
+ >开始编辑
{ console.log(item.nowprice); - + console.log('复杂'); }} - >立即购买
+ >开始编辑
diff --git a/src/route/router.tsx b/src/route/router.tsx index d888065..3b064d1 100644 --- a/src/route/router.tsx +++ b/src/route/router.tsx @@ -4,6 +4,7 @@ import ProductRelease from '../route/ProductRelease/ProductRelease.tsx' import AppElectron from '../route/AppElectron/AppElectron.tsx' import AppEdit from '../route/AppElectron/AppEdit.tsx' import TrademarkMall from '../route/TrademarkMall/TrademarkMall.tsx' +import TrademarkExpertEdit from '../route/TrademarkMall/TrademarkExpertEdit.tsx' import TransactionOrder from '../route/TransactionOrder/TransactionOrder.tsx' import CopyrightGgoods from '../route/CopyrightGgoods/CopyrightGgoods.tsx' import TradingGoods from '../route/TradingGoods/TradingGoods.tsx' @@ -226,13 +227,17 @@ export const router = createHashRouter( element: }, { - path: '/app-edit/:appId', + path: '/app-edit/:appOrderId', element: }, { path: '/trademark-mall', element: }, + { + path:'/trademark-expert-edit', + element: + }, { path: '/transaction-order', element: diff --git a/src/store/index.ts b/src/store/index.ts index 0c329f1..47e4954 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -9,22 +9,23 @@ const baseState = { // val: '' // }, belongArray: [], - refunArray:[], - correctionArray:[], - contractArray:[], - contractTotal:0, - refunTotal:0, - correctionTotal:0, - couponModal:false, - projName:'', - projStatus:'', - newRefun:false, - newCorrection:false, - packNum:{ - ALL:0, - MATERIAL:0, + refunArray: [], + correctionArray: [], + contractArray: [], + contractTotal: 0, + refunTotal: 0, + correctionTotal: 0, + couponModal: false, + projName: '', + projStatus: '', + newRefun: false, + newCorrection: false, + packNum: { + ALL: 0, + MATERIAL: 0, }, - phoneModal:false, + phoneModal: false, + appGoodsListData: {}, } // 创建仓库 @@ -78,9 +79,12 @@ const reducer = (state = baseState, action: any) => { if (action.type == 'upPackNum') { nstate.packNum = action.val } - if(action.type == 'changePhoneModal'){ + if (action.type == 'changePhoneModal') { nstate.phoneModal = action.val } + if (action.type == 'upAppGoodsListData') { + nstate.appGoodsListData = action.val + } return nstate } const store = createStore(reducer)