fisrt commit

master
hush_goup 2025-03-10 17:41:02 +08:00
commit 1f13adbef3
1643 changed files with 144401 additions and 0 deletions

View File

@ -0,0 +1,3 @@
> 1%
last 2 versions
not dead

View File

@ -0,0 +1,5 @@
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true

View File

@ -0,0 +1,4 @@
NODE_ENV = development
VUE_APP_NODE_ENV = dev
VUE_APP_BASE_URL = 'http://192.168.1.133'
VUE_APP_SERVER_URL = 'http://192.168.1.133'

View File

@ -0,0 +1,4 @@
NODE_ENV = production
VUE_APP_NODE_ENV = prod
VUE_APP_BASE_URL = 'http://127.0.0.1'
VUE_APP_SERVER_URL = 'http://192.168.1.133'

View File

@ -0,0 +1,18 @@
module.exports = {
root: true,
env: {
node: true
},
extends: [
'plugin:vue/essential',
'@vue/standard'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'space-before-function-paren': 0
}
}

23
portal_client/.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -0,0 +1,7 @@
{
"printWidth": 80,
"tabWidth": 2,
"singleQuote": true,
"semi": false,
"htmlWhitespaceSensitivity": "ignore"
}

24
portal_client/README.md Normal file
View File

@ -0,0 +1,24 @@
# portal_client
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

View File

@ -0,0 +1,10 @@
// 项目发布阶段需要用到的babel插件
const prodPlugins = []
if (process.env.NODE_ENV === 'production') {
prodPlugins.push('transform-remove-console')
}
module.exports = {
presets: ['@vue/cli-plugin-babel/preset'],
plugins: [...prodPlugins]
}

