This commit is contained in:
@@ -20,10 +20,13 @@ const AddToFolder: React.FC<AddToFolderProps> = ({ item, setShow }) => {
|
|||||||
const session = useSession();
|
const session = useSession();
|
||||||
const [folders, setFolders] = useState<folder[]>([]);
|
const [folders, setFolders] = useState<folder[]>([]);
|
||||||
const t = useTranslations("translator.add_to_folder");
|
const t = useTranslations("translator.add_to_folder");
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const username = session.data!.user!.name as string;
|
const username = session.data!.user!.name as string;
|
||||||
getFoldersByOwner(username).then(setFolders);
|
getFoldersByOwner(username)
|
||||||
|
.then(setFolders)
|
||||||
|
.then(() => setLoading(false));
|
||||||
}, [session.data]);
|
}, [session.data]);
|
||||||
|
|
||||||
if (session.status !== "authenticated") {
|
if (session.status !== "authenticated") {
|
||||||
@@ -40,36 +43,37 @@ const AddToFolder: React.FC<AddToFolderProps> = ({ item, setShow }) => {
|
|||||||
<Container className="p-6">
|
<Container className="p-6">
|
||||||
<h1>{t("chooseFolder")}</h1>
|
<h1>{t("chooseFolder")}</h1>
|
||||||
<div className="border border-gray-200 rounded-2xl">
|
<div className="border border-gray-200 rounded-2xl">
|
||||||
{(folders.length > 0 &&
|
{(loading && <span>...</span>) ||
|
||||||
folders.map((folder) => (
|
(folders.length > 0 &&
|
||||||
<button
|
folders.map((folder) => (
|
||||||
key={folder.id}
|
<button
|
||||||
className="p-2 flex items-center justify-start hover:bg-gray-50 gap-2 hover:cursor-pointer w-full border-b border-gray-200"
|
key={folder.id}
|
||||||
onClick={() => {
|
className="p-2 flex items-center justify-start hover:bg-gray-50 gap-2 hover:cursor-pointer w-full border-b border-gray-200"
|
||||||
createTextPair({
|
onClick={() => {
|
||||||
text1: item.text1,
|
createTextPair({
|
||||||
text2: item.text2,
|
text1: item.text1,
|
||||||
locale1: item.locale1,
|
text2: item.text2,
|
||||||
locale2: item.locale2,
|
locale1: item.locale1,
|
||||||
folders: {
|
locale2: item.locale2,
|
||||||
connect: {
|
folders: {
|
||||||
id: folder.id,
|
connect: {
|
||||||
|
id: folder.id,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
toast.success(t("success"));
|
|
||||||
setShow(false);
|
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.then(() => {
|
||||||
toast.error(t("error"));
|
toast.success(t("success"));
|
||||||
});
|
setShow(false);
|
||||||
}}
|
})
|
||||||
>
|
.catch(() => {
|
||||||
<Folder />
|
toast.error(t("error"));
|
||||||
{t("folderInfo", { id: folder.id, name: folder.name })}
|
});
|
||||||
</button>
|
}}
|
||||||
))) || <div>{t("noFolders")}</div>}
|
>
|
||||||
|
<Folder />
|
||||||
|
{t("folderInfo", { id: folder.id, name: folder.name })}
|
||||||
|
</button>
|
||||||
|
))) || <div>{t("noFolders")}</div>}
|
||||||
</div>
|
</div>
|
||||||
<LightButton onClick={() => setShow(false)}>{t("close")}</LightButton>
|
<LightButton onClick={() => setShow(false)}>{t("close")}</LightButton>
|
||||||
</Container>
|
</Container>
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ export default function TranslatorPage() {
|
|||||||
<div className="m-6 flex flex-col items-center">
|
<div className="m-6 flex flex-col items-center">
|
||||||
<h1 className="text-2xl font-light">{t("history")}</h1>
|
<h1 className="text-2xl font-light">{t("history")}</h1>
|
||||||
<div className="border border-gray-200 rounded-2xl m-4">
|
<div className="border border-gray-200 rounded-2xl m-4">
|
||||||
{history.map((item, index) => (
|
{history.toReversed().map((item, index) => (
|
||||||
<div key={index}>
|
<div key={index}>
|
||||||
<div className="border-b border-gray-200 p-2 group hover:bg-gray-50 flex gap-2 flex-row justify-between items-start">
|
<div className="border-b border-gray-200 p-2 group hover:bg-gray-50 flex gap-2 flex-row justify-between items-start">
|
||||||
<div className="flex-1 flex flex-col">
|
<div className="flex-1 flex flex-col">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { NextRequest } from "next/server";
|
|||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
return await simpleGetLLMAnswer(
|
return await simpleGetLLMAnswer(
|
||||||
`请生成%s的严式国际音标(International Phonetic Alphabet),然后直接发给我。`,
|
`请生成[[[%s]]]的严式国际音标(International Phonetic Alphabet),然后直接发给我,不要附带任何说明。`,
|
||||||
req.nextUrl.searchParams,
|
req.nextUrl.searchParams,
|
||||||
["text"],
|
["text"],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { NextRequest } from "next/server";
|
|||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
return await simpleGetLLMAnswer(
|
return await simpleGetLLMAnswer(
|
||||||
`请根据文本“%s”推断地区(locale),形如zh-CN、en-US,然后直接发给我。`,
|
`请根据文本[[[%s]]]推断地区(locale),形如zh-CN、en-US,然后直接发给我,不要附带任何说明。`,
|
||||||
req.nextUrl.searchParams,
|
req.nextUrl.searchParams,
|
||||||
["text"],
|
["text"],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { NextRequest } from "next/server";
|
|||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
return await simpleGetLLMAnswer(
|
return await simpleGetLLMAnswer(
|
||||||
`请翻译%s到%s然后直接发给我。`,
|
`请翻译文本[[[%s]]]到语言[[[%s]]]然后直接发给我,不要附带任何说明,不要新增任何符号。`,
|
||||||
req.nextUrl.searchParams,
|
req.nextUrl.searchParams,
|
||||||
["text", "lang"],
|
["text", "lang"],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ async function callZhipuAPI(
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`API 调用失败: ${response.status}`);
|
throw new Error(`API 调用失败: ${response.status} ${response.statusText}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await response.json();
|
return await response.json();
|
||||||
|
|||||||
Reference in New Issue
Block a user