├── .vscode └── extensions.json ├── public ├── data │ ├── mourn.json │ ├── console.json │ ├── music.json │ ├── background.json │ ├── updateRecords.json │ ├── socialLinks.json │ └── websiteLists.json ├── image │ ├── icon │ │ ├── 128.png │ │ ├── 144.png │ │ ├── 180.png │ │ ├── 192.png │ │ ├── 256.png │ │ ├── 32.png │ │ ├── 48.png │ │ ├── 512.png │ │ ├── 72.png │ │ ├── 96.png │ │ ├── back.png │ │ ├── logo.png │ │ ├── play.png │ │ ├── qq.png │ │ ├── warn.png │ │ ├── candle.png │ │ ├── email.png │ │ ├── gitee.png │ │ ├── github.png │ │ ├── music.png │ │ ├── pause.png │ │ ├── bilibili.png │ │ ├── favicon.ico │ │ ├── telegram.png │ │ ├── twitter.png │ │ └── apple-touch-icon.png │ ├── screenshots.png │ └── background │ │ ├── back.jpeg │ │ ├── back.jpg │ │ ├── home.jpeg │ │ └── home.jpg └── css │ └── font │ ├── UnidreamLED.ttf │ ├── LongCang-Regular.ttf │ ├── Playball-Regular.ttf │ ├── UnidreamLED.css │ ├── Playball.css │ ├── LongCang.css │ └── HarmonyOS_Regular.css ├── .hintrc ├── .gitignore ├── src ├── main.js ├── style │ ├── global.scss │ └── style.scss ├── utils │ ├── debounce.js │ ├── tools.js │ ├── cursor.js │ └── getTime.js ├── views │ ├── Main │ │ ├── Left.vue │ │ └── Right.vue │ ├── Box │ │ └── index.vue │ ├── Func │ │ └── index.vue │ ├── MoreSet │ │ └── index.vue │ └── Music │ │ └── index.vue ├── api │ └── index.js ├── components │ ├── Weather │ │ └── index.vue │ ├── TimeCapsule │ │ └── index.vue │ ├── SocialLinks │ │ └── index.vue │ ├── Hitokoto │ │ └── index.vue │ ├── Footer │ │ └── index.vue │ ├── Loading │ │ └── index.vue │ ├── Background │ │ └── index.vue │ ├── Player │ │ └── index.vue │ ├── Message │ │ └── index.vue │ ├── Set │ │ └── index.vue │ └── Lists │ │ └── index.vue ├── store │ └── index.js └── App.vue ├── serverless.yml ├── package.json ├── LICENSE ├── index.html ├── .env ├── vite.config.js └── README.md /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /public/data/mourn.json: -------------------------------------------------------------------------------- 1 | { 2 | "mournSwitch": false, 3 | "mournText": "" 4 | } -------------------------------------------------------------------------------- /public/image/icon/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/128.png -------------------------------------------------------------------------------- /public/image/icon/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/144.png -------------------------------------------------------------------------------- /public/image/icon/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/180.png -------------------------------------------------------------------------------- /public/image/icon/192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/192.png -------------------------------------------------------------------------------- /public/image/icon/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/256.png -------------------------------------------------------------------------------- /public/image/icon/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/32.png -------------------------------------------------------------------------------- /public/image/icon/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/48.png -------------------------------------------------------------------------------- /public/image/icon/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/512.png -------------------------------------------------------------------------------- /public/image/icon/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/72.png -------------------------------------------------------------------------------- /public/image/icon/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/96.png -------------------------------------------------------------------------------- /public/image/icon/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/back.png -------------------------------------------------------------------------------- /public/image/icon/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/logo.png -------------------------------------------------------------------------------- /public/image/icon/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/play.png -------------------------------------------------------------------------------- /public/image/icon/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/qq.png -------------------------------------------------------------------------------- /public/image/icon/warn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/warn.png -------------------------------------------------------------------------------- /public/image/icon/candle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/candle.png -------------------------------------------------------------------------------- /public/image/icon/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/email.png -------------------------------------------------------------------------------- /public/image/icon/gitee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/gitee.png -------------------------------------------------------------------------------- /public/image/icon/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/github.png -------------------------------------------------------------------------------- /public/image/icon/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/music.png -------------------------------------------------------------------------------- /public/image/icon/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/pause.png -------------------------------------------------------------------------------- /public/image/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/screenshots.png -------------------------------------------------------------------------------- /public/css/font/UnidreamLED.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/css/font/UnidreamLED.ttf -------------------------------------------------------------------------------- /public/image/icon/bilibili.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/bilibili.png -------------------------------------------------------------------------------- /public/image/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/favicon.ico -------------------------------------------------------------------------------- /public/image/icon/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/telegram.png -------------------------------------------------------------------------------- /public/image/icon/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/twitter.png -------------------------------------------------------------------------------- /public/image/background/back.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/background/back.jpeg -------------------------------------------------------------------------------- /public/image/background/back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/background/back.jpg -------------------------------------------------------------------------------- /public/image/background/home.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/background/home.jpeg -------------------------------------------------------------------------------- /public/image/background/home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/background/home.jpg -------------------------------------------------------------------------------- /public/css/font/LongCang-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/css/font/LongCang-Regular.ttf -------------------------------------------------------------------------------- /public/css/font/Playball-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/css/font/Playball-Regular.ttf -------------------------------------------------------------------------------- /public/image/icon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/first19326/Home/HEAD/public/image/icon/apple-touch-icon.png -------------------------------------------------------------------------------- /public/css/font/UnidreamLED.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "UnidreamLED"; 3 | src: url('./UnidreamLED.ttf') format('truetype'); 4 | } -------------------------------------------------------------------------------- /public/data/console.json: -------------------------------------------------------------------------------- 1 | [ 2 | ["WorstOne's website LiveForCode", "简单地活着, 肆意而又精彩!"], 3 | ["Based on IMSYY's website Home.", "Author IMSYY"] 4 | ] -------------------------------------------------------------------------------- /public/css/font/Playball.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Playball"; 3 | font-display: swap; 4 | src: url('./Playball-Regular.ttf') format('truetype'); 5 | } -------------------------------------------------------------------------------- /public/data/music.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": "https://api.i-meto.com/meting/api/", 3 | "server": "netease", 4 | "type": "playlist", 5 | "id": "2243342814" 6 | } -------------------------------------------------------------------------------- /public/css/font/LongCang.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Long Cang"; 3 | font-display: swap; 4 | src: url('./LongCang-Regular.ttf') format('truetype'); 5 | } -------------------------------------------------------------------------------- /.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "development" 4 | ], 5 | "hints": { 6 | "compat-api/html": "off", 7 | "no-protocol-relative-urls": "off", 8 | "compat-api/css": [ 9 | "default", 10 | { 11 | "ignore": [ 12 | "backdrop-filter" 13 | ] 14 | } 15 | ] 16 | } 17 | } -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /public/data/background.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "默认背景", 4 | "url": "", 5 | "images": [ 6 | "/image/background/home.jpg", "/image/background/home.jpeg", "/image/background/back.jpg", "/image/background/back.jpeg" 7 | ] 8 | }, { 9 | "name": "每日一图", 10 | "url": "https://api.dujin.org/bing/1920.php", 11 | "images": [] 12 | }, { 13 | "name": "随机风景", 14 | "url": "https://api.btstu.cn/sjbz/api.php?lx=fengjing&format=images", 15 | "images": [] 16 | } 17 | ] -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue'; 2 | import '@/style/style.scss'; 3 | import App from '@/App.vue'; 4 | // 引入 pinia 5 | import { createPinia } from 'pinia'; 6 | import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'; 7 | 8 | const app = createApp(App); 9 | const pinia = createPinia(); 10 | pinia.use(piniaPluginPersistedstate); 11 | 12 | app.use(pinia); 13 | app.mount('#app') 14 | 15 | // PWA 16 | navigator.serviceWorker.addEventListener('controllerchange', () => { 17 | // 弹出更新提醒 18 | console.log("站点已更新,刷新后生效"); 19 | ElMessage("站点已更新,刷新后生效"); 20 | }) -------------------------------------------------------------------------------- /src/style/global.scss: -------------------------------------------------------------------------------- 1 | // scss 全局变量 2 | 3 | // 响应式布局 4 | @mixin changeWidth($maxWidth:1200px) { 5 | .container { 6 | max-width: $maxWidth; 7 | } 8 | } 9 | 10 | // 首次调用 11 | @include changeWidth; 12 | 13 | /* 小于 1280px 时 */ 14 | @media (max-width: 1280px) { 15 | @include changeWidth($maxWidth: 1100px); 16 | } 17 | 18 | /* 小于 992px 时 */ 19 | @media (max-width: 992px) { 20 | @include changeWidth($maxWidth: 900px); 21 | } 22 | 23 | /* 小于 720px 时 */ 24 | @media (max-width: 720px) { 25 | 26 | // 隐藏元素 27 | .xs-hidden { 28 | display: none; 29 | } 30 | } -------------------------------------------------------------------------------- /src/utils/debounce.js: -------------------------------------------------------------------------------- 1 | // 防抖 2 | let timeout; 3 | 4 | function debounce(func, wait = 300, immediate = false) { 5 | // 清除定时器 6 | if (timeout !== null) { 7 | clearTimeout(timeout); 8 | } 9 | // 立即执行 10 | if (immediate) { 11 | var callNow = !timeout; 12 | timeout = setTimeout(function () { 13 | timeout = null; 14 | }, wait); 15 | if (callNow) typeof func === 'function' && func(); 16 | } else { 17 | timeout = setTimeout(function () { 18 | typeof func === 'function' && func(); 19 | }, wait); 20 | } 21 | } 22 | 23 | export default debounce; -------------------------------------------------------------------------------- /serverless.yml: -------------------------------------------------------------------------------- 1 | # serverless.yml 2 | # 详细配置文档: https://github.com/serverless-components/tencent-website/blob/master/docs/configure.md 3 | 4 | component: website # (必填) 引用 component 的名称, 当前用到的是 tencent-website 组件 5 | name: home # (必填) 该 website 组件创建的实例名称 6 | 7 | app: home # (可选) 该 website 应用名称 8 | stage: dev # (可选) 用于区分环境信息, 默认值是 dev 9 | 10 | inputs: 11 | src: 12 | src: ./dist # upload static files 13 | index: index.html 14 | # dist: ./dist 15 | # hook: npm run build 16 | # websitePath: ./ 17 | region: ap-beijing 18 | bucketName: home-bucket 19 | protocol: https 20 | replace: true 21 | autoRefresh: true 22 | autoSetupAcl: false -------------------------------------------------------------------------------- /public/data/updateRecords.json: -------------------------------------------------------------------------------- 1 | { 2 | "fix": [ 3 | "音乐播放器存在的问题", 4 | "网站列表中链接点击范围不正确的问题" 5 | ], 6 | "new": [ 7 | "静音功能", 8 | "网站图标配置", 9 | "键盘控制事件", 10 | "Swiper 相关配置", 11 | "音乐播放器的相关设置", 12 | "vue-aplayer.min.js 文件", 13 | "动态获取更新日志的数据方式", 14 | "当前音乐在音乐列表中置顶显示的效果" 15 | ], 16 | "delete": [ 17 | "Safari 浏览器中的默认点击样式" 18 | ], 19 | "update": [ 20 | "版权信息逻辑", 21 | "网站加载逻辑", 22 | "更新日志样式", 23 | "更新日志内容种类", 24 | "更新日志数据内容", 25 | "音乐控制面板样式", 26 | "音乐播放器切换音乐方法", 27 | "时光胶囊以及设置页面样式", 28 | "初始化音乐播放器的代码结构", 29 | "打开音乐播放器按钮的显示动画" 30 | ] 31 | } -------------------------------------------------------------------------------- /public/data/socialLinks.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Github", 4 | "icon": "/image/icon/github.png", 5 | "tip": "去 Github 看看 !", 6 | "url": "https://github.com/first19326" 7 | }, { 8 | "name": "BiliBili", 9 | "icon": "/image/icon/bilibili.png", 10 | "tip": "( ° - °)つロ 干杯 ~", 11 | "url": "https://space.bilibili.com/" 12 | }, { 13 | "name": "QQ", 14 | "icon": "/image/icon/qq.png", 15 | "tip": "有什么事吗 ?", 16 | "url": "https://res.abeim.cn/api/qq/?qq=1400134416" 17 | }, { 18 | "name": "Email", 19 | "icon": "/image/icon/email.png", 20 | "tip": "来封 Email ~", 21 | "url": "mailto:1400134416@qq.com" 22 | } 23 | ] -------------------------------------------------------------------------------- /src/views/Main/Left.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "home", 3 | "author": "WorstOne", 4 | "github": "https://github.com/first19326/Home", 5 | "private": true, 6 | "version": "1.0.0", 7 | "type": "module", 8 | "scripts": { 9 | "dev": "vite --host", 10 | "build": "vite build", 11 | "preview": "vite preview" 12 | }, 13 | "dependencies": { 14 | "@worstone/vue-aplayer": "^1.0.6", 15 | "aplayer": "^1.10.1", 16 | "axios": "^1.6.3", 17 | "element-plus": "^2.4.4", 18 | "fetch-jsonp": "^1.3.0", 19 | "pinia": "^2.1.7", 20 | "pinia-plugin-persistedstate": "^3.2.1", 21 | "swiper": "^9.4.1", 22 | "vue": "^3.4.3" 23 | }, 24 | "devDependencies": { 25 | "@icon-park/vue-next": "^1.4.2", 26 | "@vicons/fa": "^0.12.0", 27 | "@vicons/utils": "^0.1.4", 28 | "@vitejs/plugin-vue": "^4.6.2", 29 | "sass": "^1.69.6", 30 | "terser": "^5.26.0", 31 | "unplugin-auto-import": "^0.11.5", 32 | "unplugin-vue-components": "^0.22.12", 33 | "vite": "^4.5.1", 34 | "vite-plugin-compression": "^0.5.1", 35 | "vite-plugin-pwa": "^0.14.7" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 imsyy 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. -------------------------------------------------------------------------------- /src/views/Main/Right.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | %VITE_SITE_NAME% 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/views/Box/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 23 | 24 | -------------------------------------------------------------------------------- /public/data/websiteLists.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "icon": "Link", 4 | "title": "网站列表", 5 | "items": [ 6 | [ 7 | { 8 | "icon": "Blog", 9 | "name": "博客", 10 | "url": "https://notes.worstone.cn/" 11 | }, { 12 | "icon": "Code", 13 | "name": "力扣", 14 | "url": "https://leetcode.cn/" 15 | }, { 16 | "icon": "Search", 17 | "name": "搜索", 18 | "url": "https://kaifa.baidu.com/" 19 | }, { 20 | "icon": "CompactDisc", 21 | "name": "音乐", 22 | "url": "https://music.163.com/" 23 | }, { 24 | "icon": "Cloud", 25 | "name": "网盘", 26 | "url": "https://www.aliyundrive.com/" 27 | } 28 | ], [ 29 | { 30 | "icon": "Train", 31 | "name": "开往", 32 | "url": "https://www.foreverblog.cn/go.html" 33 | }, { 34 | "icon": "Book", 35 | "name": "背单词", 36 | "url": "https://kaiyiwing.gitee.io/qwerty-learner/" 37 | } 38 | ] 39 | ] 40 | }, { 41 | "icon": "Bars", 42 | "title": "功能列表", 43 | "items": [ 44 | [ 45 | { 46 | "icon": "PencilAlt", 47 | "name": "一言", 48 | "method": "hitokoto" 49 | }, { 50 | "icon": "SlidersH", 51 | "name": "播放器", 52 | "method": "player" 53 | }, { 54 | "icon": "Music", 55 | "name": "音乐列表", 56 | "method": "music" 57 | }, { 58 | "icon": "Cog", 59 | "name": "全局设置", 60 | "method": "setting" 61 | } 62 | ] 63 | ] 64 | } 65 | ] -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # 站点名称 2 | VITE_SITE_NAME = "WorstOne" 3 | VITE_SITE_AUTHOR = "WorstOne" 4 | VITE_SITE_KEYWORDS = "WorstOne, HomePage" 5 | VITE_SITE_DES = "WorstOne's Personal HomePage !" 6 | VITE_SITE_URL = "https://worstone.cn" 7 | VITE_SITE_LOGO = "/image/icon/logo.png" 8 | # 站点图标 9 | VITE_SITE_ICON = "/image/icon/favicon.ico" 10 | VITE_SITE_ICON_APPLE = "/image/icon/apple-touch-icon.png" 11 | # ICP 备案 12 | VITE_SITE_FILING = "辽ICP备2022009735号" 13 | # 公安备案 14 | VITE_SITE_POLICE = "" 15 | 16 | # 简介文本 17 | VITE_DESC_HELLO = "Hello World !" 18 | VITE_DESC_TEXT = "一个建立于 21 世纪的小站,存活于互联网的边缘。" 19 | VITE_DESC_HELLO_OTHER = "Oops !" 20 | VITE_DESC_TEXT_OTHER = "哎呀,这都被你发现了( 再次点击可关闭 )!" 21 | 22 | # 一言数据(默认) 23 | VITE_HITOKOTO_TEXT = "简单地活着,肆意而又精彩。" 24 | VITE_HITOKOTO_FROM = "WorstOne" 25 | 26 | # 歌曲 27 | ## 请在 public/data 目录下的 music.json 文件中配置 28 | ## 此处提供的服务可能会超量从而无法访问, 请自行部署 29 | ## 请参照 https://github.com/xizeyoupan/Meting-API 进行 API 服务部署 30 | ## 若使用 QQ音乐 歌单, 歌曲数量最好不要超出 50 首 31 | ## 备用: https://api.wuenci.com/meting/api/ 32 | ## 参数说明: 33 | ## api 歌曲 API 地址 34 | ## server 歌曲服务器 ( netease-网易云, tencent-QQ音乐 ) 35 | ## type 播放类型 ( song-歌曲, playlist-播放列表, album-专辑, search-搜索, artist-艺术家 ) 36 | ## id 播放目标 ( 歌曲ID 或 歌单ID 等 ) 37 | VITE_MUSIC_URL = "/data/music.json" 38 | 39 | # 社交链接 40 | ## 请在 public/data 目录下的 socialLinks.json 文件中配置 41 | VITE_SOCIAL_URL = "/data/socialLinks.json" 42 | 43 | # 网站列表 44 | ## 请在 public/data 目录下的 websiteLists.json 文件中配置 45 | VITE_LISTS_URL = "/data/websiteLists.json" 46 | 47 | # 背景图片 48 | ## 请在 public/data 目录下的 background.json 文件中配置 49 | ## 注: 请勿设置默认背景 url 属性, 请勿调整默认背景在配置文件中的位置 50 | VITE_BACKGROUND_URL = "/data/background.json" 51 | 52 | # 默哀模式 53 | ## 请在 public/data 目录下的 mourn.json 文件中配置 54 | ## 注: 不是默哀模式的开关, 而是手动开启默哀模式(非指定日期) 55 | VITE_MOURN_URL = "/data/mourn.json" 56 | 57 | # 更新日志 58 | ## 请在 public/data 目录下的 updateRecords.json 文件中配置 59 | VITE_RECORDS_URL ="/data/updateRecords.json" 60 | 61 | # 控制台内容 62 | ## 请在 public/data 目录下的 console.json 文件中配置 63 | VITE_CONSOLE_URL = "/data/console.json" 64 | 65 | # 天气 Key 66 | ## 请前往高德开放平台注册 Web 服务 Key(免费的) 67 | VITE_WEATHER_KEY = "8292d245d9b4945a8cf300ad15513d34" 68 | 69 | # 建站日期 70 | ## 请按照 YYYY-MM-DD 格式填写 71 | VITE_SITE_START = "2023-05-05" -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | // import axios from "axios"; 2 | import fetchJsonp from "fetch-jsonp"; 3 | 4 | /** 5 | * 音乐播放器 6 | */ 7 | 8 | // 获取音乐播放列表 9 | export const getPlayerList = async (api, server, type, id) => { 10 | const res = await fetch( 11 | `${api}?server=${server}&type=${type}&id=${id}` 12 | ); 13 | const data = await res.json(); 14 | 15 | if (data[0].url.startsWith("@")) { 16 | const [handle, jsonpCallback, jsonpCallbackFunction, url] = data[0].url.split("@").slice(1); 17 | const jsonpData = await fetchJsonp(url).then((res) => res.json()); 18 | const domain = ( 19 | jsonpData.req_0.data.sip.find((i) => !i.startsWith("http://ws")) || 20 | jsonpData.req_0.data.sip[0] 21 | ).replace("http://", "https://"); 22 | 23 | return data.map((v, i) => ({ 24 | name: v.name || v.title, 25 | artist: v.artist || v.author, 26 | url: domain + jsonpData.req_0.data.midurlinfo[i].purl, 27 | cover: v.cover || v.pic, 28 | lrc: v.lrc, 29 | })); 30 | } else { 31 | return data.map((v) => ({ 32 | name: v.name || v.title, 33 | artist: v.artist || v.author, 34 | url: v.url, 35 | cover: v.cover || v.pic, 36 | lrc: v.lrc, 37 | })); 38 | } 39 | }; 40 | 41 | /** 42 | * 一言 43 | */ 44 | 45 | // 获取一言数据 46 | export const getHitokoto = async () => { 47 | const res = await fetch("https://v1.hitokoto.cn"); 48 | return await res.json(); 49 | }; 50 | 51 | /** 52 | * 每日一句(金山词霸) 53 | */ 54 | 55 | // 获取每日一句 56 | export const getDailySentence = async (dateStr) => { 57 | const res = await fetchJsonp("https://sentence.iciba.com/index.php?c=dailysentence&m=getdetail&title=" + dateStr); 58 | return await res.json(); 59 | } 60 | 61 | /** 62 | * 天气 63 | */ 64 | 65 | // 获取高德地理位置信息 66 | export const getAdcode = async (key) => { 67 | const res = await fetch(`https://restapi.amap.com/v3/ip?key=${key}`); 68 | return await res.json(); 69 | }; 70 | 71 | // 获取高德地理天气信息 72 | export const getWeather = async (key, city) => { 73 | const res = await fetch(`https://restapi.amap.com/v3/weather/weatherInfo?key=${key}&city=${city}`); 74 | return await res.json(); 75 | }; 76 | 77 | /** 78 | * 获取配置 79 | */ 80 | 81 | // 加载数据(外部接口需要配置跨域) 82 | export const loadData = async (url) => { 83 | const res = await fetch(url); 84 | return await res.json(); 85 | }; -------------------------------------------------------------------------------- /src/utils/tools.js: -------------------------------------------------------------------------------- 1 | const colors = { 2 | 'gray': 'color: #1B2B34; font-size: 12px; line-height: 18px;', 3 | 'red': 'color: #EC5F67; font-size: 12px; line-height: 18px;', 4 | 'orange': 'color: #F99157; font-size: 12px; line-height: 18px;', 5 | 'yellow': 'color: #FAC863; font-size: 12px; line-height: 18px;', 6 | 'green': 'color: #99C794; font-size: 12px; line-height: 18px;', 7 | 'teal': 'color: #5FB3B3; font-size: 12px; line-height: 18px;', 8 | 'blue': 'color: #6699CC; font-size: 12px; line-height: 18px;', 9 | 'purple': 'color: #C594C5; font-size: 12px; line-height: 18px;', 10 | 'brown': 'color: #AB7967; font-size: 12px; line-height: 18px;' 11 | }; 12 | 13 | // 获取随机数 14 | export const randomNum = function(minNum, maxNum) { 15 | switch(arguments.length){ 16 | case 1: 17 | return parseInt(Math.random() * minNum + 1); 18 | break; 19 | case 2: 20 | return parseInt(Math.random() * (maxNum - minNum + 1) + minNum); 21 | break; 22 | default: 23 | return 0; 24 | break; 25 | } 26 | }; 27 | 28 | // 获取当前日期 年-月-日 29 | export const getNowFormatDate = function() { 30 | let date = new Date(); 31 | let seperator = '-'; 32 | let year = date.getFullYear(); 33 | let month = date.getMonth() + 1; 34 | let strDate = date.getDate(); 35 | if (month >= 1 && month <= 9) { 36 | month = '0' + month; 37 | } 38 | if (strDate >= 0 && strDate <= 9) { 39 | strDate = '0' + strDate; 40 | } 41 | return year + seperator + month + seperator + strDate; 42 | }; 43 | 44 | // 控制台输出内容 45 | export const consoleText = function(list, mode) { 46 | 47 | switch (mode) { 48 | case 'random': 49 | let colorArr = [colors.red, colors.orange, colors.yellow, colors.green, colors.teal, colors.blue, colors.purple, colors.brown]; 50 | list.forEach(function (item) { 51 | let str = (item).toString(); 52 | let index = randomNum(0, colorArr.length - 1); 53 | console.info('%c' + str, colorArr[index]); 54 | }); 55 | break; 56 | case 'banner': 57 | list.forEach(function (item) { 58 | let arr = item; 59 | console.info('\n' + ' %c ' + (arr[0]) + ' %c ' + (arr[1]) + ' ' + '\n', 'color: #FADFA3; background: #030307; padding: 5px 0;', 'background: #FADFA3; padding: 5px 0;'); 60 | }); 61 | break; 62 | default: 63 | console.info('%c' + list.join('\n'), colors.gray); 64 | break; 65 | } 66 | }; -------------------------------------------------------------------------------- /src/components/Weather/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | -------------------------------------------------------------------------------- /src/components/TimeCapsule/index.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 46 | 47 | 73 | -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from "pinia"; 2 | 3 | export const mainStore = defineStore("main", { 4 | state: () => { 5 | return { 6 | imageLoadState: false, // 背景图片加载状态 7 | innerWidth: null, // 当前窗口宽度 8 | coverType: "0", // 背景图片种类 9 | siteStartShow: true, // 建站日期显示 10 | musicIsOk: false, // 音乐是否加载完成 11 | musicIndex: 0, // 音乐切换状态 -1 上一首 0 当前 1 下一首 12 | musicVolume: 0, // 音乐音量; 13 | musicMuted: false, // 音乐静音状态 14 | musicOpenState: false, // 音乐面板开启状态 15 | musicListShow: false, // 音乐列表展开状态 16 | backgroundShow: false, // 背景图片展示状态 17 | boxOpenState: false, // 盒子开启状态 18 | mobileOpenState: false, // 移动端开启状态 19 | mobileFuncState: false, // 移动端功能区开启状态 20 | setOpenState: false, // 设置页面开启状态 21 | playerState: false, // 当前播放状态 22 | playerToggle: false, // 切换播放/暂停状态 23 | playerTitle: null, // 当前播放歌曲名 24 | playerArtist: null, // 当前播放歌手名 25 | playerLrc: "歌词加载中", // 当前播放歌词 26 | playerAutoplay: false, // 自动播放 27 | playerShowLrc: true, // 歌词显示状态 28 | playerOrder: "list", // 随机播放 29 | playerLoop: "all", // 循环播放模式 30 | footerBlur: false, // 底栏模糊 31 | sentenceState: true, // 每日一句开启状态 32 | } 33 | }, 34 | getters: { 35 | // 获取歌词 36 | getPlayerLrc(state) { 37 | return state.playerLrc; 38 | }, 39 | // 获取歌曲信息 40 | getPlayerData(state) { 41 | return { 42 | name: state.playerTitle, 43 | artist: state.playerArtist, 44 | } 45 | }, 46 | // 获取页面宽度 47 | getInnerWidth(state) { 48 | return state.innerWidth; 49 | } 50 | }, 51 | actions: { 52 | // 更改当前页面宽度 53 | setInnerWidth(value) { 54 | this.innerWidth = value; 55 | if (value > 720) { 56 | this.mobileOpenState = false; 57 | this.mobileFuncState = false; 58 | } 59 | }, 60 | // 更改播放状态 61 | setPlayerState(value) { 62 | if (value) { 63 | this.playerState = false; 64 | } else { 65 | this.playerState = true; 66 | } 67 | 68 | }, 69 | // 更改歌词 70 | setPlayerLrc(value) { 71 | this.playerLrc = value; 72 | }, 73 | // 更改歌曲数据 74 | setPlayerData(title, artist) { 75 | this.playerTitle = title; 76 | this.playerArtist = artist; 77 | }, 78 | // 更改壁纸加载状态 79 | setImageLoadState(value) { 80 | this.imageLoadState = value; 81 | } 82 | }, 83 | persist: { 84 | key: 'data', 85 | storage: window.localStorage, 86 | paths: ['coverType', 'musicVolume', 'siteStartShow', 'playerAutoplay', 'playerShowLrc', 'playerOrder', 'playerLoop', 'footerBlur', 'sentenceState'], 87 | }, 88 | }) -------------------------------------------------------------------------------- /src/utils/cursor.js: -------------------------------------------------------------------------------- 1 | var CURSOR; 2 | 3 | Math.lerp = (a, b, n) => (1 - n) * a + n * b; 4 | 5 | const getStyle = (el, attr) => { 6 | try { 7 | return window.getComputedStyle ? 8 | window.getComputedStyle(el)[attr] : 9 | el.currentStyle[attr]; 10 | } catch (e) {} 11 | return ""; 12 | }; 13 | 14 | class Cursor { 15 | constructor() { 16 | this.pos = { 17 | curr: null, 18 | prev: null 19 | }; 20 | this.pt = []; 21 | this.create(); 22 | this.init(); 23 | this.render(); 24 | } 25 | 26 | move(left, top) { 27 | this.cursor.style["left"] = `${left}px`; 28 | this.cursor.style["top"] = `${top}px`; 29 | } 30 | 31 | create() { 32 | if (!this.cursor) { 33 | this.cursor = document.createElement("div"); 34 | this.cursor.id = "cursor"; 35 | this.cursor.classList.add("xs-hidden"); 36 | this.cursor.classList.add("hidden"); 37 | document.body.append(this.cursor); 38 | } 39 | 40 | var el = document.getElementsByTagName('*'); 41 | for (let i = 0; i < el.length; i++) 42 | if (getStyle(el[i], "cursor") == "pointer") 43 | this.pt.push(el[i].outerHTML); 44 | 45 | document.body.appendChild((this.scr = document.createElement("style"))); 46 | this.scr.innerHTML = `* {cursor: url("data:image/svg+xml,") 4 4, auto !important}`; 47 | } 48 | 49 | refresh() { 50 | this.scr.remove(); 51 | this.cursor.classList.remove("active"); 52 | this.pos = { 53 | curr: null, 54 | prev: null 55 | }; 56 | this.pt = []; 57 | 58 | this.create(); 59 | this.init(); 60 | this.render(); 61 | } 62 | 63 | init() { 64 | document.onmousemove = e => { 65 | (this.pos.curr == null) && this.move(e.clientX - 8, e.clientY - 8); 66 | this.pos.curr = { 67 | x: e.clientX - 8, 68 | y: e.clientY - 8 69 | }; 70 | this.cursor.classList.remove("hidden"); 71 | }; 72 | document.onmouseenter = e => this.cursor.classList.remove("hidden"); 73 | document.onmouseleave = e => this.cursor.classList.add("hidden"); 74 | document.onmousedown = e => this.cursor.classList.add("active"); 75 | document.onmouseup = e => this.cursor.classList.remove("active"); 76 | } 77 | 78 | render() { 79 | if (this.pos.prev) { 80 | this.pos.prev.x = Math.lerp(this.pos.prev.x, this.pos.curr.x, 0.35); 81 | this.pos.prev.y = Math.lerp(this.pos.prev.y, this.pos.curr.y, 0.35); 82 | this.move(this.pos.prev.x, this.pos.prev.y); 83 | } else { 84 | this.pos.prev = this.pos.curr; 85 | } 86 | requestAnimationFrame(() => this.render()); 87 | } 88 | } 89 | 90 | const cursorInit = () => { 91 | CURSOR = new Cursor(); 92 | }; 93 | 94 | export default cursorInit; -------------------------------------------------------------------------------- /src/components/SocialLinks/index.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig, loadEnv } from 'vite'; 2 | import { resolve } from 'path'; 3 | import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' 4 | import { VitePWA } from 'vite-plugin-pwa'; 5 | import vue from '@vitejs/plugin-vue'; 6 | import AutoImport from 'unplugin-auto-import/vite' 7 | import Components from 'unplugin-vue-components/vite' 8 | import viteCompression from "vite-plugin-compression"; 9 | 10 | // https://vitejs.dev/config/ 11 | export default ({ mode }) => defineConfig({ 12 | plugins: [ 13 | vue(), 14 | AutoImport({ 15 | imports: ["vue"], 16 | resolvers: [ElementPlusResolver()] 17 | }), 18 | Components({ 19 | resolvers: [ElementPlusResolver()] 20 | }), 21 | VitePWA({ 22 | registerType: 'autoUpdate', 23 | workbox: { 24 | skipWaiting: true, 25 | clientsClaim: true, 26 | runtimeCaching: [{ 27 | urlPattern: /(.*?)\.(js|css|woff2|woff|ttf)/, // js / css 静态资源缓存 28 | handler: 'CacheFirst', 29 | options: { 30 | cacheName: 'js-css-cache' 31 | } 32 | }, { 33 | urlPattern: /(.*?)\.(png|jpe?g|svg|gif|bmp|psd|tiff|tga|eps)/, // 图片缓存 34 | handler: 'CacheFirst', 35 | options: { 36 | cacheName: 'image-cache' 37 | } 38 | }] 39 | }, 40 | manifest: { 41 | name: loadEnv(mode, process.cwd()).VITE_SITE_NAME, 42 | short_name: loadEnv(mode, process.cwd()).VITE_SITE_NAME, 43 | description: loadEnv(mode, process.cwd()).VITE_SITE_DES, 44 | display: "standalone", 45 | start_url: "/", 46 | theme_color: "#424242", 47 | background_color: "#424242", 48 | icons: [{ 49 | src: "/image/icon/48.png", 50 | sizes: "48x48", 51 | type: "image/png" 52 | }, { 53 | src: "/image/icon/72.png", 54 | sizes: "72x72", 55 | type: "image/png" 56 | }, { 57 | src: "/image/icon/96.png", 58 | sizes: "96x96", 59 | type: "image/png" 60 | }, { 61 | src: "/image/icon/128.png", 62 | sizes: "128x128", 63 | type: "image/png" 64 | }, { 65 | src: "/image/icon/144.png", 66 | sizes: "144x144", 67 | type: "image/png" 68 | }, { 69 | src: "/image/icon/192.png", 70 | sizes: "192x192", 71 | type: "image/png" 72 | }, { 73 | src: "/image/icon/256.png", 74 | sizes: "256x256", 75 | type: "image/png" 76 | }, { 77 | src: "/image/icon/512.png", 78 | sizes: "512x512", 79 | type: "image/png" 80 | }] 81 | } 82 | }), 83 | viteCompression() 84 | ], 85 | server: { 86 | port: "3000" 87 | }, 88 | resolve: { 89 | alias: [{ 90 | find: '@', 91 | replacement: resolve(__dirname, "src") 92 | }] 93 | }, 94 | css: { 95 | preprocessorOptions: { 96 | scss: { 97 | charset: false, 98 | additionalData: `@import "./src/style/global.scss";` 99 | } 100 | } 101 | }, 102 | build: { 103 | minify: 'terser', 104 | terserOptions: { 105 | compress: { 106 | // 生产环境时移除 console 107 | pure_funcs: ['console.log'] 108 | } 109 | } 110 | } 111 | }) -------------------------------------------------------------------------------- /src/components/Hitokoto/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 71 | 72 | -------------------------------------------------------------------------------- /src/components/Footer/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 44 | 45 | -------------------------------------------------------------------------------- /src/utils/getTime.js: -------------------------------------------------------------------------------- 1 | import { h } from "vue"; 2 | import { SpaCandle } from "@icon-park/vue-next"; 3 | 4 | // 时钟 5 | export const getCurrentTime = () => { 6 | let time = new Date(); 7 | let year = time.getFullYear(); 8 | let month = time.getMonth() + 1 < 10 ? "0" + (time.getMonth() + 1) : time.getMonth() + 1; 9 | let day = time.getDate() < 10 ? "0" + time.getDate() : time.getDate(); 10 | let hour = time.getHours() < 10 ? "0" + time.getHours() : time.getHours(); 11 | let minute = time.getMinutes() < 10 ? "0" + time.getMinutes() : time.getMinutes(); 12 | let second = time.getSeconds() < 10 ? "0" + time.getSeconds() : time.getSeconds(); 13 | let weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; 14 | let currentTime = {year, month, day, hour, minute, second, weekday: weekday[time.getDay()]}; 15 | return currentTime; 16 | }; 17 | 18 | // 时光胶囊 19 | export const getTimeCapsule = () => { 20 | // 日进度 21 | const todayStartDate = new Date(new Date().toLocaleDateString()).getTime(); 22 | const todayPassHours = (new Date() - todayStartDate) / 1000 / 60 / 60; 23 | const todayPassHoursPercent = (todayPassHours / 24) * 100; 24 | 25 | // 周进度 26 | const weeks = [7, 1, 2, 3, 4, 5, 6]; 27 | const weekDay = weeks[new Date().getDay()]; 28 | const weekDayPassPercent = (weekDay / 7) * 100; 29 | 30 | // 月进度 31 | const year = new Date().getFullYear(); 32 | const date = new Date().getDate(); 33 | const month = new Date().getMonth() + 1; 34 | const monthAll = new Date(year, month, 0).getDate(); 35 | const monthPassPercent = (date / monthAll) * 100; 36 | 37 | // 年进度 38 | const yearStartDate = new Date(year, 0, 1).getTime(); 39 | const yearEndDate = new Date(year + 1, 0, 1).getTime(); 40 | const yearPassHours = (new Date() - yearStartDate) / 1000 / 60 / 60; 41 | const yearTotalHours = (yearEndDate - yearStartDate) / 1000 / 60 / 60; 42 | const yearPassPercent = (yearPassHours / yearTotalHours) * 100; 43 | 44 | return { 45 | day: { 46 | elapsed: Math.floor(todayPassHours), 47 | pass: Math.floor(todayPassHoursPercent), 48 | }, 49 | week: { 50 | elapsed: weekDay, 51 | pass: Math.floor(weekDayPassPercent), 52 | }, 53 | month: { 54 | elapsed: date, 55 | pass: Math.floor(monthPassPercent), 56 | }, 57 | year: { 58 | elapsed: month - 1, 59 | pass: Math.floor(yearPassPercent), 60 | }, 61 | }; 62 | }; 63 | 64 | // 欢迎提示 65 | export const helloInit = () => { 66 | const hour = new Date().getHours(); 67 | let hello = null; 68 | if (hour < 3) { 69 | hello = "凌晨了"; 70 | } else if (hour < 7) { 71 | hello = "早上好"; 72 | } else if (hour < 11) { 73 | hello = "上午好"; 74 | } else if (hour < 13) { 75 | hello = "中午好"; 76 | } else if (hour < 16) { 77 | hello = "下午好"; 78 | } else if (hour < 21) { 79 | hello = "晚上好"; 80 | } else { 81 | hello = "夜深了"; 82 | } 83 | 84 | ElMessage({ 85 | dangerouslyUseHTMLString: true, 86 | message: `${hello} 欢迎来到我的主页`, 87 | }); 88 | }; 89 | 90 | // 默哀模式 91 | const anniversaries = { 92 | 4.4: "清明节", 93 | 5.12: "汶川大地震纪念日", 94 | 7.7: "中国人民抗日战争纪念日", 95 | 9.18: "九·一八事变纪念日", 96 | 12.13: "南京大屠杀死难者国家公祭日", 97 | }; 98 | 99 | export const checkDays = (mourn) => { 100 | const currentDate = new Date(); 101 | const month = currentDate.getMonth() + 1; 102 | const day = currentDate.getDate(); 103 | const key = `${month}.${day}`; 104 | let mournSwitch = mourn.mournSwitch; 105 | let mournText = mourn.mournText; 106 | if (mournSwitch || anniversaries.hasOwnProperty(key)) { 107 | if (!mournSwitch) mournText = `今天是${anniversaries[key]}`; 108 | console.log(mournText); 109 | const gray = document.createElement("style"); 110 | gray.innerHTML = "html{filter: grayscale(100%)}"; 111 | document.head.appendChild(gray); 112 | ElMessage({ 113 | message: mournText, 114 | duration: 14000, 115 | icon: h(SpaCandle, { theme: "filled", fill: "#EFEFEF" }), 116 | }); 117 | } 118 | }; 119 | 120 | // 建站日期统计 121 | export const siteDateStatistics = (startDate) => { 122 | const currentDate = new Date(); 123 | const differenceInTime = currentDate.getTime() - startDate.getTime(); 124 | const differenceInDays = differenceInTime / (1000 * 3600 * 24); 125 | const differenceInMonths = differenceInDays / 30; 126 | const differenceInYears = differenceInMonths / 12; 127 | if (differenceInYears >= 1) { 128 | return `本站已经运行了 ${Math.floor(differenceInYears)} 年 ${Math.floor(differenceInMonths % 12)} 月 ${Math.round(differenceInDays % 30)} 天`; 129 | } else if (differenceInMonths >= 1) { 130 | return `本站已经运行了 ${Math.floor(differenceInMonths)} 月 ${Math.round(differenceInDays % 30)} 天`; 131 | } else { 132 | return `本站已经运行了 ${Math.round(differenceInDays)} 天`; 133 | } 134 | }; -------------------------------------------------------------------------------- /src/components/Loading/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /src/style/style.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /* 全局样式 */ 4 | html, body { 5 | width: 100%; 6 | height: 100%; 7 | margin: 0; 8 | padding: 0; 9 | background-color: #333; 10 | font-family: 'HarmonyOS_Regular', sans-serif; 11 | overflow: hidden; 12 | } 13 | 14 | * { 15 | /* Prevent any object from being highlighted upon touch event */ 16 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 17 | } 18 | 19 | *, a, p { 20 | margin: 0; 21 | padding: 0; 22 | user-select: none; 23 | text-decoration: none; 24 | color: #FFF; 25 | box-sizing: border-box; 26 | 27 | &:hover { 28 | transition: 0.3s; 29 | } 30 | } 31 | 32 | // 基础样式 33 | #app { 34 | position: fixed; 35 | top: 0; 36 | left: 0; 37 | width: 100vw; 38 | height: 100vh; 39 | z-index: 0; 40 | overflow: auto; 41 | } 42 | 43 | // 卡片样式 44 | .cards { 45 | background: #00000040; 46 | border-radius: 6px; 47 | backdrop-filter: blur(10px); 48 | transform: scale(1); 49 | transition: 50 | backdrop-filter 0.3s, 51 | transform 0.3s; 52 | &:hover { 53 | transform: scale(1.01); 54 | } 55 | 56 | &:active { 57 | transform: scale(0.98); 58 | } 59 | } 60 | 61 | // 文字超出 62 | .text-hidden { 63 | overflow: hidden; 64 | white-space: nowrap; 65 | text-overflow: ellipsis; 66 | } 67 | 68 | // 弹窗样式 69 | .el-message { 70 | width: auto !important; 71 | --el-message-bg-color: #00000040 !important; 72 | --el-message-text-color: #EFEFEF !important; 73 | backdrop-filter: blur(10px); 74 | border-color: transparent !important; 75 | border-radius: 25px !important; 76 | 77 | .el-message__badge { 78 | display: none; 79 | } 80 | 81 | .el-message__content { 82 | width: max-content; 83 | } 84 | } 85 | 86 | // 进度条样式 87 | .el-progress-bar { 88 | .el-progress-bar__outer { 89 | background-color: #00000020; 90 | border-radius: 6px; 91 | 92 | .el-progress-bar__inner { 93 | background-color: #EFEFEF; 94 | border-radius: 6px; 95 | text-align: center; 96 | font-family: 'UnidreamLED'; 97 | 98 | span { 99 | color: #564D59; 100 | font-size: .9rem; 101 | } 102 | } 103 | } 104 | } 105 | 106 | // Tooltip 样式 107 | .el-popper.is-dark { 108 | background: #FFFFFF60 !important; 109 | border: 1px solid transparent !important; 110 | } 111 | 112 | // 卡片样式 113 | .el-card { 114 | background-color: transparent !important; 115 | border: 1px solid transparent !important; 116 | border-radius: 8px !important; 117 | 118 | .el-card__header { 119 | padding: 16px 20px !important; 120 | background-color: #FFFFFF30 !important; 121 | border-bottom: 1px solid transparent !important; 122 | font-weight: bold; 123 | } 124 | 125 | .el-card__body { 126 | padding: 0 !important; 127 | background-color: #FFFFFF10 !important; 128 | } 129 | } 130 | 131 | // 动画效果 132 | .fade-enter-active, .fade-leave-active { 133 | transition: opacity 0.3s ease-in-out; 134 | } 135 | 136 | .fade-enter-from, .fade-leave-to { 137 | opacity: 0; 138 | } 139 | 140 | @keyframes fade { 141 | from { 142 | opacity: 0; 143 | } 144 | to { 145 | opacity: 1; 146 | } 147 | } 148 | 149 | @keyframes rotate { 150 | from { 151 | transform: rotate(0deg); 152 | } 153 | to { 154 | transform: rotate(360deg); 155 | } 156 | } 157 | 158 | @keyframes fade-blur-in { 159 | from { 160 | filter: blur(20px) brightness(0.3); 161 | transform: scale(1.4); 162 | } 163 | to { 164 | filter: blur(0) brightness(1); 165 | transform: scale(1); 166 | } 167 | } 168 | 169 | @keyframes fade-blur-main-in { 170 | from { 171 | transform: scale(1.2); 172 | } 173 | to { 174 | transform: scale(1); 175 | } 176 | } 177 | 178 | // 隐藏元素 179 | @media (min-width: 910px) and (max-width: 1200px) { 180 | .sm-hidden { 181 | display: none; 182 | } 183 | } 184 | 185 | // 自定义鼠标 186 | #cursor { 187 | opacity: 0.25; 188 | position: fixed; 189 | width: 18px; 190 | height: 18px; 191 | background: #FFF; 192 | border-radius: 25px; 193 | z-index: 10086; 194 | pointer-events: none; 195 | transition: 0.2s ease-in-out; 196 | transition-property: background, opacity, transform; 197 | 198 | &.hidden { 199 | opacity: 0; 200 | } 201 | 202 | &.active { 203 | opacity: 0.5; 204 | transform: scale(0.5); 205 | } 206 | } 207 | 208 | // 滚动条样式 209 | ::-webkit-scrollbar, scrollbar { 210 | display: none; 211 | } 212 | 213 | /* 214 | ::-webkit-scrollbar, scrollbar { 215 | width: 6px; 216 | height: 6px; 217 | background-color: transparent; 218 | } 219 | 220 | ::-webkit-scrollbar-thumb, scrollbar-thumb { 221 | border-radius: 10px; 222 | background-color: #EEEEEE; 223 | } 224 | */ 225 | 226 | // Swiper 样式 227 | .swiper { 228 | .swiper-wrapper { 229 | z-index: 0 !important; 230 | } 231 | } -------------------------------------------------------------------------------- /src/components/Background/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 106 | 107 | -------------------------------------------------------------------------------- /src/components/Player/index.vue: -------------------------------------------------------------------------------- 1 | 32 | 85 | -------------------------------------------------------------------------------- /src/components/Message/index.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 124 | 125 | -------------------------------------------------------------------------------- /src/views/Func/index.vue: -------------------------------------------------------------------------------- 1 | 39 | 40 | 76 | 77 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 31 | 32 | 161 | 162 | -------------------------------------------------------------------------------- /src/components/Set/index.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 104 | 105 | -------------------------------------------------------------------------------- /src/components/Lists/index.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 133 | 134 | -------------------------------------------------------------------------------- /src/views/MoreSet/index.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 101 | 102 | -------------------------------------------------------------------------------- /src/views/Music/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 197 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## WorstOne 2 | 3 | 基于 [**IMSYY**](https://github.com/imsyy) 的个人主页 `HOME` 修改而来。 4 | 5 | 6 | ![LiveForCode](./public/image/screenshots.png) 7 | 8 | 9 | ### Demo 10 | 11 | >由于 CDN 缓存原因,查看最新效果可能需要 Ctrl + F5 强制刷新浏览器缓存 12 | 13 | - [WorstOne](https://www.worstone.cn) 14 | 15 | ### 功能 16 | 17 | - [x] 载入动画 18 | - [x] 站点简介 19 | - [x] Hitokoto 一言 20 | - [x] 日期及时间 21 | - [x] 实时天气 22 | - [x] 时光进度条 23 | - [x] 音乐播放器 24 | - [x] 移动端适配 25 | 26 | **新增** 27 | 28 | - [x] DailySentence 每日一句 29 | - [x] 数据动态配置 30 | - [x] 触摸滑动切换 31 | - [x] 手动默哀模式 32 | - [x] 适配各种屏幕尺寸 33 | 34 | ### 部署 35 | 36 | * **安装** [node.js](https://nodejs.org/zh-cn/) **环境** 37 | 38 | > node > 16.16.0 39 | > npm > 8.15.0 40 | 41 | * 然后以 **管理员权限** 运行 `cmd` 终端,并 `cd` 到 项目根目录 42 | * 在 `终端` 中输入: 43 | 44 | ```bash 45 | # 安装 pnpm 46 | npm install -g pnpm 47 | 48 | # 安装依赖 49 | pnpm install 50 | 51 | # 预览 52 | pnpm dev 53 | 54 | # 构建 55 | pnpm build 56 | ``` 57 | > 构建完成后,静态资源会在 **`dist` 目录** 中生成,可将 **`dist` 文件夹下的文件**上传至服务器,也可使用 `Vercel` 等托管平台一键导入并自动部署 58 | 59 | ### 配置项 60 | 61 |
62 |