14629
portal_client/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,43 @@
{
"name": "portal_client",
"version": "1.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"serve:dev": "vue-cli-service build --mode development",
"build:prod": "vue-cli-service build --mode production",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.6.5",
"element-ui": "^2.4.5",
"less-loader": "^6.0.0",
"quill": "^1.3.7",
"vue": "^2.6.11",
"vue-lazyload": "^1.3.3",
"vue-router": "^3.2.0",
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"@vue/eslint-config-standard": "^5.1.2",
"axios": "^0.21.1",
"babel-eslint": "^10.1.0",
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint": "^6.7.2",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.2.2",
"node-sass": "^4.12.0",
"sass-loader": "^8.0.2",
"vue-cli-plugin-element": "^1.0.1",
"vue-template-compiler": "^2.6.11"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1626240865067" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12783" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M194.97 566.272V747.52L512 919.552 829.03 747.52V566.477L512 738.509 194.97 566.272zM512 104.448L13.926 376.218 512 647.782l407.552-221.798v312.525h90.522V376.218L512 104.448z" p-id="12784" fill="#172B4D"></path></svg>

After

Width:  |  Height:  |  Size: 596 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1626241025270" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14725" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M390.827 562.59c-113.17 0-205.242-92.071-205.242-205.242s92.071-205.241 205.242-205.241 205.241 92.071 205.241 205.241-92.07 205.242-205.241 205.242z m0-346.483c-77.881 0-141.242 63.36-141.242 141.241S312.946 498.59 390.827 498.59s141.241-63.361 141.241-141.242-63.36-141.241-141.241-141.241z" fill="#172B4D" p-id="14726"></path><path d="M668.021 869.327c-17.673 0-32-14.327-32-32 0-150.662-109.993-273.235-245.193-273.235S145.633 686.665 145.633 837.327c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-89.503 31.785-173.795 89.499-237.348 28.333-31.199 61.402-55.729 98.288-72.909 38.437-17.901 79.284-26.979 121.407-26.979s82.97 9.077 121.407 26.979c36.886 17.18 69.955 41.71 98.288 72.909 57.715 63.553 89.499 147.845 89.499 237.348 0 17.673-14.328 32-32 32zM630.633 567.59c-17.673 0-32-14.327-32-32s14.327-32 32-32c77.881 0 141.242-63.361 141.242-141.242s-63.361-141.241-141.242-141.241c-17.673 0-32-14.327-32-32s14.327-32 32-32c113.171 0 205.242 92.071 205.242 205.241S743.804 567.59 630.633 567.59z" fill="#172B4D" p-id="14727"></path><path d="M907.827 874.327c-17.673 0-32-14.327-32-32 0-150.662-109.994-273.235-245.194-273.235-17.673 0-32-14.327-32-32s14.327-32 32-32c42.123 0 82.971 9.077 121.407 26.979 36.886 17.18 69.955 41.71 98.288 72.909 57.714 63.553 89.499 147.845 89.499 237.348 0 17.672-14.327 31.999-32 31.999z" fill="#172B4D" p-id="14728"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1626240434789" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1023" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M810.6 183.5c0-65.7-53.7-119.4-119.4-119.4H333c-65.7 0-119.4 53.7-119.4 119.4-203 0-179.1 0-179.1 119.4 0 98.5 80.6 179.1 179.1 179.1 6 0 14.9 0 20.9-3 38.8 116.4 134.3 223.9 247.8 238.8V900h-89.6c-17.9 0-29.9 11.9-29.9 29.9 0 17.9 11.9 29.8 29.9 29.8h238.8c17.9 0 29.9-11.9 29.9-29.8S649.5 900 631.5 900h-89.6V717.9c113.4-14.9 206-122.4 247.8-238.8 6 0 14.9 3 20.9 3 98.5 0 179.1-80.6 179.1-179.1 0-119.5 23.9-119.5-179.1-119.5z m-597 238.8c-65.7 0-119.4-53.7-119.4-119.4s0-59.7 119.4-59.7v179.1z m537.3-59.7c0 131.3-107.5 298.5-238.8 298.5S273.3 493.9 273.3 362.6V183.5c0-29.9 29.9-59.7 59.7-59.7h358.2c29.8 0 59.7 29.9 59.7 59.7v179.1z m59.7 59.7V243.2c119.4 0 119.4-6 119.4 59.7s-53.7 119.4-119.4 119.4z m0 0" p-id="1024" fill="#172B4D"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1626240753020" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6489" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M711.9 959.9c-10.8 0-21.5-3.3-30.7-9.7L495.3 820.9c-1.5-1-3.5-0.9-4.8 0.4l-72 68.4c-16.2 15.4-39.7 19.2-59.8 9.7-20.2-9.4-32.3-29.9-30.9-52.2l9-141.8c0.8-12.1 5.7-23.8 13.9-32.8l216-237.8c9.3-10.2 25.1-11 35.3-1.7 10.2 9.3 11 25.1 1.7 35.3l-216 237.8c-0.6 0.6-0.9 1.5-1 2.3l-9 141.8c0 0.8-0.2 2.6 2.2 3.7 2.4 1.1 3.7-0.2 4.2-0.7l72-68.4c18.4-17.5 46.9-19.7 67.8-5.2l185.9 129.4c1.1 0.8 2.4 0.9 3.6 0.4 1.3-0.5 2.1-1.5 2.3-2.8L858.2 140c0.1-0.6 0.4-2.3-1.5-3.7-1.9-1.4-3.4-0.7-4-0.4l-745.9 372c-0.5 0.2-2 1-2.1 3.2-0.1 2.2 1.3 3.1 1.8 3.4l198 123.2c11.7 7.3 15.3 22.7 8 34.4s-22.7 15.3-34.4 8L80 557c-16.5-10.3-26.2-28.8-25.3-48.2 0.9-19.5 12.3-36.9 29.7-45.6l745.9-372c18.4-9.2 40-7.2 56.4 5.2s24.3 32.6 20.5 52.8L764.9 915.9c-3.4 18-15.5 33-32.5 40-6.6 2.7-13.6 4-20.5 4z" p-id="6490" fill="#172B4D"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>公共安全技术研究中心</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

14
portal_client/src/App.vue Normal file
View File

@ -0,0 +1,14 @@
<template>
<div id="app" class="ap">
<transition name="el-fade-in-linear">
<router-view></router-view>
</transition>
<el-backtop></el-backtop>
</div>
</template>
<script>
export default {
name: 'app'
}
</script>

View File

@ -0,0 +1,24 @@
import request from '../utils/request'
export function queryById(id, uuid) {
return request({
url: `/article/${id}/${uuid}`,
method: 'get'
})
}
export function queryResults(params) {
return request({
url: '/article/search',
method: 'get',
params: params
})
}
export function queryByQuery(params) {
return request({
url: '/article/list',
method: 'get',
params: params
})
}

View File

@ -0,0 +1,8 @@
import request from '../utils/request'
export function queryComponents() {
return request({
url: '/component',
method: 'get'
})
}

View File

@ -0,0 +1,8 @@
import request from '../utils/request'
export function load() {
return request({
url: '/config/load',
method: 'get'
})
}

View File

@ -0,0 +1,22 @@
import request from '../utils/request'
export function queryAllModules() {
return request({
url: '/module',
method: 'get'
})
}
export function queryModuleByRoute(route) {
return request({
url: `/module/route/${route}`,
method: 'get'
})
}
export function queryModuleByParent(parent) {
return request({
url: `/module/parent/${parent}`,
method: 'get'
})
}

View File

@ -0,0 +1,22 @@
import request from '../utils/request'
export function querySession() {
return request({
url: '/student/sessions',
method: 'get'
})
}
export function queryBySession(session) {
return request({
url: `/student/session/${session}`,
method: 'get'
})
}
export function queryByUuid(uuid) {
return request({
url: `/student/${uuid}`,
method: 'get'
})
}

View File

@ -0,0 +1,22 @@
import request from '../utils/request'
export function queryByUuid(uuid) {
return request({
url: `/teacher/${uuid}`,
method: 'get'
})
}
export function queryCollege() {
return request({
url: '/teacher/college',
method: 'get'
})
}
export function queryByCollege(college) {
return request({
url: `/teacher/college/${college}`,
method: 'get'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -0,0 +1,91 @@
$image-size: 120px;
.app-footer {
width: 100%;
padding: 80px 0;
color: $--color-text-regular;
line-height: 150%;
background-color: $--background-color-base;
display: flex;
justify-content: space-around;
align-items: center;
.footer-inner {
width: $min-width;
// min-width: $min-width;
// max-width: $max-width;
.focus-us {
font-size: $--font-size-large;
display: flex;
ul {
margin-left: 20px;
li {
float: left;
min-width: 40px;
.el-link {
font-size: inherit;
}
i:hover {
cursor: pointer;
color: $--color-primary;
}
}
}
}
.footer-row {
width: 100%;
display: flex;
flex-wrap: wrap;
.footer-info {
width: 50%;
display: flex;
flex-direction: column;
justify-content: space-between;
.link-list {
width: 100%;
li {
float: left;
min-width: 20%;
.el-link {
font-size: $--font-size-small;
}
}
}
.contact-us {
margin-top: 20px;
font-size: $--font-size-extra-small;
}
}
.footer-brand {
width: 50%;
display: flex;
justify-content: space-around;
align-items: center;
.el-image {
width: $image-size;
height: $image-size;
}
}
}
.footer-area {
font-size: $--font-size-extra-small;
display: flex;
justify-content: space-between;
align-items: center;
}
}
}

View File

@ -0,0 +1,158 @@
$header-height: 80px;
.app-header {
width: 100%;
height: $header-height;
display: flex;
justify-content: space-around;
align-items: center;
.header-inner {
width: 70vw;
display: flex;
justify-content: space-between;
align-items: center;
.header-before {
display: flex;
justify-content: space-around;
align-items: center;
.el-image {
width: $header-height;
height: inherit;
}
.el-menu {
border-bottom: none;
.el-menu-item,
.el-submenu__title {
border-bottom: none;
}
.el-submenu__icon-arrow {
display: none;
}
}
}
.el-link {
font-weight: bolder;
}
}
}
.header-transparent {
//position: absolute;
position: relative;
z-index: 999;
background: -webkit-gradient(
linear,
left top,
left bottom,
from($--color-white),
to($--color-white)
);
.el-menu {
background-color: transparent;
//background-color: $--color-white;
.el-menu-item,
.el-submenu__title {
//color: $--color-white;
color: blue;
background-color: transparent;
//background-color: $--color-white;
&:hover {
//color: $--color-text-placeholder;
color: blue;
background-color: transparent;
//background-color: $--color-white;
}
}
.el-menu-item:active,
.el-menu-item:focus,
.el-submenu.is-active .el-submenu__title {
//color: $--color-text-placeholder;
color: blue;
background-color: transparent;
//background-color: $--color-white;
}
}
.el-link {
//color: $--color-white;
color: blue;
&:hover {
//color: $--color-text-placeholder;
color: blue;
}
}
}
.header-dark {
// position: sticky;
// position: -webkit-sticky;
// z-index: 999;
// top: 0px;
// left: 0px;
background-color: $--color-primary;
.el-menu {
background-color: transparent;
//background-color: $--color-white;
.el-menu-item,
.el-submenu__title {
//color: $--color-white;
color: blue;
background-color: $--color-primary;
&:hover {
//color: $--color-text-placeholder;
color: blue;
background-color: $--color-primary;
}
}
.el-menu-item:active,
.el-menu-item:focus,
.el-submenu.is-active .el-submenu__title {
//color: $--color-text-placeholder;
color: blue;
background-color: $--color-primary;
}
}
.el-link {
//color: $--color-white;
color: blue;
&:hover {
//color: $--color-text-placeholder;
color: blue;
}
}
}
.header-light {
.el-menu {
background-color: transparent;
//background-color: $--color-white;
}
.el-link {
//color: $--color-text-secondary;
color: blue;
&:hover {
//color: $--color-black;
color: darkblue;
}
}
}

View File

@ -0,0 +1,36 @@
.layout-header {
@extend .layout-body;
background-color: $--background-color-base;
.header-inner {
@extend .body-inner;
h1 {
margin: 60px 0;
font-weight: normal;
font-size: xx-large;
}
}
}
.layout-body {
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom: 50px;
// 750px
@media screen and (min-width: 750px) {
.body-inner {
width: $min-width;
}
}
// 750px
@media screen and (max-width: 750px) {
.body-inner {
min-width: $min-width;
max-width: $max-width;
}
}
}

View File

@ -0,0 +1,29 @@
.body-inner {
.article-title {
display: block;
margin: 30px 0;
font-size: xx-large;
}
.article-info {
color: $--color-text-secondary;
font-size: $--font-size-small;
margin-top: 20px;
span + span {
margin: 0 10px;
}
}
.article-content {
line-height: 175%;
}
.article-file {
margin-top: 20px;
.el-link {
font-size: $--font-size-small;
}
}
}

View File

@ -0,0 +1,66 @@
.card-list {
.tip {
text-align: center;
font-size: $--font-size-extra-small;
color: $--color-text-secondary;
}
&-item {
position: relative;
img {
display: block;
margin: auto;
}
.banner {
width: 100%;
height: 50px;
padding: 50px;
box-sizing: border-box;
position: absolute;
z-index: 10;
bottom: 0;
text-align: center;
color: $--color-white;
font-size: $--font-size-large;
font-weight: bolder;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: all 0.5s ease;
background: -webkit-gradient(
linear,
left bottom,
left top,
from($--color-black),
to(transparent)
);
.content {
text-align: start;
color: $--color-text-secondary;
font-size: $--font-size-base;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
&:hover {
cursor: pointer;
z-index: 5;
-webkit-transform: scale(1.1);
transform: scale(1.1);
.banner {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
background: rgba($color: $--color-black, $alpha: 0.5);
}
}
}
}

View File

@ -0,0 +1,6 @@
.carousel {
.el-image {
width: 100%;
height: inherit;
}
}

View File

@ -0,0 +1,22 @@
.chunk {
padding: 80px 15%;
.title {
margin-bottom: 30px;
h1 {
font-size: xx-large;
width: fit-content;
margin: auto;
}
}
}
.chunk-light h1 {
border-bottom: 5px solid $--color-primary;
}
.chunk-dark h1 {
color: $--color-white;
border-bottom: 5px solid $--color-white;
}

View File

@ -0,0 +1,17 @@
.section-error {
width: 100%;
height: 80vh;
box-sizing: border-box;
display: flex;
justify-content: space-around;
align-items: center;
.el-image {
width: 75%;
}
h1 {
margin: 20px 0;
}
}

View File

@ -0,0 +1,78 @@
$min-width: 60vw;
$max-width: 90vw;
/* 全局样式表 */
html,
body,
#app {
height: 100%;
margin: 0;
padding: 0;
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB',
'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
}
ul {
list-style: none;
}
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td {
margin: 0;
padding: 0;
}

View File

@ -0,0 +1,38 @@
.image-list {
.tip {
text-align: center;
font-size: $--font-size-extra-small;
color: $--color-text-secondary;
}
.content {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.content,
.update-time {
margin-top: 10px;
font-size: $--font-size-small;
color: $--color-text-secondary;
}
.el-button {
border: none;
font-weight: bolder;
background-color: $--background-color-base;
}
.el-row ~ .el-row {
margin: 30px 0;
}
.show-more {
@extend .tip;
.el-link {
@extend .show-more;
}
}
}

View File

@ -0,0 +1 @@
@import './mixins/animation';

View File

@ -0,0 +1,45 @@
.news {
background-color: $--background-color-base;
}
.news-item {
&-title {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
&:first-child {
font-size: $--font-size-large;
color: $--color-primary;
font-weight: bold;
}
}
ul {
white-space: nowrap;
li {
display: flex;
justify-content: space-between;
align-items: center;
div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
a:hover {
cursor: pointer;
color: $--color-primary;
text-decoration: underline;
}
}
}
li + li {
margin: 10px 0;
}
}
}

View File

@ -0,0 +1,8 @@
.overview {
line-height: 180%;
color: $--color-text-primary;
p {
text-indent: 2em;
}
}

View File

@ -0,0 +1,26 @@
.research {
background-color: $--background-color-base;
.item {
cursor: pointer;
text-align: center;
transition: all 0.5s ease;
margin: 50px 0;
.el-image {
width: 120px;
height: 120px;
}
span {
display: block;
font-size: $--font-size-large;
font-weight: bolder;
}
&:hover {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
}
}

View File

@ -0,0 +1,48 @@
.search {
.box {
text-align: center;
margin: 50px 0;
transition: all 0.5s ease;
.el-autocomplete {
width: 40%;
.el-input-group__append {
width: 20%;
text-align: center;
color: $--color-white;
background-color: $--color-primary;
border: 1px solid $--color-primary;
&:hover {
background-color: $--color-primary-light-2;
border: 1px solid $--color-primary-light-2;
}
}
}
}
.box-resize {
margin: 150px 0;
}
ul {
li {
a {
color: $--color-primary;
cursor: pointer;
text-decoration: underline;
}
.content {
font-size: $--font-size-small;
color: $--color-text-secondary;
margin: 5px 0;
}
}
li + li {
margin: 20px 0;
}
}
}

View File

@ -0,0 +1,24 @@
.college {
line-height: 150%;
h1 {
font-weight: normal;
}
.el-row + .el-row {
margin: 20px 0;
}
.card {
cursor: pointer;
.teacher-name {
font-size: $--font-size-large;
color: $--color-primary;
}
}
}
.college + .college {
margin: 30px 0;
}

View File

@ -0,0 +1,26 @@
.teacher {
line-height: 180%;
.detail {
span {
display: block;
strong {
color: $--color-text-primary;
}
}
}
.other {
h3 {
color: $--color-primary;
}
span {
display: block;
}
}
.other + .other {
margin: 10px 0;
}
}

View File

@ -0,0 +1,5 @@
.team {
background-image: url('/img/home_bg1.png');
background-size: contain;
background-color: #172B4D;
}

View File

@ -0,0 +1,137 @@
@keyframes linear-move-left {
from {
left: 0px;
}
to {
left: 20px;
}
}
@-webkit-keyframes linear-move-left {
from {
left: 0px;
}
to {
left: 20px;
}
}
@-moz-keyframes linear-move-left {
from {
left: 0px;
}
to {
left: 20px;
}
}
@-o-keyframes linear-move-bottom {
from {
bottom: 0px;
}
to {
bottom: 20px;
}
}
@keyframes linear-move-bottom {
from {
bottom: 0px;
}
to {
bottom: 20px;
}
}
@-webkit-keyframes linear-move-bottom {
from {
bottom: 0px;
}
to {
bottom: 20px;
}
}
@-moz-keyframes linear-move-bottom {
from {
bottom: 0px;
}
to {
bottom: 20px;
}
}
@-o-keyframes linear-move-bottom {
from {
bottom: 0px;
}
to {
bottom: 20px;
}
}
@keyframes ease-transition {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes ease-transition {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-moz-keyframes ease-transition {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-o-keyframes ease-transition {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@mixin linear-move-left {
animation: linear-move-left;
-moz-animation: linear-move-left; /* Firefox */
-webkit-animation: linear-move-left; /* Safari 和 Chrome */
-o-animation: linear-move-left; /* Opera */
animation-duration: 0.3s;
animation-timing-function: linear;
animation-fill-mode: forwards;
}
@mixin linear-move-bottom {
animation: linear-move-bottom;
-moz-animation: linear-move-bottom; /* Firefox */
-webkit-animation: linear-move-bottom; /* Safari 和 Chrome */
-o-animation: linear-move-bottom; /* Opera */
animation-duration: 0.3s;
animation-timing-function: linear;
animation-fill-mode: forwards;
}
@mixin ease-transition {
animation: ease-transition;
-moz-animation: ease-transition; /* Firefox */
-webkit-animation: ease-transition; /* Safari 和 Chrome */
-o-animation: ease-transition; /* Opera */
animation-duration: 0.5s;
animation-timing-function: ease;
animation-fill-mode: forwards;
}

View File

@ -0,0 +1,996 @@
/* Element Chalk Variables */
// Special comment for theme configurator
// type|skipAutoTranslation|Category|Order
// skipAutoTranslation 1
/* Transition
-------------------------- */
$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--fade-linear-transition: opacity 200ms linear !default;
$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
/* Color
-------------------------- */
/// color|1|Brand Color|0
$--color-primary: #172B4D !default;
/// color|1|Background Color|4
$--color-white: #FFFFFF !default;
/// color|1|Background Color|4
$--color-black: #000000 !default;
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
/// color|1|Functional Color|1
$--color-success: #67C23A !default;
/// color|1|Functional Color|1
$--color-warning: #E6A23C !default;
/// color|1|Functional Color|1
$--color-danger: #F56C6C !default;
/// color|1|Functional Color|1
$--color-info: #909399 !default;
$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
/// color|1|Font Color|2
$--color-text-primary: #303133 !default;
/// color|1|Font Color|2
$--color-text-regular: #606266 !default;
/// color|1|Font Color|2
$--color-text-secondary: #909399 !default;
/// color|1|Font Color|2
$--color-text-placeholder: #C0C4CC !default;
/// color|1|Border Color|3
$--border-color-base: #DCDFE6 !default;
/// color|1|Border Color|3
$--border-color-light: #E4E7ED !default;
/// color|1|Border Color|3
$--border-color-lighter: #EBEEF5 !default;
/// color|1|Border Color|3
$--border-color-extra-light: #F2F6FC !default;
// Background
/// color|1|Background Color|4
$--background-color-base: #F5F7FA !default;
/* Link
-------------------------- */
$--link-color: $--color-primary-light-2 !default;
$--link-hover-color: $--color-primary !default;
/* Border
-------------------------- */
$--border-width-base: 2px !default;
$--border-style-base: solid !default;
$--border-color-hover: $--color-text-placeholder !default;
$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
/// borderRadius|1|Radius|0
$--border-radius-base: 10px !default;
/// borderRadius|1|Radius|0
$--border-radius-small: 3px !default;
/// borderRadius|1|Radius|0
$--border-radius-circle: 100% !default;
/// borderRadius|1|Radius|0
$--border-radius-zero: 0 !default;
// Box-shadow
/// boxShadow|1|Shadow|1
$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
// boxShadow|1|Shadow|1
$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
/// boxShadow|1|Shadow|1
$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
/* Fill
-------------------------- */
$--fill-base: $--color-white !default;
/* Typography
-------------------------- */
$--font-path: '~element-ui/packages/theme-chalk/src/fonts' !default;
$--font-display: 'auto' !default;
/// fontSize|1|Font Size|0
$--font-size-extra-large: 22px !default;
/// fontSize|1|Font Size|0
$--font-size-large: 20px !default;
/// fontSize|1|Font Size|0
$--font-size-medium: 18px !default;
/// fontSize|1|Font Size|0
$--font-size-base: 16px !default;
/// fontSize|1|Font Size|0
$--font-size-small: 15px !default;
/// fontSize|1|Font Size|0
$--font-size-extra-small: 14px !default;
/// fontWeight|1|Font Weight|1
$--font-weight-primary: 500 !default;
/// fontWeight|1|Font Weight|1
$--font-weight-secondary: 100 !default;
/// fontLineHeight|1|Line Height|2
$--font-line-height-primary: 24px !default;
/// fontLineHeight|1|Line Height|2
$--font-line-height-secondary: 16px !default;
$--font-color-disabled-base: #bbb !default;
/* Size
-------------------------- */
$--size-base: 14px !default;
/* z-index
-------------------------- */
$--index-normal: 1 !default;
$--index-top: 1000 !default;
$--index-popper: 2000 !default;
/* Disable base
-------------------------- */
$--disabled-fill-base: $--background-color-base !default;
$--disabled-color-base: $--color-text-placeholder !default;
$--disabled-border-base: $--border-color-light !default;
/* Icon
-------------------------- */
$--icon-color: #666 !default;
$--icon-color-base: $--color-info !default;
/* Checkbox
-------------------------- */
/// fontSize||Font|1
$--checkbox-font-size: 14px !default;
/// fontWeight||Font|1
$--checkbox-font-weight: $--font-weight-primary !default;
/// color||Color|0
$--checkbox-font-color: $--color-text-regular !default;
$--checkbox-input-height: 14px !default;
$--checkbox-input-width: 14px !default;
/// borderRadius||Border|2
$--checkbox-border-radius: $--border-radius-small !default;
/// color||Color|0
$--checkbox-background-color: $--color-white !default;
$--checkbox-input-border: $--border-base !default;
/// color||Color|0
$--checkbox-disabled-border-color: $--border-color-base !default;
$--checkbox-disabled-input-fill: #edf2fc !default;
$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
/// color||Color|0
$--checkbox-checked-font-color: $--color-primary !default;
$--checkbox-checked-input-border-color: $--color-primary !default;
/// color||Color|0
$--checkbox-checked-background-color: $--color-primary !default;
$--checkbox-checked-icon-color: $--fill-base !default;
$--checkbox-input-border-color-hover: $--color-primary !default;
/// height||Other|4
$--checkbox-bordered-height: 40px !default;
/// padding||Spacing|3
$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
/// padding||Spacing|3
$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
/// padding||Spacing|3
$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
/// padding||Spacing|3
$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
$--checkbox-bordered-medium-input-height: 14px !default;
$--checkbox-bordered-medium-input-width: 14px !default;
/// height||Other|4
$--checkbox-bordered-medium-height: 36px !default;
$--checkbox-bordered-small-input-height: 12px !default;
$--checkbox-bordered-small-input-width: 12px !default;
/// height||Other|4
$--checkbox-bordered-small-height: 32px !default;
$--checkbox-bordered-mini-input-height: 12px !default;
$--checkbox-bordered-mini-input-width: 12px !default;
/// height||Other|4
$--checkbox-bordered-mini-height: 28px !default;
/// color||Color|0
$--checkbox-button-checked-background-color: $--color-primary !default;
/// color||Color|0
$--checkbox-button-checked-font-color: $--color-white !default;
/// color||Color|0
$--checkbox-button-checked-border-color: $--color-primary !default;
/* Radio
-------------------------- */
/// fontSize||Font|1
$--radio-font-size: $--font-size-base !default;
/// fontWeight||Font|1
$--radio-font-weight: $--font-weight-primary !default;
/// color||Color|0
$--radio-font-color: $--color-text-regular !default;
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
/// borderRadius||Border|2
$--radio-input-border-radius: $--border-radius-circle !default;
/// color||Color|0
$--radio-input-background-color: $--color-white !default;
$--radio-input-border: $--border-base !default;
/// color||Color|0
$--radio-input-border-color: $--border-color-base !default;
/// color||Color|0
$--radio-icon-color: $--color-white !default;
$--radio-disabled-input-border-color: $--disabled-border-base !default;
$--radio-disabled-input-fill: $--disabled-fill-base !default;
$--radio-disabled-icon-color: $--disabled-fill-base !default;
$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
/// color||Color|0
$--radio-checked-font-color: $--color-primary !default;
/// color||Color|0
$--radio-checked-input-border-color: $--color-primary !default;
/// color||Color|0
$--radio-checked-input-background-color: $--color-white !default;
/// color||Color|0
$--radio-checked-icon-color: $--color-primary !default;
$--radio-input-border-color-hover: $--color-primary !default;
$--radio-bordered-height: 40px !default;
$--radio-bordered-padding: 12px 20px 0 10px !default;
$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
$--radio-bordered-small-padding: 8px 15px 0 10px !default;
$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
$--radio-bordered-medium-input-height: 14px !default;
$--radio-bordered-medium-input-width: 14px !default;
$--radio-bordered-medium-height: 36px !default;
$--radio-bordered-small-input-height: 12px !default;
$--radio-bordered-small-input-width: 12px !default;
$--radio-bordered-small-height: 32px !default;
$--radio-bordered-mini-input-height: 12px !default;
$--radio-bordered-mini-input-width: 12px !default;
$--radio-bordered-mini-height: 28px !default;
/// fontSize||Font|1
$--radio-button-font-size: $--font-size-base !default;
/// color||Color|0
$--radio-button-checked-background-color: $--color-primary !default;
/// color||Color|0
$--radio-button-checked-font-color: $--color-white !default;
/// color||Color|0
$--radio-button-checked-border-color: $--color-primary !default;
$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
/* Select
-------------------------- */
$--select-border-color-hover: $--border-color-hover !default;
$--select-disabled-border: $--disabled-border-base !default;
/// fontSize||Font|1
$--select-font-size: $--font-size-base !default;
$--select-close-hover-color: $--color-text-secondary !default;
$--select-input-color: $--color-text-placeholder !default;
$--select-multiple-input-color: #666 !default;
/// color||Color|0
$--select-input-focus-border-color: $--color-primary !default;
/// fontSize||Font|1
$--select-input-font-size: 14px !default;
$--select-option-color: $--color-text-regular !default;
$--select-option-disabled-color: $--color-text-placeholder !default;
$--select-option-disabled-background: $--color-white !default;
/// height||Other|4
$--select-option-height: 34px !default;
$--select-option-hover-background: $--background-color-base !default;
/// color||Color|0
$--select-option-selected-font-color: $--color-primary !default;
$--select-option-selected-hover: $--background-color-base !default;
$--select-group-color: $--color-info !default;
$--select-group-height: 30px !default;
$--select-group-font-size: 12px !default;
$--select-dropdown-background: $--color-white !default;
$--select-dropdown-shadow: $--box-shadow-light !default;
$--select-dropdown-empty-color: #999 !default;
/// height||Other|4
$--select-dropdown-max-height: 274px !default;
$--select-dropdown-padding: 6px 0 !default;
$--select-dropdown-empty-padding: 10px 0 !default;
$--select-dropdown-border: solid 1px $--border-color-light !default;
/* Alert
-------------------------- */
$--alert-padding: 8px 16px !default;
/// borderRadius||Border|2
$--alert-border-radius: $--border-radius-base !default;
/// fontSize||Font|1
$--alert-title-font-size: 13px !default;
/// fontSize||Font|1
$--alert-description-font-size: 12px !default;
/// fontSize||Font|1
$--alert-close-font-size: 12px !default;
/// fontSize||Font|1
$--alert-close-customed-font-size: 13px !default;
$--alert-success-color: $--color-success-lighter !default;
$--alert-info-color: $--color-info-lighter !default;
$--alert-warning-color: $--color-warning-lighter !default;
$--alert-danger-color: $--color-danger-lighter !default;
/// height||Other|4
$--alert-icon-size: 16px !default;
/// height||Other|4
$--alert-icon-large-size: 28px !default;
/* MessageBox
-------------------------- */
/// color||Color|0
$--messagebox-title-color: $--color-text-primary !default;
$--msgbox-width: 420px !default;
$--msgbox-border-radius: 4px !default;
/// fontSize||Font|1
$--messagebox-font-size: $--font-size-large !default;
/// fontSize||Font|1
$--messagebox-content-font-size: $--font-size-base !default;
/// color||Color|0
$--messagebox-content-color: $--color-text-regular !default;
/// fontSize||Font|1
$--messagebox-error-font-size: 12px !default;
$--msgbox-padding-primary: 15px !default;
/// color||Color|0
$--messagebox-success-color: $--color-success !default;
/// color||Color|0
$--messagebox-info-color: $--color-info !default;
/// color||Color|0
$--messagebox-warning-color: $--color-warning !default;
/// color||Color|0
$--messagebox-danger-color: $--color-danger !default;
/* Message
-------------------------- */
$--message-shadow: $--box-shadow-base !default;
$--message-min-width: 380px !default;
$--message-background-color: #edf2fc !default;
$--message-padding: 15px 15px 15px 20px !default;
/// color||Color|0
$--message-close-icon-color: $--color-text-placeholder !default;
/// height||Other|4
$--message-close-size: 16px !default;
/// color||Color|0
$--message-close-hover-color: $--color-text-secondary !default;
/// color||Color|0
$--message-success-font-color: $--color-success !default;
/// color||Color|0
$--message-info-font-color: $--color-info !default;
/// color||Color|0
$--message-warning-font-color: $--color-warning !default;
/// color||Color|0
$--message-danger-font-color: $--color-danger !default;
/* Notification
-------------------------- */
$--notification-width: 330px !default;
/// padding||Spacing|3
$--notification-padding: 14px 26px 14px 13px !default;
$--notification-radius: 8px !default;
$--notification-shadow: $--box-shadow-light !default;
/// color||Color|0
$--notification-border-color: $--border-color-lighter !default;
$--notification-icon-size: 24px !default;
$--notification-close-font-size: $--message-close-size !default;
$--notification-group-margin-left: 13px !default;
$--notification-group-margin-right: 8px !default;
/// fontSize||Font|1
$--notification-content-font-size: $--font-size-base !default;
/// color||Color|0
$--notification-content-color: $--color-text-regular !default;
/// fontSize||Font|1
$--notification-title-font-size: 16px !default;
/// color||Color|0
$--notification-title-color: $--color-text-primary !default;
/// color||Color|0
$--notification-close-color: $--color-text-secondary !default;
/// color||Color|0
$--notification-close-hover-color: $--color-text-regular !default;
/// color||Color|0
$--notification-success-icon-color: $--color-success !default;
/// color||Color|0
$--notification-info-icon-color: $--color-info !default;
/// color||Color|0
$--notification-warning-icon-color: $--color-warning !default;
/// color||Color|0
$--notification-danger-icon-color: $--color-danger !default;
/* Input
-------------------------- */
$--input-font-size: $--font-size-base !default;
/// color||Color|0
$--input-font-color: $--color-text-regular !default;
/// height||Other|4
$--input-width: 150px !default;
/// height||Other|4
$--input-height: 50px !default;
$--input-border: $--border-base !default;
$--input-border-color: $--border-color-base !default;
/// borderRadius||Border|2
$--input-border-radius: $--border-radius-base !default;
$--input-border-color-hover: $--border-color-hover !default;
/// color||Color|0
$--input-background-color: $--color-white !default;
$--input-fill-disabled: $--disabled-fill-base !default;
$--input-color-disabled: $--font-color-disabled-base !default;
/// color||Color|0
$--input-icon-color: $--color-text-placeholder !default;
/// color||Color|0
$--input-placeholder-color: $--color-text-placeholder !default;
$--input-max-width: 314px !default;
$--input-hover-border: $--border-color-hover !default;
$--input-clear-hover-color: $--color-text-secondary !default;
$--input-focus-border: $--color-primary !default;
$--input-focus-fill: $--color-white !default;
$--input-disabled-fill: $--disabled-fill-base !default;
$--input-disabled-border: $--disabled-border-base !default;
$--input-disabled-color: $--disabled-color-base !default;
$--input-disabled-placeholder-color: $--color-text-placeholder !default;
/// fontSize||Font|1
$--input-medium-font-size: 14px !default;
/// height||Other|4
$--input-medium-height: 36px !default;
/// fontSize||Font|1
$--input-small-font-size: 13px !default;
/// height||Other|4
$--input-small-height: 32px !default;
/// fontSize||Font|1
$--input-mini-font-size: 12px !default;
/// height||Other|4
$--input-mini-height: 28px !default;
/* Cascader
-------------------------- */
/// color||Color|0
$--cascader-menu-font-color: $--color-text-regular !default;
/// color||Color|0
$--cascader-menu-selected-font-color: $--color-primary !default;
$--cascader-menu-fill: $--fill-base !default;
$--cascader-menu-font-size: $--font-size-base !default;
$--cascader-menu-radius: $--border-radius-base !default;
$--cascader-menu-border: solid 1px $--border-color-light !default;
$--cascader-menu-shadow: $--box-shadow-light !default;
$--cascader-node-background-hover: $--background-color-base !default;
$--cascader-node-color-disabled:$--color-text-placeholder !default;
$--cascader-color-empty:$--color-text-placeholder !default;
$--cascader-tag-background: #f0f2f5;
/* Group
-------------------------- */
$--group-option-flex: 0 0 (1/5) * 100% !default;
$--group-option-offset-bottom: 12px !default;
$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
$--group-title-color: $--color-black !default;
$--group-title-font-size: $--font-size-base !default;
$--group-title-width: 66px !default;
/* Tab
-------------------------- */
$--tab-font-size: $--font-size-base !default;
$--tab-border-line: 1px solid #e4e4e4 !default;
$--tab-header-color-active: $--color-text-secondary !default;
$--tab-header-color-hover: $--color-text-regular !default;
$--tab-header-color: $--color-text-regular !default;
$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
$--tab-vertical-header-width: 90px !default;
$--tab-vertical-header-count-color: $--color-white !default;
$--tab-vertical-header-count-fill: $--color-text-secondary !default;
/* Button
-------------------------- */
/// fontSize||Font|1
$--button-font-size: $--font-size-base !default;
/// fontWeight||Font|1
$--button-font-weight: $--font-weight-primary !default;
/// borderRadius||Border|2
$--button-border-radius: $--border-radius-base !default;
/// padding||Spacing|3
$--button-padding-vertical: 12px !default;
/// padding||Spacing|3
$--button-padding-horizontal: 20px !default;
/// fontSize||Font|1
$--button-medium-font-size: $--font-size-base !default;
/// borderRadius||Border|2
$--button-medium-border-radius: $--border-radius-base !default;
/// padding||Spacing|3
$--button-medium-padding-vertical: 10px !default;
/// padding||Spacing|3
$--button-medium-padding-horizontal: 20px !default;
/// fontSize||Font|1
$--button-small-font-size: 12px !default;
$--button-small-border-radius: #{$--border-radius-base - 1} !default;
/// padding||Spacing|3
$--button-small-padding-vertical: 9px !default;
/// padding||Spacing|3
$--button-small-padding-horizontal: 15px !default;
/// fontSize||Font|1
$--button-mini-font-size: 12px !default;
$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
/// padding||Spacing|3
$--button-mini-padding-vertical: 7px !default;
/// padding||Spacing|3
$--button-mini-padding-horizontal: 15px !default;
/// color||Color|0
$--button-default-font-color: $--color-text-regular !default;
/// color||Color|0
$--button-default-background-color: $--color-white !default;
/// color||Color|0
$--button-default-border-color: $--border-color-base !default;
/// color||Color|0
$--button-disabled-font-color: $--color-text-placeholder !default;
/// color||Color|0
$--button-disabled-background-color: $--color-white !default;
/// color||Color|0
$--button-disabled-border-color: $--border-color-lighter !default;
/// color||Color|0
$--button-primary-border-color: $--color-primary !default;
/// color||Color|0
$--button-primary-font-color: $--color-white !default;
/// color||Color|0
$--button-primary-background-color: $--color-primary !default;
/// color||Color|0
$--button-success-border-color: $--color-success !default;
/// color||Color|0
$--button-success-font-color: $--color-white !default;
/// color||Color|0
$--button-success-background-color: $--color-success !default;
/// color||Color|0
$--button-warning-border-color: $--color-warning !default;
/// color||Color|0
$--button-warning-font-color: $--color-white !default;
/// color||Color|0
$--button-warning-background-color: $--color-warning !default;
/// color||Color|0
$--button-danger-border-color: $--color-danger !default;
/// color||Color|0
$--button-danger-font-color: $--color-white !default;
/// color||Color|0
$--button-danger-background-color: $--color-danger !default;
/// color||Color|0
$--button-info-border-color: $--color-info !default;
/// color||Color|0
$--button-info-font-color: $--color-white !default;
/// color||Color|0
$--button-info-background-color: $--color-info !default;
$--button-hover-tint-percent: 20% !default;
$--button-active-shade-percent: 10% !default;
/* cascader
-------------------------- */
$--cascader-height: 200px !default;
/* Switch
-------------------------- */
/// color||Color|0
$--switch-on-color: $--color-primary !default;
/// color||Color|0
$--switch-off-color: $--border-color-base !default;
/// fontSize||Font|1
$--switch-font-size: $--font-size-base !default;
$--switch-core-border-radius: 10px !default;
// height||Other|4 TODO: width 40px
$--switch-width: 40px !default;
// height||Other|4
$--switch-height: 20px !default;
// height||Other|4
$--switch-button-size: 16px !default;
/* Dialog
-------------------------- */
$--dialog-background-color: $--color-white !default;
$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
/// fontSize||Font|1
$--dialog-title-font-size: $--font-size-large !default;
/// fontSize||Font|1
$--dialog-content-font-size: 14px !default;
/// fontLineHeight||LineHeight|2
$--dialog-font-line-height: $--font-line-height-primary !default;
/// padding||Spacing|3
$--dialog-padding-primary: 20px !default;
/* Table
-------------------------- */
/// color||Color|0
$--table-border-color: $--border-color-lighter !default;
$--table-border: 1px solid $--table-border-color !default;
/// color||Color|0
$--table-font-color: $--color-text-regular !default;
/// color||Color|0
$--table-header-font-color: $--color-text-secondary !default;
/// color||Color|0
$--table-row-hover-background-color: $--background-color-base !default;
$--table-current-row-background-color: $--color-primary-light-9 !default;
/// color||Color|0
$--table-header-background-color: $--color-white !default;
$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
/* Pagination
-------------------------- */
/// fontSize||Font|1
$--pagination-font-size: 13px !default;
/// color||Color|0
$--pagination-background-color: $--color-white !default;
/// color||Color|0
$--pagination-font-color: $--color-text-primary !default;
$--pagination-border-radius: 3px !default;
/// color||Color|0
$--pagination-button-color: $--color-text-primary !default;
/// height||Other|4
$--pagination-button-width: 35.5px !default;
/// height||Other|4
$--pagination-button-height: 28px !default;
/// color||Color|0
$--pagination-button-disabled-color: $--color-text-placeholder !default;
/// color||Color|0
$--pagination-button-disabled-background-color: $--color-white !default;
/// color||Color|0
$--pagination-hover-color: $--color-primary !default;
/* Popup
-------------------------- */
/// color||Color|0
$--popup-modal-background-color: $--color-black !default;
/// opacity||Other|1
$--popup-modal-opacity: 0.5 !default;
/* Popover
-------------------------- */
/// color||Color|0
$--popover-background-color: $--color-white !default;
/// fontSize||Font|1
$--popover-font-size: $--font-size-base !default;
/// color||Color|0
$--popover-border-color: $--border-color-lighter !default;
$--popover-arrow-size: 6px !default;
/// padding||Spacing|3
$--popover-padding: 12px !default;
$--popover-padding-large: 18px 20px !default;
/// fontSize||Font|1
$--popover-title-font-size: 16px !default;
/// color||Color|0
$--popover-title-font-color: $--color-text-primary !default;
/* Tooltip
-------------------------- */
/// color|1|Color|0
$--tooltip-fill: $--color-text-primary !default;
/// color|1|Color|0
$--tooltip-color: $--color-white !default;
/// fontSize||Font|1
$--tooltip-font-size: 12px !default;
/// color||Color|0
$--tooltip-border-color: $--color-text-primary !default;
$--tooltip-arrow-size: 6px !default;
/// padding||Spacing|3
$--tooltip-padding: 10px !default;
/* Tag
-------------------------- */
/// color||Color|0
$--tag-info-color: $--color-info !default;
/// color||Color|0
$--tag-primary-color: $--color-primary !default;
/// color||Color|0
$--tag-success-color: $--color-success !default;
/// color||Color|0
$--tag-warning-color: $--color-warning !default;
/// color||Color|0
$--tag-danger-color: $--color-danger !default;
/// fontSize||Font|1
$--tag-font-size: 12px !default;
$--tag-border-radius: 4px !default;
$--tag-padding: 0 10px !default;
/* Tree
-------------------------- */
/// color||Color|0
$--tree-node-hover-background-color: $--background-color-base !default;
/// color||Color|0
$--tree-font-color: $--color-text-regular !default;
/// color||Color|0
$--tree-expand-icon-color: $--color-text-placeholder !default;
/* Dropdown
-------------------------- */
$--dropdown-menu-box-shadow: $--box-shadow-light !default;
$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
$--dropdown-menuItem-hover-color: $--link-color !default;
/* Badge
-------------------------- */
/// color||Color|0
$--badge-background-color: $--color-danger !default;
$--badge-radius: 10px !default;
/// fontSize||Font|1
$--badge-font-size: 12px !default;
/// padding||Spacing|3
$--badge-padding: 6px !default;
/// height||Other|4
$--badge-size: 18px !default;
/* Card
--------------------------*/
/// color||Color|0
$--card-border-color: $--border-color-lighter !default;
$--card-border-radius: 4px !default;
/// padding||Spacing|3
$--card-padding: 20px !default;
/* Slider
--------------------------*/
/// color||Color|0
$--slider-main-background-color: $--color-primary !default;
/// color||Color|0
$--slider-runway-background-color: $--border-color-light !default;
$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
$--slider-stop-background-color: $--color-white !default;
$--slider-disable-color: $--color-text-placeholder !default;
$--slider-margin: 16px 0 !default;
$--slider-border-radius: 3px !default;
/// height|1|Other|4
$--slider-height: 6px !default;
/// height||Other|4
$--slider-button-size: 16px !default;
$--slider-button-wrapper-size: 36px !default;
$--slider-button-wrapper-offset: -15px !default;
/* Steps
--------------------------*/
$--steps-border-color: $--disabled-border-base !default;
$--steps-border-radius: 4px !default;
$--steps-padding: 20px !default;
/* Menu
--------------------------*/
/// fontSize||Font|1
$--menu-item-font-size: $--font-size-base !default;
/// color||Color|0
$--menu-item-font-color: $--color-text-primary !default;
/// color||Color|0
$--menu-background-color: $--color-white !default;
$--menu-item-hover-fill: $--color-primary-light-9 !default;
/* Rate
--------------------------*/
$--rate-height: 20px !default;
/// fontSize||Font|1
$--rate-font-size: $--font-size-base !default;
/// height||Other|3
$--rate-icon-size: 18px !default;
/// margin||Spacing|2
$--rate-icon-margin: 6px !default;
$--rate-icon-color: $--color-text-placeholder !default;
/* DatePicker
--------------------------*/
$--datepicker-font-color: $--color-text-regular !default;
/// color|1|Color|0
$--datepicker-off-font-color: $--color-text-placeholder !default;
/// color||Color|0
$--datepicker-header-font-color: $--color-text-regular !default;
$--datepicker-icon-color: $--color-text-primary !default;
$--datepicker-border-color: $--disabled-border-base !default;
$--datepicker-inner-border-color: #e4e4e4 !default;
/// color||Color|0
$--datepicker-inrange-background-color: $--border-color-extra-light !default;
/// color||Color|0
$--datepicker-inrange-hover-background-color: $--border-color-extra-light !default;
/// color||Color|0
$--datepicker-active-color: $--color-primary !default;
/// color||Color|0
$--datepicker-hover-font-color: $--color-primary !default;
$--datepicker-cell-hover-color: #fff !default;
/* Loading
--------------------------*/
/// height||Other|4
$--loading-spinner-size: 42px !default;
/// height||Other|4
$--loading-fullscreen-spinner-size: 50px !default;
/* Scrollbar
--------------------------*/
$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
/* Carousel
--------------------------*/
/// fontSize||Font|1
$--carousel-arrow-font-size: 12px !default;
$--carousel-arrow-size: 36px !default;
$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
/// width||Other|4
$--carousel-indicator-width: 30px !default;
/// height||Other|4
$--carousel-indicator-height: 2px !default;
$--carousel-indicator-padding-horizontal: 4px !default;
$--carousel-indicator-padding-vertical: 12px !default;
$--carousel-indicator-out-color: $--border-color-hover !default;
/* Collapse
--------------------------*/
/// color||Color|0
$--collapse-border-color: $--border-color-lighter !default;
/// height||Other|4
$--collapse-header-height: 48px !default;
/// color||Color|0
$--collapse-header-background-color: $--color-white !default;
/// color||Color|0
$--collapse-header-font-color: $--color-text-primary !default;
/// fontSize||Font|1
$--collapse-header-font-size: 13px !default;
/// color||Color|0
$--collapse-content-background-color: $--color-white !default;
/// fontSize||Font|1
$--collapse-content-font-size: 13px !default;
/// color||Color|0
$--collapse-content-font-color: $--color-text-primary !default;
/* Transfer
--------------------------*/
$--transfer-border-color: $--border-color-lighter !default;
$--transfer-border-radius: $--border-radius-base !default;
/// height||Other|4
$--transfer-panel-width: 200px !default;
/// height||Other|4
$--transfer-panel-header-height: 40px !default;
/// color||Color|0
$--transfer-panel-header-background-color: $--background-color-base !default;
/// height||Other|4
$--transfer-panel-footer-height: 40px !default;
/// height||Other|4
$--transfer-panel-body-height: 246px !default;
/// height||Other|4
$--transfer-item-height: 30px !default;
/// height||Other|4
$--transfer-filter-height: 32px !default;
/* Header
--------------------------*/
$--header-padding: 0 20px !default;
/* Footer
--------------------------*/
$--footer-padding: 0 20px !default;
/* Main
--------------------------*/
$--main-padding: 20px !default;
/* Timeline
--------------------------*/
$--timeline-node-size-normal: 12px !default;
$--timeline-node-size-large: 14px !default;
$--timeline-node-color: $--border-color-light !default;
/* Backtop
--------------------------*/
/// color||Color|0
$--backtop-background-color: $--color-white !default;
/// color||Color|0
$--backtop-font-color: $--color-primary !default;
/// color||Color|0
$--backtop-hover-background-color: $--border-color-extra-light !default;
/* Link
--------------------------*/
/// fontSize||Font|1
$--link-font-size: $--font-size-base !default;
/// fontWeight||Font|1
$--link-font-weight: $--font-weight-primary !default;
/// color||Color|0
$--link-default-font-color: $--color-text-regular !default;
/// color||Color|0
$--link-default-active-color: $--color-primary !default;
/// color||Color|0
$--link-disabled-font-color: $--color-text-placeholder !default;
/// color||Color|0
$--link-primary-font-color: $--color-primary !default;
/// color||Color|0
$--link-success-font-color: $--color-success !default;
/// color||Color|0
$--link-warning-font-color: $--color-warning !default;
/// color||Color|0
$--link-danger-font-color: $--color-danger !default;
/// color||Color|0
$--link-info-font-color: $--color-info !default;
/* Calendar
--------------------------*/
/// border||Other|4
$--calendar-border: $--table-border !default;
/// color||Other|4
$--calendar-selected-background-color: #F2F8FE !default;
$--calendar-cell-width: 85px !default;
/* Form
-------------------------- */
/// fontSize||Font|1
$--form-label-font-size: $--font-size-base !default;
/* Avatar
--------------------------*/
/// color||Color|0
$--avatar-font-color: #fff !default;
/// color||Color|0
$--avatar-background-color: #C0C4CC !default;
/// fontSize||Font Size|1
$--avatar-text-font-size: 14px !default;
/// fontSize||Font Size|1
$--avatar-icon-font-size: 18px !default;
/// borderRadius||Border|2
$--avatar-border-radius: $--border-radius-base !default;
/// size|1|Avatar Size|3
$--avatar-large-size: 40px !default;
/// size|1|Avatar Size|3
$--avatar-medium-size: 36px !default;
/// size|1|Avatar Size|3
$--avatar-small-size: 28px !default;
/* Break-point
--------------------------*/
$--sm: 768px !default;
$--md: 992px !default;
$--lg: 1200px !default;
$--xl: 1920px !default;
$--breakpoints: (
'xs' : (max-width: $--sm - 1),
'sm' : (min-width: $--sm),
'md' : (min-width: $--md),
'lg' : (min-width: $--lg),
'xl' : (min-width: $--xl)
);
$--breakpoints-spec: (
'xs-only' : (max-width: $--sm - 1),
'sm-and-up' : (min-width: $--sm),
'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md - 1})",
'sm-and-down': (max-width: $--md - 1),
'md-and-up' : (min-width: $--md),
'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg - 1})",
'md-and-down': (max-width: $--lg - 1),
'lg-and-up' : (min-width: $--lg),
'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl - 1})",
'lg-and-down': (max-width: $--xl - 1),
'xl-only' : (min-width: $--xl),
);
@import '~element-ui/packages/theme-chalk/src/index';

View File

@ -0,0 +1,23 @@
// Element components
@import './element/variables';
@import './custom/mixins';
@import './custom/global';
// Custom components
@import './custom/app-footer';
@import './custom/app-header';
@import './custom/app-home';
@import './custom/app-layout';
@import './custom/article';
@import './custom/card-list';
@import './custom/carousel';
@import './custom/chunk';
@import './custom/error';
@import './custom/image-list';
@import './custom/news';
@import './custom/overview';
@import './custom/research';
@import './custom/search';
@import './custom/teacher-list';
@import './custom/teacher';
@import './custom/team';

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

View File

@ -0,0 +1,102 @@
<template>
<div class="card-list">
<div v-if="!data.length" class="tip">
暂无内容
</div>
<el-row
:gutter="gutter"
v-for="line in Math.ceil(data.length / column)"
:key="line"
:style="{ margin: gutter + 'px' }"
>
<el-col
:span="24 / column"
v-for="(item, index) in data.slice((line - 1) * column, line * column)"
:key="index"
>
<el-card
:body-style="{ padding: '0px', height: height }"
:style="showBorder ? '' : 'border: none'"
class="card-list-item"
shadow="hover"
@click.native="
item.path ? $router.push(item.path) : openNewTab(item.href)
"
>
<!-- 封面图片 -->
<img
:src="item.fileUrl"
:alt="item.title"
:width="width"
:height="height"
object-fit="scale-down"
/>
<!-- 横幅 -->
<div v-show="showBanner" class="banner">
<!-- 标题 -->
<div>{{ item.title }}</div>
<!-- 内容 -->
<div v-if="item.content" class="content">
{{ item.content }}
</div>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { openNewTab } from '@/utils/common'
export default {
props: {
gutter: {
default: 15,
type: Number,
description: '卡片间距'
},
data: {
default: () => [],
type: Array,
description: '填充数据'
},
column: {
default: 6,
type: Number,
description: '列数(只可取24的约数1 | 2 | 3 | 4 | 6 | 8 | 12 | 24)'
},
'card-width': {
default: 0,
type: Number,
description: '卡片宽度'
},
'card-height': {
default: 0,
type: Number,
description: '卡片高度'
},
'show-border': {
default: false,
type: Boolean,
description: '显示边界'
},
'show-banner': {
default: true,
type: Boolean,
description: '显示横幅'
}
},
methods: {
openNewTab
},
computed: {
width() {
return this.cardWidth ? this.cardWidth + 'px' : '100%'
},
height() {
return this.cardHeight ? this.cardHeight + 'px' : '100%'
}
}
}
</script>

View File

@ -0,0 +1,59 @@
<template>
<footer class="app-footer">
<div class="footer-inner">
<!-- <div class="focus-us">
<span>关注我们</span>
<ul>
<li v-for="(item, index) in config.mediaList" :key="index">
<el-link :underline="false" :href="item.href" target="_blank">
<i :class="item.icon"></i>
</el-link>
</li>
</ul>
</div>
<el-divider></el-divider> -->
<div class="footer-row">
<div class="footer-info">
<ul class="link-list">
<li v-for="(item, index) in config.linkList" :key="index">
<el-link :underline="false" :href="item.href" target="_blank">
{{ item.name }}
</el-link>
</li>
</ul>
<ul class="contact-us">
<li v-for="(item, index) in config.contacts" :key="index">
{{ item }}
</li>
</ul>
</div>
<div class="footer-brand">
<router-link to="/">
<el-image src="/img/brand_blue.png"></el-image>
</router-link>
</div>
</div>
<div class="footer-area">
<div>{{ config.ICP }}</div>
<div>
Copyright &copy; {{ year }} UP. All Rights Reserved.
公共安全技术研究中心 版权所有
</div>
</div>
</div>
</footer>
</template>
<script>
import loadConfig from '@/mixins/load-config'
export default {
name: 'AppFooter',
mixins: [loadConfig],
computed: {
year() {
return new Date().getFullYear()
}
}
}
</script>

View File

@ -0,0 +1,94 @@
<template>
<header class="app-header" :class="[`header-${effect}`]">
<div class="header-inner">
<div class="header-before">
<!-- Logo -->
<router-link to="/">
<!-- <el-image
:src="`/img/brand_${effect === 'light' ? 'blue' : 'white'}.png`"
fit="scale-down"
></el-image> -->
<el-image
:src="`/img/logo.png`"
fit="scale-down"
style="width: 300px"
></el-image>
</router-link>
<!-- 导航菜单 -->
<el-menu
:default-active="$route.path"
mode="horizontal"
router
unique-opened
>
<template v-for="item in allModules">
<template v-if="!item.hidden && item.status">
<!-- 没有子菜单 -->
<el-menu-item
v-if="!item.children"
:key="item.id"
:index="item.path"
>
{{ item.name }}
</el-menu-item>
<!-- 有子菜单 -->
<el-submenu v-else :key="item.id" :index="item.id + ''">
<template slot="title">{{ item.name }}</template>
<template v-for="subitem in item.children">
<template v-if="!subitem.hidden && subitem.status">
<el-menu-item
v-if="!subitem.isExternal"
:key="subitem.id"
:index="subitem.path"
>
{{ subitem.name }}
</el-menu-item>
<el-menu-item
v-else
:key="subitem.id"
@click="openNewTab(subitem.path)"
>
{{ subitem.name }}
</el-menu-item>
</template>
</template>
</el-submenu>
</template>
</template>
</el-menu>
</div>
<router-link to="/search">
<el-link :underline="false">
<i class="el-icon-search"></i>
</el-link>
</router-link>
<el-link :underline="false" href="http://192.168.1.133:8080">
<div>后台入口</div>
</el-link>
</div>
</header>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import { mapState } from 'vuex'
import { openNewTab } from '@/utils/common.js'
export default {
name: 'AppHeader',
mixins: [loadConfig],
props: {
effect: {
type: String,
default: 'transparent',
description: '导航栏主题,(transparent | dark | light)'
}
},
methods: {
openNewTab
},
computed: {
...mapState(['allModules'])
}
}
</script>

View File

@ -0,0 +1,2 @@
export { default as AppFooter } from './AppFooter'
export { default as AppHeader } from './AppHeader'

View File

@ -0,0 +1,53 @@
<template>
<section>
<app-header effect="light"></app-header>
<div class="layout-header">
<div class="header-inner">
<h1>{{ currentModule.name }}</h1>
</div>
</div>
<div class="layout-body">
<div class="body-inner">
<transition name="el-fade-in-linear">
<router-view></router-view>
</transition>
</div>
</div>
<app-footer></app-footer>
</section>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import { AppHeader, AppFooter } from './components'
import { mapState, mapMutations } from 'vuex'
import { queryModuleByRoute } from '@/api/module'
export default {
name: 'AppLayout',
mixins: [loadConfig],
components: { AppHeader, AppFooter },
methods: {
...mapMutations(['SET_CURRENT_MODULE']),
getModule() {
queryModuleByRoute(this.route).then(res => {
this.SET_CURRENT_MODULE(res.data)
})
}
},
computed: {
...mapState(['currentModule']),
route() {
return this.$route.name
}
},
watch: {
route() {
this.getModule()
}
},
created() {
this.getModule()
}
}
</script>

15
portal_client/src/main.js Normal file
View File

@ -0,0 +1,15 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import Up from './plugins/up-kit'
Vue.config.productionTip = false
Vue.use(Up)
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

View File

@ -0,0 +1,15 @@
import { mapState } from 'vuex'
export default {
data() {
return {
config: null
}
},
computed: {
...mapState(['appSetting'])
},
created() {
this.config = this.appSetting[this.$options.name]
}
}

View File

@ -0,0 +1,45 @@
import { mapState } from 'vuex'
import { queryByQuery } from '../api/article.js'
export default {
data() {
return {
articles: [],
currentPage: 1,
pageSize: 10,
total: 0
}
},
methods: {
getArticles() {
queryByQuery({
title: '',
author: '',
module: this.currentModule.name,
status: "'已发布'",
startDate: null,
endDate: null,
isDeleted: 0,
currentPage: this.currentPage,
pageSize: this.pageSize
}).then(res => {
this.articles = res.data.list
this.total = res.data.total
})
},
showMore() {
this.pageSize += 10
this.getArticles()
}
},
computed: {
...mapState(['currentModule'])
},
watch: {
currentModule() {
if (this.currentModule) {
this.getArticles()
}
}
}
}

View File

@ -0,0 +1,15 @@
import '../assets/vendor/font-awesome/css/font-awesome.css'
import '../assets/scss/up.scss'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import Element from 'element-ui'
import VueLazyload from 'vue-lazyload'
export default {
install(Vue) {
Vue.use(Element)
Vue.use(VueLazyload)
}
}

View File

@ -0,0 +1,105 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '../store'
import { getAppSetting } from '../utils/index'
import { queryAllModules } from '../api/module'
Vue.use(VueRouter)
const routes = [
{
path: '/',
redirect: { name: 'home' }
},
{
path: '/home',
name: 'home',
component: () => import('../views/home')
},
{
path: '/article/:id/:uuid',
name: 'article',
component: () => import('../views/article'),
props: true
},
{
path: '/teacher/:uuid',
name: 'teacher',
component: () => import('../views/teacher'),
props: true
},
{
path: '/student/:uuid',
name: 'studnet',
component: () => import('../views/student'),
props: true
},
{
path: '/error',
name: 'error',
component: () => import('../views/error')
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
scrollBehavior: () => ({ x: 0, y: 0 }),
routes
})
// 配置路由导航守卫
router.beforeEach((to, from, next) => {
// 如果路由不为空,则放行
if (store.state.allModules.length > 0) {
return next()
}
// 获取全局配置
getAppSetting()
// 获取菜单列表
queryAllModules()
.then(res => {
// 将菜单全局保存
store.commit('SET_ALL_MODULES', res.data)
var dynamicRoutes = []
// 递归生成路由
generateRoutes(dynamicRoutes, res.data)
// 添加布局组件路由
router.addRoute({
path: '/layout',
name: 'AppLayout',
component: () => import('../layout'),
children: dynamicRoutes
})
// 除已定义的路由其他路由全部跳转至404页面
router.addRoute({ path: '/*', redirect: { name: 'error' } })
// 确保动态路由已经完全加载上去
next({ ...to, replace: true })
})
.catch(() => {
next({ name: 'error' })
})
})
// 递归生成路由
function generateRoutes(dynamicRoutes, modules) {
modules.forEach(item => {
// 只有子菜单拥有路由和路由名称
if (item.path || item.routeName) {
dynamicRoutes.push({
path: item.path,
name: item.routeName,
component: () =>
Promise.resolve(
require(`@/views${item.component}`).default // 路径中不能包含.或..等
)
})
}
// 如果有子菜单,生成子菜单的路由
if (item.children) {
return generateRoutes(dynamicRoutes, item.children)
}
})
}
export default router

View File

@ -0,0 +1,25 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
appSetting: {},
currentModule: {},
allModules: []
},
mutations: {
SET_APP_SETTING(state, appSetting) {
state.appSetting = appSetting
},
SET_CURRENT_MODULE(state, currentModule) {
state.currentModule = currentModule
},
SET_ALL_MODULES(state, allModules) {
state.allModules = allModules
}
},
actions: {},
modules: {}
})

View File

@ -0,0 +1,80 @@
/**
* 打开新标签页
* @param {String} href 网页链接
*/
export function openNewTab(href) {
if (!href) return
window.open(href, '_blank')
}
/**
* 日期格式化
* @param {String} date 待格式化日期
* @returns 格式化日期
*/
export function dateFormat1(date) {
// 待格式化日期
var dateObject = new Date(date)
// 现在
var nowDate = new Date()
const year =
dateObject.getFullYear() === nowDate.getFullYear()
? ''
: dateObject.getFullYear() + '-'
const month = prefixInteger(dateObject.getMonth() + 1, 2)
const day = prefixInteger(dateObject.getDate(), 2)
return `${year}${month}-${day}`
}
/**
* 日期格式化
* @param {String} date 待格式化日期
* @returns 格式化日期
*/
export function dateFormat2(date) {
// 待格式化日期
var dateObject = new Date(date)
var dateTime = dateObject.getTime()
// 现在
var nowDate = new Date()
// 今天23:59:59
var tonightTime = new Date(
`${nowDate.getFullYear()}-${nowDate.getMonth() +
1}-${nowDate.getDate()} 23:59:59`
).getTime()
// 一天的毫秒数
const oneDayTime = 24 * 60 * 60 * 1000
if (tonightTime - dateTime < oneDayTime) {
return '今天'
} else if (tonightTime - dateTime < 2 * oneDayTime) {
return '昨天'
} else if (tonightTime - dateTime < 3 * oneDayTime) {
return '前天'
} else if (tonightTime - dateTime < 4 * oneDayTime) {
return '三天前'
} else if (tonightTime - dateTime < 5 * oneDayTime) {
return '四天前'
} else if (tonightTime - dateTime < 6 * oneDayTime) {
return '五天前'
} else if (tonightTime - dateTime < 7 * oneDayTime) {
return '六天前'
} else if (tonightTime - dateTime < 14 * oneDayTime) {
return '一周前'
} else {
return `${
dateObject.getFullYear() === nowDate.getFullYear()
? ''
: dateObject.getFullYear() + '年'
}${dateObject.getMonth() + 1}月${dateObject.getDate()}`
}
}
/**
* 在数字前补0
* @param {Number} num 数字
* @param {Number} n 需要的字符长度
* @returns 补0后的数字
*/
function prefixInteger(num, n) {
return (Array(n).join(0) + num).slice(-n)
}

View File

@ -0,0 +1,12 @@
import { load } from '../api/config'
import store from '../store'
/**
* 获取全局配置
*/
export function getAppSetting() {
load().then(res => {
const appSetting = JSON.parse(res.data)
store.commit('SET_APP_SETTING', appSetting)
})
}

View File

@ -0,0 +1,25 @@
import axios from 'axios'
const service = axios.create({
baseURL: '/portal', // 配置请求的根路径
timeout: 5000
})
// 配置响应拦截器
service.interceptors.response.use(
res => {
console.log(res)
const status = res.data.code
const message = res.data.msg
if (status !== 0) {
return Promise.reject(new Error(message))
}
return res.data
},
error => {
console.log(error)
return Promise.reject(error)
}
)
export default service

View File

@ -0,0 +1,87 @@
<template>
<div>
<app-header effect="light"></app-header>
<div class="layout-body">
<div class="body-inner">
<!-- 文章标题 -->
<span class="article-title">{{ article.title }}</span>
<!-- 其他信息 -->
<div class="article-info">
<span v-if="article.author">{{ article.author.realName }}</span>
<span>{{ article.updateTime | dateFormat2 }}</span>
</div>
<!-- 分割线 -->
<el-divider></el-divider>
<!-- 文章内容 -->
<div v-html="article.content" class="article-content ql-editor"></div>
<!-- 文章附件 -->
<div v-if="article.files && article.files.length" class="article-file">
<div v-for="(item, index) in article.files" :key="index">
<el-link icon="el-icon-download" @click="openNewTab(item.url)">
附件{{ index + 1 }}{{ item.name }}
</el-link>
</div>
</div>
</div>
</div>
<app-footer></app-footer>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import { AppHeader, AppFooter } from '@/layout/components'
import { openNewTab, dateFormat2 } from '@/utils/common'
import { queryById } from '@/api/article'
export default {
name: 'AnArticle',
props: {
id: {
type: String,
default: '',
description: '文章id'
},
uuid: {
type: String,
default: '',
description: '文章uuid'
}
},
mixins: [loadConfig],
components: { AppHeader, AppFooter },
filters: {
dateFormat2
},
data() {
return {
article: {}
}
},
methods: {
openNewTab,
getArticle() {
queryById(this.id, this.uuid).then(res => {
if (res.data) {
this.article = res.data
} else {
this.$router.push('/error')
}
})
}
},
computed: {
path() {
return this.$route.path
}
},
watch: {
path() {
this.getArticle()
}
},
created() {
this.getArticle()
}
}
</script>

View File

@ -0,0 +1,21 @@
<template>
<card-list
class="card-view"
slot="body"
:data="articles"
:column="3"
:image-height="280"
></card-list>
</template>
<script>
import CardList from '@/components/CardList'
import loadConfig from '@/mixins/load-config'
import queryArticle from '@/mixins/query-article'
export default {
name: 'card-view',
mixins: [loadConfig, queryArticle],
components: { CardList }
}
</script>

View File

@ -0,0 +1,33 @@
<template>
<div>
<app-header effect="light"></app-header>
<section class="section-error">
<div>
<el-image src="/img/404.png"></el-image>
<h1>抱歉页面无法访问</h1>
<div>
您要查看的页面不存在建议您访问我们的
<el-link :underline="false" href="/">首页</el-link>
</div>
</div>
</section>
<app-footer></app-footer>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import { AppHeader, AppFooter } from '@/layout/components'
export default {
name: 'error',
mixins: [loadConfig],
components: {
AppHeader,
AppFooter
}
}
</script>
<style></style>

View File

@ -0,0 +1,95 @@
<template>
<div class="college">
<h1>{{ value }}</h1>
<el-divider></el-divider>
<el-row
v-for="line in Math.ceil(students.length / 3)"
:key="line"
:gutter="20"
>
<el-col
v-for="(item, index) in students.slice((line - 1) * 3, line * 3)"
:key="index"
:span="12"
>
<el-row
:gutter="10"
class="card"
@click.native="$router.push(item.path)"
>
<el-col :span="6">
<!-- 学生照片 -->
<!-- <el-image-->
<!-- :src="item.file.url"-->
<!-- :alt="item.name"-->
<!-- fit="scale-down"-->
<!-- ></el-image>-->
<img
:src="item.file.url"
:alt="item.name"
object-fit="scale-down"
width="110px"
height="155px"
/>
</el-col>
<el-col :span="18">
<!-- 学生姓名与学号 -->
<div>
<span class="teacher-name">{{ item.name }}</span>
<span class="el-icon--right">{{ item.stuId }}</span>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
import { queryBySession } from '@/api/student'
export default {
name: 'Session',
props: {
value: {
default: '',
type: String,
description: '哪一届'
}
},
data() {
return {
students: []
}
},
methods: {
getStudents() {
queryBySession(this.value).then((res) => {
this.students = this.selectPost(res.data)
console.log(this.students)
})
},
selectPost(data) {
var res = []
for (var i = 0; i < data.length; i++) {
if (data[i].state === 0) res.push(data[i]) // 12
}
return res
}
},
watch: {
value: {
handler(val) {
if (val) {
this.getStudents()
}
},
deep: true,
immediate: true
}
}
}
</script>
<style>
</style>

View File

@ -0,0 +1,32 @@
<template>
<div>
<template v-for="(item, index) in sessions">
<session :key="index" :value="item.toString()"></session>
</template>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import Session from './Session'
import { querySession } from '@/api/student'
export default {
name: 'StudentList',
mixins: [loadConfig],
components: { Session },
data() {
return {
sessions: []
}
},
created() {
querySession().then((res) => {
this.sessions = res.data
})
}
}
</script>
<style>
</style>

View File

@ -0,0 +1,18 @@
<template>
<section class="carousel">
<el-carousel height="40vw" :interval="5000">
<el-carousel-item v-for="item in config" :key="item.id">
<el-image :src="item.url"></el-image>
</el-carousel-item>
</el-carousel>
</section>
</template>
<script>
import loadConfig from '@/mixins/load-config'
export default {
name: 'Carousel',
mixins: [loadConfig]
}
</script>

View File

@ -0,0 +1,39 @@
<template>
<section
class="chunk"
:class="[`chunk-${theme}`]"
:style="[
bgImage ? '' : `bg-image: url(${bgImage})`,
bgColor ? '' : `bg-color: ${bgColor}`,
'bg-size: contain'
]"
>
<div class="title">
<h1><slot></slot></h1>
</div>
<slot name="body"></slot>
</section>
</template>
<script>
export default {
name: 'Chunk',
props: {
theme: {
default: 'light',
type: String,
description: '主题light | dark'
},
'bg-image': {
default: '',
type: String,
description: '背景图片'
},
'bg-color': {
default: '',
type: String,
description: '背景颜色'
}
}
}
</script>

View File

@ -0,0 +1,29 @@
<template>
<chunk>
<card-list
slot="body"
:data="Array.from(config)"
:column="4"
:card-width="250"
:card-height="100"
:show-border="true"
:show-banner="false"
></card-list>
企业合作
</chunk>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import Chunk from '../Chunk'
import CardList from '@/components/CardList'
export default {
name: 'Cooperation',
mixins: [loadConfig],
components: {
Chunk,
CardList
}
}
</script>

View File

@ -0,0 +1,71 @@
<template>
<el-card class="news-item" shadow="never">
<div class="news-item-title">
<span>{{ module.name }}</span>
<el-link @click.native="$router.push(module.path)" :underline="false">
更多
<i class="el-icon-arrow-right"></i>
</el-link>
</div>
<ul>
<li v-for="(article, index) in list" :key="index">
<div>
<a @click="$router.push(article.path)">{{ article.title }}</a>
</div>
<span>{{ article.updateTime | dateFormat1 }}</span>
</li>
</ul>
</el-card>
</template>
<script>
import { openNewTab, dateFormat1 } from '@/utils/common'
import { queryByQuery } from '@/api/article'
export default {
name: 'Item',
props: {
module: {
type: Object,
description: '模块信息'
}
},
data() {
return {
list: []
}
},
methods: {
openNewTab,
getArticles() {
queryByQuery({
title: '',
author: '',
module: this.module.name,
status: "'已发布'",
startDate: null,
endDate: null,
isDeleted: 0,
currentPage: 1,
pageSize: 10
}).then(res => {
this.list = res.data.list
})
}
},
filters: {
dateFormat1
},
watch: {
module: {
handler(val) {
if (val) {
this.getArticles()
}
},
deep: true,
immediate: true
}
}
}
</script>

View File

@ -0,0 +1,26 @@
<template>
<chunk class="news">
<el-row :gutter="15" slot="body">
<el-col
:span="24 / config.length"
v-for="(item, index) in config"
:key="index"
>
<item :module="item"></item>
</el-col>
</el-row>
新闻中心
</chunk>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import Chunk from '../Chunk'
import Item from './Item'
export default {
name: 'News',
mixins: [loadConfig],
components: { Chunk, Item }
}
</script>

View File

@ -0,0 +1,29 @@
<template>
<chunk class="research">
<el-row :gutter="15" slot="body">
<el-col
:span="6"
v-for="(item, index) in Array.from(config)"
:key="index"
@click.native="$router.push(item.path)"
>
<div class="item">
<el-image :src="item.fileUrl"></el-image>
<span>{{ item.title }}</span>
</div>
</el-col>
</el-row>
科研动态
</chunk>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import Chunk from '../Chunk'
export default {
name: 'Research',
mixins: [loadConfig],
components: { Chunk }
}
</script>

View File

@ -0,0 +1,23 @@
<template>
<chunk class="team" theme="dark">
<card-list
slot="body"
:data="Array.from(config)"
:column="3"
:image-height="280"
></card-list>
科研团队
</chunk>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import Chunk from '../Chunk'
import CardList from '@/components/CardList'
export default {
name: 'Team',
components: { Chunk, CardList },
mixins: [loadConfig]
}
</script>

View File

@ -0,0 +1,5 @@
export { default as Carousel } from './Carousel'
export { default as Cooperation } from './Cooperation'
export { default as News } from './News'
export { default as Research } from './Research'
export { default as Team } from './Team'

View File

@ -0,0 +1,51 @@
<template>
<div>
<app-header effect="transparent"></app-header>
<component
v-for="(item, index) in components"
:key="index"
:is="item"
></component>
<app-footer></app-footer>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import { AppHeader, AppFooter } from '@/layout/components'
import { Carousel, Cooperation, News, Research, Team } from './components'
import { queryComponents } from '@/api/component.js'
export default {
name: 'AppHome',
mixins: [loadConfig],
components: {
AppHeader,
AppFooter,
Carousel,
Cooperation,
News,
Research,
Team
},
data() {
return {
components: []
}
},
methods: {
getComponents() {
queryComponents().then(res => {
res.data.forEach(item => {
if (item.status) {
this.components.push(item.name)
}
})
})
}
},
created() {
this.getComponents()
}
}
</script>

View File

@ -0,0 +1,49 @@
<template>
<div class="image-list">
<div v-if="total === 0" class="tip">
暂无内容
</div>
<template v-else>
<el-row :gutter="20" v-for="(item, index) in articles" :key="index">
<el-col :span="5"><el-image :src="item.fileUrl"></el-image></el-col>
<el-col :span="17">
<el-link :underline="false" @click="$router.push(item.path)">
{{ item.title }}
</el-link>
<div v-html="item.content" class="content"></div>
<div class="update-time">
{{ item.updateTime | dateFormat2 }}
</div>
</el-col>
<el-col :span="2">
<el-button
icon="el-icon-right"
circle
@click="$router.push(item.path)"
></el-button>
</el-col>
</el-row>
<div class="show-more">
<el-link
v-if="articles.length !== total && total !== 0"
:underline="false"
@click="showMore"
>
显示更多
</el-link>
</div>
</template>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
import queryArticle from '@/mixins/query-article'
import { dateFormat2 } from '@/utils/common'
export default {
name: 'image-list',
mixins: [loadConfig, queryArticle],
filters: { dateFormat2 }
}
</script>

View File

@ -0,0 +1,10 @@
<template>
<div></div>
</template>
<script>
export default {}
</script>
<style>
</style>

View File

@ -0,0 +1,31 @@
<template>
<div class="overview">
<p>
电子科技大学公共安全技术研究中心全称电子科技大学公共安全信息与装备集成技术研究中心University
of electronic science and technology od China, Center of Public Security
Information and Equipment Integration
technology以信息与软件工程学院为依托联合物理学院计算机科学与工程学院光电信息学院信息与通信工程学院成都研究院5大院的技术力量立足于公共安全领域开展相关技术研究与应用并实现产业化同时中心是连接政府高校研究院所企业和资本的纽带和中枢也是整合高校科研资源扩展学科方向促进高校生态体系的发展和领导先驱
</p>
<br>
<p>
公共安全技术研究中心校内核心研发人员1000余人其中国家千人计划专家2名长江学者特聘教授2名高级技术职称专职人员232人博士学位的研究人员330人涵盖电路与系统信息安全雷达系统图像处理云计算大数据分析通信与信息等专业同时校外研发团队近200人分布于各省市公安机关联合实验室2016年四川省发改委批准电子科技大学成都研究院和电子科技大学联合实施四川省警用信息化装备工程实验室项目中心成为第一批获批准的省级工程实验室
</p>
<br>
<p>
公共安全研究中心通过构建行业影响力带动并支撑产业联盟形成了公共安全产业联盟与多家企业达成合作成立电子科技大学·汉腾汽车电子研究院成立电子科技大学·上海依图网络科技有限公司联合研究中心与湖南广播电视台广播传媒中心共建智慧广播技术研究联合实验室以及与国家数据通信工程技术研究中心大数据与信息安全联合实验室
</p>
<br>
<p>
团队从事公共安全行业相关技术服务12年团队及成员三次获得国家科技发明进步二等奖四次获得省部级科技奖励一等奖主持及参与上百个国家自然基金重大研究计划国家自然科学基金重点项目863项目973项目等国家重要科技项目
</p>
</div>
</template>
<script>
import loadConfig from '@/mixins/load-config'
export default {
name: 'overview',
mixins: [loadConfig]
}
</script>

Some files were not shown because too many files have changed in this diff Show More