Jelajahi Sumber

:fire: 从未使用的引用和变量

visuddhinanda 3 tahun lalu
induk
melakukan
194f19722a

+ 42 - 42
dashboard/src/components/article/AnthologStudioList.tsx

@@ -1,16 +1,17 @@
+import { Link } from "react-router-dom";
 import { useState, useEffect } from "react";
 import { List, Space, Card } from "antd";
+
 import StudioName from "../auth/StudioName";
 import type { IAnthologyStudioListApiResponse } from "../api/Article";
 import type { IStudioApiResponse } from "../api/Auth";
 import { get } from "../../request";
-import { Link, useNavigate } from "react-router-dom";
 
 const defaultData: IAnthologyStudioData[] = [];
 
 interface IAnthologyStudioData {
-	count: number;
-	studio: IStudioApiResponse;
+  count: number;
+  studio: IStudioApiResponse;
 }
 /*
 interface IWidgetAnthologyList {
@@ -18,47 +19,46 @@ interface IWidgetAnthologyList {
 }
 */
 const Widget = () => {
-	const [tableData, setTableData] = useState(defaultData);
-	const navigate = useNavigate();
-	useEffect(() => {
-		console.log("useEffect");
-		fetchData();
-	}, []);
+  const [tableData, setTableData] = useState(defaultData);
+  useEffect(() => {
+    console.log("useEffect");
+    fetchData();
+  }, []);
 
-	function fetchData() {
-		let url = `/v2/anthology?view=studio_list`;
-		get(url).then(function (myJson) {
-			console.log("ajex", myJson);
-			const json = myJson as unknown as IAnthologyStudioListApiResponse;
-			let newTree: IAnthologyStudioData[] = json.data.rows.map((item) => {
-				return {
-					count: item.count,
-					studio: item.studio,
-				};
-			});
-			setTableData(newTree);
-		});
-	}
+  function fetchData() {
+    let url = `/v2/anthology?view=studio_list`;
+    get(url).then(function (myJson) {
+      console.log("ajex", myJson);
+      const json = myJson as unknown as IAnthologyStudioListApiResponse;
+      let newTree: IAnthologyStudioData[] = json.data.rows.map((item) => {
+        return {
+          count: item.count,
+          studio: item.studio,
+        };
+      });
+      setTableData(newTree);
+    });
+  }
 
-	return (
-		<Card title="作者">
-			<List
-				itemLayout="vertical"
-				size="large"
-				dataSource={tableData}
-				renderItem={(item) => (
-					<List.Item>
-						<Link to={`/blog/${item.studio.studioName}/anthology`}>
-							<Space>
-								<StudioName data={item.studio} />
-								<span>({item.count})</span>
-							</Space>
-						</Link>
-					</List.Item>
-				)}
-			/>
-		</Card>
-	);
+  return (
+    <Card title="作者">
+      <List
+        itemLayout="vertical"
+        size="large"
+        dataSource={tableData}
+        renderItem={(item) => (
+          <List.Item>
+            <Link to={`/blog/${item.studio.studioName}/anthology`}>
+              <Space>
+                <StudioName data={item.studio} />
+                <span>({item.count})</span>
+              </Space>
+            </Link>
+          </List.Item>
+        )}
+      />
+    </Card>
+  );
 };
 
 export default Widget;

+ 40 - 42
dashboard/src/components/article/AnthologyCard.tsx

