feat: switch tab component in plugins to shadcn

This commit is contained in:
Junyan Qin
2025-05-09 11:28:41 +08:00
parent 4b2ffcda12
commit eb42516f88
3 changed files with 59 additions and 55 deletions
+24 -29
View File
@@ -1,41 +1,36 @@
'use client'; 'use client';
import { Radio } from 'antd';
import { useState } from 'react';
import PluginInstalledComponent from '@/app/home/plugins/plugin-installed/PluginInstalledComponent'; import PluginInstalledComponent from '@/app/home/plugins/plugin-installed/PluginInstalledComponent';
import PluginMarketComponent from '@/app/home/plugins/plugin-market/PluginMarketComponent'; import PluginMarketComponent from '@/app/home/plugins/plugin-market/PluginMarketComponent';
import styles from './plugins.module.css'; import styles from './plugins.module.css';
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Button } from "@/components/ui/button";
import { PlusIcon } from "lucide-react";
export default function PluginConfigPage() { export default function PluginConfigPage() {
enum PageType {
INSTALLED = 'installed',
MARKET = 'market',
}
const [nowPageType, setNowPageType] = useState(PageType.INSTALLED);
return ( return (
<div className={styles.pageContainer}> <div className={styles.pageContainer}>
<Radio.Group <Tabs defaultValue="installed" className="w-full">
block <div className='flex flex-row justify-between items-center'>
options={[ <TabsList className='shadow-md py-5 bg-[#f0f0f0]'>
{ label: '已安装', value: PageType.INSTALLED }, <TabsTrigger value="installed" className="px-6 py-4"></TabsTrigger>
{ label: '插件市场', value: PageType.MARKET }, <TabsTrigger value="market" className="px-6 py-4"></TabsTrigger>
]}
defaultValue={PageType.INSTALLED}
value={nowPageType}
optionType="button"
buttonStyle="solid"
style={{ marginBottom: '20px' }}
onChange={(e) => {
setNowPageType(e.target.value as PageType);
}}
/>
{nowPageType === PageType.INSTALLED ? ( </TabsList>
<PluginInstalledComponent />
) : ( <div className='flex flex-row justify-end items-center'>
<PluginMarketComponent /> <Button variant="default" className='px-6 py-4'>
)} <PlusIcon className='w-4 h-4' />
</Button>
</div>
</div>
<TabsContent value="installed">
<PluginInstalledComponent />
</TabsContent>
<TabsContent value="market">
<PluginMarketComponent />
</TabsContent>
</Tabs>
</div> </div>
); );
} }
@@ -5,9 +5,17 @@ import CreateCardComponent from '@/app/infra/basic-component/create-card-compone
import { PluginCardVO } from '@/app/home/plugins/plugin-installed/PluginCardVO'; import { PluginCardVO } from '@/app/home/plugins/plugin-installed/PluginCardVO';
import PluginCardComponent from '@/app/home/plugins/plugin-installed/plugin-card/PluginCardComponent'; import PluginCardComponent from '@/app/home/plugins/plugin-installed/plugin-card/PluginCardComponent';
import styles from '@/app/home/plugins/plugins.module.css'; import styles from '@/app/home/plugins/plugins.module.css';
import { Modal, Input } from 'antd'; import { GithubIcon } from 'lucide-react';
import { GithubOutlined } from '@ant-design/icons';
import { httpClient } from '@/app/infra/http/HttpClient'; import { httpClient } from '@/app/infra/http/HttpClient';
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogFooter,
} from "@/components/ui/dialog";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
export default function PluginInstalledComponent() { export default function PluginInstalledComponent() {
const [pluginList, setPluginList] = useState<PluginCardVO[]>([]); const [pluginList, setPluginList] = useState<PluginCardVO[]>([]);
@@ -56,33 +64,33 @@ export default function PluginInstalledComponent() {
console.log('error when install plugin:', err); console.log('error when install plugin:', err);
}); });
} }
return ( return (
<div className={`${styles.pluginListContainer}`}> <div className={`${styles.pluginListContainer}`}>
<Modal <Dialog open={modalOpen} onOpenChange={setModalOpen}>
title={ <DialogContent className="w-[500px] p-6">
<div className={`${styles.modalTitle}`}> <DialogHeader>
<GithubOutlined <DialogTitle className="flex items-center gap-4">
style={{ <GithubIcon className="size-6" />
fontSize: '30px', <span>GitHub安装插件</span>
marginRight: '20px', </DialogTitle>
}} </DialogHeader>
<div className="mt-4">
<p className="mb-2"> GitHub </p>
<Input
placeholder="请输入插件的Github链接"
value={githubURL}
onChange={(e) => setGithubURL(e.target.value)}
className="mb-4"
/> />
</div> </div>
} <DialogFooter>
open={modalOpen} <Button variant="outline" onClick={() => setModalOpen(false)}></Button>
onOk={handleModalConfirm} <Button onClick={handleModalConfirm}></Button>
onCancel={() => setModalOpen(false)} </DialogFooter>
destroyOnClose={true} </DialogContent>
> </Dialog>
<div className={`${styles.modalBody}`}>
<div> GitHub </div>
<Input
placeholder="请输入插件的Github链接"
value={githubURL}
onChange={(e) => setGithubURL(e.target.value)}
/>
</div>
</Modal>
{pluginList.map((vo, index) => { {pluginList.map((vo, index) => {
return ( return (
<div key={index}> <div key={index}>
@@ -90,6 +98,7 @@ export default function PluginInstalledComponent() {
</div> </div>
); );
})} })}
<CreateCardComponent <CreateCardComponent
height={'140px'} height={'140px'}
plusSize={'90px'} plusSize={'90px'}