You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

edit.tsx 6.0 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import { DictValueEnumObj } from '@/components/DictTag';
  2. import KFModal from '@/components/KFModal';
  3. import {
  4. ProForm,
  5. ProFormDigit,
  6. ProFormRadio,
  7. ProFormText,
  8. ProFormTextArea,
  9. } from '@ant-design/pro-components';
  10. import { FormattedMessage, useIntl } from '@umijs/max';
  11. import { Form } from 'antd';
  12. import Tree, { DataNode } from 'antd/es/tree';
  13. import React, { useEffect, useState } from 'react';
  14. export type RoleFormData = Record<string, unknown> & Partial<API.System.Role>;
  15. export type RoleFormProps = {
  16. onCancel: (flag?: boolean, formVals?: RoleFormData) => void;
  17. onSubmit: (values: RoleFormData) => Promise<void>;
  18. open: boolean;
  19. values: Partial<API.System.Role>;
  20. menuTree: DataNode[];
  21. menuCheckedKeys: string[];
  22. statusOptions: DictValueEnumObj;
  23. };
  24. const RoleForm: React.FC<RoleFormProps> = (props) => {
  25. const [form] = Form.useForm();
  26. const { menuTree, menuCheckedKeys } = props;
  27. const [menuIds, setMenuIds] = useState<string[]>([]);
  28. const { statusOptions } = props;
  29. useEffect(() => {
  30. form.resetFields();
  31. form.setFieldsValue({
  32. roleId: props.values.roleId,
  33. roleName: props.values.roleName,
  34. roleKey: props.values.roleKey,
  35. roleSort: props.values.roleSort,
  36. dataScope: props.values.dataScope,
  37. menuCheckStrictly: props.values.menuCheckStrictly,
  38. deptCheckStrictly: props.values.deptCheckStrictly,
  39. status: props.values.status,
  40. delFlag: props.values.delFlag,
  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. const intl = useIntl();
  49. const handleOk = () => {
  50. form.submit();
  51. };
  52. const handleCancel = () => {
  53. props.onCancel();
  54. };
  55. const handleFinish = async (values: Record<string, any>) => {
  56. props.onSubmit({ ...values, menuIds } as RoleFormData);
  57. };
  58. return (
  59. <KFModal
  60. width={640}
  61. title={intl.formatMessage({
  62. id: 'system.role.title',
  63. defaultMessage: '编辑角色信息',
  64. })}
  65. forceRender
  66. open={props.open}
  67. destroyOnClose
  68. onOk={handleOk}
  69. onCancel={handleCancel}
  70. >
  71. <ProForm
  72. form={form}
  73. grid={true}
  74. layout="horizontal"
  75. submitter={false}
  76. onFinish={handleFinish}
  77. >
  78. <ProFormDigit
  79. name="roleId"
  80. label={intl.formatMessage({
  81. id: 'system.role.role_id',
  82. defaultMessage: '角色编号',
  83. })}
  84. placeholder="请输入角色编号"
  85. disabled
  86. hidden={true}
  87. rules={[
  88. {
  89. required: false,
  90. message: <FormattedMessage id="请输入角色编号!" defaultMessage="请输入角色编号!" />,
  91. },
  92. ]}
  93. />
  94. <ProFormText
  95. name="roleName"
  96. label={intl.formatMessage({
  97. id: 'system.role.role_name',
  98. defaultMessage: '角色名称',
  99. })}
  100. placeholder="请输入角色名称"
  101. rules={[
  102. {
  103. required: true,
  104. message: <FormattedMessage id="请输入角色名称!" defaultMessage="请输入角色名称!" />,
  105. },
  106. ]}
  107. />
  108. <ProFormText
  109. name="roleKey"
  110. label={intl.formatMessage({
  111. id: 'system.role.role_key',
  112. defaultMessage: '权限字符串',
  113. })}
  114. placeholder="请输入角色权限字符串"
  115. rules={[
  116. {
  117. required: true,
  118. message: (
  119. <FormattedMessage
  120. id="请输入角色权限字符串!"
  121. defaultMessage="请输入角色权限字符串!"
  122. />
  123. ),
  124. },
  125. ]}
  126. />
  127. <ProFormDigit
  128. name="roleSort"
  129. label={intl.formatMessage({
  130. id: 'system.role.role_sort',
  131. defaultMessage: '显示顺序',
  132. })}
  133. placeholder="请输入显示顺序"
  134. rules={[
  135. {
  136. required: true,
  137. message: <FormattedMessage id="请输入显示顺序!" defaultMessage="请输入显示顺序!" />,
  138. },
  139. ]}
  140. fieldProps={{
  141. defaultValue: 1,
  142. }}
  143. />
  144. <ProFormRadio.Group
  145. valueEnum={statusOptions}
  146. name="status"
  147. label={intl.formatMessage({
  148. id: 'system.role.status',
  149. defaultMessage: '角色状态',
  150. })}
  151. placeholder="请输入角色状态"
  152. rules={[
  153. {
  154. required: true,
  155. message: <FormattedMessage id="请输入角色状态!" defaultMessage="请输入角色状态!" />,
  156. },
  157. ]}
  158. fieldProps={{
  159. defaultValue: '0',
  160. }}
  161. />
  162. <ProForm.Item
  163. name="menuIds"
  164. label={intl.formatMessage({
  165. id: 'system.role.auth',
  166. defaultMessage: '菜单权限',
  167. })}
  168. >
  169. <Tree
  170. checkable={true}
  171. multiple={true}
  172. checkStrictly={true}
  173. defaultExpandAll={false}
  174. treeData={menuTree}
  175. defaultCheckedKeys={menuCheckedKeys}
  176. onCheck={(checkedKeys: any) => {
  177. return setMenuIds(checkedKeys.checked);
  178. }}
  179. />
  180. </ProForm.Item>
  181. <ProFormTextArea
  182. name="remark"
  183. label={intl.formatMessage({
  184. id: 'system.role.remark',
  185. defaultMessage: '备注',
  186. })}
  187. placeholder="请输入备注"
  188. rules={[
  189. {
  190. required: false,
  191. message: <FormattedMessage id="请输入备注!" defaultMessage="请输入备注!" />,
  192. },
  193. ]}
  194. />
  195. </ProForm>
  196. </KFModal>
  197. );
  198. };
  199. export default RoleForm;