diff --git a/src/components/card/CardProjEdit.tsx b/src/components/card/CardProjEdit.tsx index 1f28fa5..be4234d 100644 --- a/src/components/card/CardProjEdit.tsx +++ b/src/components/card/CardProjEdit.tsx @@ -1,17 +1,28 @@ import './card-proj-edit.css'; -import {IProjEdit} from "../../interfaces/card/ICardProj.ts"; +import {EditStepEnum, IProjEdit} from "../../interfaces/card/ICardProj.ts"; export default function CardProjEdit(props: IProjEdit) { + + const renderBtn = () => { + if (props.canBtnClick == false) { + return { + e.preventDefault(); + }}>{props.btnName ? props.btnName : '编辑'} + } else { + return { + e.preventDefault(); + props.handleEdit(); + }}>{props.btnName ? props.btnName : '编辑'} + } + } + return (
{props.title}
{props.desc}
- { - e.preventDefault(); - props.handleEdit(); - }}>编辑 - + {renderBtn()} + {props.status == EditStepEnum.EDITED ? : <>}
) diff --git a/src/components/list/ListProj.tsx b/src/components/list/ListProj.tsx index b667a83..47aaa59 100644 --- a/src/components/list/ListProj.tsx +++ b/src/components/list/ListProj.tsx @@ -5,7 +5,6 @@ import {Input, Pagination, message} from 'antd'; import type {SearchProps} from 'antd/es/input/Search'; import {get} from "../../util/AjaxUtils.ts"; - const {Search} = Input; const onSearch: SearchProps['onSearch'] = (value, _e, info) => { diff --git a/src/interfaces/card/ICardProj.ts b/src/interfaces/card/ICardProj.ts index b98561e..4f7f3d4 100644 --- a/src/interfaces/card/ICardProj.ts +++ b/src/interfaces/card/ICardProj.ts @@ -1,6 +1,15 @@ +export enum EditStepEnum { + EDITED = 'EDITED', + UN_EDIT = 'UN_EDIT' +} + export interface IProjEdit { title: string; desc?: string; + step?: number; + status: EditStepEnum; + btnName?: string; + canBtnClick?: boolean; handleEdit(): void; } diff --git a/src/interfaces/dict/IDict.ts b/src/interfaces/dict/IDict.ts new file mode 100644 index 0000000..2e60276 --- /dev/null +++ b/src/interfaces/dict/IDict.ts @@ -0,0 +1,6 @@ +export interface ITree { + id: string; + pId: string; + name: string; + isParent: boolean; +} \ No newline at end of file diff --git a/src/interfaces/proj/IEnv.ts b/src/interfaces/proj/IEnv.ts new file mode 100644 index 0000000..ace16a4 --- /dev/null +++ b/src/interfaces/proj/IEnv.ts @@ -0,0 +1,21 @@ +export interface IEnvHard { + content:string; + projEnvHardId: string; + type: string; +} + +export interface IEnvSoft { + content:string; + projEnvSoftId: string; + type: string; +} + +export interface IEnvLang { + content:string; + projEnvLangId: string; +} + +export interface IEnvTechnical { + content:string; + projEnvTechnicalId: string; +} \ No newline at end of file diff --git a/src/layout/body/Body.tsx b/src/layout/body/Body.tsx index e296284..753ecfd 100644 --- a/src/layout/body/Body.tsx +++ b/src/layout/body/Body.tsx @@ -5,27 +5,47 @@ import ProjCreate from "../../route/proj/ProjCreate.tsx"; import ProjNew from "../../route/proj/ProjNew.tsx"; import ProjEdit from "../../route/proj/ProjEdit.tsx"; import AgentSelect from "../../route/agent/AgentSelect.tsx"; +import ProjEditStep1 from "../../route/proj/edit/ProjEditStep1.tsx"; +import ProjEditStep2 from "../../route/proj/edit/ProjEditStep2.tsx"; +import ProjEditStep3 from "../../route/proj/edit/ProjEditStep3.tsx"; +import ProjEditStep4 from "../../route/proj/edit/ProjEditStep4.tsx"; const router = createBrowserRouter([ { path: '/', - element: + element: }, { path: '/proj-create', - element: + element: }, { path: '/proj-new/:projChargeType', - element: + element: }, { path: '/proj-edit/:projId', - element: + element: + }, + { + path: '/proj-edit/step1/:projId', + element: + }, + { + path: '/proj-edit/step2/:projId', + element: + }, + { + path: '/proj-edit/step3/:projId', + element: + }, + { + path: '/proj-edit/step4/:projId', + element: }, { path: '/agent-select/:projId', - element: + element: } ]) diff --git a/src/route/proj/ProjEdit.tsx b/src/route/proj/ProjEdit.tsx index dad0dc5..036d7f2 100644 --- a/src/route/proj/ProjEdit.tsx +++ b/src/route/proj/ProjEdit.tsx @@ -1,6 +1,6 @@ import './proj-edit.css'; -import {Link, useNavigate} from "react-router-dom"; -import {Breadcrumb, Button} from "antd"; +import {Link, useNavigate, useParams} from "react-router-dom"; +import {Breadcrumb, Button, message} from "antd"; import StepProjEdit from "../../components/step/StepProjEdit.tsx"; import CardProjEdit from "../../components/card/CardProjEdit.tsx"; import {Process} from "../../interfaces/step/IStepProj.ts"; @@ -8,13 +8,130 @@ import CardProjLoading from "../../components/card/CardProjLoading.tsx"; import CardProjResult from "../../components/card/CardProjResult.tsx"; import CardProjDownload from "../../components/card/CardProjDownload.tsx"; import CardProjJump from "../../components/card/CardProjJump.tsx"; +import {useEffect, useState} from "react"; +import {get} from "../../util/AjaxUtils.ts"; +import {EditStepEnum, IProjEdit} from "../../interfaces/card/ICardProj.ts"; export default function ProjEdit() { const nav = useNavigate(); + const pathParams = useParams(); + + const [messageApi, contextHolder] = message.useMessage(); + const [editStepArray, setEditStepArray] = useState([]); + const [configArray, setConfigArray] = useState([]); + const [isAllStepEdited, setIsAllStepEdited] = useState(false); + const [isAllConfig, setIsAllConfig] = useState(false); + const [canGenerate, setCanGenerate] = useState(false); const height = window.innerHeight - 240; + + const renderEditStep = (editSteps: any[]) => { + const editStepArray: IProjEdit[] = []; + editStepArray.push( + { + title: '标题简介', + desc: '完善代码、样式类型和详细介绍等内容', + step: 1, + status: editSteps[0].editStatus, + handleEdit() { + nav(`/proj-edit/step1/${pathParams.projId}`) + } + }, + { + title: '基本信息', + desc: '完善项目简介、编程语言、版本、公司等内容', + step: 2, + status: editSteps[1].editStatus, + handleEdit() { + nav(`/proj-edit/step2/${pathParams.projId}`) + } + }, + { + title: '软件功能特点', + desc: '请完善软件功能特点', + step: 3, + status: editSteps[2].editStatus, + handleEdit() { + nav(`/proj-edit/step3/${pathParams.projId}`) + } + }, + { + title: '著作人信息', + desc: '请完善著作人相关信息', + step: 4, + status: editSteps[3].editStatus, + handleEdit() { + nav(`/proj-edit/step4/${pathParams.projId}`) + } + }, + { + title: '申请人信息', + desc: '请完善申请人信息', + step: 5, + status: editSteps[4].editStatus, + handleEdit() { + } + }, + { + title: '选择登录页面', + desc: '选择软件的登录页面模板', + step: 6, + status: editSteps[5].editStatus, + handleEdit() { + } + } + ) + setEditStepArray(editStepArray); + } + + const renderSetting = () => { + const configArray: IProjEdit[] = []; + configArray.push( + { + title: '登录界面设置', + desc: '请对登录界面完成个性化设置', + step: 1, + btnName: '设置', + status: EditStepEnum.UN_EDIT, + handleEdit() { + } + }, + { + title: '系统菜单管理', + desc: '请对系统菜单进行设置', + step: 2, + btnName: '设置', + status: EditStepEnum.UN_EDIT, + handleEdit() { + } + }, + { + title: '菜单顺序', + desc: '调整菜单顺序', + step: 3, + btnName: '设置', + status: EditStepEnum.UN_EDIT, + handleEdit() { + } + } + ) + setConfigArray(configArray); + } + + useEffect(() => { + get({ + messageApi: messageApi, + url: `/api/proj/get/${pathParams.projId}`, + onSuccess({data}) { + renderEditStep(data.editSteps); + renderSetting(); + } + }) + }, []) + return ( <> + {contextHolder} 首页}, @@ -24,26 +141,46 @@ export default function ProjEdit() { />
- { + { + editStepArray.map((item, index) => { + return + }) + } - }} - /> - - { - + + { + configArray.map((item, index) => { + return + }) + } + { + nav('/agent-select/2'); }} /> - { console.log('编辑') }} @@ -74,10 +211,16 @@ export default function ProjEdit() {
-
+ ) } \ No newline at end of file diff --git a/src/route/proj/ProjNew.tsx b/src/route/proj/ProjNew.tsx index 8ce38b9..cd1ed1a 100644 --- a/src/route/proj/ProjNew.tsx +++ b/src/route/proj/ProjNew.tsx @@ -27,8 +27,8 @@ export default function ProjNew() { projName: '', projIntroduction: '', }); + const [createProjId, setCreateProjId] = useState(''); const listProjChargeAdditional: string[] = []; - let createProjId = ''; useEffect(() => { get({ @@ -72,10 +72,6 @@ export default function ProjNew() { }) }, []); - const onBack = () => { - nav(-1); - } - return ( <> {contextHolder} @@ -128,7 +124,9 @@ export default function ProjNew() { style={{backgroundColor: 'var(--color-primary)'}}> 提交并付款 - @@ -157,7 +155,7 @@ export default function ProjNew() { }, onSuccess({data}) { setIsEditModalOpen(true); - createProjId = data.data; + setCreateProjId(data.data); }, onFinally() { setLoading(false); diff --git a/src/route/proj/edit/ProjEditStep1.tsx b/src/route/proj/edit/ProjEditStep1.tsx new file mode 100644 index 0000000..5becd00 --- /dev/null +++ b/src/route/proj/edit/ProjEditStep1.tsx @@ -0,0 +1,198 @@ +import './proj-edit-step.css'; +import {Breadcrumb, Col, Flex, message, Modal, Row, Select, Spin} from "antd"; +import {Link, useNavigate, useParams} from "react-router-dom"; +import {useEffect, useState} from "react"; +import {get, put} from "../../../util/AjaxUtils.ts"; +import {Button, Form, Input} from 'antd'; +import {AxiosResponse} from "axios"; + +const {TextArea} = Input; + +type FieldType = { + projName: string; + projIntroduction: string; + projStyleType: string; + projCodeType: string; + projDesc: string; +}; + +export default function ProjEditStep1() { + const nav = useNavigate(); + const pathParams = useParams(); + const [messageApi, contextHolder] = message.useMessage(); + const [form] = Form.useForm(); + const [loading, setLoading] = useState(false); + const [isEditModalOpen, setIsEditModalOpen] = useState(false); + const height = window.innerHeight - 180; + + useEffect(() => { + get({ + messageApi, + url: `/api/proj/get/edit-step1/${pathParams.projId}`, + onSuccess({data}: AxiosResponse) { + form.setFieldsValue({ + projName: data.projName, + projIntroduction: data.projIntroduction, + projStyleType: data.projStyleType, + projCodeType: data.projCodeType, + projDesc: data.projDesc + }) + } + }) + }, []) + + return ( + <> + {contextHolder} + 首页}, + {title: 创建项目}, + {title: 编辑项目}, + {title: '标题简介'}, + ]} + /> +
+
+
{ + setIsEditModalOpen(true); + }} + autoComplete="off" + > + + + + label="项目名称" + name="projName" + rules={[{required: true, message: '请输入项目名称'}]} + > + + + + + + + + label="项目简介" + name="projIntroduction" + rules={[{required: true, message: '请输入项目简介'}]} + > +