Ver código fonte

feat:登录页和主页调试完成

hanyang 1 ano atrás
pai
commit
4fdb0853f7

+ 48 - 589
package-lock.json

@@ -1,11 +1,11 @@
 {
-  "name": "damoxing2dian0",
+  "name": "voice-analisys-tools",
   "version": "1.0.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "damoxing2dian0",
+      "name": "voice-analisys-tools",
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
@@ -813,358 +813,6 @@
         }
       }
     },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
-      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
-      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
-      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
-      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
-      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
-      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
-      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
-      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
-      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
-      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
-      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
-      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
-      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
-      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
-      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
-      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
-      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
-      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
     "node_modules/@esbuild/win32-x64": {
       "version": "0.21.5",
       "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
@@ -1488,227 +1136,6 @@
         }
       }
     },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz",
-      "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz",
-      "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz",
-      "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz",
-      "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz",
-      "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz",
-      "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz",
-      "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz",
-      "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz",
-      "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz",
-      "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz",
-      "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz",
-      "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz",
-      "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz",
-      "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz",
-      "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz",
-      "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.28.0",
-      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz",
-      "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
       "version": "4.28.0",
       "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz",
@@ -2327,6 +1754,11 @@
         "node": ">= 14.0.0"
       }
     },
+    "node_modules/amfe-flexible": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/amfe-flexible/-/amfe-flexible-2.2.1.tgz",
+      "integrity": "sha512-L2VfvDzoETBjhRptg5u/IUuzHSuxm22JpSRb404p/TBGeRfwWmmNEbB+TFPIP/sS/+pbM18bCFH9QnMojLuPNw=="
+    },
     "node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3197,20 +2629,6 @@
         "node": ">=14.14"
       }
     },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4133,6 +3551,38 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/postcss-pxtorem": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz",
+      "integrity": "sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg==",
+      "dev": true,
+      "dependencies": {
+        "postcss": "^7.0.27"
+      }
+    },
+    "node_modules/postcss-pxtorem/node_modules/picocolors": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz",
+      "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+      "dev": true
+    },
+    "node_modules/postcss-pxtorem/node_modules/postcss": {
+      "version": "7.0.39",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz",
+      "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+      "dev": true,
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
     "node_modules/postcss-selector-parser": {
       "version": "6.1.2",
       "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
@@ -4409,6 +3859,15 @@
         "node": ">=18"
       }
     },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",

+ 7 - 0
src/App.vue

@@ -1,3 +1,10 @@
 <template>
   <router-view />
 </template>
+<script setup>
+import { onMounted } from 'vue';
+import DevicePixelRatio from './utils/devicePixelRatio';
+onMounted(() => {
+  new DevicePixelRatio().init();
+});
+</script>

+ 23 - 0
src/apis/home.js

@@ -0,0 +1,23 @@
+import request from '../base/ajax';
+// 搜索
+export function searchAudio(current, pageSize, keyWord) {
+  return request({
+    url: `/v1/audio/list?current=${current}&pageSize=${pageSize}&keyword=${keyWord}`,
+    method: 'get'
+  });
+}
+// 查询详情
+export function getAudioDetail(audioId) {
+  return request({
+    url: `/v1/audio/info/${audioId}`,
+    method: 'get'
+  });
+}
+// 下载war文件
+export function downloadWar(fileId, audioId) {
+  return request({
+    url: `/v1/audio/download/${fileId}/${audioId}`,
+    method: 'get',
+    responseType: 'blob'
+  });
+}

+ 0 - 31
src/base/api/login.js

@@ -1,31 +0,0 @@
-import request from '../ajax';
-// 登录
-export function login(data) {
-  return request({
-    url: '/api/auth/v2/login',
-    method: 'post',
-    data
-  });
-}
-// 注册
-export function register(data) {
-  return request({
-    url: '/api/auth/v2/register',
-    method: 'post',
-    data
-  });
-}
-// 获取用户信息
-export function getInfo() {
-  return request({
-    url: '/api/user/user_info',
-    method: 'get'
-  });
-}
-// 获取用户路由
-export function generateRoutes() {
-  return request({
-    url: '/api/user/user_routers',
-    method: 'get'
-  });
-}