数据

63 | 64 | > 本项目数据相关配置,可使用接口获取相关数据 65 | > * 如果 **配置接口** 获取相关数据,需要接口配置 **跨域** 相关内容 66 | 67 | 请在 `.env` 环境变量中进行相关配置 68 | 69 | ``` 70 | # 歌曲 71 | ## 请在 public/data 目录下的 music.json 文件中配置 72 | ## 此处提供的服务可能会超量从而无法访问, 请自行部署 73 | ## 请参照 https://github.com/xizeyoupan/Meting-API 进行 API 服务部署 74 | ## 若使用 QQ音乐 歌单, 歌曲数量最好不要超出 50 首 75 | ## 备用: https://api.wuenci.com/meting/api/ 76 | ## 参数说明: 77 | ## api 歌曲 API 地址 78 | ## server 歌曲服务器 ( netease-网易云, tencent-QQ音乐 ) 79 | ## type 播放类型 ( song-歌曲, playlist-播放列表, album-专辑, search-搜索, artist-艺术家 ) 80 | ## id 播放目标 ( 歌曲ID 或 歌单ID 等 ) 81 | VITE_MUSIC_URL = "/data/music.json" 82 | 83 | # 社交链接 84 | ## 请在 public/data 目录下的 socialLinks.json 文件中配置 85 | VITE_SOCIAL_URL = "/data/socialLinks.json" 86 | 87 | # 网站列表 88 | ## 请在 public/data 目录下的 websiteLists.json 文件中配置 89 | VITE_LISTS_URL = "/data/websiteLists.json" 90 | 91 | # 背景图片 92 | ## 请在 public/data 目录下的 background.json 文件中配置 93 | ## 注: 请勿设置默认背景 url 属性, 请勿调整默认背景在配置文件中的位置 94 | VITE_BACKGROUND_URL = "/data/background.json" 95 | 96 | # 默哀模式 97 | ## 请在 public/data 目录下的 mourn.json 文件中配置 98 | ## 注: 不是默哀模式的开关, 而是手动开启默哀模式(非指定日期) 99 | VITE_MOURN_URL = "/data/mourn.json" 100 | 101 | # 更新日志 102 | ## 请在 public/data 目录下的 updateRecords.json 文件中配置 103 | VITE_RECORDS_URL ="/data/updateRecords.json" 104 | 105 | # 控制台内容 106 | ## 请在 public/data 目录下的 console.json 文件中配置 107 | VITE_CONSOLE_URL = "/data/console.json" 108 | ``` 109 | 110 |
111 | 112 |
113 |

