import './proj-edit-step.css'; import { Radio, Cascader, Col, DatePicker, message, Modal, Row, Spin, Select, Table, } from "antd"; import { FolderAddOutlined } from '@ant-design/icons'; import locale from 'antd/es/date-picker/locale/zh_CN'; import { useParams } from "react-router-dom"; import { useEffect, useState } from "react"; import { get, put, post, downloadUrl } from "../../../util/AjaxUtils.ts"; import { Button, Form, Input } from 'antd'; import { AxiosResponse } from "axios"; import dayjs, { Dayjs } from 'dayjs'; import type { SearchProps } from 'antd/es/input/Search'; // import type { TableColumnsType } from 'antd'; import { ITree } from "../../../interfaces/dict/IDict.ts"; const { Search } = Input; const { Column } = Table; // 基本信息文件类型 type FieldType = { projSubName: string; projVersion: string; projDevCompleteDate: Dayjs; companyName: string; companyNameEn: string; }; // 所属人信息类型 type BelongPeopleType = { authorName: string; authorIdCardType: string; authorIdCard: string; authorNation: string; authorProvince: string; authorEstablishDate: Dayjs; authorType: string; nameEn: string; isCrcAccount: string; crcAccountPassword: string; crcAccountUsername: string; } type ContactType = { csaNo: string gmtCreate: string gmtModified: string name: string phone: string projContactId: string email: string } // interface DataType { // key: React.Key; // name: string; // age: number; // address: string; // select: boolean; // } interface Option { value?: string | number | null; label: React.ReactNode; children?: Option[]; isLeaf?: boolean; id: string; pId: string; } export default function ProjEditStep2() { // const nav = useNavigate(); const pathParams = useParams(); const [messageApi, contextHolder] = message.useMessage(); const [formInfo] = Form.useForm(); const [formBelong] = Form.useForm(); const [formContact] = Form.useForm() const [loading, setLoading] = useState(false); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isNewBelongOpen, setIsNewBelongOpen] = useState(false) const [isContantOpen, steIsContantOpen] = useState(false) const height = window.innerHeight - 200; const dateFormat = 'YYYY年MM月DD日'; // 页面显示的所属者信息 const [authorName, setauthorName] = useState('') //所属人姓名 const [authorIdCardType, setauthorIdCardType] = useState('') //所属人证件类型 const [authorIdCard, setauthorIdCard] = useState('') //所属人证件号 const [authorType, setauthorType] = useState('') //所属人类型 const [authorNameEn, setauthorNameEn] = useState('') //所属人英文名 const [authorProvinceCity, setauthorProvinceCity] = useState('') //所属人省市 const [authorCrcAccount, setauthorCrcAccount] = useState(0) //是否给账号 0 给 1 不给 const [authorCrcAccountPassword, setauthorCrcAccountPassword] = useState('') //密码 const [authorCrcAccountUsername, setauthorCrcAccountUsername] = useState('') //账号 // 从基本信息中获取到的两个表格默认选择的id 所属者id 联系人id const [authorId, setAuthorId] = useState('') //所属人id const [applyConcatId, setApplyConcatId] = useState('') //联系人id const [applyContactCsaNo, setapplyContactCsaNo] = useState('') //客服编号 const [applyContactEmail, setapplyContactEmail] = useState('') //联系人邮箱 const [applyContactName, setapplyContactName] = useState('') //联系人姓名 const [applyContactPhone, setapplyContactPhone] = useState('') //联系人手机 // 设置所属者more你选中的行 // const [selectedRowKeys, setSelectedRowKeys] = useState([]); // 所属者搜索关键字 const [keywords, setKeyWords] = useState('') const [type, setType] = useState('') // 表格第几行数据 // const [clom, setClom] = useState('') // 著作人搜索 const belongPeopleSearch: SearchProps['onSearch'] = (value, _e, info) => ( console.log(info?.source, value), setKeyWords(value), getSearchProjOwnerList(value, type) ); // 申请人信息搜索 applicantPeopleSearch const applicantPeopleSearch: SearchProps['onSearch'] = (value, _e, info) => ( console.log(info?.source, value), // alert(value), getSearchProjContactList(value) ); // 表格相关 // rowSelection object indicates the need for row selection // 所属者表格选择触发 const belongRowSelection = { // selectedRowKeys: React.Key[] onChange: (selectedRowKeys: React.Key[], selectedRows: BelongDataType[]) => { console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); setauthorName(selectedRows[0].name) setauthorIdCardType(selectedRows[0].idCardType) setauthorIdCard(selectedRows[0].idCardNo) setauthorType(selectedRows[0].type) setauthorNameEn(selectedRows[0].nameEn) setauthorProvinceCity(selectedRows[0].provinceCity) setauthorCrcAccount(selectedRows[0].isCrcAccount) setauthorCrcAccountPassword(selectedRows[0].crcAccountPassword) setauthorCrcAccountUsername(selectedRows[0].crcAccountUsername) setAuthorId(selectedRows[0].projOwnerId) // setClom(String(selectedRowKeys)) // setbelongselectedKeys(selectedRowKeys) }, }; // 联系人表格选择触发 const ContantRowSelection = { // selectedRowKeys: React.Key[] onChange: (selectedRowKeys: React.Key[], selectedRows: ContactDataType[]) => { console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); setApplyConcatId(selectedRows[0].projContactId) setapplyContactCsaNo(selectedRows[0].csaNo) setapplyContactEmail(selectedRows[0].email) setapplyContactName(selectedRows[0].name) setapplyContactPhone(selectedRows[0].phone) }, }; // 所属人表格数据 const [tableBelongData, setTableBelongData] = useState([]) // 联系人表格数据 const [tableContactData, setTableContactData] = useState([]) // const selectedKeys = data.filter(item => item.select).map(item => item.key); // console.log('selectedKeys:', selectedKeys); // 是否提供中国版账号 // 所属者id 关键字 const [projOwnerId,] = useState('') // 联系人id 关键字 const [contactId,] = useState('') // 所属者弹窗数据 const [belongTitle, setbelongTitle] = useState('') const [areaArray, setAreaArray] = useState([]); const listArea = (pId: string) => { return new Promise((resolve) => { get({ messageApi, url: '/api/area/list-area-ztree', config: { params: { id: pId } }, onSuccess({ data }) { resolve(data); } }) }) } // 联系热弹窗数据 const [contactTitle, setContactTitle] = useState('') // 著作人表单信息 点击确定 const handleOk = () => { formBelong.validateFields().then(() => { // 如果验证通过,则执行确认操作 // 这里可以放置你的确认操作逻辑 if (belongTitle === '编辑所属者') { upProjOwner() } if (belongTitle === '创建所属者') { newProjOwner() } // 关闭 弹窗 // setIsNewBelongOpen(false) // 初始化数据 formBelong.resetFields(); // 重置表单字段为初始值 }).catch(() => { // 如果验证不通过,可以根据需要处理错误信息 // (errorInfo); }); }; // 联系人人表单信息 点击确定 const contactHandleOk = () => { // alert('联系热确定') formContact.validateFields().then(() => { // 如果验证通过,则执行确认操作 // 这里可以放置你的确认操作逻辑 if (contactTitle === '编辑联系人') { upContact() } if (contactTitle === '创建联系人') { newContact() } // 关闭 弹窗 // setIsNewBelongOpen(false) // 初始化数据 formContact.resetFields(); // 重置表单字段为初始值 }).catch(() => { // 如果验证不通过,可以根据需要处理错误信息 // (errorInfo); }); }; // const [belongselectedKeys,setbelongselectedKeys] = useState(tableBelongData.filter(item => item.projOwnerId === authorId).map(item => item.projOwnerId)); // 获取页面基本信息信息 const getEditstep = () => { get({ messageApi, url: `/api/proj/get/edit-step2/${pathParams.projId}`, onSuccess({ data }: AxiosResponse) { // 获取默认所属人信息 setauthorName(data.authorName) setauthorIdCardType(data.authorIdCardType) setauthorIdCard(data.authorIdCard) setauthorType(data.authorType) setauthorNameEn(data.authorNameEn) setauthorProvinceCity(data.authorProvinceCity) setauthorCrcAccount(data.authorCrcAccount) setauthorCrcAccountPassword(data.authorCrcAccountPassword) setauthorCrcAccountUsername(data.authorCrcAccountUsername) setAuthorId(data.authorId) // 默认联系人信息 setApplyConcatId(data.applyContactId) setapplyContactName(data.applyContactName) setapplyContactPhone(data.applyContactPhone) setapplyContactCsaNo(data.applyContactCsaNo) setapplyContactEmail(data.applyContactEmail) console.log('基本信息', data); setAuthorId(data.authorId) setApplyConcatId(data.applyContactId) formInfo.setFieldsValue({ projSubName: data.projSubName, projVersion: data.projVersion, projDevCompleteDate: data.projDevCompleteDate ? dayjs(data.projDevCompleteDate, 'YYYY-MM-DD') : '', companyName: data.companyName, companyNameEn: data.companyNameEn, }) } }) } // 获取所属者表格 const getProjOwnerList = () => { get({ messageApi, url: `/api/proj-owner/list/self`, onSuccess({ data }: AxiosResponse) { console.log('所属者表格', data); setTableBelongData(data) // const selectBelongArray = data.filter(item => item.name === authorName) // console.log('嘻嘻',selectBelongArray); // setSelectedRowKeys(selectBelongArray) } }) } // 获取联系人表格 const getProjContactList = () => { get({ messageApi, url: `/api/proj-contact/list/self`, onSuccess({ data }: AxiosResponse) { console.log('联系人表格', data); // setTableBelongData(data) setTableContactData(data) } }) } // 获取所属表格 带搜索 const getSearchProjOwnerList = (keywords: any, type: any) => { get({ messageApi, url: `/api/proj-owner/list/self?keywords=${keywords}&type=${type}`, onSuccess({ data }: AxiosResponse) { console.log('搜索所属者表格', data); setTableBelongData(data) } }) } // 获取联系人表格 带搜索 const getSearchProjContactList = (keywords: any) => { get({ messageApi, url: `/api/proj-contact/list/self?keywords=${keywords}`, onSuccess({ data }: AxiosResponse) { // console.log('联系人表格', data); // setTableBelongData(data) setTableContactData(data) } }) } // 编辑所属者 const upProjOwner = () => { const crcAccountPassword = Number(formBelong.getFieldValue('isCrcAccount')) == 1 ? formBelong.getFieldValue('crcAccountPassword') : '' const crcAccountUsername = Number(formBelong.getFieldValue('isCrcAccount')) == 1 ? formBelong.getFieldValue('crcAccountUsername') : '' put({ messageApi, url: `/api/proj-owner/update/${projOwnerId}`, body: { crcAccountPassword: crcAccountPassword, crcAccountUsername: crcAccountUsername, idCardNo: formBelong.getFieldValue('authorIdCard'), idCardType: formBelong.getFieldValue('authorIdCardType'), isCrcAccount: Number(formBelong.getFieldValue('isCrcAccount')), name: formBelong.getFieldValue('authorName'), nameEn: formBelong.getFieldValue('nameEn') || '', provinceCity: formBelong.getFieldValue('authorProvince').join(','), type: formBelong.getFieldValue('authorType'), }, onBefore() { }, onSuccess() { // console.log(data); // alert('编辑成功') messageApi.open({ type: 'success', content: '编辑成功' }) getProjOwnerList() setIsNewBelongOpen(false) }, onFinally() { } }) } // 创建所属者 const newProjOwner = () => { const crcAccountPassword = Number(formBelong.getFieldValue('isCrcAccount')) == 1 ? formBelong.getFieldValue('crcAccountPassword') : '' const crcAccountUsername = Number(formBelong.getFieldValue('isCrcAccount')) == 1 ? formBelong.getFieldValue('crcAccountUsername') : '' post({ messageApi, url: '/api/proj-owner/save', body: { crcAccountPassword: crcAccountPassword, crcAccountUsername: crcAccountUsername, idCardNo: formBelong.getFieldValue('authorIdCard'), idCardType: formBelong.getFieldValue('authorIdCardType'), isCrcAccount: Number(formBelong.getFieldValue('isCrcAccount')), name: formBelong.getFieldValue('authorName'), nameEn: formBelong.getFieldValue('nameEn'), provinceCity: formBelong.getFieldValue('authorProvince').join(','), type: formBelong.getFieldValue('authorType'), }, onBefore() { }, onSuccess() { messageApi.success('提交成功') getProjOwnerList() setIsNewBelongOpen(false) }, onFinally() { } }) } // 客服二维码 const [imgUrl, setImgUrl] = useState('') // 点击创建联系热人获取随机客服 const getCas = () => { get({ messageApi, url: `/api/csa/get`, onSuccess({ data }: AxiosResponse) { console.log('随机客服信息二维码', data.casQrCode); formContact.setFieldsValue({ csaNo: data.csaNo }); if (data.casQrCode) { const imgUrl = downloadUrl(data.casQrCode); console.log('图片地址', imgUrl); setImgUrl(imgUrl) } } }) } // 创建联系人 const newContact = () => { post({ messageApi, url: '/api/proj-contact/save', body: { csaNo: formContact.getFieldValue('csaNo'), name: formContact.getFieldValue('name'), phone: formContact.getFieldValue('phone'), email: formContact.getFieldValue('email'), }, onBefore() { }, onSuccess() { messageApi.success('提交成功') getProjContactList() steIsContantOpen(false) }, onFinally() { } }) } // 编辑联系人 const upContact = () => { put({ messageApi, url: `/api/proj-contact/update/${contactId}`, body: { csaNo: formContact.getFieldValue('csaNo'), name: formContact.getFieldValue('name'), phone: formContact.getFieldValue('phone'), email: formContact.getFieldValue('email'), }, onBefore() { }, onSuccess() { // console.log(data); // alert('编辑成功') messageApi.open({ type: 'success', content: '编辑成功' }) getProjContactList() steIsContantOpen(false) }, onFinally() { } }) } useEffect(() => { getEditstep() getProjOwnerList() getProjContactList() listArea('0').then(data => { const options: Option[] = data.map(item => { return { value: item.name, label: item.name, isLeaf: !item.isParent, id: item.id, pId: item.pId } }) setAreaArray(options); }); }, []) return ( <>
{contextHolder} {/* 首页}, {title: 创建项目}, {title: {nav(-1)}}>编辑项目}, {title: '基本信息'}, ]} /> */}
基本信息
{ setIsEditModalOpen(true); }} autoComplete="off" disabled >
项目简称:
// label="项目简称" name="projSubName" rules={[{ required: false, message: '请输入项目简称' }]} >
* 开发完成时间:
// label="开发完成时间" name="projDevCompleteDate" rules={[{ required: true, message: '请输入开发完成时间' }]} >
* 项目版本:
// label="项目版本" name="projVersion" rules={[{ required: true, message: '请输入项目版本' }]} >
姓名或公司名称:
* 英文名称:
选择知识产权所属者
根据《中国版权登记业务平台软件登记》相关要求,申请人需要再国版权登记业务平台注册并通过实名制认证。 了解实名制认证流程
{ console.log(`selected ${value}`); alert(`selected ${value}`) }} options={[ { value: 'code1', label: '全部状态' }, { value: 'code2', label: '嘿嘿' }, { value: 'code3', label: '嘻嘻' }, ]} defaultValue="code1" />
*/}
当前所属者:
请选择所属者
{authorName}/{authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{authorIdCard}
{/* 表格 */} ( record.type === 'PERSONAL' ? '自然人' : '企业/组织' )} /> ( record.idCardType === 'ID_CARD' ? '身份证' : '营业执照' )} /> {/* */}
申请人信息
联系人用于接受平台相关业务办理进度的通知信息与各类协议的线下签章等工作。
当前联系人:
请选择联系人
{applyContactName}/{applyContactPhone}/{applyContactEmail}
{/* 表格 lyp*/} {/* */}
{/* 总体选择保存的提示 */} { // 美哟u创建所属者 应该还得判断一下没选中所属者 if (authorName == '') { // alert('所属者不能为空') messageApi.open({ type: 'error', content: '请选择所属者' }) setIsEditModalOpen(false); // 没有申请人 应该还得判断一下没选中申请人 } else if (applyContactName == '') { // alert('申请人不能为空') messageApi.open({ type: 'error', content: '请选择联系人' }) setIsEditModalOpen(false); } // else if (selectedKeys.length == 0) { // messageApi.open({ // type: 'error', // content: '请选择所属者' // }) // setIsEditModalOpen(false); // } else { // alert(authorName) setIsEditModalOpen(false); put({ messageApi, url: `/api/proj/update/edit-step2/${pathParams.projId}`, body: { projSubName: formInfo.getFieldValue('projSubName'), projVersion: formInfo.getFieldValue('projVersion'), projDevCompleteDate: dayjs(formInfo.getFieldValue('projDevCompleteDate')).format(dateFormat), // companyName: formInfo.getFieldValue('companyName'), // companyNameEn: formInfo.getFieldValue('companyNameEn'), authorName, authorIdCardType, authorIdCard, authorType, authorNameEn, authorProvinceCity, authorCrcAccount, authorCrcAccountPassword, authorCrcAccountUsername, authorId, applyContactId: applyConcatId, applyContactCsaNo, applyContactEmail, applyContactName, applyContactPhone }, onBefore() { setLoading(true); }, onSuccess() { messageApi.open({ type: 'success', content: '编辑成功' }) }, onFinally() { setLoading(false); } }) } }} onCancel={() => { setIsEditModalOpen(false); }}>
确定提交吗?
{/* 选择创建/编辑/查看所属者弹框 */} { // }} onOk={ handleOk } width={1280} // 确认按钮样式 okButtonProps={{ style: { width: '102px', height: '49px', background: '#FFBA00', fontSize: '18px', color: '#FFFFFF', display: belongTitle == '查看所属者' ? 'none' : 'block' } }} // 返回按钮样式 cancelButtonProps={{ style: { border: 'none', width: '102px', height: '49px', background: '#F3F3F3', fontSize: '18px', color: '#8C8C8C' } }} onCancel={() => { setIsNewBelongOpen(false) }} >
{belongTitle}
{ // setIsNewBelongOpen(true); }} autoComplete="off" >
请选择知识产权所属者类型:
企业/组织 自然人
姓名或公司名称:
// label="姓名或公司名称" name="authorName" rules={[{ required: true, message: '请输入姓名或公司名称' }]} >
公司英文名:
// label="公司英文名" name="nameEn" rules={[{ required: true, message: '请输入公司英文名' }]} >
请选择证件类型:
// label="证件类型" name="authorIdCardType" rules={[{ required: true, message: '请选择证件类型' }]} >
省市:
// label="省市" name="authorProvince" rules={[{ required: true, message: '请选择省市' }]} > { const targetOption = selectedOptions[selectedOptions.length - 1]; listArea(targetOption.id).then(data => { targetOption.children = data.map(item => { return { value: item.name, label: item.name, isLeaf: !item.isParent, id: item.id, pId: item.pId } }); setAreaArray([ ...areaArray ]) }); }} placeholder="请选择省市" changeOnSelect disabled={belongTitle == '查看所属者' ? true : false} />
是否愿意提供中国版权登记业务平台的账号?
// label="是否愿意提供中国版权登记业务平台的账号?" name="isCrcAccount" rules={[ { required: true, message: '请选择请选择知识产权所属者类型', } ]} style={{ marginTop: '22px', marginLeft: '24px' }} >
提供账号的好处为:可以以知识产权所属者的身份在中国版权登记业务平台上进行软著资料的提交。如果不提供我们将以代理商的身份替知识产权所属者进行提供。提供中国版权登记业务平台账号,会提高审核速度。
中国版权登记业务平台用户名
// label="中国版权登记业务平台用户名" name="crcAccountUsername" rules={[ ({ getFieldValue }) => ({ validator(_, value) { if (getFieldValue('isCrcAccount') === '1') { if (!value) { return Promise.reject('请输入账号'); } } return Promise.resolve(); }, }), ]} >
中国版权登记业务平台密码
// label="中国版权登记业务平台密码" name="crcAccountPassword" rules={[ ({ getFieldValue }) => ({ validator(_, value) { if (getFieldValue('isCrcAccount') === '1') { if (!value) { return Promise.reject('请输入密码'); } } return Promise.resolve(); }, }), ]} >
{/* 选择创建/编辑/查看联系人弹框 lyp*/} { // }} onOk={ contactHandleOk } width={745} // 确认按钮样式 okButtonProps={{ style: { width: '102px', height: '49px', background: '#FFBA00', fontSize: '18px', color: '#FFFFFF', display: contactTitle == '查看联系人' ? 'none' : 'block' } }} // 返回按钮样式 cancelButtonProps={{ style: { border: 'none', width: '102px', height: '49px', background: '#F3F3F3', fontSize: '18px', color: '#8C8C8C' } }} onCancel={() => { steIsContantOpen(false) }} >
{contactTitle}
{ // setIsNewBelongOpen(true); }} autoComplete="off" >
姓名:
name="name" rules={[{ required: true, message: '请输入姓名' }]} >
电话:
name="phone" rules={[{ required: true, message: '请输入电话号码' }]} >
邮箱:
name="email" rules={[{ required: true, message: '请输入邮箱' }, { type: 'email', message: '请输入有效的邮箱地址' } ]} >
name="csaNo" >
请使用微信扫一扫
添加您的专属客服
) }