@@ -10,57 +10,55 @@ import type { ListNodeData } from "../studio/EditableTree";
 const { Title, Text } = Typography;
 
 export interface IArticleData {
-	id: string;
-	title: string;
-	subTitle: string;
-	summary: string;
-	created_at: string;
-	updated_at: string;
+  id: string;
+  title: string;
+  subTitle: string;
+  summary: string;
+  created_at: string;
+  updated_at: string;
 }
 
 export interface IAnthologyData {
-	id: string;
-	title: string;
-	subTitle: string;
-	summary: string;
-	articles: ListNodeData[];
-	studio: IStudio;
-	created_at: string;
-	updated_at: string;
+  id: string;
+  title: string;
+  subTitle: string;
+  summary: string;
+  articles: ListNodeData[];
+  studio: IStudio;
+  created_at: string;
+  updated_at: string;
 }
 
 interface IWidgetAnthologyCard {
-	data: IAnthologyData;
+  data: IAnthologyData;
 }
 
 const Widget = (prop: IWidgetAnthologyCard) => {
-	const articleList = prop.data.articles.map((item, id) => {
-		return <div key={id}>{item.title}</div>;
-	});
-	return (
-		<>
-			<Card hoverable bordered={false} style={{ width: "100%" }}>
-				<Title level={4}>
-					<Link to={`/anthology/${prop.data.id}`}>
-						{prop.data.title}
-					</Link>
-				</Title>
-				<div>
-					<Text type="secondary">{prop.data.subTitle}</Text>
-				</div>
-				<div>
-					<Text>{prop.data.summary}</Text>
-				</div>
-				<Link to={`/blog/${prop.data.studio.studioName}/anthology`}>
-					<StudioName data={prop.data.studio} />
-				</Link>
-				<Row>
-					<Col flex={"100px"}>Content</Col>
-					<Col flex={"auto"}>{articleList}</Col>
-				</Row>
-			</Card>
-		</>
-	);
+  const articleList = prop.data.articles.map((item, id) => {
+    return <div key={id}>{item.title}</div>;
+  });
+  return (
+    <>
+      <Card hoverable bordered={false} style={{ width: "100%" }}>
+        <Title level={4}>
+          <Link to={`/anthology/${prop.data.id}`}>{prop.data.title}</Link>
+        </Title>
+        <div>
+          <Text type="secondary">{prop.data.subTitle}</Text>
+        </div>
+        <div>
+          <Text>{prop.data.summary}</Text>
+        </div>
+        <Link to={`/blog/${prop.data.studio.studioName}/anthology`}>
+          <StudioName data={prop.data.studio} />
+        </Link>
+        <Row>
+          <Col flex={"100px"}>Content</Col>
+          <Col flex={"auto"}>{articleList}</Col>
+        </Row>
+      </Card>
+    </>
+  );
 };
 
 export default Widget;

+ 60 - 62
dashboard/src/components/article/AnthologyDetail.tsx

@@ -9,81 +9,79 @@ import type {
 } from "../api/Article";
 import type { IAnthologyData } from "./AnthologyCard";
 import TocTree from "./TocTree";