天气

114 | 115 | > * 请将 ``VITE_WEATHER_KEY`` 替换为个人的 `Key` 116 | 117 | 天气及地区获取需要 `高德开放平台` 相关 API 118 | 119 | - 前往 [高德开放平台控制台](https://console.amap.com/dev/index) 创建一个 `Web 服务` 类型的 `Key`,并将 `Key` 填入 `.env` 中的 `VITE_WEATHER_KEY` 中 120 | 121 | 也可自行更换其他方式 122 | 123 | > 项目中使用的是 `高德开放平台` 中的 `Web API`,定位精度不高。如果想要**更高的定位精度**,则可以自行(需要修改代码)更换为 `JS API` 124 | 125 |
126 | 127 |
128 |

音乐

129 | 130 | >本项目采用了基于 `MetingJS` 的 `Aplayer` 音乐播放器,可实现快速自定义歌单 131 | >* 仅支持 **中国大陆地区** 132 | 133 | 请在 `public/data/` 目录下的 `music.json` 文件中更改歌曲相关参数即可实现自定义歌单列表 134 | 135 | ```json 136 | { 137 | "api": "https://api.i-meto.com/meting/api/", 138 | "server": "netease", 139 | "type": "playlist", 140 | "id": "2243342814" 141 | } 142 | ``` 143 | > * **音乐播放器** 相关配置可以在网站 **全局设置** 页面进行修改 144 | 145 |
146 | 147 |
148 |

每日一句

149 | 150 | > **每日一句** 数据来源自 **金山词霸**,开启 **每日一句**会替换 **站点简介** 151 | > * **每日一句** 相关配置可以在网站 **全局设置** 页面进行修改 152 | 153 |
154 | 155 |
156 |

社交链接

157 | 158 | 请在 `public/data/` 目录下的 `socialLinks.json` 文件中配置 159 | 160 | ```json 161 | [ 162 | { 163 | "name": "Github", 164 | "icon": "/image/icon/github.png", 165 | "tip": "去 Github 看看 !", 166 | "url": "https://github.com/first19326" 167 | }, { 168 | "name": "BiliBili", 169 | "icon": "/image/icon/bilibili.png", 170 | "tip": "( ° - °)つロ 干杯 ~", 171 | "url": "https://space.bilibili.com/" 172 | }, { 173 | "name": "QQ", 174 | "icon": "/image/icon/qq.png", 175 | "tip": "有什么事吗 ?", 176 | "url": "https://res.abeim.cn/api/qq/?qq=1400134416" 177 | }, { 178 | "name": "Email", 179 | "icon": "/image/icon/email.png", 180 | "tip": "来封 Email ~", 181 | "url": "mailto:1400134416@qq.com" 182 | } 183 | ] 184 | ``` 185 | 186 | > * 请勿配置过多,否则需要自行适配样式(最多可以配置 **7** 个社交链接) 187 |
188 | 189 |
190 |

一言数据

191 | 192 | > **Hikotoko 一言** 相关数据通过对应接口获得,此处配置为接口失效显示的 **默认数据** 193 | 194 | 请在 `.env` 环境变量中进行相关配置 195 | 196 | ``` 197 | # 一言数据(默认) 198 | VITE_HITOKOTO_TEXT = "简单地活着,肆意而又精彩。" 199 | VITE_HITOKOTO_FROM = "WorstOne" 200 | ``` 201 | 202 |
203 | 204 |
205 |

网站列表

206 | 207 | 请在 `public/data/` 目录下的 `websiteLists.json` 文件中配置 208 | 209 | ```json 210 | [ 211 | { 212 | "icon": "Link", 213 | "title": "网站列表", 214 | "items": [ 215 | [ 216 | { 217 | "icon": "Blog", 218 | "name": "博客", 219 | "url": "https://notes.worstone.cn/" 220 | }, { 221 | "icon": "Code", 222 | "name": "力扣", 223 | "url": "https://leetcode.cn/" 224 | }, { 225 | "icon": "Search", 226 | "name": "搜索", 227 | "url": "https://kaifa.baidu.com/" 228 | }, { 229 | "icon": "CompactDisc", 230 | "name": "音乐", 231 | "url": "https://music.163.com/" 232 | }, { 233 | "icon": "Cloud", 234 | "name": "网盘", 235 | "url": "https://www.aliyundrive.com/" 236 | } 237 | ], [ 238 | { 239 | "icon": "Train", 240 | "name": "开往", 241 | "url": "https://www.foreverblog.cn/go.html" 242 | }, { 243 | "icon": "Book", 244 | "name": "背单词", 245 | "url": "https://kaiyiwing.gitee.io/qwerty-learner/" 246 | } 247 | ] 248 | ] 249 | }, { 250 | "icon": "Bars", 251 | "title": "功能列表", 252 | "items": [ 253 | [ 254 | { 255 | "icon": "PencilAlt", 256 | "name": "一言", 257 | "method": "hitokoto" 258 | }, { 259 | "icon": "SlidersH", 260 | "name": "播放器", 261 | "method": "player" 262 | }, { 263 | "icon": "Music", 264 | "name": "音乐列表", 265 | "method": "music" 266 | }, { 267 | "icon": "Cog", 268 | "name": "全局设置", 269 | "method": "setting" 270 | } 271 | ] 272 | ] 273 | } 274 | ] 275 | ``` 276 | 277 | > **网站列表** 支持列表切换,可分别配置 **网站列表**、**功能列表** 以及 **友情链接** 等。每个列表已引入触摸滑动插件 `Swiper`,支持分页操作,每页项目不可超过 **6** 个(**超出部分不显示**) 278 | 279 | 修改网站链接图标,需要修改 `src/components/Lists/index.vue` 280 | 281 | - 引入图标组件 282 | - 在 `collection` 中对图标组件进行映射 283 | 284 | ```vue 285 | 299 | ``` 300 | 301 | > 若**图标组件不存在**或通过图标名称**找不到对应组件**,则会默认使用 `Link` 图标 302 | 303 | 修改关联方法,需要修改 `src/components/Lists/index.vue` 304 | 305 | - 创建相关方法 306 | - 在 `methods` 中对方法进行映射 307 | 308 | ```vue 309 | 334 | ``` 335 |
336 | 337 |
338 |

背景图片

339 | 340 | 请在 `public/data/` 目录下的 `background.json` 文件中配置 341 | 342 | > 若 `url` 参数为空,则会 **随机** 从 `images` 里面选取图片 343 | > * 请勿设置 **默认背景** `url` 属性,请勿调整 **默认背景** 在配置文件中的位置 344 | 345 | ```json 346 | [ 347 | { 348 | "name": "默认背景", 349 | "url": "", 350 | "images": [ 351 | "/image/background/home.jpg", "/image/background/home.jpeg", 352 | "/image/background/back.jpg", "/image/background/back.jpeg" 353 | ] 354 | }, { 355 | "name": "每日一图", 356 | "url": "https://api.dujin.org/bing/1920.php", 357 | "images": [] 358 | }, { 359 | "name": "随机风景", 360 | "url": "https://api.btstu.cn/sjbz/api.php?lx=fengjing&format=images", 361 | "images": [] 362 | } 363 | ] 364 | ``` 365 | 366 | > * 部分浏览器不支持 `webp` 格式的图片,为了保证网站效果尽量不要使用该格式图片 367 | 368 |
369 | 370 |
371 |

默哀模式

372 | 373 | > * 这个配置不是默哀模式的开关,而是手动开启默哀模式(非指定日期) 374 | 375 | 请在 `public/data/` 目录下的 `mourn.json` 文件中配置 376 | 377 | ```json 378 | { 379 | "mournSwitch": false, 380 | "mournText": "" 381 | } 382 | ``` 383 |
384 | 385 |
386 |

更新日志

387 | 388 | 请在 `public/data/` 目录下的 `updateRecords.json` 文件中配置 389 | 390 | ```json 391 | { 392 | "fix": [ 393 | "音乐播放器存在的问题", 394 | "网站列表中链接点击范围不正确的问题" 395 | ], 396 | "new": [ 397 | "静音功能", 398 | "网站图标配置", 399 | "键盘控制事件", 400 | "Swiper 相关配置", 401 | "音乐播放器的相关设置", 402 | "vue-aplayer.min.js 文件", 403 | "动态获取更新日志的数据方式", 404 | "当前音乐在音乐列表中置顶显示的效果" 405 | ], 406 | "delete": [ 407 | "Safari 浏览器中的默认点击样式" 408 | ], 409 | "update": [ 410 | "版权信息逻辑", 411 | "网站加载逻辑", 412 | "更新日志样式", 413 | "更新日志内容种类", 414 | "更新日志数据内容", 415 | "音乐控制面板样式", 416 | "音乐播放器切换音乐方法", 417 | "时光胶囊以及设置页面样式", 418 | "初始化音乐播放器的代码结构", 419 | "打开音乐播放器按钮的显示动画" 420 | ] 421 | } 422 | ``` 423 |
424 | 425 |
426 |

控制台输出

427 | 428 | 请在 `public/data/` 目录下的 `console.json` 文件中配置 429 | 430 | 控制台输出有 **3** 种模式:`random`,`banner` 以及默认 431 | 432 | - `random`:随机颜色在控制台输出,输出内容直接配置在数组中即可 433 | - `banner`:类似 `badge` 标识在控制台输出,输出内容必须以**长度为 2 的数组形式**配置在数组中(参见 `console.json` 配置信息) 434 | - 默认:固定颜色在控制台输出 435 | 436 | ```json 437 | [ 438 | ["WorstOne's website LiveForCode", "简单地活着, 肆意而又精彩!"], 439 | ["Based on IMSYY's website Home.", "Author IMSYY"] 440 | ] 441 | ``` 442 |
443 | 444 | ### Q & A 445 | 446 | 1. 加载速度的问题 447 | 448 | 在本地通过 `pnpm dev` 运行网站的时候,第一次加载会很慢,这是由于 **Vite** 项目的特性,并且本地运行的时候网络协议为 **HTTP/1.1**。如果想要改善网站加载速度慢的问题,可以考虑使用 **CDN** 对站点进行加速,可以参考 [静态网站部署](https://notes.worstone.cn/article/479644713/)。 449 | 450 | 2. 音乐自动播放的问题 451 | 452 | 由于浏览器权限的问题,音乐自动播放会失效,需要在浏览器中添加相关设置解决(以 Edge 浏览器为例)。 453 | 454 | > **设置** -> **Cookie 和网站权限** -> **媒体自动播放**,然后 **添加网站地址** 即可。 455 | 456 | ### 技术栈 457 | 458 | * [Vue](https://cn.vuejs.org/) 459 | * [Vite](https://vitejs.cn/vite3-cn/) 460 | * [Pinia](https://pinia.vuejs.org/zh/) 461 | * [xicons](https://xicons.org/) 462 | * [Swiper](https://www.swiper.com.cn/) 463 | * [Aplayer](https://aplayer.js.org/) 464 | * [IconPark](https://iconpark.oceanengine.com/official) 465 | 466 | ### API 467 | 468 | * [Meting API](https://api.i-meto.com/meting/api/) 469 | * [每日一句 API](https://m.iciba.com/daily/) 470 | * [高德开放平台](https://lbs.amap.com/) 471 | * [Hitokoto 一言](https://hitokoto.cn/) 472 | 473 | ### 更新日志 474 | 475 | - 2024-01-04 476 | 477 | `A` 添加了部分样式,适配各种屏幕尺寸设备 478 | 479 | - 2024-01-02 480 | 481 | `F` 修复了 `音乐播放器` 加载失败,但键盘控制事件仍旧生效的问题 482 | 483 | `F` 修复了 `音乐播放器` 音量未能正确设置的问题 484 | 485 |
486 | 487 | `U` 修改了 **APlayer** 插件加载逻辑,并优化了代码结构 488 | 489 | 490 | 491 | - 2024-01-01 492 | 493 | `U` 修改了 **APlayer** 插件,使用 `@worstone/vue-aplayer` 替换 `vue3-aplayer`,并进行适配 494 | 495 | 496 | 497 | - 2023-11-14 498 | 499 | `U` 修改了音乐播放器歌词样式 500 | 501 | 502 | 503 | - 2023-11-11 504 | 505 | `F` 修复了音乐播放器静音的问题 506 | 507 |
508 | 509 | `A` 新增了 `font-display` 属性 510 | 511 | `U` 修改了音乐播放器静音问题的解决方式 512 | 513 | 514 | 515 | - 2023-11-10 516 | 517 | `U` 修改了音乐播放器提示文本,并调整了代码结构 518 | 519 | `U` 修改了 logo 区域样式 520 | 521 | 522 | 523 | - 2023-11-05 524 | 525 | `F` 修复了 Safari 浏览器由于动画重复,在关闭 `音乐列表` 时 **屏幕闪烁** 的问题 526 | 527 | `F` 修复了移动端模式下,在 `背景图片展示` 状态,移动端 `菜单按钮` 仍旧显示的问题 528 | 529 | `F` 修复了 720px 宽度时,移动端 `菜单按钮` 不显示的问题 530 | 531 | `F` 修复了 `背景图片展示` 状态,`下载图片` 按钮无法点击的问题 532 | 533 | `F` 修复了 Safari 浏览器 `消息提示` 内容超出容器的问题 534 | 535 | `F` 修复了由 PC 端模式 调整到 移动端模式 后,音乐列表关闭的问题 536 | 537 |
538 | 539 | `A` 新增了 `加载动画` 组件 540 | 541 | `A` 新增了字体文件 542 | 543 | `A` 新增了部分 `全局变量` 544 | 545 | `A` 新增了部分 `环境变量` 546 | 547 | `A` 新增了自动导入 Vue 相关组件的配置 548 | 549 | `A` 新增了音乐加载失败的方法 550 | 551 | `A` 新增了 `网站列表` 切换功能 552 | 553 | `D` 删除了无用的样式文件 554 | 555 | `U` 修改了网站结构以及样式 556 | 557 | `U` 修改了字体样式文件 558 | 559 | `U` 修改了模块数据结构 560 | 561 | `U` 修改了 `环境变量` 引入方式 562 | 563 | `U` 修改了部分插件版本 564 | 565 | `U` 修改了部分代码,统一编码结构 566 | 567 | `U` 修改了 `背景图片` 加载逻辑 568 | 569 | 570 | 571 | - 2023-07-06 572 | 573 | `A` 新增了关于 `更新日志` 的注释 574 | 575 | `U` 修改了 `更新日志` 内容种类 576 | 577 | `U` 修改了 `更新日志` 数据内容 578 | 579 | 580 | 581 | - 2023-07-03 582 | 583 | `F` 修复了 `网站列表` 中链接点击范围不正确的问题 584 | 585 | `F` 修复了音乐播放器存在的问题,修复方式参见 **Q & A** 586 | 587 |
588 | 589 | `A` 新增了网站图标配置 590 | 591 | `A` 新增了 **vue-aplayer.min.js** 文件 592 | 593 | `A` 新增了音乐播放器的相关设置 594 | 595 | `A` 新增了当前音乐在音乐列表中置顶显示的效果 596 | 597 | `A` 新增了动态获取 `更新日志` 的数据方式 598 | 599 | `A` 新增了静音功能,可以通过点击 `音量图标` 开启 600 | 601 | `A` 新增了 `Swiper` 相关配置,以适配移动端操作 602 | 603 | `A` 新增了键盘控制事件,可以通过 Ctrl + / 切换音乐 604 | 605 | `A` 新增了相关样式,去除了 Safari 浏览器中的默认点击样式 606 | 607 | `U` 修改了音乐控制面板样式 608 | 609 | `U` 修改了初始化音乐播放器的代码结构 610 | 611 | `U` 修改了音乐播放器切换音乐方法 612 | 613 | `U` 修改了版权信息逻辑 614 | 615 | `U` 修改了 `打开音乐播放器` 按钮的显示动画 616 | 617 | `U` 修改了 `更新日志` 的样式,去掉标题粗体 618 | 619 | `U` 修改了 `时光胶囊` 以及 `设置` 页面样式,以适配更大屏幕设备 620 | 621 | `U` 修改了网站加载逻辑,调整了 `欢迎提示` 以及 `默哀模式` 执行时间点 622 | 623 | 624 | 625 | - 2023-05-12 626 | 627 | `F` 修复了 Safari 浏览器默认背景图片无法显示的问题 628 | 629 | `F` 修复了 Safari 浏览器 `backdrop-filter` 属性不生效的问题 630 | 631 | `F` 修复了默认背景图片无法下载的问题 632 | 633 | `F` 修复了 `网站列表` 中链接点击范围不准确的问题 634 | 635 | `F` 修复了 `720px - 910px` 屏幕尺寸无法打开音乐播放器的问题 636 | 637 |
638 | 639 | `A` 新增了 `DailySentence` 每日一句 640 | 641 | `A` 新增了触摸滑动切换 642 | 643 | `A` 新增了多种工具方法 644 | 645 | `U` 修改了移动端逻辑,引入触摸滑动插件 `Swiper` 646 | 647 | `U` 修改了网站名称字体,并适配各种屏幕尺寸 648 | 649 | `U` 修改了网站样式,添加最小的宽度以及高度,保证显示效果 650 | 651 | 652 | 653 | - 2023-05-28 654 | 655 | `F` 修复了 Safari 浏览器歌词过长导致样式显示不正确的问题 656 | 657 | `F` 修复了 手机端 Safari 浏览器 `时间卡片` 以及 `一言卡片` 的 `Pagination` 不显示的问题 658 | 659 |
660 | 661 | `A` 新增了 `256 x 256` 尺寸的图标 662 | 663 | `A` 新增了 `公安备案` 的配置选项以及相关样式 664 | 665 | `U` 修改了 `时间卡片` 以及 `一言卡片` 的位置 666 | 667 | `U` 修改了 `网站列表` 渲染逻辑 668 | 669 | `U` 修改了 `apple-touch-icon` 图标 670 | 671 | `U` 修改了页面底部样式 672 | 673 | `U` 修改了 **腾讯云** `Serverless` 配置选项,解决了推送修改 `ACL 权限` 的问题 674 | 675 | -------------------------------------------------------------------------------- /public/css/font/HarmonyOS_Regular.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'HarmonyOS_Regular'; 3 | font-style: normal; 4 | font-weight: 400; 5 | font-display: swap; 6 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a.woff2') format('woff2'); 7 | unicode-range: U+9aa2-ffe5; 8 | } 9 | @font-face { 10 | font-family: 'HarmonyOS_Regular'; 11 | font-style: normal; 12 | font-weight: 400; 13 | font-display: swap; 14 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.b.woff2') format('woff2'); 15 | unicode-range: U+8983-9aa0; 16 | } 17 | @font-face { 18 | font-family: 'HarmonyOS_Regular'; 19 | font-style: normal; 20 | font-weight: 400; 21 | font-display: swap; 22 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.c.woff2') format('woff2'); 23 | unicode-range: U+78f2-897b; 24 | } 25 | @font-face { 26 | font-family: 'HarmonyOS_Regular'; 27 | font-style: normal; 28 | font-weight: 400; 29 | font-display: swap; 30 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.d.woff2') format('woff2'); 31 | unicode-range: U+646d-78d9; 32 | } 33 | @font-face { 34 | font-family: 'HarmonyOS_Regular'; 35 | font-style: normal; 36 | font-weight: 400; 37 | font-display: swap; 38 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.e.woff2') format('woff2'); 39 | unicode-range: U+30e0-6445; 40 | } 41 | @font-face { 42 | font-family: 'HarmonyOS_Regular'; 43 | font-style: normal; 44 | font-weight: 400; 45 | font-display: swap; 46 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.f.woff2') format('woff2'); 47 | unicode-range: U+101-30df; 48 | } 49 | @font-face { 50 | font-family: 'HarmonyOS_Regular'; 51 | font-style: normal; 52 | font-weight: 400; 53 | font-display: swap; 54 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.g.woff2') format('woff2'); 55 | unicode-range: U+9aa8,U+9ab8,U+9ad3,U+9ad8,U+9b03,U+9b3c,U+9b41-9b42,U+9b44,U+9b4f,U+9b54,U+9c7c,U+9c81,U+9c8d,U+9c9c,U+9ca4,U+9cb8,U+9cc3,U+9cd6,U+9cde,U+9e1f,U+9e21,U+9e23,U+9e25-9e26,U+9e2d,U+9e2f,U+9e33,U+9e35,U+9e3d,U+9e3f,U+9e43,U+9e45,U+9e4a,U+9e4f,U+9e64,U+9e70,U+9e7f,U+9e93,U+9ea6,U+9ebb,U+9ec4,U+9ecd-9ece,U+9ed1,U+9ed4,U+9ed8,U+9f0e,U+9f13,U+9f20,U+9f3b,U+9f50,U+9f7f,U+9f84,U+9f8b,U+9f99-9f9a,U+9f9f,U+ff01,U+ff08-ff09,U+ff0c,U+ff1a-ff1b,U+ff1f; 56 | } 57 | @font-face { 58 | font-family: 'HarmonyOS_Regular'; 59 | font-style: normal; 60 | font-weight: 400; 61 | font-display: swap; 62 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.h.woff2') format('woff2'); 63 | unicode-range: U+975b,U+975e,U+9760-9762,U+9769,U+9773-9774,U+9776,U+978b,U+978d,U+9798,U+97a0,U+97ad,U+97e6-97e7,U+97e9,U+97ed,U+97f3,U+97f5-97f6,U+9875-9877,U+9879-987b,U+987d-987f,U+9881-9882,U+9884-9888,U+988a,U+9890-9891,U+9893,U+9896-9898,U+989c-989d,U+98a0,U+98a4,U+98a7,U+98ce,U+98d8,U+98de-98df,U+9910,U+9965,U+996d-9972,U+9975-9976,U+997a,U+997c,U+997f,U+9981,U+9985-9986,U+9988,U+998b,U+998f,U+9992,U+9996,U+9999,U+9a6c-9a71,U+9a73-9a74,U+9a76,U+9a79,U+9a7b-9a7c,U+9a7e,U+9a82,U+9a84,U+9a86-9a87,U+9a8b-9a8c,U+9a8f,U+9a91,U+9a97,U+9a9a,U+9aa1,U+9aa4; 64 | } 65 | @font-face { 66 | font-family: 'HarmonyOS_Regular'; 67 | font-style: normal; 68 | font-weight: 400; 69 | font-display: swap; 70 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.i.woff2') format('woff2'); 71 | unicode-range: U+9570,U+9576,U+957f,U+95e8,U+95ea,U+95ed-95f0,U+95f2,U+95f4,U+95f7-95fb,U+95fd,U+9600-9602,U+9605,U+9609,U+960e,U+9610-9611,U+9614,U+961c,U+961f,U+962e,U+9632-9636,U+963b,U+963f-9640,U+9644-9648,U+964b-964d,U+9650,U+9655,U+965b,U+9661-9662,U+9664,U+9668-966a,U+9675-9677,U+9685-9686,U+968b,U+968f-9690,U+9694,U+9698-9699,U+969c,U+96a7,U+96b6,U+96be,U+96c0-96c1,U+96c4-96c7,U+96cc-96cd,U+96cf,U+96d5,U+96e8,U+96ea,U+96f6-96f7,U+96f9,U+96fe,U+9700,U+9704,U+9707,U+9709,U+970d,U+9713,U+9716,U+971c,U+971e,U+9732,U+9738-9739,U+9752,U+9756,U+9759; 72 | } 73 | @font-face { 74 | font-family: 'HarmonyOS_Regular'; 75 | font-style: normal; 76 | font-weight: 400; 77 | font-display: swap; 78 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.j.woff2') format('woff2'); 79 | unicode-range: U+9179,U+917f,U+9187,U+9189,U+918b,U+918d,U+9190,U+9192,U+919a-919b,U+91ba,U+91c7,U+91c9-91ca,U+91cc-91cf,U+91d1,U+91dc,U+9274,U+93d6,U+9488-9489,U+948e,U+9492-9493,U+9497,U+9499,U+949d-94a3,U+94a5-94a9,U+94ae,U+94b1,U+94b3,U+94b5,U+94bb,U+94be,U+94c0-94c3,U+94c5-94c6,U+94dc-94dd,U+94e1,U+94e3,U+94ec-94ed,U+94f0-94f2,U+94f6,U+94f8,U+94fa,U+94fe,U+9500-9501,U+9504-9505,U+9508,U+950b-950c,U+9510-9511,U+9517,U+9519-951a,U+9521,U+9523-9526,U+9528,U+952d-9530,U+9539,U+953b,U+9540-9541,U+9547,U+954a,U+954d,U+9550-9551,U+955c,U+9563,U+956d; 80 | } 81 | @font-face { 82 | font-family: 'HarmonyOS_Regular'; 83 | font-style: normal; 84 | font-weight: 400; 85 | font-display: swap; 86 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.k.woff2') format('woff2'); 87 | unicode-range: U+9001-9003,U+9005-9006,U+9009-900a,U+900d,U+900f-9012,U+9014,U+9017,U+901a-901b,U+901d-9022,U+902e,U+9038,U+903b-903c,U+903e,U+9041-9042,U+9044,U+9047,U+904d,U+904f-9053,U+9057,U+905b,U+9062-9063,U+9065,U+9068,U+906d-906e,U+9075,U+907d,U+907f-9080,U+9082-9083,U+908b,U+9091,U+9093,U+9099,U+90a2-90a3,U+90a6,U+90aa,U+90ae-90af,U+90b1,U+90b5,U+90b8-90b9,U+90bb,U+90c1,U+90ca,U+90ce,U+90d1,U+90dd,U+90e1,U+90e7-90e8,U+90ed,U+90f4,U+90f8,U+90fd,U+9102,U+9119,U+9149,U+914b-914d,U+9152,U+9157,U+915a,U+915d-915e,U+9161,U+9163,U+9165,U+916a,U+916c,U+916e,U+9171,U+9175-9178; 88 | } 89 | @font-face { 90 | font-family: 'HarmonyOS_Regular'; 91 | font-style: normal; 92 | font-weight: 400; 93 | font-display: swap; 94 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.l.woff2') format('woff2'); 95 | unicode-range: U+8e44,U+8e47-8e48,U+8e4a-8e4b,U+8e51,U+8e59,U+8e66,U+8e6c-8e6d,U+8e6f,U+8e72,U+8e74,U+8e76,U+8e7f,U+8e81,U+8e87,U+8e8f,U+8eab-8eac,U+8eaf,U+8eb2,U+8eba,U+8f66-8f69,U+8f6c,U+8f6e-8f72,U+8f74,U+8f7b,U+8f7d,U+8f7f,U+8f83-8f8a,U+8f8d-8f8e,U+8f90-8f91,U+8f93,U+8f95-8f99,U+8f9b-8f9c,U+8f9e-8f9f,U+8fa3,U+8fa8-8fa9,U+8fab,U+8fb0-8fb1,U+8fb9,U+8fbd-8fbe,U+8fc1-8fc2,U+8fc4-8fc5,U+8fc7-8fc8,U+8fce,U+8fd0-8fd1,U+8fd3-8fd5,U+8fd8-8fd9,U+8fdb-8fdf,U+8fe2,U+8fe6,U+8fe8,U+8fea-8feb,U+8fed,U+8ff0,U+8ff3,U+8ff7-8ff9,U+8ffd,U+9000; 96 | } 97 | @font-face { 98 | font-family: 'HarmonyOS_Regular'; 99 | font-style: normal; 100 | font-weight: 400; 101 | font-display: swap; 102 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.m.woff2') format('woff2'); 103 | unicode-range: U+8d24-8d31,U+8d34-8d35,U+8d37-8d3f,U+8d41-8d45,U+8d48,U+8d4a-8d4c,U+8d4e-8d50,U+8d54,U+8d56,U+8d58,U+8d5a-8d5b,U+8d5d-8d5e,U+8d60-8d64,U+8d66-8d67,U+8d6b,U+8d70,U+8d74-8d77,U+8d81,U+8d85,U+8d8a-8d8b,U+8d9f,U+8da3,U+8db3-8db4,U+8db8,U+8dbe-8dbf,U+8dc3-8dc4,U+8dcb-8dcc,U+8dd1,U+8dd7,U+8ddb,U+8ddd,U+8ddf,U+8de4,U+8de8,U+8dea,U+8def,U+8df3,U+8df5,U+8df7,U+8dfa-8dfb,U+8e09-8e0a,U+8e0c,U+8e0f,U+8e1d-8e1e,U+8e22,U+8e29-8e2a,U+8e2e,U+8e31,U+8e35,U+8e39,U+8e42; 104 | } 105 | @font-face { 106 | font-family: 'HarmonyOS_Regular'; 107 | font-style: normal; 108 | font-weight: 400; 109 | font-display: swap; 110 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.n.woff2') format('woff2'); 111 | unicode-range: U+8bc9-8bcd,U+8bcf,U+8bd1,U+8bd3,U+8bd5,U+8bd7-8bd8,U+8bda-8bdb,U+8bdd-8bde,U+8be0-8be9,U+8beb-8bf5,U+8bf7-8bf8,U+8bfa-8bfb,U+8bfd-8c01,U+8c03-8c06,U+8c08,U+8c0a-8c0b,U+8c0d-8c13,U+8c15,U+8c17,U+8c19-8c1c,U+8c22-8c24,U+8c26-8c2a,U+8c2c-8c2d,U+8c30-8c35,U+8c37,U+8c41,U+8c46,U+8c4c,U+8c61-8c62,U+8c6a-8c6b,U+8c79-8c7a,U+8c82,U+8c89,U+8c8c,U+8d1d-8d1f,U+8d21-8d23; 112 | } 113 | @font-face { 114 | font-family: 'HarmonyOS_Regular'; 115 | font-style: normal; 116 | font-weight: 400; 117 | font-display: swap; 118 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.o.woff2') format('woff2'); 119 | unicode-range: U+889c,U+88a4,U+88ab,U+88ad,U+88b1,U+88c1-88c2,U+88c5-88c6,U+88c9,U+88d4-88d5,U+88d8-88d9,U+88df,U+88e3-88e4,U+88e8,U+88f1,U+88f3-88f4,U+88f8-88f9,U+88fe,U+8902,U+8910,U+8912-8913,U+891a-891b,U+8921,U+8925,U+892a-892b,U+8934,U+8936,U+8941,U+8944,U+895e-895f,U+8966,U+897f,U+8981,U+8986,U+89c1-89c2,U+89c4-89c6,U+89c8-89cb,U+89ce,U+89d0-89d2,U+89e3,U+89e5-89e6,U+8a00,U+8a07,U+8a79,U+8a89-8a8a,U+8a93,U+8b66,U+8b6c,U+8ba1-8bab,U+8bad-8bb0,U+8bb2-8bb3,U+8bb6-8bba,U+8bbc-8bc1,U+8bc4-8bc6,U+8bc8; 120 | } 121 | @font-face { 122 | font-family: 'HarmonyOS_Regular'; 123 | font-style: normal; 124 | font-weight: 400; 125 | font-display: swap; 126 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.p.woff2') format('woff2'); 127 | unicode-range: U+8695,U+869c,U+86a3-86a4,U+86a7,U+86aa,U+86af,U+86b1,U+86c0,U+86c6-86c7,U+86ca-86cb,U+86d0,U+86d4,U+86d9,U+86db,U+86df,U+86e4,U+86ee,U+86f0,U+86f9,U+86fe,U+8700,U+8702-8703,U+8708-8709,U+870d,U+8712-8713,U+8715,U+8717-8718,U+871a,U+871c,U+8721,U+8725,U+8734,U+8737,U+873b,U+873f,U+8747,U+8749,U+874c,U+874e,U+8757,U+8759,U+8760,U+8763,U+8774,U+8776,U+877c,U+8782-8783,U+8785,U+878d,U+8793,U+879f,U+87af,U+87b3,U+87ba,U+87c6,U+87ca,U+87d1-87d2,U+87e0,U+87e5,U+87f9,U+87fe,U+8815,U+8822,U+8839,U+8840,U+8845,U+884c-884d,U+8854,U+8857,U+8859,U+8861,U+8863,U+8865,U+8868,U+886b-886c,U+8870,U+8877,U+887d-887f,U+8881-8882,U+8884-8885,U+8888,U+888b,U+888d,U+8892,U+8896; 128 | } 129 | @font-face { 130 | font-family: 'HarmonyOS_Regular'; 131 | font-style: normal; 132 | font-weight: 400; 133 | font-display: swap; 134 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.q.woff2') format('woff2'); 135 | unicode-range: U+83dc-83dd,U+83e0,U+83e9,U+83f1-83f2,U+8403-8404,U+840b-840e,U+841d,U+8424-8428,U+843d,U+8451,U+8457,U+8459,U+845b,U+8461,U+8463,U+8469,U+846b-846c,U+8471,U+8475,U+847a,U+8482,U+848b,U+8499,U+849c,U+84b2,U+84b8,U+84bf,U+84c4,U+84c9,U+84d1,U+84d6,U+84dd,U+84df,U+84e6,U+84ec,U+8511,U+8513,U+8517,U+851a,U+851f,U+8521,U+852b-852c,U+8537,U+853b-853d,U+8549-854a,U+8559,U+8574,U+857e,U+8584,U+8587,U+858f,U+859b,U+85aa,U+85af-85b0,U+85c9,U+85cf-85d0,U+85d3,U+85d5,U+85e4,U+85e9,U+85fb,U+8611,U+8638,U+864e-8651,U+8654,U+865a,U+865e,U+866b-866c,U+8671,U+8679,U+867d-867e,U+8680-8682,U+868a,U+868c-868d,U+8693; 136 | } 137 | @font-face { 138 | font-family: 'HarmonyOS_Regular'; 139 | font-style: normal; 140 | font-weight: 400; 141 | font-display: swap; 142 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.r.woff2') format('woff2'); 143 | unicode-range: U+8273,U+827a,U+827e,U+8282,U+828a-828b,U+828d,U+8292,U+8299,U+829c-829d,U+82a5-82a6,U+82a9,U+82ab-82ad,U+82af,U+82b1,U+82b3,U+82b7-82b9,U+82bd,U+82c7,U+82cd,U+82cf,U+82d1,U+82d3-82d4,U+82d7,U+82db,U+82de-82df,U+82e3,U+82e5-82e6,U+82eb,U+82ef,U+82f1,U+82f9,U+82fb,U+8301-8305,U+8309,U+830e,U+8314,U+8317,U+8327-8328,U+832b-832c,U+832f,U+8335-8336,U+8338-8339,U+8340,U+8346-8347,U+8349,U+834f-8352,U+8354,U+835a,U+835c,U+8361,U+8363-8364,U+8367,U+836b,U+836f,U+8377,U+837c,U+8386,U+8389,U+838e,U+8393,U+839e,U+83a0,U+83ab,U+83b1-83b4,U+83b7,U+83b9-83ba,U+83bd,U+83c1,U+83c5,U+83c7,U+83ca,U+83cc,U+83cf; 144 | } 145 | @font-face { 146 | font-family: 'HarmonyOS_Regular'; 147 | font-style: normal; 148 | font-weight: 400; 149 | font-display: swap; 150 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.s.woff2') format('woff2'); 151 | unicode-range: U+80de,U+80e1,U+80e7,U+80ea-80eb,U+80ed,U+80ef-80f0,U+80f3-80f4,U+80f6,U+80f8,U+80fa,U+80fd,U+8102,U+8106,U+8109-810a,U+810d,U+810f-8111,U+8113-8114,U+8116,U+8118,U+811a,U+812f,U+8131,U+8138,U+813e,U+8146,U+814a-814c,U+8150-8151,U+8154-8155,U+8165,U+816e,U+8170,U+8174,U+8179-817c,U+817e-8180,U+818a,U+818f,U+8198,U+819b-819d,U+81a8,U+81b3,U+81ba-81bb,U+81c0,U+81c2-81c3,U+81c6,U+81ca,U+81e3,U+81ea,U+81ec-81ed,U+81f3-81f4,U+81fb-81fc,U+81fe,U+8200,U+8205-8206,U+820c-820d,U+8210,U+8212,U+8214,U+821c,U+821e-821f,U+822a-822c,U+8230-8231,U+8235-8239,U+8247,U+8258,U+826f-8270,U+8272; 152 | } 153 | @font-face { 154 | font-family: 'HarmonyOS_Regular'; 155 | font-style: normal; 156 | font-weight: 400; 157 | font-display: swap; 158 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.t.woff2') format('woff2'); 159 | unicode-range: U+7f72,U+7f81,U+7f8a,U+7f8c,U+7f8e,U+7f94,U+7f9a,U+7f9e,U+7fa1,U+7fa4,U+7fb2,U+7fb8-7fb9,U+7fbd,U+7fc1,U+7fc5,U+7fcc,U+7fce,U+7fd4-7fd5,U+7fd8,U+7fdf-7fe1,U+7fe6,U+7fe9,U+7ff0-7ff1,U+7ff3,U+7ffb-7ffc,U+8000-8001,U+8003,U+8005,U+800c-800d,U+8010,U+8012,U+8015,U+8017-8019,U+8027,U+802a,U+8033,U+8036-8038,U+803b,U+803d,U+803f,U+8042,U+8046,U+804a-804c,U+8052,U+8054,U+8058,U+805a,U+806a,U+807f,U+8083-8084,U+8086-8087,U+8089,U+808b-808c,U+8096,U+8098,U+809a-809b,U+809d,U+80a0-80a2,U+80a4-80a5,U+80a9-80aa,U+80ae-80af,U+80b2,U+80b4,U+80ba,U+80be-80c1,U+80c3-80c4,U+80c6,U+80cc,U+80ce,U+80d6,U+80da-80dc; 160 | } 161 | @font-face { 162 | font-family: 'HarmonyOS_Regular'; 163 | font-style: normal; 164 | font-weight: 400; 165 | font-display: swap; 166 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.u.woff2') format('woff2'); 167 | unicode-range: U+7eb5-7eba,U+7ebd,U+7ebf,U+7ec2-7eca,U+7ecd-7ed5,U+7ed8-7edf,U+7ee1-7ee3,U+7ee5-7ee7,U+7ee9-7eeb,U+7eed,U+7eef-7ef0,U+7ef3-7ef8,U+7efc-7efd,U+7eff-7f00,U+7f04-7f09,U+7f0e-7f0f,U+7f13-7f16,U+7f18,U+7f1a,U+7f1c-7f1d,U+7f1f-7f22,U+7f24-7f26,U+7f28-7f2a,U+7f2d-7f2e,U+7f30,U+7f34,U+7f38,U+7f3a,U+7f42,U+7f50-7f51,U+7f54-7f55,U+7f57,U+7f5a,U+7f61-7f62,U+7f69-7f6a,U+7f6e; 168 | } 169 | @font-face { 170 | font-family: 'HarmonyOS_Regular'; 171 | font-style: normal; 172 | font-weight: 400; 173 | font-display: swap; 174 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.v.woff2') format('woff2'); 175 | unicode-range: U+7b4c,U+7b4f-7b52,U+7b54,U+7b56,U+7b5b,U+7b5d,U+7b75,U+7b77,U+7b79,U+7b7e,U+7b80,U+7b8d,U+7b94-7b95,U+7b97,U+7ba1,U+7ba9-7bab,U+7bad,U+7bb1,U+7bb8,U+7bc6-7bc7,U+7bd1,U+7bd3,U+7bd9,U+7bdd,U+7be1,U+7bee,U+7bf1,U+7bf7,U+7bfe,U+7c07,U+7c0c,U+7c27,U+7c2a,U+7c38,U+7c3f,U+7c41,U+7c4d,U+7c73,U+7c7b,U+7c7d,U+7c89,U+7c92,U+7c95,U+7c97-7c98,U+7c9f,U+7ca4-7ca5,U+7caa,U+7cae,U+7cb1,U+7cb3,U+7cb9,U+7cbc-7cbe,U+7cc5,U+7cca,U+7cd5-7cd7,U+7cd9,U+7cdc,U+7cdf-7ce0,U+7cef,U+7cfb,U+7d0a,U+7d20,U+7d22,U+7d27,U+7d2b,U+7d2f,U+7d6e,U+7e41,U+7e82,U+7ea0-7ea4,U+7ea6-7ea8,U+7eaa-7ead,U+7eaf-7eb3; 176 | } 177 | @font-face { 178 | font-family: 'HarmonyOS_Regular'; 179 | font-style: normal; 180 | font-weight: 400; 181 | font-display: swap; 182 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.w.woff2') format('woff2'); 183 | unicode-range: U+7981,U+7984-7985,U+798f,U+79b9,U+79bb,U+79bd-79be,U+79c0-79c1,U+79c3,U+79c6,U+79c9,U+79cb,U+79cd,U+79d1-79d2,U+79d8,U+79df,U+79e3-79e4,U+79e6-79e7,U+79e9,U+79ef-79f0,U+79f8,U+79fb,U+79fd,U+7a00,U+7a0b,U+7a0d-7a0e,U+7a14,U+7a17,U+7a1a,U+7a20,U+7a33,U+7a37,U+7a39,U+7a3b-7a3d,U+7a3f,U+7a46,U+7a51,U+7a57,U+7a74,U+7a76-7a77,U+7a79-7a7a,U+7a7f,U+7a81,U+7a83-7a84,U+7a88,U+7a8d,U+7a91-7a92,U+7a95-7a98,U+7a9c-7a9d,U+7a9f,U+7aa5-7aa6,U+7abf,U+7acb,U+7ad6,U+7ad9,U+7ade-7ae0,U+7ae3,U+7ae5-7ae6,U+7aed,U+7aef,U+7af9,U+7afd,U+7aff,U+7b03,U+7b06,U+7b08,U+7b0b,U+7b11,U+7b14,U+7b19,U+7b1b,U+7b20,U+7b26,U+7b28,U+7b2c,U+7b3a,U+7b3c,U+7b49,U+7b4b; 184 | } 185 | @font-face { 186 | font-family: 'HarmonyOS_Regular'; 187 | font-style: normal; 188 | font-weight: 400; 189 | font-display: swap; 190 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.x.woff2') format('woff2'); 191 | unicode-range: U+77aa,U+77ac,U+77b0,U+77b3,U+77b5,U+77bb,U+77bf,U+77d7,U+77db-77dc,U+77e2-77e3,U+77e5,U+77e9,U+77eb,U+77ed-77ee,U+77f3,U+77fd-77ff,U+7801-7802,U+780c-780d,U+7812,U+7814,U+7816,U+781a,U+781d,U+7823,U+7825,U+7827,U+7830,U+7834,U+7837-7838,U+783a,U+783e,U+7840,U+7845,U+784c,U+7852,U+7855,U+785d,U+786b-786c,U+786e,U+787c,U+7887,U+7889,U+788c-788e,U+7891,U+7897-7898,U+789c,U+789f,U+78a5,U+78a7,U+78b0-78b1,U+78b3-78b4,U+78be,U+78c1,U+78c5,U+78ca-78cb,U+78d0,U+78d5,U+78e8,U+78ec,U+78f7,U+78fa,U+7901,U+7934,U+793a,U+793c,U+793e,U+7940-7941,U+7948,U+7956-7957,U+795a-795b,U+795d-7960,U+7965,U+7968,U+796d,U+796f,U+7977-7978,U+797a,U+7980; 192 | } 193 | @font-face { 194 | font-family: 'HarmonyOS_Regular'; 195 | font-style: normal; 196 | font-weight: 400; 197 | font-display: swap; 198 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.y.woff2') format('woff2'); 199 | unicode-range: U+761f,U+7624,U+7626,U+7629-762b,U+7634-7635,U+7638,U+763e,U+764c,U+7656,U+765e,U+7663,U+766b,U+7678,U+767b,U+767d-767e,U+7682,U+7684,U+7686-7688,U+768b,U+768e,U+7691,U+7693,U+7696,U+7699,U+76ae,U+76b1,U+76b4,U+76bf,U+76c2,U+76c5-76c6,U+76c8,U+76ca,U+76ce-76d2,U+76d4,U+76d6-76d8,U+76db,U+76df,U+76ee-76ef,U+76f2,U+76f4,U+76f8-76f9,U+76fc,U+76fe,U+7701,U+7708-7709,U+770b,U+771f-7720,U+7726,U+7728-7729,U+772f,U+7736-7738,U+773a,U+773c,U+7740-7741,U+7750-7751,U+775a-775b,U+7761,U+7763,U+7765-7766,U+7768,U+776b-776c,U+7779,U+777d,U+777f,U+7784-7785,U+778c,U+778e,U+7791-7792,U+779f-77a0,U+77a5,U+77a7,U+77a9; 200 | } 201 | @font-face { 202 | font-family: 'HarmonyOS_Regular'; 203 | font-style: normal; 204 | font-weight: 400; 205 | font-display: swap; 206 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.z.woff2') format('woff2'); 207 | unicode-range: U+7435-7436,U+743c,U+7455,U+7459-745a,U+745c,U+745e-745f,U+7470,U+7476,U+7480,U+7483,U+7487,U+749c,U+749e,U+74a7-74a8,U+74dc,U+74e2-74e4,U+74e6,U+74ee,U+74f6-74f7,U+7504,U+7518,U+751a,U+751c,U+751f,U+7525,U+7528-7529,U+752b-752d,U+7530-7533,U+7535,U+7537-7538,U+753b,U+7545,U+754c,U+754f,U+7554,U+7559,U+755c,U+7565-7566,U+756a,U+7574,U+7578,U+7583,U+7586,U+758f,U+7591,U+7597,U+7599-759a,U+759f,U+75a1,U+75a4-75a5,U+75ab,U+75ae-75b2,U+75b4-75b5,U+75b9,U+75bc-75be,U+75c5,U+75c7-75ca,U+75cd,U+75d2,U+75d4-75d5,U+75d8,U+75db,U+75de,U+75e2-75e3,U+75e8,U+75ea,U+75f0,U+75f4,U+75f9,U+7600-7601; 208 | } 209 | @font-face { 210 | font-family: 'HarmonyOS_Regular'; 211 | font-style: normal; 212 | font-weight: 400; 213 | font-display: swap; 214 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aa.woff2') format('woff2'); 215 | unicode-range: U+725f,U+7261-7262,U+7267,U+7269,U+7272,U+7275,U+7279-727a,U+7280-7281,U+7284,U+728a,U+7292,U+729f,U+72ac,U+72af,U+72b6-72b9,U+72c1-72c2,U+72c4,U+72c8,U+72ce,U+72d0,U+72d2,U+72d7,U+72d9,U+72de,U+72e0-72e1,U+72e9,U+72ec-72f2,U+72f7-72f8,U+72fc,U+730a,U+730e,U+7316,U+731b-731d,U+7322,U+7325,U+7329-732c,U+732e,U+7334,U+733e-733f,U+7350,U+7357,U+7360,U+736d,U+7384,U+7387,U+7389,U+738b,U+7396,U+739b,U+73a9,U+73ab,U+73af-73b0,U+73b2,U+73b7,U+73ba-73bb,U+73c0,U+73c8,U+73ca,U+73cd,U+73d0-73d1,U+73d9,U+73e0,U+73ed,U+7403,U+7405-7406,U+7409-740a,U+740f-7410,U+741a,U+7422,U+7425,U+742a,U+7433-7434; 216 | } 217 | @font-face { 218 | font-family: 'HarmonyOS_Regular'; 219 | font-style: normal; 220 | font-weight: 400; 221 | font-display: swap; 222 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ab.woff2') format('woff2'); 223 | unicode-range: U+706d,U+706f-7070,U+7075-7076,U+7078,U+707c,U+707e-707f,U+7089-708a,U+708e,U+7092,U+7094-7096,U+7099,U+70ab-70af,U+70b1,U+70b3,U+70b8-70b9,U+70bc-70bd,U+70c1-70c3,U+70c8,U+70ca,U+70d8-70d9,U+70db,U+70df,U+70e4,U+70e6-70e7,U+70e9,U+70eb-70ed,U+70ef,U+70f7,U+70f9,U+70fd,U+7109-710a,U+7115,U+7119-711a,U+7126,U+7130-7131,U+7136,U+714c,U+714e,U+715e,U+7164,U+7166-7168,U+716e,U+7172-7173,U+717d,U+7184,U+718a,U+718f,U+7194,U+7198-7199,U+719f-71a0,U+71a8,U+71ac,U+71b9,U+71c3,U+71ce,U+71d5,U+71e5,U+7206,U+722a,U+722c,U+7231,U+7235-7239,U+723d,U+7247-7248,U+724c-724d,U+7252,U+7259,U+725b; 224 | } 225 | @font-face { 226 | font-family: 'HarmonyOS_Regular'; 227 | font-style: normal; 228 | font-weight: 400; 229 | font-display: swap; 230 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ac.woff2') format('woff2'); 231 | unicode-range: U+6df7,U+6df9,U+6dfb,U+6e05,U+6e0a,U+6e0d-6e0e,U+6e10,U+6e14,U+6e17,U+6e1a,U+6e1d,U+6e20-6e21,U+6e23-6e25,U+6e29,U+6e2d,U+6e2f,U+6e32,U+6e34,U+6e38,U+6e3a,U+6e43,U+6e4d,U+6e56,U+6e58,U+6e5b,U+6e6e,U+6e7e-6e7f,U+6e83,U+6e85,U+6e89,U+6e90,U+6e9c,U+6ea2,U+6ea5,U+6eaa,U+6eaf,U+6eb6,U+6eba,U+6ec1,U+6ec7,U+6ecb,U+6ed1,U+6ed3-6ed5,U+6eda,U+6ede,U+6ee1,U+6ee4-6ee6,U+6ee8-6ee9,U+6ef4,U+6f02,U+6f06,U+6f09,U+6f0f,U+6f13-6f15,U+6f20,U+6f29-6f2b,U+6f31,U+6f33,U+6f3e,U+6f46-6f47,U+6f4d,U+6f58,U+6f5c,U+6f5e,U+6f62,U+6f66,U+6f6d-6f6e,U+6f84,U+6f88-6f89,U+6f8e,U+6f9c,U+6fa1,U+6fb3,U+6fb9,U+6fc0,U+6fd1-6fd2,U+6fe1,U+7011,U+701a,U+7023,U+704c,U+706b; 232 | } 233 | @font-face { 234 | font-family: 'HarmonyOS_Regular'; 235 | font-style: normal; 236 | font-weight: 400; 237 | font-display: swap; 238 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ad.woff2') format('woff2'); 239 | unicode-range: U+6ccc,U+6cd3,U+6cd5,U+6cdb,U+6cde,U+6ce1-6ce3,U+6ce5,U+6ce8,U+6cea-6ceb,U+6cef-6cf1,U+6cf3,U+6cf5,U+6cfb-6cfe,U+6d01,U+6d0b,U+6d12,U+6d17,U+6d1b,U+6d1e,U+6d25,U+6d27,U+6d2a,U+6d31-6d32,U+6d3b-6d3e,U+6d41,U+6d43,U+6d45-6d47,U+6d4a-6d4b,U+6d4e-6d4f,U+6d51,U+6d53,U+6d59-6d5a,U+6d63,U+6d66,U+6d69-6d6a,U+6d6e,U+6d74,U+6d77-6d78,U+6d82,U+6d85,U+6d88-6d89,U+6d8c,U+6d8e,U+6d93,U+6d95,U+6d9b,U+6d9d,U+6d9f-6da1,U+6da3-6da4,U+6da6-6daa,U+6dae-6daf,U+6db2,U+6db5,U+6db8,U+6dc0,U+6dc4-6dc7,U+6dcb-6dcc,U+6dd1,U+6dd6,U+6dd8-6dd9,U+6de1,U+6de4,U+6deb-6dec,U+6dee,U+6df1,U+6df3; 240 | } 241 | @font-face { 242 | font-family: 'HarmonyOS_Regular'; 243 | font-style: normal; 244 | font-weight: 400; 245 | font-display: swap; 246 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ae.woff2') format('woff2'); 247 | unicode-range: U+6b92,U+6b96,U+6b9a,U+6ba1,U+6bb4-6bb5,U+6bb7,U+6bbf,U+6bc1,U+6bc5,U+6bcb,U+6bcd,U+6bcf,U+6bd2,U+6bd4-6bd7,U+6bd9,U+6bdb,U+6be1,U+6beb,U+6bef,U+6c05,U+6c0f,U+6c11,U+6c13-6c14,U+6c16,U+6c1b,U+6c1f,U+6c22,U+6c24,U+6c26-6c28,U+6c2e-6c30,U+6c32,U+6c34,U+6c38,U+6c3d,U+6c40-6c42,U+6c47,U+6c49,U+6c50,U+6c55,U+6c57,U+6c5b,U+6c5d-6c61,U+6c64,U+6c68-6c6a,U+6c70,U+6c72,U+6c76,U+6c79,U+6c7d-6c7e,U+6c81-6c83,U+6c86,U+6c88-6c89,U+6c8c,U+6c8f-6c90,U+6c93,U+6c99,U+6c9b,U+6c9f,U+6ca1,U+6ca4-6ca7,U+6caa-6cab,U+6cae,U+6cb3,U+6cb8-6cb9,U+6cbb-6cbf,U+6cc4-6cc5,U+6cc9-6cca; 248 | } 249 | @font-face { 250 | font-family: 'HarmonyOS_Regular'; 251 | font-style: normal; 252 | font-weight: 400; 253 | font-display: swap; 254 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.af.woff2') format('woff2'); 255 | unicode-range: U+68ad,U+68af-68b0,U+68b3,U+68b5,U+68c0,U+68c2,U+68c9,U+68cb,U+68cd,U+68d2,U+68d5,U+68d8,U+68da,U+68e0,U+68ee,U+68f1,U+68f5,U+68fa,U+6905,U+690d-690e,U+6912,U+692d,U+6930,U+693d,U+693f,U+6942,U+6954,U+6957,U+695a,U+695e,U+6963,U+696b,U+6977-6978,U+697c,U+6982,U+6984,U+6986,U+6994,U+699c,U+69a8,U+69ad,U+69b4,U+69b7,U+69bb,U+69c1,U+69cc,U+69d0,U+69db,U+69fd,U+69ff,U+6a0a,U+6a1f,U+6a21,U+6a2a,U+6a31,U+6a35,U+6a3d,U+6a44,U+6a47,U+6a58-6a59,U+6a61,U+6a71,U+6a80,U+6a84,U+6a8e,U+6a90,U+6aac,U+6b20-6b23,U+6b27,U+6b32,U+6b3a,U+6b3e,U+6b47,U+6b49,U+6b4c,U+6b62-6b67,U+6b6a,U+6b79,U+6b7b-6b7c,U+6b81,U+6b83-6b84,U+6b86-6b87,U+6b89-6b8b; 256 | } 257 | @font-face { 258 | font-family: 'HarmonyOS_Regular'; 259 | font-style: normal; 260 | font-weight: 400; 261 | font-display: swap; 262 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ag.woff2') format('woff2'); 263 | unicode-range: U+6756,U+675c,U+675e-6761,U+6765,U+6768,U+676d,U+676f-6770,U+6773,U+6775,U+6777,U+677c,U+677e-677f,U+6781,U+6784,U+6787,U+6789,U+6790,U+6795,U+6797,U+679a,U+679c-679d,U+67a2-67a3,U+67aa-67ab,U+67ad,U+67af-67b0,U+67b6-67b7,U+67c4,U+67cf-67d4,U+67d9-67da,U+67dc,U+67de,U+67e0,U+67e5,U+67e9,U+67ec,U+67ef,U+67f1,U+67f3-67f4,U+67ff-6800,U+6805,U+6807-6808,U+680b,U+680f,U+6811,U+6813,U+6816-6817,U+6821,U+6829-682a,U+6837-6839,U+683c-683d,U+6840,U+6842-6843,U+6845-6846,U+6848,U+684c,U+6850-6851,U+6853-6854,U+6863,U+6865,U+6868-6869,U+6874,U+6876,U+6881,U+6885-6886,U+6893,U+6897,U+68a2,U+68a6-68a8; 264 | } 265 | @font-face { 266 | font-family: 'HarmonyOS_Regular'; 267 | font-style: normal; 268 | font-weight: 400; 269 | font-display: swap; 270 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ah.woff2') format('woff2'); 271 | unicode-range: U+65f7,U+65fa,U+6602,U+6606,U+660a,U+660c,U+660e-660f,U+6613-6614,U+6619,U+661d,U+661f-6620,U+6625,U+6627-6628,U+662d,U+662f,U+6631,U+6635,U+663c,U+663e,U+6643,U+664b-664c,U+664f,U+6652-6653,U+6655-6657,U+665a,U+6664,U+6666,U+6668,U+666e-6670,U+6674,U+6676-6677,U+667a,U+667e,U+6682,U+6684,U+6687,U+668c,U+6691,U+6696-6697,U+669d,U+66a7,U+66ae,U+66b4,U+66d9,U+66dc-66dd,U+66e6,U+66f0,U+66f2-66f4,U+66f9,U+66fc,U+66fe-6700,U+6708-6709,U+670b,U+670d,U+6714-6715,U+6717,U+671b,U+671d,U+671f,U+6726,U+6728,U+672a-672d,U+672f,U+6731,U+6734-6735,U+673a,U+673d,U+6740,U+6742-6743,U+6746,U+6748-6749,U+674e-6751; 272 | } 273 | @font-face { 274 | font-family: 'HarmonyOS_Regular'; 275 | font-style: normal; 276 | font-weight: 400; 277 | font-display: swap; 278 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ai.woff2') format('woff2'); 279 | unicode-range: U+6467,U+6469,U+6478-6479,U+6482,U+6485,U+6487,U+6491-6492,U+6495,U+649e,U+64a4,U+64a9,U+64ac-64ae,U+64b0,U+64b5,U+64b8,U+64ba,U+64bc,U+64c2,U+64c5,U+64cd-64ce,U+64d2,U+64d8,U+64de,U+64e2,U+64e6,U+6500,U+6512,U+6518,U+6525,U+652b,U+652f,U+6536,U+6538-6539,U+653b,U+653e-653f,U+6545,U+6548,U+654c,U+654f,U+6551,U+6555-6556,U+6559,U+655b,U+655d-655e,U+6562-6563,U+6566,U+656c,U+6570,U+6572,U+6574,U+6577,U+6587,U+658b-658c,U+6590-6591,U+6593,U+6597,U+6599,U+659c,U+659f,U+65a1,U+65a4-65a5,U+65a7,U+65a9,U+65ab,U+65ad,U+65af-65b0,U+65b9,U+65bd,U+65c1,U+65c4-65c5,U+65cb-65cc,U+65cf,U+65d7,U+65e0,U+65e2,U+65e5-65e9,U+65ec-65ed,U+65f1,U+65f6; 280 | } 281 | @font-face { 282 | font-family: 'HarmonyOS_Regular'; 283 | font-style: normal; 284 | font-weight: 400; 285 | font-display: swap; 286 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aj.woff2') format('woff2'); 287 | unicode-range: U+6323-6325,U+6328,U+632a-632b,U+632f,U+6332,U+633a,U+633d,U+6342,U+6345-6346,U+6349,U+634b-6350,U+6355,U+635e-635f,U+6361-6363,U+6367,U+636e,U+6371,U+6376-6377,U+637a-637b,U+6380,U+6382,U+6387-6389,U+638c,U+638f-6390,U+6392,U+6396,U+6398,U+63a0,U+63a2-63a3,U+63a5,U+63a7-63aa,U+63ac,U+63b0,U+63b3-63b4,U+63b7-63b8,U+63ba,U+63c4,U+63c9,U+63cd,U+63cf-63d0,U+63d2,U+63d6,U+63e1,U+63e3,U+63e9-63ea,U+63ed,U+63f4,U+63f6,U+63fd,U+6400-6402,U+6405,U+640f-6410,U+6413-6414,U+641c,U+641e,U+6421,U+642a,U+642c-642d,U+643a,U+643d,U+6441,U+6444,U+6446-6448,U+644a,U+6452,U+6454,U+6458,U+645e; 288 | } 289 | @font-face { 290 | font-family: 'HarmonyOS_Regular'; 291 | font-style: normal; 292 | font-weight: 400; 293 | font-display: swap; 294 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ak.woff2') format('woff2'); 295 | unicode-range: U+6258,U+625b,U+6263,U+6266-6267,U+6269-6270,U+6273,U+6276,U+6279,U+627c,U+627e-6280,U+6284,U+6289-628a,U+6291-6293,U+6295-6298,U+629a-629b,U+62a0-62a2,U+62a4-62a5,U+62a8,U+62ab-62ac,U+62b1,U+62b5,U+62b9,U+62bc-62bd,U+62bf,U+62c2,U+62c4-62ca,U+62cc-62ce,U+62d0,U+62d2-62d4,U+62d6-62d9,U+62db-62dc,U+62df,U+62e2-62e3,U+62e5-62e9,U+62ec-62ed,U+62ef,U+62f1,U+62f3-62f4,U+62f7,U+62fc-62ff,U+6301-6302,U+6307,U+6309,U+630e,U+6311,U+6316,U+631a-631b,U+631d-6321; 296 | } 297 | @font-face { 298 | font-family: 'HarmonyOS_Regular'; 299 | font-style: normal; 300 | font-weight: 400; 301 | font-display: swap; 302 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.al.woff2') format('woff2'); 303 | unicode-range: U+60cb,U+60d1,U+60d5,U+60d8,U+60da,U+60dc,U+60df-60e0,U+60e6-60e9,U+60eb-60f0,U+60f3-60f4,U+60f6,U+60f9-60fa,U+6101,U+6108-6109,U+610e-610f,U+6115,U+611a,U+611f-6120,U+6123-6124,U+6127,U+612b,U+613f,U+6148,U+614a,U+614c,U+614e,U+6151,U+6155,U+6162,U+6167-6168,U+6170,U+6175,U+6177,U+618b,U+618e,U+6194,U+61a7-61a9,U+61ac,U+61be,U+61c2,U+61c8,U+61ca,U+61d1-61d2,U+61d4,U+61e6,U+61f5,U+61ff,U+6208,U+620a,U+620c-6212,U+6216,U+6218,U+621a-621b,U+621f,U+622a,U+622c,U+622e,U+6233-6234,U+6237,U+623e-6241,U+6247-6249,U+624b,U+624d-624e,U+6251-6254; 304 | } 305 | @font-face { 306 | font-family: 'HarmonyOS_Regular'; 307 | font-style: normal; 308 | font-weight: 400; 309 | font-display: swap; 310 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.am.woff2') format('woff2'); 311 | unicode-range: U+5fcc-5fcd,U+5fcf-5fd2,U+5fd6-5fd9,U+5fdd,U+5fe0-5fe1,U+5fe4,U+5fe7,U+5fea-5feb,U+5ff1,U+5ff5,U+5ffb,U+5ffd-6002,U+6005-6006,U+600d-600f,U+6012,U+6014-6016,U+6019,U+601c-601d,U+6020-6021,U+6025-6028,U+602a,U+602f,U+6035,U+603b-603c,U+6041,U+6043,U+604b,U+604d,U+6050,U+6052,U+6055,U+6059-605a,U+6062-6064,U+6068-606d,U+606f-6070,U+6073,U+6076,U+6078-607c,U+607f,U+6084,U+6089,U+608c-608d,U+6094,U+6096,U+609a,U+609f-60a0,U+60a3,U+60a6,U+60a8,U+60ac,U+60af,U+60b1-60b2,U+60b4,U+60b8,U+60bb-60bc,U+60c5-60c6,U+60ca; 312 | } 313 | @font-face { 314 | font-family: 'HarmonyOS_Regular'; 315 | font-style: normal; 316 | font-weight: 400; 317 | font-display: swap; 318 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.an.woff2') format('woff2'); 319 | unicode-range: U+5e7f,U+5e84,U+5e86-5e87,U+5e8a,U+5e8f-5e90,U+5e93-5e97,U+5e99-5e9a,U+5e9c,U+5e9e-5e9f,U+5ea6-5ea7,U+5ead,U+5eb5-5eb8,U+5ec9-5eca,U+5ed1,U+5ed3,U+5ed6,U+5ef6-5ef7,U+5efa,U+5f00,U+5f02-5f04,U+5f08,U+5f0a-5f0b,U+5f0f,U+5f11,U+5f13,U+5f15,U+5f17-5f18,U+5f1b,U+5f1f-5f20,U+5f25-5f27,U+5f29,U+5f2f,U+5f31,U+5f39-5f3a,U+5f52-5f53,U+5f55,U+5f57,U+5f5d,U+5f62,U+5f64,U+5f66,U+5f69-5f6a,U+5f6c-5f6d,U+5f70-5f71,U+5f77,U+5f79,U+5f7b-5f7c,U+5f80-5f81,U+5f84-5f85,U+5f87-5f8b,U+5f90,U+5f92,U+5f95,U+5f97-5f98,U+5fa1,U+5fa8,U+5faa,U+5fad-5fae,U+5fb5,U+5fb7,U+5fbc-5fbd,U+5fc3,U+5fc5-5fc6; 320 | } 321 | @font-face { 322 | font-family: 'HarmonyOS_Regular'; 323 | font-style: normal; 324 | font-weight: 400; 325 | font-display: swap; 326 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ao.woff2') format('woff2'); 327 | unicode-range: U+5c7f,U+5c81-5c82,U+5c8c,U+5c94,U+5c96-5c97,U+5c9a-5c9b,U+5ca9,U+5cad,U+5cb3,U+5cb8,U+5cbf,U+5ccb,U+5cd9,U+5ce1,U+5ce5-5ce6,U+5ce8,U+5cea,U+5ced,U+5cf0,U+5cfb,U+5d02,U+5d07,U+5d0e,U+5d14,U+5d16,U+5d1b,U+5d24,U+5d29,U+5d2d,U+5d34,U+5d3d,U+5d4c,U+5d58,U+5d6c,U+5d82,U+5d99,U+5dc5,U+5dcd,U+5ddd-5dde,U+5de1-5de2,U+5de5-5de9,U+5deb,U+5dee,U+5df1-5df4,U+5df7,U+5dfe,U+5e01-5e03,U+5e05-5e06,U+5e08,U+5e0c,U+5e10-5e11,U+5e15-5e16,U+5e18,U+5e1a-5e1d,U+5e26-5e27,U+5e2d-5e2e,U+5e37-5e38,U+5e3c-5e3d,U+5e42,U+5e44-5e45,U+5e4c,U+5e54-5e55,U+5e61-5e62,U+5e72-5e74,U+5e76,U+5e78,U+5e7a-5e7d; 328 | } 329 | @font-face { 330 | font-family: 'HarmonyOS_Regular'; 331 | font-style: normal; 332 | font-weight: 400; 333 | font-display: swap; 334 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ap.woff2') format('woff2'); 335 | unicode-range: U+5b85,U+5b87-5b89,U+5b8b-5b8c,U+5b8f,U+5b95,U+5b97-5b9e,U+5ba0-5ba4,U+5ba6,U+5baa-5bab,U+5bb0,U+5bb3-5bb6,U+5bb9,U+5bbd-5bbf,U+5bc2,U+5bc4-5bc7,U+5bcc,U+5bd0,U+5bd2-5bd3,U+5bdd-5bdf,U+5be1,U+5be4-5be5,U+5be8,U+5bf0,U+5bf8-5bfc,U+5bff,U+5c01,U+5c04,U+5c06,U+5c09-5c0a,U+5c0f,U+5c11,U+5c14,U+5c16,U+5c18,U+5c1a,U+5c1d,U+5c24,U+5c27,U+5c2c,U+5c31,U+5c34,U+5c38-5c3a,U+5c3c-5c42,U+5c45,U+5c48-5c4b,U+5c4e-5c51,U+5c55,U+5c5e,U+5c60-5c61,U+5c65,U+5c6f,U+5c71,U+5c79; 336 | } 337 | @font-face { 338 | font-family: 'HarmonyOS_Regular'; 339 | font-style: normal; 340 | font-weight: 400; 341 | font-display: swap; 342 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aq.woff2') format('woff2'); 343 | unicode-range: U+5996,U+5999,U+599e,U+59a5,U+59a8-59aa,U+59ae,U+59b2,U+59b9,U+59bb,U+59be,U+59c6,U+59cb,U+59d0-59d1,U+59d3-59d4,U+59d7-59d8,U+59da,U+59dc-59dd,U+59e3,U+59e5,U+59e8,U+59ec,U+59f9,U+59fb,U+59ff,U+5a01,U+5a03-5a04,U+5a06-5a07,U+5a11,U+5a13,U+5a18,U+5a1c,U+5a1f-5a20,U+5a25,U+5a29,U+5a31-5a32,U+5a34,U+5a36,U+5a3c,U+5a40,U+5a46,U+5a49-5a4a,U+5a5a,U+5a62,U+5a6a,U+5a74,U+5a76-5a77,U+5a7f,U+5a92,U+5a9a-5a9b,U+5ab2-5ab3,U+5ac1-5ac2,U+5ac9,U+5acc,U+5ad4,U+5ad6,U+5ae1,U+5ae3,U+5ae6,U+5ae9,U+5b09,U+5b34,U+5b37,U+5b40,U+5b50,U+5b54-5b55,U+5b57-5b59,U+5b5c-5b5d,U+5b5f,U+5b63-5b64,U+5b66,U+5b69-5b6a,U+5b6c,U+5b70-5b71,U+5b75,U+5b7a,U+5b7d,U+5b81,U+5b83; 344 | } 345 | @font-face { 346 | font-family: 'HarmonyOS_Regular'; 347 | font-style: normal; 348 | font-weight: 400; 349 | font-display: swap; 350 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ar.woff2') format('woff2'); 351 | unicode-range: U+57ce,U+57d4,U+57df-57e0,U+57f9-57fa,U+5800,U+5802,U+5806,U+5811,U+5815,U+5821,U+5824,U+582a,U+5830,U+5835,U+584c,U+5851,U+5854,U+5858,U+585e,U+586b,U+587e,U+5883,U+5885,U+5892-5893,U+5899,U+589e-589f,U+58a8-58a9,U+58c1,U+58d1,U+58d5,U+58e4,U+58eb-58ec,U+58ee,U+58f0,U+58f3,U+58f6,U+58f9,U+5904,U+5907,U+590d,U+590f,U+5915-5916,U+5919-591a,U+591c,U+591f,U+5927,U+5929-592b,U+592d-592f,U+5931,U+5934,U+5937-593a,U+5942,U+5944,U+5947-5949,U+594b,U+594e-594f,U+5951,U+5954-5957,U+595a,U+5960,U+5962,U+5965,U+5973-5974,U+5976,U+5978-5979,U+597d,U+5981-5984,U+5986-5988,U+598a,U+598d,U+5992-5993; 352 | } 353 | @font-face { 354 | font-family: 'HarmonyOS_Regular'; 355 | font-style: normal; 356 | font-weight: 400; 357 | font-display: swap; 358 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.as.woff2') format('woff2'); 359 | unicode-range: U+561b,U+561e-561f,U+5624,U+562d,U+5631-5632,U+5634,U+5636,U+5639,U+563b,U+563f,U+564c,U+564e,U+5654,U+5657,U+5659,U+565c,U+5662,U+5664,U+5668-566c,U+5676,U+567c,U+5685,U+568e-568f,U+5693,U+56a3,U+56b7,U+56bc,U+56ca,U+56d4,U+56da-56db,U+56de,U+56e0,U+56e2,U+56e4,U+56ed,U+56f0-56f1,U+56f4,U+56f9-56fa,U+56fd-56ff,U+5703,U+5706,U+5708-5709,U+571f,U+5723,U+5728,U+572d,U+5730,U+573a,U+573e,U+5740,U+5747,U+574a,U+574d-5751,U+5757,U+575a-575b,U+575d-5761,U+5764,U+5766,U+5768,U+576a,U+576f,U+5773,U+5777,U+5782-5784,U+578b,U+5792,U+579b,U+57a0,U+57a2-57a3,U+57a6,U+57ab,U+57ae,U+57c2-57c3,U+57cb; 360 | } 361 | @font-face { 362 | font-family: 'HarmonyOS_Regular'; 363 | font-style: normal; 364 | font-weight: 400; 365 | font-display: swap; 366 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.at.woff2') format('woff2'); 367 | unicode-range: U+54e5-54ea,U+54ed-54ee,U+54f2,U+54fa,U+54fc-54fd,U+5501,U+5506-5507,U+5509,U+550f-5510,U+5514,U+5520,U+5522,U+5524,U+5527,U+552c,U+552e-5531,U+5533,U+553e-553f,U+5543-5544,U+5546,U+554a,U+5550,U+5555-5556,U+555c,U+5561,U+5564-5567,U+556a,U+556c,U+556e,U+5575,U+5577-5578,U+557b-557c,U+557e,U+5580,U+5582-5584,U+5587,U+5589-558b,U+558f,U+5591,U+5594,U+5598-5599,U+559c-559d,U+559f,U+55a7,U+55b3,U+55b7,U+55bb,U+55bd,U+55c5,U+55d1-55d4,U+55d6,U+55dc-55dd,U+55df,U+55e1,U+55e3-55e6,U+55e8,U+55eb-55ec,U+55ef,U+55f7,U+55fd,U+5600-5601,U+5608-5609,U+560e,U+5618; 368 | } 369 | @font-face { 370 | font-family: 'HarmonyOS_Regular'; 371 | font-style: normal; 372 | font-weight: 400; 373 | font-display: swap; 374 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.au.woff2') format('woff2'); 375 | unicode-range: U+5411,U+5413,U+5415,U+5417,U+541b,U+541d-5420,U+5426-5429,U+542b-542f,U+5431,U+5434-5435,U+5438-5439,U+543b-543c,U+543e,U+5440,U+5443,U+5446,U+5448,U+544a,U+5450,U+5453,U+5455,U+5457-5458,U+545b-545c,U+5462,U+5464,U+5466,U+5468,U+5471-5473,U+5475,U+5478,U+547b-547d,U+5480,U+5482,U+5484,U+5486,U+548b-548c,U+548e-5490,U+5492,U+5494-5496,U+5499-549b,U+54a4,U+54a6-54ad,U+54af,U+54b1,U+54b3,U+54b8,U+54bb,U+54bd,U+54bf-54c2,U+54c4,U+54c6-54c9,U+54cd-54ce,U+54d0-54d2,U+54d5,U+54d7,U+54da,U+54dd,U+54df; 376 | } 377 | @font-face { 378 | font-family: 'HarmonyOS_Regular'; 379 | font-style: normal; 380 | font-weight: 400; 381 | font-display: swap; 382 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.av.woff2') format('woff2'); 383 | unicode-range: U+5348-534a,U+534e-534f,U+5351-5353,U+5355-5357,U+535a,U+535c,U+535e-5362,U+5364,U+5366-5367,U+536b,U+536f-5371,U+5373-5375,U+5377-5378,U+537f,U+5382,U+5384-5386,U+5389,U+538b-538c,U+5395,U+5398,U+539a,U+539f,U+53a2,U+53a5-53a6,U+53a8-53a9,U+53ae,U+53bb,U+53bf,U+53c1-53c2,U+53c8-53cd,U+53d1,U+53d4,U+53d6-53d9,U+53db,U+53df-53e0,U+53e3-53e6,U+53e8-53f3,U+53f6-53f9,U+53fc-53fd,U+5401,U+5403-5404,U+5408-540a,U+540c-5410; 384 | } 385 | @font-face { 386 | font-family: 'HarmonyOS_Regular'; 387 | font-style: normal; 388 | font-weight: 400; 389 | font-display: swap; 390 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.aw.woff2') format('woff2'); 391 | unicode-range: U+5207,U+520a,U+520d-520e,U+5211-5212,U+5217-521b,U+521d,U+5220,U+5224,U+5228-5229,U+522b,U+522d-522e,U+5230,U+5236-523b,U+523d,U+5241-5243,U+524a,U+524c-524d,U+5250-5251,U+5254,U+5256,U+525c,U+5265,U+5267,U+5269-526a,U+526f,U+5272,U+527d,U+527f,U+5288,U+529b,U+529d-52a1,U+52a3,U+52a8-52ab,U+52ad,U+52b1-52b3,U+52be-52bf,U+52c3,U+52c7,U+52c9,U+52cb,U+52d0,U+52d2,U+52d8,U+52df,U+52e4,U+52fa,U+52fe-5300,U+5305-5306,U+5308,U+530d,U+5310,U+5315-5317,U+5319,U+531d,U+5320-5321,U+5323,U+532a,U+532e,U+5339-533b,U+533e-533f,U+5341,U+5343,U+5347; 392 | } 393 | @font-face { 394 | font-family: 'HarmonyOS_Regular'; 395 | font-style: normal; 396 | font-weight: 400; 397 | font-display: swap; 398 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ax.woff2') format('woff2'); 399 | unicode-range: U+50cf,U+50d6,U+50da,U+50e7,U+50ee,U+50f3,U+50f5,U+50fb,U+5106,U+510b,U+5112,U+5121,U+513f-5141,U+5143-5146,U+5148-5149,U+514b,U+514d,U+5151,U+5154,U+515a,U+515c,U+5162,U+5165,U+5168,U+516b-516e,U+5170-5171,U+5173-5179,U+517b-517d,U+5180,U+5185,U+5188-5189,U+518c-518d,U+5192,U+5195,U+5197,U+5199,U+519b-519c,U+51a0,U+51a2,U+51a4-51a5,U+51ac,U+51af-51b0,U+51b2-51b3,U+51b5-51b7,U+51bb,U+51bd,U+51c0,U+51c4,U+51c6,U+51c9,U+51cb-51cc,U+51cf,U+51d1,U+51db,U+51dd,U+51e0-51e1,U+51e4,U+51ed,U+51ef-51f0,U+51f3,U+51f6,U+51f8-51fb,U+51fd,U+51ff-5201,U+5203,U+5206; 400 | } 401 | @font-face { 402 | font-family: 'HarmonyOS_Regular'; 403 | font-style: normal; 404 | font-weight: 400; 405 | font-display: swap; 406 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.ay.woff2') format('woff2'); 407 | unicode-range: U+4f60,U+4f63,U+4f65,U+4f69,U+4f6c,U+4f6f-4f70,U+4f73-4f74,U+4f7b-4f7c,U+4f7f,U+4f83-4f84,U+4f88,U+4f8b,U+4f8d,U+4f97,U+4f9b,U+4f9d,U+4fa0,U+4fa3,U+4fa5-4faa,U+4fac,U+4fae-4faf,U+4fb5,U+4fbf,U+4fc3-4fc5,U+4fca,U+4fce-4fd1,U+4fd7-4fd8,U+4fda,U+4fdd-4fde,U+4fe1,U+4fe6,U+4fe8-4fe9,U+4fed-4fef,U+4ff1,U+4ff8,U+4ffa,U+4ffe,U+500c-500d,U+500f,U+5012,U+5014,U+5018-501a,U+501c,U+501f,U+5021,U+5026,U+5028-502a,U+502d,U+503a,U+503c,U+503e,U+5043,U+5047-5048,U+504c,U+504e-504f,U+5055,U+505a,U+505c,U+5065,U+5076-5077,U+507b,U+507f-5080,U+5085,U+5088,U+508d,U+50a3,U+50a5,U+50a8,U+50ac,U+50b2,U+50bb; 408 | } 409 | @font-face { 410 | font-family: 'HarmonyOS_Regular'; 411 | font-style: normal; 412 | font-weight: 400; 413 | font-display: swap; 414 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.az.woff2') format('woff2'); 415 | unicode-range: U+4e94-4e95,U+4e98,U+4e9a-4e9b,U+4e9f,U+4ea1-4ea2,U+4ea4-4ea9,U+4eab-4eae,U+4eb2,U+4eb5,U+4eba,U+4ebf-4ec1,U+4ec3-4ec7,U+4eca-4ecb,U+4ecd-4ece,U+4ed1,U+4ed3-4ed9,U+4ede-4edf,U+4ee3-4ee5,U+4ee8,U+4eea,U+4eec,U+4ef0,U+4ef2,U+4ef5-4ef7,U+4efb,U+4efd,U+4eff,U+4f01,U+4f0a,U+4f0d-4f11,U+4f17-4f1a,U+4f1e-4f20,U+4f22,U+4f24-4f26,U+4f2a-4f2b,U+4f2f-4f30,U+4f34,U+4f36,U+4f38,U+4f3a,U+4f3c-4f3d,U+4f43,U+4f46,U+4f4d-4f51,U+4f53,U+4f55,U+4f58-4f59,U+4f5b-4f5e; 416 | } 417 | @font-face { 418 | font-family: 'HarmonyOS_Regular'; 419 | font-style: normal; 420 | font-weight: 400; 421 | font-display: swap; 422 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a0.woff2') format('woff2'); 423 | unicode-range: U+d7,U+e0-e1,U+e8-ea,U+ec-ed,U+f2-f3,U+f7,U+f9-fa,U+fc,U+2014,U+2018-2019,U+201c-201d,U+3001-3002,U+300a-300b,U+3010-3011,U+4e00-4e01,U+4e03,U+4e07-4e0b,U+4e0d-4e0e,U+4e10-4e11,U+4e13-4e14,U+4e16,U+4e18-4e1e,U+4e22,U+4e24-4e25,U+4e27,U+4e2a-4e2b,U+4e2d,U+4e30,U+4e32,U+4e34,U+4e38-4e3b,U+4e3d-4e3e,U+4e43,U+4e45,U+4e48-4e49,U+4e4b-4e50,U+4e52-4e54,U+4e56,U+4e58-4e59,U+4e5c-4e61,U+4e66,U+4e70-4e71,U+4e73,U+4e7e,U+4e86,U+4e88-4e89,U+4e8b-4e8c,U+4e8e-4e8f,U+4e91-4e93; 424 | } 425 | @font-face { 426 | font-family: 'HarmonyOS_Regular'; 427 | font-style: normal; 428 | font-weight: 400; 429 | font-display: swap; 430 | src: url('//s1.hdslb.com/bfs/static/jinkela/long/font/HarmonyOS_Regular.a1.woff2') format('woff2'); 431 | unicode-range: U+21-7e,U+a4,U+a7-a8,U+b0-b1,U+b7; 432 | } 433 | --------------------------------------------------------------------------------