Просмотр исходного кода

Merge pull request #1580 from visuddhinanda/agile

支持多个资源同时转让
visuddhinanda 2 лет назад
Родитель
Сommit
42e5a1b24b

+ 6 - 1
dashboard/src/components/api/Transfer.ts

@@ -6,7 +6,7 @@ import { TResType } from "../discussion/DiscussionListCard";
 export type ITransferStatus = "transferred" | "accept" | "refuse" | "cancel";
 export interface ITransferRequest {
   res_type?: TResType;
-  res_id?: string;
+  res_id?: string[];
   new_owner?: string;
   status?: ITransferStatus;
 }
@@ -23,6 +23,11 @@ export interface ITransferResponseData {
   created_at: string;
   updated_at: string;
 }
+export interface ITransferCreateResponse {
+  ok: boolean;
+  message: string;
+  data: number;
+}
 export interface ITransferResponse {
   ok: boolean;
   message: string;

+ 30 - 13
dashboard/src/components/article/ArticleList.tsx

@@ -96,9 +96,11 @@ const ArticleListWidget = ({
   const [activeKey, setActiveKey] = useState<React.Key | undefined>("my");
   const [myNumber, setMyNumber] = useState<number>(0);
   const [collaborationNumber, setCollaborationNumber] = useState<number>(0);
-  const [transfer, setTransfer] = useState<string>();
+  const [transfer, setTransfer] = useState<string[]>();
   const [transferName, setTransferName] = useState<string>();
   const [transferOpen, setTransferOpen] = useState(false);
+  const [pageSize, setPageSize] = useState(10);
+
   useEffect(() => {
     /**
      * 获取各种课程的数量
@@ -334,7 +336,7 @@ const ArticleListWidget = ({
                           showDeleteConfirm(row.id, row.title);
                           break;
                         case "transfer":
-                          setTransfer(row.id);
+                          setTransfer([row.id]);
                           setTransferName(row.title);
                           setTransferOpen(true);
                           break;
@@ -389,21 +391,36 @@ const ArticleListWidget = ({
           onCleanSelected,
         }) => {
           return (
-            <AddToAnthology
-              studioName={studioName}
-              articleIds={selectedRowKeys.map((item) => item.toString())}
-              onFinally={() => {
-                onCleanSelected();
-              }}
-            />
+            <Space>
+              <Button
+                type="link"
+                onClick={() => {
+                  const resId = selectedRowKeys.map((item) => item.toString());
+                  setTransfer(resId);
+                  setTransferName(resId.length + "个文章");
+                  setTransferOpen(true);
+                }}
+              >
+                转让
+              </Button>
+              <AddToAnthology
+                studioName={studioName}
+                articleIds={selectedRowKeys.map((item) => item.toString())}
+                onFinally={() => {
+                  onCleanSelected();
+                }}
+              />
+            </Space>
           );
         }}
         request={async (params = {}, sorter, filter) => {
           let url = `/v2/article?view=studio&view2=${activeKey}&name=${studioName}`;
           const offset =
             ((params.current ? params.current : 1) - 1) *
-            (params.pageSize ? params.pageSize : 10);
-
+            (params.pageSize ? params.pageSize : pageSize);
+          if (params.pageSize) {
+            setPageSize(params.pageSize);
+          }
           url += `&limit=${params.pageSize}&offset=${offset}`;
           url += params.keyword ? "&search=" + params.keyword : "";
 
@@ -412,7 +429,7 @@ const ArticleListWidget = ({
           }
 
           url += getSorterUrl(sorter);
-
+          console.log("url", url);
           const res = await get<IArticleListResponse>(url);
           const items: DataItem[] = res.data.rows.map((item, id) => {
             return {
@@ -440,7 +457,7 @@ const ArticleListWidget = ({
         pagination={{
           showQuickJumper: true,
           showSizeChanger: true,
-          pageSize: 10,
+          pageSize: pageSize,
         }}
         search={false}
         options={{

+ 2 - 2
dashboard/src/components/channel/ChannelTable.tsx

@@ -89,7 +89,7 @@ const ChannelTableWidget = ({
   const [myNumber, setMyNumber] = useState<number>(0);
   const [collaborationNumber, setCollaborationNumber] = useState<number>(0);
   const [collaborator, setCollaborator] = useState<string>();
-  const [transfer, setTransfer] = useState<string>();
+  const [transfer, setTransfer] = useState<string[]>();
   const [transferName, setTransferName] = useState<string>();
   const [transferOpen, setTransferOpen] = useState(false);
 
@@ -378,7 +378,7 @@ const ChannelTableWidget = ({
                           showDeleteConfirm(row.uid, row.title);
                           break;
                         case "transfer":
-                          setTransfer(row.uid);
+                          setTransfer([row.uid]);
                           setTransferName(row.title);
                           setTransferOpen(true);
                           break;

+ 9 - 4
dashboard/src/components/transfer/TransferCreate.tsx

@@ -2,7 +2,11 @@ import { ModalForm, ProForm } from "@ant-design/pro-components";
 import { Alert, Form, message, notification } from "antd";
 import { TResType } from "./TransferList";
 import { post } from "../../request";
-import { ITransferRequest, ITransferResponse } from "../api/Transfer";
+import {
+  ITransferCreateResponse,
+  ITransferRequest,
+  ITransferResponse,
+} from "../api/Transfer";
 import { useIntl } from "react-intl";
 import UserSelect from "../template/UserSelect";
 import { useEffect, useState } from "react";
@@ -10,7 +14,7 @@ import { useEffect, useState } from "react";
 interface IWidget {
   studioName?: string;
   resType: TResType;
-  resId?: string;
+  resId?: string[];
   resName?: string;
   open?: boolean;
   onOpenChange?: Function;
@@ -55,6 +59,7 @@ const TransferCreateWidget = ({
       onFinish={async (values) => {
         console.log(values);
         if (typeof resId === "undefined") {
+          console.error("res id is undefined");
           return;
         }
         const data = {
@@ -62,7 +67,7 @@ const TransferCreateWidget = ({
           res_id: resId,
           new_owner: values.studio,
         };
-        const res = await post<ITransferRequest, ITransferResponse>(
+        const res = await post<ITransferRequest, ITransferCreateResponse>(
           `/v2/transfer`,
           data
         );
@@ -70,7 +75,7 @@ const TransferCreateWidget = ({
           if (typeof onCreate === "undefined") {
             notification.open({
               message: strTransfer,
-              description: `${resType} ${resName} 已经转出。请等待对方确认。可以在转移管理中查看状态或取消。`,
+              description: `${resType} ${resName} 等 ${res.data} 个资源已经转出。请等待对方确认。可以在转移管理中查看状态或取消。`,
               duration: 0,
             });
           } else {