TaskEdit.tsx 2.7 KB

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