diff --git a/package.json b/package.json index db80102..01cfb7b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "qs": "^6.14.1", "react": "^19.2.3", "react-dom": "^19.2.3", + "react-router-dom": "^6.30.3", "valtio": "^2.3.0", "zustand": "^5.0.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb7f179..67e2087 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: react-dom: specifier: ^19.2.3 version: 19.2.3(react@19.2.3) + react-router-dom: + specifier: ^6.30.3 + version: 6.30.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) valtio: specifier: ^2.3.0 version: 2.3.0(@types/react@19.2.7)(react@19.2.3) @@ -736,6 +739,10 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@remix-run/router@1.23.2': + resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} + engines: {node: '>=14.0.0'} + '@rolldown/binding-android-arm64@1.0.0-beta.53': resolution: {integrity: sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1301,6 +1308,19 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} + react-router-dom@6.30.3: + resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.30.3: + resolution: {integrity: sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react@19.2.3: resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} @@ -2178,6 +2198,8 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@remix-run/router@1.23.2': {} + '@rolldown/binding-android-arm64@1.0.0-beta.53': optional: true @@ -2675,6 +2697,18 @@ snapshots: react-refresh@0.18.0: {} + react-router-dom@6.30.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@remix-run/router': 1.23.2 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-router: 6.30.3(react@19.2.3) + + react-router@6.30.3(react@19.2.3): + dependencies: + '@remix-run/router': 1.23.2 + react: 19.2.3 + react@19.2.3: {} require-directory@2.1.1: {} diff --git a/src/configs/companyConfig.ts b/src/configs/companyConfig.ts new file mode 100644 index 0000000..39da72d --- /dev/null +++ b/src/configs/companyConfig.ts @@ -0,0 +1,12 @@ +/** + * 企业状态 + */ +export const stateObj: any = { + 1: '正常', + 2: '禁用', +}; + +export const stateOptions = [ + { label: '正常', value: '1' }, + { label: '禁用', value: '2' }, +]; diff --git a/src/main.tsx b/src/main.tsx index f329669..52bb540 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,9 +1,12 @@ import { createRoot } from 'react-dom/client'; import './index.css'; +import { HashRouter } from 'react-router-dom'; import App from './App.tsx'; createRoot(document.getElementById('root')!).render( // - , + + , + , // , ); diff --git a/src/pages/Company/List/components/CompanyEditModal.tsx b/src/pages/Company/List/components/CompanyEditModal.tsx new file mode 100644 index 0000000..947bff2 --- /dev/null +++ b/src/pages/Company/List/components/CompanyEditModal.tsx @@ -0,0 +1,139 @@ +import { Button, DatePicker, Form, Input, notification, Select } from 'antd'; +import TextArea from 'antd/lib/input/TextArea'; +import dayjs from 'dayjs'; +import { stringify } from 'qs'; +import type React from 'react'; +import { useImperativeHandle, useState } from 'react'; +import ModalPlugin from '@/components/ModalPlugin'; +import { stateOptions } from '@/configs/usersConfig'; +import { CompanyServices } from '@/services/CompanyServices'; +import type { IRef } from '@/utils/type'; +import { useRequest } from '@/utils/useRequest'; + +interface IProps extends IRef { + onCallback?: () => void; +} + +export type ICompanyEditModalType = { + show: (data?: any) => void; +}; + +export const CompanyEditModal: React.FC = (props) => { + const [open, setOpen] = useState(false); + const [title, setTitle] = useState(''); + const [form] = Form.useForm(); + const [data, setData] = useState(null); + + // 请求成功回调 + const success = (res: any) => { + if (res.err_code === 0) { + notification.success({ message: '保存成功' }); + props.onCallback?.(); + setOpen(false); + form.resetFields(); // 提交成功重置表单 + } + }; + + //const { loading: addLoading, request: addRequest } = useRequest(CompanyServices.add, { onSuccess: success }); + const { loading: editLoading, request: editRequest } = useRequest(CompanyServices.edit, { onSuccess: success }); + + const save = async () => { + try { + const values = await form.validateFields(); + const [eff_date, exp_date] = values.date_range || []; + values.eff_date = eff_date?.format('YYYY-MM-DD') || null; + values.exp_date = exp_date?.format('YYYY-MM-DD') || null; + + delete values.date_range; + + // 编辑场景带上主键 + if (data?.company_id) { + values.company_id = data.company_id; + editRequest(stringify(values)); + } else { + //addRequest(stringify(values)); + } + } catch (error) { + console.log('表单验证未通过', error); + } + }; + + useImperativeHandle(props.ref, () => ({ + show: (data?: any) => { + setTitle(data ? `${data.company_name} 编辑` : '新增'); + setOpen(true); + setData(data); + + if (data) { + // 编辑场景初始化表单 + form.setFieldsValue({ + company_name: data.company_name, + company_address: data.company_address, + erp_name: data.erp_name, + date_range: data.eff_date && data.exp_date ? [dayjs(data.eff_date), dayjs(data.exp_date)] : undefined, + company_state: String(data.company_state), + }); + } else { + form.resetFields(); + } + }, + })); + + return ( + setOpen(false)} + title={title} + footer={[ + , + , + ]} + > +
+ + + + + + + + + + + + + +