├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main ├── java │ └── com │ │ └── casic │ │ └── demo │ │ ├── SpringVueDemoApplication.java │ │ ├── config │ │ └── CorsConfig.java │ │ ├── controller │ │ └── SysUserController.java │ │ ├── entity │ │ ├── RestResult.java │ │ ├── ResultCode.java │ │ └── SysUser.java │ │ ├── repository │ │ └── SysUserRepository.java │ │ ├── service │ │ ├── SysUserService.java │ │ └── SysUserServiceImpl.java │ │ └── utils │ │ └── ResultGenerator.java └── resources │ ├── application.properties │ ├── application.yml │ └── static │ ├── css │ ├── app.f80a0811ba9299f0d848fa0867636a1f.css │ └── app.f80a0811ba9299f0d848fa0867636a1f.css.map │ ├── fonts │ └── element-icons.6f0a763.ttf │ ├── index.html │ └── js │ ├── app.95df3dc4f9b431464eca.js │ ├── app.95df3dc4f9b431464eca.js.map │ ├── manifest.c009c63d34395e7570b9.js │ ├── manifest.c009c63d34395e7570b9.js.map │ ├── vendor.aafda755e0db696109d6.js │ └── vendor.aafda755e0db696109d6.js.map └── test └── java └── com └── casic └── demo └── SpringVueDemoApplicationTests.java /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | *.log 4 | 5 | ### STS ### 6 | .apt_generated 7 | .classpath 8 | .factorypath 9 | .project 10 | .settings 11 | .springBeans 12 | 13 | ### IntelliJ IDEA ### 14 | .idea 15 | *.iws 16 | *.iml 17 | *.ipr 18 | 19 | ### NetBeans ### 20 | nbproject/private/ 21 | build/ 22 | nbbuild/ 23 | dist/ 24 | nbdist/ 25 | .nb-gradle/ -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BekeyChao/spring-vue-demo/b450dff9359d86b53a17b6cfa6d75641eadb3657/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 bekey 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 前后端分离 Spring Booot + Vue 开发单页面应用(一) 2 | 3 | 目的是搭建一个可以复用的模板 4 | 5 | ### 开发环境介绍 6 | * JDK1.8 7 | * Node v8.9.3 8 | * npm v5.5.1 9 | * 开发工具IDEA(安装Vue.js插件) 10 | * 数据库MySQL 57 11 | * 版本管理工具 Git 12 | 13 | 都是一些基础的开发环境,具体搭建过程略。 14 | 15 | ### 博客地址 16 | [前后端分离 Spring Boot + Vue 开发单页面应用 个人总结(一)](https://my.oschina.net/u/3491123/blog/1592935) 17 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Migwn, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | # TODO classpath? 118 | fi 119 | 120 | if [ -z "$JAVA_HOME" ]; then 121 | javaExecutable="`which javac`" 122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123 | # readlink(1) is not available as standard on Solaris 10. 124 | readLink=`which readlink` 125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126 | if $darwin ; then 127 | javaHome="`dirname \"$javaExecutable\"`" 128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129 | else 130 | javaExecutable="`readlink -f \"$javaExecutable\"`" 131 | fi 132 | javaHome="`dirname \"$javaExecutable\"`" 133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134 | JAVA_HOME="$javaHome" 135 | export JAVA_HOME 136 | fi 137 | fi 138 | fi 139 | 140 | if [ -z "$JAVACMD" ] ; then 141 | if [ -n "$JAVA_HOME" ] ; then 142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143 | # IBM's JDK on AIX uses strange locations for the executables 144 | JAVACMD="$JAVA_HOME/jre/sh/java" 145 | else 146 | JAVACMD="$JAVA_HOME/bin/java" 147 | fi 148 | else 149 | JAVACMD="`which java`" 150 | fi 151 | fi 152 | 153 | if [ ! -x "$JAVACMD" ] ; then 154 | echo "Error: JAVA_HOME is not defined correctly." >&2 155 | echo " We cannot execute $JAVACMD" >&2 156 | exit 1 157 | fi 158 | 159 | if [ -z "$JAVA_HOME" ] ; then 160 | echo "Warning: JAVA_HOME environment variable is not set." 161 | fi 162 | 163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164 | 165 | # traverses directory structure from process work directory to filesystem root 166 | # first directory with .mvn subdirectory is considered project base directory 167 | find_maven_basedir() { 168 | 169 | if [ -z "$1" ] 170 | then 171 | echo "Path not specified to find_maven_basedir" 172 | return 1 173 | fi 174 | 175 | basedir="$1" 176 | wdir="$1" 177 | while [ "$wdir" != '/' ] ; do 178 | if [ -d "$wdir"/.mvn ] ; then 179 | basedir=$wdir 180 | break 181 | fi 182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183 | if [ -d "${wdir}" ]; then 184 | wdir=`cd "$wdir/.."; pwd` 185 | fi 186 | # end of workaround 187 | done 188 | echo "${basedir}" 189 | } 190 | 191 | # concatenates all lines of a file 192 | concat_lines() { 193 | if [ -f "$1" ]; then 194 | echo "$(tr -s '\n' ' ' < "$1")" 195 | fi 196 | } 197 | 198 | BASE_DIR=`find_maven_basedir "$(pwd)"` 199 | if [ -z "$BASE_DIR" ]; then 200 | exit 1; 201 | fi 202 | 203 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 204 | echo $MAVEN_PROJECTBASEDIR 205 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 206 | 207 | # For Cygwin, switch paths to Windows format before running java 208 | if $cygwin; then 209 | [ -n "$M2_HOME" ] && 210 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 211 | [ -n "$JAVA_HOME" ] && 212 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 213 | [ -n "$CLASSPATH" ] && 214 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 215 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 216 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 217 | fi 218 | 219 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 220 | 221 | exec "$JAVACMD" \ 222 | $MAVEN_OPTS \ 223 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 224 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 225 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 226 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM http://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 40 | 41 | @REM set %HOME% to equivalent of $HOME 42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 43 | 44 | @REM Execute a user defined script before this one 45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 49 | :skipRcPre 50 | 51 | @setlocal 52 | 53 | set ERROR_CODE=0 54 | 55 | @REM To isolate internal variables from possible post scripts, we use another setlocal 56 | @setlocal 57 | 58 | @REM ==== START VALIDATION ==== 59 | if not "%JAVA_HOME%" == "" goto OkJHome 60 | 61 | echo. 62 | echo Error: JAVA_HOME not found in your environment. >&2 63 | echo Please set the JAVA_HOME variable in your environment to match the >&2 64 | echo location of your Java installation. >&2 65 | echo. 66 | goto error 67 | 68 | :OkJHome 69 | if exist "%JAVA_HOME%\bin\java.exe" goto init 70 | 71 | echo. 72 | echo Error: JAVA_HOME is set to an invalid directory. >&2 73 | echo JAVA_HOME = "%JAVA_HOME%" >&2 74 | echo Please set the JAVA_HOME variable in your environment to match the >&2 75 | echo location of your Java installation. >&2 76 | echo. 77 | goto error 78 | 79 | @REM ==== END VALIDATION ==== 80 | 81 | :init 82 | 83 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 84 | @REM Fallback to current working directory if not found. 85 | 86 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 87 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 88 | 89 | set EXEC_DIR=%CD% 90 | set WDIR=%EXEC_DIR% 91 | :findBaseDir 92 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 93 | cd .. 94 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 95 | set WDIR=%CD% 96 | goto findBaseDir 97 | 98 | :baseDirFound 99 | set MAVEN_PROJECTBASEDIR=%WDIR% 100 | cd "%EXEC_DIR%" 101 | goto endDetectBaseDir 102 | 103 | :baseDirNotFound 104 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 105 | cd "%EXEC_DIR%" 106 | 107 | :endDetectBaseDir 108 | 109 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 110 | 111 | @setlocal EnableExtensions EnableDelayedExpansion 112 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 113 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 114 | 115 | :endReadAdditionalConfig 116 | 117 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 118 | 119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 121 | 122 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 123 | if ERRORLEVEL 1 goto error 124 | goto end 125 | 126 | :error 127 | set ERROR_CODE=1 128 | 129 | :end 130 | @endlocal & set ERROR_CODE=%ERROR_CODE% 131 | 132 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 133 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 134 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 135 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 136 | :skipRcPost 137 | 138 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 139 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 140 | 141 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 142 | 143 | exit /B %ERROR_CODE% 144 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.casic. 7 | spring-vue-demo 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | spring-vue-demo 12 | Demo project for Spring Boot And Vue 13 | 14 | 15 | org.springframework.boot 16 | spring-boot-starter-parent 17 | 1.5.9.RELEASE 18 | 19 | 20 | 21 | 22 | UTF-8 23 | UTF-8 24 | 1.8 25 | 26 | 27 | 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-data-jpa 33 | 34 | 35 | 36 | org.springframework.boot 37 | spring-boot-starter-web 38 | 39 | 40 | 41 | org.springframework.boot 42 | spring-boot-devtools 43 | runtime 44 | 45 | 46 | 47 | mysql 48 | mysql-connector-java 49 | runtime 50 | 51 | 52 | 53 | org.springframework.boot 54 | spring-boot-starter-test 55 | test 56 | 57 | 58 | 59 | 60 | 61 | 62 | org.springframework.boot 63 | spring-boot-maven-plugin 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/SpringVueDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; 6 | import org.springframework.boot.web.servlet.ErrorPage; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.http.HttpStatus; 9 | 10 | @SpringBootApplication 11 | public class SpringVueDemoApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(SpringVueDemoApplication.class, args); 15 | } 16 | 17 | @Bean 18 | public EmbeddedServletContainerCustomizer containerCustomizer() { 19 | 20 | return (container -> { 21 | ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); 22 | 23 | container.addErrorPages(error404Page); 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/config/CorsConfig.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.cors.CorsConfiguration; 6 | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; 7 | import org.springframework.web.filter.CorsFilter; 8 | 9 | /** 10 | * 设置允许跨域 11 | * @author bekey 12 | */ 13 | @Configuration 14 | public class CorsConfig { 15 | /** 16 | 允许任何域名使用 17 | 允许任何头 18 | 允许任何方法(post、get等) 19 | */ 20 | private CorsConfiguration buildConfig() { 21 | CorsConfiguration corsConfiguration = new CorsConfiguration(); 22 | // // addAllowedOrigin 不能设置为* 因为与 allowCredential 冲突,需要设置为具体前端开发地址 23 | corsConfiguration.addAllowedOrigin("http://localhost:9528"); 24 | corsConfiguration.addAllowedHeader("*"); 25 | corsConfiguration.addAllowedMethod("*"); 26 | // allowCredential 需设置为true 27 | corsConfiguration.setAllowCredentials(true); 28 | return corsConfiguration; 29 | } 30 | 31 | @Bean 32 | public CorsFilter corsFilter() { 33 | UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 34 | source.registerCorsConfiguration("/**", buildConfig()); 35 | return new CorsFilter(source); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/controller/SysUserController.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.controller; 2 | 3 | import com.casic.demo.entity.RestResult; 4 | import com.casic.demo.entity.SysUser; 5 | import com.casic.demo.service.SysUserService; 6 | import com.casic.demo.utils.ResultGenerator; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.dao.DataIntegrityViolationException; 11 | import org.springframework.validation.BindingResult; 12 | import org.springframework.validation.annotation.Validated; 13 | import org.springframework.web.bind.annotation.ExceptionHandler; 14 | import org.springframework.web.bind.annotation.RequestMapping; 15 | import org.springframework.web.bind.annotation.RequestMethod; 16 | import org.springframework.web.bind.annotation.RestController; 17 | 18 | import javax.servlet.http.HttpSession; 19 | import javax.validation.ConstraintViolationException; 20 | import javax.validation.Valid; 21 | import javax.validation.constraints.NotNull; 22 | 23 | /** 24 | * 用户控制层 25 | * . @RestController 该类下所有返回值默认以json格式进行返回 26 | * . @RequestMapping 匹配url地址 /user 27 | * . @Validated 代表该类启用参数验证,通过添加注解可以验证参数 28 | * Created by bekey on 2017/12/20. 29 | */ 30 | @RestController 31 | @RequestMapping("/user") 32 | @Validated 33 | public class SysUserController { 34 | private Logger log = LoggerFactory.getLogger(this.getClass()); 35 | 36 | private final SysUserService userService; 37 | 38 | private final ResultGenerator generator; 39 | 40 | @Autowired //自动装配 41 | public SysUserController(SysUserService userService, ResultGenerator generator) { 42 | this.userService = userService; 43 | this.generator = generator; 44 | } 45 | 46 | /** 47 | * 匹配 /user/register 地址 48 | * .在实体前添加 @Valid 注解代表要对这个实体进行验证,如果验证不通过就会报异常 49 | * bindingResult是对异常信息的包装,不过这里我们不用,而是交由异常处理器进行处理 50 | * @return 注册成功会将注册信息返回(!因为是demo所以没有考虑安全性) 51 | */ 52 | @RequestMapping("/register") 53 | public RestResult register(@Valid SysUser user, BindingResult bindingResult) { 54 | return generator.getSuccessResult("用户注册成功",userService.saveUser(user)); 55 | } 56 | 57 | /** 58 | * 匹配 /user/login 地址 ,限定POST方法 59 | * 。@NotNull 在字段前添加注解代表验证该字段,如果为空则报异常 60 | * @return 登陆成功则返回相关信息,否则返回错误提示 61 | */ 62 | @RequestMapping(value = "/login",method = RequestMethod.POST) 63 | public RestResult login(@NotNull(message = "用户名不能为空") String name,@NotNull(message = "密码不能为空") String password, HttpSession session) { 64 | SysUser user = userService.checkLogin(name, password); 65 | if(user != null) { 66 | //储存到session中 67 | session.setAttribute("user",user); 68 | return generator.getSuccessResult("登陆成功",user); 69 | } 70 | return generator.getFailResult("用户名/密码错误"); 71 | } 72 | 73 | /** 74 | * 为参数验证添加异常处理器 75 | */ 76 | @ExceptionHandler(ConstraintViolationException.class) 77 | public RestResult handleConstraintViolationException(ConstraintViolationException cve) { 78 | //这里简化处理了,cve.getConstraintViolations 会得到所有错误信息的迭代,可以酌情处理 79 | String errorMessage = cve.getConstraintViolations().iterator().next().getMessage(); 80 | return generator.getFailResult(errorMessage); 81 | } 82 | 83 | /** 84 | * 主键/唯一约束违反异常 85 | */ 86 | @ExceptionHandler(DataIntegrityViolationException.class) 87 | public RestResult handleDataIntegrityViolationException(DataIntegrityViolationException exception) { 88 | //如果注册两个相同的用户名到报这个异常 89 | return generator.getFailResult("违反主键/唯一约束条件"); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/entity/RestResult.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.entity; 2 | 3 | /** 4 | * 统一封装API返回信息 5 | * 千万别加@Entity 否则Hibernate会给你创建表 6 | * Created by bekey on 2017/12/10. 7 | */ 8 | public class RestResult { 9 | //状态码 10 | private int code; 11 | //消息 12 | private String message; 13 | //额外的内容 14 | private Object data; 15 | 16 | public RestResult(){ 17 | 18 | } 19 | 20 | public RestResult setCode(ResultCode code) { 21 | this.code = code.getCode(); 22 | return this; 23 | } 24 | 25 | public int getCode() { 26 | return code; 27 | } 28 | 29 | public RestResult setCode(int code) { 30 | this.code = code; 31 | return this; 32 | } 33 | 34 | public String getMessage() { 35 | return message; 36 | } 37 | 38 | public RestResult setMessage(String message) { 39 | this.message = message; 40 | return this; 41 | } 42 | 43 | public Object getData() { 44 | return data; 45 | } 46 | 47 | public RestResult setData(Object data) { 48 | this.data = data; 49 | return this; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/entity/ResultCode.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.entity; 2 | 3 | /** 4 | * 响应码枚举,参考HTTP状态码的语义 5 | * Created by bekey on 2017/12/10. 6 | */ 7 | public enum ResultCode { 8 | SUCCESS(200),//成功 9 | FAIL(400),//失败 10 | UNAUTHORIZED(401),//未认证(签名错误) 11 | NOT_FOUND(404),//接口不存在 12 | INTERNAL_SERVER_ERROR(500);//服务器内部错误 13 | 14 | private int code; 15 | 16 | private ResultCode(int code) { 17 | this.code = code; 18 | } 19 | 20 | public int getCode() { 21 | return this.code; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/entity/SysUser.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.entity; 2 | 3 | import javax.persistence.Column; 4 | import javax.persistence.Entity; 5 | import javax.persistence.GeneratedValue; 6 | import javax.persistence.Id; 7 | import javax.validation.constraints.NotNull; 8 | import javax.validation.constraints.Size; 9 | 10 | /** 11 | * 用户表实体类 12 | * Entity 代表这是实体类,要交给Hibernate管理 13 | * 。 @Size @NotNull 都是validation框架的注解,更多验证请参见网络资料 14 | * Created by bekey on 2017/12/20. 15 | */ 16 | @Entity 17 | public class SysUser { 18 | @Id 19 | @GeneratedValue 20 | private Integer id; //主键 自增 21 | 22 | @NotNull(message = "用户名不能为空") 23 | @Size(min = 6 , max = 18, message = "用户名应设为6至18位") 24 | @Column(unique = true,nullable = false) 25 | private String name; //唯一 非空 26 | 27 | @Column(nullable = false) 28 | @NotNull(message = "密码不能为空") 29 | @Size(min = 6 , max = 18, message = "密码应设为6至18位") 30 | private String password; //非空 31 | 32 | public Integer getId() { 33 | return id; 34 | } 35 | 36 | public void setId(Integer id) { 37 | this.id = id; 38 | } 39 | 40 | public String getName() { 41 | return name; 42 | } 43 | 44 | public void setName(String name) { 45 | this.name = name; 46 | } 47 | 48 | public String getPassword() { 49 | return password; 50 | } 51 | 52 | public void setPassword(String password) { 53 | this.password = password; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/repository/SysUserRepository.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.repository; 2 | 3 | import com.casic.demo.entity.SysUser; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | 6 | /** 7 | * 用户Dao层 8 | * 继承JapRepository,可以实现一些默认方法,如save/findAll/findOne/delete/count/exists 等 9 | * Created by bekey on 2017/12/20. 10 | */ 11 | public interface SysUserRepository extends JpaRepository { 12 | /** 13 | * 按用户名——密码查找 14 | */ 15 | SysUser findFirstByNameAndPassword(String name, String password); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/service/SysUserService.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.service; 2 | 3 | import com.casic.demo.entity.SysUser; 4 | 5 | /** 6 | * 用户服务层接口 7 | * Created by bekey on 2017/12/20. 8 | */ 9 | public interface SysUserService { 10 | /** 11 | * 注册用户 12 | * @param user 13 | * @return 注册成功将用户信息返回,否则返回null 14 | */ 15 | SysUser saveUser(SysUser user); 16 | 17 | /** 18 | * 检查用户名密码是否正确 19 | * @param name 用户名 20 | * @param password 密码 21 | * @return 验证通过则将用户信息返回,否则返回null 22 | */ 23 | SysUser checkLogin(String name,String password); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/service/SysUserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.service; 2 | 3 | import com.casic.demo.entity.SysUser; 4 | import com.casic.demo.repository.SysUserRepository; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Service; 7 | 8 | /** 9 | * 用户服务层实现类 10 | * Created by bekey on 2017/12/20. 11 | */ 12 | @Service("SysUserService") 13 | public class SysUserServiceImpl implements SysUserService{ 14 | @Autowired 15 | SysUserRepository userRepository; 16 | 17 | @Override 18 | public SysUser saveUser(SysUser user) { 19 | return userRepository.save(user); 20 | } 21 | 22 | @Override 23 | public SysUser checkLogin(String name, String password) { 24 | return userRepository.findFirstByNameAndPassword(name, password); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/casic/demo/utils/ResultGenerator.java: -------------------------------------------------------------------------------- 1 | package com.casic.demo.utils; 2 | 3 | 4 | import com.casic.demo.entity.RestResult; 5 | import com.casic.demo.entity.ResultCode; 6 | import org.springframework.stereotype.Component; 7 | 8 | /** 9 | * 工厂模式 10 | * 接口信息生成工具 11 | * 。@Component 添加到Spring组件中 12 | * Created by bekey on 2017/12/10. 13 | */ 14 | @Component 15 | public class ResultGenerator { 16 | 17 | private static final String SUCCESS = "success"; 18 | //成功 19 | public RestResult getSuccessResult() { 20 | return new RestResult() 21 | .setCode(ResultCode.SUCCESS) 22 | .setMessage(SUCCESS); 23 | } 24 | //成功,附带额外数据 25 | public RestResult getSuccessResult(Object data) { 26 | return new RestResult() 27 | .setCode(ResultCode.SUCCESS) 28 | .setMessage(SUCCESS) 29 | .setData(data); 30 | } 31 | //成功,自定义消息及数据 32 | public RestResult getSuccessResult(String message,Object data) { 33 | return new RestResult() 34 | .setCode(ResultCode.SUCCESS) 35 | .setMessage(message) 36 | .setData(data); 37 | } 38 | //失败,附带消息 39 | public RestResult getFailResult(String message) { 40 | return new RestResult() 41 | .setCode(ResultCode.FAIL) 42 | .setMessage(message); 43 | } 44 | //失败,自定义消息及数据 45 | public RestResult getFailResult(String message, Object data) { 46 | return new RestResult() 47 | .setCode(ResultCode.FAIL) 48 | .setMessage(message) 49 | .setData(data); 50 | } 51 | //自定义创建 52 | public RestResult getFreeResult(ResultCode code, String message, Object data) { 53 | return new RestResult() 54 | .setCode(code) 55 | .setMessage(message) 56 | .setData(data); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BekeyChao/spring-vue-demo/b450dff9359d86b53a17b6cfa6d75641eadb3657/src/main/resources/application.properties -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | # set server port 2 | server: 3 | port: 8888 # 配置端口 4 | context-path: / # 项目启动地址为 localhost:8888/ 5 | 6 | spring: 7 | datasource: # set database config 8 | url: jdbc:mysql://localhost:3306/springdemo?useUnicode=true&characterEncoding=utf8&useSSL=false 9 | username: normal 10 | password: normal 11 | driver-class-name: com.mysql.jdbc.Driver 12 | jpa: # set jpa 13 | database: MYSQL # specify ths DBMS 14 | show-sql: true # show or not log for each sql query 15 | hibernate: 16 | ddl-auto: update # Hibernate ddl auto(create, create-drop, update) 17 | naming: # naming strategy 18 | strategy: org.hibernate.cfg.ImprovedNamingStrategy 19 | properties: 20 | hibernate: # stripped before adding them to entity manager 21 | dialect: org.hibernate.dialect.MySQL5Dialect 22 | aop: #设置aop,aop依赖添加后默认是启用的 23 | proxy-target-class: true 24 | 25 | # Thymeleaf view template config 26 | # disable cache for dev 27 | # 配置和此项目无关,主要为设置thymeleaf 不严格检查HTML5 28 | thymeleaf: 29 | cache: false 30 | encoding: UTF-8 31 | # 设置LEGACYHTML5 并添加依赖 可以使thymeleaf不严格模式 32 | mode: LEGACYHTML5 33 | 34 | # mvc: 35 | # view: # 默认前后缀 36 | # prefix: / 37 | # suffix: .html 38 | # static-path-pattern: /** 39 | #logging: #相对位置,根目录 40 | # path: var/log 41 | # 日志级别 TRACE < DEBUG < INFO < WARN < ERROR < FATAL 42 | #logging: # 配置日志文件的配置方式 logback-spring.* 也为spring的默认命名规则 43 | # config: logback-spring.xml 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/main/resources/static/fonts/element-icons.6f0a763.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BekeyChao/spring-vue-demo/b450dff9359d86b53a17b6cfa6d75641eadb3657/src/main/resources/static/fonts/element-icons.6f0a763.ttf -------------------------------------------------------------------------------- /src/main/resources/static/index.html: -------------------------------------------------------------------------------- 1 | vue-springboot-demo
-------------------------------------------------------------------------------- /src/main/resources/static/js/app.95df3dc4f9b431464eca.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{B19e:function(t,e){},NHnr:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=n("7+uW"),o={data:function(){return{defaultActive:"/page1"}},methods:{handleOpen:function(t,e){console.log(t,e)},handleClose:function(t,e){console.log(t,e)}}},i={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-aside",[n("el-menu",{staticClass:"el-menu-vertical-demo",attrs:{"default-active":t.defaultActive,router:!0},on:{open:t.handleOpen,close:t.handleClose}},[n("el-menu-item",{attrs:{index:"/page1"}},[n("i",{staticClass:"el-icon-menu"}),t._v(" "),n("span",{attrs:{slot:"title"},slot:"title"},[t._v("导航1")])]),t._v(" "),n("el-menu-item",{attrs:{index:"/page2"}},[n("i",{staticClass:"el-icon-setting"}),t._v(" "),n("span",{attrs:{slot:"title"},slot:"title"},[t._v("导航2")])])],1)],1)},staticRenderFns:[]},a=n("VU/8")(o,i,!1,null,null,null).exports,r=n("Dd8w"),l=n.n(r),u=n("9rMa"),c={methods:l()({},Object(u.b)(["logOut","loginFail"]),{onLogout:function(){this.logOut(),this.loginFail()}})},m={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("el-button",{staticClass:"userIcon",attrs:{type:"success"}},[this._v(this._s(this.$store.state.user.name))]),this._v(" "),e("el-button",{staticClass:"signout",attrs:{type:"primary",round:""},on:{click:this.onLogout}},[this._v("注销")])],1)},staticRenderFns:[]},f=n("VU/8")(c,m,!1,function(t){n("e6RI")},null,null).exports,d={form:{name:"",password:""},msg:"",onLogging:!1},g={data:function(){return d},methods:l()({},Object(u.b)(["logIn","loginSuccess"]),{onSubmit:function(t){var e=this;return this.onLogging?(this.msg="正在登陆中",!1):"superAdmin"===this.form.name?(this.loginSuccess(),void this.logIn({name:"superAdmin"})):(this.onLogging=!0,this.form.name&&this.form.password?void this.$ajxj.post("/user/login",{name:this.form.name,password:this.form.password}).then(function(t){var n=t.data;200===n.code?(e.loginSuccess(),e.logIn(n.data)):e.msg=n.message}).catch(function(t){e.msg="登陆异常",console.log(t)}).finally(function(){e.onLogging=!1}):(this.msg="请输入账号密码",void(this.onLogging=!1)))}})},p={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"login"}},[n("p",[t._v("Welcome to Sys")]),t._v(" "),n("p",[t._v(t._s(t.msg))]),t._v(" "),n("el-form",{ref:"form",attrs:{modal:t.form,"label-width":"80px"}},[n("el-form-item",{attrs:{label:"账号"}},[n("el-input",{attrs:{placeholder:"请输入账号"},model:{value:t.form.name,callback:function(e){t.$set(t.form,"name",e)},expression:"form.name"}})],1),t._v(" "),n("el-form-item",{attrs:{label:"密码"}},[n("el-input",{attrs:{type:"password",placeholder:"请输入密码"},model:{value:t.form.password,callback:function(e){t.$set(t.form,"password",e)},expression:"form.password"}})],1),t._v(" "),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:t.onSubmit}},[t._v("立即登陆")]),t._v(" "),n("el-button",[t._v("注册")])],1)],1)],1)},staticRenderFns:[]},h={components:{Nav:a,Header:f,Login:n("VU/8")(g,p,!1,function(t){n("B19e")},null,null).exports},name:"app",computed:{isLogin:function(){return this.$store.state.login.isLogin}}},v={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticStyle:{height:"600px"},attrs:{id:"app"}},[this.isLogin?e("el-container",{staticClass:"main-container"},[e("el-header",[e("Header")],1),this._v(" "),e("el-container",[e("Nav"),this._v(" "),e("el-main",[e("router-view")],1)],1)],1):this._e(),this._v(" "),this.isLogin?this._e():e("Login")],1)},staticRenderFns:[]},_=n("VU/8")(h,v,!1,function(t){n("Q8Ct")},null,null).exports,w=n("/ocq"),b={render:function(){this.$createElement;this._self._c;return this._m(0)},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"page1"}},[e("p",[this._v("我是Page1")])])}]},L=n("VU/8")(null,b,!1,null,null,null).exports,x={render:function(){this.$createElement;this._self._c;return this._m(0)},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"page2"}},[e("p",[this._v("我是Page2")])])}]},F=n("VU/8")(null,x,!1,null,null,null).exports;s.default.use(w.a);var S=new w.a({routes:[{path:"/page1",name:"page1",component:L},{path:"/page2",name:"page2",component:F}]}),$=n("FDFR"),I=n.n($),y=(n("Uo1D"),n("briU"),n("fZjL")),C=n.n(y),O=n("woOf"),U=n.n(O),j=n("mvHQ"),R=n.n(j),E={state:JSON.parse(sessionStorage.getItem("user"))||{},mutations:{logIn:function(t,e){sessionStorage.setItem("user",R()(e)),U()(t,e)},logOut:function(t){sessionStorage.removeItem("user"),C()(t).forEach(function(e){return s.default.delete(t,e)}),U()(t,{})}},actions:{logIn:function(t,e){(0,t.commit)("logIn",e)},logOut:function(t){(0,t.commit)("logOut")}}};s.default.use(u.a);var k=new u.a.Store({modules:{login:{state:{isLogin:!1},mutations:{loginSuccess:function(t){t.isLogin=!0},loginFail:function(t){t.isLogin=!1}},actions:{loginSuccess:function(t){(0,t.commit)("loginSuccess")},loginFail:function(t){(0,t.commit)("loginFail")}}},user:E}}),A=n("//Fk"),V=n.n(A),H=n("2sCs"),N=n.n(H);N.a.defaults.timeout=3e3,N.a.interceptors.request.use(function(t){var e=t.data,n=C()(e);return t.data=encodeURI(n.map(function(t){return t+"="+e[t]}).join("&")),t.headers={"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},t},function(t){return V.a.reject(t)});var D=N.a;s.default.config.productionTip=!1,s.default.use(I.a),s.default.prototype.$ajxj=D,new s.default({el:"#app",router:S,store:k,template:"",components:{App:_}})},Q8Ct:function(t,e){},Uo1D:function(t,e){},e6RI:function(t,e){}},["NHnr"]); 2 | //# sourceMappingURL=app.95df3dc4f9b431464eca.js.map -------------------------------------------------------------------------------- /src/main/resources/static/js/app.95df3dc4f9b431464eca.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///src/components/nav.vue","webpack:///./src/components/nav.vue?01c9","webpack:///./src/components/nav.vue","webpack:///src/components/header.vue","webpack:///./src/components/header.vue?d560","webpack:///./src/components/header.vue","webpack:///src/pages/login.vue","webpack:///./src/pages/login.vue?0178","webpack:///src/App.vue","webpack:///./src/pages/login.vue","webpack:///./src/App.vue?4a11","webpack:///./src/App.vue","webpack:///./src/pages/page1.vue?a535","webpack:///./src/pages/page1.vue","webpack:///./src/pages/page2.vue?4917","webpack:///./src/pages/page2.vue","webpack:///./src/router/index.js","webpack:///./src/store/user.js","webpack:///./src/store/index.js","webpack:///./src/store/login.js","webpack:///./src/axios/index.js","webpack:///./src/main.js"],"names":["nav","keyPath","components_nav","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","default-active","defaultActive","router","on","open","handleOpen","close","handleClose","index","_v","slot","staticRenderFns","src_components_nav","__webpack_require__","normalizeComponent","header","methods","extends_default","Object","vuex_esm","components_header","type","_s","$store","state","user","name","round","click","onLogout","src_components_header","header_normalizeComponent","ssrContext","_data","login","_this","loginSuccess","password","then","response","data","message","err","pages_login","id","msg","ref","modal","form","label-width","label","placeholder","model","value","callback","$$v","$set","expression","onSubmit","App","Nav","Header","Login","login_normalizeComponent","isLogin","selectortype_template_index_0_src_App","staticStyle","height","_e","src_App","App_normalizeComponent","page1","_m","pages_page1","page1_normalizeComponent","page2","pages_page2","page2_normalizeComponent","vue_esm","use","vue_router_esm","routes","path","component","store_user","JSON","parse","sessionStorage","getItem","mutations","logIn","setItem","stringify_default","assign_default","logOut","removeItem","keys_default","forEach","k","delete","actions","_ref","commit","_ref2","store","Store","modules","loginFail","_axios_0_17_1_axios_default","a","defaults","timeout","interceptors","request","config","key","encodeURI","map","join","headers","Content-Type","error","promise_default","reject","src_axios","productionTip","element_ui_common_default","prototype","$ajxj","el","template","components"],"mappings":"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","file":"js/app.95df3dc4f9b431464eca.js","sourcesContent":["\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/nav.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-aside',[_c('el-menu',{staticClass:\"el-menu-vertical-demo\",attrs:{\"default-active\":_vm.defaultActive,\"router\":true},on:{\"open\":_vm.handleOpen,\"close\":_vm.handleClose}},[_c('el-menu-item',{attrs:{\"index\":\"/page1\"}},[_c('i',{staticClass:\"el-icon-menu\"}),_vm._v(\" \"),_c('span',{attrs:{\"slot\":\"title\"},slot:\"title\"},[_vm._v(\"导航1\")])]),_vm._v(\" \"),_c('el-menu-item',{attrs:{\"index\":\"/page2\"}},[_c('i',{staticClass:\"el-icon-setting\"}),_vm._v(\" \"),_c('span',{attrs:{\"slot\":\"title\"},slot:\"title\"},[_vm._v(\"导航2\")])])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-2320e1c8\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/nav.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./nav.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./nav.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2320e1c8\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./nav.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/nav.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/header.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-button',{staticClass:\"userIcon\",attrs:{\"type\":\"success\"}},[_vm._v(_vm._s(_vm.$store.state.user.name))]),_vm._v(\" \"),_c('el-button',{staticClass:\"signout\",attrs:{\"type\":\"primary\",\"round\":\"\"},on:{\"click\":_vm.onLogout}},[_vm._v(\"注销\")])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-75abc0b8\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/header.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-75abc0b8\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./header.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./header.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./header.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-75abc0b8\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./header.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/header.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/pages/login.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"login\"}},[_c('p',[_vm._v(\"Welcome to Sys\")]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.msg))]),_vm._v(\" \"),_c('el-form',{ref:\"form\",attrs:{\"modal\":_vm.form,\"label-width\":\"80px\"}},[_c('el-form-item',{attrs:{\"label\":\"账号\"}},[_c('el-input',{attrs:{\"placeholder\":\"请输入账号\"},model:{value:(_vm.form.name),callback:function ($$v) {_vm.$set(_vm.form, \"name\", $$v)},expression:\"form.name\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"密码\"}},[_c('el-input',{attrs:{\"type\":\"password\",\"placeholder\":\"请输入密码\"},model:{value:(_vm.form.password),callback:function ($$v) {_vm.$set(_vm.form, \"password\", $$v)},expression:\"form.password\"}})],1),_vm._v(\" \"),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.onSubmit}},[_vm._v(\"立即登陆\")]),_vm._v(\" \"),_c('el-button',[_vm._v(\"注册\")])],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-c9dbe59a\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/login.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-c9dbe59a\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./login.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./login.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./login.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-c9dbe59a\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./login.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/login.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticStyle:{\"height\":\"600px\"},attrs:{\"id\":\"app\"}},[(_vm.isLogin)?_c('el-container',{staticClass:\"main-container\"},[_c('el-header',[_c('Header')],1),_vm._v(\" \"),_c('el-container',[_c('Nav'),_vm._v(\" \"),_c('el-main',[_c('router-view')],1)],1)],1):_vm._e(),_vm._v(\" \"),(!_vm.isLogin)?_c('Login'):_vm._e()],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-2512c606\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-2512c606\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2512c606\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"page1\"}},[_c('p',[_vm._v(\"我是Page1\")])])}]\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-e88dc202\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/page1.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nvar __vue_script__ = null\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-e88dc202\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./page1.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/page1.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"page2\"}},[_c('p',[_vm._v(\"我是Page2\")])])}]\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-77ab094c\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/pages/page2.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nvar __vue_script__ = null\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-77ab094c\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./page2.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pages/page2.vue\n// module id = null\n// module chunks = ","import Vue from 'vue'\nimport Router from 'vue-router'\n\n// 加载组件,如果需要懒加载请参阅文档\nimport page1 from '../pages/page1.vue'\nimport page2 from '../pages/page2.vue'\n\nVue.use(Router)\n\n// routes要求为一个数组,path指定路由,component指定组件,更多配置及懒加载请参阅文档\nexport default new Router({\n routes: [\n {\n path: '/page1',\n name: 'page1',\n component: page1\n },\n {\n path: '/page2',\n name: 'page2',\n component: page2\n }\n ]\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import Vue from 'vue'\n// sessionStorage会话存储\nexport default {\n // JSON.parse方法将一个字符串解析成一个JSON对象\n state: JSON.parse(sessionStorage.getItem('user')) || {},\n mutations: {\n logIn (state, user) {\n // 从一个对象中解析出字符串\n sessionStorage.setItem('user', JSON.stringify(user))\n // ES6语法,从一个对象复制所有的属性到另一个对象,返回state对象\n Object.assign(state, user)\n },\n logOut (state) {\n sessionStorage.removeItem('user')\n Object.keys(state).forEach(k => Vue.delete(state, k))\n Object.assign(state, {})\n }\n },\n actions: {\n logIn ({commit}, user) {\n commit('logIn', user)\n },\n logOut ({commit}) {\n commit('logOut')\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/user.js","// 先引入垫片,以支持低版本内核,如IE9\nimport 'babel-polyfill'\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport login from './login'\nimport user from './user'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n modules: {\n login,\n user\n }\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/index.js","export default {\n // state中为需要共享的信息\n state: {\n // 区分是否展示登陆页面的状态\n isLogin: false\n },\n // 必须在mutations中改变state的值,一般调用方法为$store.commit('methodName')\n mutations: {\n loginSuccess (state) {\n state.isLogin = true\n },\n loginFail (state) {\n state.isLogin = false\n }\n },\n // actions异步修改状态,mutations为同步\n actions: {\n loginSuccess ({commit}) {\n commit('loginSuccess')\n },\n loginFail ({commit}) {\n commit('loginFail')\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/store/login.js","import axios from 'axios'\n\n// axios 配置\naxios.defaults.timeout = 3000 // 设置超时时间为3s\n\n// 如果为开发环境,将baseURL设置为服务器地址\nif (process.env.NODE_ENV === 'development') {\n axios.defaults.baseURL = 'http://localhost:8888'\n}\n\n// 设置content-type\n// 这里处理的是 针对SpringMVC Controller 无法正确获得请求参数的问题\naxios.interceptors.request.use(\n config => {\n let data = config.data\n let key = Object.keys(data)\n // 重写data,由{\"name\":\"name\",\"password\":\"password\"} 改为 name=name&password=password\n config.data = encodeURI(key.map(name => `${name}=${data[name]}`).join('&'))\n // 设置Content-Type\n config.headers = {\n 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'\n }\n return config\n },\n error => {\n return Promise.reject(error)\n }\n)\n\nexport default axios\n\n\n\n// WEBPACK FOOTER //\n// ./src/axios/index.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\n// 加载App.vue 组件\nimport App from './App.vue'\n// 引入router配置文件\nimport router from './router'\n\n// 引入ElementUI,可以使用其组件\nimport ElementUI from 'element-ui'\n// css文件需手动引入\nimport 'element-ui/lib/theme-chalk/index.css'\n\n// 引入vuex配置文件\nimport store from './store'\n\n// 引入ajax框架axios配置\nimport axios from './axios'\n\n// 设置 Vue.config.productionTip = false 来关闭生产模式下给出的提示\nVue.config.productionTip = false\n// 代表使用ElementUI组件\nVue.use(ElementUI)\n// 将axios挂载到Vue原型上方便调用\nVue.prototype.$ajxj = axios\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n store,\n template: '',\n components: { App }\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""} -------------------------------------------------------------------------------- /src/main/resources/static/js/manifest.c009c63d34395e7570b9.js: -------------------------------------------------------------------------------- 1 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,a,c){for(var u,i,f,s=0,l=[];s