-import { get } from "../../request";
-import MDEditor from "@uiw/react-md-editor";
 
 const { Title, Text } = Typography;
 
 interface IWidgetAnthologyDetail {
-	aid: string;
-	channels?: string[];
+  aid: string;
+  channels?: string[];
 }
 
 const defaultData: IAnthologyData = {
-	id: "",
-	title: "",
-	subTitle: "",
-	summary: "",
-	articles: [],
-	studio: {
-		id: "",
-		studioName: "",
-		nickName: "",
-		avatar: "",
-	},
-	created_at: "",
-	updated_at: "",
+  id: "",
+  title: "",
+  subTitle: "",
+  summary: "",
+  articles: [],
+  studio: {
+    id: "",
+    studioName: "",
+    nickName: "",
+    avatar: "",
+  },
+  created_at: "",
+  updated_at: "",
 };
 
 const Widget = (prop: IWidgetAnthologyDetail) => {
-	const [tableData, setTableData] = useState(defaultData);
+  const [tableData, setTableData] = useState(defaultData);
 
-	useEffect(() => {
-		console.log("useEffect");
-		fetchData(prop.aid);
-	}, [prop.aid]);
+  useEffect(() => {
+    console.log("useEffect");
+    fetchData(prop.aid);
+  }, [prop.aid]);
 
-	function fetchData(id: string) {
-		get<IAnthologyResponse>(`/v2/anthology/${id}`)
-			.then((response) => {
-				const item: IAnthologyDataResponse = response.data;
-				let newTree: IAnthologyData = {
-					id: item.uid,
-					title: item.title,
-					subTitle: item.subtitle,
-					summary: item.summary,
-					articles: item.article_list.map((al) => {
-						return {
-							key: al.article,
-							title: al.title,
-							level: parseInt(al.level),
-						};
-					}),
-					studio: item.studio,
-					created_at: item.created_at,
-					updated_at: item.updated_at,
-				};
-				setTableData(newTree);
-				console.log("toc", newTree.articles);
-			})
-			.catch((error) => {
-				console.error(error);
-			});
-	}
-	return (
-		<>
-			<Title level={4}>{tableData.title}</Title>
-			<div>
-				<Text type="secondary">{tableData.subTitle}</Text>
-			</div>
-			<div>
-				<MDEditor.Markdown source={tableData.summary} />
-			</div>
-			<Title level={5}>目录</Title>
+  function fetchData(id: string) {
+    get<IAnthologyResponse>(`/v2/anthology/${id}`)
+      .then((response) => {
+        const item: IAnthologyDataResponse = response.data;
+        let newTree: IAnthologyData = {
+          id: item.uid,
+          title: item.title,
+          subTitle: item.subtitle,
+          summary: item.summary,
+          articles: item.article_list.map((al) => {
+            return {
+              key: al.article,
+              title: al.title,
+              level: parseInt(al.level),
+            };
+          }),
+          studio: item.studio,
+          created_at: item.created_at,
+          updated_at: item.updated_at,
+        };
+        setTableData(newTree);
+        console.log("toc", newTree.articles);
+      })
+      .catch((error) => {
+        console.error(error);
+      });
+  }
+  return (
+    <>
+      <Title level={4}>{tableData.title}</Title>
+      <div>
+        <Text type="secondary">{tableData.subTitle}</Text>
+      </div>
+      <div>
+        <MDEditor.Markdown source={tableData.summary} />
+      </div>
+      <Title level={5}>目录</Title>
 
-			<TocTree treeData={tableData.articles} />
-		</>
-	);
+      <TocTree treeData={tableData.articles} />
+    </>
+  );
 };
 
 export default Widget;

+ 0 - 4
dashboard/src/components/article/ArticleTabs.tsx

@@ -7,10 +7,6 @@ import Article from "./Article";
 
 const defaultPanes = [{ label: `Tab`, children: <></>, key: "1" }];
 
-const Test = () => {
-  console.log("new");
-  return <div>hello</div>;
-};
 interface IWidget {
   onClose?: Function;
 }

+ 61 - 64
dashboard/src/components/auth/SignInAvatar.tsx

