blob: 188e01ba8013ef6d0bb032897331b8de13b569ab [file] [log] [blame]
86133aaa3f5d2025-04-20 21:33:29 +08001import React, { useEffect } from 'react';
2import {
3 ProForm,
4 ProFormDigit,
5 ProFormText,
6 ProFormSelect,
7 ProFormRadio,
8 ProFormTextArea,
9} from '@ant-design/pro-components';
10import { Form, Modal} from 'antd';
11import { useIntl, FormattedMessage } from '@umijs/max';
12import { DictValueEnumObj } from '@/components/DictTag';
13
14export type DataFormData = Record<string, unknown> & Partial<API.System.DictData>;
15
16export type DataFormProps = {
17 onCancel: (flag?: boolean, formVals?: DataFormData) => void;
18 onSubmit: (values: DataFormData) => Promise<void>;
19 open: boolean;
20 values: Partial<API.System.DictData>;
21 statusOptions: DictValueEnumObj;
22};
23
24const DictDataForm: React.FC<DataFormProps> = (props) => {
25 const [form] = Form.useForm();
26
27 const { statusOptions } = props;
28
29 useEffect(() => {
30 form.resetFields();
31 form.setFieldsValue({
32 dictCode: props.values.dictCode,
33 dictSort: props.values.dictSort,
34 dictLabel: props.values.dictLabel,
35 dictValue: props.values.dictValue,
36 dictType: props.values.dictType,
37 cssClass: props.values.cssClass,
38 listClass: props.values.listClass,
39 isDefault: props.values.isDefault,
40 status: props.values.status,
41 createBy: props.values.createBy,
42 createTime: props.values.createTime,
43 updateBy: props.values.updateBy,
44 updateTime: props.values.updateTime,
45 remark: props.values.remark,
46 });
47 }, [form, props]);
48
49 const intl = useIntl();
50 const handleOk = () => {
51 form.submit();
52 };
53 const handleCancel = () => {
54 props.onCancel();
55 };
56 const handleFinish = async (values: Record<string, any>) => {
57 props.onSubmit(values as DataFormData);
58 };
59
60 return (
61 <Modal
62 width={640}
63 title={intl.formatMessage({
64 id: 'system.dict.data.title',
65 defaultMessage: '编辑字典数据',
66 })}
67 open={props.open}
68 forceRender
69 destroyOnClose
70 onOk={handleOk}
71 onCancel={handleCancel}
72 >
73 <ProForm
74 form={form}
75 grid={true}
76 submitter={false}
77 layout="horizontal"
78 onFinish={handleFinish}>
79 <ProFormDigit
80 name="dictCode"
81 label={intl.formatMessage({
82 id: 'system.dict.data.dict_code',
83 defaultMessage: '字典编码',
84 })}
85 colProps={{ md: 24, xl: 24 }}
86 placeholder="请输入字典编码"
87 disabled
88 hidden={true}
89 rules={[
90 {
91 required: false,
92 message: <FormattedMessage id="请输入字典编码!" defaultMessage="请输入字典编码!" />,
93 },
94 ]}
95 />
96 <ProFormText
97 name="dictType"
98 label={intl.formatMessage({
99 id: 'system.dict.data.dict_type',
100 defaultMessage: '字典类型',
101 })}
102 colProps={{ md: 12, xl: 24 }}
103 placeholder="请输入字典类型"
104 disabled
105 rules={[
106 {
107 required: false,
108 message: <FormattedMessage id="请输入字典类型!" defaultMessage="请输入字典类型!" />,
109 },
110 ]}
111 />
112 <ProFormText
113 name="dictLabel"
114 label={intl.formatMessage({
115 id: 'system.dict.data.dict_label',
116 defaultMessage: '字典标签',
117 })}
118 colProps={{ md: 12, xl: 24 }}
119 placeholder="请输入字典标签"
120 rules={[
121 {
122 required: false,
123 message: <FormattedMessage id="请输入字典标签!" defaultMessage="请输入字典标签!" />,
124 },
125 ]}
126 />
127 <ProFormText
128 name="dictValue"
129 label={intl.formatMessage({
130 id: 'system.dict.data.dict_value',
131 defaultMessage: '字典键值',
132 })}
133 colProps={{ md: 12, xl: 24 }}
134 placeholder="请输入字典键值"
135 rules={[
136 {
137 required: false,
138 message: <FormattedMessage id="请输入字典键值!" defaultMessage="请输入字典键值!" />,
139 },
140 ]}
141 />
142 <ProFormText
143 name="cssClass"
144 label={intl.formatMessage({
145 id: 'system.dict.data.css_class',
146 defaultMessage: '样式属性',
147 })}
148 colProps={{ md: 12, xl: 24 }}
149 placeholder="请输入样式属性"
150 rules={[
151 {
152 required: false,
153 message: <FormattedMessage id="请输入样式属性!" defaultMessage="请输入样式属性!" />,
154 },
155 ]}
156 />
157 <ProFormSelect
158 name="listClass"
159 label={intl.formatMessage({
160 id: 'system.dict.data.list_class',
161 defaultMessage: '回显样式',
162 })}
163 colProps={{ md: 12, xl: 24 }}
164 placeholder="请输入回显样式"
165 valueEnum={{
166 'default': '默认',
167 'primary': '主要',
168 'success': '成功',
169 'info': '信息',
170 'warning': '警告',
171 'danger': '危险',
172 }}
173 rules={[
174 {
175 required: false,
176 message: <FormattedMessage id="请输入回显样式!" defaultMessage="请输入回显样式!" />,
177 },
178 ]}
179 />
180 <ProFormDigit
181 name="dictSort"
182 label={intl.formatMessage({
183 id: 'system.dict.data.dict_sort',
184 defaultMessage: '字典排序',
185 })}
186 colProps={{ md: 12, xl: 12 }}
187 placeholder="请输入字典排序"
188 rules={[
189 {
190 required: false,
191 message: <FormattedMessage id="请输入字典排序!" defaultMessage="请输入字典排序!" />,
192 },
193 ]}
194 />
195 <ProFormRadio.Group
196 name="isDefault"
197 label={intl.formatMessage({
198 id: 'system.dict.data.is_default',
199 defaultMessage: '是否默认',
200 })}
201 valueEnum={{
202 'Y': '是',
203 'N': '否',
204 }}
205 initialValue={'N'}
206 colProps={{ md: 12, xl: 24 }}
207 placeholder="请输入是否默认"
208 rules={[
209 {
210 required: false,
211 message: <FormattedMessage id="请输入是否默认!" defaultMessage="请输入是否默认!" />,
212 },
213 ]}
214 />
215 <ProFormRadio.Group
216 valueEnum={statusOptions}
217 name="status"
218 label={intl.formatMessage({
219 id: 'system.dict.data.status',
220 defaultMessage: '状态',
221 })}
222 initialValue={'0'}
223 colProps={{ md: 12, xl: 24 }}
224 placeholder="请输入状态"
225 rules={[
226 {
227 required: false,
228 message: <FormattedMessage id="请输入状态!" defaultMessage="请输入状态!" />,
229 },
230 ]}
231 />
232 <ProFormTextArea
233 name="remark"
234 label={intl.formatMessage({
235 id: 'system.dict.data.remark',
236 defaultMessage: '备注',
237 })}
238 colProps={{ md: 24, xl: 24 }}
239 placeholder="请输入备注"
240 rules={[
241 {
242 required: false,
243 message: <FormattedMessage id="请输入备注!" defaultMessage="请输入备注!" />,
244 },
245 ]}
246 />
247 </ProForm>
248 </Modal>
249 );
250};
251
252export default DictDataForm;