├── .browserslistrc ├── public ├── robots.txt ├── favicon.ico ├── img │ ├── favicon.ico │ └── icons │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── mstile-150x150.png │ │ ├── apple-touch-icon.png │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── msapplication-icon-144x144.png │ │ ├── android-chrome-maskable-192x192.png │ │ ├── android-chrome-maskable-512x512.png │ │ └── safari-pinned-tab.svg ├── font │ ├── iconfont.eot │ ├── iconfont.ttf │ ├── iconfont.woff │ ├── iconfont.woff2 │ ├── iconfont.json │ ├── iconfont.css │ ├── iconfont.svg │ ├── iconfont.js │ ├── demo_index.html │ └── demo.css ├── js │ ├── FuckWeixin.min.js │ ├── FuckWeixin.js │ ├── AddToHomeScreen.min.js │ └── AddToHomeScreen.js ├── index.html ├── styles │ ├── main.min.css │ └── main.css ├── data.json └── data_origin.json ├── babel.config.js ├── assets ├── background │ ├── bg0.jpg │ ├── bg1.jpg │ ├── bg2.jpg │ ├── bg3.jpg │ ├── bg4.jpg │ ├── bg5.jpg │ ├── bg6.jpg │ ├── bg7.jpg │ ├── bg8.jpg │ ├── bg9.jpg │ ├── bg10.jpg │ ├── bg11.jpg │ ├── bg12.jpg │ └── bg13.jpg ├── screenshots │ ├── 1.png │ ├── 2.png │ └── 3.png └── search │ ├── baidu-white.png │ └── google-white.png ├── src ├── plugins │ └── vuetify.js ├── main.js ├── registerServiceWorker.js └── App.vue ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ ├── new_item.md │ └── new_project.md └── workflows │ └── deploy.yml ├── .gitignore ├── README.md ├── .eslintrc.js ├── vue.config.js ├── README_NJU.md ├── LICENSE └── package.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/favicon.ico -------------------------------------------------------------------------------- /public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/favicon.ico -------------------------------------------------------------------------------- /assets/background/bg0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg0.jpg -------------------------------------------------------------------------------- /assets/background/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg1.jpg -------------------------------------------------------------------------------- /assets/background/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg2.jpg -------------------------------------------------------------------------------- /assets/background/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg3.jpg -------------------------------------------------------------------------------- /assets/background/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg4.jpg -------------------------------------------------------------------------------- /assets/background/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg5.jpg -------------------------------------------------------------------------------- /assets/background/bg6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg6.jpg -------------------------------------------------------------------------------- /assets/background/bg7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg7.jpg -------------------------------------------------------------------------------- /assets/background/bg8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg8.jpg -------------------------------------------------------------------------------- /assets/background/bg9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg9.jpg -------------------------------------------------------------------------------- /assets/screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/screenshots/1.png -------------------------------------------------------------------------------- /assets/screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/screenshots/2.png -------------------------------------------------------------------------------- /assets/screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/screenshots/3.png -------------------------------------------------------------------------------- /public/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/font/iconfont.eot -------------------------------------------------------------------------------- /public/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/font/iconfont.ttf -------------------------------------------------------------------------------- /public/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/font/iconfont.woff -------------------------------------------------------------------------------- /assets/background/bg10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg10.jpg -------------------------------------------------------------------------------- /assets/background/bg11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg11.jpg -------------------------------------------------------------------------------- /assets/background/bg12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg12.jpg -------------------------------------------------------------------------------- /assets/background/bg13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/background/bg13.jpg -------------------------------------------------------------------------------- /public/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/font/iconfont.woff2 -------------------------------------------------------------------------------- /assets/search/baidu-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/search/baidu-white.png -------------------------------------------------------------------------------- /assets/search/google-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/assets/search/google-white.png -------------------------------------------------------------------------------- /public/img/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/favicon-16x16.png -------------------------------------------------------------------------------- /public/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /public/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuetify from "vuetify/lib"; 3 | 4 | Vue.use(Vuetify); 5 | 6 | export default new Vuetify({}); 7 | -------------------------------------------------------------------------------- /public/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/android-chrome-maskable-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NUAA-Open-Source/life-in-nuaa/master/public/img/icons/android-chrome-maskable-512x512.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 功能建议 3 | about: 功能建议或改进意见 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **您的功能建议或意见?** 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new_item.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 投稿新网站 3 | about: 添加一个新的网站 4 | title: '' 5 | labels: new item 6 | assignees: '' 7 | 8 | --- 9 | 10 | **您所期望添加的网站名称?** 11 | 12 | **您所期望添加的项目地址?** 13 | 14 | **您所期望添加的网站分类?** -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new_project.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 添加项目 3 | about: 添加一个新的项目 4 | title: '' 5 | labels: New Project 6 | assignees: '' 7 | 8 | --- 9 | 10 | **您所期望添加的项目名称?** 11 | 12 | **您所期望添加的项目地址?** 13 | 14 | **您所期望添加的项目类型?** 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import "./registerServiceWorker"; 4 | import vuetify from "./plugins/vuetify"; 5 | import "material-design-icons-iconfont/dist/material-design-icons.css"; 6 | 7 | Vue.config.productionTip = false; 8 | 9 | new Vue({ 10 | vuetify, 11 | render: h => h(App) 12 | }).$mount("#app"); 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 南航指南 Life-in-NUAA 2 | 3 | > 🏠 这儿就是咱的家了 4 | 5 | 南航人的专属主页 6 | 7 | Fork 自[南哪指南](https://nju.today/) 8 | 9 | ## 投稿、建议或意见 10 | 11 | 在 [Issue](https://github.com/NUAA-Open-Source/life-in-nuaa/issues) 选择对应的模板并提交。 12 | 13 | ## 开发与 debug 14 | 15 | ``` 16 | yarn install 17 | yarn serve 18 | yarn lint 19 | yarn build 20 | ``` 21 | 22 | ## LICENSE 23 | 24 | MIT 25 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"], 7 | parserOptions: { 8 | parser: "babel-eslint" 9 | }, 10 | rules: { 11 | "no-console": process.env.NODE_ENV === "production" ? "error" : "off", 12 | "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: GitHub Actions Build and Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-18.04 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - name: Setup Node 15 | uses: actions/setup-node@v1 16 | with: 17 | node-version: '10.x' 18 | 19 | - run: yarn install 20 | - run: yarn build 21 | 22 | - name: deploy 23 | uses: peaceiris/actions-gh-pages@v3 24 | with: 25 | deploy_key: ${{ secrets.ACCESS_TOKEN }} 26 | publish_dir: ./dist 27 | cname: nuaa.today -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const TerserPlugin = require("terser-webpack-plugin"); 2 | 3 | module.exports = { 4 | transpileDependencies: ["vuetify"], 5 | pwa: { 6 | name: "南航指南", 7 | themeColor: "#5b145c", 8 | workboxOptions: { 9 | skipWaiting: true 10 | } 11 | }, 12 | configureWebpack: { 13 | optimization: { 14 | minimizer: [ 15 | new TerserPlugin({ 16 | terserOptions: { 17 | warnings: false, 18 | compress: { 19 | drop_console: true, 20 | drop_debugger: true, 21 | pure_funcs: ["console.log"] 22 | } 23 | } 24 | }) 25 | ] 26 | } 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /public/font/iconfont.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "1796423", 3 | "name": "life-in-nju", 4 | "font_family": "iconfont", 5 | "css_prefix_text": "icon-", 6 | "description": "", 7 | "glyphs": [ 8 | { 9 | "icon_id": "386278", 10 | "name": "baidu", 11 | "font_class": "baidu", 12 | "unicode": "e6b6", 13 | "unicode_decimal": 59062 14 | }, 15 | { 16 | "icon_id": "929420", 17 | "name": "google", 18 | "font_class": "google", 19 | "unicode": "e719", 20 | "unicode_decimal": 59161 21 | }, 22 | { 23 | "icon_id": "3876349", 24 | "name": "bing", 25 | "font_class": "bing", 26 | "unicode": "e63f", 27 | "unicode_decimal": 58943 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /README_NJU.md: -------------------------------------------------------------------------------- 1 | # 南哪指南 Life-in-NJU 2 | 3 | > 🏠 这儿就是咱的家了 4 | 5 | 南哪人的专属主页 6 | 7 | ![](https://github.com/idealclover/Life-in-NJU/raw/master/assets/screenshots/1.png) 8 | 9 | ![](https://github.com/idealclover/Life-in-NJU/raw/master/assets/screenshots/2.png) 10 | 11 | ![](https://github.com/idealclover/Life-in-NJU/raw/master/assets/screenshots/3.png) 12 | 13 | * 电脑端、移动端适配 14 | * 可切换百度/谷歌搜索 15 | * 南大相关资源网站整理 16 | * PWA 缓存技术,快速加载,可添加至主页 17 | 18 | ## 投稿、建议或意见 19 | 20 | 在 [Issue](https://github.com/idealclover/Life-in-NJU/issues) 选择对应的模板并提交。 21 | 22 | ## 贵校也想整一个? 23 | 24 | Fork,然后改动 [public/data.json](https://github.com/idealclover/Life-in-NJU/blob/master/public/data.json),即可拥有贵校专属的主页~ 25 | 26 | ## 开发与 debug 27 | 28 | ``` 29 | yarn install 30 | yarn serve 31 | yarn lint 32 | yarn build 33 | ``` 34 | 35 | ## LICENSE 36 | 37 | MIT 38 | -------------------------------------------------------------------------------- /public/js/FuckWeixin.min.js: -------------------------------------------------------------------------------- 1 | function is_weixin(){var e=navigator.userAgent.toLowerCase();return"micromessenger"==e.match(/MicroMessenger/i)||" qq"==e.match(/ QQ/i)}var isWeixin=is_weixin(),winHeight=void 0!==window.innerHeight?window.innerHeight:document.documentElement.clientHeight;function loadHtml(){var e=document.createElement("div");e.id="weixin-tip",e.innerHTML='微信打开',document.body.appendChild(e)}function loadStyleText(e){var t=document.createElement("style");t.rel="stylesheet",t.type="text/css";try{t.appendChild(document.createTextNode(e))}catch(i){t.styleSheet.cssText=e}document.getElementsByTagName("head")[0].appendChild(t)}var cssText="img{width: 100%; height: auto;} #weixin-tip{position: fixed; left:0; top:0; background: rgba(0,0,0,0.8); filter:alpha(opacity=80); width: 100%; height:100%; z-index: 1050;} #weixin-tip p{text-align: center; margin-top: 10%; padding:0 5%;}";isWeixin&&(loadHtml(),loadStyleText(cssText)); 2 | -------------------------------------------------------------------------------- /src/registerServiceWorker.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | 3 | import { register } from "register-service-worker"; 4 | 5 | if (process.env.NODE_ENV === "production") { 6 | register(`${process.env.BASE_URL}service-worker.js`, { 7 | ready() { 8 | console.log( 9 | "App is being served from cache by a service worker.\n" + 10 | "For more details, visit https://goo.gl/AFskqB" 11 | ); 12 | }, 13 | registered() { 14 | console.log("Service worker has been registered."); 15 | }, 16 | cached() { 17 | console.log("Content has been cached for offline use."); 18 | }, 19 | updatefound() { 20 | console.log("New content is downloading."); 21 | }, 22 | updated() { 23 | console.log("New content is available; please refresh."); 24 | }, 25 | offline() { 26 | console.log( 27 | "No internet connection found. App is running in offline mode." 28 | ); 29 | }, 30 | error(error) { 31 | console.error("Error during service worker registration:", error); 32 | } 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "life-in-nuaa", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.21.1", 12 | "clipboard": "^2.0.5", 13 | "core-js": "^3.6.4", 14 | "material-design-icons-iconfont": "^5.0.1", 15 | "nativeshare": "^2.1.3", 16 | "register-service-worker": "^1.6.2", 17 | "vue": "^2.6.11", 18 | "vue-savedata": "^2.0.5", 19 | "vuetify": "^2.2.11", 20 | "vuex": "^3.1.2" 21 | }, 22 | "devDependencies": { 23 | "@vue/cli-plugin-babel": "^4.2.0", 24 | "@vue/cli-plugin-eslint": "^4.2.0", 25 | "@vue/cli-plugin-pwa": "^4.2.0", 26 | "@vue/cli-service": "^4.2.0", 27 | "@vue/eslint-config-prettier": "^6.0.0", 28 | "babel-eslint": "^10.0.3", 29 | "eslint": "^6.7.2", 30 | "eslint-plugin-prettier": "^3.1.1", 31 | "eslint-plugin-vue": "^6.1.2", 32 | "prettier": "^1.19.1", 33 | "sass": "^1.19.0", 34 | "sass-loader": "^8.0.0", 35 | "vue-cli-plugin-vuetify": "^2.0.5", 36 | "vue-template-compiler": "^2.6.11", 37 | "vuetify-loader": "^1.3.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /public/js/FuckWeixin.js: -------------------------------------------------------------------------------- 1 | function is_weixin() { 2 | var ua = navigator.userAgent.toLowerCase(); 3 | if (ua.match(/MicroMessenger/i) == "micromessenger" || ua.match(/ QQ/i) == " qq" ) { 4 | return true; 5 | } else { 6 | return false; 7 | } 8 | } 9 | var isWeixin = is_weixin(); 10 | // var isWeixin = false; 11 | var winHeight = typeof window.innerHeight != 'undefined' ? window.innerHeight : document.documentElement.clientHeight; 12 | 13 | function loadHtml() { 14 | var div = document.createElement('div'); 15 | div.id = 'weixin-tip'; 16 | // div.innerHTML = '微信打开'; 17 | div.innerHTML = '微信打开'; 18 | document.body.appendChild(div); 19 | } 20 | 21 | function loadStyleText(cssText) { 22 | var style = document.createElement('style'); 23 | style.rel = 'stylesheet'; 24 | style.type = 'text/css'; 25 | try { 26 | style.appendChild(document.createTextNode(cssText)); 27 | } catch (e) { 28 | style.styleSheet.cssText = cssText; //ie9以下 29 | } 30 | var head = document.getElementsByTagName("head")[0]; //head标签之间加上style样式 31 | head.appendChild(style); 32 | } 33 | 34 | var cssText = "img{width: 100%; height: auto;} #weixin-tip{position: fixed; left:0; top:0; background: rgba(0,0,0,0.8); filter:alpha(opacity=80); width: 100%; height:100%; z-index: 1050;} #weixin-tip p{text-align: center; margin-top: 10%; padding:0 5%;}"; 35 | if (isWeixin) { 36 | loadHtml(); 37 | loadStyleText(cssText); 38 | } 39 | -------------------------------------------------------------------------------- /public/img/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 18 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 南航指南 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 28 | 29 | 30 | 33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /public/js/AddToHomeScreen.min.js: -------------------------------------------------------------------------------- 1 | const closeBase64="iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAl0lEQVR4Ae2TMQ6DMBTFfA+kHqkSUmcKgd5/BIaEqsOfWqyILgx4jewl/3FxSm74q8ODlcQeL1Za769sFNKOXthYaBAS5Wci9ExH4AlG143xKxH6k0oiMbluTEQi9B5BEpW6fNtHH+CfQCEd13PcxVF9IHnC9V6us1qvTsjVScJ1SeicM53MbKZBaFlkcYmZO473aTghF2/X9XbQ39L36gAAAABJRU5ErkJggg==",template=document.createElement("template");template.innerHTML=`\n\n
添加到收藏吧!
\n
\n
\n\n`;export default class AddToHomeScreen extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.appendChild(template.content.cloneNode(!0)),this._closeClick=closeClick.bind(this)}connectedCallback(){const n=window.navigator.userAgent,e=!!n.match(/iPad/i)||!!n.match(/iPhone/i),t=!!n.match(/WebKit/i),o=e&&t&&!n.match(/CriOS/i)&&!n.match(/FxiOS/i);localStorage.isClosed||o&&!navigator.standalone&&(this.style.display="inline-block",this.shadowRoot.getElementById("close").addEventListener("click",this._closeClick))}disconnectedCallback(){this.shadowRoot.getElementById("close").removeEventListener("click",this._closeClick)}};function closeClick(){localStorage.isClosed="true",this.style.display="none"}window.customElements.define("add-to-home-screen",AddToHomeScreen); 2 | -------------------------------------------------------------------------------- /public/font/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('iconfont.eot?t=1588502909130'); /* IE9 */ 3 | src: url('iconfont.eot?t=1588502909130#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAQ0AAsAAAAACDwAAAPoAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqEAINWATYCJAMQCwoABCAFhG0HPxs/BxEVnPnIvsKmDNcDQC0MzwYkom4YTnwJ+SCBBAoAAAAAiKDar7fn7d7/exBAUESgEDzbKEBHoCJkIkwqikCyjr5BPcwE64JwgUl7Tbx2Qu2iuGhqa9OObStMhGJJbJeflpl/ngfChdBxvk5XmVbICtnOiLOl1oC5vsn/55jpMsHy22wuUUUZtD0f7Q1wlEADisy71rPjO6AD4hvGrryIzQQahposlplaO4MiM3oF4mREWAAoKYtcwwxF31EyMYtrakp1pXqDq/7vxz9TolCpJcbATYdNgsGin3rPEF1us89FkI7nAptGwmRk4mipZ78UxidLGsrfZDNQFBU/9Z76xfHfhrK9aIqp0fcfryI6GJoWxE5LJH7q2ZJYuwD5BL84MlTwQiYUNHAPP4FBGUysfEK0Wo3WwK5dW6Mbe3GcsxdT3pulG7k0t7N0zLNRRePJC69FvOCD6hzMfx+wj/P1RV9gAXL3I49WzBWD+luQuRm6IMTWUoUjlhbkhmP+lAuvWFt7+WZxFqpY7kG58JKNoOn2U6pmNHd2YaZ7kGfwhjgeRtPj8jtI6QdMKPgYoWq7M5ZSvZtEiZTP+XiyOzmI8pwLcZCrawA4uOMuzJiZPsldXtvkvREhJDkaUZObIpY63Tz0StlqLCJWxQUqNimWJb/e+/50lFsMHGJslO0yk82dohwE7e69DZLDVMyM/Vu4xIlX6Za/hAZTeXG4eQs50bvnsbnTMNxdZlB04fdR83Nczq1QYRFeNTE14FYwcsx/k22oVmUY0KqXZCWY90jvcHI2X9wJuXBLCttbgbWdrGdBe/dChLLDdjZP5XgOGKekGA/MQSEURoM8RzMTUxNNjCIssy3M81qRED2hpaIjp3uyrPCn+uPLB2an/CM1hu6X+32//8Z+BGdBu3QvLaTsp9PMpHSEKP93d+Ltx4SITvt/aV5vyRe4k4O8bVk7rX8mbS39udKWeVmVG9acZYUt0TKzswpvKauhgV+apqcfY+j6tGYSuj4xVDoNgaQYjczYyeCvaZoGHYqF0DDJYXpTL2wsch0TvQCE7t5Q6eo1JN19kRn7g5q+/tChe4yhYUesF2waG2a1YUwEc0ifYDJqlGWXVZB9RN1XCSflPuuK3JkQ+I6XTR2wQR5jSHfTgYgCxVTDHmyHVUXQMpWYiVOItKHrqrIXcjKqBytLMZQQKAdST8DIkIZyi4tV7uePkNarJLgmpyJ4hVjH1A98Dq8F8qBpWuVcyzWdGy0ghAIURmpgD1yoMuMEtOXtSigjHEWPaCvkokKqrcaZX1c/4RpoME7MUUWKHDW1/YnJ+5km0hVOUtPowQA=') format('woff2'), 5 | url('iconfont.woff?t=1588502909130') format('woff'), 6 | url('iconfont.ttf?t=1588502909130') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('iconfont.svg?t=1588502909130#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family: "iconfont" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-baidu:before { 19 | content: "\e6b6"; 20 | } 21 | 22 | .icon-google:before { 23 | content: "\e719"; 24 | } 25 | 26 | .icon-bing:before { 27 | content: "\e63f"; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /public/styles/main.min.css: -------------------------------------------------------------------------------- 1 | body{-webkit-user-select:none;user-select:none;overflow-x:hidden}#web_bg{background-position:center !important}header{box-shadow:rgba(0,0,0,0.2) 0 2px 5px !important;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}@font-face{font-family:"iconfont";src:url("/font/iconfont.eot");src:url("/font/iconfont.eot?#iefix") format("embedded-opentype"),url("/font/iconfont.woff") format("woff"),url("/font/iconfont.ttf") format("truetype"),url("/font/iconfont.svg#iconfont") format("svg")}.iconfont{font-family:"iconfont" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}#web_bg{position:absolute;top:0;left:0;height:100%;width:100%;background-position:center 0;background-repeat:no-repeat;background-attachment:fixed;background-size:cover;-webkit-background-size:cover;-o-background-size:cover;zoom:1}.searchOpt{border-radius:5px !important;width:76px !important}.logo-item{width:210px;height:70px}.panels,.panel{background:rgba(255,255,255,0.7) !important}.v-toolbar__title{cursor:default}.v-responsive__content{cursor:pointer}.v-input__slot{box-shadow:rgba(0,0,0,0.1) 0 2px 15px}.v-input__slot:hover{box-shadow:rgba(0,0,0,0.2) 0 2px 15px}.v-expansion-panels{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.v-expansion-panel{-webkit-transition:margin,border-bottom-left-radius,border-bottom-right-radius,background-color .2s cubic-bezier(0.4,0,1,1) !important;transition:margin,border-bottom-left-radius,border-bottom-right-radius,background-color .2s cubic-bezier(0.4,0,1,1) !important}.v-expansion-panel.panels{background-color:rgba(255,255,255,0.9) !important}.v-expansion-panel.panels:hover{background-color:rgba(255,255,255,1) !important}.v-expansion-panel.panels.v-expansion-panel--active.v-item--active{background-color:rgba(255,255,255,0.75) !important}.panel.flex.d-flex.flex-column.v-card.v-card--link.v-card--outlined.v-sheet.v-sheet--tile.theme--light{transition:all .25s}.panel.flex.d-flex.flex-column.v-card.v-card--link.v-card--outlined.v-sheet.v-sheet--tile.theme--light:hover{background-color:white !important}.text-center.white--text.col.col-12{font-size:small;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}.text-center.white--text.col.col-12 a{transition:all .25s}.text-center.white--text.col.col-12 a:hover{color:#87b4e6 !important}@supports(-webkit-backdrop-filter:blur(10px)) or(backdrop-filter:blur(10px)){.v-input__slot{background-color:rgba(255,255,255,0.5) !important;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.v-input__slot:hover{background-color:rgba(255,255,255,0.7) !important;box-shadow:rgba(0,0,0,0.1) 0 2px 15px}.v-expansion-panel.panels.v-expansion-panel--active.v-item--active{-webkit-transition:none;transition:none}.v-expansion-panel.panels:hover{background-color:rgba(255,255,255,1) !important}} 2 | -------------------------------------------------------------------------------- /public/js/AddToHomeScreen.js: -------------------------------------------------------------------------------- 1 | const closeBase64 = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAl0lEQVR4Ae2TMQ6DMBTFfA+kHqkSUmcKgd5/BIaEqsOfWqyILgx4jewl/3FxSm74q8ODlcQeL1Za769sFNKOXthYaBAS5Wci9ExH4AlG143xKxH6k0oiMbluTEQi9B5BEpW6fNtHH+CfQCEd13PcxVF9IHnC9V6us1qvTsjVScJ1SeicM53MbKZBaFlkcYmZO473aTghF2/X9XbQ39L36gAAAABJRU5ErkJggg==' 2 | 3 | const template = document.createElement('template'); 4 | template.innerHTML = ` 5 | 64 |
添加到收藏吧!
65 |
66 |
67 | 68 | `; 69 | 70 | export default class AddToHomeScreen extends HTMLElement { 71 | constructor() { 72 | super(); 73 | this.attachShadow({mode: 'open'}); 74 | this.shadowRoot.appendChild(template.content.cloneNode(true)); 75 | this._closeClick = closeClick.bind(this); 76 | } 77 | 78 | connectedCallback() { 79 | const ua = window.navigator.userAgent; 80 | const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i); 81 | const webkit = !!ua.match(/WebKit/i); 82 | const iOSSafari = iOS && webkit && !ua.match(/CriOS/i) && !ua.match(/FxiOS/i); 83 | const isClosed = localStorage.isClosed; 84 | if(isClosed) return; 85 | if (iOSSafari && !navigator.standalone) { 86 | this.style.display = 'inline-block'; 87 | this.shadowRoot.getElementById('close').addEventListener('click', this._closeClick); 88 | } 89 | } 90 | 91 | disconnectedCallback() { 92 | this.shadowRoot.getElementById('close').removeEventListener('click', this._closeClick); 93 | } 94 | } 95 | 96 | function closeClick() { 97 | localStorage.isClosed = 'true'; 98 | this.style.display = 'none'; 99 | } 100 | 101 | window.customElements.define('add-to-home-screen', AddToHomeScreen); 102 | -------------------------------------------------------------------------------- /public/font/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /public/font/iconfont.js: -------------------------------------------------------------------------------- 1 | !function(d){var e,c='',t=(e=document.getElementsByTagName("script"))[e.length-1].getAttribute("data-injectcss");if(t&&!d.__iconfont__svg__cssinject__){d.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(e){console&&console.log(e)}}!function(e){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(e,0);else{var t=function(){document.removeEventListener("DOMContentLoaded",t,!1),e()};document.addEventListener("DOMContentLoaded",t,!1)}else document.attachEvent&&(o=e,i=d.document,l=!1,(c=function(){try{i.documentElement.doScroll("left")}catch(e){return void setTimeout(c,50)}n()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,n())});function n(){l||(l=!0,o())}var o,i,l,c}(function(){var e,t,n,o,i,l;(e=document.createElement("div")).innerHTML=c,c=null,(t=e.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",n=t,(o=document.body).firstChild?(i=n,(l=o.firstChild).parentNode.insertBefore(i,l)):o.appendChild(n))})}(window); -------------------------------------------------------------------------------- /public/styles/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | -webkit-user-select: none; 3 | user-select: none; 4 | overflow-x: hidden; 5 | } 6 | #web_bg { 7 | background-position: center !important; 8 | } 9 | header { 10 | box-shadow: rgba(0, 0, 0, 0.2) 0 2px 5px !important; 11 | -webkit-backdrop-filter: blur(20px); 12 | backdrop-filter: blur(20px); 13 | } 14 | /* 不使用绝对路径而使用相对路径,避免部署在非根目录时出现的问题 */ 15 | @font-face { 16 | font-family: "iconfont"; 17 | src: url("../font/iconfont.eot"); 18 | src: url("../font/iconfont.eot?#iefix") format("embedded-opentype"), 19 | url("../font/iconfont.woff") format("woff"), 20 | url("../font/iconfont.ttf") format("truetype"), 21 | url("../font/iconfont.svg#iconfont") format("svg"); 22 | } 23 | .iconfont { 24 | font-family: "iconfont" !important; 25 | font-size: 16px; 26 | font-style: normal; 27 | -webkit-font-smoothing: antialiased; 28 | -webkit-text-stroke-width: 0.2px; 29 | -moz-osx-font-smoothing: grayscale; 30 | } 31 | #web_bg { 32 | position: absolute; 33 | top: 0; 34 | left: 0; 35 | height: 100%; 36 | width: 100%; 37 | background-position: center 0; 38 | background-repeat: no-repeat; 39 | background-attachment: fixed; 40 | background-size: cover; 41 | /* 兼容Webkit内核浏览器如Chrome和Safari */ 42 | -webkit-background-size: cover; 43 | /* 兼容Opera */ 44 | -o-background-size: cover; 45 | zoom: 1; 46 | } 47 | .searchOpt { 48 | border-radius: 5px!important; 49 | width: 76px!important; 50 | } 51 | .logo-item { 52 | width: 210px; 53 | height: 70px; 54 | } 55 | .panels, 56 | .panel { 57 | background: rgba(255, 255, 255, 0.7) !important; 58 | } 59 | .v-toolbar__title { 60 | cursor: default; 61 | } 62 | .v-responsive__content { 63 | cursor: pointer; 64 | } 65 | .v-input__slot { 66 | box-shadow: rgba(0, 0, 0, 0.1) 0 2px 15px; 67 | } 68 | .v-input__slot:hover { 69 | box-shadow: rgba(0, 0, 0, 0.2) 0 2px 15px; 70 | } 71 | /*.v-input__slot:focus { 72 | box-shadow: rgba(0,0,0,.2) 0 2px 20px; 73 | }*/ 74 | 75 | /* 折叠面板 */ 76 | .v-expansion-panels { 77 | -webkit-backdrop-filter: blur(3px); 78 | backdrop-filter: blur(3px); 79 | } 80 | .v-expansion-panel { 81 | -webkit-transition: margin, border-bottom-left-radius, border-bottom-right-radius, background-color .2s cubic-bezier(0.4, 0, 1, 1) !important; 82 | transition: margin, border-bottom-left-radius, border-bottom-right-radius, background-color .2s cubic-bezier(0.4, 0, 1, 1) !important; 83 | } 84 | .v-expansion-panel.panels { 85 | background-color: rgba(255, 255, 255, 0.9) !important; 86 | } 87 | .v-expansion-panel.panels:hover { 88 | background-color: rgba(255, 255, 255, 1) !important; 89 | } 90 | .v-expansion-panel.panels.v-expansion-panel--active.v-item--active { 91 | background-color: rgba(255, 255, 255, 0.75) !important; 92 | } 93 | .panel.flex.d-flex.flex-column.v-card.v-card--link.v-card--outlined.v-sheet.v-sheet--tile.theme--light { 94 | transition: all 0.25s; 95 | } 96 | .panel.flex.d-flex.flex-column.v-card.v-card--link.v-card--outlined.v-sheet.v-sheet--tile.theme--light:hover { 97 | background-color: white !important; 98 | } 99 | 100 | .ma-0.flex { 101 | /* overflow: hidden; 102 | white-space: nowrap; 103 | text-overflow: ellipsis; */ 104 | } 105 | .text-center.white--text.col.col-12 { 106 | font-size: small; 107 | -webkit-backdrop-filter: blur(20px); 108 | backdrop-filter: blur(20px); 109 | } 110 | .text-center.white--text.col.col-12 a { 111 | transition: all 0.25s; 112 | } 113 | .text-center.white--text.col.col-12 a:hover { 114 | color: rgb(135, 180, 230) !important; 115 | } 116 | 117 | @supports (-webkit-backdrop-filter: blur(10px)) or (backdrop-filter: blur(10px)) { 118 | .v-input__slot { 119 | background-color: rgba(255, 255, 255, 0.5) !important; 120 | -webkit-backdrop-filter: blur(10px); 121 | backdrop-filter: blur(10px); 122 | } 123 | .v-input__slot:hover { 124 | background-color: rgba(255, 255, 255, 0.7) !important; 125 | box-shadow: rgba(0, 0, 0, 0.1) 0 2px 15px; 126 | } 127 | /*.v-input__slot:focus { 128 | background-color: rgba(255,255,255,.9) !important; 129 | box-shadow: rgba(0,0,0,.1) 0 2px 15px; 130 | } 131 | .v-expansion-panel::before { 132 | -webkit-box-shadow: transparent 0 0 0 !important; 133 | box-shadow: transparent 0 0 0 !important; 134 | }*/ 135 | .v-expansion-panel.panels.v-expansion-panel--active.v-item--active { 136 | /* transition-delay: 0.25s; 137 | background-color: rgba(255, 255, 255, 0.5) !important; */ 138 | -webkit-transition: none; 139 | transition: none; 140 | } 141 | .v-expansion-panel.panels:hover { 142 | background-color: rgba(255, 255, 255, 1) !important; 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /public/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "萌新必读", 4 | "items": [ 5 | { 6 | "name": "南航学工", 7 | "link": "https://xg.nuaa.edu.cn", 8 | "description": "南航学工系统,涉及校园生活的方方面面" 9 | }, 10 | { 11 | "name": "缴费网站", 12 | "link": "http://jiaofei.nuaa.edu.cn", 13 | "description": "交学费和住宿费的网站" 14 | } 15 | ] 16 | }, 17 | { 18 | "title": "校园生活", 19 | "items": [ 20 | { 21 | "name": "师生服务大厅", 22 | "link": "http://service.nuaa.edu.cn/", 23 | "description": "各种服务事项" 24 | }, 25 | { 26 | "name": "校园网址导航", 27 | "link": "https://abc.nuaa.edu.cn/", 28 | "description": "不知道需要的部门链接在哪里时点这里!" 29 | }, 30 | { 31 | "name": "南航通讯录", 32 | "link": "https://backend.nuaaweyes.com/phonebook/index_mod_1.html", 33 | "description": "校内各部处联系电话" 34 | }, 35 | { 36 | "name": "研究生院学工通讯录", 37 | "link": "http://www.graduate.nuaa.edu.cn/2014/0507/c2135a54120/page.htm", 38 | "description": "实在不行问问辅导员" 39 | }, 40 | { 41 | "name": "户籍管理", 42 | "link": "http://bwc.nuaa.edu.cn/6072/list.htm", 43 | "description": "管理户口迁移等等事务" 44 | }, 45 | { 46 | "name": "A2OS BBS", 47 | "link": "https://bbs.a2os.club/", 48 | "description": "纸飞机之后尝试新建的论坛,时代的眼泪" 49 | }, 50 | { 51 | "name": "健康打卡", 52 | "link": "https://m.nuaa.edu.cn/ncov/wap/default/index", 53 | "description": "每日健康打卡web页面" 54 | } 55 | ] 56 | }, 57 | { 58 | "title": "学习科研", 59 | "items": [ 60 | { 61 | "name": "教务处", 62 | "link": "http://aao.nuaa.edu.cn/", 63 | "description": "各种教务通知公告在这里发布~" 64 | }, 65 | { 66 | "name": "研究生院", 67 | "link": "http://www.graduate.nuaa.edu.cn/", 68 | "description": "研究生的各种通知公告、学术信息等在这里发布~" 69 | }, 70 | { 71 | "name": "本科生教务系统", 72 | "link": "http://aao-eas.nuaa.edu.cn/eams/login.action", 73 | "description": "本科生新版教务系统" 74 | }, 75 | { 76 | "name": "研究生学籍与教学管理系统", 77 | "link": "http://graduate.nuaa.edu.cn/gmis5/home/stulogin", 78 | "description": "研究生版教务系统" 79 | }, 80 | { 81 | "name": "图书馆服务", 82 | "link": "http://lib.nuaa.edu.cn/", 83 | "description": "图书馆热门服务" 84 | }, 85 | { 86 | "name": "CARSI资源共享", 87 | "link": "http://authserver.nuaa.edu.cn/authserver/login?service=https%3A%2F%2Fidp.nuaa.edu.cn%2Fidp%2FAuthn%2FExternal%3Fconversation%3De2s1&entityId=https%3A%2F%2Fds.carsi.edu.cn%2Fshibboleth-sp%2Fcarsifed", 88 | "description": "教育网联邦认证与资源共享基础设施,可以在校外使用图书馆电子资源" 89 | }, 90 | { 91 | "name": "海外学习交换项目", 92 | "link": "http://cie.nuaa.edu.cn/11094/list.htm", 93 | "description": "海外交流交换相关信息发布" 94 | }, 95 | { 96 | "name": "高性能计算中心", 97 | "link": "http://hpc.nuaa.edu.cn/", 98 | "description": "电脑不够算,快找HPC" 99 | }, 100 | { 101 | "name": "飞天云课堂", 102 | "link": "http://ft.nuaa.edu.cn/", 103 | "description": "期待上线更多在线课程" 104 | } 105 | ] 106 | }, 107 | { 108 | "title": "信息服务", 109 | "items": [ 110 | { 111 | "name": "i南航", 112 | "link": "https://app.nuaa.edu.cn/", 113 | "description": "官方出品的 APP,集成各类常用功能" 114 | }, 115 | { 116 | "name": "智慧门户", 117 | "link": "http://i.nuaa.edu.cn/web/", 118 | "description": "南航一站式信息服务中心,你想要的这里都有" 119 | }, 120 | { 121 | "name": "南航邮箱", 122 | "link": "https://mail.nuaa.edu.cn/", 123 | "description": "全日制学生人手一个,可以用来薅免费教育版软件、教育优惠" 124 | }, 125 | { 126 | "name": "南航云盘", 127 | "link": "https://pan.nuaa.edu.cn/", 128 | "description": "学校提供的文件存储服务,校内传输速度不错,拥有大量软件资源(py管理员可以获取权限)" 129 | }, 130 | { 131 | "name": "正版软件", 132 | "link": "https://kms.nuaa.edu.cn/", 133 | "description": "学校购买的常用正版系统和软件,需要校园网才能访问" 134 | }, 135 | { 136 | "name": "Eduroam", 137 | "link": "https://xxhc.nuaa.edu.cn/_t707/2020/1202/c205a223666/page.htm", 138 | "description": "全球教育科研机构无线网络漫游" 139 | }, 140 | { 141 | "name": "工作招聘", 142 | "link": "http://nuaa.91job.org.cn/", 143 | "description": "就业招聘会及宣讲会信息" 144 | } 145 | ] 146 | }, 147 | { 148 | "title": "趣味南航", 149 | "items": [ 150 | { 151 | "name": "采购与招投标公告", 152 | "link": "http://cwc.nuaa.edu.cn/14782/list.htm", 153 | "description": "来看看学校最近又买了啥~" 154 | } 155 | ] 156 | }, 157 | { 158 | "title": "学生项目", 159 | "items": [ 160 | { 161 | "name": "Asuri-wiki", 162 | "link": "https://ctf.nuaa.today/", 163 | "description": "对 CTF 比赛的介绍" 164 | }, 165 | { 166 | "name": "NUAA AnyKnew", 167 | "link": "https://abc.nuaa.today", 168 | "description": "南航人的专属课程表 APP" 169 | }, 170 | { 171 | "name": "南京航空航天大学(非官方)学位论文 LaTeX 模板", 172 | "link": "https://github.com/nuaatug/nuaathesis", 173 | "description": "学位论文的Latex模板" 174 | } 175 | ] 176 | }, 177 | { 178 | "title": "技术组织", 179 | "items": [ 180 | { 181 | "name": "程序设计竞赛交流群", 182 | "link": "https://jq.qq.com/?_wv=1027&k=Fbo2r5iE", 183 | "description": "希望参加算法竞赛的同学看这里~" 184 | }, 185 | { 186 | "name": "信息安全战队", 187 | "link": "https://www.asuri.org/", 188 | "description": "南京航空航天大学信息安全 Asuri 战队,希望参加 CTF 的同学看过来~" 189 | }, 190 | { 191 | "name": "微软学生俱乐部", 192 | "link": "https://github.com/nuaamsc", 193 | "description": "南京航空航天大学微软学生俱乐部" 194 | }, 195 | { 196 | "name": "NUAA Open Source", 197 | "link": "https://a2os.club/", 198 | "description": "南京航空航天大学开源技术小组" 199 | } 200 | ] 201 | }, 202 | { 203 | "title": "投稿建议", 204 | "items": [ 205 | { 206 | "name": "讨论群 - QQ", 207 | "link": "https://jq.qq.com/?_wv=1027&k=HGJTtLlB", 208 | "description": "加入讨论群提出意见建议!" 209 | }, 210 | { 211 | "name": "讨论群 - Telegram", 212 | "link": "https://t.me/NUAAOpenSource", 213 | "description": "加入讨论群提出意见建议!" 214 | }, 215 | { 216 | "name": "投稿与建议", 217 | "link": "https://github.com/NUAA-Open-Source/life-in-nuaa/issues", 218 | "description": "在这里新建 issues" 219 | }, 220 | { 221 | "name": "项目 GitHub 地址", 222 | "link": "https://github.com/NUAA-Open-Source/life-in-nuaa", 223 | "description": "网站的源代码存放于此" 224 | } 225 | ] 226 | } 227 | ] 228 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 149 | 150 | 255 | 256 | 263 | -------------------------------------------------------------------------------- /public/font/demo_index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IconFont Demo 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |

19 | 29 |
30 |
31 |
    32 | 33 |
  • 34 | 35 |
    baidu
    36 |
    
    37 |
  • 38 | 39 |
  • 40 | 41 |
    google
    42 |
    
    43 |
  • 44 | 45 |
  • 46 | 47 |
    bing
    48 |
    
    49 |
  • 50 | 51 |
52 |
53 |

Unicode 引用

54 |
55 | 56 |

Unicode 是字体在网页端最原始的应用方式,特点是:

57 |
    58 |
  • 兼容性最好,支持 IE6+,及所有现代浏览器。
  • 59 |
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • 60 |
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • 61 |
62 |
63 |

注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式

64 |
65 |

Unicode 使用步骤如下:

66 |

第一步:拷贝项目下面生成的 @font-face

67 |
@font-face {
 69 |   font-family: 'iconfont';
 70 |   src: url('iconfont.eot');
 71 |   src: url('iconfont.eot?#iefix') format('embedded-opentype'),
 72 |       url('iconfont.woff2') format('woff2'),
 73 |       url('iconfont.woff') format('woff'),
 74 |       url('iconfont.ttf') format('truetype'),
 75 |       url('iconfont.svg#iconfont') format('svg');
 76 | }
 77 | 
78 |

第二步:定义使用 iconfont 的样式

79 |
.iconfont {
 81 |   font-family: "iconfont" !important;
 82 |   font-size: 16px;
 83 |   font-style: normal;
 84 |   -webkit-font-smoothing: antialiased;
 85 |   -moz-osx-font-smoothing: grayscale;
 86 | }
 87 | 
88 |

第三步:挑选相应图标并获取字体编码,应用于页面

89 |
 90 | <span class="iconfont">&#x33;</span>
 92 | 
93 |
94 |

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

95 |
96 |
97 |
98 |
99 |
    100 | 101 |
  • 102 | 103 |
    104 | baidu 105 |
    106 |
    .icon-baidu 107 |
    108 |
  • 109 | 110 |
  • 111 | 112 |
    113 | google 114 |
    115 |
    .icon-google 116 |
    117 |
  • 118 | 119 |
  • 120 | 121 |
    122 | bing 123 |
    124 |
    .icon-bing 125 |
    126 |
  • 127 | 128 |
129 |
130 |

font-class 引用

131 |
132 | 133 |

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

134 |

与 Unicode 使用方式相比,具有如下特点:

135 |
    136 |
  • 兼容性良好,支持 IE8+,及所有现代浏览器。
  • 137 |
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • 138 |
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • 139 |
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • 140 |
141 |

使用步骤如下:

142 |

第一步:引入项目下面生成的 fontclass 代码:

143 |
<link rel="stylesheet" href="./iconfont.css">
144 | 
145 |

第二步:挑选相应图标并获取类名,应用于页面:

146 |
<span class="iconfont icon-xxx"></span>
147 | 
148 |
149 |

" 150 | iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

151 |
152 |
153 |
154 |
155 |
    156 | 157 |
  • 158 | 161 |
    baidu
    162 |
    #icon-baidu
    163 |
  • 164 | 165 |
  • 166 | 169 |
    google
    170 |
    #icon-google
    171 |
  • 172 | 173 |
  • 174 | 177 |
    bing
    178 |
    #icon-bing
    179 |
  • 180 | 181 |
182 |
183 |

Symbol 引用

184 |
185 | 186 |

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 187 | 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

188 |
    189 |
  • 支持多色图标了,不再受单色限制。
  • 190 |
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • 191 |
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • 192 |
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • 193 |
194 |

使用步骤如下:

195 |

第一步:引入项目下面生成的 symbol 代码:

196 |
<script src="./iconfont.js"></script>
197 | 
198 |

第二步:加入通用 CSS 代码(引入一次就行):

199 |
<style>
200 | .icon {
201 |   width: 1em;
202 |   height: 1em;
203 |   vertical-align: -0.15em;
204 |   fill: currentColor;
205 |   overflow: hidden;
206 | }
207 | </style>
208 | 
209 |

第三步:挑选相应图标并获取类名,应用于页面:

210 |
<svg class="icon" aria-hidden="true">
211 |   <use xlink:href="#icon-xxx"></use>
212 | </svg>
213 | 
214 |
215 |
216 | 217 |
218 |
219 | 238 | 239 | 240 | -------------------------------------------------------------------------------- /public/font/demo.css: -------------------------------------------------------------------------------- 1 | /* Logo 字体 */ 2 | @font-face { 3 | font-family: "iconfont logo"; 4 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); 5 | src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), 6 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), 7 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), 8 | url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); 9 | } 10 | 11 | .logo { 12 | font-family: "iconfont logo"; 13 | font-size: 160px; 14 | font-style: normal; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | } 18 | 19 | /* tabs */ 20 | .nav-tabs { 21 | position: relative; 22 | } 23 | 24 | .nav-tabs .nav-more { 25 | position: absolute; 26 | right: 0; 27 | bottom: 0; 28 | height: 42px; 29 | line-height: 42px; 30 | color: #666; 31 | } 32 | 33 | #tabs { 34 | border-bottom: 1px solid #eee; 35 | } 36 | 37 | #tabs li { 38 | cursor: pointer; 39 | width: 100px; 40 | height: 40px; 41 | line-height: 40px; 42 | text-align: center; 43 | font-size: 16px; 44 | border-bottom: 2px solid transparent; 45 | position: relative; 46 | z-index: 1; 47 | margin-bottom: -1px; 48 | color: #666; 49 | } 50 | 51 | 52 | #tabs .active { 53 | border-bottom-color: #f00; 54 | color: #222; 55 | } 56 | 57 | .tab-container .content { 58 | display: none; 59 | } 60 | 61 | /* 页面布局 */ 62 | .main { 63 | padding: 30px 100px; 64 | width: 960px; 65 | margin: 0 auto; 66 | } 67 | 68 | .main .logo { 69 | color: #333; 70 | text-align: left; 71 | margin-bottom: 30px; 72 | line-height: 1; 73 | height: 110px; 74 | margin-top: -50px; 75 | overflow: hidden; 76 | *zoom: 1; 77 | } 78 | 79 | .main .logo a { 80 | font-size: 160px; 81 | color: #333; 82 | } 83 | 84 | .helps { 85 | margin-top: 40px; 86 | } 87 | 88 | .helps pre { 89 | padding: 20px; 90 | margin: 10px 0; 91 | border: solid 1px #e7e1cd; 92 | background-color: #fffdef; 93 | overflow: auto; 94 | } 95 | 96 | .icon_lists { 97 | width: 100% !important; 98 | overflow: hidden; 99 | *zoom: 1; 100 | } 101 | 102 | .icon_lists li { 103 | width: 100px; 104 | margin-bottom: 10px; 105 | margin-right: 20px; 106 | text-align: center; 107 | list-style: none !important; 108 | cursor: default; 109 | } 110 | 111 | .icon_lists li .code-name { 112 | line-height: 1.2; 113 | } 114 | 115 | .icon_lists .icon { 116 | display: block; 117 | height: 100px; 118 | line-height: 100px; 119 | font-size: 42px; 120 | margin: 10px auto; 121 | color: #333; 122 | -webkit-transition: font-size 0.25s linear, width 0.25s linear; 123 | -moz-transition: font-size 0.25s linear, width 0.25s linear; 124 | transition: font-size 0.25s linear, width 0.25s linear; 125 | } 126 | 127 | .icon_lists .icon:hover { 128 | font-size: 100px; 129 | } 130 | 131 | .icon_lists .svg-icon { 132 | /* 通过设置 font-size 来改变图标大小 */ 133 | width: 1em; 134 | /* 图标和文字相邻时,垂直对齐 */ 135 | vertical-align: -0.15em; 136 | /* 通过设置 color 来改变 SVG 的颜色/fill */ 137 | fill: currentColor; 138 | /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 139 | normalize.css 中也包含这行 */ 140 | overflow: hidden; 141 | } 142 | 143 | .icon_lists li .name, 144 | .icon_lists li .code-name { 145 | color: #666; 146 | } 147 | 148 | /* markdown 样式 */ 149 | .markdown { 150 | color: #666; 151 | font-size: 14px; 152 | line-height: 1.8; 153 | } 154 | 155 | .highlight { 156 | line-height: 1.5; 157 | } 158 | 159 | .markdown img { 160 | vertical-align: middle; 161 | max-width: 100%; 162 | } 163 | 164 | .markdown h1 { 165 | color: #404040; 166 | font-weight: 500; 167 | line-height: 40px; 168 | margin-bottom: 24px; 169 | } 170 | 171 | .markdown h2, 172 | .markdown h3, 173 | .markdown h4, 174 | .markdown h5, 175 | .markdown h6 { 176 | color: #404040; 177 | margin: 1.6em 0 0.6em 0; 178 | font-weight: 500; 179 | clear: both; 180 | } 181 | 182 | .markdown h1 { 183 | font-size: 28px; 184 | } 185 | 186 | .markdown h2 { 187 | font-size: 22px; 188 | } 189 | 190 | .markdown h3 { 191 | font-size: 16px; 192 | } 193 | 194 | .markdown h4 { 195 | font-size: 14px; 196 | } 197 | 198 | .markdown h5 { 199 | font-size: 12px; 200 | } 201 | 202 | .markdown h6 { 203 | font-size: 12px; 204 | } 205 | 206 | .markdown hr { 207 | height: 1px; 208 | border: 0; 209 | background: #e9e9e9; 210 | margin: 16px 0; 211 | clear: both; 212 | } 213 | 214 | .markdown p { 215 | margin: 1em 0; 216 | } 217 | 218 | .markdown>p, 219 | .markdown>blockquote, 220 | .markdown>.highlight, 221 | .markdown>ol, 222 | .markdown>ul { 223 | width: 80%; 224 | } 225 | 226 | .markdown ul>li { 227 | list-style: circle; 228 | } 229 | 230 | .markdown>ul li, 231 | .markdown blockquote ul>li { 232 | margin-left: 20px; 233 | padding-left: 4px; 234 | } 235 | 236 | .markdown>ul li p, 237 | .markdown>ol li p { 238 | margin: 0.6em 0; 239 | } 240 | 241 | .markdown ol>li { 242 | list-style: decimal; 243 | } 244 | 245 | .markdown>ol li, 246 | .markdown blockquote ol>li { 247 | margin-left: 20px; 248 | padding-left: 4px; 249 | } 250 | 251 | .markdown code { 252 | margin: 0 3px; 253 | padding: 0 5px; 254 | background: #eee; 255 | border-radius: 3px; 256 | } 257 | 258 | .markdown strong, 259 | .markdown b { 260 | font-weight: 600; 261 | } 262 | 263 | .markdown>table { 264 | border-collapse: collapse; 265 | border-spacing: 0px; 266 | empty-cells: show; 267 | border: 1px solid #e9e9e9; 268 | width: 95%; 269 | margin-bottom: 24px; 270 | } 271 | 272 | .markdown>table th { 273 | white-space: nowrap; 274 | color: #333; 275 | font-weight: 600; 276 | } 277 | 278 | .markdown>table th, 279 | .markdown>table td { 280 | border: 1px solid #e9e9e9; 281 | padding: 8px 16px; 282 | text-align: left; 283 | } 284 | 285 | .markdown>table th { 286 | background: #F7F7F7; 287 | } 288 | 289 | .markdown blockquote { 290 | font-size: 90%; 291 | color: #999; 292 | border-left: 4px solid #e9e9e9; 293 | padding-left: 0.8em; 294 | margin: 1em 0; 295 | } 296 | 297 | .markdown blockquote p { 298 | margin: 0; 299 | } 300 | 301 | .markdown .anchor { 302 | opacity: 0; 303 | transition: opacity 0.3s ease; 304 | margin-left: 8px; 305 | } 306 | 307 | .markdown .waiting { 308 | color: #ccc; 309 | } 310 | 311 | .markdown h1:hover .anchor, 312 | .markdown h2:hover .anchor, 313 | .markdown h3:hover .anchor, 314 | .markdown h4:hover .anchor, 315 | .markdown h5:hover .anchor, 316 | .markdown h6:hover .anchor { 317 | opacity: 1; 318 | display: inline-block; 319 | } 320 | 321 | .markdown>br, 322 | .markdown>p>br { 323 | clear: both; 324 | } 325 | 326 | 327 | .hljs { 328 | display: block; 329 | background: white; 330 | padding: 0.5em; 331 | color: #333333; 332 | overflow-x: auto; 333 | } 334 | 335 | .hljs-comment, 336 | .hljs-meta { 337 | color: #969896; 338 | } 339 | 340 | .hljs-string, 341 | .hljs-variable, 342 | .hljs-template-variable, 343 | .hljs-strong, 344 | .hljs-emphasis, 345 | .hljs-quote { 346 | color: #df5000; 347 | } 348 | 349 | .hljs-keyword, 350 | .hljs-selector-tag, 351 | .hljs-type { 352 | color: #a71d5d; 353 | } 354 | 355 | .hljs-literal, 356 | .hljs-symbol, 357 | .hljs-bullet, 358 | .hljs-attribute { 359 | color: #0086b3; 360 | } 361 | 362 | .hljs-section, 363 | .hljs-name { 364 | color: #63a35c; 365 | } 366 | 367 | .hljs-tag { 368 | color: #333333; 369 | } 370 | 371 | .hljs-title, 372 | .hljs-attr, 373 | .hljs-selector-id, 374 | .hljs-selector-class, 375 | .hljs-selector-attr, 376 | .hljs-selector-pseudo { 377 | color: #795da3; 378 | } 379 | 380 | .hljs-addition { 381 | color: #55a532; 382 | background-color: #eaffea; 383 | } 384 | 385 | .hljs-deletion { 386 | color: #bd2c00; 387 | background-color: #ffecec; 388 | } 389 | 390 | .hljs-link { 391 | text-decoration: underline; 392 | } 393 | 394 | /* 代码高亮 */ 395 | /* PrismJS 1.15.0 396 | https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ 397 | /** 398 | * prism.js default theme for JavaScript, CSS and HTML 399 | * Based on dabblet (http://dabblet.com) 400 | * @author Lea Verou 401 | */ 402 | code[class*="language-"], 403 | pre[class*="language-"] { 404 | color: black; 405 | background: none; 406 | text-shadow: 0 1px white; 407 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 408 | text-align: left; 409 | white-space: pre; 410 | word-spacing: normal; 411 | word-break: normal; 412 | word-wrap: normal; 413 | line-height: 1.5; 414 | 415 | -moz-tab-size: 4; 416 | -o-tab-size: 4; 417 | tab-size: 4; 418 | 419 | -webkit-hyphens: none; 420 | -moz-hyphens: none; 421 | -ms-hyphens: none; 422 | hyphens: none; 423 | } 424 | 425 | pre[class*="language-"]::-moz-selection, 426 | pre[class*="language-"] ::-moz-selection, 427 | code[class*="language-"]::-moz-selection, 428 | code[class*="language-"] ::-moz-selection { 429 | text-shadow: none; 430 | background: #b3d4fc; 431 | } 432 | 433 | pre[class*="language-"]::selection, 434 | pre[class*="language-"] ::selection, 435 | code[class*="language-"]::selection, 436 | code[class*="language-"] ::selection { 437 | text-shadow: none; 438 | background: #b3d4fc; 439 | } 440 | 441 | @media print { 442 | 443 | code[class*="language-"], 444 | pre[class*="language-"] { 445 | text-shadow: none; 446 | } 447 | } 448 | 449 | /* Code blocks */ 450 | pre[class*="language-"] { 451 | padding: 1em; 452 | margin: .5em 0; 453 | overflow: auto; 454 | } 455 | 456 | :not(pre)>code[class*="language-"], 457 | pre[class*="language-"] { 458 | background: #f5f2f0; 459 | } 460 | 461 | /* Inline code */ 462 | :not(pre)>code[class*="language-"] { 463 | padding: .1em; 464 | border-radius: .3em; 465 | white-space: normal; 466 | } 467 | 468 | .token.comment, 469 | .token.prolog, 470 | .token.doctype, 471 | .token.cdata { 472 | color: slategray; 473 | } 474 | 475 | .token.punctuation { 476 | color: #999; 477 | } 478 | 479 | .namespace { 480 | opacity: .7; 481 | } 482 | 483 | .token.property, 484 | .token.tag, 485 | .token.boolean, 486 | .token.number, 487 | .token.constant, 488 | .token.symbol, 489 | .token.deleted { 490 | color: #905; 491 | } 492 | 493 | .token.selector, 494 | .token.attr-name, 495 | .token.string, 496 | .token.char, 497 | .token.builtin, 498 | .token.inserted { 499 | color: #690; 500 | } 501 | 502 | .token.operator, 503 | .token.entity, 504 | .token.url, 505 | .language-css .token.string, 506 | .style .token.string { 507 | color: #9a6e3a; 508 | background: hsla(0, 0%, 100%, .5); 509 | } 510 | 511 | .token.atrule, 512 | .token.attr-value, 513 | .token.keyword { 514 | color: #07a; 515 | } 516 | 517 | .token.function, 518 | .token.class-name { 519 | color: #DD4A68; 520 | } 521 | 522 | .token.regex, 523 | .token.important, 524 | .token.variable { 525 | color: #e90; 526 | } 527 | 528 | .token.important, 529 | .token.bold { 530 | font-weight: bold; 531 | } 532 | 533 | .token.italic { 534 | font-style: italic; 535 | } 536 | 537 | .token.entity { 538 | cursor: help; 539 | } 540 | -------------------------------------------------------------------------------- /public/data_origin.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "萌新必读", 4 | "items": [ 5 | { 6 | "name": "新生必看", 7 | "link": "https://www.yuque.com/ff282l/gm8kgc/ecpz8l", 8 | "description": "看了这些基本不用到处问人了" 9 | }, 10 | { 11 | "name": "统一身份认证", 12 | "link": "https://authserver.nju.edu.cn/authserver/login", 13 | "description": "初始账户学工号,初始密码身份证(全部或后6位)" 14 | }, 15 | { 16 | "name": "校园网登录", 17 | "link": "http://p.nju.edu.cn", 18 | "description": "初始账户学工号,初始密码身份证(全部)" 19 | }, 20 | { 21 | "name": "公众号目录", 22 | "link": "https://www.yuque.com/ff282l/gm8kgc/chfp1l", 23 | "description": "哦我的上帝啊,你毕业都不一定关注全了" 24 | } 25 | ] 26 | }, 27 | { 28 | "title": "校园生活", 29 | "items": [ 30 | { 31 | "name": "衣食住行", 32 | "link": "https://www.yuque.com/ff282l/gm8kgc/nbmig7", 33 | "description": "杂七杂八的生活服务" 34 | }, 35 | { 36 | "name": "医疗相关", 37 | "link": "https://www.yuque.com/ff282l/gm8kgc/rs2gzq", 38 | "description": "身体健康第一位~" 39 | }, 40 | { 41 | "name": "实用服务", 42 | "link": "https://www.yuque.com/ff282l/gm8kgc/pydwn1", 43 | "description": "各种学生组织的实用服务" 44 | }, 45 | { 46 | "name": "社团实践", 47 | "link": "https://www.yuque.com/ff282l/gm8kgc/osy13s", 48 | "description": "社团、志愿、就业、创业相关" 49 | }, 50 | { 51 | "name": "宿舍相关", 52 | "link": "https://www.yuque.com/ff282l/gm8kgc/bau88f", 53 | "description": "联系宿管、调宿事宜" 54 | }, 55 | { 56 | "name": "校园服务", 57 | "link": "https://www.nju.edu.cn/3688/list.htm", 58 | "description": "南大校历、各单位电话黄页" 59 | }, 60 | { 61 | "name": "本科学工通讯录", 62 | "link": "https://xgc.nju.edu.cn/1799/list.htm", 63 | "description": "实在不行问问辅导员" 64 | }, 65 | { 66 | "name": "小百合 BBS", 67 | "link": "http://bbs.nju.edu.cn/", 68 | "description": "求职信息、校长信箱比较有用" 69 | }, 70 | { 71 | "name": "学生服务", 72 | "link": "http://xsgl.nju.edu.cn", 73 | "description": "奖学金、勤工俭学等常用网站" 74 | }, 75 | { 76 | "name": "证件办理", 77 | "link": "https://www.yuque.com/ff282l/gm8kgc/ubnps4", 78 | "description": "校园卡、学生证、研究生证等(补)办理" 79 | }, 80 | { 81 | "name": "户籍管理", 82 | "link": "https://bwc.nju.edu.cn/bszn/bmfw/index.html", 83 | "description": "管理户口迁移等等事务" 84 | } 85 | ] 86 | }, 87 | { 88 | "title": "学习科研", 89 | "items": [ 90 | { 91 | "name": "教务系统", 92 | "link": "http://elite.nju.edu.cn/jiaowu/", 93 | "description": "密码是大小写字母加数字" 94 | }, 95 | { 96 | "name": "研究生学籍与教学管理系统", 97 | "link": "http://pyb.nju.edu.cn/", 98 | "description": "研究生版教务系统" 99 | }, 100 | { 101 | "name": "图书馆纸本检索", 102 | "link": "http://opac.nju.edu.cn/#/Home", 103 | "description": "快看看你想看的书它有没有、在哪找" 104 | }, 105 | { 106 | "name": "图书馆指南", 107 | "link": "http://mooc1.chaoxing.com/zt/200026884.html", 108 | "description": "图书馆出品的新生指南" 109 | }, 110 | { 111 | "name": "图书馆服务", 112 | "link": "http://lib.nju.edu.cn/index.htm#Page3", 113 | "description": "图书馆热门服务" 114 | }, 115 | { 116 | "name": "图书馆电子资源", 117 | "link": "https://www.yuque.com/ff282l/gm8kgc/fmd1wl", 118 | "description": "各类数据库、学术杂志免费下载" 119 | }, 120 | { 121 | "name": "研讨间预约", 122 | "link": "http://lib.nju.edu.cn/rmfw/sbfw/yjxjyy.htm", 123 | "description": "(需要校园网)在图书馆研讨间愉快地讨(wan)论(shua)" 124 | }, 125 | { 126 | "name": "课程网站", 127 | "link": "https://www.yuque.com/ff282l/gm8kgc/sr0kbw", 128 | "description": "各种课要用的网站,还有经典悦读电子书" 129 | }, 130 | { 131 | "name": "培养课表", 132 | "link": "https://www.yuque.com/ff282l/gm8kgc/ysdgpd", 133 | "description": "课表、培养计划、拔尖计划等" 134 | }, 135 | { 136 | "name": "交换生系统", 137 | "link": "http://elite.nju.edu.cn/exchangesystem/", 138 | "description": "本科阶段交流生和访问学生的一些信息" 139 | }, 140 | { 141 | "name": "国际交流合作处", 142 | "link": "http://stuex.nju.edu.cn/", 143 | "description": "交流交换的项目信息" 144 | }, 145 | { 146 | "name": "高性能计算中心", 147 | "link": "https://hpc.nju.edu.cn/", 148 | "description": "电脑不够算,快找HPC" 149 | } 150 | ] 151 | }, 152 | { 153 | "title": "信息服务", 154 | "items": [ 155 | { 156 | "name": "南大APP", 157 | "link": "https://oi.nju.edu.cn/21607/list.htm", 158 | "description": "新版南大APP,集成各类常用功能" 159 | }, 160 | { 161 | "name": "南大邮箱", 162 | "link": "https://mail.smail.nju.edu.cn/", 163 | "description": "全日制学生人手一个,可以用来薅免费教育版软件、教育优惠" 164 | }, 165 | { 166 | "name": "VPN客户端", 167 | "link": "https://vpn.nju.edu.cn/", 168 | "description": "VPN客户端,可以访问只有校园网才能访问的全部资源" 169 | }, 170 | { 171 | "name": "VPN网页版", 172 | "link": "https://vpn3.nju.edu.cn/", 173 | "description": "无需下载客户端,可以访问只有校园网才能访问的全部资源" 174 | }, 175 | { 176 | "name": "正版软件", 177 | "link": "https://itsc.nju.edu.cn/zbrj/list.htm", 178 | "description": "学校购买的常用正版系统和软件" 179 | }, 180 | { 181 | "name": "邮箱别名", 182 | "link": "http://mailm.nju.edu.cn:8080", 183 | "description": "学生邮箱一堆数字看起来一点也不时髦?试试这个" 184 | }, 185 | { 186 | "name": "Eduroam", 187 | "link": "https://itsc.nju.edu.cn/21436/list.htm", 188 | "description": "全球教育科研机构无线网络漫游" 189 | }, 190 | { 191 | "name": "校园卡网络自助服务系统", 192 | "link": "https://oa.nju.edu.cn/ecard/", 193 | "description": "(需要校园网)查看校园卡信息,可以下载校园卡黑照" 194 | }, 195 | { 196 | "name": "e-Science中心", 197 | "link": "https://sci.nju.edu.cn/", 198 | "description": "南大云盘、镜像、git、测速等服务" 199 | } 200 | ] 201 | }, 202 | { 203 | "title": "趣味南大", 204 | "items": [ 205 | { 206 | "name": "招标办公室", 207 | "link": "http://zb.nju.edu.cn/", 208 | "description": "来看看学校最近又买了啥~" 209 | }, 210 | { 211 | "name": "数据中心", 212 | "link": "https://data.nju.edu.cn", 213 | "description": "可以看见一些令人脸红心跳的东西(需校园网)" 214 | }, 215 | { 216 | "name": "网络电视", 217 | "link": "http://tv.nju.edu.cn/", 218 | "description": "(需要校园网)神奇的电视直播站" 219 | } 220 | ] 221 | }, 222 | { 223 | "title": "学生项目", 224 | "items": [ 225 | { 226 | "name": "南哪指南", 227 | "link": "https://github.com/idealclover/life-in-nju", 228 | "description": "就是本项目!" 229 | }, 230 | { 231 | "name": "南哪课表", 232 | "link": "https://m3w.cn/nnkbgkd", 233 | "description": "南哪人的专属课程表 APP" 234 | }, 235 | { 236 | "name": "南京大学学位论文XeLaTeX模板", 237 | "link": "https://github.com/Haixing-Hu/nju-thesis", 238 | "description": "毕业论文的XeLaTeX模板" 239 | }, 240 | { 241 | "name": "南京大学本科毕业论文Latex模板", 242 | "link": "https://github.com/ZLCao/NJUBachelor", 243 | "description": "本科毕业论文的Latex模板" 244 | }, 245 | { 246 | "name": "南京大学本科毕业论文Latex模板(2021)", 247 | "link": "https://github.com/FengChendian/NJUThesis2021", 248 | "description": "根据新标准修改后的本科毕业论文Latex模板" 249 | }, 250 | { 251 | "name": "课程评估自动化", 252 | "link": "https://fuck.idealclover.cn/", 253 | "description": "每学期的课程评估简直噩梦" 254 | } 255 | ] 256 | }, 257 | { 258 | "title": "投稿建议", 259 | "items": [ 260 | { 261 | "name": "讨论群", 262 | "link": "https://jq.qq.com/?_wv=1027&k=5hsPQa6", 263 | "description": "加入讨论群提出意见建议!" 264 | }, 265 | { 266 | "name": "投稿与建议", 267 | "link": "https://github.com/idealclover/life-in-nju/issues", 268 | "description": "在这里新建 issues" 269 | }, 270 | { 271 | "name": "项目 GitHub 地址", 272 | "link": "https://github.com/idealclover/life-in-nju", 273 | "description": "网站的源代码存放于此" 274 | } 275 | ] 276 | }, 277 | { 278 | "title": "友情链接", 279 | "items": [ 280 | { 281 | "name": "idealclover", 282 | "link": "https://idealclover.top", 283 | "description": "@idealclover 是本项目的发起人" 284 | }, 285 | { 286 | "name": "毛若昕", 287 | "link": "https://maorx.cn/", 288 | "description": "@毛若昕 负责本项目的设计建议和背景图片摄影" 289 | }, 290 | { 291 | "name": "LadderOperator", 292 | "link": "https://ladderoperator.top/", 293 | "description": "@LadderOperator 负责本项目的数据整理" 294 | }, 295 | { 296 | "name": "GeRongcun", 297 | "link": "http://www.gerongcun.xyz/blog/", 298 | "description": "@GeRongcun 共同参与本项目的数据整理" 299 | }, 300 | { 301 | "name": "zgq354", 302 | "link": "https://blog.izgq.net/", 303 | "description": "@zgq354 负责本项目的性能优化" 304 | }, 305 | { 306 | "name": "赞助我们", 307 | "link": "https://donate.idealclover.cn/", 308 | "description": "来请我们吃棒棒糖!" 309 | } 310 | ] 311 | } 312 | ] 313 | --------------------------------------------------------------------------------