@@ -5,78 +5,75 @@ import { Avatar } from "antd";
 import { Popover } from "antd";
 import { ProCard } from "@ant-design/pro-components";
 import {
-	UserOutlined,
-	HomeOutlined,
-	LogoutOutlined,
-	SettingOutlined,
+  UserOutlined,
+  HomeOutlined,
+  LogoutOutlined,
+  SettingOutlined,
 } from "@ant-design/icons";
 
 import { useAppSelector } from "../../hooks";
 import { currentUser as _currentUser } from "../../reducers/current-user";
 
 const Widget = () => {
-	// TODO
-	const navigate = useNavigate();
-	const [userName, setUserName] = useState("");
-	const [nickName, setNickName] = useState("");
-	const user = useAppSelector(_currentUser);
-	useEffect(() => {
-		setUserName(user ? user.realName : "");
-		setNickName(user ? user.nickName : "");
-	}, [user]);
+  // TODO
+  const navigate = useNavigate();
+  const [userName, setUserName] = useState("");
+  const [nickName, setNickName] = useState("");
+  const user = useAppSelector(_currentUser);
+  useEffect(() => {
+    setUserName(user ? user.realName : "");
+    setNickName(user ? user.nickName : "");
+  }, [user]);
 
-	const userCard = (
-		<>
-			<ProCard
-				style={{ maxWidth: 500, minWidth: 300 }}
-				actions={[
-					<Tooltip title="设置">
-						<SettingOutlined key="setting" />
-					</Tooltip>,
-					<Tooltip title="个人空间">
-						<Link to={`/blog/${userName}/overview`}>
-							<HomeOutlined key="home" />
-						</Link>
-					</Tooltip>,
-					<Tooltip title="退出登录">
-						<LogoutOutlined
-							key="logout"
-							onClick={() => {
-								sessionStorage.removeItem("token");
-								localStorage.removeItem("token");
-								navigate("/anonymous/users/sign-in");
-							}}
-						/>
-					</Tooltip>,
-				]}
-			>
-				<div>
-					<h2>{nickName}</h2>
-					<div>欢迎遨游法的海洋</div>
-				</div>
-			</ProCard>
-		</>
-	);
+  const userCard = (
+    <>
+      <ProCard
+        style={{ maxWidth: 500, minWidth: 300 }}
+        actions={[
+          <Tooltip title="设置">
+            <SettingOutlined key="setting" />
+          </Tooltip>,
+          <Tooltip title="个人空间">
+            <Link to={`/blog/${userName}/overview`}>
+              <HomeOutlined key="home" />
+            </Link>
+          </Tooltip>,
+          <Tooltip title="退出登录">
+            <LogoutOutlined
+              key="logout"
+              onClick={() => {
+                sessionStorage.removeItem("token");
+                localStorage.removeItem("token");
+                navigate("/anonymous/users/sign-in");
+              }}
+            />
+          </Tooltip>,
+        ]}
+      >
+        <div>
+          <h2>{nickName}</h2>
+          <div>欢迎遨游法的海洋</div>
+        </div>
+      </ProCard>
+    </>
+  );
 
-	if (typeof user === "undefined") {
-		return <Link to="/anonymous/users/sign-in">登录</Link>;
-	} else {
-		return (
-			<>
-				<Popover content={userCard} placement="bottomRight">
-					<Avatar
-						style={{ backgroundColor: "#87d068" }}
-						icon={<UserOutlined />}
-					>
-						{nickName.slice(0, 1)}
-					</Avatar>
-				</Popover>
-			</>
-		);
-	}
+  if (typeof user === "undefined") {
+    return <Link to="/anonymous/users/sign-in">登录</Link>;
+  } else {
+    return (
+      <>
+        <Popover content={userCard} placement="bottomRight">
+          <Avatar
+            style={{ backgroundColor: "#87d068" }}
+            icon={<UserOutlined />}
+          >
+            {nickName.slice(0, 1)}
+          </Avatar>
+        </Popover>
+      </>
+    );
+  }
 };
 
 export default Widget;
-function currentUser(currentUser: any) {
-	throw new Error("Function not implemented.");
-}

+ 2 - 30
dashboard/src/components/channel/ChannelPickerTable.tsx

@@ -2,9 +2,8 @@ import { ProTable } from "@ant-design/pro-components";
 import { useIntl } from "react-intl";
 import { Space, Table } from "antd";
 import { GlobalOutlined } from "@ant-design/icons";
-import type { MenuProps } from "antd";
-import { Button, Menu } from "antd";
-import { SearchOutlined } from "@ant-design/icons";
+import { Button } from "antd";
+
 import { PublicityValueEnum } from "../studio/table";
 import { IApiResponseChannelList, IFinal } from "../api/Channel";
 import { get } from "../../request";
@@ -13,33 +12,6 @@ import StudioName, { IStudio } from "../auth/StudioName";
 import ProgressSvg from "./ProgressSvg";
 import { IChannel } from "./Channel";
 
-const onMenuClick: MenuProps["onClick"] = (e) => {
-  console.log("click", e);
-};
-
-const menu = (
-  <Menu
-    onClick={onMenuClick}
-    items={[
-      {
-        key: "1",
-        label: "在藏经阁中打开",
-        icon: <SearchOutlined />,
-      },
-      {
-        key: "2",
-        label: "分享",
-        icon: <SearchOutlined />,
-      },
-      {
-        key: "3",
-        label: "删除",
-        icon: <SearchOutlined />,
-      },
-    ]}
-  />
-);
-
 export interface IItem {
   id: number;
   uid: string;

+ 0 - 5
dashboard/src/components/corpus/BookTreeList.tsx

@@ -32,11 +32,6 @@ const Widget = (prop: IWidgetBookTreeList) => {
     if (prop.root) fetchBookTree(prop.root);
   }, [prop.root]);
 
