UserSelect.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import {
  2. ProFormSelect,
  3. type RequestOptionsType,
  4. } from "@ant-design/pro-components";
  5. import { useIntl } from "react-intl";
  6. import { get } from "../../request";
  7. import type { IUserListResponse } from "../../api/Auth";
  8. interface IWidget {
  9. name?: string;
  10. width?: number | "md" | "sm" | "xl" | "xs" | "lg";
  11. multiple?: boolean;
  12. hidden?: boolean;
  13. hiddenTitle?: boolean;
  14. required?: boolean;
  15. initialValue?: string | string[] | null;
  16. options?: RequestOptionsType[];
  17. }
  18. const UserSelectWidget = ({
  19. name = "user",
  20. multiple = false,
  21. width = "md",
  22. hidden = false,
  23. hiddenTitle = false,
  24. required = true,
  25. options = [],
  26. initialValue,
  27. }: IWidget) => {
  28. const intl = useIntl();
  29. console.log("UserSelect options", options);
  30. return (
  31. <ProFormSelect
  32. name={name}
  33. label={
  34. hiddenTitle
  35. ? undefined
  36. : intl.formatMessage({ id: "forms.fields.user.label" })
  37. }
  38. hidden={hidden}
  39. width={width}
  40. initialValue={initialValue}
  41. showSearch
  42. debounceTime={300}
  43. fieldProps={{
  44. mode: multiple ? "tags" : undefined,
  45. }}
  46. request={async ({ keyWords }) => {
  47. console.log("keyWord", keyWords);
  48. if (typeof keyWords === "string") {
  49. const json = await get<IUserListResponse>(
  50. `/v2/user?view=key&key=${keyWords}`
  51. );
  52. console.info("api response user select", json);
  53. const userList: RequestOptionsType[] = json.data.rows.map((item) => {
  54. return {
  55. value: item.id,
  56. label: `${item.nickName}`,
  57. };
  58. });
  59. console.log("json", userList);
  60. return userList;
  61. } else {
  62. const defaultOptions: RequestOptionsType[] = options.map((item) => {
  63. return { label: item.label, value: item.value?.toString() };
  64. });
  65. return defaultOptions;
  66. }
  67. }}
  68. rules={[
  69. {
  70. required: required,
  71. },
  72. ]}
  73. />
  74. );
  75. };
  76. export default UserSelectWidget;