feat: update

This commit is contained in:
landaiqing
2024-07-10 15:54:41 +08:00
parent bc90bae744
commit 32dff4adbb
19 changed files with 1086 additions and 422 deletions

View File

@@ -17,6 +17,7 @@
"@types/crypto-js": "^4.2.2",
"@types/react-calendar-heatmap": "^1.6.7",
"@vitejs/plugin-legacy": "^5.4.0",
"aieditor": "^1.0.12",
"antd": "^5.17.4",
"autoprefixer": "^10.4.19",
"axios": "^1.7.2",
@@ -31,6 +32,7 @@
"react": "^18.3.1",
"react-calendar-heatmap": "^1.9.0",
"react-dom": "^18.3.1",
"react-infinite-scroll-component": "^6.1.0",
"react-rotate-captcha": "^1.0.26",
"react-router-dom": "^6.23.1",
"regenerator-runtime": "^0.14.1",

830
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 376 KiB

View File

@@ -1,12 +1,7 @@
/** @format */
import { Avatar, Button, message } from "antd";
import {
DrawerForm,
ProCard,
ProForm,
ProFormText,
} from "@ant-design/pro-components";
import { DrawerForm, ProCard, ProForm, ProFormText } from "@ant-design/pro-components";
import React, { createContext, useContext, useState } from "react";
import { EditOutlined, EllipsisOutlined, SettingOutlined } from "@ant-design/icons";
import bucket from "../../../../assets/icons/bucket.svg";

View File

@@ -1,13 +1,9 @@
.proCard{
max-width: 30%;
height: 75vh;
max-height: 75vh;
}
.proCardBucket{
height: 75vh;
max-height: 75vh;
width: 100%;
}
@@ -23,6 +19,3 @@
overflow-y:scroll;
overflow-x: hidden;
}
//.div_checkCardArea::-webkit-scrollbar {
//
//}

View File

