diff --git a/src/components/BelongPeople/BelongPeople.tsx b/src/components/BelongPeople/BelongPeople.tsx index 865f21a..90c4d08 100644 --- a/src/components/BelongPeople/BelongPeople.tsx +++ b/src/components/BelongPeople/BelongPeople.tsx @@ -64,6 +64,7 @@ type propsInfo = { belongPeopleInfo?: any setValue?: any isShow?: boolean + closeModal?: any }; export default function BelongPeople(props: propsInfo) { // const nav = useNavigate(); @@ -71,7 +72,7 @@ export default function BelongPeople(props: propsInfo) { const [messageApi, contextHolder] = message.useMessage(); const [formInfo] = Form.useForm(); const [formBelong] = Form.useForm(); - + const [isLoading, setIsLoading] = useState(false) const [loading] = useState(false); // const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isNewBelongOpen, setIsNewBelongOpen] = useState(false) @@ -81,16 +82,16 @@ export default function BelongPeople(props: propsInfo) { // 点击查看是否显示账号密码 const [checkCrcAccountShow, setCheckCrcAccountShow] = useState('') // 页面显示的所属者信息 - // const [authorName, setauthorName] = useState('') //所属人姓名 - // const [authorIdCardType, setauthorIdCardType] = useState('') //所属人证件类型 - // const [authorIdCard, setauthorIdCard] = useState('') //所属人证件号 - // const [authorType, setauthorType] = useState('') //所属人类型 - // const [authorProvinceCity, setauthorProvinceCity] = useState('') //所属人省市 - // const [authorCrcAccount, setauthorCrcAccount] = useState(0) //是否给账号 0 给 1 不给 + const [authorName, setauthorName] = useState('') //所属人姓名 + const [authorIdCardType, setauthorIdCardType] = useState('') //所属人证件类型 + const [authorIdCard, setauthorIdCard] = useState('') //所属人证件号 + const [authorType, setauthorType] = 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 [authorId, setAuthorId] = useState('') //所属人id // 设置所属者more你选中的行 // const [selectedRowKeys, setSelectedRowKeys] = useState([]); @@ -114,29 +115,29 @@ export default function BelongPeople(props: propsInfo) { // 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) - // setauthorProvinceCity(selectedRows[0].provinceCity) - // setauthorCrcAccount(selectedRows[0].isCrcAccount) + setauthorName(selectedRows[0].name) + setauthorIdCardType(selectedRows[0].idCardType) + setauthorIdCard(selectedRows[0].idCardNo) + setauthorType(selectedRows[0].type) + setauthorProvinceCity(selectedRows[0].provinceCity) + setauthorCrcAccount(selectedRows[0].isCrcAccount) // setauthorCrcAccountPassword(selectedRows[0].crcAccountPassword) // setauthorCrcAccountUsername(selectedRows[0].crcAccountUsername) - // setAuthorId(selectedRows[0].projOwnerId) + setAuthorId(selectedRows[0].projOwnerId) // setClom(String(selectedRowKeys)) // setbelongselectedKeys(selectedRowKeys) // props.setBelongPeopleName(selectedRows[0].name) - props.setBelongPeopleInfo({ - authorName: selectedRows[0].name, - authorType: selectedRows[0].type, - authorIdCardType: selectedRows[0].idCardType, - authorIdCard: selectedRows[0].idCardNo, + // props.setBelongPeopleInfo({ + // authorName: selectedRows[0].name, + // authorType: selectedRows[0].type, + // authorIdCardType: selectedRows[0].idCardType, + // authorIdCard: selectedRows[0].idCardNo, - authorCrcAccount: selectedRows[0].isCrcAccount, - authorId: selectedRows[0].projOwnerId, - authorProvinceCity: selectedRows[0].provinceCity - }) - props.setValue(selectedRows[0].name) + // authorCrcAccount: selectedRows[0].isCrcAccount, + // authorId: selectedRows[0].projOwnerId, + // authorProvinceCity: selectedRows[0].provinceCity + // }) + // props.setValue(selectedRows[0].name) }, }; @@ -240,6 +241,9 @@ export default function BelongPeople(props: propsInfo) { get({ messageApi, url: `/api/proj-owner/list/self`, + onBefore() { + setIsLoading(true); + }, onSuccess({ data }: AxiosResponse) { console.log('所属者表格', data); setTableBelongData(data) @@ -247,6 +251,9 @@ export default function BelongPeople(props: propsInfo) { // console.log('嘻嘻',selectBelongArray); // setSelectedRowKeys(selectBelongArray) + }, + onFinally() { + setIsLoading(false); } }) } @@ -256,9 +263,15 @@ export default function BelongPeople(props: propsInfo) { get({ messageApi, url: `/api/proj-owner/list/self?keywords=${keywords}&type=${type}`, + onBefore() { + setIsLoading(true); + }, onSuccess({ data }: AxiosResponse) { console.log('搜索所属者表格', data); setTableBelongData(data) + }, + onFinally() { + setIsLoading(false); } }) } @@ -374,7 +387,7 @@ export default function BelongPeople(props: propsInfo) { return ( <> -
+
{contextHolder} @@ -426,7 +439,7 @@ export default function BelongPeople(props: propsInfo) { authorType: 'ORGANIZATION', }) - }} type="primary" icon={} style={{ width: "160px", height: '43px', fontSize: '14px'}}> + }} type="primary" icon={} style={{ width: "160px", height: '43px', fontSize: '14px' }}> 创建所属者
@@ -468,266 +481,304 @@ export default function BelongPeople(props: propsInfo) {
*/}
-
-
当前所属者:
-
请选择所属者
-
- {props.belongPeopleInfo.authorName}/{props.belongPeopleInfo.authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{props.belongPeopleInfo.authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{props.belongPeopleInfo.authorIdCard} + {authorName ? (<> +
+
当前所属者:
+
请选择所属者
+
+ {authorName}/{authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{authorIdCard} +
+ ) : (<> +
+
当前所属者:
+
请选择所属者
+
+ {props.belongPeopleInfo.authorName}/{props.belongPeopleInfo.authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{props.belongPeopleInfo.authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{props.belongPeopleInfo.authorIdCard} +
+
+ )} + +
+ +
+ {/* 表格 */} + {props.isShow ? ( + + ( + record.type === 'PERSONAL' ? '自然人' : '企业/组织' + )} + /> + ( + record.idCardType === 'ID_CARD' ? '身份证' : '营业执照' + )} + /> + + {/* */} + ( + + { + + // alert(record.projOwnerId); + + console.log('text:', text); + console.log('record:', record); + + setProjOwnerId(record.projOwnerId) + setbelongTitle('编辑所属者') + setBelongShow(record.type) + setIsNewBelongOpen(true) + // 发起请求给formBelong 表单赋值 + setCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') + // 查看账号密码是否显示 + formBelong.setFieldsValue({ + // 公司名 + authorName: record.name, + // 公司英文名 + nameEn: record.nameEn, + // 证件类型 + authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', + // 证件号 + authorIdCard: record.idCardNo, + // 国籍 + // authorNation: '中国', + // 地区 + authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', + // 成立日期 + // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', + // 是否提供平台账号 + isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', + // 个人/企业 + authorType: record.type, + // 密码 + crcAccountPassword: record.crcAccountPassword, + // 账号 + crcAccountUsername: record.crcAccountUsername + }) + }}>编辑 + | + { + // alert(record.projOwnerId); + del({ + messageApi, + url: `/api/proj-owner/remove/${record.projOwnerId}`, + onSuccess() { + messageApi.success('删除成功'); + // getProjOwnerList() + getSearchProjOwnerList(keywords, type) + } + }) + }}>删除 + | + { + setbelongTitle('查看所属者') + setIsNewBelongOpen(true) + // 发起请求给formBelong 表单赋值 + formBelong.setFieldsValue({ + // 公司名 + authorName: record.name, + // 公司英文名 + nameEn: record.nameEn, + // 证件类型 + authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', + // 证件号 + authorIdCard: record.idCardNo, + // 国籍 + // authorNation: '中国', + // 地区 + authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', + // 成立日期 + // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', + // 是否提供平台账号 + isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', + // 个人/企业 + authorType: record.type, + // 密码 + crcAccountPassword: record.crcAccountPassword, + // 账号 + crcAccountUsername: record.crcAccountUsername + }) + // 查看是否显示账号密码 + setCheckCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') + + }}>查看 + + + )} + /> +
) : ( + + ( + record.type === 'PERSONAL' ? '自然人' : '企业/组织' + )} + /> + ( + record.idCardType === 'ID_CARD' ? '身份证' : '营业执照' + )} + /> + + {/* */} + ( + + { + + // alert(record.projOwnerId); + + console.log('text:', text); + console.log('record:', record); + + setProjOwnerId(record.projOwnerId) + setbelongTitle('编辑所属者') + setBelongShow(record.type) + setIsNewBelongOpen(true) + // 发起请求给formBelong 表单赋值 + setCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') + formBelong.setFieldsValue({ + // 公司名 + authorName: record.name, + // 公司英文名 + nameEn: record.nameEn, + // 证件类型 + authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', + // 证件号 + authorIdCard: record.idCardNo, + // 国籍 + // authorNation: '中国', + // 地区 + authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', + // 成立日期 + // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', + // 是否提供平台账号 + isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', + // 个人/企业 + authorType: record.type, + // 密码 + crcAccountPassword: record.crcAccountPassword, + // 账号 + crcAccountUsername: record.crcAccountUsername + }) + }}>编辑 + | + { + // alert(record.projOwnerId); + del({ + messageApi, + url: `/api/proj-owner/remove/${record.projOwnerId}`, + onSuccess() { + messageApi.success('删除成功'); + // getProjOwnerList() + getSearchProjOwnerList(keywords, type) + } + }) + }}>删除 + | + { + setbelongTitle('查看所属者') + setIsNewBelongOpen(true) + // 发起请求给formBelong 表单赋值 + formBelong.setFieldsValue({ + // 公司名 + authorName: record.name, + // 公司英文名 + nameEn: record.nameEn, + // 证件类型 + authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', + // 证件号 + authorIdCard: record.idCardNo, + // 国籍 + // authorNation: '中国', + // 地区 + authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', + // 成立日期 + // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', + // 是否提供平台账号 + isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', + // 个人/企业 + authorType: record.type, + // 密码 + crcAccountPassword: record.crcAccountPassword, + // 账号 + crcAccountUsername: record.crcAccountUsername + }) + setCheckCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') + }}>查看 + + + )} + /> +
+ )} + +
-
-
- {/* 表格 */} - {props.isShow ? ( - - ( - record.type === 'PERSONAL' ? '自然人' : '企业/组织' - )} - /> - ( - record.idCardType === 'ID_CARD' ? '身份证' : '营业执照' - )} - /> - - {/* */} - ( - - { - - // alert(record.projOwnerId); - - console.log('text:', text); - console.log('record:', record); - - setProjOwnerId(record.projOwnerId) - setbelongTitle('编辑所属者') - setBelongShow(record.type) - setIsNewBelongOpen(true) - // 发起请求给formBelong 表单赋值 - setCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') - // 查看账号密码是否显示 - formBelong.setFieldsValue({ - // 公司名 - authorName: record.name, - // 公司英文名 - nameEn: record.nameEn, - // 证件类型 - authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', - // 证件号 - authorIdCard: record.idCardNo, - // 国籍 - // authorNation: '中国', - // 地区 - authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', - // 成立日期 - // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', - // 是否提供平台账号 - isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', - // 个人/企业 - authorType: record.type, - // 密码 - crcAccountPassword: record.crcAccountPassword, - // 账号 - crcAccountUsername: record.crcAccountUsername - }) - }}>编辑 - | - { - // alert(record.projOwnerId); - del({ - messageApi, - url: `/api/proj-owner/remove/${record.projOwnerId}`, - onSuccess() { - messageApi.success('删除成功'); - // getProjOwnerList() - getSearchProjOwnerList(keywords, type) - } - }) - }}>删除 - | - { - setbelongTitle('查看所属者') - setIsNewBelongOpen(true) - // 发起请求给formBelong 表单赋值 - formBelong.setFieldsValue({ - // 公司名 - authorName: record.name, - // 公司英文名 - nameEn: record.nameEn, - // 证件类型 - authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', - // 证件号 - authorIdCard: record.idCardNo, - // 国籍 - // authorNation: '中国', - // 地区 - authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', - // 成立日期 - // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', - // 是否提供平台账号 - isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', - // 个人/企业 - authorType: record.type, - // 密码 - crcAccountPassword: record.crcAccountPassword, - // 账号 - crcAccountUsername: record.crcAccountUsername - }) - // 查看是否显示账号密码 - setCheckCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') - - }}>查看 - - - )} - /> -
) : ( - - ( - record.type === 'PERSONAL' ? '自然人' : '企业/组织' - )} - /> - ( - record.idCardType === 'ID_CARD' ? '身份证' : '营业执照' - )} - /> - - {/* */} - ( - - { - - // alert(record.projOwnerId); - - console.log('text:', text); - console.log('record:', record); - - setProjOwnerId(record.projOwnerId) - setbelongTitle('编辑所属者') - setBelongShow(record.type) - setIsNewBelongOpen(true) - // 发起请求给formBelong 表单赋值 - setCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') - formBelong.setFieldsValue({ - // 公司名 - authorName: record.name, - // 公司英文名 - nameEn: record.nameEn, - // 证件类型 - authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', - // 证件号 - authorIdCard: record.idCardNo, - // 国籍 - // authorNation: '中国', - // 地区 - authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', - // 成立日期 - // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', - // 是否提供平台账号 - isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', - // 个人/企业 - authorType: record.type, - // 密码 - crcAccountPassword: record.crcAccountPassword, - // 账号 - crcAccountUsername: record.crcAccountUsername - }) - }}>编辑 - | - { - // alert(record.projOwnerId); - del({ - messageApi, - url: `/api/proj-owner/remove/${record.projOwnerId}`, - onSuccess() { - messageApi.success('删除成功'); - // getProjOwnerList() - getSearchProjOwnerList(keywords, type) - } - }) - }}>删除 - | - { - setbelongTitle('查看所属者') - setIsNewBelongOpen(true) - // 发起请求给formBelong 表单赋值 - formBelong.setFieldsValue({ - // 公司名 - authorName: record.name, - // 公司英文名 - nameEn: record.nameEn, - // 证件类型 - authorIdCardType: record.idCardType ? record.idCardType : 'BUSINESS_LICENSE', - // 证件号 - authorIdCard: record.idCardNo, - // 国籍 - // authorNation: '中国', - // 地区 - authorProvince: record.provinceCity ? record.provinceCity.split(',') : '', - // 成立日期 - // authorEstablishDate: record.gmtCreate ? dayjs(record.gmtCreate, 'YYYY-MM-DD') : '', - // 是否提供平台账号 - isCrcAccount: record.isCrcAccount == 1 ? '1' : '0', - // 个人/企业 - authorType: record.type, - // 密码 - crcAccountPassword: record.crcAccountPassword, - // 账号 - crcAccountUsername: record.crcAccountUsername - }) - setCheckCrcAccountShow(record.isCrcAccount == 1 ? '1' : '0') - }}>查看 - - - )} - /> -
- )} - - -
+
+
+
+ + +
+
diff --git a/src/components/ContactPeople/ContactPeople.tsx b/src/components/ContactPeople/ContactPeople.tsx new file mode 100644 index 0000000..deeacf1 --- /dev/null +++ b/src/components/ContactPeople/ContactPeople.tsx @@ -0,0 +1,408 @@ +import { message, Modal,Table, Space } 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, del, downloadUrl } from "../../../util/AjaxUtils.ts"; +import { + get, put, post, del, + downloadUrl +} from "../../util/AjaxUtils.ts"; +import { Button, Form, Input } from 'antd'; +import { AxiosResponse } from "axios"; + +import type { SearchProps } from 'antd/es/input/Search'; +// import type { TableColumnsType } from 'antd'; + +type ContactType = { + csaNo: string + gmtCreate: string + gmtModified: string + name: string + phone: string + projContactId: string + email: string + company: string +} +const { Search } = Input; +const { Column } = Table; + +export default function ContactPeople() { + const [messageApi, contextHolder] = message.useMessage(); + const [formContact] = Form.useForm() + const height = window.innerHeight - 200; + const [isContantOpen, steIsContantOpen] = useState(false) + // 联系人弹窗标题 + const [contactTitle, setContactTitle] = useState('') + // 客服二维码 + const [imgUrl, setImgUrl] = useState('') + // 联系人搜索关键字 + const [peopleKeyWords, setPeopleKeyWords] = useState('') + // 联系人表格数据 + const [tableContactData, setTableContactData] = useState([]) + // 联系人id 关键字 + const [contactId, setContactId] = useState('') + // 申请人信息搜索 applicantPeopleSearch + const applicantPeopleSearch: SearchProps['onSearch'] = (value, _e, info) => ( + console.log(info?.source, value), + // alert(value), + setPeopleKeyWords(value), + getSearchProjContactList(value) + ); + // 获取联系人表格 + const getProjContactList = () => { + get({ + messageApi, + url: `/api/proj-contact/list/self`, + onSuccess({ data }: AxiosResponse) { + console.log('联系人表格', data); + // setTableBelongData(data) + setTableContactData(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 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'), + company: formContact.getFieldValue('company') + }, + 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'), + company: formContact.getFieldValue('company') + }, + onBefore() { + }, + onSuccess() { + // console.log(data); + // alert('编辑成功') + messageApi.open({ + type: 'success', + content: '编辑成功' + }) + // getProjContactList() + getSearchProjContactList(peopleKeyWords) + steIsContantOpen(false) + + }, + onFinally() { + } + }) + } + // 联系人人表单信息 点击确定 + const contactHandleOk = () => { + // alert('联系热确定') + formContact.validateFields().then(() => { + // 如果验证通过,则执行确认操作 + // 这里可以放置你的确认操作逻辑 + if (contactTitle === '编辑联系人') { + upContact() + } + if (contactTitle === '创建联系人') { + newContact() + } + // 关闭 弹窗 + // setIsNewBelongOpen(false) + // 初始化数据 + formContact.resetFields(); // 重置表单字段为初始值 + + }).catch(() => { + // 如果验证不通过,可以根据需要处理错误信息 + // (errorInfo); + }); + }; + useEffect(() => { + + getProjContactList() + + }, []) + return ( +
+ {contextHolder} +
+
+ 联系人用于接受平台相关业务办理进度的通知信息与各类协议的线下签章等工作。 +
+
+ +
+ +
+
+ +
+ {/* 表格 lyp*/} + + + + + (text !== '' ? text : '一')} + /> + + {/* */} + ( + + { + // alert(record.projOwnerId); + + console.log('text:', text); + console.log('record:', record); + + setContactId(record.projContactId) + setContactTitle('编辑联系人') + steIsContantOpen(true) + // formContact 表单赋值 + formContact.setFieldsValue({ + csaNo: record.csaNo, + name: record.name, + phone: record.phone, + email: record.email, + company: record.company + }) + }}>编辑 + | + { + // alert(record.projOwnerId); + del({ + messageApi, + url: `/api/proj-contact/remove/${record.projContactId}`, + onSuccess() { + messageApi.success('删除成功'); + getProjContactList() + } + }) + }}>删除 + | + { + setContactTitle('查看联系人') + steIsContantOpen(true) + formContact.setFieldsValue({ + csaNo: record.csaNo, + name: record.name, + phone: record.phone, + email: record.email + + }) + }}>查看 + + + )} + /> +
+ +
+
+ {/* 选择创建/编辑/查看联系人弹框 lyp*/} + { + // }} + onOk={ + contactHandleOk + } + width={745} + // 确认按钮样式 + okButtonProps={{ size: 'large', style: { display: contactTitle == '查看联系人' ? 'none' : 'block' } }} + // 返回按钮样式 + cancelButtonProps={{ size: 'large', style: {} }} + + onCancel={() => { + steIsContantOpen(false) + getSearchProjContactList(peopleKeyWords) + }} + > +
+
+ {contactTitle} +
+
+
+
{ + // setIsNewBelongOpen(true); + }} + autoComplete="off" + > +
+
姓名:
+ + + + name="name" + rules={[{ required: true, message: '请输入姓名' }]} + > + + +
+
+
电话:
+ + + name="phone" + rules={[{ required: true, message: '请输入电话号码' }]} + > + + +
+
+
所属公司:
+ + + name="company" + rules={[{ required: false, message: '请输入所属公司' }]} + > + + + +
+
+
邮箱:
+ + + name="email" + rules={[{ required: false, message: '请输入邮箱' }, + { type: 'email', message: '请输入有效的邮箱地址' } + ]} + > + + +
+
+ + name="csaNo" + > + + +
+ + + +
+
+
+
+ 请使用微信扫一扫 +
+
+ 添加您的专属客服 +
+ +
+
+
+ +
+
+ ) +} diff --git a/src/components/OrderDetailModal/OrderDetailModal.tsx b/src/components/OrderDetailModal/OrderDetailModal.tsx new file mode 100644 index 0000000..03d6f00 --- /dev/null +++ b/src/components/OrderDetailModal/OrderDetailModal.tsx @@ -0,0 +1,166 @@ +import React, { useState, useEffect } from 'react' +import './order-detail-modal.css' +import { Input, Rate } from "antd"; +export default function OrderDetailModal() { + const height = window.innerHeight - 180; + const [activeKey, setActiveKey] = useState('roder') //tap栏选项 默认选第一个 + const [orderPrice, setOrderPrice] = useState('') //订单金额 + const [orderStatus, setOrderStatus] = useState('') //订单状态 + const [orderTime, setOrderTime] = useState('') //下单时间 + const [payTime, setPayTime] = useState('') //付款时间 + const [cardTime, setCardTime] = useState('') //下证时间 + const [evaluateTime, setEvaluateTime] = useState('') //评价时间 + const [orderRate, setOrderRate] = useState(0) //订单评价星星数量 + const [rateText,setOrderText] = useState('') + // tab栏 标题数组 + const tapTitleArray = [ + { + key: 'roder', + title: '订单信息', + className: activeKey == 'roder' ? 'orderDetailTop-tetle tapActive' : 'orderDetailTop-tetle' + }, + { + key: 'goodsInfo', + title: '著作权商品信息', + className: activeKey == 'goodsInfo' ? 'orderDetailTop-tetle tapActive' : 'orderDetailTop-tetle' + }, + { + key: 'copyright', + title: ' 著作权人信息', + className: activeKey == 'copyright' ? 'orderDetailTop-tetle tapActive' : 'orderDetailTop-tetle' + }, + { + key: 'authorize', + title: '受权人信息', + className: activeKey == 'authorize' ? 'orderDetailTop-tetle tapActive' : 'orderDetailTop-tetle' + }, + { + key: 'file', + title: '资料补充', + className: activeKey == 'file' ? 'orderDetailTop-tetle tapActive' : 'orderDetailTop-tetle' + }, + { + key: 'result', + title: '过户结果', + className: activeKey == 'result' ? 'orderDetailTop-tetle tapActive borderRight' : 'orderDetailTop-tetle borderRight' + }, + ] + useEffect(() => { + // 发起请求获取订单信息 + setOrderPrice('556') + setOrderStatus('已过户完成') + setOrderTime('2024-04-25 15:34:10') + setPayTime('2024-04-25 15:50:10') + setCardTime('2024-05-25 15:50:10') + setEvaluateTime('2024-05-25 15:50:10') + setOrderRate(3) + setOrderText('嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻') + }, []) + return ( +
+
+ {tapTitleArray.map((item) => { + return ( +
{ + setActiveKey(item.key) + }}> + {item.title} +
+ ) + })} +
+
+
+
+
+
订单金额
+ +
+
+
订单状态
+ +
+
+
下单时间
+ +
+
+
付款时间
+ +
+
+
下证时间
+ +
+
+
评价时间
+ +
+
+
订单评价
+ + +
+ +
+
+
+
评价内容
+ +
+
+ +
+
+
+ ) +} diff --git a/src/components/OrderDetailModal/order-detail-modal.css b/src/components/OrderDetailModal/order-detail-modal.css new file mode 100644 index 0000000..106a281 --- /dev/null +++ b/src/components/OrderDetailModal/order-detail-modal.css @@ -0,0 +1,59 @@ +.orderDetailTop { + margin-top: 21px; + display: flex; + /* background-color: red; */ + height: 45px; + border-bottom: 1px solid #EFE8E2; +} + +.orderDetailTop-tetle { + /* background-color: pink; */ + line-height: 45px; + padding: 0 16px 0 16px; + font-size: 14px; + color: #888888; + border-left: 1px solid #EFE8E2; + border-top: 1px solid #EFE8E2; + cursor: pointer; +} + +.borderRight { + border-right: 1px solid #EFE8E2; +} + +.tapActive { + border-top: 2px solid #3168EC; + font-weight: bold; + color: #3168EC; +} + +.orderDetailBot {} + +.orderDetailBot-order { + display: flex; + justify-content: space-between; + width: 1100px; + /* background-color: red; */ + flex-wrap: wrap; + margin-top: 42px; + margin-left: 20px; +} + +.orderInfo { + display: flex; + margin-bottom: 29px; + position: relative; +} +.orderInfo-rate{ + position: absolute; + left: 110px; + top: 12px; +} + +.orderInfo-title { + font-size: 16px; + color: #222222; + line-height: 44px; + /* background-color: red; */ + width: 100px; +} \ No newline at end of file diff --git a/src/components/ai/AiHelper.tsx b/src/components/ai/AiHelper.tsx index 4db3ccf..678c2c4 100644 --- a/src/components/ai/AiHelper.tsx +++ b/src/components/ai/AiHelper.tsx @@ -2,15 +2,19 @@ import './ai-helper.css' import { useContext, useEffect, useRef, useState } from "react"; import { GlobalContext } from "../../context/GlobalContext.ts"; import { del, get, post, put, websocketUrl } from "../../util/AjaxUtils.ts"; -import { +import { // Col, Divider, Row, - Spin } from "antd"; + Spin +} from "antd"; import useMessage from "antd/es/message/useMessage"; import AiHelperText from "./text/AiHelperText.tsx"; import AiHelperMod from "./mod/AiHelperMod.tsx"; import { IProjMod } from "../../interfaces/proj/IProj.ts"; import { MAX_MOD_SIZE } from "../../route/proj/edit/ProjConfigModList.tsx"; -import { useNavigate } from "react-router-dom"; +import { + useNavigate, + // useParams +} from "react-router-dom"; import { uuid } from "../../util/CommonUtil.ts"; type PropsType = { @@ -18,7 +22,7 @@ type PropsType = { projIntroduction?: string; projDesc?: string; isFree: boolean; - + renderData: any } type ProjModType = { @@ -28,6 +32,9 @@ type ProjModType = { } export default function AiHelper(props: PropsType) { + + // const pathParams = useParams(); + // const [openModal ,setOpenModal] = useState(false) //是提示替换弹框 // const height = window.innerHeight - 280; const globalContext = useContext(GlobalContext); const pingTimeout = useRef(-1); @@ -37,6 +44,7 @@ export default function AiHelper(props: PropsType) { const [activeTab, setActiveTab] = useState('简介') //tab栏选中 const [projIntroduction, setProjIntroduction] = useState(props.projIntroduction ? props.projIntroduction : ''); + // 中间量 const [newProjIntroduction, setNewProjIntroduction] = useState(''); const [isProjIntroductionLoading, setIsProjIntroductionLoading] = useState(false); @@ -48,7 +56,20 @@ export default function AiHelper(props: PropsType) { const [newProjModArray, setNewProjModArray] = useState([]); const [isProjModArrayLoading, setIsProjModArrayLoading] = useState(false); const nav = useNavigate(); + // const [showText,setShowText] = useState('保存成功') //提示信息 + // // 获取项目信息 + // const renderData = () => { + // get({ + // messageApi: messageApi, + // url: `/api/proj/get/${pathParams.projId}`, + // onSuccess({ data }) { + // setProjIntroduction(data.projIntroduction) + // setProjDesc(data.projDesc) + // } + // }) + + // } const ping = () => { clearTimeout(pingTimeout.current); @@ -78,9 +99,19 @@ export default function AiHelper(props: PropsType) { if (data.type == 'REFRESH_PROJ_INTRODUCTION') { setIsProjIntroductionLoading(false); setNewProjIntroduction(data.content); + // if (!projIntroduction) { + // setProjIntroduction(data.content) + // updateProjIntroduction(data.content); + + // } } else if (data.type == 'REFRESH_PROJ_DESC') { setIsProjDescLoading(false); setNewProjDesc(data.content); + // if (!projDesc) { + // setProjDesc(data.content) + // updateProjDesc(data.content) + + // } } else if (data.type == 'REFRESH_PROJ_MODS') { setIsProjModArrayLoading(false); const projMods = JSON.parse(data.content) as ProjModType[]; @@ -116,6 +147,7 @@ export default function AiHelper(props: PropsType) { } const generateProjIntroduction = () => { + ws.current?.send(JSON.stringify({ type: 'REFRESH_PROJ_INTRODUCTION', projId: props.projId @@ -125,6 +157,7 @@ export default function AiHelper(props: PropsType) { } const generateProjDesc = () => { + ws.current?.send(JSON.stringify({ type: 'REFRESH_PROJ_DESC', projId: props.projId @@ -155,13 +188,16 @@ export default function AiHelper(props: PropsType) { onBefore() { setIsProjIntroductionLoading(true); }, - onSuccess() { - messageApi.success('保存成功'); + onSuccess(data) { + messageApi.success('保存成功,点击编辑按钮可继续修改项目简介'); setProjIntroduction(content); setNewProjIntroduction(''); + console.log('更新成功',data); + }, onFinally() { setIsProjIntroductionLoading(false) + // renderData() } }) } @@ -180,12 +216,13 @@ export default function AiHelper(props: PropsType) { setIsProjDescLoading(true); }, onSuccess() { - messageApi.success('保存成功').then(); + messageApi.success('保存成功,点击编辑按钮可继续修改项目详情').then(); setProjDesc(content); setNewProjDesc(''); }, onFinally() { setIsProjDescLoading(false) + // renderData() } }) } @@ -194,10 +231,14 @@ export default function AiHelper(props: PropsType) { if (!props.projId) { return; } + listMods(); websocket(); }, [globalContext.user.userId, props.projId]); - + useEffect(()=>{ + + + },[]) return (
{messageApiHolder} @@ -355,11 +396,13 @@ export default function AiHelper(props: PropsType) { maxLength={1500} handleGenerate={() => { generateProjIntroduction(); + // setProjIntroduction(newProjIntroduction) }} handleSave={(text) => { updateProjIntroduction(text); }} + >
@@ -376,6 +419,7 @@ export default function AiHelper(props: PropsType) { handleSave={(text) => { updateProjDesc(text); }} + /> diff --git a/src/components/ai/text/AiHelperText.tsx b/src/components/ai/text/AiHelperText.tsx index eb7a702..55ca4da 100644 --- a/src/components/ai/text/AiHelperText.tsx +++ b/src/components/ai/text/AiHelperText.tsx @@ -1,6 +1,7 @@ import { Button, // Divider, Empty, Space + Modal } from "antd"; import './ai-helper-text.css' import TextArea from "antd/es/input/TextArea"; @@ -19,13 +20,13 @@ type PropsType = { newText: string; handleGenerate: () => void; handleSave: (newText: string) => void; + } export default function AiHelperText(props: PropsType) { const height = window.innerHeight - 265; const pathParams = useParams(); const [status, setStatus] = useState('') - useEffect(() => { get({ messageApi, @@ -42,14 +43,25 @@ export default function AiHelperText(props: PropsType) { const [text, setText] = useState(''); const [newText, setNewText] = useState(''); + const [isShow, setIsShow] = useState(false) //替换按钮是否显示 + const [modal, setModal] = useState(false) //提示替换弹窗 const [isTextEdit, setIsTextEdit] = useState(false); // const [isNewTextEdit, setIsNewTextEdit] = useState(false); useEffect(() => { setText(props.text); setNewText(props.newText); + if (props.text) { + setIsShow(true) + } + if (props.text && props.newText) { + setModal(true) + } + if (!props.text && props.newText) { + // console.log('aaaaaaaa',props.newText); + props.handleSave(props.newText) + } }, [props.text, props.newText]) - // const renderTextBtn = () => { // if (!newText) { // if (!isTextEdit) { @@ -120,7 +132,7 @@ export default function AiHelperText(props: PropsType) { // ) // } const renderTextDom = () => { - if (!text) { + if (!props.text) { return (
{/* */} @@ -148,7 +160,7 @@ export default function AiHelperText(props: PropsType) { } return ( - ) @@ -192,7 +204,7 @@ export default function AiHelperText(props: PropsType) {
{renderTextDom()} -
+
+
-
+
{newText ? <> @@ -226,17 +254,34 @@ export default function AiHelperText(props: PropsType) { }}> 点击AI自动生成后可自动生{props.title}... }
+ {/* */} + >替换
+ { + setModal(false); + }} + onOk={() => { + setModal(false); + setText(newText) + + props.handleSave(newText); + + setNewText('') + }} + style={{ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: `${height}px`, + }} + > +
+ 是否替换当前{props.title} + +
+
) diff --git a/src/components/ai/text/ai-helper-text.css b/src/components/ai/text/ai-helper-text.css index f3cfa8d..35afa08 100644 --- a/src/components/ai/text/ai-helper-text.css +++ b/src/components/ai/text/ai-helper-text.css @@ -26,7 +26,7 @@ font-size: 16px; color: #1D1D1D; overflow-y: auto; - text-indent: 32px; + /* text-indent: 32px; */ text-align: justify; /* background-color: pink; */ } @@ -53,11 +53,11 @@ position: absolute; left: 134px; bottom: 66px; - + } .aiText-top-btn { - margin-top: 20px; + margin-top: 50px; } .aiText-bot { @@ -74,6 +74,6 @@ width: 100%; /* background-color: pink; */ overflow-y: auto; - text-indent: 32px; + /* text-indent: 32px; */ text-align: justify; } diff --git a/src/components/card/CardProj.tsx b/src/components/card/CardProj.tsx index 874e231..912e331 100644 --- a/src/components/card/CardProj.tsx +++ b/src/components/card/CardProj.tsx @@ -79,7 +79,7 @@ export default function CardProj(props:any ) { const goEdit = () => { if (charge == ProjChargeType.ALL) { - nav(`/proj-eall/${data.projId}`); + nav(`/proj-edit/${data.projId}`); } else if (charge == ProjChargeType.FREE) { nav(`/proj-efree/${data.projId}`); } else { diff --git a/src/layout/head/Head.tsx b/src/layout/head/Head.tsx index 91ac7d5..9ea6d8a 100644 --- a/src/layout/head/Head.tsx +++ b/src/layout/head/Head.tsx @@ -2,7 +2,7 @@ import './head.css' import BalanceHead from '../../components/balance/BalanceHead.tsx'; import RechargeHead from '../../components/recharge/RechargeHead.tsx'; import { Dropdown, MenuProps, message, Modal, Space, Spin } from "antd"; -import { DownOutlined, UserOutlined, KeyOutlined, LogoutOutlined, AccountBookOutlined,MenuFoldOutlined } from "@ant-design/icons"; +import { DownOutlined, UserOutlined, KeyOutlined, LogoutOutlined, AccountBookOutlined,MenuFoldOutlined ,UsergroupAddOutlined} from "@ant-design/icons"; import { useContext, useEffect, useState } from "react"; import { put } from "../../util/AjaxUtils.ts"; import { GlobalContext, GlobalDispatchContext, reloadUser } from "../../context/GlobalContext.ts"; @@ -15,7 +15,7 @@ import userImg from '../../static/homeimg/userimg.png' import { reMenuActive } from '../../util/cache'; // import BelongPeople from '../../components/BelongPeople/BelongPeople.tsx' import BelongPeople from '../../components/BelongPeople/BelongPeople.tsx' - +import ContactPeople from '../../components/ContactPeople/ContactPeople.tsx' export default function Head() { const globalContext = useContext(GlobalContext); const globalDispatchContext = useContext(GlobalDispatchContext); @@ -39,6 +39,8 @@ export default function Head() { const setValue = () => { // console.log(value); } + // 联系人弹窗 + const [contactModal,setContactModal] = useState(false) useEffect(() => { reloadUser(messageApi, globalDispatchContext).then((data) => { @@ -97,6 +99,18 @@ export default function Head() { setBelongModal(true) } }, + { + key: 'contact', + label: ( +
+ + 产权联系人 +
+ ), + onClick: () => { + setContactModal(true) + } + }, { key: 'logout', label: ( @@ -244,7 +258,21 @@ export default function Head() { }}> - + {setBelongModal(false)}} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={false} > + + { + setContactModal(false) + + }}> + + {contextHolder} diff --git a/src/layout/head/head.css b/src/layout/head/head.css index b3ee81a..862bff5 100644 --- a/src/layout/head/head.css +++ b/src/layout/head/head.css @@ -81,4 +81,7 @@ .ant-dropdown .dropdown-item .title { margin-left: 5px; -} */ \ No newline at end of file +} */ +.ant-dropdown .dropdown-item .title { + margin-left: 5px; +} \ No newline at end of file diff --git a/src/route/TradingGoods/TradingGoods.tsx b/src/route/TradingGoods/TradingGoods.tsx index 5e1cae4..cca31b1 100644 --- a/src/route/TradingGoods/TradingGoods.tsx +++ b/src/route/TradingGoods/TradingGoods.tsx @@ -2,7 +2,8 @@ import './trading-goods.css' import { Select, DatePicker, Button, Table, // message, - Space, Empty, Pagination + Space, Empty, Pagination, + Modal } from 'antd'; // import type { TableColumnsType } from 'antd'; import { SearchOutlined, ClearOutlined } from '@ant-design/icons'; @@ -10,6 +11,7 @@ import type { DatePickerProps } from 'antd'; import locale from 'antd/es/date-picker/locale/zh_CN'; import { useState } from 'react'; const { Column } = Table; +import OrderDetail from '../../components/OrderDetailModal/OrderDetailModal' export default function TradingGoods() { const height = window.innerHeight - 180; // const [messageApi, contextHolder] = message.useMessage(); @@ -17,7 +19,8 @@ export default function TradingGoods() { const [startTime, setStartTime] = useState() //开始时间 const [endTime, setEndTime] = useState() //结束时间 const [orderStatus, setOrderStatus] = useState() //订单状态 - const [page,setPage] = useState(1) //分页 + const [page, setPage] = useState(1) //分页 + const [orderDetailModal, setOrderDetailModal] = useState(false) //订单详情弹窗 // 更改开始时间 const startTimeChange: DatePickerProps['onChange'] = (date, dateString) => { console.log(date, dateString); @@ -36,7 +39,7 @@ export default function TradingGoods() { // 点击搜索 const onSearch = () => { setPage(1) - console.log(startTime,endTime,orderStatus); + console.log(startTime, endTime, orderStatus); } // 初始化搜索条件 const init = () => { @@ -127,7 +130,7 @@ export default function TradingGoods() { icon={} onClick={onSearch} - > + > 搜索
@@ -198,6 +201,12 @@ export default function TradingGoods() { console.log(record.order); }}>补充资料 + { + console.log(record.order); + setOrderDetailModal(true) + }}> + 订单详情 + )} /> @@ -213,6 +222,28 @@ export default function TradingGoods() {
)} + { + // setOrderDetailModal(false) + // }} + onCancel={() => { + setOrderDetailModal(false) + }} + + style={{ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: `${height}px`, + }}> + + ) } diff --git a/src/route/TransactionOrder/TransactionOrder.tsx b/src/route/TransactionOrder/TransactionOrder.tsx index 9ef2393..3cb86a9 100644 --- a/src/route/TransactionOrder/TransactionOrder.tsx +++ b/src/route/TransactionOrder/TransactionOrder.tsx @@ -3,7 +3,7 @@ import './transaction-order.css' import { Select, DatePicker, Button, Table, // message, - Space, Empty, Pagination + Space, Empty, Pagination,Modal } from 'antd'; import dayjs, { } from 'dayjs'; // import type { TableColumnsType } from 'antd'; @@ -12,6 +12,7 @@ import type { DatePickerProps } from 'antd'; import locale from 'antd/es/date-picker/locale/zh_CN'; import { useEffect, useState } from 'react'; const { Column } = Table; +import OrderDetail from '../../components/OrderDetailModal/OrderDetailModal' export default function TransactionOrder() { const height = window.innerHeight - 180; // const [messageApi, contextHolder] = message.useMessage(); @@ -20,7 +21,7 @@ export default function TransactionOrder() { const [endTime, setEndTime] = useState(undefined) // 结束时间 const [orderStatus, setOrderStatus] = useState(undefined) // 订单状态 const [page, setPage] = useState(1) //分页 - + const [orderDetailModal, setOrderDetailModal] = useState(false) //订单详情弹窗 // 更改开始时间 const stratTimeChange: DatePickerProps['onChange'] = (date, dateString) => { console.log(date, dateString); @@ -262,6 +263,12 @@ export default function TransactionOrder() { console.log(record.order); }}>补充资料 + { + console.log(record.order); + setOrderDetailModal(true) + }}> + 订单详情 + )} /> @@ -280,6 +287,28 @@ export default function TransactionOrder() { + { + // setOrderDetailModal(false) + // }} + onCancel={() => { + setOrderDetailModal(false) + }} + + style={{ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: `${height}px`, + }}> + + ) } diff --git a/src/route/proj/ProjCreate.tsx b/src/route/proj/ProjCreate.tsx index b1595ab..a592e3e 100644 --- a/src/route/proj/ProjCreate.tsx +++ b/src/route/proj/ProjCreate.tsx @@ -31,6 +31,7 @@ export default function ProjCreate() { const [allInfo, setAllInfo] = useState({}) //全部托管信息 const [materialInfo, setMaterialInfo] = useState({}) //写材料信息 const [freeInfo, setFreeInfo] = useState({}) //免费托管信息 + const [ freeCount,setFreeCount] = useState(0) //免费次数 const nav = useNavigate(); const height = window.innerHeight - 170; useEffect(() => { @@ -45,7 +46,7 @@ export default function ProjCreate() { setMaterialInfo(data.projTypes[1]) setFreeInfo(data.projTypes[2]) // console.log('后面的price',data.proj.materialAgent); - + setFreeCount(data.freeCount) } }) // sessionStorage.setItem('pathArray', JSON.stringify([ { title: 首页 },{ title: '创建项目' }])); @@ -204,7 +205,7 @@ export default function ProjCreate() { isClickable = {materialInfo.isClickable} /> { + renderData() + }} /> @@ -608,7 +611,9 @@ export default function ProjEdit() { }} footer={null} > - { setTitleIntroductionOpen(false) }}> + { setTitleIntroductionOpen(false) + renderData() + }}> {/* 第1步查看 */} - { setSoftwareOpen(false) }}> + { setSoftwareOpen(false) + renderData() + }}> {/* 第二步查看 */} - { setSoftwareFeaturesOpen(false) }}> + { setSoftwareFeaturesOpen(false) + renderData() + }}> {/* 第三步 查看 */} - { setLoginPageOpne(false) }}> + { setLoginPageOpne(false) + renderData() + }}> {/* 第四步 查看 */} { + renderData() setSoftwareManagementOpen(false); + }} footer={null} > @@ -746,7 +759,9 @@ export default function ProjEdit() { destroyOnClose={true} onCancel={() => { + renderData() setDisplayOrderOpen(false); + }} footer={null} > diff --git a/src/route/proj/ProjEditAll.tsx b/src/route/proj/ProjEditAll.tsx index e092bad..ffee14e 100644 --- a/src/route/proj/ProjEditAll.tsx +++ b/src/route/proj/ProjEditAll.tsx @@ -232,7 +232,9 @@ export default function ProjEditAll() { }} footer={null} > - { setTitleIntroductionOpen(false) }}> + { setTitleIntroductionOpen(false) + renderData() + }}> {/* 第1步查看 */} - { setSoftwareOpen(false) }}> + { setSoftwareOpen(false) + renderData() + }}> {/* 第二步查看 */} ({ + projId: '', + projIntroduction: '', + projDesc: '', + projMods: [], + }); //第一步 标题简介弹窗 const [titleIntroductionOpen, setTitleIntroductionOpen] = useState(false) const [titleIntroductionShowOpen, setTitleIntroductionShowOpen] = useState(false) - //第二步 软件基本信息弹窗 - const [softwareInfoOpen, setSoftwareOpen] = useState(false) - const [softwareInfoShowOpen, setSoftwareShowOpen] = useState(false) - // 第三步 软件功能特点弹窗 - const [softwareFeaturesOpen, setSoftwareFeaturesOpen] = useState(false) - const [softwareFeaturesShowOpen, setSoftwareFeaturesShowOpen] = useState(false) - // 第四步 登陆页面设置 - const [loginPageOpne, setLoginPageOpne] = useState(false) - const [loginPageShowOpne, setLoginPageShowOpne] = useState(false) - // 第五步 软件功能管理 - const [softwareManagementOpen, setSoftwareManagementOpen] = useState(false) - const [softwareManagementShowOpen, setSoftwareManagementShowOpen] = useState(false) - // 第六步 显示顺序 - const [displayOrderOpen, setDisplayOrderOpen] = useState(false) - const [displayOrderShowOpen, setDisplayOrderShowOpen] = useState(false) - + //第二步 软件基本信息弹窗 + const [softwareInfoOpen, setSoftwareOpen] = useState(false) + const [softwareInfoShowOpen, setSoftwareShowOpen] = useState(false) + // 第三步 软件功能特点弹窗 + const [softwareFeaturesOpen, setSoftwareFeaturesOpen] = useState(false) + const [softwareFeaturesShowOpen, setSoftwareFeaturesShowOpen] = useState(false) + // 第四步 登陆页面设置 + const [loginPageOpne, setLoginPageOpne] = useState(false) + const [loginPageShowOpne, setLoginPageShowOpne] = useState(false) + // 第五步 软件功能管理 + const [softwareManagementOpen, setSoftwareManagementOpen] = useState(false) + const [softwareManagementShowOpen, setSoftwareManagementShowOpen] = useState(false) + // 第六步 显示顺序 + const [displayOrderOpen, setDisplayOrderOpen] = useState(false) + const [displayOrderShowOpen, setDisplayOrderShowOpen] = useState(false) + const nav = useNavigate(); const pathParams = useParams(); @@ -54,9 +79,9 @@ export default function ProjEdit() { const [canGenerate, setCanGenerate] = useState(false); const [generateStatus, setGenerateStatus] = useState(GenerateStatus.NONE); const [previewUrl, setPreviewUrl] = useState(''); - + const [generateEmainingTime, setGenerateEmainingTime] = useState(0); // const height = window.innerHeight - 240; - + const [generateErrorModal, setGenerateErrorModal] = useState(false); const renderEditStep = (data: any, isEdited: boolean, isGenerateSuccess: boolean) => { const editStepArray: IProjEdit[] = []; editStepArray.push( @@ -65,7 +90,7 @@ export default function ProjEdit() { desc: '修改软件系统的相关简介与详细介绍', step: 1, btnName: !isGenerateSuccess ? '设置' : '查看', - status: data.projIntroduction?EditStepEnum.EDITED:EditStepEnum.UN_EDIT, + status: data.projIntroduction ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { if (!isGenerateSuccess) { // nav(`/proj-edit/step1/${pathParams.projId}`) @@ -81,8 +106,8 @@ export default function ProjEdit() { desc: '完善软件简称、版本号、软件所属者及联系人等信息', step: 2, btnName: !isGenerateSuccess ? '设置' : '查看', - status: data.apply.projDevCompleteDate?EditStepEnum.EDITED:EditStepEnum.UN_EDIT, - canBtnClick: false, + status: data.apply.projDevCompleteDate ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, + // canBtnClick: false, handleEdit() { if (generateStatus != GenerateStatus.SUCCESS) { // nav(`/proj-edit/step2/${pathParams.projId}`) @@ -100,8 +125,8 @@ export default function ProjEdit() { desc: '设置软件相关功能特点', step: 3, btnName: !isGenerateSuccess ? '设置' : '查看', - status: data.apply.envHardDev?EditStepEnum.EDITED:EditStepEnum.UN_EDIT, - canBtnClick: false, + status: data.apply.envHardDev ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, + // canBtnClick: false, handleEdit() { if (!isGenerateSuccess) { // nav(`/proj-edit/step3/${pathParams.projId}`) @@ -119,10 +144,10 @@ export default function ProjEdit() { desc: '对登录界面进行个性化设置,包括背景图片等', step: 1, btnName: !isGenerateSuccess ? '设置' : '查看', - canBtnClick: false, + // canBtnClick: false, // 状态判断lyp - status:data.loginpage.loginpageId?EditStepEnum.EDITED:EditStepEnum.UN_EDIT, + status: data.loginpage.loginpageId ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { if (!isGenerateSuccess) { // nav(`/proj-edit/config-loginpage/${pathParams.projId}`) @@ -131,7 +156,7 @@ export default function ProjEdit() { } else { // nav(`/proj-edit/config-loginpage-show/${pathParams.projId}`) setLoginPageShowOpne(true) - + } } }, @@ -206,7 +231,7 @@ export default function ProjEdit() { desc: '可对软件功能列表进行添加与修改', step: 2, btnName: !isGenerateSuccess ? '设置' : '查看', - status: data.projModCount > MAX_MOD_SIZE_FREE ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, + status: data.projModCount >= 3 ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { if (!isGenerateSuccess) { // nav(`/proj-edit/config-mod-flist/${pathParams.projId}`) @@ -224,7 +249,7 @@ export default function ProjEdit() { desc: '调整菜单顺序', step: 3, btnName: !isGenerateSuccess ? '设置' : '查看', - status: data.projModCount > MAX_MOD_SIZE_FREE ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, + status: data.projModCount >= 3 ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT, handleEdit() { if (!isGenerateSuccess) { // nav(`/proj-edit/config-menu-list/${pathParams.projId}`) @@ -249,11 +274,13 @@ export default function ProjEdit() { onSuccess({ data }) { // const isEdited = data.editSteps[0].editStatus == EditStepEnum.EDITED // && data.editSteps[5].editStatus == EditStepEnum.EDITED; - // console.log(data); - + console.log('嘻嘻', data.projModCount); + // if(data.projModCount >= 3){ + // setCanGenerate(true) + // } const isEdited = Boolean(data.projIntroduction) && Boolean(data.loginpage.loginpageId) == true // console.log('isEdited',isEdited); - const isConfig = data.loginpage.loginpageId && data.projModCount > MAX_MOD_SIZE_FREE; + const isConfig = data.loginpage.loginpageId && data.projModCount >= 3; const isGenerate = isEdited && isConfig; const isGenerateSuccess: boolean = data.generate.generateStatus == GenerateStatus.SUCCESS; renderEditStep(data, isEdited, isGenerateSuccess); @@ -261,6 +288,14 @@ export default function ProjEdit() { setCanGenerate(isGenerate); setGenerateStatus(data.generate.generateStatus); setPreviewUrl(data.previewUrl); + setGenerateEmainingTime(data.generate.generateEmainingTime) + setGenerateErrorMsg(data.generate.generateMsg); + setAiHelper({ + projId: data.projId, + projIntroduction: data.projIntroduction, + projDesc: data.projDesc, + projMods: data.projMods + }) } }) } @@ -279,7 +314,7 @@ export default function ProjEdit() { { title: '编辑项目' }, ]} /> */} -
+
{ }} + canBtnClick={canGenerate} + // canBtnClick={false} + handleEdit={() => { + setIsGenerateModalOpen(true); + }} background='#f3f3f3' /> ) : <> } + { + generateStatus == GenerateStatus.PENDING ? ( + { + setTimeout(() => { + window.location.reload(); + }, 1000) + }} + /> + ) : <> + } + { + generateStatus == GenerateStatus.GENERATING ? ( + { + renderData(); + }} + handleCountDownOver={() => { + renderData(); + }} + + /> + ) : <> + } + { + generateStatus == GenerateStatus.SUCCESS ? ( + + ) : <> + } + { + generateStatus == GenerateStatus.FAILED ? ( + { + setGenerateErrorModal(true); + console.log('反馈') + }} + /> + ) : <> + } @@ -356,45 +440,124 @@ export default function ProjEdit() { descTitle="资料下载"> { }} + canBtnClick={generateStatus == GenerateStatus.SUCCESS} + handleDownload={() => { + window.open(`${Axios.defaults?.baseURL}/route/proj/download/apply/${pathParams.projId}`) + }} /> { }} + // canBtnClick={false} + canBtnClick={generateStatus == GenerateStatus.SUCCESS} + handleDownload={() => { + window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${pathParams.projId}`) + }} /> { }} + canBtnClick={generateStatus == GenerateStatus.SUCCESS} + handleDownload={() => { + window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${pathParams.projId}`) + }} /> - { }} - /> - */} + {/* { }} - /> + /> */}
- {/* 第1步设置 */} - { setAiHelperModalOpen(true) }}> + +
+ + { + setTimeout(() => { + window.location.reload(); + }, 1000) + post({ + messageApi, + url: `/api/proj/generate/proj-id/${pathParams.projId}`, + body: {}, + onSuccess() { + messageApi.success('提交成功'); + setIsGenerateModalOpen(false); + renderData(); + } + }) + }} + onCancel={() => { + setIsGenerateModalOpen(false); + }}> +
点击“确定按钮”后,项目便无法再次修改,建议通过预览查看系统,确认无误后点击“确定按钮”。
+
+ { + setGenerateErrorModal(false) + }} + > +

