├── public └── favicon.ico ├── src ├── main.js ├── config │ ├── links.json │ └── site.json ├── App.vue ├── components │ ├── Website.vue │ ├── AboutPage.vue │ ├── VisitTimer.vue │ └── Home.vue └── style.less ├── vite.config.js ├── .gitignore ├── package.json ├── index.html ├── README.md ├── .env └── LICENSE /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JLinMr/Home-Vue/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import App from './App.vue'; 3 | import './style.less'; 4 | import { MotionPlugin } from '@vueuse/motion'; 5 | const app = createApp(App); 6 | 7 | app.use(MotionPlugin); 8 | 9 | app.mount('#app'); -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import vue from '@vitejs/plugin-vue'; 3 | 4 | export default defineConfig({ 5 | plugins: [vue()], 6 | css: { 7 | preprocessorOptions: { 8 | less: { 9 | javascriptEnabled: true, 10 | }, 11 | }, 12 | }, 13 | server: { 14 | port: 3000, 15 | }, 16 | }); -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | pnpm-lock.yaml -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "home-vue", 3 | "private": true, 4 | "version": "0.1.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@vueuse/motion": "^2.2.5", 13 | "less": "^4.2.0", 14 | "swiper": "^11.1.14", 15 | "typed.js": "^2.1.0", 16 | "vue": "^3.4.37" 17 | }, 18 | "devDependencies": { 19 | "@vitejs/plugin-vue": "^5.1.4", 20 | "vite": "^5.4.1" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/config/links.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "Email", 4 | "icon": "fas fa-envelope", 5 | "url": "mailto:i@bsgun.cn", 6 | "hoverColor": "#e78b0a" 7 | }, 8 | { 9 | "type": "Github", 10 | "icon": "fab fa-github", 11 | "url": "https://github.com/JLinmr", 12 | "hoverColor": "#6500fc" 13 | }, 14 | { 15 | "type": "支付宝", 16 | "icon": "fab fa-alipay", 17 | "qrCode": "https://lib.bsgun.cn/Hexo-static/img/zfbzf.avif", 18 | "hoverColor": "#007aff" 19 | }, 20 | { 21 | "type": "微信", 22 | "icon": "fab fa-weixin", 23 | "qrCode": "https://lib.bsgun.cn/Hexo-static/img/wxzf.avif", 24 | "hoverColor": "#247700" 25 | } 26 | ] 27 | -------------------------------------------------------------------------------- /src/config/site.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "博客", 4 | "url": "https://blog.bsgun.cn", 5 | "icon": "fa fa-blog" 6 | }, 7 | { 8 | "name": "雨云", 9 | "url": "https://www.rainyun.com/Lin_", 10 | "icon": "fa fa-cloud " 11 | }, 12 | { 13 | "name": "图床", 14 | "url": "https://dev.bsgun.cn", 15 | "icon": "fa fa-image" 16 | }, 17 | { 18 | "name": "封面", 19 | "url": "https://cover.bsgun.cn", 20 | "icon": "fa fa-panorama" 21 | }, 22 | { 23 | "name": "监测", 24 | "url": "https://status.bsgun.cn", 25 | "icon": "fa fa-chart-line" 26 | }, 27 | { 28 | "name": "图标", 29 | "url": "https://icon.bsgun.cn/", 30 | "icon": "fa fa-icons" 31 | } 32 | ] -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %VITE_TITLE% 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 个人主页 2 | 3 | 基于Vue的个人主页,刚接触Vue不太会用各种插件,代码有点难看,大佬们见谅 4 | 5 | ### Demo 6 | 7 | - [预览](https://bsgun.cn) 8 | 9 | ### 修改 10 | 11 | 图标默认采用Font Awesome,如需修改图标,请前往 [Font Awesome](https://fa6.dashgame.com/) 复制图标 12 | 13 | - 修改联系方式 **`src/config/links.json`** 文件中的内容值即可 14 | - 修改网站列表 **`src/config/site.json`** 文件中的内容值即可 15 | 16 | ### 部署 17 | 18 | * **安装** [node.js](https://nodejs.org/zh-cn/) **环境** 19 | 20 | > node > 16.16.0 21 | > npm > 8.15.0 22 | 23 | * 然后以 **管理员权限** 运行 `cmd` 终端,并 `cd` 到 项目根目录 24 | * 在 `终端` 中输入: 25 | 26 | ```bash 27 | # 安装依赖 28 | npm install 29 | # 预览 30 | npm run dev 31 | # 构建 32 | npm run build 33 | ``` 34 | > 构建完成后,静态资源会在 **`dist` 目录** 中生成,可将 **`dist` 文件夹下的文件**上传至服务器,也可使用 `Vercel` 等托管平台一键导入并自动部署 35 | 36 | ### Vercle部署 37 | 38 | >点击后自动部署并创建仓库 39 | 40 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/JLinMr/Home-Vue&repository-name=Home-Vue) 41 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # 网页标题 2 | VITE_TITLE = "梦爱吃鱼 - 个人主页" 3 | # 网页关键词 4 | VITE_KEYWORDS = "一个基于Vue3的个人主页" 5 | # 网页描述 6 | VITE_DESCRIPTION = "一个默默无闻的主页" 7 | # 网页图标 8 | VITE_FAVICON = "/favicon.ico" 9 | 10 | ## 你需要部署Umami 再填写这些配置 11 | # Umami 统计脚本地址 12 | VITE_UMAMI_SCRIPT = "https://um.bsgun.cn/tongjifenxi.js" 13 | # Umami 统计网站 ID 14 | VITE_UMAMI_WEBSITE_ID = "2a70fe42-f442-41ea-8632-05adfc0c8d1f" 15 | 16 | ## 引入Font Awesome 图标库 fa6.dashgame.com 17 | VITE_ICON_LIBRARY = "//lib.baomitu.com/font-awesome/6.5.0/css/all.min.css" 18 | 19 | ## 引入字体库 // 如需修改字体同步去 style.less 文件修改Body内容 20 | VITE_FONT_LIBRARY = "https://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css" 21 | 22 | # 网页内显示的名称 // 页脚也会同步显示 23 | VITE_APP_USER_NAME = "梦爱吃鱼" 24 | # 网页内显示的头像 25 | VITE_APP_PROFILE_IMAGE_URL = "https://q.qlogo.cn/headimg_dl?dst_uin=153336174&spec=640" 26 | 27 | ## 页脚的备案信息 // 如果不填写则不显示 // 移动端不显示公安备案号 28 | # 应用 ICP 备案号 29 | VITE_APP_ICP_NUMBER = "豫ICP备20017009号" 30 | # 应用公安备案号 31 | VITE_APP_POLICE_NUMBER = "豫公网安备 41168102000061号" 32 | 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 摸鱼玩家 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/Website.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/components/AboutPage.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 72 | 73 | -------------------------------------------------------------------------------- /src/components/VisitTimer.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | 109 | 110 | -------------------------------------------------------------------------------- /src/components/Home.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 129 | 130 | -------------------------------------------------------------------------------- /src/style.less: -------------------------------------------------------------------------------- 1 | :root { 2 | --border-radius: 10px; 3 | --text-size: 16px; 4 | --icon-size: 20px; 5 | --text-color: #333; 6 | --background-color: #eee; 7 | --background-color-rgb: 238, 238, 238; 8 | --shadow-color: rgba(0, 0, 0, 0.2); 9 | --border-color: rgb(193 193 193 / 50%); 10 | --hover-link-color: #ffcc00; 11 | --hover-other-color: #555; 12 | --background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxOTInIGhlaWdodD0nMTkyJyB2aWV3Qm94PScwIDAgMTkyIDE5Mic+PHBhdGggZmlsbD0nI2QzZDNkMycgZmlsbC1vcGFjaXR5PScwLjUnIGQ9J00xOTIgMTV2MmExMSAxMSAwIDAgMC0xMSAxMWMwIDEuOTQgMS4xNiA0Ljc1IDIuNTMgNi4xMWwyLjM2IDIuMzZhNi45MyA2LjkzIDAgMCAxIDEuMjIgNy41NmwtLjQzLjg0YTguMDggOC4wOCAwIDAgMS02LjY2IDQuMTNIMTQ1djM1LjAyYTYuMSA2LjEgMCAwIDAgMy4wMyA0Ljg3bC44NC40M2MxLjU4Ljc5IDQgLjQgNS4yNC0uODVsMi4zNi0yLjM2YTEyLjA0IDEyLjA0IDAgMCAxIDcuNTEtMy4xMSAxMyAxMyAwIDEgMSAuMDIgMjYgMTIgMTIgMCAwIDEtNy41My0zLjExbC0yLjM2LTIuMzZhNC45MyA0LjkzIDAgMCAwLTUuMjQtLjg1bC0uODQuNDNhNi4xIDYuMSAwIDAgMC0zLjAzIDQuODdWMTQzaDM1LjAyYTguMDggOC4wOCAwIDAgMSA2LjY2IDQuMTNsLjQzLjg0YTYuOTEgNi45MSAwIDAgMS0xLjIyIDcuNTZsLTIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxODEgMTY0YTExIDExIDAgMCAwIDExIDExdjJhMTMgMTMgMCAwIDEtMTMtMTMgMTIgMTIgMCAwIDEgMy4xMS03LjUzbDIuMzYtMi4zNmE0LjkzIDQuOTMgMCAwIDAgLjg1LTUuMjRsLS40My0uODRhNi4xIDYuMSAwIDAgMC00Ljg3LTMuMDNIMTQ1djM1LjAyYTguMDggOC4wOCAwIDAgMS00LjEzIDYuNjZsLS44NC40M2E2LjkxIDYuOTEgMCAwIDEtNy41Ni0xLjIybC0yLjM2LTIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgMTI0IDE4MWExMSAxMSAwIDAgMC0xMSAxMWgtMmExMyAxMyAwIDAgMSAxMy0xM2MyLjQ3IDAgNS43OSAxLjM3IDcuNTMgMy4xMWwyLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwIDUuMjQuODVsLjg0LS40M2E2LjEgNi4xIDAgMCAwIDMuMDMtNC44N1YxNDVoLTM1LjAyYTguMDggOC4wOCAwIDAgMS02LjY2LTQuMTNsLS40My0uODRhNi45MSA2LjkxIDAgMCAxIDEuMjItNy41NmwyLjM2LTIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgMTA3IDEyNGExMSAxMSAwIDAgMC0yMiAwYzAgMS45NCAxLjE2IDQuNzUgMi41MyA2LjExbDIuMzYgMi4zNmE2LjkzIDYuOTMgMCAwIDEgMS4yMiA3LjU2bC0uNDMuODRhOC4wOCA4LjA4IDAgMCAxLTYuNjYgNC4xM0g0OXYzNS4wMmE2LjEgNi4xIDAgMCAwIDMuMDMgNC44N2wuODQuNDNjMS41OC43OSA0IC40IDUuMjQtLjg1bDIuMzYtMi4zNmExMi4wNCAxMi4wNCAwIDAgMSA3LjUxLTMuMTFBMTMgMTMgMCAwIDEgODEgMTkyaC0yYTExIDExIDAgMCAwLTExLTExYy0xLjk0IDAtNC43NSAxLjE2LTYuMTEgMi41M2wtMi4zNiAyLjM2YTYuOTMgNi45MyAwIDAgMS03LjU2IDEuMjJsLS44NC0uNDNhOC4wOCA4LjA4IDAgMCAxLTQuMTMtNi42NlYxNDVIMTEuOThhNi4xIDYuMSAwIDAgMC00Ljg3IDMuMDNsLS40My44NGMtLjc5IDEuNTgtLjQgNCAuODUgNS4yNGwyLjM2IDIuMzZhMTIuMDQgMTIuMDQgMCAwIDEgMy4xMSA3LjUxQTEzIDEzIDAgMCAxIDAgMTc3di0yYTExIDExIDAgMCAwIDExLTExYzAtMS45NC0xLjE2LTQuNzUtMi41My02LjExbC0yLjM2LTIuMzZhNi45MyA2LjkzIDAgMCAxLTEuMjItNy41NmwuNDMtLjg0YTguMDggOC4wOCAwIDAgMSA2LjY2LTQuMTNINDd2LTM1LjAyYTYuMSA2LjEgMCAwIDAtMy4wMy00Ljg3bC0uODQtLjQzYy0xLjU5LS44LTQtLjQtNS4yNC44NWwtMi4zNiAyLjM2QTEyIDEyIDAgMCAxIDI4IDEwOWExMyAxMyAwIDEgMSAwLTI2YzIuNDcgMCA1Ljc5IDEuMzcgNy41MyAzLjExbDIuMzYgMi4zNmE0Ljk0IDQuOTQgMCAwIDAgNS4yNC44NWwuODQtLjQzQTYuMSA2LjEgMCAwIDAgNDcgODQuMDJWNDlIMTEuOThhOC4wOCA4LjA4IDAgMCAxLTYuNjYtNC4xM2wtLjQzLS44NGE2LjkxIDYuOTEgMCAwIDEgMS4yMi03LjU2bDIuMzYtMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxMSAyOCAxMSAxMSAwIDAgMCAwIDE3di0yYTEzIDEzIDAgMCAxIDEzIDEzYzAgMi40Ny0xLjM3IDUuNzktMy4xMSA3LjUzbC0yLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwLS44NSA1LjI0bC40My44NEE2LjEgNi4xIDAgMCAwIDExLjk4IDQ3SDQ3VjExLjk4YTguMDggOC4wOCAwIDAgMSA0LjEzLTYuNjZsLjg0LS40M2E2LjkxIDYuOTEgMCAwIDEgNy41NiAxLjIybDIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCA2OCAxMSAxMSAxMSAwIDAgMCA3OSAwaDJhMTMgMTMgMCAwIDEtMTMgMTMgMTIgMTIgMCAwIDEtNy41My0zLjExbC0yLjM2LTIuMzZhNC45MyA0LjkzIDAgMCAwLTUuMjQtLjg1bC0uODQuNDNBNi4xIDYuMSAwIDAgMCA0OSAxMS45OFY0N2gzNS4wMmE4LjA4IDguMDggMCAwIDEgNi42NiA0LjEzbC40My44NGE2LjkxIDYuOTEgMCAwIDEtMS4yMiA3LjU2bC0yLjM2IDIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgODUgNjhhMTEgMTEgMCAwIDAgMjIgMGMwLTEuOTQtMS4xNi00Ljc1LTIuNTMtNi4xMWwtMi4zNi0yLjM2YTYuOTMgNi45MyAwIDAgMS0xLjIyLTcuNTZsLjQzLS44NGE4LjA4IDguMDggMCAwIDEgNi42Ni00LjEzSDE0M1YxMS45OGE2LjEgNi4xIDAgMCAwLTMuMDMtNC44N2wtLjg0LS40M2MtMS41OS0uOC00LS40LTUuMjQuODVsLTIuMzYgMi4zNkExMiAxMiAwIDAgMSAxMjQgMTNhMTMgMTMgMCAwIDEtMTMtMTNoMmExMSAxMSAwIDAgMCAxMSAxMWMxLjk0IDAgNC43NS0xLjE2IDYuMTEtMi41M2wyLjM2LTIuMzZhNi45MyA2LjkzIDAgMCAxIDcuNTYtMS4yMmwuODQuNDNhOC4wOCA4LjA4IDAgMCAxIDQuMTMgNi42NlY0N2gzNS4wMmE2LjEgNi4xIDAgMCAwIDQuODctMy4wM2wuNDMtLjg0Yy44LTEuNTkuNC00LS44NS01LjI0bC0yLjM2LTIuMzZBMTIgMTIgMCAwIDEgMTc5IDI4YTEzIDEzIDAgMCAxIDEzLTEzek04NC4wMiAxNDNhNi4xIDYuMSAwIDAgMCA0Ljg3LTMuMDNsLjQzLS44NGMuOC0xLjU5LjQtNC0uODUtNS4yNGwtMi4zNi0yLjM2QTEyIDEyIDAgMCAxIDgzIDEyNGExMyAxMyAwIDEgMSAyNiAwYzAgMi40Ny0xLjM3IDUuNzktMy4xMSA3LjUzbC0yLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwLS44NSA1LjI0bC40My44NGE2LjEgNi4xIDAgMCAwIDQuODcgMy4wM0gxNDN2LTM1LjAyYTguMDggOC4wOCAwIDAgMSA0LjEzLTYuNjZsLjg0LS40M2E2LjkxIDYuOTEgMCAwIDEgNy41NiAxLjIybDIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxNjQgMTA3YTExIDExIDAgMCAwIDAtMjJjLTEuOTQgMC00Ljc1IDEuMTYtNi4xMSAyLjUzbC0yLjM2IDIuMzZhNi45MyA2LjkzIDAgMCAxLTcuNTYgMS4yMmwtLjg0LS40M2E4LjA4IDguMDggMCAwIDEtNC4xMy02LjY2VjQ5aC0zNS4wMmE2LjEgNi4xIDAgMCAwLTQuODcgMy4wM2wtLjQzLjg0Yy0uNzkgMS41OC0uNCA0IC44NSA1LjI0bDIuMzYgMi4zNmExMi4wNCAxMi4wNCAwIDAgMSAzLjExIDcuNTFBMTMgMTMgMCAxIDEgODMgNjhhMTIgMTIgMCAwIDEgMy4xMS03LjUzbDIuMzYtMi4zNmE0LjkzIDQuOTMgMCAwIDAgLjg1LTUuMjRsLS40My0uODRBNi4xIDYuMSAwIDAgMCA4NC4wMiA0OUg0OXYzNS4wMmE4LjA4IDguMDggMCAwIDEtNC4xMyA2LjY2bC0uODQuNDNhNi45MSA2LjkxIDAgMCAxLTcuNTYtMS4yMmwtMi4zNi0yLjM2QTEwLjA2IDEwLjA2IDAgMCAwIDI4IDg1YTExIDExIDAgMCAwIDAgMjJjMS45NCAwIDQuNzUtMS4xNiA2LjExLTIuNTNsMi4zNi0yLjM2YTYuOTMgNi45MyAwIDAgMSA3LjU2LTEuMjJsLjg0LjQzYTguMDggOC4wOCAwIDAgMSA0LjEzIDYuNjZWMTQzaDM1LjAyeic+PC9wYXRoPjwvc3ZnPg==); 13 | } 14 | 15 | .dark-mode { 16 | --text-color: #eee; 17 | --background-color: #333; 18 | --background-color-rgb: 51, 51, 51; 19 | --shadow-color: rgba(255, 255, 255, 0.2); 20 | --border-color: rgb(131 131 131 / 50%); 21 | --background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxOTInIGhlaWdodD0nMTkyJyB2aWV3Qm94PScwIDAgMTkyIDE5Mic+PHBhdGggZmlsbD0nIzVhNWE1YScgZmlsbC1vcGFjaXR5PScwLjUnIGQ9J00xOTIgMTV2MmExMSAxMSAwIDAgMC0xMSAxMWMwIDEuOTQgMS4xNiA0Ljc1IDIuNTMgNi4xMWwyLjM2IDIuMzZhNi45MyA2LjkzIDAgMCAxIDEuMjIgNy41NmwtLjQzLjg0YTguMDggOC4wOCAwIDAgMS02LjY2IDQuMTNIMTQ1djM1LjAyYTYuMSA2LjEgMCAwIDAgMy4wMyA0Ljg3bC44NC40M2MxLjU4Ljc5IDQgLjQgNS4yNC0uODVsMi4zNi0yLjM2YTEyLjA0IDEyLjA0IDAgMCAxIDcuNTEtMy4xMSAxMyAxMyAwIDEgMSAuMDIgMjYgMTIgMTIgMCAwIDEtNy41My0zLjExbC0yLjM2LTIuMzZhNC45MyA0LjkzIDAgMCAwLTUuMjQtLjg1bC0uODQuNDNhNi4xIDYuMSAwIDAgMC0zLjAzIDQuODdWMTQzaDM1LjAyYTguMDggOC4wOCAwIDAgMSA2LjY2IDQuMTNsLjQzLjg0YTYuOTEgNi45MSAwIDAgMS0xLjIyIDcuNTZsLTIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxODEgMTY0YTExIDExIDAgMCAwIDExIDExdjJhMTMgMTMgMCAwIDEtMTMtMTMgMTIgMTIgMCAwIDEgMy4xMS03LjUzbDIuMzYtMi4zNmE0LjkzIDQuOTMgMCAwIDAgLjg1LTUuMjRsLS40My0uODRhNi4xIDYuMSAwIDAgMC00Ljg3LTMuMDNIMTQ1djM1LjAyYTguMDggOC4wOCAwIDAgMS00LjEzIDYuNjZsLS44NC40M2E2LjkxIDYuOTEgMCAwIDEtNy41Ni0xLjIybC0yLjM2LTIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgMTI0IDE4MWExMSAxMSAwIDAgMC0xMSAxMWgtMmExMyAxMyAwIDAgMSAxMy0xM2MyLjQ3IDAgNS43OSAxLjM3IDcuNTMgMy4xMWwyLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwIDUuMjQuODVsLjg0LS40M2E2LjEgNi4xIDAgMCAwIDMuMDMtNC44N1YxNDVoLTM1LjAyYTguMDggOC4wOCAwIDAgMS02LjY2LTQuMTNsLS40My0uODRhNi45MSA2LjkxIDAgMCAxIDEuMjItNy41NmwyLjM2LTIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgMTA3IDEyNGExMSAxMSAwIDAgMC0yMiAwYzAgMS45NCAxLjE2IDQuNzUgMi41MyA2LjExbDIuMzYgMi4zNmE2LjkzIDYuOTMgMCAwIDEgMS4yMiA3LjU2bC0uNDMuODRhOC4wOCA4LjA4IDAgMCAxLTYuNjYgNC4xM0g0OXYzNS4wMmE2LjEgNi4xIDAgMCAwIDMuMDMgNC44N2wuODQuNDNjMS41OC43OSA0IC40IDUuMjQtLjg1bDIuMzYtMi4zNmExMi4wNCAxMi4wNCAwIDAgMSA3LjUxLTMuMTFBMTMgMTMgMCAwIDEgODEgMTkyaC0yYTExIDExIDAgMCAwLTExLTExYy0xLjk0IDAtNC43NSAxLjE2LTYuMTEgMi41M2wtMi4zNiAyLjM2YTYuOTMgNi45MyAwIDAgMS03LjU2IDEuMjJsLS44NC0uNDNhOC4wOCA4LjA4IDAgMCAxLTQuMTMtNi42NlYxNDVIMTEuOThhNi4xIDYuMSAwIDAgMC00Ljg3IDMuMDNsLS40My44NGMtLjc5IDEuNTgtLjQgNCAuODUgNS4yNGwyLjM2IDIuMzZhMTIuMDQgMTIuMDQgMCAwIDEgMy4xMSA3LjUxQTEzIDEzIDAgMCAxIDAgMTc3di0yYTExIDExIDAgMCAwIDExLTExYzAtMS45NC0xLjE2LTQuNzUtMi41My02LjExbC0yLjM2LTIuMzZhNi45MyA2LjkzIDAgMCAxLTEuMjItNy41NmwuNDMtLjg0YTguMDggOC4wOCAwIDAgMSA2LjY2LTQuMTNINDd2LTM1LjAyYTYuMSA2LjEgMCAwIDAtMy4wMy00Ljg3bC0uODQtLjQzYy0xLjU5LS44LTQtLjQtNS4yNC44NWwtMi4zNiAyLjM2QTEyIDEyIDAgMCAxIDI4IDEwOWExMyAxMyAwIDEgMSAwLTI2YzIuNDcgMCA1Ljc5IDEuMzcgNy41MyAzLjExbDIuMzYgMi4zNmE0Ljk0IDQuOTQgMCAwIDAgNS4yNC44NWwuODQtLjQzQTYuMSA2LjEgMCAwIDAgNDcgODQuMDJWNDlIMTEuOThhOC4wOCA4LjA4IDAgMCAxLTYuNjYtNC4xM2wtLjQzLS44NGE2LjkxIDYuOTEgMCAwIDEgMS4yMi03LjU2bDIuMzYtMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxMSAyOCAxMSAxMSAwIDAgMCAwIDE3di0yYTEzIDEzIDAgMCAxIDEzIDEzYzAgMi40Ny0xLjM3IDUuNzktMy4xMSA3LjUzbC0yLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwLS44NSA1LjI0bC40My44NEE2LjEgNi4xIDAgMCAwIDExLjk4IDQ3SDQ3VjExLjk4YTguMDggOC4wOCAwIDAgMSA0LjEzLTYuNjZsLjg0LS40M2E2LjkxIDYuOTEgMCAwIDEgNy41NiAxLjIybDIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCA2OCAxMSAxMSAxMSAwIDAgMCA3OSAwaDJhMTMgMTMgMCAwIDEtMTMgMTMgMTIgMTIgMCAwIDEtNy41My0zLjExbC0yLjM2LTIuMzZhNC45MyA0LjkzIDAgMCAwLTUuMjQtLjg1bC0uODQuNDNBNi4xIDYuMSAwIDAgMCA0OSAxMS45OFY0N2gzNS4wMmE4LjA4IDguMDggMCAwIDEgNi42NiA0LjEzbC40My44NGE2LjkxIDYuOTEgMCAwIDEtMS4yMiA3LjU2bC0yLjM2IDIuMzZBMTAuMDYgMTAuMDYgMCAwIDAgODUgNjhhMTEgMTEgMCAwIDAgMjIgMGMwLTEuOTQtMS4xNi00Ljc1LTIuNTMtNi4xMWwtMi4zNi0yLjM2YTYuOTMgNi45MyAwIDAgMS0xLjIyLTcuNTZsLjQzLS44NGE4LjA4IDguMDggMCAwIDEgNi42Ni00LjEzSDE0M1YxMS45OGE2LjEgNi4xIDAgMCAwLTMuMDMtNC44N2wtLjg0LS40M2MtMS41OS0uOC00LS40LTUuMjQuODVsLTIuMzYgMi4zNkExMiAxMiAwIDAgMSAxMjQgMTNhMTMgMTMgMCAwIDEtMTMtMTNoMmExMSAxMSAwIDAgMCAxMSAxMWMxLjk0IDAgNC43NS0xLjE2IDYuMTEtMi41M2wyLjM2LTIuMzZhNi45MyA2LjkzIDAgMCAxIDcuNTYtMS4yMmwuODQuNDNhOC4wOCA4LjA4IDAgMCAxIDQuMTMgNi42NlY0N2gzNS4wMmE2LjEgNi4xIDAgMCAwIDQuODctMy4wM2wuNDMtLjg0Yy44LTEuNTkuNC00LS44NS01LjI0bC0yLjM2LTIuMzZBMTIgMTIgMCAwIDEgMTc5IDI4YTEzIDEzIDAgMCAxIDEzLTEzek04NC4wMiAxNDNhNi4xIDYuMSAwIDAgMCA0Ljg3LTMuMDNsLjQzLS44NGMuOC0xLjU5LjQtNC0uODUtNS4yNGwtMi4zNi0yLjM2QTEyIDEyIDAgMCAxIDgzIDEyNGExMyAxMyAwIDEgMSAyNiAwYzAgMi40Ny0xLjM3IDUuNzktMy4xMSA3LjUzbC0yLjM2IDIuMzZhNC45NCA0Ljk0IDAgMCAwLS44NSA1LjI0bC40My44NGE2LjEgNi4xIDAgMCAwIDQuODcgMy4wM0gxNDN2LTM1LjAyYTguMDggOC4wOCAwIDAgMSA0LjEzLTYuNjZsLjg0LS40M2E2LjkxIDYuOTEgMCAwIDEgNy41NiAxLjIybDIuMzYgMi4zNkExMC4wNiAxMC4wNiAwIDAgMCAxNjQgMTA3YTExIDExIDAgMCAwIDAtMjJjLTEuOTQgMC00Ljc1IDEuMTYtNi4xMSAyLjUzbC0yLjM2IDIuMzZhNi45MyA2LjkzIDAgMCAxLTcuNTYgMS4yMmwtLjg0LS40M2E4LjA4IDguMDggMCAwIDEtNC4xMy02LjY2VjQ5aC0zNS4wMmE2LjEgNi4xIDAgMCAwLTQuODcgMy4wM2wtLjQzLjg0Yy0uNzkgMS41OC0uNCA0IC44NSA1LjI0bDIuMzYgMi4zNmExMi4wNCAxMi4wNCAwIDAgMSAzLjExIDcuNTFBMTMgMTMgMCAxIDEgODMgNjhhMTIgMTIgMCAwIDEgMy4xMS03LjUzbDIuMzYtMi4zNmE0LjkzIDQuOTMgMCAwIDAgLjg1LTUuMjRsLS40My0uODRBNi4xIDYuMSAwIDAgMCA4NC4wMiA0OUg0OXYzNS4wMmE4LjA4IDguMDggMCAwIDEtNC4xMyA2LjY2bC0uODQuNDNhNi45MSA2LjkxIDAgMCAxLTcuNTYtMS4yMmwtMi4zNi0yLjM2QTEwLjA2IDEwLjA2IDAgMCAwIDI4IDg1YTExIDExIDAgMCAwIDAgMjJjMS45NCAwIDQuNzUtMS4xNiA2LjExLTIuNTNsMi4zNi0yLjM2YTYuOTMgNi45MyAwIDAgMSA3LjU2LTEuMjJsLjg0LjQzYTguMDggOC4wOCAwIDAgMSA0LjEzIDYuNjZWMTQzaDM1LjAyeic+PC9wYXRoPjwvc3ZnPg==); 22 | } 23 | 24 | * { 25 | -webkit-user-select: none; 26 | -moz-user-select: none; 27 | -ms-user-select: none; 28 | user-select: none; 29 | box-sizing: border-box; 30 | } 31 | 32 | a { 33 | text-decoration: none; 34 | } 35 | 36 | ul { 37 | padding: 0; 38 | list-style: none; 39 | margin: 0; 40 | } 41 | 42 | body, html { 43 | height: 100%; 44 | margin: 0; 45 | display: flex; 46 | flex-direction: column; 47 | font-family: 'HarmonyOS_Regular', 'MiSans', 'HarmonyOS Sans SC', sans-serif; 48 | color: var(--text-color); 49 | overflow: hidden; 50 | } 51 | 52 | body.dark-mode { 53 | filter: brightness(0.7); 54 | } 55 | 56 | /* App 页面 */ 57 | #app { 58 | flex: 1; 59 | display: flex; 60 | flex-direction: column; 61 | padding: 0 10px; 62 | } 63 | 64 | .background { 65 | position: fixed; 66 | top: 0; 67 | left: 0; 68 | width: 100vw; 69 | height: 100vh; 70 | display: flex; 71 | align-items: center; 72 | justify-content: center; 73 | z-index: -2; 74 | background: var(--background-color) var(--background-image) repeat; 75 | } 76 | 77 | 78 | footer { 79 | padding: 10px 0; 80 | display: flex; 81 | justify-content: center; 82 | margin: 0; 83 | font-size: var(--text-size); 84 | gap: 8px; 85 | 86 | a { 87 | color: var(--text-color); 88 | transition: all 0.3s ease-in-out; 89 | &:hover { 90 | color: var(--hover-link-color); 91 | } 92 | } 93 | } 94 | 95 | .police_link { 96 | display: flex; 97 | align-items: center; 98 | 99 | .police_img { 100 | display: inline-block; 101 | width: 20px; 102 | height: 20px; 103 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAACglBMVEUAAAD89dn+/ODz6KrcrGreqFfYrn3x16769M3oxnyaaVzhs2ifaFXbrGLkvFnpyF7v2X/kwm3cp1nhsGfqw3rntVzjrFPt3oDjvGnbnFGti3q0lH7ktoLryXn9v1T4znr/74bnvGz034v+2I/ktoDz6ZLkwY/Dfz7buoftzYbq2IPr0pjs3bLv6KPRrnbKhFv/+dDZr4Lx38f/+cH/95f42oL7/97s2Y3++uzTk3AAAXgCAWbmulrdmUXWHRcBAm7uzWbpwmLsxl3ktV3qvFr/0ljmwFHksE7fo0raSijXPSDWAgjPAAJrdoeUj4EAAICRiXb143Pyy27w1Gz+z2XtymH/217qyVy7jluTeFrrwFfislP+xVJRNlHpuFDpsErVkEbysETajkPpgj7ThT3ilDvXdTg5FDjdhTXtcTDWZTC7TCbuXiPTOCLJPR/TLhzJJxP9LA+0Bw/QFg2Ej5kcPpdyhZSptJEACJFpfo4AG44XMInFvYfTvIejmYRyeoJzdoK9un7FrnwAEHp8enny2HjWwHjKtnhcX3jYzHfu2HWsonPNwnH70m9WTm8AAW//723pym3dtmm0o2ZeWWb/4mPtwmJuYmL/vmB5ZGAMAF2njVn4xFjYnli0mVjiqVfyyVbmtlbXkVPlvFLNrFKjfVLuvlBgHlDsuU9ODk7/2E02Gk3jqkqEaUr/tUngjkf7n0b6xERCJETdn0K1gD/ooD3Ulj3TZT3WjjzOeDqBWDr3pDlMADnbbTf2gjbkbzaTYDZpAjbplzTEazPXXzOeXzDMPi38jizJWSrVSCrzfCjVdCjTQCbFUiTlYCPiRh7SIRrRDBG/ABHBDAvEGArJAAJrcyAdAAAAOnRSTlMAGghC4MasaVv7+/n39fTw7Ozr5+bk5OHg0tHLx8TDwb68urKxq5+cmJWTjIN8b11MSEFBNTApJyEUZZQtrgAAAW1JREFUGNNigAJGdmkpdkYGZGDMxnN019qlXGwGCDGmiPQDh89lTupOj2CCa5WPjTzlnevps6E8Vhkqasa9esrxC3b5nsWXZ/huEjEHC5oE+M/O8c63u5h7NafRPsAUrFnOz2rLeW87Ly87H6/O/hYFC6Cg3u46/3n7fE5sc1tfnNlj7+eqABTUONRUMX1jdl5W2t6kqTOtahLVgIIsGUGl9tnJJ/OOnNm/3bq6NZUFKAgY7851ZVZFhVln05ILL1lXxqRIAAVVNofUVu0pulJQ4HnsYHN7b7QmUFAmaX5IiZW19crls6yt6sOc18gCBTnnLkoNaov0nbyko69h2lZbdwGgIMdij4TTc8JWxSS6TnDNSMgOZ2YAifK7pexwcHG3cQi2tZ0oCBZjMBIOd1oY5eQY6uJhE+woBBFUCuxydnZxd4yz9bCxcQhUhYSmFl/cgmXxK+KjnNxCxXVhAWqpr84qKSbKqqhtCOYDALPYc2hoS0J5AAAAAElFTkSuQmCC"); 104 | } 105 | } 106 | 107 | @media screen and (max-width: 768px) { 108 | .police_link { 109 | display: none; 110 | } 111 | } --------------------------------------------------------------------------------