@@ -14,23 +14,14 @@ const Bucket: FunctionComponent = () => {
return (
<div className={styles.div_proCard}>
<ProCard
extra={
<Button
type="primary"
shape={"circle"}
icon={<ReloadOutlined />}
onClick={() => navigate("/main/bucket/add")}></Button>
}
extra={<Button type="primary" shape={"circle"} icon={<ReloadOutlined />}></Button>}
title="存储商"
headerBordered
className={styles.proCard}
boxShadow={true}
colSpan={"100%"}
bordered>
<CheckCard.Group
onChange={(value) => {
console.log("value", value);
}}>
<CheckCard.Group>
<div className={styles.div_checkCardArea}>
{checkList.map((item) => {
return (
@@ -42,7 +33,6 @@ const Bucket: FunctionComponent = () => {
description="点击查看"
value={item}
onChange={() => {
console.log(`/main/bucket/${item}`);
navigate(`/main/bucket/${item}`);
}}
/>

View File

@@ -5,7 +5,7 @@ import { Avatar, Card, Empty, Select } from "antd";
import styles from "./index.module.less";
import { Outlet, useLocation, useNavigate } from "react-router-dom";
import { Suspense } from "react";
import selectOptions from "@/components/Main/Settings/defaultSettings.ts";
import selectOptions from "@/components/Main/Settings/settings.ts";
import StorageIcon from "@/context/stroage-icon.ts";
export default () => {
const navigate = useNavigate();

View File

@@ -1,7 +0,0 @@
/** @format */
import React from "react";
const ShareList: React.FunctionComponent = () => {
return <></>;
};
export default ShareList;

View File

@@ -0,0 +1,46 @@
/** @format */
import React, { useEffect, useRef } from "react";
import { Button } from "antd";
import { LeftOutlined } from "@ant-design/icons";
import { useNavigate } from "react-router-dom";
import {AiEditor} from "aieditor";
import "aieditor/dist/style.css"
const ShareDetail: React.FunctionComponent = () => {
const navigate = useNavigate();
//定义 ref
const divRef = useRef(null);
//初始化 AiEditor
useEffect(() => {
if (divRef.current) {
const aiEditor = new AiEditor({
editable:false,
element: divRef.current,
placeholder: "点击输入内容...",
content: 'AiEditor 是一个面向 AI 的开源富文本编辑器。 ',
})
return ()=>{
aiEditor.destroy();
}
}
}, [])
return (
<>
<Button
shape="circle"
icon={<LeftOutlined />}
onClick={() => {
navigate("/main/share/list/1");
}}
/>
<div>
<div ref={divRef} style={{ height: 550}}>
</div>
<div>
555
</div>
</div>
</>
);
};
export default ShareDetail;

View File

@@ -1,86 +0,0 @@
/** @format */
import { LikeOutlined, MessageOutlined, StarOutlined } from "@ant-design/icons";
import { ProList } from "@ant-design/pro-components";
import { Button, Tag } from "antd";
import React from "react";
const IconText = ({ icon, text }: { icon: any; text: string }) => (
<span>
{React.createElement(icon, { style: { marginInlineEnd: 8 } })}
{text}
</span>
);
const dataSource = [
{
title: "语雀的天空",
},
{
title: "Ant Design",
},
{
title: "蚂蚁金服体验科技",
},
{
title: "TechUI",
},
];
const ShareList = () => {
return (
<ProList<{ title: string }>
toolBarRender={() => {
return [
<Button key="3" type="primary">
</Button>,
];
}}
itemLayout="vertical"
rowKey="id"
// headerTitle="竖排样式"
dataSource={dataSource}
metas={{
title: {},
description: {
render: () => (
<>
<Tag></Tag>
<Tag></Tag>
<Tag></Tag>
</>
),
},
actions: {
render: () => [
<IconText icon={StarOutlined} text="156" key="list-vertical-star-o" />,
<IconText icon={LikeOutlined} text="156" key="list-vertical-like-o" />,
<IconText icon={MessageOutlined} text="2" key="list-vertical-message" />,
],
},
extra: {
render: () => (
<img
width={272}
alt="logo"
src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png"
/>
),
},
content: {
render: () => {
return (
<div>
design.alipay.com
design.alipay.com
</div>
);
},
},
}}
/>
);
};
export default ShareList;

View File

@@ -0,0 +1,102 @@
/** @format */
import { ProCard } from "@ant-design/pro-components";
import { Avatar, Button, Divider, List, Skeleton } from "antd";
import { useEffect, useState } from "react";
import styles from "./index.module.less";
import Search from "antd/es/input/Search";
import InfiniteScroll from "react-infinite-scroll-component";
import { useNavigate } from "react-router-dom";
import { LeftOutlined } from "@ant-design/icons";
interface DataType {
gender: string;
name: {
title: string;
first: string;
last: string;
};
email: string;
picture: {
large: string;
medium: string;
thumbnail: string;
};
nat: string;
}
export default () => {
const navigate = useNavigate();
const [loading, setLoading] = useState(false);
const [data, setData] = useState<DataType[]>([]);
const loadMoreData = () => {
if (loading) {
return;
}
setLoading(true);
fetch("https://randomuser.me/api/?results=10&inc=name,gender,email,nat,picture&noinfo")
.then((res) => res.json())
.then((body) => {
setData([...data, ...body.results]);
setLoading(false);
})
.catch(() => {
setLoading(false);
});
};
useEffect(() => {
loadMoreData();
}, []);
return (
<>
<div className={styles.share_list_main}>
<ProCard bordered={true} boxShadow={true}>
<div className={styles.share_list_header}>
<div>
<Button
shape="circle"
icon={<LeftOutlined />}
onClick={() => {
navigate("/main/share");
}}
/>
<Search placeholder="搜索" style={{ width: 500, marginLeft: 20 }} />
</div>
<Button></Button>
</div>
</ProCard>
<ProCard bordered={true} boxShadow={true} style={{ marginTop: 20 }}>
<InfiniteScroll
dataLength={data.length}
next={loadMoreData}
hasMore={data.length < 50}
loader={<Skeleton avatar paragraph={{ rows: 1 }} active />}
endMessage={<Divider plain>It is all, nothing more 🤐</Divider>}
scrollableTarget="scrollableDiv">
<List
dataSource={data}
renderItem={(item) => (
<List.Item key={item.email}>
<List.Item.Meta
avatar={<Avatar src={item.picture.large} />}
title={
<a
onClick={() => {
navigate("/main/share/detail/1");
}}>
{item.name.last}
</a>
}
description={item.email}
/>
<div>Content</div>
</List.Item>
)}
/>
</InfiniteScroll>
</ProCard>
</div>
</>
);
};

View File

@@ -0,0 +1,9 @@
.share_list_main{
display: flex;
flex-direction: column;
.share_list_header{
display: flex;
flex-direction: row;
justify-content: space-between;
}
}

View File

@@ -1,39 +1,46 @@
/** @format */
import { FunctionComponent } from "react";
import { ProCard } from "@ant-design/pro-components";
import styles from "./index.module.less";
import { Avatar, Button, Card } from "antd";
import setting from "@/assets/icons/setting.svg";
import Search from "antd/es/input/Search";
import Meta from "antd/es/card/Meta";
import { useNavigate } from "react-router-dom";
const MainShare: FunctionComponent = () => {
const navigate = useNavigate();
return (
<>
<div className={styles.share_main}>
<ProCard bordered={true} boxShadow={true}>
<div className={styles.share_header}>
<Search placeholder="搜索圈子" style={{ width: 500 }} />
<Button></Button>
</div>
</ProCard>
<ProCard bordered={true} boxShadow={true} style={{ marginTop: 20 }}>
<Card
style={{ width: 250, marginTop: 16 }}
hoverable
onClick={() => {
navigate("/main/share/list/1");
}}>
<Meta
avatar={<Avatar src={setting} />}
title="Card title"
description="This is the description"
/>
</Card>
</ProCard>
</div>
</>
);
};
export default MainShare;
/** @format */
import { FunctionComponent } from "react";
import { ProCard } from "@ant-design/pro-components";
import styles from "./index.module.less";
import { Button, Card, Image } from "antd";
import Search from "antd/es/input/Search";
import Meta from "antd/es/card/Meta";
import { useNavigate } from "react-router-dom";
import background from "@/assets/images/background.png";
const MainShare: FunctionComponent = () => {
const navigate = useNavigate();
return (
<>
<div className={styles.share_main}>
<ProCard bordered={true} boxShadow={false}>
<div className={styles.share_header}>
<Search placeholder="搜索圈子" style={{ width: 500 }} />
<Button></Button>
</div>
</ProCard>
<ProCard bordered={true} boxShadow={false} style={{ marginTop: 20 }}>
<Card
hoverable
style={{ width: 240 }}
onClick={() => {
navigate("/main/share/list/1");
}}
cover={
<Image
alt="example"
src={background}
style={{ height: 200 }}
preview={false}
width={"100%"}
fallback="data:image/png;base64,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"
/>
}>
<Meta title="Europe Street beat" description="www.instagram.com" />
</Card>
</ProCard>
</div>
</>
);
};
export default MainShare;

View File

@@ -0,0 +1,11 @@
/** @format */
import { lazy } from "react";
const ShareDetail = lazy(
() =>
new Promise((resolve: any) => {
resolve(import("@/components/Main/Share/components/ShareDetail/ShareDetail.tsx"));
}),
);
export default ShareDetail;

View File

@@ -5,7 +5,7 @@ import { lazy } from "react";
const ShareList = lazy(
() =>
new Promise((resolve: any) => {
resolve(import("@/components/Main/Share/components/ShareList"));
resolve(import("@/components/Main/Share/components/ShareList/ShareList.tsx"));
}),
);
export default ShareList;

View File

@@ -32,6 +32,7 @@ import Wangyi from "@/router/modules/main/settings/wangyi/wangyi.ts";
import Jinshan from "@/router/modules/main/settings/jinshan/jinshan.ts";
import Qiniu from "@/router/modules/main/settings/qiniu/qiniu.ts";
import ShareList from "@/router/modules/main/share/modules/shareList.tsx";
import ShareDetail from "@/router/modules/main/share/modules/shareDetail.tsx";
import minioBucket from "@/router/modules/main/bucket/createBuckets/minio.ts";
import tencentBucket from "@/router/modules/main/bucket/createBuckets/tencent.ts";
import aliBucket from "@/router/modules/main/bucket/createBuckets/ali.ts";
@@ -158,6 +159,10 @@ const routes: RouteObject[] = [
path: "/main/share/list/:id",
Component: ShareList,
},
{
path: "/main/share/detail/:id",
Component: ShareDetail,
},
{
path: "/main/setting",
Component: MainSetting,

32
src/types/user.d.ts vendored Normal file
View File

@@ -0,0 +1,32 @@
/** @format */
/* eslint-disable */
declare namespace API {
type PhoneRegisterRequest = {
phone?: string;
userName?: string;
password?: string;
confirmPassword?: string;
activeCode?: string;
};
type LoginRequest = {
userName?: string;
password?: string;
token: string;
deg: number;
};
type LoginByPhoneRequest = {
phone?: string;
activeCode?: string;
token: string;
deg: number;
};
type findPasswordRequest = {
phone?: string;
password?: string;
confirmPassword?: string;
activeCode?: string;
token: string;
deg: number;
};
}

View File

@@ -1,261 +0,0 @@
/** @format */
/* eslint-disable */
declare namespace API {
type PhoneRegisterRequest = {
phone?: string;
userName?: string;
password?: string;
confirmPassword?: string;
activeCode?: string;
};
type LoginRequest = {
userName?: string;
password?: string;
token: string;
deg: number;
};
type LoginByPhoneRequest = {
phone?: string;
activeCode?: string;
token: string;
deg: number;
};
type findPasswordRequest = {
phone?: string;
password?: string;
confirmPassword?: string;
activeCode?: string;
token: string;
deg: number;
};
// type ApiResponse<T> = {
// success?: boolean;
// code?: number;
// codeMessage?: string;
// errorMessage?: Map<string, string>;
// showType?: ErrorShowType;
// data: T
// }
// type CurrentUser = {
// name?: string;
// avatar?: string;
// userid?: string;
// email?: string;
// signature?: string;
// title?: string;
// group?: string;
// tags?: { key?: string; label?: string }[];
// notifyCount?: number;
// unreadCount?: number;
// country?: string;
// access?: string;
// geographic?: {
// province?: { label?: string; key?: string };
// city?: { label?: string; key?: string };
// };
// address?: string;
// phone?: string;
// };
//
// type LoginResult = ResponseStructure & {
// data?: {
// token?: string;
// expireDateTime?: number;
// expire?: number;
// timeUnit?: any;
// }
// };
//
// type PageParams = {
// pageNum?: number;
// pageSize?: number;
// };
// type RuleListItem = {
// key?: number;
// disabled?: boolean;
// href?: string;
// avatar?: string;
// name?: string;
// owner?: string;
// desc?: string;
// callNo?: number;
// status?: number;
// updatedAt?: string;
// createdAt?: string;
// progress?: number;
// };
// type RuleList = {
// data?: RuleListItem[];
// /** 列表的内容总数 */
// total?: number;
// success?: boolean;
// };
// interface ResponseStructure {
// success?: boolean;
// code?: number;
// codeMessage?: string;
// errorMessage?: Map<string, string>;
// showType?: ErrorShowType;
// }
// type
// FakeCaptcha = ResponseStructure & {
// data?: boolean,
// };
//
// type PhonePasswordLoginParams = {
// clientId?: string;
// phone?: string;
// password?: string;
// code?: string;
// autoLogin?: boolean;
// };
//
// type PhoneSmsCodeLoginParams = {
// clientId?: string;
// phone?: string;
// smsCode?: string;
// autoLogin?: boolean;
// };
//
// type ErrorResponse = {
// /** 业务约定的错误码 */
// errorCode: string;
// /** 业务上的错误信息 */
// errorMessage?: Map<string, string>;
// /** 业务上的请求是否成功 */
// success?: boolean;
// };
//
// type NoticeIconList = {
// data?: NoticeIconItem[];
// /** 列表的内容总数 */
// total?: number;
// success?: boolean;
// };
// type NoticeIconItemType = 'notification' | 'message' | 'event';
// type NoticeIconItem = {
// id?: string;
// extra?: string;
// key?: string;
// read?: boolean;
// avatar?: string;
// title?: string;
// status?: string;
// datetime?: string;
// description?: string;
// type?: NoticeIconItemType;
// };
// type GenerateMpRegCode = {
// data?: {
// regCode?: string;
// qrCodeUrl?: string;
// expireSeconds?: number;
// ticket?: string;
// url?: string;
// };
// }
// type GetClientId = {
// data?: string;
// }
// type GenerateBase64Code = {
// data?: string;
// }
// type GetClientToken = {
// data?: {
// token?: string;
// expireDateTime?: number;
// expire?: number;
// };
// }
// type PhoneRegisterResponse = ResponseStructure & {
// data?: number;
// }
//
// type CustomValidate = {
// validateStatus?: boolean;
// msg?: string;
// formValue?: any;
// code?: number;
// codeMessage?: string;
// errors?: Map<string, string>;
// validateFields: ValidateFields<Values>;
// }
//
// type ListAccountBookVo = ResponseStructure & {
// data?: {
// total?: number;
// list?: ListAccountBookVoItem[]
// }
// }
// type ListAccountBookVoItem = {
// id: number;
// companyName?: string;
// valueAddedTaxCate?: string;
// accountingStandard?: string;
// startTime?: Date;
// createTime?: Date;
// enableVoucherVerify?: boolean;
// disable?: boolean;
// }
// type GetAccountBookVo = {
// id?: number;
// companyName?: string;
// unifiedSocialCreditCode?: string;
// industryId?: number;
// valueAddedTaxCate?: number;
// enableVoucherVerify?: boolean;
// startTime?: Date;
// accountingStandard?: number;
// enableFixedAssets?: boolean;
// enableCapital?: boolean;
// enablePsi?: boolean;
// }
// type DataDictionaryVo = {
// dataCode?: string;
// dataValue?: string;
// }
//
// type ListTreeMenuVo = {
// id?: number;
// key?: string;
// title?: any;
// icon?: string;
// checked?: boolean;
// children?: ListTreeMenuVo[];
// level?: number;
// };
//
// type ListTreeSelectMenuVo = {
// id?: number;
// value?: string;
// title?: any;
// children?: ListTreeMenuVo[];
// }
//
// type ListRoleVo = {
// id: number;
// roleName?: string;
// disable?: boolean;
// }
//
// type ListSubject = {
// id: number;
// pid?: number;
// valueAddedTaxCate?: string;
// accountingStandard?: string;
// startTime?: Date;
// createTime?: Date;
// enableVoucherVerify?: boolean;
// disable?: boolean;
// }
}