{generateErrorMsg}

+
+ { + setAiHelperModalOpen(false); + + renderData() + // setAiHelperModalOpen(false); + // console.log(123); + + }} + + > +
+ { + renderData() + }} + /> +
+
+ {/* 第1步设置 */} + - { setTitleIntroductionOpen(false) }}> + { + setTitleIntroductionOpen(false) + renderData() + }}> {/* 第1步查看 */} - {/* 第二步设置 */} - - { setSoftwareOpen(false) }}> + { + setSoftwareOpen(false) + renderData() + }}> {/* 第二步查看 */} - { setSoftwareFeaturesOpen(false) }}> + { + setSoftwareFeaturesOpen(false) + renderData() + }}> {/* 第三步 查看 */} - { setLoginPageOpne(false) }}> + { + setLoginPageOpne(false) + renderData() + }}> {/* 第四步 查看 */} { + renderData() setSoftwareManagementOpen(false); }} footer={null} > - + {/* 第五步 查看 */} { setDisplayOrderOpen(false); + renderData() }} footer={null} > diff --git a/src/route/proj/ProjNew.tsx b/src/route/proj/ProjNew.tsx index 6245098..3a5d996 100644 --- a/src/route/proj/ProjNew.tsx +++ b/src/route/proj/ProjNew.tsx @@ -3,6 +3,7 @@ import { useNavigate, useParams, useSearchParams } from "react-router-dom"; import { Button, Flex, Form, Input, message, Modal, Spin, Checkbox } from "antd"; import { useContext, useEffect, useState } from "react"; import { get, post } from "../../util/AjaxUtils.ts"; +// import {GlobalContext} from "../../context/GlobalContext.ts"; import { // IProjCharge, ProjAdditionalType, ProjChargeType @@ -17,6 +18,7 @@ type ProjInfo = { }; export default function ProjNew() { + // const globalContext = useContext(GlobalContext); const globalDispatchContext = useContext(GlobalDispatchContext); const nav = useNavigate(); const pathParams = useParams(); @@ -234,39 +236,42 @@ export default function ProjNew() { open={isCreateModalOpen} onOk={() => { // console.log('最终',listProjChargeAdditional); - console.log(belongPeopleInfo.authorId); + // console.log(belongPeopleInfo.authorId); + + post({ + messageApi, + url: '/api/proj/create', + body: { + projName: projInfo.projName, + projChargeType: pathParams.projChargeType, + listProjChargeAdditional: listProjChargeAdditional, + + authorCrcAccount:belongPeopleInfo.authorCrcAccount, + authorId:belongPeopleInfo.authorId, + authorIdCard:belongPeopleInfo.authorIdCard, + authorIdCardType:belongPeopleInfo.authorIdCardType, + authorName:belongPeopleInfo.authorName, + authorProvinceCity:belongPeopleInfo.authorProvinceCity, + authorType:belongPeopleInfo.authorType + }, + onBefore() { + setLoading(true); + }, + onSuccess({ data }) { + setIsEditModalOpen(true); + setCreateProjId(data.data); + reloadUser(messageApi, globalDispatchContext).then(() => { + messageApi.success('扣款成功'); + }); + }, + onFinally() { + setLoading(false); + } + }) + setIsCreateModalOpen(false); - post({ - messageApi, - url: '/api/proj/create', - body: { - projName: projInfo.projName, - projChargeType: pathParams.projChargeType, - listProjChargeAdditional: listProjChargeAdditional, - - authorCrcAccount:belongPeopleInfo.authorCrcAccount, - authorId:belongPeopleInfo.authorId, - authorIdCard:belongPeopleInfo.authorIdCard, - authorIdCardType:belongPeopleInfo.authorIdCardType, - authorName:belongPeopleInfo.authorName, - authorProvinceCity:belongPeopleInfo.authorProvinceCity, - authorType:belongPeopleInfo.authorType - }, - onBefore() { - setLoading(true); - }, - onSuccess({ data }) { - setIsEditModalOpen(true); - setCreateProjId(data.data); - reloadUser(messageApi, globalDispatchContext).then(() => { - messageApi.success('扣款成功'); - }); - }, - onFinally() { - setLoading(false); - } - }) + }} onCancel={() => { setIsCreateModalOpen(false); @@ -303,7 +308,7 @@ export default function ProjNew() { }}> - + {setBelongModal(false)}} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={true}> diff --git a/src/route/proj/edit/ProjConfigLoginpage.tsx b/src/route/proj/edit/ProjConfigLoginpage.tsx index 14993c2..240bf75 100644 --- a/src/route/proj/edit/ProjConfigLoginpage.tsx +++ b/src/route/proj/edit/ProjConfigLoginpage.tsx @@ -78,8 +78,6 @@ export default function ProjConfigLoginpage(props: any) { }, onSuccess({ data }) { setIframeSrcDoc(data.data); - console.log(data); - } }) } @@ -155,7 +153,10 @@ export default function ProjConfigLoginpage(props: any) { messageApi, url: `/api/proj/get/config-loginpage/${projId}`, onSuccess({ data }) { - console.log('寻找被选中id', data); + console.log('数据', data); + // if(data.adminPassword adminUsername) + form.setFieldValue('adminUsername', data.adminUsername?data.adminUsername:'admin'); + form.setFieldValue('adminPassword', data.adminPassword?data.adminPassword:'admin'); if (data.loginpageId) { form.setFieldValue('loginpageId', data.loginpageId); setSelectedLoginpageId(data.loginpageId); @@ -168,8 +169,8 @@ export default function ProjConfigLoginpage(props: any) { form.setFieldValue('subTitle', data.subTitle); form.setFieldValue('copyrightOwner', data.copyrightOwner); form.setFieldValue('copyrightDate', data.copyrightDate); - form.setFieldValue('adminUsername', data.adminUsername); - form.setFieldValue('adminPassword', data.adminPassword); + // form.setFieldValue('adminUsername', data.adminUsername?data.adminUsername:'admin'); + // form.setFieldValue('adminPassword', data.adminPassword?data.adminPassword:'admin'); preview() } else { getDefaultID() diff --git a/src/route/proj/edit/ProjConfigModList.tsx b/src/route/proj/edit/ProjConfigModList.tsx index 1e88392..ca10f7b 100644 --- a/src/route/proj/edit/ProjConfigModList.tsx +++ b/src/route/proj/edit/ProjConfigModList.tsx @@ -15,8 +15,8 @@ import ConfigModEdit from '../../proj/edit/ProjConfigModEdit.tsx' export const MAX_MOD_SIZE = 15; export const MIN_MOD_SIZE = 10 -export const MAX_MOD_SIZE_FREE = 3 -export const MIN_MOD_SIZE_FREE = 1 +export const MAX_MOD_SIZE_FREE = 5 +export const MIN_MOD_SIZE_FREE = 3 interface DataType { projModId: string; @@ -210,7 +210,7 @@ export default function ProjConfigModList(props: PropType) { { setConfigModSaveOpen(false); }} diff --git a/src/route/proj/edit/ProjEditStep2.tsx b/src/route/proj/edit/ProjEditStep2.tsx index 833123c..4dd3ff9 100644 --- a/src/route/proj/edit/ProjEditStep2.tsx +++ b/src/route/proj/edit/ProjEditStep2.tsx @@ -849,7 +849,7 @@ export default function ProjEditStep2(props: any) {
-
申请人信息
+
联系人信息