blob: cb6481302d934848887a0f39f4e821173c96c13a [file] [log] [blame]
86133aaa3f5d2025-04-20 21:33:29 +08001import React, { useEffect } from 'react';
2import {
3 ProForm,
4 ProFormDigit,
5 ProFormText,
6 ProFormRadio,
7 ProFormTreeSelect,
8} from '@ant-design/pro-components';
9import { Form, Modal} from 'antd';
10import { useIntl, FormattedMessage } from '@umijs/max';
11import { DataNode } from 'antd/es/tree';
12import { DictValueEnumObj } from '@/components/DictTag';
13
14export type DeptFormData = Record<string, unknown> & Partial<API.System.Dept>;
15
16export type DeptFormProps = {
17 onCancel: (flag?: boolean, formVals?: DeptFormData) => void;
18 onSubmit: (values: DeptFormData) => Promise<void>;
19 open: boolean;
20 values: Partial<API.System.Dept>;
21 deptTree: DataNode[];
22 statusOptions: DictValueEnumObj;
23};
24
25const DeptForm: React.FC<DeptFormProps> = (props) => {
26 const [form] = Form.useForm();
27
28 const { statusOptions, deptTree } = props;
29
30 useEffect(() => {
31 form.resetFields();
32 form.setFieldsValue({
33 deptId: props.values.deptId,
34 parentId: props.values.parentId,
35 ancestors: props.values.ancestors,
36 deptName: props.values.deptName,
37 orderNum: props.values.orderNum,
38 leader: props.values.leader,
39 phone: props.values.phone,
40 email: props.values.email,
41 status: props.values.status,
42 delFlag: props.values.delFlag,
43 createBy: props.values.createBy,
44 createTime: props.values.createTime,
45 updateBy: props.values.updateBy,
46 updateTime: props.values.updateTime,
47 });
48 }, [form, props]);
49
50 const intl = useIntl();
51 const handleOk = () => {
52 form.submit();
53 };
54 const handleCancel = () => {
55 props.onCancel();
56 };
57 const handleFinish = async (values: Record<string, any>) => {
58 props.onSubmit(values as DeptFormData);
59 };
60
61 return (
62 <Modal
63 width={640}
64 title={intl.formatMessage({
65 id: 'system.dept.title',
66 defaultMessage: '编辑部门',
67 })}
68 open={props.open}
69 forceRender
70 destroyOnClose
71 onOk={handleOk}
72 onCancel={handleCancel}
73 >
74 <ProForm
75 form={form}
76 grid={true}
77 submitter={false}
78 layout="horizontal"
79 onFinish={handleFinish}>
80 <ProFormDigit
81 name="deptId"
82 label={intl.formatMessage({
83 id: 'system.dept.dept_id',
84 defaultMessage: '部门id',
85 })}
86 colProps={{ md: 12, xl: 12 }}
87 placeholder="请输入部门id"
88 disabled
89 hidden={true}
90 rules={[
91 {
92 required: false,
93 message: <FormattedMessage id="请输入部门id!" defaultMessage="请输入部门id!" />,
94 },
95 ]}
96 />
97 <ProFormTreeSelect
98 name="parentId"
99 label={intl.formatMessage({
100 id: 'system.dept.parent_dept',
101 defaultMessage: '上级部门:',
102 })}
103 request={async () => {
104 return deptTree;
105 }}
106 placeholder="请选择上级部门"
107 rules={[
108 {
109 required: true,
110 message: (
111 <FormattedMessage id="请输入用户昵称!" defaultMessage="请选择上级部门!" />
112 ),
113 },
114 ]}
115 />
116 <ProFormText
117 name="deptName"
118 label={intl.formatMessage({
119 id: 'system.dept.dept_name',
120 defaultMessage: '部门名称',
121 })}
122 colProps={{ md: 12, xl: 12 }}
123 placeholder="请输入部门名称"
124 rules={[
125 {
126 required: false,
127 message: <FormattedMessage id="请输入部门名称!" defaultMessage="请输入部门名称!" />,
128 },
129 ]}
130 />
131 <ProFormDigit
132 name="orderNum"
133 label={intl.formatMessage({
134 id: 'system.dept.order_num',
135 defaultMessage: '显示顺序',
136 })}
137 colProps={{ md: 12, xl: 12 }}
138 placeholder="请输入显示顺序"
139 rules={[
140 {
141 required: false,
142 message: <FormattedMessage id="请输入显示顺序!" defaultMessage="请输入显示顺序!" />,
143 },
144 ]}
145 />
146 <ProFormText
147 name="leader"
148 label={intl.formatMessage({
149 id: 'system.dept.leader',
150 defaultMessage: '负责人',
151 })}
152 colProps={{ md: 12, xl: 12 }}
153 placeholder="请输入负责人"
154 rules={[
155 {
156 required: false,
157 message: <FormattedMessage id="请输入负责人!" defaultMessage="请输入负责人!" />,
158 },
159 ]}
160 />
161 <ProFormText
162 name="phone"
163 label={intl.formatMessage({
164 id: 'system.dept.phone',
165 defaultMessage: '联系电话',
166 })}
167 colProps={{ md: 12, xl: 12 }}
168 placeholder="请输入联系电话"
169 rules={[
170 {
171 required: false,
172 message: <FormattedMessage id="请输入联系电话!" defaultMessage="请输入联系电话!" />,
173 },
174 ]}
175 />
176 <ProFormText
177 name="email"
178 label={intl.formatMessage({
179 id: 'system.dept.email',
180 defaultMessage: '邮箱',
181 })}
182 colProps={{ md: 12, xl: 12 }}
183 placeholder="请输入邮箱"
184 rules={[
185 {
186 required: false,
187 message: <FormattedMessage id="请输入邮箱!" defaultMessage="请输入邮箱!" />,
188 },
189 ]}
190 />
191 <ProFormRadio.Group
192 valueEnum={statusOptions}
193 name="status"
194 label={intl.formatMessage({
195 id: 'system.dept.status',
196 defaultMessage: '部门状态',
197 })}
198 colProps={{ md: 12, xl: 12 }}
199 placeholder="请输入部门状态"
200 rules={[
201 {
202 required: false,
203 message: <FormattedMessage id="请输入部门状态!" defaultMessage="请输入部门状态!" />,
204 },
205 ]}
206 />
207 </ProForm>
208 </Modal>
209 );
210};
211
212export default DeptForm;