From 03177e1d421c090185dc3a5f57a9d3704334d94e Mon Sep 17 00:00:00 2001 From: 杨磊 <505174330@qq.com> Date: 星期五, 25 七月 2025 09:48:19 +0800 Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/OAManage --- src/pages/HumanResourceManagement/applicationForSecondment/index.tsx | 119 +++ config/routes.ts | 13 src/pages/HumanResourceManagement/dismissalApplication/index.less | 0 src/pages/HumanResourceManagement/nominationForAppointment/index.less | 56 - src/pages/HumanResourceManagement/resignationApplication/index.less | 0 src/components/ApplyIndex/components/apply.tsx | 153 ++++ src/pages/HumanResourceManagement/changeRequest/index.less | 0 src/pages/HumanResourceManagement/challengeForCause/index.tsx | 78 ++ src/pages/HumanResourceManagement/changeRequest/index.tsx | 168 +++++ src/components/ApplyIndex/components/staff.tsx | 0 src/pages/HumanResourceManagement/nominationForAppointment/index.tsx | 359 ++-------- /dev/null | 113 --- src/pages/HumanResourceManagement/retirementManagement/index.tsx | 253 +++++++ src/pages/HumanResourceManagement/applicationForSecondment/index.less | 0 src/pages/HumanResourceManagement/challengeForCause/index.less | 0 src/pages/HumanResourceManagement/retirementManagement/index.less | 0 src/pages/HumanResourceManagement/dismissalApplication/index.tsx | 69 ++ src/pages/HumanResourceManagement/resignationApplication/index.tsx | 96 +++ src/components/ApplyIndex/index.tsx | 322 ++++++++++ src/components/ApplyIndex/index.less | 62 + 20 files changed, 1,404 insertions(+), 457 deletions(-) diff --git a/config/routes.ts b/config/routes.ts index c95ab5a..06c47e3 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -105,17 +105,18 @@ { path: '/humanResourceManagement/employeeInformation', name: '鍛樺伐淇℃伅', component: './Admin' }, { path: '/humanResourceManagement/contractManagement', name: '鍚堝悓绠$悊', component: './HumanResourceManagement/contractManagement' }, { path: '/humanResourceManagement/nominationForAppointment', name: '浠昏亴鎻愬悕', component: './HumanResourceManagement/nominationForAppointment' }, - { path: '/humanResourceManagement/dismissalApplication', name: '鍏嶈亴鐢宠', component: './Admin' }, + { path: '/humanResourceManagement/dismissalApplication', name: '鍏嶈亴鐢宠', component: './HumanResourceManagement/dismissalApplication' }, + { path: '/humanResourceManagement/transferApplication', name: '璋冨叆鐢宠', component: './Admin' }, { path: '/humanResourceManagement/transferOutApplication', name: '璋冨嚭鐢宠', component: './Admin' }, - { path: '/humanResourceManagement/changeRequest', name: '鍙樺姩鐢宠', component: './Admin' }, + { path: '/humanResourceManagement/changeRequest', name: '鍙樺姩鐢宠', component: './HumanResourceManagement/changeRequest' }, // { path: '/humanResourceManagement/transferApplication', name: '杞换鐢宠', component: './Admin' }, - { path: '/humanResourceManagement/applicationForSecondment', name: '鎸傝亴鐢宠', component: './Admin' }, - { path: '/humanResourceManagement/challengeForCause', name: '鍥為伩鐢宠', component: './Admin' }, - { path: '/humanResourceManagement/resignationApplication', name: '绂昏亴鐢宠', component: './Admin' }, + { path: '/humanResourceManagement/applicationForSecondment', name: '鎸傝亴鐢宠', component: './HumanResourceManagement/applicationForSecondment' }, + { path: '/humanResourceManagement/challengeForCause', name: '鍥為伩鐢宠', component: './HumanResourceManagement/challengeForCause' }, + { path: '/humanResourceManagement/resignationApplication', name: '绂昏亴鐢宠', component: './HumanResourceManagement/resignationApplication' }, // { path: '/humanResourceManagement/dismissalApplication', name: '杈為��鐢宠', component: './Admin' }, // { path: '/humanResourceManagement/retirementManagement', name: '绂讳紤绠$悊', component: './Admin' }, - { path: '/humanResourceManagement/retirementManagement', name: '閫�浼戠鐞�', component: './Admin' }, + { path: '/humanResourceManagement/retirementManagement', name: '閫�浼戠鐞�', component: './HumanResourceManagement/retirementManagement' }, { path: '/humanResourceManagement/compulsoryRetirementApplication', name: '寮哄埗閫�浼戠敵璇�', component: './Admin' }, ], }, diff --git a/src/components/ApplyIndex/components/apply.tsx b/src/components/ApplyIndex/components/apply.tsx new file mode 100644 index 0000000..d8f2721 --- /dev/null +++ b/src/components/ApplyIndex/components/apply.tsx @@ -0,0 +1,153 @@ +import { + Button, + Col, + DatePicker, + Divider, + Form, + Input, + Modal, + Row, + Select, +} from "antd"; +import React, { useEffect, useState } from "react"; + +interface ApplyProps { + visible: boolean; + onCancel?: () => void; + setFormData: (data: any) => void; + applyType: string; + title: string; + formItems: any[]; +} + +const Apply: React.FC<ApplyProps> = (props) => { + const { visible, setFormDat, onCancel, applyType, title, formItems } = props; + + const [staffVisible, setStaffVisible] = useState(false); + + const onFinish = (values: any) => { + console.log(values); + // setFormDat(values); + }; + + // 鎵撳紑鍛樺伐鍒楄〃 + const onStaffVisible = () => { + setStaffVisible(true); + }; + + // 璁剧疆閫変腑鍛樺伐 + const onSetStaff = (val: any) => { + console.log(val); + }; + + useEffect(() => { + if (visible) { + setStaffVisible(false); + } + }, [visible]); + + return ( + <Modal + width={910} + title={title + "鐢宠"} + open={visible} + onCancel={onCancel} + footer={null} + className="ModelForm" + > + <Form + name="basic" + initialValues={{ remember: true }} + style={{ paddingTop: 20 }} + onFinish={onFinish} + autoComplete="off" + > + <Row> + {formItems?.length && + formItems.map((item, index) => { + if (item.type === "input") { + return ( + <Col span={item.width > 300 ? 24 : 12} key={index}> + <Form.Item + labelCol={{ span: item.labelCol }} + label={item.label} + name={item.name} + rules={item.rules} + > + <Input style={{ width: item.width }} /> + </Form.Item> + </Col> + ); + } else if (item.type === "select") { + return ( + <Col span={12} key={index}> + <Form.Item + labelCol={{ span: item.labelCol }} + label={item.label} + name={item.name} + rules={item.rules} + > + <Select + options={item?.options} + style={{ width: item.width }} + /> + </Form.Item> + </Col> + ); + } else if (item.type === "textArea") { + return ( + <Col span={24} key={index}> + <Form.Item + labelCol={{ span: item.labelCol }} + label={item.label} + name={item.name} + rules={item.rules} + > + <Input.TextArea + style={{ width: item.width }} + showCount + maxLength={item?.maxLength || 100} + /> + </Form.Item> + </Col> + ); + } else if (item.type === "divider") { + return ( + <Col span={24} key={index}> + <Divider orientation="left" style={{ marginBottom: 20 }}> + {item.label} + </Divider> + </Col> + ); + } else if (item.type === "date") { + return ( + <Col span={12} key={index}> + <Form.Item + labelCol={{ span: item.labelCol }} + label={item.label} + name={item.name} + rules={item.rules} + > + <DatePicker style={{ width: item.width }} /> + </Form.Item> + </Col> + ); + } else { + return null; + } + })} + </Row> + <Form.Item label={null}> + <div className="functionBtn"> + <Button type="primary" htmlType="submit"> + 鎻愪氦 + </Button> + <Button onClick={onCancel}>鍏抽棴</Button> + </div> + </Form.Item> + </Form> + </Modal> + ); +}; + +export default Apply; diff --git a/src/pages/HumanResourceManagement/nominationForAppointment/components/staff.tsx b/src/components/ApplyIndex/components/staff.tsx similarity index 100% rename from src/pages/HumanResourceManagement/nominationForAppointment/components/staff.tsx rename to src/components/ApplyIndex/components/staff.tsx diff --git a/src/components/ApplyIndex/index.less b/src/components/ApplyIndex/index.less new file mode 100644 index 0000000..2a53ebf --- /dev/null +++ b/src/components/ApplyIndex/index.less @@ -0,0 +1,62 @@ +.ApplyIndex { + min-width: 900px; + + .searchTitle { + font-size: 16px; + font-weight: bold; + margin-bottom: 10px; + color: #333; + display: flex; + align-items: center; + justify-content: space-between; + } + + .searchBox { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + + .searchItem { + margin-right: 20px; + } + + .searchBtn { + flex: 1; + display: flex; + justify-content: flex-end; + + button { + margin-left: 10px; + } + } + } + + .paginationCard { + .ant-card-body { + padding: 10px !important; + display: flex; + justify-content: flex-end; + align-items: center; + } + } + +} + + +.functionBtn { + width: 100%; + display: flex; + justify-content: flex-end; + align-items: center; + + button { + margin: 10px 0 0 10px; + } +} + +.ModelForm { + .ant-modal-content { + padding-bottom: 1px !important; + } +} \ No newline at end of file diff --git a/src/components/ApplyIndex/index.tsx b/src/components/ApplyIndex/index.tsx new file mode 100644 index 0000000..4e3bc9a --- /dev/null +++ b/src/components/ApplyIndex/index.tsx @@ -0,0 +1,322 @@ +import { PageContainer } from "@ant-design/pro-components"; +import { + Button, + Card, + Input, + Pagination, + Select, + Table, + TableProps, + Tabs, +} from "antd"; +import React, { useEffect, useRef, useState } from "react"; +import Apply from "./components/apply"; +import "./index.less"; + +interface ApplyIndexParams { + title: string; // 褰撳墠鐢宠琛ㄥ崟鍚嶇О + applyType: string; // 褰撳墠鐢宠绫诲瀷 濡傦細绂昏亴銆佸彉鍔ㄣ�佷换鑱� + formItems: any[]; // 鑷畾涔夎〃鍗� +} + +const ApplyIndex: React.FC<ApplyIndexParams> = (props) => { + const { title, applyType, formItems } = props; + const [activeKey, setActiveKey] = useState("wait"); // tabs閫変腑 + const tableRef = useRef<any>(null); // ref + + // 鐢宠 + const [visible, setVisible] = useState(false); + const [formData, setFormData] = useState<any>({}); + + // tableData + const [tableData, setTableData] = useState<any>([]); + + // 閮ㄩ棬鏌ヨ鍊� + const [departmentValue, setDepartmentValue] = useState<string>(); + // 鑱屼綅鏌ヨ鍊� + const [positionValue, setPositionValue] = useState<string>(); + // 濮撳悕鏌ヨ鍊� + const [userNameValue, setUserNameValue] = useState<string>(); + + // checkBox閫変腑鍊� + const [checkedRows, setCheckedRows] = useState<React.Key[]>([]); + + // Tab閫夐」鍗℃暟鎹� + const TabsItems = [ + { + label: `寰呭鐞嗙殑`, + key: `wait`, + children: "", + }, + { + label: `鎵�鏈夌殑`, + key: `all`, + children: "", + }, + ]; + + // 閮ㄩ棬鍚嶇О鏁版嵁 + const departmentOptions = [ + { + value: "jack", + label: "Jack", + }, + { + value: "lucy", + label: "Lucy", + }, + { + value: "tom", + label: "Tom", + }, + ]; + + // 鑱屼綅鍚嶇О鏁版嵁 + const positionOptions = [ + { + value: "jack", + label: "Jack", + }, + { + value: "lucy", + label: "Lucy", + }, + { + value: "tom", + label: "Tom", + }, + ]; + + // 鎵撳紑鐢宠 + const openApply = () => { + setVisible(true); + }; + + // 鍏抽棴鐢宠 + const onCancelApply = () => { + setVisible(false); + setFormData({}); + }; + + const columns: any[] = [ + { + title: "浠昏亴鎻愬悕鍚嶇О", + key: "name", + dataIndex: "name", + align: "center", + }, + { + title: "鍛樺伐濮撳悕", + key: "employeeName", + dataIndex: "employeeName", + align: "center", + }, + { + title: "浠昏亴鏂瑰紡", + key: "applyType", + dataIndex: "applyType", + align: "center", + }, + { + title: "鎵ц鏃堕棿", + key: "executeTime", + dataIndex: "executeTime", + align: "center", + }, + { + title: "鐘舵��", + key: "state", + dataIndex: "state", + align: "center", + }, + { + title: "鎿嶄綔", + dataIndex: "operation", + align: "center", + }, + ]; + + // Tabs鍒囨崲 + const onChangeTabs = (key: string) => { + setActiveKey(key); + }; + + // 鑱屼綅鍚嶇О鏌ヨ + const onChangeSelectPosition = (value: string) => { + setPositionValue(value); + }; + + // 閮ㄩ棬鍚嶇О鏌ヨ + const onChangeSelectDepartment = (value: string) => { + setDepartmentValue(value); + }; + + // 濮撳悕鏌ヨ + const changeUserName = (e: any) => { + setUserNameValue(e.target.value); + }; + + // 鑾峰彇浜哄憳鏁版嵁 + const getPersonalData = async () => { + const res = await new Promise((resolve, reject) => { + // Simulate an asynchronous operation, such as an API call + setTimeout(() => { + const success = true; + if (success) { + // If the operation is successful, resolve the Promise with data + const data = [ + { + name: "Nomination 1", + employeeName: "John", + applyType: "Full-time", + executeTime: "2025-07-21", + state: "Pending", + key: "1", + }, + { + name: "Nomination 2", + employeeName: "Jane", + applyType: "Part-time", + executeTime: "2025-07-22", + state: "Approved", + key: "2", + }, + ]; + resolve(data); + } else { + // If the operation fails, reject the Promise with an error + reject(new Error("Failed to fetch data")); + } + }, 1000); + }); + setTableData(res); + }; + + const rowSelection: TableProps["rowSelection"] = { + onChange: (selectedRowKeys: React.Key[], selectedRows: any[]) => { + setCheckedRows(selectedRows); + console.log( + `selectedRowKeys: ${selectedRowKeys}`, + "selectedRows: ", + selectedRows + ); + }, + }; + + useEffect(() => { + if (applyType) { + getPersonalData(); + } + }, [applyType]); + + return ( + <PageContainer className="ApplyIndex"> + <Tabs + defaultActiveKey={activeKey} + items={TabsItems} + onChange={onChangeTabs} + /> + <div className="searchTitle">{title}鏌ヨ</div> + <Card style={{ marginBottom: 20 }}> + <div className="searchBox"> + <div className="searchItem"> + <span>閮ㄩ棬鍚嶇О锛�</span> + <Select + style={{ width: 200 }} + value={departmentValue} + onChange={onChangeSelectDepartment} + options={departmentOptions} + allowClear + /> + </div> + <div className="searchItem"> + <span>鑱屼綅鍚嶇О锛�</span> + <Select + style={{ width: 200 }} + value={positionValue} + onChange={onChangeSelectPosition} + options={positionOptions} + allowClear + /> + </div> + <div className="searchItem"> + <span>鍛樺伐濮撳悕锛堟垨鎷奸煶棣栧瓧姣嶏級锛�</span> + <Input + style={{ width: 200 }} + value={userNameValue} + onChange={changeUserName} + allowClear + /> + </div> + <div className="searchBtn"> + <Button + type="primary" + onClick={() => { + tableRef?.current?.reload(); + }} + > + 鏌ヨ + </Button> + <Button + onClick={() => { + tableRef?.current?.reload(); + setDepartmentValue(""); + setPositionValue(""); + setUserNameValue(""); + }} + > + 閲嶇疆 + </Button> + </div> + </div> + </Card> + <div className="searchTitle"> + <span>{title}绠$悊</span> + <div className="btnClass"> + {checkedRows.length > 0 && ( + <Button + type="primary" + danger + onClick={() => { + console.log("鎵归噺鍒犻櫎", checkedRows); + // 鎵ц鎵归噺鍒犻櫎鎿嶄綔 + }} + > + 鎵归噺鍒犻櫎 + </Button> + )} + <Button style={{ marginLeft: 10 }} type="primary" onClick={openApply}> + 鐢宠 + </Button> + <Apply + visible={visible} + setFormData={setFormData} + onCancel={onCancelApply} + applyType={applyType} + title={title} + formItems={formItems} + /> + </div> + </div> + <Card style={{ marginBottom: 5 }}> + <Table + rowSelection={{ type: "checkbox", ...rowSelection }} + columns={columns} + dataSource={tableData} + pagination={false} + /> + </Card> + <Card className="paginationCard"> + <Pagination + total={50} + current={1} + pageSize={10} + size="small" + // onChange={handlePageChange} + /> + </Card> + </PageContainer> + ); +}; + +export default ApplyIndex; diff --git a/src/pages/HumanResourceManagement/applicationForSecondment/index.less b/src/pages/HumanResourceManagement/applicationForSecondment/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/applicationForSecondment/index.less diff --git a/src/pages/HumanResourceManagement/applicationForSecondment/index.tsx b/src/pages/HumanResourceManagement/applicationForSecondment/index.tsx new file mode 100644 index 0000000..e437869 --- /dev/null +++ b/src/pages/HumanResourceManagement/applicationForSecondment/index.tsx @@ -0,0 +1,119 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const NominationForAppointment: React.FC = () => { + const params = { + title: "鎸傝亴", + applyType: "applicationForSecondment", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鎸傝亴鍗曚綅绫诲瀷", + name: "secondmentUnitType", + type: "select", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鎸傝亴鍗曚綅", + name: "secondmentUnit", + rules: [{ required: true, message: "璇烽�夋嫨鎸傝亴鍗曚綅!" }], + type: "select", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "宀椾綅", + name: "post", + type: "select", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鎸傝亴鑱屼綅", + name: "secondmentPosition", + rules: [{ required: true, message: "璇烽�夋嫨鎸傝亴鑱屼綅!" }], + type: "select", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鎸傝亴閮ㄩ棬", + name: "secondmentDepartment", + rules: [{ required: true, message: "璇疯緭鍏ユ寕鑱岄儴闂�!" }], + type: "input", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鎸傝亴鑱岀骇", + name: "secondmentRank", + rules: [{ required: true, message: "璇烽�夋嫨鎸傝亴鑱岀骇!" }], + type: "select", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "寮�濮嬫椂闂�", + name: "startTime", + rules: [{ required: true, message: "璇烽�夋嫨寮�濮嬫椂闂�!" }], + type: "date", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "缁撴潫鏃堕棿", + name: "endTime", + rules: [{ required: true, message: "璇烽�夋嫨缁撴潫鏃堕棿!" }], + type: "date", + pageType: "applicationForSecondment", + labelCol: 6, + width: 300, + }, + { + label: "鍖哄煙", + name: "domain", + type: "textArea", + pageType: "applicationForSecondment", + labelCol: 3, + width: 730, + }, + { + label: "鎸傝亴鍘熺敱", + name: "reason", + type: "textArea", + pageType: "applicationForSecondment", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default NominationForAppointment; diff --git a/src/pages/HumanResourceManagement/challengeForCause/index.less b/src/pages/HumanResourceManagement/challengeForCause/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/challengeForCause/index.less diff --git a/src/pages/HumanResourceManagement/challengeForCause/index.tsx b/src/pages/HumanResourceManagement/challengeForCause/index.tsx new file mode 100644 index 0000000..8c85fd1 --- /dev/null +++ b/src/pages/HumanResourceManagement/challengeForCause/index.tsx @@ -0,0 +1,78 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const ChallengeForCause: React.FC = () => { + const params = { + title: "鍥為伩", + applyType: "challengeForCause", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "challengeForCause", + labelCol: 6, + width: 300, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "challengeForCause", + labelCol: 6, + width: 300, + }, + { + label: "寮�濮嬫椂闂�", + name: "startTime", + rules: [{ required: true, message: "璇疯緭鍏ュ紑濮嬫椂闂�!" }], + type: "date", + pageType: "challengeForCause", + labelCol: 6, + width: 300, + }, + { + label: "缁撴潫鏃堕棿", + name: "endTime", + rules: [{ required: true, message: "璇疯緭鍏ョ粨鏉熸椂闂�!" }], + type: "date", + pageType: "challengeForCause", + labelCol: 6, + width: 300, + }, + { + label: "鏇夸唬浜哄憳", + name: "substitute", + rules: [{ required: true, message: "璇疯緭鍏ユ浛浠d汉鍛�!" }], + type: "input", + pageType: "challengeForCause", + labelCol: 6, + width: 300, + }, + { + label: "鍥為伩鍘熺敱", + name: "reason", + rules: [{ required: true, message: "璇疯緭鍏ュ洖閬垮師鐢�!" }], + type: "textArea", + pageType: "challengeForCause", + labelCol: 3, + width: 730, + }, + { + label: "鍥為伩鍐呭", + name: "avoidContent", + rules: [{ required: true, message: "璇疯緭鍏ュ洖閬垮唴瀹�!" }], + type: "textArea", + pageType: "challengeForCause", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default ChallengeForCause; diff --git a/src/pages/HumanResourceManagement/changeRequest/index.less b/src/pages/HumanResourceManagement/changeRequest/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/changeRequest/index.less diff --git a/src/pages/HumanResourceManagement/changeRequest/index.tsx b/src/pages/HumanResourceManagement/changeRequest/index.tsx new file mode 100644 index 0000000..6c33017 --- /dev/null +++ b/src/pages/HumanResourceManagement/changeRequest/index.tsx @@ -0,0 +1,168 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const ChangeRequest: React.FC = () => { + const params = { + title: "鍙樺姩", + applyType: "changeRequest", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "鍙樺姩鏃ユ湡", + name: "changeTime", + rules: [{ required: true, message: "璇烽�夋嫨鍙樺姩鏃ユ湡!" }], + type: "date", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨姩绫诲瀷", + name: "changeType", + rules: [{ required: true, message: "璇烽�夋嫨璋冨姩绫诲瀷!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠閮ㄩ棬", + name: "changeBeforeDepartment", + rules: [{ required: true, message: "璇烽�夋嫨璋冨墠閮ㄩ棬!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗閮ㄩ棬", + name: "changeAfterDepartment", + rules: [{ required: true, message: "璇烽�夋嫨璋冨悗閮ㄩ棬!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠鑱屼綅", + name: "changeBeforePosition", + rules: [{ required: true, message: "璇烽�夋嫨璋冨墠鑱屼綅!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗鑱屼綅", + name: "changeAfterPosition", + rules: [{ required: true, message: "璇烽�夋嫨璋冨悗鑱屼綅!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠鑱岀骇", + name: "changeBeforeRank", + rules: [{ required: true, message: "璇烽�夋嫨璋冨墠鑱岀骇!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗鑱岀骇", + name: "changeAfterRank", + rules: [{ required: true, message: "璇烽�夋嫨璋冨悗鑱岀骇!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠鍩烘湰宸ヨ祫", + name: "changeBeforeMoney", + rules: [{ required: true, message: "璇疯緭鍏ヨ皟鍓嶅熀鏈伐璧�!" }], + type: "input", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗鍩烘湰宸ヨ祫", + name: "changeAfterMoney", + rules: [{ required: true, message: "璇疯緭鍏ヨ皟鍚庡熀鏈伐璧�!" }], + type: "input", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠宸ョ", + name: "changeBeforeJob", + rules: [{ required: true, message: "璇烽�夋嫨璋冨墠宸ョ!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗宸ョ", + name: "changeAfterJob", + rules: [{ required: true, message: "璇烽�夋嫨璋冨悗宸ョ!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨墠鐘舵��", + name: "changeBeforeStatus", + rules: [{ required: true, message: "璇烽�夋嫨璋冨墠鐘舵��!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨悗鐘舵��", + name: "changeAfterStatus", + rules: [{ required: true, message: "璇烽�夋嫨璋冨悗鐘舵��!" }], + type: "select", + pageType: "changeRequest", + labelCol: 6, + width: 300, + }, + { + label: "璋冨姩鍘熷洜", + name: "reason", + rules: [{ required: true, message: "璇疯緭鍏ヨ皟鍔ㄥ師鍥�!" }], + type: "textArea", + pageType: "changeRequest", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default ChangeRequest; diff --git a/src/pages/HumanResourceManagement/dismissalApplication/index.less b/src/pages/HumanResourceManagement/dismissalApplication/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/dismissalApplication/index.less diff --git a/src/pages/HumanResourceManagement/dismissalApplication/index.tsx b/src/pages/HumanResourceManagement/dismissalApplication/index.tsx new file mode 100644 index 0000000..4682eef --- /dev/null +++ b/src/pages/HumanResourceManagement/dismissalApplication/index.tsx @@ -0,0 +1,69 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const DismissalApplication: React.FC = () => { + const params = { + title: "鍏嶈亴", + applyType: "dismissalApplication", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "dismissalApplication", + labelCol: 3, + width: 730, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�灞為儴闂�", + name: "department", + rules: [{ required: true, message: "璇烽�夋嫨鎵�灞為儴闂�!" }], + type: "select", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�灞炶亴浣�", + name: "position", + rules: [{ required: true, message: "璇烽�夋嫨鎵�灞炶亴浣�!" }], + type: "select", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�鍦ㄥ煄甯�", + name: "address", + rules: [{ required: true, message: "璇烽�夋嫨鎵�鍦ㄥ煄甯�!" }], + type: "select", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "鍏嶈亴鍘熺敱", + name: "reason", + rules: [{ required: true, message: "璇疯緭鍏ュ厤鑱屽師鐢�!" }], + type: "textArea", + pageType: "dismissalApplication", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default DismissalApplication; diff --git a/src/pages/HumanResourceManagement/nominationForAppointment/components/apply.tsx b/src/pages/HumanResourceManagement/nominationForAppointment/components/apply.tsx deleted file mode 100644 index c304ef2..0000000 --- a/src/pages/HumanResourceManagement/nominationForAppointment/components/apply.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { Button, DatePicker, Form, Input, Modal, Select } from 'antd'; -import React, { useEffect, useState } from 'react'; -import Staff from './staff'; - -interface ApplyProps { - visible: boolean; - onCancel?: () => void; - setFormData: (data: any) => void; -} - -const Apply: React.FC<ApplyProps> = (props) => { - const { visible, setFormDat, onCancel } = props; - - const [staffVisible, setStaffVisible] = useState(false); - - const onFinish = (values: any) => { - console.log(values); - // setFormDat(values); - }; - - // 鎵撳紑鍛樺伐鍒楄〃 - const onStaffVisible = () => { - setStaffVisible(true); - }; - - // 璁剧疆閫変腑鍛樺伐 - const onSetStaff = (val: any) => { - console.log(val); - }; - - useEffect(() => { - if (visible) { - setStaffVisible(false); - } - }, [visible]); - - return ( - <Modal width={650} title="浠昏亴鎻愬悕鐢宠" open={visible} onCancel={onCancel} footer={null}> - <Form - name="basic" - labelCol={{ span: 6 }} - initialValues={{ remember: true }} - style={{ paddingTop: 20 }} - onFinish={onFinish} - autoComplete="off" - > - <Form.Item - label="浠昏亴鎻愬悕鍚嶇О" - name="applyName" - rules={[{ required: true, message: '璇疯緭鍏ヤ换鑱屾彁鍚嶅悕绉�!' }]} - > - <Input style={{ width: 250 }} /> - </Form.Item> - - <Form.Item - label="鍛樺伐濮撳悕" - name="employeeName" - rules={[{ required: true, message: '璇烽�夋嫨鍛樺伐濮撳悕!' }]} - > - <Input style={{ width: 250 }} onClick={onStaffVisible} /> - <Staff open={staffVisible} onCancel={() => setStaffVisible(false)} setData={onSetStaff} /> - </Form.Item> - - <Form.Item - label="浠昏亴鏂瑰紡" - name="applyType" - rules={[{ required: true, message: '璇烽�夋嫨浠昏亴鏂瑰紡!' }]} - > - <Select style={{ width: 250 }} /> - </Form.Item> - - <Form.Item - label="鎵�灞炶亴浣�" - name="position" - rules={[{ required: true, message: '璇烽�夋嫨鎵�灞炶亴浣�!' }]} - > - <Select style={{ width: 250 }} /> - </Form.Item> - - <Form.Item - label="鎵ц鏃堕棿" - name="executeTime" - rules={[{ required: true, message: '璇烽�夋嫨鎵ц鏃堕棿!' }]} - > - <DatePicker style={{ width: 250 }} /> - </Form.Item> - - <Form.Item label="璇︾粏淇℃伅" name="detailInfo"> - <Input.TextArea maxLength={100} style={{ width: 350 }} /> - </Form.Item> - - <Form.Item label="鑰冩牳淇℃伅" name="testInfo"> - <Input.TextArea maxLength={100} style={{ width: 350 }} /> - </Form.Item> - - <Form.Item label="浠昏亴鍘熺敱" name="reason"> - <Input.TextArea maxLength={100} style={{ width: 350 }} /> - </Form.Item> - - <Form.Item label={null} style={{ marginBottom: 5 }}> - <div className="functionBtn"> - <Button type="primary" htmlType="submit"> - 鎻愪氦 - </Button> - <Button onClick={onCancel}>鍏抽棴</Button> - </div> - </Form.Item> - </Form> - </Modal> - ); -}; - -export default Apply; diff --git a/src/pages/HumanResourceManagement/nominationForAppointment/index.less b/src/pages/HumanResourceManagement/nominationForAppointment/index.less index 6d2cf13..e69de29 100644 --- a/src/pages/HumanResourceManagement/nominationForAppointment/index.less +++ b/src/pages/HumanResourceManagement/nominationForAppointment/index.less @@ -1,56 +0,0 @@ -.nominationForAppointmentBox { - min-width: 900px; - - .searchTitle { - font-size: 16px; - font-weight: bold; - margin-bottom: 10px; - color: #333; - display: flex; - align-items: center; - justify-content: space-between; - } - - .searchBox { - width: 100%; - display: flex; - justify-content: flex-start; - align-items: center; - - .searchItem { - margin-right: 20px; - } - - .searchBtn { - flex: 1; - display: flex; - justify-content: flex-end; - - button { - margin-left: 10px; - } - } - } - - .paginationCard { - .ant-card-body { - padding: 10px !important; - display: flex; - justify-content: flex-end; - align-items: center; - } - } - -} - - -.functionBtn { - width: 100%; - display: flex; - justify-content: flex-end; - align-items: center; - - button { - margin: 0 10px; - } -} \ No newline at end of file diff --git a/src/pages/HumanResourceManagement/nominationForAppointment/index.tsx b/src/pages/HumanResourceManagement/nominationForAppointment/index.tsx index bf36d47..371f033 100644 --- a/src/pages/HumanResourceManagement/nominationForAppointment/index.tsx +++ b/src/pages/HumanResourceManagement/nominationForAppointment/index.tsx @@ -1,289 +1,84 @@ -import { PageContainer } from '@ant-design/pro-components'; -import { Button, Card, Input, Pagination, Select, Table, TableProps, Tabs } from 'antd'; -import React, { useEffect, useRef, useState } from 'react'; -import Apply from './components/apply'; -import './index.less'; +import Apply from "@/components/ApplyIndex"; +import React from "react"; const NominationForAppointment: React.FC = () => { - const [activeKey, setActiveKey] = useState('wait'); // tabs閫変腑 - const tableRef = useRef<any>(null); // ref - - // 鐢宠 - const [visible, setVisible] = React.useState(false); - const [formData, setFormData] = React.useState<any>({}); - - // tableData - const [tableData, setTableData] = useState([]); - - // 閮ㄩ棬鏌ヨ鍊� - const [departmentValue, setDepartmentValue] = useState<string>(); - // 鑱屼綅鏌ヨ鍊� - const [positionValue, setPositionValue] = useState<string>(); - // 濮撳悕鏌ヨ鍊� - const [userNameValue, setUserNameValue] = useState<string>(); - - // checkBox閫変腑鍊� - const [checkedRows, setCheckedRows] = useState<React.Key[]>([]); - - // Tab閫夐」鍗℃暟鎹� - const TabsItems = [ - { - label: `寰呭鐞嗙殑`, - key: `wait`, - children: '', - }, - { - label: `鎵�鏈夌殑`, - key: `all`, - children: '', - }, - ]; - - // 閮ㄩ棬鍚嶇О鏁版嵁 - const departmentOptions = [ - { - value: 'jack', - label: 'Jack', - }, - { - value: 'lucy', - label: 'Lucy', - }, - { - value: 'tom', - label: 'Tom', - }, - ]; - - // 鑱屼綅鍚嶇О鏁版嵁 - const positionOptions = [ - { - value: 'jack', - label: 'Jack', - }, - { - value: 'lucy', - label: 'Lucy', - }, - { - value: 'tom', - label: 'Tom', - }, - ]; - - // 鎵撳紑鐢宠 - const openApply = () => { - setVisible(true); + const params = { + title: "浠昏亴鎻愬悕", + applyType: "nominationForAppointment", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "nominationForAppointment", + labelCol: 3, + width: 730, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "dismissalApplication", + labelCol: 6, + width: 300, + }, + { + label: "浠昏亴鏂瑰紡", + name: "applyType", + rules: [{ required: true, message: "璇烽�夋嫨浠昏亴鏂瑰紡!" }], + type: "select", + pageType: "nominationForAppointment", + labelCol: 6, + width: 300, + }, + { + label: "鎵�灞炶亴浣�", + name: "position", + rules: [{ required: true, message: "璇烽�夋嫨鎵�灞炶亴浣�!" }], + type: "select", + pageType: "nominationForAppointment", + labelCol: 6, + width: 300, + }, + { + label: "鎵ц鏃堕棿", + name: "executionTime", + rules: [{ required: true, message: "璇烽�夋嫨鎵ц鏃堕棿!" }], + type: "date", + pageType: "nominationForAppointment", + labelCol: 6, + width: 300, + }, + { + label: "璇︾粏淇℃伅", + name: "detailInfo", + type: "textArea", + pageType: "nominationForAppointment", + labelCol: 3, + width: 730, + }, + { + label: "鑰冩牳淇℃伅", + name: "assessInfo", + type: "textArea", + pageType: "nominationForAppointment", + labelCol: 3, + width: 730, + }, + { + label: "浠昏亴鍘熺敱", + name: "reason", + type: "textArea", + pageType: "nominationForAppointment", + labelCol: 3, + width: 730, + }, + ], }; - // 鍏抽棴鐢宠 - const onCancelApply = () => { - setVisible(false); - setFormData({}); - }; - - const columns: any[] = [ - { - title: '浠昏亴鎻愬悕鍚嶇О', - key: 'name', - dataIndex: 'name', - align: 'center', - }, - { - title: '鍛樺伐濮撳悕', - key: 'employeeName', - dataIndex: 'employeeName', - align: 'center', - }, - { - title: '浠昏亴鏂瑰紡', - key: 'applyType', - dataIndex: 'applyType', - align: 'center', - }, - { - title: '鎵ц鏃堕棿', - key: 'executeTime', - dataIndex: 'executeTime', - align: 'center', - }, - { - title: '鐘舵��', - key: 'state', - dataIndex: 'state', - align: 'center', - }, - { - title: '鎿嶄綔', - dataIndex: 'operation', - align: 'center', - }, - ]; - - // Tabs鍒囨崲 - const onChangeTabs = (key: string) => { - setActiveKey(key); - }; - - // 鑱屼綅鍚嶇О鏌ヨ - const onChangeSelectPosition = (value: string) => { - setPositionValue(value); - }; - - // 閮ㄩ棬鍚嶇О鏌ヨ - const onChangeSelectDepartment = (value: string) => { - setDepartmentValue(value); - }; - - // 濮撳悕鏌ヨ - const changeUserName = (e: any) => { - setUserNameValue(e.target.value); - }; - - // 鑾峰彇浜哄憳鏁版嵁 - const getPersonalData = async () => { - const res = await new Promise((resolve, reject) => { - // Simulate an asynchronous operation, such as an API call - setTimeout(() => { - const success = true; - if (success) { - // If the operation is successful, resolve the Promise with data - const data = [ - { - name: 'Nomination 1', - employeeName: 'John', - applyType: 'Full-time', - executeTime: '2025-07-21', - state: 'Pending', - key: '1', - }, - { - name: 'Nomination 2', - employeeName: 'Jane', - applyType: 'Part-time', - executeTime: '2025-07-22', - state: 'Approved', - key: '2', - }, - ]; - resolve(data); - } else { - // If the operation fails, reject the Promise with an error - reject(new Error('Failed to fetch data')); - } - }, 1000); - }); - setTableData(res); - }; - - const rowSelection: TableProps['rowSelection'] = { - onChange: (selectedRowKeys: React.Key[], selectedRows: any[]) => { - setCheckedRows(selectedRows); - console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); - }, - }; - - useEffect(() => { - getPersonalData(); - }, []); - - return ( - <PageContainer className="nominationForAppointmentBox"> - <Tabs defaultActiveKey={activeKey} items={TabsItems} onChange={onChangeTabs} /> - <div className="searchTitle">浠昏亴鎻愬悕鏌ヨ</div> - <Card style={{ marginBottom: 20 }}> - <div className="searchBox"> - <div className="searchItem"> - <span>閮ㄩ棬鍚嶇О锛�</span> - <Select - style={{ width: 200 }} - value={departmentValue} - onChange={onChangeSelectDepartment} - options={departmentOptions} - allowClear - /> - </div> - <div className="searchItem"> - <span>鑱屼綅鍚嶇О锛�</span> - <Select - style={{ width: 200 }} - value={positionValue} - onChange={onChangeSelectPosition} - options={positionOptions} - allowClear - /> - </div> - <div className="searchItem"> - <span>鍛樺伐濮撳悕锛堟垨鎷奸煶棣栧瓧姣嶏級锛�</span> - <Input - style={{ width: 200 }} - value={userNameValue} - onChange={changeUserName} - allowClear - /> - </div> - <div className="searchBtn"> - <Button - type="primary" - onClick={() => { - tableRef?.current?.reload(); - }} - > - 鏌ヨ - </Button> - <Button - onClick={() => { - tableRef?.current?.reload(); - setDepartmentValue(''); - setPositionValue(''); - setUserNameValue(''); - }} - > - 閲嶇疆 - </Button> - </div> - </div> - </Card> - <div className="searchTitle"> - <span>浠昏亴鎻愬悕绠$悊</span> - <div className="btnClass"> - {checkedRows.length > 0 && ( - <Button - type="primary" - danger - onClick={() => { - console.log('鎵归噺鍒犻櫎', checkedRows); - // 鎵ц鎵归噺鍒犻櫎鎿嶄綔 - }} - > - 鎵归噺鍒犻櫎 - </Button> - )} - <Button style={{ marginLeft: 10 }} type="primary" onClick={openApply}> - 鐢宠 - </Button> - <Apply visible={visible} setFormData={setFormData} onCancel={onCancelApply} /> - </div> - </div> - <Card style={{ marginBottom: 5 }}> - <Table - rowSelection={{ type: 'checkbox', ...rowSelection }} - columns={columns} - dataSource={tableData} - pagination={false} - /> - </Card> - <Card className="paginationCard"> - <Pagination - total={50} - current={1} - pageSize={10} - size="small" - // onChange={handlePageChange} - /> - </Card> - </PageContainer> - ); + return <Apply {...params} />; }; export default NominationForAppointment; diff --git a/src/pages/HumanResourceManagement/resignationApplication/index.less b/src/pages/HumanResourceManagement/resignationApplication/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/resignationApplication/index.less diff --git a/src/pages/HumanResourceManagement/resignationApplication/index.tsx b/src/pages/HumanResourceManagement/resignationApplication/index.tsx new file mode 100644 index 0000000..2bf415e --- /dev/null +++ b/src/pages/HumanResourceManagement/resignationApplication/index.tsx @@ -0,0 +1,96 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const NominationForAppointment: React.FC = () => { + const params = { + title: "绂昏亴", + applyType: "resignationApplication", + formItems: [ + { + label: "鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇疯緭鍏ュ悕绉�!" }], + type: "input", + pageType: "resignationApplication", + labelCol: 3, + width: 730, + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + rules: [{ required: true, message: "璇疯緭鍏ュ憳宸ュ鍚�!" }], + type: "input", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�灞為儴闂�", + name: "department", + rules: [{ required: true, message: "璇疯緭鍏ユ墍灞為儴闂�!" }], + type: "input", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�灞炶亴浣�", + name: "position", + rules: [{ required: true, message: "璇疯緭鍏ユ墍灞為儴闂�!" }], + type: "input", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "鎵�鍦ㄥ煄甯�", + name: "address", + rules: [{ required: true, message: "璇疯緭鍏ユ墍鍦ㄥ煄甯�!" }], + type: "input", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "绂昏亴绫诲瀷", + name: "resignationType", + rules: [{ required: true, message: "璇烽�夋嫨绂昏亴绫诲瀷!" }], + type: "select", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "鐢宠鏃堕棿", + name: "resignationTime", + rules: [{ required: true, message: "璇疯緭鍏ョ敵璇锋椂闂�!" }], + type: "date", + pageType: "resignationApplication", + labelCol: 6, + width: 300, + }, + { + label: "绂昏亴鍘熷洜", + name: "reason", + rules: [{ required: true, message: "璇疯緭鍏ョ鑱屽師鍥�!" }], + type: "textArea", + pageType: "resignationApplication", + labelCol: 3, + width: 730, + }, + { + label: "澶囨敞", + name: "remarks", + rules: [{ required: true, message: "璇疯緭鍏ュ娉�!" }], + type: "textArea", + pageType: "resignationApplication", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default NominationForAppointment; diff --git a/src/pages/HumanResourceManagement/retirementManagement/index.less b/src/pages/HumanResourceManagement/retirementManagement/index.less new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/pages/HumanResourceManagement/retirementManagement/index.less diff --git a/src/pages/HumanResourceManagement/retirementManagement/index.tsx b/src/pages/HumanResourceManagement/retirementManagement/index.tsx new file mode 100644 index 0000000..0310518 --- /dev/null +++ b/src/pages/HumanResourceManagement/retirementManagement/index.tsx @@ -0,0 +1,253 @@ +import Apply from "@/components/ApplyIndex"; +import React from "react"; + +const NominationForAppointment: React.FC = () => { + const params = { + title: "閫�浼�", + applyType: "retirementManagement", + formItems: [ + { + label: "閫夋嫨鍛樺伐", + name: "selectStaff", + type: "select", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鍩虹淇℃伅", + type: "divider", + pageType: "retirementManagement", + }, + { + label: "鍛樺伐濮撳悕", + name: "employeeName", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "閮ㄩ棬鍚嶇О", + name: "departmentName", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "韬唤璇佸彿", + name: "idCardNumber", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鎬у埆", + name: "sex", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "绫嶈疮", + name: "origin", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "闆囦剑绫诲瀷", + name: "employmentType", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鍑虹敓骞存湀", + name: "birthDate", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "姘戞棌", + name: "nationality", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "濠氬Щ鐘跺喌", + name: "maritalStatus", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鏀挎不闈㈣矊", + name: "politicalStatus", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "姣曚笟闄㈡牎", + name: "graduationSchool", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "涓撲笟", + name: "major", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鏂囧寲绋嬪害", + name: "culturalDegree", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "宸ョ", + name: "workType", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鑱岀О", + name: "workTitle", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鎵嬫満", + name: "mobile", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鑱旂郴鍦板潃", + name: "contactAddress", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鐢靛瓙閭欢", + name: "email", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "瀹跺涵浣忓潃", + name: "homeAddress", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "鑱旂郴鐢佃瘽", + name: "contactPhone", + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "澶囨敞", + name: "remarks", + type: "textArea", + pageType: "retirementManagement", + labelCol: 3, + width: 730, + }, + { + label: "閫�浼戝緟閬�", + type: "divider", + pageType: "retirementManagement", + }, + { + label: "鐢宠鍚嶇О", + name: "applyName", + rules: [{ required: true, message: "璇峰~鍐欑敵璇峰悕绉�!" }], + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "娲ヨ创", + name: "allowance", + rules: [{ required: true, message: "璇峰~鍐欐触璐�!" }], + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "姣忔湀宸ヨ祫", + name: "monthlySalary", + rules: [{ required: true, message: "璇峰~鍐欐瘡鏈堝伐璧�!" }], + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "绂忓埄", + name: "welfare", + rules: [{ required: true, message: "璇峰~鍐欑鍒�!" }], + type: "input", + pageType: "retirementManagement", + labelCol: 6, + width: 300, + }, + { + label: "閫�浼戝師鍥�", + name: "retirementReason", + type: "textArea", + pageType: "retirementManagement", + labelCol: 3, + width: 730, + }, + { + label: "澶囨敞", + name: "retirementRemarks", + type: "textArea", + pageType: "retirementManagement", + labelCol: 3, + width: 730, + }, + ], + }; + + return <Apply {...params} />; +}; + +export default NominationForAppointment; -- Gitblit v1.9.1