Compare commits
	
		
			3 Commits
		
	
	
		
			7baa91ca0c
			...
			17cf3cf4b1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 17cf3cf4b1 | ||
|  | 04ee7f7549 | ||
|  | 1f13adbef3 | 
							
								
								
									
										29
									
								
								nacos_config/DKHA_CLOUD_GROUP/common.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,29 @@ | |||||||
|  | spring: | ||||||
|  |   jackson: | ||||||
|  |     time-zone: GMT+8 | ||||||
|  |     date-format: yyyy-MM-dd HH:mm:ss | ||||||
|  |   cloud: | ||||||
|  |     sentinel: | ||||||
|  |       enabled: true | ||||||
|  |       transport: | ||||||
|  |         dashboard: localhost:8180 | ||||||
|  | management: | ||||||
|  |   endpoints: | ||||||
|  |     web: | ||||||
|  |       exposure: | ||||||
|  |         include: "*" | ||||||
|  |   endpoint: | ||||||
|  |     health: | ||||||
|  |       show-details: ALWAYS | ||||||
|  | feign: | ||||||
|  |   sentinel: | ||||||
|  |     enabled: true | ||||||
|  |   client: | ||||||
|  |     config: | ||||||
|  |       default: | ||||||
|  |         loggerLevel: FULL | ||||||
|  |   httpclient: | ||||||
|  |     enabled: true | ||||||
|  | ribbon: | ||||||
|  |   ReadTimeout: 300000 | ||||||
|  |   ConnectTimeout: 300000 | ||||||
							
								
								
									
										58
									
								
								nacos_config/DKHA_CLOUD_GROUP/datasource.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,58 @@ | |||||||
|  | spring: | ||||||
|  |   servlet: | ||||||
|  |     multipart: | ||||||
|  |       max-file-size: -1 | ||||||
|  |       max-request-size: -1 | ||||||
|  |   redis: | ||||||
|  |     host: 192.168.1.197 | ||||||
|  |     port: 6379 | ||||||
|  |     database: 0 | ||||||
|  |     password: menhu@123 | ||||||
|  |     timeout: 30s | ||||||
|  |   datasource: | ||||||
|  |     druid: | ||||||
|  |       driver-class-name: com.mysql.cj.jdbc.Driver | ||||||
|  |       url: jdbc:mysql://192.168.1.197:3306/portal?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai | ||||||
|  |       username: root | ||||||
|  |       password: menhu@123 | ||||||
|  |       initial-size: 2 | ||||||
|  |       max-active: 5 | ||||||
|  |       min-idle: 2 | ||||||
|  |       max-wait: 6000 | ||||||
|  |       pool-prepared-statements: true | ||||||
|  |       max-pool-prepared-statement-per-connection-size: 5 | ||||||
|  |       time-between-eviction-runs-millis: 60000 | ||||||
|  |       min-evictable-idle-time-millis: 300000 | ||||||
|  |       test-while-idle: true | ||||||
|  |       test-on-borrow: false | ||||||
|  |       test-on-return: false | ||||||
|  |       filter: | ||||||
|  |         stat: | ||||||
|  |           log-slow-sql: true | ||||||
|  |           slow-sql-millis: 1000 | ||||||
|  |           merge-sql: false | ||||||
|  |         wall: | ||||||
|  |           config: | ||||||
|  |             multi-statement-allow: true | ||||||
|  |   rabbitmq: | ||||||
|  |     host: 192.168.1.197 | ||||||
|  |     port: 5672 | ||||||
|  |     username: admin | ||||||
|  |     password: menhu@123 | ||||||
|  |     publisher-returns: true | ||||||
|  |     listener: | ||||||
|  |       simple: | ||||||
|  |         acknowledge-mode: manual | ||||||
|  |         prefetch: 5 | ||||||
|  | mybatis-plus: | ||||||
|  |   mapper-locations: classpath:/mapper/**/*.xml | ||||||
|  |   typeAliasesPackage: com.dkha.entity | ||||||
|  |   global-config: | ||||||
|  |     db-config: | ||||||
|  |       id-type: ID_WORKER | ||||||
|  |     banner: false | ||||||
|  |   configuration: | ||||||
|  |     map-underscore-to-camel-case: true | ||||||
|  |     cache-enabled: false | ||||||
|  |     call-setters-on-nulls: true | ||||||
|  |     jdbc-type-for-null: 'null' | ||||||
							
								
								
									
										200
									
								
								nacos_config/DKHA_CLOUD_GROUP/gateway.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,200 @@ | |||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "remark": "认证服务", | ||||||
