diff --git a/package.json b/package.json index 11e0c01..342abb1 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@ant-design/use-emotion-css": "^1.0.4", "@babel/preset-env": "^7.24.6", "@types/crypto-js": "^4.2.2", + "@types/react-calendar-heatmap": "^1.6.7", "@vitejs/plugin-legacy": "^5.4.0", "antd": "^5.17.4", "autoprefixer": "^10.4.19", @@ -28,6 +29,7 @@ "mobx-persist-store": "^1.1.5", "mobx-react": "^9.1.1", "react": "^18.3.1", + "react-calendar-heatmap": "^1.9.0", "react-dom": "^18.3.1", "react-rotate-captcha": "^1.0.26", "react-router-dom": "^6.23.1", @@ -39,7 +41,6 @@ }, "devDependencies": { "@rollup/plugin-babel": "^6.0.4", - "@types/gsap": "^3.0.0", "@types/node": "^20.12.12", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d86f29e..d99a916 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ dependencies: '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 + '@types/react-calendar-heatmap': + specifier: ^1.6.7 + version: 1.6.7 '@vitejs/plugin-legacy': specifier: ^5.4.0 version: 5.4.0(terser@5.31.0)(vite@5.2.12) @@ -59,6 +62,9 @@ dependencies: react: specifier: ^18.3.1 version: 18.3.1 + react-calendar-heatmap: + specifier: ^1.9.0 + version: 1.9.0(react@18.3.1) react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) @@ -88,9 +94,6 @@ devDependencies: '@rollup/plugin-babel': specifier: ^6.0.4 version: 6.0.4(@babel/core@7.24.6) - '@types/gsap': - specifier: ^3.0.0 - version: 3.0.0 '@types/node': specifier: ^20.12.12 version: 20.12.12 @@ -2845,13 +2848,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/gsap@3.0.0: - resolution: {integrity: sha512-BbWLi4WRHGze4C8NV7U7yRevuBFiPkPZZyGa0rryanvh/9HPUFXTNBXsGQxJZJq7Ix7j4RXMYodP3s+OsqCErg==} - deprecated: This is a stub types definition. gsap provides its own type definitions, so you do not need this installed. - dependencies: - gsap: 3.12.5 - dev: true - /@types/node@20.12.12: resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} dependencies: @@ -2863,7 +2859,12 @@ packages: /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: true + + /@types/react-calendar-heatmap@1.6.7: + resolution: {integrity: sha512-xWBS9iOvw+aCidPk8QwCH69OCO7jnj6/9TjooqGQ9W+rA5m1aw36GjQMlSYKAg86otDeg9dzA+hSAIcvw/y9Rg==} + dependencies: + '@types/react': 18.3.3 + dev: false /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} @@ -2876,7 +2877,6 @@ packages: dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 - dev: true /@types/svgo@2.6.4: resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} @@ -4640,6 +4640,7 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + requiresBuild: true dev: true /fsevents@2.3.3: @@ -4707,6 +4708,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + requiresBuild: true dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4778,10 +4780,6 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /gsap@3.12.5: - resolution: {integrity: sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==} - dev: true - /has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} @@ -4933,6 +4931,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + requiresBuild: true dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -5491,6 +5490,10 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + /meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -5797,6 +5800,7 @@ packages: /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + requiresBuild: true dependencies: wrappy: 1.0.2 dev: true @@ -5873,6 +5877,7 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true /path-key@3.1.1: @@ -6963,6 +6968,16 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false + /react-calendar-heatmap@1.9.0(react@18.3.1): + resolution: {integrity: sha512-mGed9any6QLOVckxwxC/eeP9s9wE8mTUW/FCE0V27xF9WOaCGuOftGSRH8DSDoSwgzMSVF6uuH7M1xvc+aZ8sg==} + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + memoize-one: 5.2.1 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + /react-dom@18.3.1(react@18.3.1): resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -8237,6 +8252,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + requiresBuild: true dev: true /write-file-atomic@5.0.1: diff --git a/src/api/captcha/canvas.ts b/src/api/captcha/canvas.ts index bb01c97..97b83b0 100644 --- a/src/api/captcha/canvas.ts +++ b/src/api/captcha/canvas.ts @@ -1,3 +1,5 @@ +/** @format */ + const calcSize = (img: HTMLImageElement, size: number) => { const src_src = Math.max(Math.min(img.width, img.height, size), 160); const dst_w = src_src; diff --git a/src/api/oss/minio/index.ts b/src/api/oss/minio/index.ts index d56291e..5788cf4 100644 --- a/src/api/oss/minio/index.ts +++ b/src/api/oss/minio/index.ts @@ -4,6 +4,7 @@ import web from "@/utils/axios/web.ts"; /** * 初始化minio + * @param data 用户id */ export const initMinio = (data: any) => { return web.request({ @@ -14,16 +15,20 @@ export const initMinio = (data: any) => { }, }); }; - -export const getBaseInfo = (data: any) => { +/** + * 获取文件目录信息 + * @param userId 用户id + * @param dirName 目录名称 + * @param bucket 桶名称 + */ +export const getDirAndFileList = (userId: any, dirName: any, bucket: any) => { return web.request({ - url: "/oss/oss/minio/getBaseInfo", - method: "post", - headers: { - "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", - }, - data: { - fileName: data, + url: "/oss/oss/minio/listMinioDir", + method: "get", + params: { + userId: userId, + dirName: dirName, + bucket: bucket, }, }); }; diff --git a/src/assets/icons/directory_close.svg b/src/assets/icons/directory_close.svg new file mode 100644 index 0000000..adb1124 --- /dev/null +++ b/src/assets/icons/directory_close.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/directory_open.svg b/src/assets/icons/directory_open.svg new file mode 100644 index 0000000..a45ad01 --- /dev/null +++ b/src/assets/icons/directory_open.svg @@ -0,0 +1 @@ + diff --git a/public/favicon.svg b/src/assets/icons/favicon.svg similarity index 100% rename from public/favicon.svg rename to src/assets/icons/favicon.svg diff --git a/src/assets/icons/files/ai.svg b/src/assets/icons/files/ai.svg new file mode 100644 index 0000000..8d6ebea --- /dev/null +++ b/src/assets/icons/files/ai.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/avi.svg b/src/assets/icons/files/avi.svg new file mode 100644 index 0000000..1ba046c --- /dev/null +++ b/src/assets/icons/files/avi.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/css.svg b/src/assets/icons/files/css.svg new file mode 100644 index 0000000..5022204 --- /dev/null +++ b/src/assets/icons/files/css.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/csv.svg b/src/assets/icons/files/csv.svg new file mode 100644 index 0000000..a8c88ec --- /dev/null +++ b/src/assets/icons/files/csv.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/dbf.svg b/src/assets/icons/files/dbf.svg new file mode 100644 index 0000000..114f3f9 --- /dev/null +++ b/src/assets/icons/files/dbf.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/doc.svg b/src/assets/icons/files/doc.svg new file mode 100644 index 0000000..9c86a02 --- /dev/null +++ b/src/assets/icons/files/doc.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/dwg.svg b/src/assets/icons/files/dwg.svg new file mode 100644 index 0000000..90fbda0 --- /dev/null +++ b/src/assets/icons/files/dwg.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/exe.svg b/src/assets/icons/files/exe.svg new file mode 100644 index 0000000..3a8eb58 --- /dev/null +++ b/src/assets/icons/files/exe.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/file.svg b/src/assets/icons/files/file.svg new file mode 100644 index 0000000..00a87be --- /dev/null +++ b/src/assets/icons/files/file.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/fla.svg b/src/assets/icons/files/fla.svg new file mode 100644 index 0000000..3a0817f --- /dev/null +++ b/src/assets/icons/files/fla.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/flash.svg b/src/assets/icons/files/flash.svg new file mode 100644 index 0000000..ae3279c --- /dev/null +++ b/src/assets/icons/files/flash.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/folder.svg b/src/assets/icons/files/folder.svg new file mode 100644 index 0000000..a501f5e --- /dev/null +++ b/src/assets/icons/files/folder.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/src/assets/icons/files/folderfull.svg b/src/assets/icons/files/folderfull.svg new file mode 100644 index 0000000..c414e60 --- /dev/null +++ b/src/assets/icons/files/folderfull.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/folderopen.svg b/src/assets/icons/files/folderopen.svg new file mode 100644 index 0000000..d21bafe --- /dev/null +++ b/src/assets/icons/files/folderopen.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/src/assets/icons/files/gif.svg b/src/assets/icons/files/gif.svg new file mode 100644 index 0000000..fea65e0 --- /dev/null +++ b/src/assets/icons/files/gif.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/html.svg b/src/assets/icons/files/html.svg new file mode 100644 index 0000000..2ac1778 --- /dev/null +++ b/src/assets/icons/files/html.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/iso.svg b/src/assets/icons/files/iso.svg new file mode 100644 index 0000000..7cd2184 --- /dev/null +++ b/src/assets/icons/files/iso.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/javascript.svg b/src/assets/icons/files/javascript.svg new file mode 100644 index 0000000..23532cb --- /dev/null +++ b/src/assets/icons/files/javascript.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/jpg.svg b/src/assets/icons/files/jpg.svg new file mode 100644 index 0000000..ae9c6d2 --- /dev/null +++ b/src/assets/icons/files/jpg.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/json-file.svg b/src/assets/icons/files/json-file.svg new file mode 100644 index 0000000..17ae513 --- /dev/null +++ b/src/assets/icons/files/json-file.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/mp3.svg b/src/assets/icons/files/mp3.svg new file mode 100644 index 0000000..d6dd593 --- /dev/null +++ b/src/assets/icons/files/mp3.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/mp4.svg b/src/assets/icons/files/mp4.svg new file mode 100644 index 0000000..40c1833 --- /dev/null +++ b/src/assets/icons/files/mp4.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/pdf.svg b/src/assets/icons/files/pdf.svg new file mode 100644 index 0000000..758720b --- /dev/null +++ b/src/assets/icons/files/pdf.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/png.svg b/src/assets/icons/files/png.svg new file mode 100644 index 0000000..783eef5 --- /dev/null +++ b/src/assets/icons/files/png.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/ppt.svg b/src/assets/icons/files/ppt.svg new file mode 100644 index 0000000..bf1ea30 --- /dev/null +++ b/src/assets/icons/files/ppt.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/psd.svg b/src/assets/icons/files/psd.svg new file mode 100644 index 0000000..e6cea70 --- /dev/null +++ b/src/assets/icons/files/psd.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/rtf.svg b/src/assets/icons/files/rtf.svg new file mode 100644 index 0000000..c2c9b1a --- /dev/null +++ b/src/assets/icons/files/rtf.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/search.svg b/src/assets/icons/files/search.svg new file mode 100644 index 0000000..1c76953 --- /dev/null +++ b/src/assets/icons/files/search.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/svg.svg b/src/assets/icons/files/svg.svg new file mode 100644 index 0000000..b1c3168 --- /dev/null +++ b/src/assets/icons/files/svg.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/trash.svg b/src/assets/icons/files/trash.svg new file mode 100644 index 0000000..100555b --- /dev/null +++ b/src/assets/icons/files/trash.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/trashbox.svg b/src/assets/icons/files/trashbox.svg new file mode 100644 index 0000000..7abc2dd --- /dev/null +++ b/src/assets/icons/files/trashbox.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/txt.svg b/src/assets/icons/files/txt.svg new file mode 100644 index 0000000..0e44caf --- /dev/null +++ b/src/assets/icons/files/txt.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/xls.svg b/src/assets/icons/files/xls.svg new file mode 100644 index 0000000..eadee3c --- /dev/null +++ b/src/assets/icons/files/xls.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/xml.svg b/src/assets/icons/files/xml.svg new file mode 100644 index 0000000..7c8bd71 --- /dev/null +++ b/src/assets/icons/files/xml.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/zip-1.svg b/src/assets/icons/files/zip-1.svg new file mode 100644 index 0000000..dd3f348 --- /dev/null +++ b/src/assets/icons/files/zip-1.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/files/zip.svg b/src/assets/icons/files/zip.svg new file mode 100644 index 0000000..c4c0937 --- /dev/null +++ b/src/assets/icons/files/zip.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/standard_directory.svg b/src/assets/icons/standard_directory.svg new file mode 100644 index 0000000..0ed8a85 --- /dev/null +++ b/src/assets/icons/standard_directory.svg @@ -0,0 +1 @@ + diff --git a/src/components/FileManager/FileDirectoryTree.tsx b/src/components/FileManager/FileDirectoryTree.tsx new file mode 100644 index 0000000..61d663d --- /dev/null +++ b/src/components/FileManager/FileDirectoryTree.tsx @@ -0,0 +1,24 @@ +/** @format */ + +import { Tree, TreeDataNode } from "antd"; +import React from "react"; +const { DirectoryTree } = Tree; +interface FileDirectoryTreeProps { + treeData: TreeDataNode[]; +} + +const FileDirectoryTree: React.FC = (props: any) => { + return ( + + ); +}; + +export default FileDirectoryTree; diff --git a/src/components/Main/File/index.module.less b/src/components/Main/File/index.module.less new file mode 100644 index 0000000..8e05594 --- /dev/null +++ b/src/components/Main/File/index.module.less @@ -0,0 +1,28 @@ +.file_main{ + display: flex; + flex-direction: row; + justify-content: space-between; + .file_content_left{ + width: 25%; + display: flex; + flex-direction: column; + } + .file_content_right{ + width: 73%; + height: 75vh; + .file_right_content{ + display: flex; + flex-wrap: wrap; + flex-direction: row; + margin-top: 20px; + .file_card:hover{ + background-color: rgba(16, 15, 15, 0.08); + } + } + .file_right_header{ + display: flex; + flex-direction: row; + align-items: center; + } + } +} diff --git a/src/components/Main/File/index.tsx b/src/components/Main/File/index.tsx index 8c8a362..763dd1a 100644 --- a/src/components/Main/File/index.tsx +++ b/src/components/Main/File/index.tsx @@ -1,7 +1,349 @@ /** @format */ -import { FunctionComponent } from "react"; +import { FunctionComponent, useEffect, useState } from "react"; +import { CheckCard, ProCard } from "@ant-design/pro-components"; +import styles from "./index.module.less"; +import { + Avatar, + Breadcrumb, + Button, + Card, + Divider, + Dropdown, + FloatButton, + message, + Select, +} from "antd"; +import ali from "@/assets/icons/aliyun.svg"; +import bucket from "@/assets/icons/bucket.svg"; +import tencent from "@/assets/icons/tencent.svg"; +import { + CommentOutlined, + CustomerServiceOutlined, + EllipsisOutlined, + LeftOutlined, +} from "@ant-design/icons"; +import standard_dir from "@/assets/icons/standard_directory.svg"; +import useStore from "@/utils/store/useStore.tsx"; +import { observer } from "mobx-react"; +import FileIcon from "@/context/file-icon.ts"; +import file_icon from "@/assets/icons/files/file.svg"; +const dataList: any = [ + { + name: "demo0.java", + isDir: false, + path: "demo0.java", + length: "346", + createTime: "2024-06-26T08:22:13.244Z", + }, + { + name: "测试.pdf", + isDir: false, + path: "测试.pdf", + length: "346", + createTime: "2024-06-26T08:22:13.244Z", + }, + { + name: "test.jpg", + isDir: false, + path: "test.jpg", + length: "2057535", + createTime: "2024-06-27T02:27:05.472Z", + }, + { + name: "test1.png", + isDir: false, + path: "test1.png", + length: "1766511", + createTime: "2024-06-29T10:28:03.224Z", + }, + { + name: "schisandra", + isDir: true, + path: "schisandra/", + }, + { + name: "测试文件夹", + isDir: true, + path: "测试文件夹/", + }, +]; +const fileList: any = [ + { + name: "test1.png", + isDir: false, + path: "test1.png", + length: "1766511", + createTime: "2024-06-29T10:28:03.224Z", + }, + { + name: "schisandra", + isDir: true, + path: "schisandra/", + }, +]; const File: FunctionComponent = () => { - return
文件管理
; + const store = useStore("file"); + const [files, setFiles] = useState([]); + async function getFile() { + setFiles(dataList); + } + function getFileExtension(filename: any): string { + const dotIndex = filename.lastIndexOf("."); + return dotIndex !== -1 ? filename.slice(dotIndex + 1) : ""; + } + + useEffect(() => { + getFile().then(); + }, []); + return ( + <> +
+
+ + + +
+ + { + domEvent.stopPropagation(); + message.info("menu click"); + }, + items: [ + { + label: "删除", + key: "1", + }, + { + label: "编辑", + key: "2", + }, + ], + }}> + e.stopPropagation()} + /> + + } + /> + { + domEvent.stopPropagation(); + message.info("menu click"); + }, + items: [ + { + label: "删除", + key: "1", + }, + { + label: "编辑", + key: "2", + }, + ], + }}> + e.stopPropagation()} + /> + + } + /> + +
+
+
+
+ +
+
+ +
+ + {files.map((file: any, index: any) => { + if (file.isDir) { + return ( +
{ + store.setFilePath({ + title: file.name, + }); + setFiles(fileList); + }}> + + + + {file.name} + +
+ } + className={styles.file_card} + style={{ + width: 100, + height: 100, + display: "flex", + alignItems: "center", + justifyContent: "center", + }} + /> +
+ ); + } else { + return ( +
+ + + + {file.name} + +
+ } + className={styles.file_card} + style={{ + width: 100, + height: 100, + display: "flex", + alignItems: "center", + justifyContent: "center", + }} + /> +
+ ); + } + })} + +
+ + + + + }> + + } /> + + + ); }; -export default File; +export default observer(File); diff --git a/src/components/Main/Home/index.tsx b/src/components/Main/Home/index.tsx index 0b07528..013e25e 100644 --- a/src/components/Main/Home/index.tsx +++ b/src/components/Main/Home/index.tsx @@ -10,7 +10,9 @@ import bucket from "@/assets/icons/bucket.svg"; import file from "@/assets/icons/file.svg"; import flux from "@/assets/icons/flux.svg"; import aliyun from "@/assets/icons/aliyun.svg"; -import * as echarts from "echarts/core"; +// import * as echarts from "echarts/core"; +import CalendarHeatmap from "react-calendar-heatmap"; +import "react-calendar-heatmap/dist/styles.css"; const defaultData = [ { id: "1", @@ -210,53 +212,6 @@ const MainHome: FunctionComponent = () => { ], }; - function getVirtulData() { - const today: any = echarts.number.parseDate(new Date()); - const dayTime: any = 3600 * 24 * 1000; - const thatday: any = today - dayTime * 365; - - const data = []; - for (let time = thatday; time < today; time += dayTime) { - data.push([ - echarts.format.formatTime("yyyy-MM-dd", time), - Math.floor(Math.random() * 10000), - ]); - } - return { - data, - today: echarts.format.formatTime("yyyy-MM-dd", today), - thatday: echarts.format.formatTime("yyyy-MM-dd", thatday), - }; - } - - const option2 = { - visualMap: { - min: 0, - max: 10000, - inRange: { - color: ["#ebedf0", "#c6e48b", "#7bc96f", "#239a3b", "#196027"], - }, - show: false, - }, - backgroundColor: "#fff", - calendar: { - cellSize: [18, 18], - range: [getVirtulData()["thatday"], getVirtulData()["today"]], - itemStyle: { - borderColor: "#fff", - borderWidth: 4, - }, - splitLine: { - show: false, - }, - yearLabel: { show: false }, - }, - series: { - type: "heatmap", - coordinateSystem: "calendar", - data: getVirtulData()["data"], - }, - }; useEffect(() => { setTimeout(() => { setLoading(false); @@ -320,7 +275,7 @@ const MainHome: FunctionComponent = () => { -
+
@@ -336,7 +291,33 @@ const MainHome: FunctionComponent = () => { marginTop: "30px", }} title={"文件上传热力图"}> - +
diff --git a/src/components/Main/Share/index.tsx b/src/components/Main/Share/index.tsx index 4c4b863..767f8cd 100644 --- a/src/components/Main/Share/index.tsx +++ b/src/components/Main/Share/index.tsx @@ -2,6 +2,6 @@ import { FunctionComponent } from "react"; const MainShare: FunctionComponent = () => { - return
分享
; + return
分享22222
; }; export default MainShare; diff --git a/src/context/file-icon.ts b/src/context/file-icon.ts new file mode 100644 index 0000000..d888a21 --- /dev/null +++ b/src/context/file-icon.ts @@ -0,0 +1,11 @@ +/** @format */ + +import jpg from "@/assets/icons/files/jpg.svg"; +import png from "@/assets/icons/files/png.svg"; +import pdf from "@/assets/icons/files/pdf.svg"; +const FileIcon: any = { + jpg: jpg, + png: png, + pdf: pdf, +}; +export default FileIcon; diff --git a/src/main.tsx b/src/main.tsx index 0fef842..e37d53c 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -7,7 +7,6 @@ import { Provider as MobxProvider } from "mobx-react"; import { RootStore } from "@/store"; import routeConfig from "@/router/routes.ts"; import { createBrowserRouter, RouterProvider } from "react-router-dom"; - const router = createBrowserRouter(routeConfig); ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/src/router/routes.ts b/src/router/routes.ts index f44b5f4..bdbdb50 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -16,7 +16,6 @@ import MainFile from "@/router/modules/main/file"; import MainUserInfo from "@/router/modules/main/userInfo"; import MainUserSetting from "@/router/modules/main/userSetting"; import MainShare from "@/router/modules/main/share"; - const routes: RouteObject[] = [ { path: "/", diff --git a/src/store/index.ts b/src/store/index.ts index 66d4340..2bcdaaa 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,8 +1,10 @@ /** @format */ import { useUserStore } from "./modules/user.ts"; +import { useFileStore } from "@/store/modules/file.ts"; /** 将每个Store实例化 */ export const RootStore = { user: new useUserStore(), + file: new useFileStore(), }; diff --git a/src/store/modules/file.ts b/src/store/modules/file.ts new file mode 100644 index 0000000..889cd5b --- /dev/null +++ b/src/store/modules/file.ts @@ -0,0 +1,69 @@ +/** @format */ + +import { action, makeObservable, observable } from "mobx"; +import { isHydrated, makePersistable } from "mobx-persist-store"; +import { handleLocalforage } from "@/utils/localforage"; + +export class useFileStore { + filePath: [any] = [ + { + title: "/ root", + }, + ]; + + constructor() { + makeObservable(this, { + filePath: observable, + setFilePath: action, + getFilePath: action, + clearFilePath: action, + getFilePathSecondLast: action, + isHydrated: action, + }); + makePersistable( + this, + { + // 在构造函数内使用 makePersistable + name: "file", // 保存的name,用于在storage中的名称标识,只要不和storage中其他名称重复就可以 + properties: ["filePath"], // 要保存的字段,这些字段会被保存在name对应的storage中,注意:不写在这里面的字段将不会被保存,刷新页面也将丢失:get字段例外。get数据会在数据返回后再自动计算 + storage: handleLocalforage, // 保存的位置:可以是localStorage,sessionstorage + removeOnExpiration: true, //如果 expireIn 具有值且已过期,则在调用 getItem 时将自动删除存储中的数据。默认值为 true。 + stringify: false, //如果为 true,则数据在传递给 setItem 之前将是 JSON.stringify。默认值为 true。 + expireIn: 2592000000, // 一个以毫秒为单位的值,用于确定 getItem 何时不应检索存储中的数据。默认情况下永不过期。 + debugMode: false, // 如果为 true,将为多个 mobx-persist-store 项调用 console.info。默认值为 false。 + }, + { + delay: 0, // 允许您设置一个 delay 选项来限制 write 函数的调用次数。默认情况下没有延迟。 + fireImmediately: false, // 确定是应立即保留存储数据,还是等到存储中的属性发生更改。 false 默认情况下。 + }, + ).then( + action(() => { + // persist 完成的回调,在这里可以执行一些拿到数据后需要执行的操作,如果在页面上要判断是否完成persist,使用 isHydrated + // console.log(persistStore) + }), + ); + } + // 获取文件路径 + getFilePath() { + return this.filePath ? this.filePath : []; + } + // 设置文件路径 + setFilePath(path: any) { + this.filePath.push(path); + } + // 删除文件路径最后一个 + clearFilePath() { + if (this.filePath.length === 1) { + return; + } + this.filePath.pop(); + } + // 获取文件路径倒数第二个 + getFilePathSecondLast() { + return this.filePath.slice(0, -1).pop(); + } + + isHydrated() { + return isHydrated(this); + } +} diff --git a/src/views/Main/index.tsx b/src/views/Main/index.tsx index 2e9c73b..23bfabc 100644 --- a/src/views/Main/index.tsx +++ b/src/views/Main/index.tsx @@ -24,7 +24,9 @@ export default function Layout() { {defaultDom}; }} {...defaultProps} + disableMobile={true} location={{ pathname: location.pathname, }} avatarProps={{ src: "https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg", title: "七妮妮", - size: "small", - // @ts-ignore + size: "large", + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error render: (props, dom) => { return (