-  type OrgTree = {
-    name: string;
-    tag: string[];
-    children: OrgTree[];
-  };
   type NewTree = {
     title: string;
     dir: string;

+ 1 - 3
dashboard/src/components/nut/users/SignIn.tsx

@@ -3,11 +3,9 @@ import { ProForm, ProFormText } from "@ant-design/pro-components";
 import { message } from "antd";
 import { useNavigate } from "react-router-dom";
 
-import { setTitle } from "../../../reducers/layout";
-import { useAppSelector, useAppDispatch } from "../../../hooks";
+import { useAppDispatch } from "../../../hooks";
 import { IUser, signIn, TO_HOME } from "../../../reducers/current-user";
 import { get, post } from "../../../request";
-import store from "../../../store";
 
 interface IFormData {
   email: string;

+ 0 - 2
dashboard/src/components/template/SentEdit/SuggestionAdd.tsx

@@ -1,10 +1,8 @@
 import { Button } from "antd";
 import { useState } from "react";
-import { Typography } from "antd";
 import { PlusOutlined } from "@ant-design/icons";
 
 import { ISentence } from "../SentEdit";
-import SentEditMenu from "./SentEditMenu";
 import SentCellEditable from "./SentCellEditable";
 
 interface ISentCell {

+ 0 - 3
dashboard/src/components/template/Wbw/WbwDetailAdvance.tsx

@@ -1,4 +1,3 @@
-import { useIntl } from "react-intl";
 import { Input } from "antd";
 
 import { IWbw } from "./WbwWord";
@@ -8,8 +7,6 @@ interface IWidget {
   onChange?: Function;
 }
 const Widget = ({ data, onChange }: IWidget) => {
-  const intl = useIntl();
-
   const onWordChange = (
     e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
   ) => {

+ 0 - 2
dashboard/src/components/template/Wbw/WbwDetailNote.tsx

@@ -1,4 +1,3 @@
-import { useIntl } from "react-intl";
 import { Input } from "antd";
 
 import { IWbw } from "./WbwWord";
@@ -10,7 +9,6 @@ interface IWidget {
   onChange?: Function;
 }
 const Widget = ({ data, onChange }: IWidget) => {
-  const intl = useIntl();
   const onTextChange = (
     e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
   ) => {

+ 7 - 6
dashboard/src/components/template/Wbw/WbwWord.tsx

@@ -1,4 +1,11 @@
 import { useState, useEffect, useRef } from "react";
+
+import { useAppSelector } from "../../../hooks";
+import { add, wordIndex } from "../../../reducers/inline-dict";
+import { get } from "../../../request";
+import store from "../../../store";
+
+import { IApiResponseDictList } from "../../api/Dict";
 import WbwCase from "./WbwCase";
 import { bookMarkColor } from "./WbwDetailBookMark";
 import WbwFactorMeaning from "./WbwFactorMeaning";
@@ -8,11 +15,6 @@ import WbwPali from "./WbwPali";
 import "./wbw.css";
 import WbwPara from "./WbwPara";
 import WbwPage from "./WbwPage";
-import { useAppSelector } from "../../../hooks";
-import { add, wordList, wordIndex } from "../../../reducers/inline-dict";
-import { get } from "../../../request";
-import { IApiResponseDictList, IDictDataRequest } from "../../api/Dict";
-import store from "../../../store";
 
 export type TFieldName =
   | "word"
@@ -95,7 +97,6 @@ const Widget = ({
   const [wordData, setWordData] = useState(data);
   const [fieldDisplay, setFieldDisplay] = useState(fields);
   const intervalRef = useRef<number | null>(null); //防抖计时器句柄
-  const inlineWordList = useAppSelector(wordList);
   const inlineWordIndex = useAppSelector(wordIndex);
 
   useEffect(() => {

+ 0 - 6
dashboard/src/load.ts

@@ -9,12 +9,6 @@ import { get, IErrorResponse } from "./request";
 //import { GRPC_HOST,  grpc_metadata } from "./request";
 import store from "./store";
 
-interface IUserResponse {
-  ok: boolean;
-  message: string;
-  data: IUser;
-}
-
 export interface ISiteInfoResponse {
   title: string;
 }

+ 1 - 1
dashboard/src/pages/library/dict/show.tsx

@@ -5,7 +5,7 @@ import { Input } from "antd";
 
 import { useState } from "react";
 import DictSearch from "../../../components/dict/DictSearch";
-const { Content, Header } = Layout;
+const { Content } = Layout;
 const { Search } = Input;
 
 const Widget = () => {

+ 40 - 42
dashboard/src/pages/studio/analysis/list.tsx

@@ -1,5 +1,4 @@
 import { useParams } from "react-router-dom";
-import { useIntl } from "react-intl";
 
 import { useState, useEffect } from "react";
 import { Line } from "@ant-design/plots";
@@ -9,50 +8,49 @@ import moment from "moment";
 
 const localizer = momentLocalizer(moment); // or globalizeLocalizer
 const Widget = () => {
-	const intl = useIntl(); //i18n
-	const { studioname } = useParams(); //url 参数
-	const [data, setData] = useState([]);
+  const { studioname } = useParams(); //url 参数
+  const [data, setData] = useState([]);
 
-	useEffect(() => {
-		asyncFetch();
-	}, []);
+  useEffect(() => {
+    asyncFetch();
+  }, []);
 
-	const myEventsList = [{ start: "2022-10-1", end: "2022-10-2" }];
-	const asyncFetch = () => {
-		fetch(
-			"https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json"
-		)
-			.then((response) => response.json())
-			.then((json) => setData(json))
-			.catch((error) => {
-				console.log("fetch data failed", error);
-			});
-	};
-	const config = {
-		data,
-		xField: "Date",
-		yField: "scales",
-		xAxis: {
-			tickCount: 5,
-		},
-		slider: {
-			start: 0.1,
-			end: 0.5,
-		},
-	};
-	return (
-		<>
-			{studioname}
-			<Line {...config} />
+  const myEventsList = [{ start: "2022-10-1", end: "2022-10-2" }];
+  const asyncFetch = () => {
+    fetch(
+      "https://gw.alipayobjects.com/os/bmw-prod/1d565782-dde4-4bb6-8946-ea6a38ccf184.json"
+    )
+      .then((response) => response.json())
+      .then((json) => setData(json))
+      .catch((error) => {
+        console.log("fetch data failed", error);
+      });
+  };
+  const config = {
+    data,
+    xField: "Date",
+    yField: "scales",
+    xAxis: {
+      tickCount: 5,
+    },
+    slider: {
+      start: 0.1,
+      end: 0.5,
+    },
+  };
+  return (
+    <>
+      {studioname}
+      <Line {...config} />
 
-			<Calendar
-				localizer={localizer}
-				events={myEventsList}
-				startAccessor="start"
-				endAccessor="end"
-			/>
-		</>
-	);
+      <Calendar
+        localizer={localizer}
+        events={myEventsList}
+        startAccessor="start"
+        endAccessor="end"
+      />
+    </>
+  );
 };
 
 export default Widget;

+ 0 - 2
dashboard/src/pages/studio/group/show.tsx

@@ -1,5 +1,4 @@
 import { useParams } from "react-router-dom";
-import { useIntl } from "react-intl";
 import { Button, Card } from "antd";
 import { Col, Row } from "antd";
 import GroupFile from "../../../components/group/GroupFile";
@@ -10,7 +9,6 @@ import { IGroupResponse } from "../../../components/api/Group";
 import GoBack from "../../../components/studio/GoBack";
 
 const Widget = () => {
-  const intl = useIntl();
   const { studioname, groupid } = useParams(); //url 参数
   const [title, setTitle] = useState("loading");
   useEffect(() => {