TaskEdit.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import {
  2. ProForm,
  3. ProFormText,
  4. ProFormTextArea,
  5. RequestOptionsType,
  6. } from "@ant-design/pro-components";
  7. import { message } from "antd";
  8. import { useState } from "react";
  9. import { ITaskData, ITaskResponse, ITaskUpdateRequest } from "../api/task";
  10. import { get, patch, post } from "../../request";
  11. import { useIntl } from "react-intl";
  12. import UserSelect from "../template/UserSelect";
  13. import User from "../auth/User";
  14. interface IWidget {
  15. taskId?: string;
  16. onLoad?: (data: ITaskData) => void;
  17. onChange?: (data: ITaskData) => void;
  18. }
  19. const TaskEdit = ({ taskId, onLoad, onChange }: IWidget) => {
  20. const intl = useIntl();
  21. const [assignees, setAssignees] = useState<RequestOptionsType[]>();
  22. return (
  23. <ProForm<ITaskData>
  24. onFinish={async (values) => {
  25. const url = `/v2/task/${taskId}`;
  26. const data: ITaskUpdateRequest = { ...values, studio_name: "" };
  27. console.info("task save api request", url, data);
  28. const res = await patch<ITaskUpdateRequest, ITaskResponse>(url, data);
  29. if (res.ok) {
  30. onChange && onChange(res.data);
  31. message.success("提交成功");
  32. } else {
  33. message.error(res.message);
  34. }
  35. }}
  36. params={{}}
  37. request={async () => {
  38. const url = `/v2/task/${taskId}`;
  39. console.info("api request", url);
  40. const res = await get<ITaskResponse>(url);
  41. console.log("api response", res);
  42. const assigneesOptions = res.data.assignees?.map((item, id) => {
  43. return { label: <User {...item} />, value: item.id };
  44. });
  45. console.log("assigneesOptions", assigneesOptions);
  46. setAssignees(assigneesOptions);
  47. if (onLoad) {
  48. onLoad(res.data);
  49. }
  50. return res.data;
  51. }}
  52. >
  53. <ProForm.Group>
  54. <ProFormText
  55. width="md"
  56. name="title"
  57. label={intl.formatMessage({
  58. id: "forms.fields.title.label",
  59. })}
  60. />
  61. </ProForm.Group>
  62. <ProForm.Group>
  63. <ProFormText
  64. width="md"
  65. name="type"
  66. label={intl.formatMessage({
  67. id: "forms.fields.type.label",
  68. })}
  69. readonly
  70. />
  71. </ProForm.Group>
  72. <ProForm.Group>
  73. <ProFormTextArea
  74. width="md"
  75. name="description"
  76. label={intl.formatMessage({
  77. id: "forms.fields.description.label",
  78. })}
  79. />
  80. </ProForm.Group>
  81. <ProForm.Group>
  82. <UserSelect
  83. name="assignees_id"
  84. multiple={true}
  85. required={false}
  86. options={assignees}
  87. />
  88. </ProForm.Group>
  89. </ProForm>
  90. );
  91. };
  92. export default TaskEdit;