From c25051a9efc8c6adc0a34a07f4b71cc6f5e4471d Mon Sep 17 00:00:00 2001 From: liqi Date: Thu, 31 Jul 2025 10:00:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=89=8D=E5=8F=B0UI=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 8 +- pnpm-lock.yaml | 102 ++++ src/App.vue | 52 +- src/api/index.js | 112 +++- src/components/EmptyState.vue | 128 +++- src/components/GlassModal.vue | 388 ++++++++++++ src/components/RichTextRenderer.vue | 411 +++++++++++++ src/components/TechEmptyState.vue | 53 ++ src/components/ThemeToggle.vue | 109 ++++ src/layouts/AdminLayout.vue | 870 +++++++++++++++++++++------ src/layouts/Footer.vue | 41 +- src/layouts/Header.vue | 480 ++++++++------- src/layouts/MainLayout.vue | 21 +- src/main.js | 37 +- src/router/index.js | 5 + src/stores/theme.js | 293 +++++++++ src/stores/user.js | 156 +++-- src/style.css | 549 ++++++++++++++++- src/views/about/index.vue | 516 ++++++++-------- src/views/admin/ArticleForm.vue | 46 +- src/views/admin/Articles.vue | 12 +- src/views/admin/Dashboard.vue | 270 ++++++--- src/views/admin/News.vue | 10 +- src/views/admin/Settings.vue | 12 +- src/views/admin/Users.vue | 10 +- src/views/admin/articles/index.vue | 618 +++++++++++++++++++ src/views/admin/index.vue | 490 +++++++++++++++ src/views/articles/detail.vue | 883 +++++++++++++++++++++------- src/views/articles/index.vue | 462 ++++++++++----- src/views/auth/Login.vue | 92 ++- src/views/careers/index.vue | 709 ++++++++++++++++++++++ src/views/contact/index.vue | 769 +++++++++++++++--------- src/views/index/index.vue | 506 +++++++++++----- src/views/news/detail.vue | 712 ++++++++++++---------- src/views/news/index.vue | 311 +++++++--- 35 files changed, 8123 insertions(+), 2120 deletions(-) create mode 100644 src/components/GlassModal.vue create mode 100644 src/components/RichTextRenderer.vue create mode 100644 src/components/TechEmptyState.vue create mode 100644 src/components/ThemeToggle.vue create mode 100644 src/stores/theme.js create mode 100644 src/views/admin/articles/index.vue create mode 100644 src/views/admin/index.vue create mode 100644 src/views/careers/index.vue diff --git a/package.json b/package.json index 3c82eaa..5763cce 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,22 @@ "preview": "vite preview" }, "dependencies": { - "tailwindcss": "^4.1.4", - "vue": "^3.5.13", "@ant-design-vue/pro-layout": "^3.2.5", "@ant-design/icons-vue": "^7.0.1", "@fortawesome/fontawesome-free": "^6.7.2", + "@headlessui/vue": "^1.7.23", + "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/vite": "^4.1.4", + "@vueuse/core": "^13.6.0", "@vueuse/head": "^2.0.0", "ant-design-vue": "^4.1.1", + "aos": "^2.3.4", "axios": "^1.6.2", "lucide-vue-next": "^0.507.0", "pinia": "^2.1.7", "swiper": "^11.0.5", + "tailwindcss": "^4.1.4", + "vue": "^3.5.13", "vue-router": "^4.2.5" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fed433b..0de81f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,15 +17,27 @@ importers: '@fortawesome/fontawesome-free': specifier: ^6.7.2 version: 6.7.2 + '@headlessui/vue': + specifier: ^1.7.23 + version: 1.7.23(vue@3.5.13) + '@tailwindcss/line-clamp': + specifier: ^0.4.4 + version: 0.4.4(tailwindcss@4.1.4) '@tailwindcss/vite': specifier: ^4.1.4 version: 4.1.4(vite@6.3.3(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.88.0)) + '@vueuse/core': + specifier: ^13.6.0 + version: 13.6.0(vue@3.5.13) '@vueuse/head': specifier: ^2.0.0 version: 2.0.0(vue@3.5.13) ant-design-vue: specifier: ^4.1.1 version: 4.2.6(vue@3.5.13) + aos: + specifier: ^2.3.4 + version: 2.3.4 axios: specifier: ^1.6.2 version: 1.9.0 @@ -267,6 +279,12 @@ packages: resolution: {integrity: sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==} engines: {node: '>=6'} + '@headlessui/vue@1.7.23': + resolution: {integrity: sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==} + engines: {node: '>=10'} + peerDependencies: + vue: ^3.2.0 + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -472,6 +490,11 @@ packages: '@simonwep/pickr@1.8.2': resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==} + '@tailwindcss/line-clamp@0.4.4': + resolution: {integrity: sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==} + peerDependencies: + tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' + '@tailwindcss/node@4.1.4': resolution: {integrity: sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==} @@ -566,9 +589,20 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 + '@tanstack/virtual-core@3.13.12': + resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + + '@tanstack/vue-virtual@3.13.12': + resolution: {integrity: sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@unhead/dom@1.11.20': resolution: {integrity: sha512-jgfGYdOH+xHJF/j8gudjsYu3oIjFyXhCWcgKaw3vQnT616gSqyqnGQGOItL+BQtQZACKNISwIfx5PuOtztMKLA==} @@ -625,17 +659,33 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vueuse/core@13.6.0': + resolution: {integrity: sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A==} + peerDependencies: + vue: ^3.5.0 + '@vueuse/head@2.0.0': resolution: {integrity: sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==} peerDependencies: vue: '>=2.7 || >=3' + '@vueuse/metadata@13.6.0': + resolution: {integrity: sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==} + + '@vueuse/shared@13.6.0': + resolution: {integrity: sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==} + peerDependencies: + vue: ^3.5.0 + ant-design-vue@4.2.6: resolution: {integrity: sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==} engines: {node: '>=12.22.0'} peerDependencies: vue: '>=3.2.0' + aos@2.3.4: + resolution: {integrity: sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==} + array-tree-filter@2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} @@ -660,6 +710,9 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + classlist-polyfill@1.2.0: + resolution: {integrity: sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -891,6 +944,12 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -1223,6 +1282,11 @@ snapshots: '@fortawesome/fontawesome-free@6.7.2': {} + '@headlessui/vue@1.7.23(vue@3.5.13)': + dependencies: + '@tanstack/vue-virtual': 3.13.12(vue@3.5.13) + vue: 3.5.13 + '@jridgewell/sourcemap-codec@1.5.0': {} '@parcel/watcher-android-arm64@2.5.1': @@ -1351,6 +1415,10 @@ snapshots: core-js: 3.42.0 nanopop: 2.4.2 + '@tailwindcss/line-clamp@0.4.4(tailwindcss@4.1.4)': + dependencies: + tailwindcss: 4.1.4 + '@tailwindcss/node@4.1.4': dependencies: enhanced-resolve: 5.18.1 @@ -1416,8 +1484,17 @@ snapshots: tailwindcss: 4.1.4 vite: 6.3.3(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.88.0) + '@tanstack/virtual-core@3.13.12': {} + + '@tanstack/vue-virtual@3.13.12(vue@3.5.13)': + dependencies: + '@tanstack/virtual-core': 3.13.12 + vue: 3.5.13 + '@types/estree@1.0.7': {} + '@types/web-bluetooth@0.0.21': {} + '@unhead/dom@1.11.20': dependencies: '@unhead/schema': 1.11.20 @@ -1507,6 +1584,13 @@ snapshots: '@vue/shared@3.5.13': {} + '@vueuse/core@13.6.0(vue@3.5.13)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 13.6.0 + '@vueuse/shared': 13.6.0(vue@3.5.13) + vue: 3.5.13 + '@vueuse/head@2.0.0(vue@3.5.13)': dependencies: '@unhead/dom': 1.11.20 @@ -1515,6 +1599,12 @@ snapshots: '@unhead/vue': 1.11.20(vue@3.5.13) vue: 3.5.13 + '@vueuse/metadata@13.6.0': {} + + '@vueuse/shared@13.6.0(vue@3.5.13)': + dependencies: + vue: 3.5.13 + ant-design-vue@4.2.6(vue@3.5.13): dependencies: '@ant-design/colors': 6.0.0 @@ -1541,6 +1631,12 @@ snapshots: vue-types: 3.0.2(vue@3.5.13) warning: 4.0.3 + aos@2.3.4: + dependencies: + classlist-polyfill: 1.2.0 + lodash.debounce: 4.0.8 + lodash.throttle: 4.1.1 + array-tree-filter@2.1.0: {} async-validator@4.2.5: {} @@ -1569,6 +1665,8 @@ snapshots: dependencies: readdirp: 4.1.2 + classlist-polyfill@1.2.0: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -1773,6 +1871,10 @@ snapshots: lodash-es@4.17.21: {} + lodash.debounce@4.0.8: {} + + lodash.throttle@4.1.1: {} + lodash@4.17.21: {} loose-envify@1.4.0: diff --git a/src/App.vue b/src/App.vue index 0a3d71e..b9153ed 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,11 +1,51 @@ - +