lyp
This commit is contained in:
parent
e8e22ffba9
commit
2971536ed1
@ -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<FieldType>();
|
||||
const [formBelong] = Form.useForm<BelongPeopleType>();
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
const [loading] = useState<boolean>(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<BelongDataType[]>([]);
|
||||
|
||||
@ -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 (
|
||||
<>
|
||||
<div style={{ height: `${height - 140}px`, overflow: 'auto', background: 'var(--color-light)', position: 'relative' }}>
|
||||
<div style={{ height: props.isShow ? `${height - 100}px` : `${height - 200}px`, overflow: 'auto', background: 'var(--color-light)', position: 'relative' }}>
|
||||
|
||||
|
||||
{contextHolder}
|
||||
@ -468,6 +481,15 @@ export default function BelongPeople(props: propsInfo) {
|
||||
</div> */}
|
||||
</div>
|
||||
<div className='showInfo' style={{ display: props.isShow ? 'block' : 'none' }} >
|
||||
{authorName ? (<>
|
||||
<div style={{ display: 'flex' }}>
|
||||
<div style={{ marginRight: ' 10px' }}>当前所属者:</div>
|
||||
<div style={{ display: authorName ? 'none' : 'block' }}>请选择所属者</div>
|
||||
<div style={{ display: authorName ? 'block' : 'none' }}>
|
||||
{authorName}/{authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{authorIdCard}
|
||||
</div>
|
||||
</div>
|
||||
</>) : (<>
|
||||
<div style={{ display: 'flex' }}>
|
||||
<div style={{ marginRight: ' 10px' }}>当前所属者:</div>
|
||||
<div style={{ display: props.belongPeopleInfo.authorName ? 'none' : 'block' }}>请选择所属者</div>
|
||||
@ -475,7 +497,10 @@ export default function BelongPeople(props: propsInfo) {
|
||||
{props.belongPeopleInfo.authorName}/{props.belongPeopleInfo.authorType == 'PERSONAL' ? '自然人' : '企业-组织'}/{props.belongPeopleInfo.authorIdCardType == 'ID_CARD' ? '身份证' : '营业执照'}/{props.belongPeopleInfo.authorIdCard}
|
||||
</div>
|
||||
</div>
|
||||
</>)}
|
||||
|
||||
</div>
|
||||
<Spin tip="加载中..." spinning={isLoading}>
|
||||
<div className='belongPeople-bot'>
|
||||
{/* 表格 */}
|
||||
{props.isShow ? (<Table
|
||||
@ -722,12 +747,38 @@ export default function BelongPeople(props: propsInfo) {
|
||||
|
||||
|
||||
</div>
|
||||
</Spin>
|
||||
</div>
|
||||
|
||||
|
||||
</Form>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ display: props.isShow ? 'block' : 'none', marginTop: 10 }}>
|
||||
<div className="belongPeopleModal-btn" style={{ display: 'flex', justifyContent: 'flex-end' }} >
|
||||
<Button onClick={() => {
|
||||
props.closeModal()
|
||||
}}>取消</Button>
|
||||
<Button style={{
|
||||
marginLeft: 20
|
||||
}} type="primary"
|
||||
onClick={() => {
|
||||
props.setBelongPeopleInfo({
|
||||
authorName,
|
||||
authorType,
|
||||
authorIdCardType,
|
||||
authorIdCard,
|
||||
|
||||
authorCrcAccount,
|
||||
authorId,
|
||||
authorProvinceCity
|
||||
})
|
||||
props.setValue(authorName)
|
||||
props.closeModal()
|
||||
}}
|
||||
>确定</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
408
src/components/ContactPeople/ContactPeople.tsx
Normal file
408
src/components/ContactPeople/ContactPeople.tsx
Normal file
@ -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<ContactType>()
|
||||
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<ContactDataType[]>([])
|
||||
// 联系人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 (
|
||||
<div style={{ height: `${height - 175}px`, overflow: 'auto' }}>
|
||||
{contextHolder}
|
||||
<div style={{ padding: '22px 15px 0 15px',background: 'var(--color-light)' }}>
|
||||
<div style={{ padding: '14px 19px', background: '#F3F3F3', color: '#A3A3A3', fontSize: '14px' }}>
|
||||
联系人用于接受平台相关业务办理进度的通知信息与各类协议的线下签章等工作。
|
||||
</div>
|
||||
<div className='belongPeople-center'>
|
||||
<Button onClick={() => {
|
||||
formContact.resetFields()
|
||||
getCas()
|
||||
steIsContantOpen(true)
|
||||
setContactTitle('创建联系人')
|
||||
|
||||
}} type="primary" icon={<FolderAddOutlined style={{ fontSize: '18px' }} />} style={{ width: "160px", height: '43px', fontSize: '14px' }}>
|
||||
创建联系人
|
||||
</Button>
|
||||
<div className='belongPeople-search'>
|
||||
<Search placeholder="请输入持有者名称搜索对应信息" onSearch={applicantPeopleSearch} style={{ width: '353px', height: '43px' }} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='belongPeople-bot'>
|
||||
{/* 表格 lyp*/}
|
||||
<Table
|
||||
|
||||
dataSource={tableContactData}
|
||||
pagination={{
|
||||
defaultPageSize: 5, // 设置默认一页显示 5 条数据
|
||||
}}
|
||||
style={{ textAlign: 'center' }} // 设置表格内容居中显示
|
||||
rowKey="projContactId" // 指定数据项的唯一标识符
|
||||
>
|
||||
<Column title="联系人" dataIndex="name" />
|
||||
<Column title="联系人手机号" dataIndex="phone" />
|
||||
<Column title="平台专属客服" dataIndex="csaNo" />
|
||||
<Column title="所属公司" dataIndex="company"
|
||||
render={(text) => (text !== '' ? text : '一')}
|
||||
/>
|
||||
|
||||
{/* <Column title="实名认证状态" dataIndex="address" key="key" /> */}
|
||||
<Column
|
||||
title="操作"
|
||||
render={(text, record: any) => (
|
||||
<Space size="middle">
|
||||
<a onClick={() => {
|
||||
// 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
|
||||
})
|
||||
}}>编辑 </a>
|
||||
<span style={{ color: '#3472EE' }}>|</span>
|
||||
<a onClick={() => {
|
||||
// alert(record.projOwnerId);
|
||||
del({
|
||||
messageApi,
|
||||
url: `/api/proj-contact/remove/${record.projContactId}`,
|
||||
onSuccess() {
|
||||
messageApi.success('删除成功');
|
||||
getProjContactList()
|
||||
}
|
||||
})
|
||||
}}>删除</a>
|
||||
<span style={{ color: '#3472EE' }}>|</span>
|
||||
<a onClick={() => {
|
||||
setContactTitle('查看联系人')
|
||||
steIsContantOpen(true)
|
||||
formContact.setFieldsValue({
|
||||
csaNo: record.csaNo,
|
||||
name: record.name,
|
||||
phone: record.phone,
|
||||
email: record.email
|
||||
|
||||
})
|
||||
}}>查看</a>
|
||||
|
||||
</Space>
|
||||
)}
|
||||
/>
|
||||
</Table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{/* 选择创建/编辑/查看联系人弹框 lyp*/}
|
||||
<Modal
|
||||
destroyOnClose
|
||||
okText="确认"
|
||||
// cancelText="取消"
|
||||
cancelText={contactTitle === '查看联系人' ? '返回' : '取消'}
|
||||
open={isContantOpen}
|
||||
// 点击确认上传事件
|
||||
// onOk={() => {
|
||||
// }}
|
||||
onOk={
|
||||
contactHandleOk
|
||||
}
|
||||
width={745}
|
||||
// 确认按钮样式
|
||||
okButtonProps={{ size: 'large', style: { display: contactTitle == '查看联系人' ? 'none' : 'block' } }}
|
||||
// 返回按钮样式
|
||||
cancelButtonProps={{ size: 'large', style: {} }}
|
||||
|
||||
onCancel={() => {
|
||||
steIsContantOpen(false)
|
||||
getSearchProjContactList(peopleKeyWords)
|
||||
}}
|
||||
>
|
||||
<div className='belongPeople-Modal'>
|
||||
<div className='belongPeople-Mtop'>
|
||||
{contactTitle}
|
||||
</div>
|
||||
<div className='contact-modal-context'>
|
||||
<div>
|
||||
<Form
|
||||
name="contactInfo"
|
||||
form={formContact}
|
||||
layout="vertical"
|
||||
labelCol={{ span: 8 }}
|
||||
wrapperCol={{ span: 24 }}
|
||||
style={{ width: '100%', }}
|
||||
onFinish={() => {
|
||||
// setIsNewBelongOpen(true);
|
||||
}}
|
||||
autoComplete="off"
|
||||
>
|
||||
<div className='blongNameInt'>
|
||||
<div className='blongTitle ' style={{ width: 65, marginRight: '15px' }}>姓名: </div>
|
||||
|
||||
|
||||
<Form.Item<ContactType>
|
||||
name="name"
|
||||
rules={[{ required: true, message: '请输入姓名' }]}
|
||||
>
|
||||
<Input placeholder="请输入姓名"
|
||||
style={{ height: '44px', width: '384px', fontSize: '15px', marginTop: '22px' }}
|
||||
|
||||
disabled={contactTitle == '查看联系人' ? true : false}
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
<div className='blongNameInt'>
|
||||
<div className='blongTitle ' style={{ width: 65, marginRight: '15px' }}>电话: </div>
|
||||
|
||||
<Form.Item<ContactType>
|
||||
name="phone"
|
||||
rules={[{ required: true, message: '请输入电话号码' }]}
|
||||
>
|
||||
<Input placeholder="请输入电话号码"
|
||||
style={{ height: '44px', width: '384px', fontSize: '15px', marginTop: '22px' }}
|
||||
|
||||
disabled={contactTitle == '查看联系人' ? true : false}
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
<div className='blongNameInt'>
|
||||
<div className='blongTitle ' style={{ width: 65, marginRight: '15px' }}>所属公司: </div>
|
||||
|
||||
<Form.Item<ContactType>
|
||||
name="company"
|
||||
rules={[{ required: false, message: '请输入所属公司' }]}
|
||||
>
|
||||
<Input placeholder="请输入所属公司"
|
||||
style={{ height: '44px', width: '384px', fontSize: '15px', marginTop: '22px' }}
|
||||
|
||||
disabled={contactTitle == '查看联系人' ? true : false}
|
||||
/>
|
||||
|
||||
</Form.Item>
|
||||
</div>
|
||||
<div className='blongNameInt'>
|
||||
<div className='blongTitle ' style={{ width: 65, marginRight: '15px' }}>邮箱: </div>
|
||||
|
||||
<Form.Item<ContactType>
|
||||
name="email"
|
||||
rules={[{ required: false, message: '请输入邮箱' },
|
||||
{ type: 'email', message: '请输入有效的邮箱地址' }
|
||||
]}
|
||||
>
|
||||
<Input placeholder="请输入邮箱"
|
||||
style={{ height: '44px', width: '384px', fontSize: '15px', marginTop: '22px' }}
|
||||
|
||||
disabled={contactTitle == '查看联系人' ? true : false}
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
<div
|
||||
style={{ display: 'none' }}
|
||||
>
|
||||
<Form.Item<ContactType>
|
||||
name="csaNo"
|
||||
>
|
||||
<Input placeholder="客服编码 需隐藏"
|
||||
style={{ height: '44px', width: '384px', fontSize: '15px', }}
|
||||
|
||||
disabled={contactTitle == '查看联系人' ? true : false}
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</Form>
|
||||
</div>
|
||||
<div className='cas' style={{
|
||||
display: contactTitle == '创建联系人' ? 'block' : 'none'
|
||||
}}>
|
||||
<div className='cas-title'>
|
||||
请使用微信扫一扫
|
||||
</div>
|
||||
<div className='cas-text'>
|
||||
添加您的专属客服
|
||||
</div>
|
||||
<img src={imgUrl} alt="" width={137} height={138} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</Modal >
|
||||
</div>
|
||||
)
|
||||
}
|
166
src/components/OrderDetailModal/OrderDetailModal.tsx
Normal file
166
src/components/OrderDetailModal/OrderDetailModal.tsx
Normal file
@ -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 (
|
||||
<div style={{ width: 1200, height: `${height}px` }}>
|
||||
<div className='orderDetailTop'>
|
||||
{tapTitleArray.map((item) => {
|
||||
return (
|
||||
<div key={item.key} className={item.className} onClick={() => {
|
||||
setActiveKey(item.key)
|
||||
}}>
|
||||
{item.title}
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
<div className='orderDetailBot'>
|
||||
<div style={{ display: activeKey == 'roder' ? 'block' : 'none' }}>
|
||||
<div className='orderDetailBot-order'>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>订单金额</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={orderPrice}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>订单状态</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={orderStatus}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>下单时间</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={orderTime}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>付款时间</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={payTime}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>下证时间</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={cardTime}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>评价时间</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={evaluateTime}></Input>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>订单评价</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}}
|
||||
>
|
||||
</Input>
|
||||
<div className='orderInfo-rate'>
|
||||
<Rate allowHalf disabled value={orderRate} />
|
||||
</div>
|
||||
</div>
|
||||
<div className='orderInfo'>
|
||||
<div className='orderInfo-title'>评价内容</div>
|
||||
<Input
|
||||
disabled
|
||||
style={{
|
||||
width: 400,
|
||||
fontSize: 16,
|
||||
color: "#5C5C5C"
|
||||
}} value={rateText}></Input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
59
src/components/OrderDetailModal/order-detail-modal.css
Normal file
59
src/components/OrderDetailModal/order-detail-modal.css
Normal file
@ -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;
|
||||
}
|
@ -4,13 +4,17 @@ import { GlobalContext } from "../../context/GlobalContext.ts";
|
||||
import { del, get, post, put, websocketUrl } from "../../util/AjaxUtils.ts";
|
||||
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<string>(props.projIntroduction ? props.projIntroduction : '');
|
||||
// 中间量
|
||||
const [newProjIntroduction, setNewProjIntroduction] = useState<string>('');
|
||||
const [isProjIntroductionLoading, setIsProjIntroductionLoading] = useState(false);
|
||||
|
||||
@ -48,7 +56,20 @@ export default function AiHelper(props: PropsType) {
|
||||
const [newProjModArray, setNewProjModArray] = useState<ProjModType[]>([]);
|
||||
const [isProjModArrayLoading, setIsProjModArrayLoading] = useState(false);
|
||||
const nav = useNavigate();
|
||||
// const [showText,setShowText] = useState('保存成功') //提示信息
|
||||
|
||||
// // 获取项目信息
|
||||
// const renderData = () => {
|
||||
// get<any>({
|
||||
// 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 (
|
||||
<div className='aiTab'>
|
||||
{messageApiHolder}
|
||||
@ -355,11 +396,13 @@ export default function AiHelper(props: PropsType) {
|
||||
maxLength={1500}
|
||||
handleGenerate={() => {
|
||||
generateProjIntroduction();
|
||||
// setProjIntroduction(newProjIntroduction)
|
||||
}}
|
||||
handleSave={(text) => {
|
||||
updateProjIntroduction(text);
|
||||
}}
|
||||
|
||||
|
||||
></AiHelperText>
|
||||
</Spin>
|
||||
</div>
|
||||
@ -376,6 +419,7 @@ export default function AiHelper(props: PropsType) {
|
||||
handleSave={(text) => {
|
||||
updateProjDesc(text);
|
||||
}}
|
||||
|
||||
/>
|
||||
</Spin>
|
||||
</div>
|
||||
|
@ -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<any>({
|
||||
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 (
|
||||
<div className="aiText-top-notext">
|
||||
{/* <Empty description="暂无内容" /> */}
|
||||
@ -148,7 +160,7 @@ export default function AiHelperText(props: PropsType) {
|
||||
}
|
||||
return (
|
||||
|
||||
<TextArea style={{ height: ' 77%', resize: 'none', fontSize: 16, textIndent: 32 }} value={text} onChange={(e) => {
|
||||
<TextArea style={{ height: ' 77%', resize: 'none', fontSize: 16 }} value={text} onChange={(e) => {
|
||||
setText(e.currentTarget.value);
|
||||
}}></TextArea>
|
||||
)
|
||||
@ -192,7 +204,7 @@ export default function AiHelperText(props: PropsType) {
|
||||
<div className="aiText" style={{ height: `${height}px` }}>
|
||||
<div className="aiText-top">
|
||||
{renderTextDom()}
|
||||
<div className="aiText-top-btn" style={{ display: text ? 'block' : 'none' }}>
|
||||
<div className="aiText-top-btn" style={{ display: props.text ? 'block' : 'none' }}>
|
||||
<div style={{ display: "flex", justifyContent: 'flex-end' }}>
|
||||
<Button disabled={status == 'SUCCESS' || status == 'GENERATING' ? true : false}
|
||||
|
||||
@ -204,12 +216,28 @@ export default function AiHelperText(props: PropsType) {
|
||||
// size="large"
|
||||
style={{
|
||||
marginLeft: 15,
|
||||
|
||||
display: text ? 'block' : 'none'
|
||||
}}
|
||||
type="primary" onClick={() => {
|
||||
|
||||
props.handleSave(text);
|
||||
setIsTextEdit(false);
|
||||
|
||||
|
||||
}}>保存</Button>
|
||||
<Button
|
||||
disabled={status == 'SUCCESS' || status == 'GENERATING' ? true : false}
|
||||
// size="large"
|
||||
style={{
|
||||
marginLeft: 15,
|
||||
display: text ? 'none' : 'block'
|
||||
}}
|
||||
type="primary" onClick={() => {
|
||||
|
||||
setText(props.text)
|
||||
setIsTextEdit(false)
|
||||
|
||||
}}>返回</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -226,17 +254,34 @@ export default function AiHelperText(props: PropsType) {
|
||||
}}> 点击AI自动生成后可自动生{props.title}...</span> </>}
|
||||
</div>
|
||||
<div style={{ display: "flex", justifyContent: 'flex-end', marginTop: 10 }}>
|
||||
{/* <Button
|
||||
|
||||
style={{
|
||||
width: 109,
|
||||
display: isShow ? 'none' : 'block'
|
||||
}}
|
||||
onClick={() => {
|
||||
|
||||
setText(newText)
|
||||
|
||||
|
||||
|
||||
}}
|
||||
>确认使用</Button> */}
|
||||
<Button
|
||||
// size="large"
|
||||
style={{
|
||||
width: 109,
|
||||
display: newText ? 'block' : 'none'
|
||||
display: isShow && newText ? 'block' : 'none'
|
||||
}}
|
||||
onClick={() => {
|
||||
setText(newText)
|
||||
|
||||
|
||||
setModal(true)
|
||||
|
||||
// setNewText('')
|
||||
}}
|
||||
>确认使用</Button>
|
||||
>替换</Button>
|
||||
<Button
|
||||
disabled={status == 'SUCCESS' || status == 'GENERATING' ? true : false}
|
||||
// size="large"
|
||||
@ -245,11 +290,41 @@ export default function AiHelperText(props: PropsType) {
|
||||
marginLeft: 15,
|
||||
}}
|
||||
onClick={() => {
|
||||
props.handleGenerate();
|
||||
props.handleGenerate()
|
||||
}}
|
||||
>AI生成</Button>
|
||||
</div>
|
||||
</div>
|
||||
<Modal
|
||||
title={'提示'}
|
||||
destroyOnClose={true}
|
||||
open={modal}
|
||||
okText="确认"
|
||||
cancelText="取消"
|
||||
|
||||
onCancel={() => {
|
||||
setModal(false);
|
||||
}}
|
||||
onOk={() => {
|
||||
setModal(false);
|
||||
setText(newText)
|
||||
|
||||
props.handleSave(newText);
|
||||
|
||||
setNewText('')
|
||||
}}
|
||||
style={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
height: `${height}px`,
|
||||
}}
|
||||
>
|
||||
<div style={{ width: 700 }}>
|
||||
是否替换当前{props.title}
|
||||
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
@ -26,7 +26,7 @@
|
||||
font-size: 16px;
|
||||
color: #1D1D1D;
|
||||
overflow-y: auto;
|
||||
text-indent: 32px;
|
||||
/* text-indent: 32px; */
|
||||
text-align: justify;
|
||||
/* background-color: pink; */
|
||||
}
|
||||
@ -57,7 +57,7 @@
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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: (
|
||||
<div className="dropdown-item">
|
||||
<UsergroupAddOutlined />
|
||||
<span className="title">产权联系人</span>
|
||||
</div>
|
||||
),
|
||||
onClick: () => {
|
||||
setContactModal(true)
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'logout',
|
||||
label: (
|
||||
@ -244,7 +258,21 @@ export default function Head() {
|
||||
|
||||
}}>
|
||||
|
||||
<BelongPeople setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={false} ></BelongPeople>
|
||||
<BelongPeople closeModal={()=>{setBelongModal(false)}} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={false} ></BelongPeople>
|
||||
</Modal>
|
||||
<Modal title="知识产权联系人"
|
||||
destroyOnClose
|
||||
|
||||
open={contactModal}
|
||||
width={1200}
|
||||
|
||||
footer={null}
|
||||
onCancel={() => {
|
||||
setContactModal(false)
|
||||
|
||||
}}>
|
||||
|
||||
<ContactPeople ></ContactPeople>
|
||||
</Modal>
|
||||
<Spin tip="正在提交..." spinning={loading} fullscreen />
|
||||
{contextHolder}
|
||||
|
@ -82,3 +82,6 @@
|
||||
.ant-dropdown .dropdown-item .title {
|
||||
margin-left: 5px;
|
||||
} */
|
||||
.ant-dropdown .dropdown-item .title {
|
||||
margin-left: 5px;
|
||||
}
|
@ -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();
|
||||
@ -18,6 +20,7 @@ export default function TradingGoods() {
|
||||
const [endTime, setEndTime] = useState<any>() //结束时间
|
||||
const [orderStatus, setOrderStatus] = useState<any>() //订单状态
|
||||
const [page, setPage] = useState(1) //分页
|
||||
const [orderDetailModal, setOrderDetailModal] = useState(false) //订单详情弹窗
|
||||
// 更改开始时间
|
||||
const startTimeChange: DatePickerProps['onChange'] = (date, dateString) => {
|
||||
console.log(date, dateString);
|
||||
@ -198,6 +201,12 @@ export default function TradingGoods() {
|
||||
console.log(record.order);
|
||||
|
||||
}}>补充资料</span>
|
||||
<span className='trading-goods-table-btn' onClick={() => {
|
||||
console.log(record.order);
|
||||
setOrderDetailModal(true)
|
||||
}}>
|
||||
订单详情
|
||||
</span>
|
||||
</Space>
|
||||
)}
|
||||
/>
|
||||
@ -213,6 +222,28 @@ export default function TradingGoods() {
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<Modal
|
||||
title="订单详情"
|
||||
okText="确认"
|
||||
cancelText="取消"
|
||||
destroyOnClose={true}
|
||||
footer={null}
|
||||
open={orderDetailModal}
|
||||
// onOk={() => {
|
||||
// setOrderDetailModal(false)
|
||||
// }}
|
||||
onCancel={() => {
|
||||
setOrderDetailModal(false)
|
||||
}}
|
||||
|
||||
style={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
height: `${height}px`,
|
||||
}}>
|
||||
<OrderDetail></OrderDetail>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@ -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<any>(undefined) // 结束时间
|
||||
const [orderStatus, setOrderStatus] = useState<any>(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);
|
||||
|
||||
}}>补充资料</span>
|
||||
<span className='trading-goods-table-btn' onClick={() => {
|
||||
console.log(record.order);
|
||||
setOrderDetailModal(true)
|
||||
}}>
|
||||
订单详情
|
||||
</span>
|
||||
</Space>
|
||||
)}
|
||||
/>
|
||||
@ -280,6 +287,28 @@ export default function TransactionOrder() {
|
||||
|
||||
|
||||
</div>
|
||||
<Modal
|
||||
title="订单详情"
|
||||
okText="确认"
|
||||
cancelText="取消"
|
||||
destroyOnClose={true}
|
||||
footer={null}
|
||||
open={orderDetailModal}
|
||||
// onOk={() => {
|
||||
// setOrderDetailModal(false)
|
||||
// }}
|
||||
onCancel={() => {
|
||||
setOrderDetailModal(false)
|
||||
}}
|
||||
|
||||
style={{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
height: `${height}px`,
|
||||
}}>
|
||||
<OrderDetail></OrderDetail>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ export default function ProjCreate() {
|
||||
const [allInfo, setAllInfo] = useState<any>({}) //全部托管信息
|
||||
const [materialInfo, setMaterialInfo] = useState<any>({}) //写材料信息
|
||||
const [freeInfo, setFreeInfo] = useState<any>({}) //免费托管信息
|
||||
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: <Link to={'/home'}>首页</Link> },{ title: '创建项目' }]));
|
||||
@ -204,7 +205,7 @@ export default function ProjCreate() {
|
||||
isClickable = {materialInfo.isClickable}
|
||||
/>
|
||||
<CardProjType
|
||||
head={'免费试用'}
|
||||
head={`免费试用${freeCount}次`}
|
||||
bodyLineArray={[
|
||||
{
|
||||
title: '提供的服务:',
|
||||
|
@ -1,4 +1,4 @@
|
||||
import './proj-edit.css'; 1
|
||||
import './proj-edit.css';
|
||||
// import {Link, useNavigate, useParams} from "react-router-dom";
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
import {
|
||||
@ -589,6 +589,9 @@ export default function ProjEdit() {
|
||||
projIntroduction={aiHelper.projIntroduction}
|
||||
projDesc={aiHelper.projDesc}
|
||||
isFree={false}
|
||||
renderData={()=>{
|
||||
renderData()
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</Modal>
|
||||
@ -608,7 +611,9 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<TitleIntroduction closeModal={() => { setTitleIntroductionOpen(false) }}></TitleIntroduction>
|
||||
<TitleIntroduction closeModal={() => { setTitleIntroductionOpen(false)
|
||||
renderData()
|
||||
}}></TitleIntroduction>
|
||||
</Modal>
|
||||
{/* 第1步查看 */}
|
||||
<Modal open={titleIntroductionShowOpen}
|
||||
@ -640,7 +645,9 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareInfo closeModal={() => { setSoftwareOpen(false) }}></SoftwareInfo>
|
||||
<SoftwareInfo closeModal={() => { setSoftwareOpen(false)
|
||||
renderData()
|
||||
}}></SoftwareInfo>
|
||||
</Modal>
|
||||
{/* 第二步查看 */}
|
||||
<Modal open={softwareInfoShowOpen}
|
||||
@ -668,7 +675,9 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareFeatures closeModal={() => { setSoftwareFeaturesOpen(false) }}></SoftwareFeatures>
|
||||
<SoftwareFeatures closeModal={() => { setSoftwareFeaturesOpen(false)
|
||||
renderData()
|
||||
}}></SoftwareFeatures>
|
||||
</Modal>
|
||||
{/* 第三步 查看 */}
|
||||
<Modal open={softwareFeaturesShowOpen}
|
||||
@ -698,7 +707,9 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<LoginPage closeModal={() => { setLoginPageOpne(false) }}></LoginPage>
|
||||
<LoginPage closeModal={() => { setLoginPageOpne(false)
|
||||
renderData()
|
||||
}}></LoginPage>
|
||||
</Modal>
|
||||
{/* 第四步 查看 */}
|
||||
<Modal open={loginPageShowOpne}
|
||||
@ -720,7 +731,9 @@ export default function ProjEdit() {
|
||||
destroyOnClose={true}
|
||||
|
||||
onCancel={() => {
|
||||
renderData()
|
||||
setSoftwareManagementOpen(false);
|
||||
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
@ -746,7 +759,9 @@ export default function ProjEdit() {
|
||||
destroyOnClose={true}
|
||||
|
||||
onCancel={() => {
|
||||
renderData()
|
||||
setDisplayOrderOpen(false);
|
||||
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
|
@ -232,7 +232,9 @@ export default function ProjEditAll() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<TitleIntroduction closeModal={() => { setTitleIntroductionOpen(false) }}></TitleIntroduction>
|
||||
<TitleIntroduction closeModal={() => { setTitleIntroductionOpen(false)
|
||||
renderData()
|
||||
}}></TitleIntroduction>
|
||||
</Modal>
|
||||
{/* 第1步查看 */}
|
||||
<Modal open={titleIntroductionShowOpen}
|
||||
@ -264,7 +266,9 @@ export default function ProjEditAll() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareInfo closeModal={() => { setSoftwareOpen(false) }}></SoftwareInfo>
|
||||
<SoftwareInfo closeModal={() => { setSoftwareOpen(false)
|
||||
renderData()
|
||||
}}></SoftwareInfo>
|
||||
</Modal>
|
||||
{/* 第二步查看 */}
|
||||
<Modal open={softwareInfoShowOpen}
|
||||
|
@ -7,9 +7,9 @@ import { Process } from "../../interfaces/step/IStepProj.ts";
|
||||
import CardProjDownload from "../../components/card/CardProjDownload.tsx";
|
||||
import CardProjJump from "../../components/card/CardProjJump.tsx";
|
||||
import { useEffect, useState } from "react";
|
||||
import { Axios, get } from "../../util/AjaxUtils.ts";
|
||||
import { Axios, get, post } from "../../util/AjaxUtils.ts";
|
||||
import { EditStepEnum, IProjEdit } from "../../interfaces/card/ICardProj.ts";
|
||||
import { MAX_MOD_SIZE_FREE } from "./edit/ProjConfigModList.tsx";
|
||||
// import { MAX_MOD_SIZE_FREE } from "./edit/ProjConfigModList.tsx";
|
||||
import { GenerateStatus } from "../../interfaces/proj/IProj.ts";
|
||||
import TitleIntroduction from '../../route/proj/edit/ProjEditStep1.tsx'
|
||||
import TitleIntroductionShow from '../../route/proj/edit/ProjEditStep1Show.tsx'
|
||||
@ -23,7 +23,32 @@ import SoftwareManagement from '../../route/proj/edit/ProjConfigModList.tsx'
|
||||
import SoftwareManagementShow from '../../route/proj/edit/ProjConfigModListShow.tsx'
|
||||
import DisplayOrder from '../../route/proj/edit/ProjConfigMenuList.tsx'
|
||||
import DisplayOrderShow from '../../route/proj/edit/ProjConfigMenuListShow.tsx'
|
||||
import CardProjLoading from "../../components/card/CardProjLoading.tsx";
|
||||
import CardProjResult from "../../components/card/CardProjResult.tsx";
|
||||
import aiGif from '../../static/ai.gif'
|
||||
import AiHelper from "../../components/ai/AiHelper.tsx";
|
||||
type AiHelperType = {
|
||||
projId: string;
|
||||
projIntroduction: string;
|
||||
projDesc: string;
|
||||
projMods: ProjModType[];
|
||||
}
|
||||
type ProjModType = {
|
||||
name: string,
|
||||
desc: string
|
||||
}
|
||||
|
||||
export default function ProjEdit() {
|
||||
const height = window.innerHeight - 180;
|
||||
const [aiHelperModalOpen, setAiHelperModalOpen] = useState(false);
|
||||
const [isGenerateModalOpen, setIsGenerateModalOpen] = useState(false);
|
||||
const [generateErrorMsg, setGenerateErrorMsg] = useState('');
|
||||
const [aiHelper, setAiHelper] = useState<AiHelperType>({
|
||||
projId: '',
|
||||
projIntroduction: '',
|
||||
projDesc: '',
|
||||
projMods: [],
|
||||
});
|
||||
//第一步 标题简介弹窗
|
||||
const [titleIntroductionOpen, setTitleIntroductionOpen] = useState(false)
|
||||
const [titleIntroductionShowOpen, setTitleIntroductionShowOpen] = useState(false)
|
||||
@ -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(
|
||||
@ -82,7 +107,7 @@ export default function ProjEdit() {
|
||||
step: 2,
|
||||
btnName: !isGenerateSuccess ? '设置' : '查看',
|
||||
status: data.apply.projDevCompleteDate ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT,
|
||||
canBtnClick: false,
|
||||
// canBtnClick: false,
|
||||
handleEdit() {
|
||||
if (generateStatus != GenerateStatus.SUCCESS) {
|
||||
// nav(`/proj-edit/step2/${pathParams.projId}`)
|
||||
@ -101,7 +126,7 @@ export default function ProjEdit() {
|
||||
step: 3,
|
||||
btnName: !isGenerateSuccess ? '设置' : '查看',
|
||||
status: data.apply.envHardDev ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT,
|
||||
canBtnClick: false,
|
||||
// canBtnClick: false,
|
||||
handleEdit() {
|
||||
if (!isGenerateSuccess) {
|
||||
// nav(`/proj-edit/step3/${pathParams.projId}`)
|
||||
@ -119,7 +144,7 @@ export default function ProjEdit() {
|
||||
desc: '对登录界面进行个性化设置,包括背景图片等',
|
||||
step: 1,
|
||||
btnName: !isGenerateSuccess ? '设置' : '查看',
|
||||
canBtnClick: false,
|
||||
// canBtnClick: false,
|
||||
|
||||
// 状态判断lyp
|
||||
status: data.loginpage.loginpageId ? EditStepEnum.EDITED : EditStepEnum.UN_EDIT,
|
||||
@ -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
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -341,13 +376,62 @@ export default function ProjEdit() {
|
||||
desc="生成软著所需要的资料,此操作后项目无法再次编辑"
|
||||
btnName="生成"
|
||||
status={EditStepEnum.UN_EDIT}
|
||||
canBtnClick={false}
|
||||
handleEdit={() => { }}
|
||||
canBtnClick={canGenerate}
|
||||
// canBtnClick={false}
|
||||
handleEdit={() => {
|
||||
setIsGenerateModalOpen(true);
|
||||
}}
|
||||
background='#f3f3f3'
|
||||
|
||||
/>
|
||||
) : <></>
|
||||
}
|
||||
{
|
||||
generateStatus == GenerateStatus.PENDING ? (
|
||||
<CardProjLoading title="正在排队"
|
||||
desc="资料正在排队"
|
||||
duration={generateEmainingTime}
|
||||
handleCountDownOver={() => {
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 1000)
|
||||
}}
|
||||
/>
|
||||
) : <></>
|
||||
}
|
||||
{
|
||||
generateStatus == GenerateStatus.GENERATING ? (
|
||||
<CardProjLoading title="正在生成"
|
||||
desc="资料正在生成,点击刷新"
|
||||
duration={generateEmainingTime}
|
||||
handleClick={() => {
|
||||
renderData();
|
||||
}}
|
||||
handleCountDownOver={() => {
|
||||
renderData();
|
||||
}}
|
||||
|
||||
/>
|
||||
) : <></>
|
||||
}
|
||||
{
|
||||
generateStatus == GenerateStatus.SUCCESS ? (
|
||||
<CardProjResult title="生成成功"
|
||||
isSuccess={true}
|
||||
/>
|
||||
) : <></>
|
||||
}
|
||||
{
|
||||
generateStatus == GenerateStatus.FAILED ? (
|
||||
<CardProjResult title="生成失败"
|
||||
isSuccess={false}
|
||||
handleFeedback={() => {
|
||||
setGenerateErrorModal(true);
|
||||
console.log('反馈')
|
||||
}}
|
||||
/>
|
||||
) : <></>
|
||||
}
|
||||
|
||||
|
||||
</StepProjEdit>
|
||||
@ -356,29 +440,36 @@ export default function ProjEdit() {
|
||||
descTitle="资料下载">
|
||||
<CardProjDownload title="申请表"
|
||||
desc="点击下载申请表"
|
||||
canBtnClick={false}
|
||||
handleDownload={() => { }}
|
||||
canBtnClick={generateStatus == GenerateStatus.SUCCESS}
|
||||
handleDownload={() => {
|
||||
window.open(`${Axios.defaults?.baseURL}/route/proj/download/apply/${pathParams.projId}`)
|
||||
}}
|
||||
/>
|
||||
<CardProjDownload title="操作手册"
|
||||
desc="点击下载操作手册"
|
||||
canBtnClick={false}
|
||||
handleDownload={() => { }}
|
||||
// canBtnClick={false}
|
||||
canBtnClick={generateStatus == GenerateStatus.SUCCESS}
|
||||
handleDownload={() => {
|
||||
window.open(`${Axios.defaults?.baseURL}/route/proj/download/manual/${pathParams.projId}`)
|
||||
}}
|
||||
/>
|
||||
<CardProjDownload title="代码压缩包"
|
||||
desc="点击下载代码压缩包"
|
||||
canBtnClick={false}
|
||||
handleDownload={() => { }}
|
||||
canBtnClick={generateStatus == GenerateStatus.SUCCESS}
|
||||
handleDownload={() => {
|
||||
window.open(`${Axios.defaults?.baseURL}/route/proj/download/code-zip/${pathParams.projId}`)
|
||||
}}
|
||||
/>
|
||||
<CardProjDownload title="代码文档"
|
||||
{/* <CardProjDownload title="代码文档"
|
||||
desc="点击下载代码文档"
|
||||
canBtnClick={false}
|
||||
handleDownload={() => { }}
|
||||
/>
|
||||
<CardProjJump title="找代理"
|
||||
/> */}
|
||||
{/* <CardProjJump title="找代理"
|
||||
desc="到软著代理完成软著申请"
|
||||
canBtnClick={false}
|
||||
handleJump={() => { }}
|
||||
/>
|
||||
/> */}
|
||||
</StepProjEdit>
|
||||
</div>
|
||||
<div className="btn-container">
|
||||
@ -393,6 +484,78 @@ export default function ProjEdit() {
|
||||
nav(-1);
|
||||
}}>返回</Button>
|
||||
</div>
|
||||
<div className='aiImg' onClick={() => { setAiHelperModalOpen(true) }}>
|
||||
<img src={aiGif} alt="" width={'100%'} height={'100%'} />
|
||||
</div>
|
||||
|
||||
<Modal title="提示"
|
||||
okText="确定"
|
||||
cancelText="取消"
|
||||
open={isGenerateModalOpen}
|
||||
onOk={() => {
|
||||
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);
|
||||
}}>
|
||||
<div>点击“确定按钮”后,项目便无法再次修改,建议通过预览查看系统,确认无误后点击“确定按钮”。</div>
|
||||
</Modal>
|
||||
<Modal open={generateErrorModal}
|
||||
title="出错信息"
|
||||
okText="确定"
|
||||
cancelText={false}
|
||||
footer={false}
|
||||
okButtonProps={{
|
||||
style: {
|
||||
backgroundColor: 'var(--color-primary)',
|
||||
}
|
||||
}}
|
||||
onCancel={() => {
|
||||
setGenerateErrorModal(false)
|
||||
}}
|
||||
>
|
||||
<p style={{ color: 'var(--color-red)' }}>{generateErrorMsg}</p>
|
||||
</Modal>
|
||||
<Modal open={aiHelperModalOpen}
|
||||
title=""
|
||||
width={1200}
|
||||
footer={false}
|
||||
maskClosable={false}
|
||||
destroyOnClose={true}
|
||||
onCancel={() => {
|
||||
setAiHelperModalOpen(false);
|
||||
|
||||
renderData()
|
||||
// setAiHelperModalOpen(false);
|
||||
// console.log(123);
|
||||
|
||||
}}
|
||||
|
||||
>
|
||||
<div style={{ height: `${height - 20}px`, overflow: 'hidden', }}>
|
||||
<AiHelper
|
||||
projId={aiHelper.projId}
|
||||
projIntroduction={aiHelper.projIntroduction}
|
||||
projDesc={aiHelper.projDesc}
|
||||
isFree={false}
|
||||
renderData={()=>{
|
||||
renderData()
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</Modal>
|
||||
{/* 第1步设置 */}
|
||||
<Modal open={titleIntroductionOpen}
|
||||
title="软件简介确认"
|
||||
@ -409,7 +572,10 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<TitleIntroduction closeModal={() => { setTitleIntroductionOpen(false) }}></TitleIntroduction>
|
||||
<TitleIntroduction closeModal={() => {
|
||||
setTitleIntroductionOpen(false)
|
||||
renderData()
|
||||
}}></TitleIntroduction>
|
||||
</Modal>
|
||||
{/* 第1步查看 */}
|
||||
<Modal open={titleIntroductionShowOpen}
|
||||
@ -441,7 +607,10 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareInfo closeModal={() => { setSoftwareOpen(false) }}></SoftwareInfo>
|
||||
<SoftwareInfo closeModal={() => {
|
||||
setSoftwareOpen(false)
|
||||
renderData()
|
||||
}}></SoftwareInfo>
|
||||
</Modal>
|
||||
{/* 第二步查看 */}
|
||||
<Modal open={softwareInfoShowOpen}
|
||||
@ -469,7 +638,10 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareFeatures closeModal={() => { setSoftwareFeaturesOpen(false) }}></SoftwareFeatures>
|
||||
<SoftwareFeatures closeModal={() => {
|
||||
setSoftwareFeaturesOpen(false)
|
||||
renderData()
|
||||
}}></SoftwareFeatures>
|
||||
</Modal>
|
||||
{/* 第三步 查看 */}
|
||||
<Modal open={softwareFeaturesShowOpen}
|
||||
@ -499,7 +671,10 @@ export default function ProjEdit() {
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<LoginPage closeModal={() => { setLoginPageOpne(false) }}></LoginPage>
|
||||
<LoginPage closeModal={() => {
|
||||
setLoginPageOpne(false)
|
||||
renderData()
|
||||
}}></LoginPage>
|
||||
</Modal>
|
||||
{/* 第四步 查看 */}
|
||||
<Modal open={loginPageShowOpne}
|
||||
@ -521,11 +696,12 @@ export default function ProjEdit() {
|
||||
destroyOnClose={true}
|
||||
|
||||
onCancel={() => {
|
||||
renderData()
|
||||
setSoftwareManagementOpen(false);
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
<SoftwareManagement></SoftwareManagement>
|
||||
<SoftwareManagement isFree={true}></SoftwareManagement>
|
||||
</Modal>
|
||||
{/* 第五步 查看 */}
|
||||
<Modal open={softwareManagementShowOpen}
|
||||
@ -548,6 +724,7 @@ export default function ProjEdit() {
|
||||
|
||||
onCancel={() => {
|
||||
setDisplayOrderOpen(false);
|
||||
renderData()
|
||||
}}
|
||||
footer={null}
|
||||
>
|
||||
|
@ -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,9 +236,8 @@ export default function ProjNew() {
|
||||
open={isCreateModalOpen}
|
||||
onOk={() => {
|
||||
// console.log('最终',listProjChargeAdditional);
|
||||
console.log(belongPeopleInfo.authorId);
|
||||
// console.log(belongPeopleInfo.authorId);
|
||||
|
||||
setIsCreateModalOpen(false);
|
||||
post<any>({
|
||||
messageApi,
|
||||
url: '/api/proj/create',
|
||||
@ -267,6 +268,10 @@ export default function ProjNew() {
|
||||
setLoading(false);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
setIsCreateModalOpen(false);
|
||||
|
||||
}}
|
||||
onCancel={() => {
|
||||
setIsCreateModalOpen(false);
|
||||
@ -303,7 +308,7 @@ export default function ProjNew() {
|
||||
|
||||
}}>
|
||||
|
||||
<BelongPeople setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={true}></BelongPeople>
|
||||
<BelongPeople closeModal = {()=>{setBelongModal(false)}} setBelongPeopleInfo={setBelongPeopleInfo} belongPeopleInfo={belongPeopleInfo} setValue={setValue} isShow={true}></BelongPeople>
|
||||
</Modal>
|
||||
<Spin tip="正在提交..." spinning={loading} fullscreen />
|
||||
</>
|
||||
|
@ -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()
|
||||
|
@ -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) {
|
||||
<Modal open={configModSaveOpen}
|
||||
title="新增"
|
||||
width={1500}
|
||||
|
||||
destroyOnClose={true}
|
||||
onCancel={() => {
|
||||
setConfigModSaveOpen(false);
|
||||
}}
|
||||
|
@ -849,7 +849,7 @@ export default function ProjEditStep2(props: any) {
|
||||
</div>
|
||||
<div className='Step-title' style={{ marginTop: '30px' }}>
|
||||
<div className='Step-titlel'></div>
|
||||
<div className='Step-titler'>申请人信息</div>
|
||||
<div className='Step-titler'>联系人信息</div>
|
||||
</div>
|
||||
<div style={{ padding: '22px 15px' }}>
|
||||
<div style={{ padding: '14px 19px', background: '#F3F3F3', color: '#A3A3A3', fontSize: '14px' }}>
|
||||
|
Loading…
Reference in New Issue
Block a user