|  |     "id": "dkha-auth-server", | ||||||
|  |     "uri": "lb://dkha-auth-server", | ||||||
|  |     "order": "1", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/auth/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "Admin服务", | ||||||
|  |     "id": "dkha-admin-server", | ||||||
|  |     "uri": "lb://dkha-admin-server", | ||||||
|  |     "order": "2", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/sys/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "监控服务", | ||||||
|  |     "id": "dkha-monitor-server", | ||||||
|  |     "uri": "lb://dkha-monitor-server", | ||||||
|  |     "order": "3", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/monitor/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "OSS服务", | ||||||
|  |     "id": "dkha-oss-server", | ||||||
|  |     "uri": "lb://dkha-oss-server", | ||||||
|  |     "order": "4", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/oss/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "消息服务", | ||||||
|  |     "id": "dkha-message-server", | ||||||
|  |     "uri": "lb://dkha-message-server", | ||||||
|  |     "order": "5", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/message/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "工作流服务", | ||||||
|  |     "id": "dkha-activiti-server", | ||||||
|  |     "uri": "lb://dkha-activiti-server", | ||||||
|  |     "order": "6", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/activiti/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "定时任务服务", | ||||||
|  |     "id": "dkha-job-server", | ||||||
|  |     "uri": "lb://dkha-job-server", | ||||||
|  |     "order": "7", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/job/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "APP流服务", | ||||||
|  |     "id": "dkha-api-server", | ||||||
|  |     "uri": "lb://dkha-api-server", | ||||||
|  |     "order": "8", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/api/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     "remark": "门户网站", | ||||||
|  |     "id": "dkha-portal-server", | ||||||
|  |     "uri": "lb://dkha-portal-server", | ||||||
|  |     "order": "9", | ||||||
|  |     "predicates": [ | ||||||
|  |       { | ||||||
|  |         "name": "Path", | ||||||
|  |         "args": { | ||||||
|  |           "pattern": "/portal/**" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     "filters": [ | ||||||
|  |       { | ||||||
|  |         "name": "StripPrefix", | ||||||
|  |         "args": { | ||||||
|  |           "StripPrefix": 0 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										3
									
								
								portal_client/.browserslistrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,3 @@ | |||||||
|  | > 1% | ||||||
|  | last 2 versions | ||||||
|  | not dead | ||||||
							
								
								
									
										5
									
								
								portal_client/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,5 @@ | |||||||
|  | [*.{js,jsx,ts,tsx,vue}] | ||||||
|  | indent_style = space | ||||||
|  | indent_size = 2 | ||||||
|  | trim_trailing_whitespace = true | ||||||
|  | insert_final_newline = true | ||||||
							
								
								
									
										4
									
								
								portal_client/.env.development
									
									
									
									
									
										Normal 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' | ||||||
							
								
								
									
										4
									
								
								portal_client/.env.production
									
									
									
									
									
										Normal 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' | ||||||
							
								
								
									
										18
									
								
								portal_client/.eslintrc.js
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @ -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? | ||||||
							
								
								
									
										7
									
								
								portal_client/.prettierrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |   "printWidth": 80, | ||||||
|  |   "tabWidth": 2, | ||||||
|  |   "singleQuote": true, | ||||||
|  |   "semi": false, | ||||||
|  |   "htmlWhitespaceSensitivity": "ignore" | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								portal_client/README.md
									
									
									
									
									
										Normal 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/). | ||||||
							
								
								
									
										10
									
								
								portal_client/babel.config.js
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
							
								
								
									
										43
									
								
								portal_client/package.json
									
									
									
									
									
										Normal 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" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 30 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/404.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 45 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/ai.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 81 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/bigdata.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 48 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/brand_blue.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/brand_white.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.9 KiB | 
							
								
								
									
										1
									
								
								portal_client/public/img/education.svg
									
									
									
									
									
										Normal 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 | 
							
								
								
									
										1
									
								
								portal_client/public/img/fellow.svg
									
									
									
									
									
										Normal 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 | 
							
								
								
									
										1
									
								
								portal_client/public/img/harvest.svg
									
									
									
									
									
										Normal 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 | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/home_bg1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 85 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/home_bg2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 85 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/home_bg3.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 192 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/home_bg4.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 205 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 540 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/manufacture.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 79 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/police.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 44 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/security.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 193 KiB | 
							
								
								
									
										1
									
								
								portal_client/public/img/share.svg
									
									
									
									
									
										Normal 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 | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/public/img/telecom.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 66 KiB | 
							
								
								
									
										17
									
								
								portal_client/public/index.html
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @ -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> | ||||||
							
								
								
									
										24
									
								
								portal_client/src/api/article.js
									
									
									
									
									
										Normal 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 | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								portal_client/src/api/component.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,8 @@ | |||||||
|  | import request from '../utils/request' | ||||||
|  | 
 | ||||||
|  | export function queryComponents() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/component', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								portal_client/src/api/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,8 @@ | |||||||
|  | import request from '../utils/request' | ||||||
|  | 
 | ||||||
|  | export function load() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/config/load', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								portal_client/src/api/module.js
									
									
									
									
									
										Normal 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' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								portal_client/src/api/student.js
									
									
									
									
									
										Normal 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' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								portal_client/src/api/teacher.js
									
									
									
									
									
										Normal 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' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.7 KiB | 
							
								
								
									
										91
									
								
								portal_client/src/assets/scss/custom/_app-footer.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										158
									
								
								portal_client/src/assets/scss/custom/_app-header.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										0
									
								
								portal_client/src/assets/scss/custom/_app-home.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										36
									
								
								portal_client/src/assets/scss/custom/_app-layout.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								portal_client/src/assets/scss/custom/_article.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										66
									
								
								portal_client/src/assets/scss/custom/_card-list.scss
									
									
									
									
									
										Normal 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); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								portal_client/src/assets/scss/custom/_carousel.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,6 @@ | |||||||
|  | .carousel { | ||||||
|  |   .el-image { | ||||||
|  |     width: 100%; | ||||||
|  |     height: inherit; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								portal_client/src/assets/scss/custom/_chunk.scss
									
									
									
									
									
										Normal 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; | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								portal_client/src/assets/scss/custom/_error.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										78
									
								
								portal_client/src/assets/scss/custom/_global.scss
									
									
									
									
									
										Normal 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; | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								portal_client/src/assets/scss/custom/_image-list.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								portal_client/src/assets/scss/custom/_mixins.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | |||||||
|  | @import './mixins/animation'; | ||||||
							
								
								
									
										45
									
								
								portal_client/src/assets/scss/custom/_news.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								portal_client/src/assets/scss/custom/_overview.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,8 @@ | |||||||
|  | .overview { | ||||||
|  |   line-height: 180%; | ||||||
|  |   color: $--color-text-primary; | ||||||
|  | 
 | ||||||
|  |   p { | ||||||
|  |     text-indent: 2em; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								portal_client/src/assets/scss/custom/_research.scss
									
									
									
									
									
										Normal 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); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								portal_client/src/assets/scss/custom/_search.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								portal_client/src/assets/scss/custom/_teacher-list.scss
									
									
									
									
									
										Normal 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; | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								portal_client/src/assets/scss/custom/_teacher.scss
									
									
									
									
									
										Normal 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; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								portal_client/src/assets/scss/custom/_team.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,5 @@ | |||||||
|  | .team { | ||||||
|  |   background-image: url('/img/home_bg1.png'); | ||||||
|  |   background-size: contain; | ||||||
|  |   background-color: #172B4D; | ||||||
|  | } | ||||||
							
								
								
									
										137
									
								
								portal_client/src/assets/scss/custom/mixins/_animation.scss
									
									
									
									
									
										Normal 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; | ||||||
|  | } | ||||||
							
								
								
									
										996
									
								
								portal_client/src/assets/scss/element/_variables.scss
									
									
									
									
									
										Normal 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'; | ||||||
							
								
								
									
										23
									
								
								portal_client/src/assets/scss/up.scss
									
									
									
									
									
										Normal 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'; | ||||||
							
								
								
									
										2337
									
								
								portal_client/src/assets/vendor/font-awesome/css/font-awesome.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										4
									
								
								portal_client/src/assets/vendor/font-awesome/css/font-awesome.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/FontAwesome.otf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/fontawesome-webfont.eot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2671
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/fontawesome-webfont.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 434 KiB | 
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/fontawesome-webfont.ttf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								portal_client/src/assets/vendor/font-awesome/fonts/fontawesome-webfont.woff2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										102
									
								
								portal_client/src/components/CardList.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										59
									
								
								portal_client/src/layout/components/AppFooter/index.vue
									
									
									
									
									
										Normal 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 © {{ 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> | ||||||
							
								
								
									
										94
									
								
								portal_client/src/layout/components/AppHeader/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										2
									
								
								portal_client/src/layout/components/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,2 @@ | |||||||
|  | export { default as AppFooter } from './AppFooter' | ||||||
|  | export { default as AppHeader } from './AppHeader' | ||||||
							
								
								
									
										53
									
								
								portal_client/src/layout/index.vue
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @ -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') | ||||||
							
								
								
									
										15
									
								
								portal_client/src/mixins/load-config.js
									
									
									
									
									
										Normal 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] | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										45
									
								
								portal_client/src/mixins/query-article.js
									
									
									
									
									
										Normal 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() | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								portal_client/src/plugins/up-kit.js
									
									
									
									
									
										Normal 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) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										105
									
								
								portal_client/src/router/index.js
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										25
									
								
								portal_client/src/store/index.js
									
									
									
									
									
										Normal 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: {} | ||||||
|  | }) | ||||||
							
								
								
									
										80
									
								
								portal_client/src/utils/common.js
									
									
									
									
									
										Normal 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) | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								portal_client/src/utils/index.js
									
									
									
									
									
										Normal 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) | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								portal_client/src/utils/request.js
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										87
									
								
								portal_client/src/views/article/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										21
									
								
								portal_client/src/views/card-view/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										33
									
								
								portal_client/src/views/error/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										95
									
								
								portal_client/src/views/graduate-list/Session.vue
									
									
									
									
									
										Normal 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]) // 1表示硕士,2表示博士 | ||||||
|  |       } | ||||||
|  |       return res | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   watch: { | ||||||
|  |     value: { | ||||||
|  |       handler(val) { | ||||||
|  |         if (val) { | ||||||
|  |           this.getStudents() | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       deep: true, | ||||||
|  |       immediate: true | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style> | ||||||
|  | </style> | ||||||
							
								
								
									
										32
									
								
								portal_client/src/views/graduate-list/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										18
									
								
								portal_client/src/views/home/components/Carousel/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										39
									
								
								portal_client/src/views/home/components/Chunk/index.vue
									
									
									
									
									
										Normal 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> | ||||||
| @ -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> | ||||||
							
								
								
									
										71
									
								
								portal_client/src/views/home/components/News/Item.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										26
									
								
								portal_client/src/views/home/components/News/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										29
									
								
								portal_client/src/views/home/components/Research/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										23
									
								
								portal_client/src/views/home/components/Team/index.vue
									
									
									
									
									
										Normal 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> | ||||||
							
								
								
									
										5
									
								
								portal_client/src/views/home/components/index.js
									
									
									
									
									
										Normal 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' | ||||||
							
								
								
									
										51
									
								
								portal_client/src/views/home/index.vue
									
									
									
									
									
										Normal 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> | ||||||