2
0

WatchAdd.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { useRef } from "react";
  2. import {
  3. ProForm,
  4. ProFormDependency,
  5. type ProFormInstance,
  6. ProFormSelect,
  7. } from "@ant-design/pro-components";
  8. import { PlusOutlined } from "@ant-design/icons";
  9. import UserSelect from "../template/UserSelect";
  10. import { Button, Divider, Popover } from "antd";
  11. import WatchList from "./WatchList";
  12. import type { IUser } from "../auth/User";
  13. import AiAssistantSelect from "../ai/AiAssistantSelect";
  14. import { useIntl } from "react-intl";
  15. export interface IDataType {
  16. user_type?: "user" | "ai-assistant";
  17. user_id?: string;
  18. }
  19. interface IWidget {
  20. data?: IUser[];
  21. onFinish?: ((formData: IDataType) => Promise<boolean | void>) | undefined;
  22. onDelete?: ((user: IUser) => Promise<boolean | void>) | undefined;
  23. }
  24. export const WatchAddButton = ({ data, onFinish, onDelete }: IWidget) => {
  25. return (
  26. <Popover
  27. trigger={"click"}
  28. content={<WatchAdd data={data} onFinish={onFinish} onDelete={onDelete} />}
  29. >
  30. <Button type="text" icon={<PlusOutlined />} />
  31. </Popover>
  32. );
  33. };
  34. const WatchAdd = ({ data, onFinish, onDelete }: IWidget) => {
  35. const intl = useIntl();
  36. const formRef = useRef<ProFormInstance | undefined>(undefined);
  37. return (
  38. <div>
  39. <ProForm<IDataType> formRef={formRef} onFinish={onFinish}>
  40. <ProForm.Group>
  41. <ProFormSelect
  42. options={[
  43. { label: "用户", value: "user" },
  44. {
  45. label: intl.formatMessage({ id: "labels.ai-assistant" }),
  46. value: "ai-assistant",
  47. },
  48. ]}
  49. width="xs"
  50. name="userType"
  51. label={"用户类型"}
  52. />
  53. <ProFormDependency name={["userType"]}>
  54. {({ userType }) => {
  55. if (userType === "user") {
  56. return <UserSelect name="user_id" multiple={false} />;
  57. } else {
  58. return <AiAssistantSelect name="user_id" multiple={false} />;
  59. }
  60. }}
  61. </ProFormDependency>
  62. </ProForm.Group>
  63. </ProForm>
  64. <Divider />
  65. <WatchList data={data} onDelete={onDelete} />
  66. </div>
  67. );
  68. };
  69. export default WatchAdd;