+ 2 - 0
src/base/event-bus.js

@@ -8,3 +8,5 @@ import EventBus from './event-bus/EventBus';
  * 任意 event bus 的定义,必须添加 bus_ 前缀
  */
 export const bus_themeChange = new EventBus('theme_change');
+// 搜索
+export const bus_search = new EventBus('search');

+ 1 - 1
src/base/event-bus/EventBus.js

@@ -12,7 +12,7 @@ export default class EventBus {
 
   on(fn) {
     if (typeof fn === 'function') {
-      this.emitter(this.event_name, (e) => {
+      this.emitter.on(this.event_name, (e) => {
         fn(e);
       });
     }

+ 2 - 0
src/index.css

@@ -1,6 +1,8 @@
 body {
   box-sizing: border-box;
   font-size: 16px;
+  min-width: 1510px;
+  overflow-x: auto;
   font-family: Inter, '-apple-system', BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'noto sans',
     'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
 }

+ 13 - 0
src/modules/Home/AudioPlayer.vue

@@ -0,0 +1,13 @@
+<template>
+  <audio style="width: 500px; height: 32px" ref="audioPlayer" :src="audioSrc" controls></audio>
+</template>
+
+<script setup>
+const props = defineProps({
+  audioSrc: {
+    type: String,
+    default: ''
+  }
+});
+</script>
+<style scoped lang="css"></style>

+ 37 - 3
src/modules/Home/ItemDetail.vue

@@ -1,6 +1,40 @@
 <template>
-  <div class="item-detail">详情</div>
+  <a-card :header-style="{ backgroundColor: ' #7786BC', borderRadius: '10px 10px 0 0' }">
+    <template #title>
+      <div class="title">详情信息</div>
+    </template>
+    <div class="content">{{ detail_content }}</div>
+    <a-empty v-if="!detail_content.length"></a-empty>
+  </a-card>
 </template>
 
-<script setup></script>
-<style scoped></style>
+<script setup>
+const props = defineProps({
+  detail_content: {
+    type: String,
+    default: ''
+  }
+});
+</script>
+<style scoped>
+.arco-card {
+  height: 350px;
+  margin-bottom: 10px;
+  border-radius: 10px 10px 0 0;
+}
+.arco-list-item:hover {
+  background: #3d68e1;
+  color: #fff;
+}
+.title {
+  color: #fff;
+}
+:deep(.arco-card-body) {
+  height: calc(100% - 85px);
+  padding: 13px 20px;
+  overflow-y: auto;
+}
+.content {
+  line-height: 1.5;
+}
+</style>

+ 107 - 0
src/modules/Home/ItemList.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="item-list">
+    <a-table
+      :data="audio_list"
+      :pagination="{ pageSize: PAGE_SIZE }"
+      stripe
+      :scroll="scroll"
+      :scrollbar="scrollbar"
+      @change="handleTableChange"
+    >
+      <template #columns>
+        <a-table-column title="音频列表" data-index="name" width="320">
+          <template #cell="{ record }">
+            <a-tooltip :content="record.name">
+              <div class="tip-content tip-name">{{ record.name }}</div>
+            </a-tooltip>
+          </template>
+        </a-table-column>
+        <a-table-column title="路径" data-index="file_path" width="300">
+          <template #cell="{ record }">
+            <a-tooltip :content="record.file_path">
+              <div class="tip-content">{{ record.file_path }}</div>
+            </a-tooltip>
+          </template>
+        </a-table-column>
+        <a-table-column title="操作" data-index="operation" width="550">
+          <template #cell="{ record }">
+            <AudioPlayer :audioSrc="record.audio_src"></AudioPlayer>
+          </template>
+        </a-table-column>
+      </template>
+    </a-table>
+  </div>
+</template>
+
+<script setup>
+import { ref, computed, onMounted } from 'vue';
+import AudioPlayer from './AudioPlayer.vue';
+import { downloadWar } from '../../apis/home';
+
+const props = defineProps({
+  detail_audio_list: {
+    type: Array,
+    default: () => []
+  },
+  file_id: {
+    type: String,
+    default: ''
+  },
+  PAGE_SIZE: {
+    type: Number,
+    default: 7
+  }
+});
+
+const scroll = { x: '100%', y: '' };
+const scrollbar = ref(true);
+
+const audio_list = computed(() => {
+  return props.detail_audio_list;
+});
+const handleTableChange = (current_page_data, filters) => {
+  current_page_data.forEach(async (item) => {
+    if (item.audio_src === undefined) {
+      item.audio_src = await toDownloadWar(props.file_id, item.id);
+    }
+  });
+};
+const toDownloadWar = async (file_id, audio_id) => {
+  try {
+    const res = await downloadWar(file_id, audio_id);
+    const audio_src = URL.createObjectURL(res);
+    return audio_src;
+  } catch (error) {
+    console.log(error);
+  }
+};
+onMounted(() => {});
+</script>
+<style scoped>
+.item-list {
+  height: calc(100% - 370px);
+  background-color: #fff;
+}
+.tip-name {
+  width: 320px;
+}
+.tip-content {
+  width: 300px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+:deep(.arco-table-tr .arco-table-th) {
+  height: 46px;
+  background: #7786bc;
+  color: #fff;
+  font-size: 16px;
+}
+:deep(.arco-table-tr .arco-table-th:first-child) {
+  border-radius: 10px 0 0 0;
+}
+:deep(.arco-table-tr .arco-table-th:nth-child(3)) {
+  border-radius: 0 10px 0 0;
+}
+</style>

+ 98 - 9
src/modules/Home/MessageBody.vue

@@ -1,30 +1,119 @@
 <template>
-  <div class="container">
+  <div class="main-container">
     <div class="left-list">
-      <SearchList />
+      <SearchList
+        :current="page.current"
+        :pageSize="page.pageSize"
+        :total="search_total"
+        :list="search_list"
+        :setLoading="search_set_loading"
+        @loadMore="loadMore"
+        @checkDetail="checkDetail"
+      />
     </div>
     <div class="right-detail">
-      <ItemDetail />
+      <ItemDetail :detail_content="detail_content" />
+      <ItemList :detail_audio_list="detail_audio_list" :file_id="detail_file_id" :PAGE_SIZE="PAGE_SIZE" />
     </div>
   </div>
 </template>
 
 <script setup>
+import { ref } from 'vue';
 import SearchList from './SearchList.vue';
 import ItemDetail from './ItemDetail.vue';
+import ItemList from './ItemList.vue';
+import { searchAudio, getAudioDetail } from '../../apis/home';
+import { bus_search } from '../../base/event-bus';
+import { downloadWar } from '../../apis/home';
+
+const current_keyword = ref('');
+const page = ref({
+  current: 1,
+  pageSize: 50
+});
+const search_list = ref([]);
+const search_total = ref(0);
+const search_set_loading = ref(false);
+
+const detail_content = ref('');
+const detail_audio_list = ref([]);
+const detail_file_id = ref('');
+const PAGE_SIZE = 7;
+
+const toSearchAudio = async () => {
+  if (page.value.current == 1) {
+    search_set_loading.value = true;
+  }
+  try {
+    const res = await searchAudio(page.value.current, page.value.pageSize, current_keyword.value);
+    if (res.code == 200) {
+      search_list.value.push(...res.data.rows);
+      search_total.value = res.data.total;
+    }
+  } catch (error) {
+    console.log(error);
+  } finally {
+    search_set_loading.value = false;
+  }
+};
+
+const loadMore = async () => {
+  page.value.current += 1;
+  toSearchAudio();
+};
+
+const checkDetail = async (item) => {
+  try {
+    const res = await getAudioDetail(item.id);
+    if (res.code == 200) {
+      detail_content.value = res.data.content;
+      detail_audio_list.value = res.data.audioPath;
+      detail_file_id.value = res.data.id;
+      const first_list = detail_audio_list.value.slice(0, PAGE_SIZE);
+      first_list.forEach((item) => {
+        toDownloadWar(res.data.id, item.id).then((res) => {
+          item.audio_src = res;
+        });
+      });
+      detail_audio_list.value = first_list.concat(detail_audio_list.value.slice(PAGE_SIZE));
+    }
+  } catch (error) {
+    console.log(error);
+  }
+};
+
+const toDownloadWar = async (file_id, audio_id) => {
+  try {
+    const res = await downloadWar(file_id, audio_id);
+    const audio_src = URL.createObjectURL(res);
+    return audio_src;
+  } catch (error) {
+    console.log(error);
+  }
+};
+
+bus_search.on((keyword) => {
+  current_keyword.value = keyword;
+  search_list.value = [];
+  search_total.value = 0;
+  page.value.current = 1;
+  detail_content.value = '';
+  detail_audio_list.value = [];
+  toSearchAudio();
+});
 </script>
 <style scoped lang="css">
-.container {
+.main-container {
   display: grid;
   grid-template-columns: 1fr 2fr;
-  height: calc(100% - 60px);
+  gap: 10px;
+  min-height: calc(100vh - 150px);
   background-color: #fff;
   padding: 0 20px;
-  .left-list {
-    background-color: #dffd;
-  }
+  .left-list,
   .right-detail {
-    /* background-color: #f7f7f7; */
+    height: 100%;
   }
 }
 </style>

+ 105 - 12
src/modules/Home/SearchList.vue

@@ -1,21 +1,114 @@
 <template>
-  <!-- <div class="search-list"> -->
-  <a-card
-    :header-style="
-      () => {
-        'background: #7786bc', 'border-radius: 10px 10px 0px 0px';
-      }
-    "
-  >
-    <template #title>搜索结果</template>
-    <template #extra> 共50条 </template>
+  <a-card id="search-result" :header-style="{ backgroundColor: ' #7786BC', borderRadius: '10px 10px 0 0' }">
+    <template #title>
+      <div class="title">搜索结果</div>
+    </template>
+    <template #extra>
+      <div class="title">共{{ total <= 9999 ? total : '9999+' }}条</div>
+    </template>
+    <!--  -->
+    <a-list
+      style="width: 100%"
+      :max-height="scroll_height"
+      :bordered="false"
+      :scrollbar="scrollbar"
+      @reach-bottom="toLoadMore"
+    >
+      <template #scroll-loading>
+        <div v-if="bottom">无更多数据了</div>
+        <a-spin v-else />
+      </template>
+      <a-list-item style="cursor: pointer" v-for="item in search_list" :key="item.id" @click="checkDetail(item)">
+        <div v-html="item.content"></div>
+      </a-list-item>
+    </a-list>
+    <a-spin class="loading" v-if="is_loading" />
   </a-card>
-  <!-- </div> -->
 </template>
 
-<script setup></script>
+<script setup>
+import { ref, computed, onMounted } from 'vue';
+
+const props = defineProps({
+  list: {
+    type: Array,
+    default: () => []
+  },
+  total: {
+    type: Number,
+    default: 0
+  },
+  current: {
+    type: Number,
+    default: 1
+  },
+  pageSize: {
+    type: Number,
+    default: 10
+  },
+  set_loading: {
+    type: Boolean,
+    default: false
+  }
+});
+
+const emit = defineEmits(['checkDetail']);
+
+const search_list = computed(() => {
+  return props.list;
+});
+
+const is_loading = computed(() => {
+  return props.setLoading;
+});
+
+const bottom = ref(false);
+const scrollbar = ref(true);
+const scroll_height = ref('calc(100vh - 220px)');
+
+const toLoadMore = () => {
+  if (props.current * props.pageSize >= props.total) {
+    bottom.value = true;
+    return;
+  }
+  // 去加载第二页数据
+  bottom.value = false;
+  emit('loadMore');
+};
+// 查看详情
+const checkDetail = (item) => {
+  emit('checkDetail', item);
+};
+
+onMounted(() => {
+  window.addEventListener('resize', () => {
+    const height = document.getElementById('search-result').offsetHeight;
+    scroll_height.value = height + 'px';
+  });
+});
+</script>
 <style scoped lang="css">
 .arco-card {
   height: 100%;
+  border-radius: 10px 10px 0 0;
+}
+.arco-list-item:hover {
+  background: #3d68e1;
+  color: #fff;
+}
+.title {
+  color: #fff;
+}
+:deep(.search-result-high) {
+  color: #f00;
+}
+:deep(.arco-card-body) {
+  padding: 0 !important;
+}
+.loading {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
 }
 </style>

+ 14 - 5
src/modules/Home/TopSetting.vue

@@ -1,17 +1,26 @@
 <template>
   <div class="container">
     <div class="left-search">
-      <a-input placeholder="请输入关键字进行搜索"></a-input>
-      <a-button type="primary">搜索</a-button>
+      <a-input v-model="keyword" placeholder="请输入关键字进行搜索" allow-clear></a-input>
+      <a-button style="background-color: #00f; color: #fff" @click="toSearchData">搜索</a-button>
     </div>
     <div class="right-upload">
-      <Upload></Upload>
+      <!-- <Upload></Upload> -->
     </div>
   </div>
 </template>
 
 <script setup>
-import Upload from './Upload.vue';
+import { ref } from 'vue';
+// import Upload from './Upload.vue';
+import { bus_search } from '../../base/event-bus';
+
+const keyword = ref('');
+const toSearchData = () => {
+  if (keyword.value.trim().length) {
+    bus_search.emit(keyword.value);
+  }
+};
 </script>
 <style scoped lang="css">
 .container {
@@ -25,7 +34,7 @@ import Upload from './Upload.vue';
     align-items: center;
     gap: 10px;
     .arco-input-wrapper {
-      width: 320px;
+      width: 520px;
     }
   }
 }

+ 1 - 3
src/modules/login/FormItem.vue

@@ -44,7 +44,7 @@ const handleSubmit = (data) => {
   loading.value = true;
   setTimeout(() => {
     Message.success('登录成功');
-    router.push({ path: '/' });
+    router.push({ path: '/home' });
     loading.value = false;
   }, 1000);
 };
@@ -79,8 +79,6 @@ const handleSubmit = (data) => {
 .reg-link {
   color: rgb(var(--arcoblue-6));
 }
-</style>
-<style>
 .arco-form-item-label-col {
   padding: 0px;
 }

+ 59 - 0
src/utils/devicePixelRatio.js

@@ -0,0 +1,59 @@
+class DevicePixelRatio {
+  constructor() {
+    // this.flag = false;
+  }
+  // 获取系统类型
+  _getSystem() {
+    // let flag = false;
+    var agent = navigator.userAgent.toLowerCase();
+    //    var isMac = /macintosh|mac os x/i.test(navigator.userAgent);
+    //    if(isMac) {
+    //      return false;
+    //    }
+    // 现只针对windows处理,其它系统暂无该情况,如有,继续在此添加
+    if (agent.indexOf('windows') >= 0) {
+      return true;
+    }
+  }
+  // 获取页面缩放比例
+  //  _getDevicePixelRatio() {
+  //    let t = this;
+  //  }
+  // 监听方法兼容写法
+  _addHandler(element, type, handler) {
+    if (element.addEventListener) {
+      element.addEventListener(type, handler, false);
+    } else if (element.attachEvent) {
+      element.attachEvent('on' + type, handler);
+    } else {
+      element['on' + type] = handler;
+    }
+  }
+  // 校正浏览器缩放比例
+  _correct() {
+    let t = this;
+    // 页面devicePixelRatio(设备像素比例)变化后,计算页面body标签zoom修改其大小,来抵消devicePixelRatio带来的变化。
+    document.getElementsByTagName('body')[0].style.zoom = 1 / window.devicePixelRatio;
+  }
+  // 监听页面缩放
+  _watch() {
+    let t = this;
+    t._addHandler(window, 'resize', function () {
+      // 注意这个方法是解决全局有两个window.resize
+      // 重新校正
+      t._correct();
+    });
+  }
+  // 初始化页面比例
+  init() {
+    let t = this;
+    if (t._getSystem()) {
+      // 判断设备,目前只在windows系统下校正浏览器缩放比例
+      // 初始化页面校正浏览器缩放比例
+      t._correct();
+      // 开启监听页面缩放
+      t._watch();
+    }
+  }
+}
+export default DevicePixelRatio;

+ 23 - 5
src/views/common/Header.vue

@@ -7,9 +7,17 @@
     </div>
     <div class="header-right">
       <a-space>
-        <BtnSearch class="header-right-item" />
         <div class="header-right-profile">
-          <span>{{ currentUser.name }}</span>
+          <a-dropdown trigger="hover" @select="handleSelect">
+            <div class="header-right-profile">
+              <span><icon-user /></span>
+              <span>{{ currentUser }}</span>
+            </div>
+
+            <template #content>
+              <a-doption value="logout"><icon-export />退出登录</a-doption>
+            </template>
+          </a-dropdown>
         </div>
       </a-space>
     </div>
@@ -17,11 +25,17 @@
 </template>
 
 <script setup>
-import { useCurrentUserStore } from '../../base/store/use-current-user';
+import { ref } from 'vue';
+import { useRouter } from 'vue-router';
 
-import BtnSearch from './header-btns/BtnSearch.vue';
+const router = useRouter();
+const currentUser = ref('admin');
 
-const currentUser = useCurrentUserStore();
+const handleSelect = (key) => {
+  if (['logout'].includes(key)) {
+    router.push('/login');
+  }
+};
 </script>
 
 <style lang="css" scoped>
@@ -79,5 +93,9 @@ const currentUser = useCurrentUserStore();
 }
 
 .header-right-profile {
+  display: flex;
+  align-items: center;
+  gap: 5px;
+  cursor: pointer;
 }
 </style>

+ 2 - 1
src/views/layout/ContentContainer.vue

@@ -8,7 +8,8 @@
 .content-container {
   background-color: var(--color-fill-2);
   flex-grow: 1;
-
+  height: calc(100% - 50px);
   padding: 16px;
+  overflow: auto;
 }
 </style>

+ 0 - 18
src/views/layout/LayoutPermission.vue

@@ -1,18 +0,0 @@
-<template>
-  <div class="layout-permission">
-    <Header />
-    <router-view />
-  </div>
-</template>
-
-<script setup>
-import Header from '../common/Header.vue';
-</script>
-
-<style lang="css" scoped>
-.layout-permission {
-  display: flex;
-  flex-direction: column;
-  height: 100vh;
-}
-</style>

+ 1 - 1
src/views/routes.js

@@ -2,7 +2,7 @@
  * 路由表配置
  */
 const routes = [
-  { path: '/', redirect: '/home' },
+  { path: '/', redirect: '/login' },
 
   // 登录与注册
   { path: '/login', component: () => import('./Login.vue') },

+ 4 - 4
vite.config.mjs

@@ -17,11 +17,11 @@ export default defineConfig({
    */
   publicDir: '../public',
   server: {
-    port: 5173,
+    port: 5174,
     host: '0.0.0.0', // IP配置,支持从IP启动
     proxy: {
-      '/api': {
-        target: 'http://192.168.20.119:9301',
+      '/v1': {
+        target: 'http://192.168.20.124:9601',
         // target: "http://192.168.20.119:9301",
         changeOrigin: true,
         secure: false,
@@ -41,7 +41,7 @@ export default defineConfig({
   },
   resolve: {
     alias: {
-      '@': path.resolve(__dirname, './src'), // 配置@指向src目录
+      '@': path.resolve(__dirname, './src') // 配置@指向src目录
     }
   },
   plugins: [