├── .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 | 
8 |
9 | 
10 |
11 | 
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 |
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 |
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 |
2 |
3 |
4 |
5 | Life In NUAA
6 |
7 |
11 | mdi-github
12 |
13 |
18 | mdi-open-in-new
19 |
20 |
21 |
22 |
23 |
24 |
29 |
39 |
45 |
46 |
54 |
55 |
56 |
57 |
58 |
66 |
67 |
68 |
69 |
70 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
92 | {{
93 | category.title
94 | }}
95 |
96 |
97 |
104 |
111 |
112 |
113 | {{ item.name }}
114 |
115 |
116 | {{ item.description }}
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
131 | ©{{ new Date().getFullYear() }}
132 | NUAA Open Source
139 |
140 |
141 | {{ snackText }}
142 |
143 | Close
144 |
145 |
146 |
147 |
148 |
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 |
20 |
21 | - Unicode
22 | - Font class
23 | - Symbol
24 |
25 |
26 |
查看项目
27 |
28 |
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">3</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 |
--------------------------------------------------------------------------------