Commit 5d6c6bf8 authored by wuhao's avatar wuhao 🎯

asder

parent 58b8a593
"use client";
import { getFetch } from "@/lib/doFetch";
import { useRequest } from "ahooks";
import { Button } from "@nextui-org/react";
import { ArrowLeftOutlined } from "@ant-design/icons";
import EditFolder from "@/components/EditFolder";
import DeleteFolder from "@/components/DeleteFolder";
import EditCollection from "@/components/EditCollection";
import DeleteCollection from "@/components/DeleteCollection";
import { useRouter } from "next/navigation";
import {message} from 'antd';
import { IoMdShareAlt } from "react-icons/io";
const columns = [
......@@ -39,36 +38,48 @@ export default function Detail({ params }) {
}
);
const handleCopy = () => {
const textToCopy = window.location.href;
navigator.clipboard.writeText(textToCopy)
.then(() => {
message.success('链接复制成功')
})
.catch(err => {
console.error('Failed to copy text to clipboard:', err);
});
};
return (
<div className="flex w-full flex-col">
<div className="flex gap-4">
<Button
isIconOnly
color="primary"
variant="faded"
aria-label="Take a add"
onPress={() => {
router.back();
}}
>
<ArrowLeftOutlined></ArrowLeftOutlined>
</Button>
<Button color="primary" variant="flat">
{data?.name}
</Button>
<EditFolder data={data} refresh={refreshAsync}/>
<DeleteFolder data={data} refresh={refreshAsync}/>
</div>
<ul class="divide-y divide-gray-200">
<div className="flex gap-4">
<Button
isIconOnly
color="primary"
variant="faded"
aria-label="Take a add"
onPress={() => {
router.back();
}}
>
<ArrowLeftOutlined></ArrowLeftOutlined>
</Button>
<Button color="primary" variant="flat" onPress={handleCopy} endContent={<IoMdShareAlt style={{fontSize:24}}/>}>
分享
</Button>
<EditCollection data={data} refresh={refreshAsync} />
<DeleteCollection data={data} refresh={refreshAsync} />
</div>
<div className="w-full object-cover h-[180px] flex justify-center items-center bg-gradient-to-r from-cyan-500 to-blue-500 text-white text-xl rounded-2xl mt-6">
{data?.name}
</div>
<ul className="divide-y divide-gray-200">
{columns?.map((it) => {
return (
<li class="flex items-center py-4" key={it?.name}>
<div class="ml-4">
<div class="text-sm font-medium text-gray-900">{it?.label}</div>
<div class="text-sm text-gray-500">{data?.[it?.name]}</div>
<li className="flex items-center py-4" key={it?.name}>
<div className="ml-4">
<div className="text-sm font-medium text-gray-900">{it?.label}</div>
<div className="text-sm text-gray-500 mt-2">{data?.[it?.name]}</div>
</div>
</li>
);
......
......@@ -77,15 +77,24 @@ export default function Detail({ folder, params }) {
></AddFolder>
<Divider orientation="vertical" />
<AddCollection
refresh={refreshAsync}
parentId={params.slug}
type={"icon"}
refresh={refreshAsync}
parentId={params.slug}
type={"icon"}
/>
</div>
<div className="mt-8 flex flex-wrap gap-2">
<Cards list={data?.folders ?? []}></Cards>
<Collections list={data?.collections ?? []}></Collections>
{data?.folders?.length === 0 &&data?.collections?.length ===0 && (
<Image
alt="empty"
isZoomed
className="object-cover"
src="/empty.png"
width={240}
/>
)}
</div>
</div>
</div>
......
......@@ -7,8 +7,8 @@ import { Providers } from "./providers";
// const inter = Inter({ subsets: ["latin"] });
export const metadata = {
title: "Create Next App",
description: "Generated by create next app",
title: "语言模型训练数据库",
description: "语言模型训练数据库",
};
export default function RootLayout({ children }) {
......
......@@ -5,10 +5,9 @@ import AddFolder from "@/components/AddFolder";
import AddCollection from "@/components/AddCollection";
import Cards from "@/components/Cards";
import Collections from "@/components/Collections";
import { useRequest } from "ahooks";
import { getFetch } from "@/lib/doFetch";
import { Image } from "@nextui-org/react";
export default function Home(props) {
const { data, refreshAsync, refresh } = useRequest(async () => {
......@@ -29,6 +28,15 @@ export default function Home(props) {
<div className="flex gap-4">
<Cards list={data ?? []} />
<Collections list={collection?.data ?? []} />
{data?.length === 0 &&collection?.data?.length ===0 && (
<Image
alt="empty"
isZoomed
className="object-cover"
src="/empty.png"
width={240}
/>
)}
</div>
</div>
);
......
......@@ -23,15 +23,15 @@ export default function AddCollection({ refresh, parentId, type }) {
const handleButtonClick = async (close) => {
// 手动触发表单提交
handleSubmit(onSubmit)();
await refresh();
close();
};
const onSubmit = async (data) => {
return await doFetch({
await doFetch({
url: "/api/collection",
params: { ...data, parentId:parentId ?parseInt(parentId): null },
params: { ...data, parentId: parentId ? parseInt(parentId) : null },
});
await refresh();
};
return (
......@@ -100,58 +100,46 @@ export default function AddCollection({ refresh, parentId, type }) {
type="text"
label="编码"
name="code"
{...register("code", { required: true, maxLength: 20 })}
{...register("code")}
/>
<Input
type="text"
label="故障类型"
name="faultType"
{...register("faultType", {
required: true,
maxLength: 20,
})}
{...register("faultType")}
/>
<Input
type="text"
label="故障"
name="fault"
{...register("fault", { required: true, maxLength: 20 })}
{...register("fault")}
/>
<Textarea
type="text"
label="判断条件"
name="faultJudge"
{...register("faultJudge", {
required: true,
maxLength: 20,
})}
{...register("faultJudge")}
/>
<Textarea
type="text"
label="故障原因"
name="faultReason"
{...register("faultReason", {
required: true,
maxLength: 20,
})}
{...register("faultReason")}
/>
<Textarea
type="text"
label="解决方案"
name="faultFn"
{...register("faultFn", { required: true, maxLength: 20 })}
{...register("faultFn")}
/>
<Textarea
type="text"
label="故障描述"
name="faultMessage"
{...register("faultMessage", {
required: true,
maxLength: 20,
})}
{...register("faultMessage")}
/>
</form>
</ModalBody>
......
......@@ -12,6 +12,7 @@ export default memo(({ list }) => {
const router = useRouter();
return (
list?.length>0&&
<div className="gap-2 flex flex-wrap">
{list?.map?.((item, index) => (
<Card
......@@ -41,15 +42,6 @@ export default memo(({ list }) => {
</CardFooter>
</Card>
))}
{list?.length === 0 && (
<Image
alt="empty"
isZoomed
className="object-cover"
src="/empty.png"
width={240}
/>
)}
</div>
);
});
import React, { useEffect } from "react";
import React from "react";
import {
Modal,
ModalContent,
......@@ -7,24 +7,20 @@ import {
ModalFooter,
Button,
useDisclosure,
Input,
} from "@nextui-org/react";
import { useForm, Controller } from "react-hook-form";
import { delFetch, doFetch, putFetch } from "@/lib/doFetch";
import UploadImage from "./UploadImage";
import { delFetch } from "@/lib/doFetch";
import { BsTrash3Fill } from "react-icons/bs";
import { useRouter } from "next/navigation";
export default function DeleteFolder({ refresh, data }) {
export default function DeleteCollection({ refresh, data }) {
const { isOpen, onOpen, onOpenChange } = useDisclosure();
const router = useRouter();
const handleButtonClick = async (close) => {
await delFetch({url:"/api/folder/"+data.id})
await delFetch({ url: "/api/collection/" + data.id });
router.back(); // 返回上一页
};
return (
<>
<Button isIconOnly color="danger" aria-label="Like" onPress={onOpen}>
......@@ -59,13 +55,10 @@ export default function DeleteFolder({ refresh, data }) {
{(onClose) => (
<>
<ModalHeader className="flex flex-col gap-1">
是否删除该文件夹
是否删除该知识库
</ModalHeader>
<ModalBody>
<p>
仅可删除空文件夹
</p>
<p>删除后无法恢复请谨慎操作</p>
</ModalBody>
<ModalFooter>
<Button color="danger" variant="light" onPress={onClose}>
......
This diff is collapsed.
......@@ -20,7 +20,13 @@ export default function EditFolder({ refresh, data }) {
const { isOpen, onOpen, onOpenChange } = useDisclosure();
const router = useRouter();
const { register, handleSubmit, control, setValue, formState: { errors }, } = useForm({
const {
register,
handleSubmit,
control,
setValue,
formState: { errors },
} = useForm({
defaultValues: {
poster: data?.poster,
name: data?.name,
......@@ -28,7 +34,7 @@ export default function EditFolder({ refresh, data }) {
});
useEffect(() => {
if (data&&isOpen===true) {
if (data && isOpen === true) {
setValue("poster", data.poster);
setValue("name", data.name);
console.log(data.name);
......@@ -42,7 +48,7 @@ export default function EditFolder({ refresh, data }) {
};
const onSubmit = async (params) => {
await putFetch({ url: "/api/folder/"+ data?.id, params });
await putFetch({ url: "/api/folder/" + data?.id, params });
await refresh();
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment