system-copyright-react/src/route/proj/edit/ProjEditStep1.tsx

371 lines
17 KiB
TypeScript
Raw Normal View History

2024-03-21 22:22:35 +08:00
import './proj-edit-step.css';
2024-08-12 14:43:58 +08:00
import { Col, Flex, message, Modal, Row, Spin, Pagination, Image } from "antd";
2024-05-29 14:43:48 +08:00
import { useParams } from "react-router-dom";
2024-05-12 07:45:51 +08:00
import { useEffect, useState } from "react";
2024-08-12 14:43:58 +08:00
import { get, put, downloadUrl } from "../../../util/AjaxUtils.ts";
2024-05-12 07:45:51 +08:00
import { Button, Form, Input } from 'antd';
2024-07-31 16:00:30 +08:00
import { AxiosResponse, } from "axios";
2024-06-07 09:59:01 +08:00
import { errorImage } from "../../../util/CommonUtil.ts";
// import { useRowStyle } from 'antd/es/grid/style/index';
2024-03-21 22:22:35 +08:00
2024-05-12 07:45:51 +08:00
const { TextArea } = Input;
2024-03-21 22:22:35 +08:00
type FieldType = {
projName: string;
projIntroduction: string;
projStyleType: string;
projCodeType: string;
projDesc: string;
};
2024-05-29 14:43:48 +08:00
export default function ProjEditStep1(props: any) {
2024-05-28 18:00:42 +08:00
// const nav = useNavigate();
2024-03-21 22:22:35 +08:00
const pathParams = useParams();
const [messageApi, contextHolder] = message.useMessage();
const [form] = Form.useForm<FieldType>();
const [loading, setLoading] = useState<boolean>(false);
const [isEditModalOpen, setIsEditModalOpen] = useState(false);
2024-06-07 09:59:01 +08:00
const [isPageImgModal, setIsPageImgModal] = useState(false);
// 页面样式相关
const [page, setpage] = useState(1)
const [total, settotal] = useState(0)
const [pageImgArray, setpageImgArray] = useState<any[]>([])
// 页面样式图片
const [previewImgs, setpreviewImgs] = useState('')
const [codeTypePageId, setcodeTypePageId] = useState('')
2024-05-28 18:00:42 +08:00
const height = window.innerHeight - 200
2024-06-07 09:59:01 +08:00
// 缓存一个被选中的图品信息 做弹窗选择确定和返回的缓存
const [selectedId, setSelectedId] = useState('')
const [selectedImg, setSelectedImg] = useState('')
// 初始化数据
const init = () => {
setpage(1)
}
// 获取页面样式图片等信息
const getPageImgData = (page: number) => {
get({
messageApi,
url: `/api/code/type/page/listpage`,
config: {
params: {
page: page,
rows: 10
}
},
onSuccess(data: any) {
2024-07-31 16:00:30 +08:00
// console.log(data);
2024-06-07 09:59:01 +08:00
settotal(data.data.total)
setpageImgArray(data.data.rows)
}
})
}
const openPageImgModal = () => {
getPageImgData(page)
setIsPageImgModal(true)
}
// const pageImgArray1 = [
// { codeTypePageId: '1', previewImgs: '嘻嘻嘻' },
// { codeTypePageId: '2', previewImgs: '呵呵' },
// { codeTypePageId: '3', previewImgs: '哈哈' },
// { codeTypePageId: '4', previewImgs: '哥哥' },
// { codeTypePageId: '5', previewImgs: 'xx' },
// { codeTypePageId: '6', previewImgs: '11' }
// ]
2024-05-29 14:43:48 +08:00
// 初始化表格数据
2024-06-07 09:59:01 +08:00
const getData = () => {
2024-03-21 22:22:35 +08:00
get({
messageApi,
url: `/api/proj/get/edit-step1/${pathParams.projId}`,
2024-05-12 07:45:51 +08:00
onSuccess({ data }: AxiosResponse) {
2024-07-31 16:00:30 +08:00
// console.log(data);
2024-06-07 09:59:01 +08:00
2024-03-21 22:22:35 +08:00
form.setFieldsValue({
projName: data.projName,
projIntroduction: data.projIntroduction,
projDesc: data.projDesc
})
2024-06-07 09:59:01 +08:00
// ${Axios.defaults?.baseURL}/route/file/v2/download/true/${item.previewImgs}
setpreviewImgs(data.codeTypePage.previewImgs)
setcodeTypePageId(data.codeTypePage.codeTypePageId)
setSelectedId(data.codeTypePage.codeTypePageId)
setSelectedImg(data.codeTypePage.previewImgs)
2024-03-21 22:22:35 +08:00
}
})
2024-06-07 09:59:01 +08:00
}
useEffect(() => {
getData()
2024-03-21 22:22:35 +08:00
}, [])
2024-06-07 09:59:01 +08:00
2024-03-21 22:22:35 +08:00
return (
2024-05-29 14:43:48 +08:00
<div style={{ height: `${height}px`, overflow: 'auto' }}>
2024-03-21 22:22:35 +08:00
{contextHolder}
2024-05-12 07:45:51 +08:00
{/* <Breadcrumb
2024-03-21 22:22:35 +08:00
items={[
{title: <Link to={'/'}></Link>},
{title: <Link to={'/proj-create'}></Link>},
2024-04-12 18:18:14 +08:00
{title: <a onClick={() => {nav(-1)}}></a>},
2024-03-21 22:22:35 +08:00
{title: '标题简介'},
]}
2024-05-12 07:45:51 +08:00
/> */}
{/* <div className="form-container" style={{ height: `${height}px` }}> */}
2024-05-29 14:43:48 +08:00
<div className="form-container" style={{ paddingBottom: '13px', boxSizing: "border-box" }}>
2024-05-21 11:21:34 +08:00
<div className='Step-title'>
<div className='Step-titlel'></div>
<div className='Step-titler'></div>
</div>
<div className="form-body">
<Form
name="basic"
form={form}
layout="vertical"
labelCol={{ span: 8 }}
wrapperCol={{ span: 24 }}
// style={{ width: '600px' }}
onFinish={() => {
setIsEditModalOpen(true);
}}
autoComplete="off"
>
<Row gutter={15}>
2024-06-07 09:59:01 +08:00
<div className='projNameInt' style={{ marginLeft: 10 }}>
2024-05-21 11:21:34 +08:00
<div className='projTitle '><span className='redicon'>*</span> :</div>
<Form.Item<FieldType>
// label="项目名称"
name="projName"
rules={[{ required: true, message: '请输入项目名称' }]}
>
<Input
style={{ height: '50px', width: '300px', fontSize: '16px' }}
/>
</Form.Item>
</div>
</Row>
2024-06-07 09:59:01 +08:00
<div className='projNameInt'>
<div className='projTitle '><span className='redicon'>*</span> :</div>
<Form.Item<FieldType>
// label="项目名称"
// name="projName"
// rules={[{ required: true, message: '请选择页面样式' }]}
>
2024-06-27 10:21:32 +08:00
<div className='pageImg' onClick={openPageImgModal} style={{ width: 300, height: 150 }}>
2024-06-07 09:59:01 +08:00
{/* <img src={`${Axios.defaults?.baseURL}/route/file/v2/download/true/${codeTypePageId}`} alt="" /> */}
<Image
2024-07-31 16:00:30 +08:00
// src={`${Axios.defaults?.baseURL}/route/file/v2/download/true/${previewImgs}`}
src={downloadUrl(previewImgs, false)}
2024-06-07 09:59:01 +08:00
fallback={errorImage}
preview={false} width={300} height={150} />
</div>
<div style={{ color: '#939393', marginTop: '10px' }}></div>
</Form.Item>
</div>
2024-05-21 11:21:34 +08:00
<Row gutter={15}>
<Col span={24}>
<div className='projNameInt'>
<div className='projTitle '><span className='redicon'>*</span> :</div>
<div style={{ width: '1250px' }}>
2024-03-21 22:22:35 +08:00
2024-05-12 07:45:51 +08:00
<Form.Item<FieldType>
// label="项目简介"
name="projIntroduction"
rules={[{ required: true, message: '请输入项目简介' }]}
>
2024-05-21 11:21:34 +08:00
<TextArea
style={{ resize: 'none', width: "1215px", height: '200px', fontSize: '16px' }}
rows={3} placeholder="请用一段话简单描述系统"
2024-05-12 07:45:51 +08:00
/>
</Form.Item>
</div>
2024-03-21 22:22:35 +08:00
2024-05-21 11:21:34 +08:00
</div>
</Col>
</Row>
<Row gutter={15}>
</Row>
<Row gutter={15}>
<Col span={24}>
<div className='projNameInt' >
<div className='projTitle '><span className='redicon'>*</span> :</div>
<div style={{ width: '1250px' }}>
2024-05-12 07:45:51 +08:00
<Form.Item<FieldType>
// label="项目详细介绍"
name="projDesc"
extra="请对项目做出详细介绍,此内容在操作手册中引用"
rules={[{ required: true, message: '请输入项目详细介绍' }]}
>
<TextArea
2024-05-21 11:21:34 +08:00
style={{ resize: 'none', width: "1215px", height: '200px', fontSize: '16px' }}
2024-05-12 07:45:51 +08:00
rows={8} placeholder="请输入项目详细介绍" />
</Form.Item>
</div>
2024-05-21 11:21:34 +08:00
</div>
2024-03-21 22:22:35 +08:00
2024-05-21 11:21:34 +08:00
</Col>
</Row>
2024-05-12 07:45:51 +08:00
2024-05-21 11:21:34 +08:00
<div className='setProBtn'>
<Form.Item wrapperCol={{ span: 24 }}>
<Flex align="center" justify="center" gap="large">
<Button type="default" htmlType="button"
// style={{ width: '262px', height: '58px', fontSize: '16px', color: '#4B4B4B', background: '#EEEEEE' }}
size='large'
onClick={() => {
2024-05-28 18:00:42 +08:00
props.closeModal()
2024-06-07 09:59:01 +08:00
2024-05-21 11:21:34 +08:00
}}>
2024-05-28 18:00:42 +08:00
2024-05-21 11:21:34 +08:00
</Button>
<Button type="primary"
htmlType="submit"
// style={{ width: '262px', height: '58px', fontSize: '16px', color: '#FDFDF2', backgroundColor: 'var(--color-primary)' }}
size='large'
>
</Button>
2024-05-12 07:45:51 +08:00
2024-05-21 11:21:34 +08:00
</Flex>
</Form.Item>
</div>
</Form>
2024-03-21 22:22:35 +08:00
</div>
</div>
2024-05-21 11:21:34 +08:00
2024-03-21 22:22:35 +08:00
<Modal title="提示"
2024-05-12 07:45:51 +08:00
okText="确定"
cancelText="取消"
2024-05-29 15:11:52 +08:00
destroyOnClose={true}
2024-05-12 07:45:51 +08:00
open={isEditModalOpen}
onOk={() => {
setIsEditModalOpen(false);
put({
messageApi,
url: `/api/proj/update/edit-step1/${pathParams.projId}`,
body: {
projName: form.getFieldValue('projName'),
projIntroduction: form.getFieldValue('projIntroduction'),
2024-06-07 09:59:01 +08:00
// projStyleType: form.getFieldValue('projStyleType'),
// projCodeType: form.getFieldValue('projCodeType'),
2024-05-12 07:45:51 +08:00
projDesc: form.getFieldValue('projDesc'),
2024-06-07 09:59:01 +08:00
codeTypePageId
2024-05-12 07:45:51 +08:00
},
onBefore() {
setLoading(true);
},
onSuccess() {
messageApi.open({
type: 'success',
content: '编辑成功'
})
2024-05-29 14:43:48 +08:00
setTimeout(() => {
props.closeModal()
2024-05-29 15:11:52 +08:00
// window.location.reload(); // 刷新页面
2024-06-04 16:02:06 +08:00
}, 500);
2024-05-29 14:43:48 +08:00
2024-05-12 07:45:51 +08:00
},
onFinally() {
setLoading(false);
}
})
}}
onCancel={() => {
setIsEditModalOpen(false);
}}>
2024-03-21 22:22:35 +08:00
<div></div>
</Modal>
2024-06-07 09:59:01 +08:00
{/* 选择页面样式弹窗 */}
<Modal title="选择页面样式"
okText="确定"
cancelText="取消"
destroyOnClose={true}
open={isPageImgModal}
width={1070}
style={{ position: 'relative' }}
onOk={() => {
2024-07-31 16:00:30 +08:00
// console.log(codeTypePageId);
2024-06-07 09:59:01 +08:00
init()
// getData()
setcodeTypePageId(selectedId)
setpreviewImgs(selectedImg)
setIsPageImgModal(false)
}}
onCancel={() => {
init()
setSelectedId(codeTypePageId)
setSelectedImg(previewImgs)
// getData()
setIsPageImgModal(false);
}}
>
{/* <div style={{ height: `${height - 40}px`, overflow: 'auto', display: 'flex', justifyContent: 'flex-start', flexWrap: 'wrap' }}>
<div className='selectPage'>
<div className='selectPageImg'>
<Checkbox style={{ margin: 5 }} onChange={onChange}></Checkbox>
</div>
</div>
<div className='selectPage'>
<div className='selectPageImg'>
<Checkbox style={{ margin: 5 }} onChange={onChange}></Checkbox>
</div>
</div>
</div> */}
<div style={{ height: `${height - 80}px`, overflow: 'auto', display: 'flex', justifyContent: 'flex-start', flexWrap: 'wrap', marginTop: 10, }}>
{
pageImgArray.map((item) => {
2024-07-31 16:00:30 +08:00
// const imgSrc = `${Axios.defaults?.baseURL}/route/file/v2/download/true/${item.previewImgs}`;
2024-06-07 09:59:01 +08:00
return (
<div key={item.codeTypePageId} className={item.codeTypePageId == selectedId ? 'page-img-select page-img-selected' : 'page-img-select'}
2024-08-12 14:43:58 +08:00
style={{ marginRight: '10px', marginBottom: '10px', height: 250 }}
2024-06-07 09:59:01 +08:00
onClick={() => {
setSelectedId(item.codeTypePageId)
setSelectedImg(item.previewImgs)
}}
>
<div className="page-img" >
<Image
2024-07-31 16:00:30 +08:00
// src={imgSrc}
src={downloadUrl(item.previewImgs, false)}
2024-06-07 09:59:01 +08:00
fallback={errorImage}
2024-07-22 17:22:35 +08:00
preview={false} width={500} height={250} />
2024-06-07 09:59:01 +08:00
</div>
<div className="page-title">
<div className="checkbox"></div>
{/* <div className="text">{props.title ? props.title : '标题'}</div> */}
</div>
</div>
)
})
}
</div>
<div className='pagination'>
{/* defaultCurrent: 默认当前页数 total:数据总数 defaultPageSize:'页面显示几条' */}
2024-08-12 14:43:58 +08:00
<Pagination
showSizeChanger={false}
defaultCurrent={1} total={total} defaultPageSize={10} onChange={(page) => {
// console.log(page);
setpage(page)
setpageImgArray([])
getPageImgData(page)
}} />
2024-06-07 09:59:01 +08:00
</div>
</Modal>
2024-05-12 07:45:51 +08:00
<Spin tip="正在提交..." spinning={loading} fullscreen />
</div>
2024-03-21 22:22:35 +08:00
)
}