pull/3/head
于慕涵 2 years ago
parent e46072e5f4
commit e89a75a412

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

Binary file not shown.

@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

316
src/hosdata/mvnw vendored

@ -0,0 +1,316 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`\\unset -f command; \\command -v java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

188
src/hosdata/mvnw.cmd vendored

@ -0,0 +1,188 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

@ -0,0 +1,128 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hosdata</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hosdata</name>
<description>hosdata</description>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- springboot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springboot tomcat 支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- springboot test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- elastic search -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- 用了 elasticsearch 就要加这么一个不然要com.sun.jna.Native 错误 -->
<dependency>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
<version>3.0.9</version>
</dependency>
<!-- thymeleaf legacyhtml5 模式支持 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<!-- 测试支持 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.23</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version> 4.12</version>
</dependency>
<!-- commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- hsqldb -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,13 @@
package com.example.hosdata;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HosdataApplication {
public static void main(String[] args) {
SpringApplication.run(HosdataApplication.class, args);
}
}

@ -0,0 +1,20 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.Doctor;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.service.DoctorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
public class DoctorController {
@Autowired
DoctorService doctorService;
@CrossOrigin
@GetMapping("/api/register")
public List<Doctor> listByDepartment(String department) throws Exception {
return doctorService.listByDepartment(department);
}
}

@ -0,0 +1,35 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.Docyz;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.service.DocyzService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class DocyzController {
@Autowired
DocyzService docService;
@CrossOrigin
@PostMapping("/api/docrecords")
public Docyz addOrUpdate(@RequestBody Docyz doc) throws Exception {
docService.addOrUpdate(doc);
return doc;
}
/* @CrossOrigin
@GetMapping("/api/docrecords")
public List<Docyz> listdoctorname() throws Exception {
return docService.listBydoctorname();
}*/
@CrossOrigin
@GetMapping("/api/treatment")
public List<Docyz> listghname() throws Exception {
return docService.listByghname();
}
}

@ -0,0 +1,32 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.service.DocyzService;
import com.example.hosdata.service.InService;
import com.example.hosdata.service.RegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.HtmlUtils;
import java.util.List;
@RestController
public class InController {
@Autowired
InService inService;
@CrossOrigin
@GetMapping("/api/setting")
public List<Information> listuser() throws Exception {
return inService.listbyuser();
}
@CrossOrigin
@PostMapping("/api/setting")
public Information Update(@RequestBody Information information) throws Exception {
inService.update(information);
return information;
}
}

@ -0,0 +1,49 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.User;
import com.example.hosdata.result.Result;
import com.example.hosdata.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.HtmlUtils;
import java.util.List;
@Controller
public class LoginController {
@Autowired
UserService userService;
@CrossOrigin
@PostMapping(value = "/api/login")
@ResponseBody
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
String id = requestUser.getId();
id = HtmlUtils.htmlEscape(id);
String realname = requestUser.getRealname();
realname = HtmlUtils.htmlEscape(realname);
User user = userService.getall(id,username, requestUser.getPassword(),realname);
//String id=requestUser.getId();
RegisterService.username = username;
DocyzService.ghname = realname;
DocyzService.doctorname = realname;
ShopService.myzh = username;
InService.userna = username;
if (null == user) {
return new Result(400);
} else if(id.equals("医务人员")){
return new Result(100);
} else if(id.equals("管理员")){
return new Result(300);
}else {
return new Result(200);
}
}
}

@ -0,0 +1,46 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.service.DocyzService;
import com.example.hosdata.service.RegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.HtmlUtils;
import java.util.List;
@RestController
public class RegisterController {
@Autowired
RegisterService Reservice;
@CrossOrigin
@GetMapping("/api/records")
public List<RegisterRecord> list() throws Exception {
return Reservice.listByname();
}
@CrossOrigin
@GetMapping("/api/docrecords")
public List<RegisterRecord> listdoc() throws Exception {
return Reservice.list();
}
/*@CrossOrigin
@PostMapping("/api/docrecords")
public List<RegisterRecord> searchResult(@RequestParam(value="doctor",required=false) String doctor) {
return Reservice.Search(doctor);
}*/
@CrossOrigin
@PostMapping("/api/register")
public RegisterRecord addOrUpdate(@RequestBody RegisterRecord record) throws Exception {
Reservice.addOrUpdate(record);
return record;
}
}

@ -0,0 +1,46 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.Medicine;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.ShopRecord;
import com.example.hosdata.service.ShopService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class ShopController {
@Autowired
ShopService shopService;
@ResponseBody
@CrossOrigin
@GetMapping(value = "/api/shop")
public List<Medicine> shop() {
return shopService.MedicineList();
}
@CrossOrigin
@PostMapping("/api/shop")
public ShopRecord Add(@RequestBody ShopRecord SR) throws Exception {
shopService.addOrUpdate(SR);
return SR;
}
@CrossOrigin
@PostMapping("/api/Admin")
public Medicine Update(@RequestBody Medicine medicine) throws Exception {
shopService.Update(medicine);
return medicine;
}
@CrossOrigin
@GetMapping("/api/shoprecords")
public List<ShopRecord> listbymyzh() throws Exception {
return shopService.listBymyzh();
}
}

@ -0,0 +1,27 @@
package com.example.hosdata.controller;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.Zhuce;
import com.example.hosdata.service.DocyzService;
import com.example.hosdata.service.InService;
import com.example.hosdata.service.RegisterService;
import com.example.hosdata.service.ZhuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.HtmlUtils;
import java.util.List;
@RestController
public class ZhuController {
@Autowired
ZhuService zhuService;
@CrossOrigin
@PostMapping("/api/zhu")
public Zhuce add(@RequestBody Zhuce zhuce) throws Exception {
zhuService.add(zhuce);
return zhuce;
}
}

@ -0,0 +1,12 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.Docyz;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface DocDAO extends JpaRepository<Docyz,Integer> {
List<Docyz> findByGhname(String ghname);
List<Docyz> findByDoctorname(String doctorname);
}

@ -0,0 +1,10 @@
package com.example.hosdata.dao;
import java.util.*;
import com.example.hosdata.pojo.Doctor;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DoctorDAO extends JpaRepository<Doctor,Integer> {
List<Doctor> findAllByDepartment(String department);
List<Doctor> findAllByDoctorname(String doctorname);
}

@ -0,0 +1,12 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.User;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface InDAO extends JpaRepository<Information,Integer>{
List<Information> findByUsername(String username);
}

@ -0,0 +1,15 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.RegisterRecord;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface RegisterDAO extends JpaRepository<RegisterRecord,Integer> {
List<RegisterRecord> findByUsername(String username);
List<RegisterRecord> findByDoctor(String doctor);
}

@ -0,0 +1,10 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.Medicine;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ShopDAO extends JpaRepository<Medicine,Integer> {
List<Medicine> findAllByPlace(String place);
}

@ -0,0 +1,10 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.Medicine;
import com.example.hosdata.pojo.ShopRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ShopRecordDAO extends JpaRepository<ShopRecord,Integer> {
List<ShopRecord> findByMyzh(String myzh);
}

@ -0,0 +1,18 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserDAO extends JpaRepository<User,Integer> {
User findByUsername(String username);
User getByUsernameAndPassword(String username,String password);
User getByIdAndUsernameAndPassword(String id,String username,String password);
User getByIdAndUsernameAndPasswordAndRealname(String id,String username,String password,String realname);
}
//操作数据库的对象使用了JPA无需手动构建SQL语句而只需要按照规范提供方法的名字即可实现对数据库的增删查改

@ -0,0 +1,12 @@
package com.example.hosdata.dao;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.User;
import com.example.hosdata.pojo.Zhuce;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ZhuDAO extends JpaRepository<Zhuce,Integer>{
}

@ -0,0 +1,40 @@
package com.example.hosdata.pojo;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "doctor")
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
public class Doctor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "doctorid")
int doctorid;
String doctorname;
String department;
String worktime;
public String getDoctorname() {
return doctorname;
}
public void setDoctorname(String doctorname) {
this.doctorname = doctorname;
}
public String getDepartment() {
return department;
}
public void setDpartment(String department) {
this.department = department;
}
public String getWorktime() {
return worktime;
}
public void setWorktime(String worktime) {
this.worktime = worktime;
}
}

@ -0,0 +1,76 @@
package com.example.hosdata.pojo;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "docyz")
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
public class Docyz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idnumber")
int idnumber;
String doctorname;
String ghname;
int yyh;
String zhengz;
String zhend;
String liaoc;
public int getIdnumber() {
return idnumber;
}
public void setIdnumber(int idnumber) {
this.idnumber = idnumber;
}
public String getDoctorname() {
return doctorname;
}
public void setDoctorname(String doctorname) {
this.doctorname = doctorname;
}
public String getGhname() {
return ghname;
}
public void setGhname(String ghname) {
this.ghname = ghname;
}
public int getYyh() {
return yyh;
}
public void setYyh(int yyh) {
this.yyh = yyh;
}
public String getZhengz() {
return zhengz;
}
public void setZhengz(String zhengz) {
this.zhengz = zhengz;
}
public String getZhend() {
return zhend;
}
public void setZhend(String zhend) {
this.zhend = zhend;
}
public String getLiaoc() {
return liaoc;
}
public void setLiaoc(String liaoc) {
this.liaoc = liaoc;
}
}

@ -0,0 +1,52 @@
package com.example.hosdata.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@Entity
@Table(name = "user")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class Information {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
String id;
String username;
String password;
String realname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
}

@ -0,0 +1,60 @@
package com.example.hosdata.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@Entity
@Table(name = "medicine")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class Medicine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
int id;
String name;
int number;
double price;
String place;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {return number;}
public void setNumber(int number) {
this.number = number;
}
public double getPrice() {return price;}
public void setPrice(double price) {
this.price = price;
}
public String getPlace() {return place;}
public void setPlace(String place) {
this.place = place;
}
}

@ -0,0 +1,74 @@
package com.example.hosdata.pojo;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "register")
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
public class RegisterRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idnum")
int idnum;
String name;
String department;
String major;
String time;
String doctor;
String username;
public int getIdnum() {
return idnum;
}
public void setIdnum(int idnum) {
this.idnum = idnum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDoctor() {
return doctor;
}
public void setDoctor(String doctor) {
this.doctor = doctor;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

@ -0,0 +1,48 @@
package com.example.hosdata.pojo;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "shoprecord")
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
public class ShopRecord {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mid")
int mid;
String medicine;
int number;
String myzh;
public String getMedicine() {
return medicine;
}
public void setMedicine(String medicine) {
this.medicine = medicine;
}
public int getNumber() {return number;}
public void setNumber(int number) {
this.number = number;
}
public int getMid() {
return mid;
}
public void setMid(int mid) {
this.mid = mid;
}
public String getMyzh() {
return myzh;
}
public void setMyzh(String myzh) {
this.myzh = myzh;
}
}

@ -0,0 +1,52 @@
package com.example.hosdata.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@Entity
@Table(name = "user")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
String id;
String username;
String password;
String realname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
}

@ -0,0 +1,52 @@
package com.example.hosdata.pojo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
@Entity
@Table(name = "user")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class Zhuce {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
String id;
String username;
String password;
String realname;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
}

@ -0,0 +1,19 @@
package com.example.hosdata.result;
public class Result {
//响应码
private int code;
public Result(int code) {
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}

@ -0,0 +1,21 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.DoctorDAO;
import com.example.hosdata.pojo.Doctor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
public class DoctorService {
@Autowired
DoctorDAO doctorDAO;
public List<Doctor> listByDepartment(String department) {
return doctorDAO.findAllByDepartment(department);
}
public List<Doctor> listworktime(String doctor) {
return doctorDAO.findAllByDoctorname(doctor);
}
}

@ -0,0 +1,27 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.DocDAO;
import com.example.hosdata.pojo.Docyz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DocyzService {
@Autowired
DocDAO docDAO;
static public String ghname;
static public String doctorname;
public void addOrUpdate(Docyz doc) {
docDAO.save(doc);
}
public List<Docyz> listByghname() {
return docDAO.findByGhname(this.ghname);
}
public List<Docyz> listBydoctorname() {
return docDAO.findByDoctorname(this.doctorname);
}
}

@ -0,0 +1,26 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.InDAO;
import com.example.hosdata.dao.RegisterDAO;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class InService {
@Autowired
InDAO inDAO;
static public String userna;
public List<Information> listbyuser() {
return inDAO.findByUsername(userna);
}
public void update(Information information) {
inDAO.save(information);
}
}

@ -0,0 +1,35 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.RegisterDAO;
import com.example.hosdata.pojo.RegisterRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RegisterService {
@Autowired
RegisterDAO reDAO;
static public String username;
public List<RegisterRecord> listByname() {
return reDAO.findByUsername(this.username);
}
public void addOrUpdate(RegisterRecord record) {
reDAO.save(record);
}
public List<RegisterRecord> list() {
return reDAO.findAll();
}
public List<RegisterRecord> Search(String doctor) {
return reDAO.findByDoctor(doctor);
}
}

@ -0,0 +1,39 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.ShopDAO;
import com.example.hosdata.dao.ShopRecordDAO;
import com.example.hosdata.pojo.Medicine;
import com.example.hosdata.pojo.ShopRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ShopService {
public String place = "药房";
static public String myzh;
@Autowired
ShopDAO shopDAO;
@Autowired
ShopRecordDAO shopRecordDAO;
public List<Medicine> MedicineList(){
return shopDAO.findAllByPlace(place);
}
public void addOrUpdate(ShopRecord shopRecord) {
shopRecordDAO.save(shopRecord);
}
public void Update(Medicine medicine) {
medicine.setPlace("药房");
shopDAO.save(medicine);
}
public List<ShopRecord> listBymyzh() {
return shopRecordDAO.findByMyzh(this.myzh);
}
}

@ -0,0 +1,38 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.UserDAO;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
UserDAO userDAO;
public boolean isExist(String username) {
User user = getByName(username);
return null!=user;
}
public User getByName(String username) {
return userDAO.findByUsername(username);
}
public User get(String username, String password){
return userDAO.getByUsernameAndPassword(username, password);
}
public void add(User user) {
userDAO.save(user);
}
public User getall(String id, String username, String password, String realname) {
return userDAO.getByIdAndUsernameAndPasswordAndRealname(id,username,password,realname);
}
}
//在DAO中只定义基础的增删改查操作而具体操作需要service来完成

@ -0,0 +1,23 @@
package com.example.hosdata.service;
import com.example.hosdata.dao.InDAO;
import com.example.hosdata.dao.RegisterDAO;
import com.example.hosdata.dao.ZhuDAO;
import com.example.hosdata.pojo.Information;
import com.example.hosdata.pojo.RegisterRecord;
import com.example.hosdata.pojo.Zhuce;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ZhuService {
@Autowired
ZhuDAO zhuDAO;
public void add(Zhuce zhuce) {
zhuDAO.save(zhuce);
}
}

@ -0,0 +1,8 @@
server.port=8443
spring.datasource.url=jdbc:mysql://localhost:3306/hospital?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=crist2002
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto = none

@ -0,0 +1,13 @@
package com.example.hosdata;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class HosdataApplicationTests {
@Test
void contextLoads() {
}
}

@ -0,0 +1,18 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-vue-jsx", "transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
}
}
}

@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

@ -0,0 +1,5 @@
/build/
/config/
/dist/
/*.js
/test/unit/coverage/

@ -0,0 +1,29 @@
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
// add your custom rules here
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
}
}

@ -0,0 +1,17 @@
.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/test/unit/coverage/
/test/e2e/reports/
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

@ -0,0 +1,10 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}

@ -0,0 +1,30 @@
# hospital
> A Vue.js project
## Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
# run unit tests
npm run unit
# run e2e tests
npm run e2e
# run all tests
npm test
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).

@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

@ -0,0 +1,85 @@
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target: 'http://localhost:8443',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
// Various Dev Server settings
host: 'localhost', // can be overwritten by process.env.HOST
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: false,
errorOverlay: true,
notifyOnErrors: true,
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
// Use Eslint Loader?
// If true, your code will be linted during bundling and
// linting errors and warnings will be shown in the console.
useEslint: true,
// If true, eslint errors and warnings will also be shown in the error overlay
// in the browser.
showEslintErrorsInOverlay: false,
/**
* Source Maps
*/
// https://webpack.js.org/configuration/devtool/#development
devtool: 'cheap-module-eval-source-map',
// If you have problems debugging vue-files in devtools,
// set this to false - it *may* help
// https://vue-loader.vuejs.org/en/options.html#cachebusting
cacheBusting: true,
cssSourceMap: true
},
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
/**
* Source Maps
*/
productionSourceMap: true,
// https://webpack.js.org/configuration/devtool/#production
devtool: '#source-map',
// Gzip off by default as many popular static hosts such as
// Surge or Netlify already gzip all static assets for you.
// Before setting to `true`, make sure to:
// npm install --save-dev compression-webpack-plugin
productionGzip: false,
productionGzipExtensions: ['js', 'css'],
// Run the build command with an extra argument to
// View the bundle analyzer report after build finishes:
// `npm run build --report`
// Set to `true` or `false` to always turn it on or off
bundleAnalyzerReport: process.env.npm_config_report
}
}

@ -0,0 +1,4 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}

@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>hospital</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,89 @@
{
"name": "hospital",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "于慕涵 <2292559624@qq.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
"build": "node build/build.js"
},
"dependencies": {
"axios": "^0.21.1",
"element-ui": "^2.15.10",
"vue": "^2.5.2",
"vue-router": "^3.0.1"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^8.2.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-jest": "^21.0.2",
"babel-loader": "^7.1.1",
"babel-plugin-dynamic-import-node": "^1.2.0",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^2.0.1",
"chromedriver": "^2.27.2",
"copy-webpack-plugin": "^4.0.1",
"cross-spawn": "^5.0.1",
"css-loader": "^0.28.0",
"eslint": "^4.15.0",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-node": "^5.2.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^3.0.1",
"eslint-plugin-vue": "^4.0.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"jest": "^22.0.4",
"jest-serializer-vue": "^0.3.0",
"nightwatch": "^0.9.12",
"node-notifier": "^5.1.2",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"rimraf": "^2.6.0",
"selenium-server": "^3.0.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-jest": "^1.0.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.9.1",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

@ -0,0 +1,22 @@
<template>
<div id="app">
<router-view/>
</div>
</template>
<script>
export default {
name: 'App'
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

@ -0,0 +1,85 @@
<template>
<div class="gl">
<el-form style="width: 100%" :data="takedata">
<el-input type="text" v-model="takedata.medicine"
auto-complete="off" placeholder="药品名称"></el-input>
</el-form>
<el-table :data="tabledata.filter(item=>item.name===takedata.medicine)" style="width: 100%">
<el-table-column prop="id" label="药品编号"></el-table-column>
<el-table-column prop="name" label="药品名称"></el-table-column>
<el-table-column prop="price" label="药品价格"></el-table-column>
<el-table-column prop="number" label="药品数量"></el-table-column>
</el-table>
<el-form style="width: 100%" :data="takedata">
<el-input type="text" v-model="takedata.number"
auto-complete="off" placeholder="药品数量"></el-input>
<el-input type="text" v-model="takedata.id"
auto-complete="off" placeholder="药品编号"></el-input>
<el-input type="text" v-model="takedata.price"
auto-complete="off" placeholder="药品价格"></el-input>
</el-form>
<el-form style="width: 100%">
<el-button type="primary" style="width: 100%;background: cornflowerblue;border: none" @click="onSubmit"></el-button>
</el-form>
</div>
</template>
<script>
export default {
name: 'AdminIndex',
data () {
return {
tabledata: [],
takedata: {
id: '',
medicine: '',
number: '',
price: '',
place: '"药房"'
}
}
},
mounted: function () {
this.tableData()
},
methods: {
tableData () {
var _this = this
this.$axios.get('/shop').then(resp => {
if (resp && resp.status === 200) {
_this.tabledata = resp.data
}
})
},
onSubmit () {
this.$axios
.post('/Admin', {
id: this.takedata.id,
name: this.takedata.medicine,
number: this.takedata.number,
price: this.takedata.price,
place: this.takedata.place
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('onSubmit')
}
})
this.$message({
message: '更改成功',
type: 'success'
})
this.$router.replace({path: '/Admin'})
}
}
}
</script>
<style scoped>
.gl {
position: fixed;
margin-left: 50%;
left: -200px;
top: 160px;
width: 400px;
}
</style>

@ -0,0 +1,113 @@
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li>
<a
href="https://vuejs.org"
target="_blank"
>
Core Docs
</a>
</li>
<li>
<a
href="https://forum.vuejs.org"
target="_blank"
>
Forum
</a>
</li>
<li>
<a
href="https://chat.vuejs.org"
target="_blank"
>
Community Chat
</a>
</li>
<li>
<a
href="https://twitter.com/vuejs"
target="_blank"
>
Twitter
</a>
</li>
<br>
<li>
<a
href="http://vuejs-templates.github.io/webpack/"
target="_blank"
>
Docs for This Template
</a>
</li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li>
<a
href="http://router.vuejs.org/"
target="_blank"
>
vue-router
</a>
</li>
<li>
<a
href="http://vuex.vuejs.org/"
target="_blank"
>
vuex
</a>
</li>
<li>
<a
href="http://vue-loader.vuejs.org/"
target="_blank"
>
vue-loader
</a>
</li>
<li>
<a
href="https://github.com/vuejs/awesome-vue"
target="_blank"
>
awesome-vue
</a>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>

@ -0,0 +1,20 @@
<template>
<div>
<div class="box">
<nav-menu></nav-menu>
<router-view/>
</div>
</div>
</template>
<script>
import NavMenu from './common/NavMenu'
export default {
name: 'Home',
components: {NavMenu}
}
</script>
<style scoped>
</style>

@ -0,0 +1,91 @@
<template>
<el-form class="login-container" label-position="left"
label-width="0px">
<h3 class="login_title">校医院智能管理系统登录</h3>
<el-form-item>
<el-select v-model="loginForm.id" placeholder="请选择登录身份">
<el-option label="普通用户" value="普通用户"></el-option>
<el-option label="医务人员" value="医务人员"></el-option>
<el-option label="管理员" value="管理员"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-input type="text" v-model="loginForm.realname"
auto-complete="off" placeholder="姓名"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" v-model="loginForm.username"
auto-complete="off" placeholder="账号"></el-input>
</el-form-item>
<el-form-item>
<el-input type="password" v-model="loginForm.password"
auto-complete="off" placeholder="密码"></el-input>
</el-form-item>
<el-form-item style="width: 100%">
<el-button type="primary" style="width: 100%;background: #505458;border: none" v-on:click="login">登录</el-button>
</el-form-item>
<div>
<el-link href="http://localhost:8080/#/zhu" target="_blank" type="primary">没有账号请点击注册</el-link>
</div>
</el-form>
</template>
<script>
export default {
name: 'Login',
data () {
return {
loginForm: {
id: '',
username: '',
password: '',
realname: ''
},
responseResult: []
}
},
methods: {
login () {
this.$axios
.post('/login', {
id: this.loginForm.id,
username: this.loginForm.username,
password: this.loginForm.password,
realname: this.loginForm.realname
})
.then(successResponse => {
if (successResponse.data.code === 200) {
this.$router.replace({path: '/index'})
} else if (successResponse.data.code === 100) {
this.$router.replace({path: '/docrecords'})
} else if (successResponse.data.code === 300) {
this.$router.replace({path: '/Admin'})
}
})
.catch(failResponse => {
})
}
}
}
</script>
<style>
.login-container {
border-radius: 15px;
background-clip: padding-box;
margin: 90px auto;
width: 350px;
padding: 35px 35px 15px 35px;
background: #fff;
border: 1px solid #eaeaea;
box-shadow: 0 0 25px #cac6c6;
}
.login_title {
margin: 0px auto 40px auto;
text-align: center;
color: #505458;
}
</style>

@ -0,0 +1,151 @@
<template>
<el-form ref="sizeForm" :model="AdvanceForm" label-width="300px" class="adv" :rules="rules">
<el-form-item label="诊室" prop="department">
<el-select v-model="AdvanceForm.department" prop="department" filterable placeholder="请选择诊室" clearable>
<el-option v-for="item in department" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否有过往病史">
<el-radio v-model="radio" label="是" prop="是"></el-radio>
<el-radio v-model="radio" label="否" prop="否"></el-radio>
</el-form-item>
<!--皮肤科-->
<el-form-item v-show="AdvanceForm.department=='皮肤科'" label="请选择你出现的症状">
<el-checkbox-group v-model="AdvanceForm.symptom" >
<el-checkbox label="过敏"></el-checkbox>
<el-checkbox label="皮肤上有小红点"></el-checkbox>
<el-checkbox label="皮肤肿胀"></el-checkbox>
<el-checkbox label="瘙痒"></el-checkbox>
<el-checkbox label="囊肿"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<!--口腔科-->
<el-form-item v-show="AdvanceForm.department=='口腔科'" label="请选择你出现的症状">
<el-checkbox-group v-model="AdvanceForm.symptom" >
<el-checkbox label="牙疼"></el-checkbox>
<el-checkbox label="牙齿松动"></el-checkbox>
<el-checkbox label="咀嚼食物困难"></el-checkbox>
<el-checkbox label="溃疡"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<!--普通外科-->
<el-form-item v-show="AdvanceForm.department=='普通外科'" label="请选择你出现的症状">
<el-checkbox-group v-model="AdvanceForm.symptom" >
<el-checkbox label="擦伤"></el-checkbox>
<el-checkbox label="烫伤"></el-checkbox>
<el-checkbox label="肌肉拉伤"></el-checkbox>
<el-checkbox label="扭伤"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<!--普通内科-->
<el-form-item v-show="AdvanceForm.department=='普通内科'" label="请选择你出现的症状">
<el-checkbox-group v-model="AdvanceForm.symptom" >
<el-checkbox label="头疼"></el-checkbox>
<el-checkbox label="嗓子疼"></el-checkbox>
<el-checkbox label="感冒"></el-checkbox>
<el-checkbox label="发烧"></el-checkbox>
<el-checkbox label="全身乏力"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item v-show="AdvanceForm.department=='普通内科'" label="是否测量体温">
<el-radio v-model="radiotemperature" label="是"></el-radio>
<el-radio v-model="radiotemperature" label="否"></el-radio>
</el-form-item>
<el-form-item v-show="radiotemperature=='是'" label="体温">
<el-input v-model="temperature" placeholder="请输入你的体温"></el-input>
</el-form-item>
<!--眼科-->
<el-form-item v-show="AdvanceForm.department=='眼科'" label="请选择你出现的症状">
<el-checkbox-group v-model="symptom" >
<el-checkbox label="眼睛酸痛"></el-checkbox>
<el-checkbox label="眼睛红肿"></el-checkbox>
<el-checkbox label="过敏"></el-checkbox>
<el-checkbox label="眼内有异物感"></el-checkbox>
<el-checkbox label="模糊看不清东西"></el-checkbox>
<el-checkbox label="视力下降"></el-checkbox>
<el-checkbox label="眼前有黑影飘动"></el-checkbox>
<el-checkbox label="眼睛干痒"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<!--耳鼻喉科-->
<el-form-item v-show="AdvanceForm.department=='耳鼻喉科'" label="请选择你出现的症状">
<el-checkbox-group v-model="symptom" >
<el-checkbox label="耳鸣"></el-checkbox>
<el-checkbox label="过敏"></el-checkbox>
<el-checkbox label="流鼻涕"></el-checkbox>
<el-checkbox label="咽喉肿痛"></el-checkbox>
<el-checkbox label="鼻炎"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="详细描述你的症状">
<el-input type="textarea" v-model="AdvanceForm.description" clearable></el-input>
</el-form-item>
<el-form-item style="width: 100%">
<el-button type="primary" style="width: 100%;background: #505458;border: none" @click="dialogVisible = true">确定</el-button>
</el-form-item>
<el-dialog
v-loading="loading"
title="诊断结果"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose"
append-to-body>
<span v-show="AdvanceForm.department=='普通内科'">使37.3°C</span>
<span v-show="AdvanceForm.department=='眼科'">1使</span>
<span v-show="AdvanceForm.department=='普通外科'"> 2448</span>
<span v-show="AdvanceForm.department=='耳鼻喉科'">使</span>
<span v-show="AdvanceForm.department=='皮肤科'">使使使</span>
<span v-show="AdvanceForm.department=='口腔科'">c西</span>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false"> </el-button>
</span>
</el-dialog>
</el-form>
</template>
<script>
export default {
data () {
return {
AdvanceForm: {
department: '',
history: '',
symptom: [],
description: ''
},
department: ['眼科', '耳鼻喉科', '口腔科', '皮肤科',
'普通内科', '普通外科'],
radio: '',
radiotemperature: '',
symptom: ['头疼', '嗓子疼', '感冒', '发烧', '全身乏力'],
temperature: '',
dialogVisible: false,
loading: true,
rules: {
department: [
{ required: true, message: '请选择诊室' }
]
}
}
},
methods: {
handleClose (done) {
this.$confirm('确认关闭?')
.then(_ => {
done()
})
.catch(_ => {})
}
}
}
</script>
<style scoped>
.adv {
position: fixed;
margin-left: 50%;
left: -500px;
top: 160px;
width: 700px;
}
</style>

@ -0,0 +1,47 @@
<template>
<el-menu
:default-active="'/index'"
router
mode="horizontal"
background-color="white"
text-color="#222"
active-text-color="red"
style="min-width: 1300px">
<el-menu-item v-for="(item,i) in navList" :key="i" :index="item.name">
{{ item.navItem }}
</el-menu-item>
<a href="#nowhere" style="color: #222;float: right;padding: 20px;">更多功能</a>
<i class="el-icon-menu" style="float:right;font-size: 45px;color: #222;padding-top: 8px"></i>
<span style="padding-right: 200px;padding-top: 80px;right: 43%;font-size: 20px;font-weight: bold">欢迎进入校医院智能管理系统</span>
</el-menu>
</template>
<script>
export default {
name: 'NavMenu',
data () {
return {
navList: [
{name: '/index', navItem: '首页'},
{name: '/register', navItem: '预约挂号'},
{name: '/shop', navItem: '购药'},
{name: '/advance', navItem: '预问诊'},
{name: '/records', navItem: '个人记录'},
{name: '/treatment', navItem: '就诊记录'},
{name: '/setting', navItem: '设置'},
{name: '/shoprecords', navItem: '买药记录'}
]
}
}
}
</script>
<style scoped>
a{
text-decoration: none;
}
span {
pointer-events: none;
}
</style>

@ -0,0 +1,169 @@
<template>
<el-form>
<h3 class="login_title">欢迎登录校医院智能管理系统</h3>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="挂号信息" name="first">
<el-form-item>
<el-table
:data="records"
style="width: 100%">
<el-table-column
prop="name"
label="患者姓名"
width="180">
</el-table-column>
<el-table-column
prop="major"
label="学院"
width="180">
</el-table-column>
<el-table-column
prop="department"
label="科室"
width="180">
</el-table-column>
<el-table-column
prop="doctor"
label="主治医师"
width="180">
</el-table-column>
<el-table-column
prop="time"
label="预约时间"
width="180">
</el-table-column>
<el-table-column
prop="idnum"
label="预约号"
width="180">
</el-table-column>
<el-table-column
label="操作"
width="180">
<el-button type="text" @click="dialogVisible = true">处理</el-button>
<el-dialog
title="接诊"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose"
:data="DocForm"
append-to-body>
<el-form-item label="医生:">
<el-input type="text" v-model="DocForm.doctorname" prop="doctorname" clearable
auto-complete="off" placeholder="请输入医生姓名:"></el-input>
</el-form-item>
<el-form-item label="患者:">
<el-input type="text" v-model="DocForm.ghname" prop="ghname" clearable
auto-complete="off" placeholder="请输入患者姓名:"></el-input>
</el-form-item>
<el-form-item label="预约号:">
<el-input type="text" v-model="DocForm.yyh" prop="yyh" clearable
auto-complete="off" placeholder="请输入预约号:"></el-input>
</el-form-item>
<el-form-item label="症状:">
<el-input type="textarea" v-model="DocForm.zhengz" prop="zhengz" clearable></el-input>
</el-form-item>
<el-form-item label="诊断:">
<el-input type="textarea" v-model="DocForm.zhend" prop="zhend" clearable></el-input>
</el-form-item>
<el-form-item label="疗程:">
<el-input type="textarea" v-model="DocForm.liaoc" prop="liaoc" clearable></el-input>
</el-form-item>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="onSubmit"> </el-button>
</span>
</el-dialog>
</el-table-column>
</el-table>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="设置" name="third">角色管理</el-tab-pane>
</el-tabs>
</el-form>
</template>
<script>
export default {
name: 'DocrecordIndex',
data () {
return {
DocForm: {
doctorname: '',
ghname: '',
yyh: '',
zhengz: '',
zhend: '',
liaoc: ''
},
records: [],
activeName: 'first',
dialogVisible: false,
doczy: []
}
},
mounted: function () {
this.loadRecords()
/** this.loadDocyz() **/
},
methods: {
loadRecords () {
var _this = this
this.$axios.get('/docrecords').then(resp => {
if (resp && resp.status === 200) {
_this.records = resp.data
}
})
},
handleClick (tab, event) {
console.log(tab, event)
},
handleClose (done) {
this.$confirm('确认关闭?')
.then(_ => {
done()
})
.catch(_ => {})
},
/**
searchClick () {
var _this = this
this.$axios
.post('/docrecords', {
doctor: this.DocForm.doctor
}).then(resp => {
if (resp && resp.status === 200) {
_this.records = resp.data
}
})
},**/
onSubmit () {
this.$axios
.post('/docrecords', {
doctorname: this.DocForm.doctorname,
ghname: this.DocForm.ghname,
yyh: this.DocForm.yyh,
zhengz: this.DocForm.zhengz,
zhend: this.DocForm.zhend,
liaoc: this.DocForm.liaoc
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('onSubmit')
}
})
this.$message({
message: '成功',
type: 'success'
})
this.$router.replace({path: '/docrecords'})
}
/** loadDocyz () {
var _this = this
this.$axios.get('/docrecords').then(resp => {
if (resp && resp.status === 200) {
_this.doczy = resp.data
}
})
}**/
}
}
</script>

@ -0,0 +1,15 @@
<template>
<div>
Welcome to my System!
</div>
</template>
<script>
export default {
name: 'AppIndex'
}
</script>
<style scoped>
</style>

@ -0,0 +1,35 @@
<template>
<el-container>
<el-aside style="width: 200px;margin-top: 20px">
<switch></switch>
<SideMenu @indexSelect="listByRegister" ref="sideMenu"></SideMenu>
</el-aside>
<el-main>
<record class="record-area" ref="recordArea"></record>
</el-main>
</el-container>
</template>
<script>
import SideMenu from './SideMenu'
import Record from './record'
export default {
name: 'RecordIndex',
components: {Record, SideMenu},
methods: {
listByRegister () {
var _this = this
var url = '/records'
this.$axios.get(url).then(resp => {
if (resp && resp.status === 200) {
_this.$refs.recordArea.records = resp.data
}
})
}
}
}
</script>
<style scoped>
</style>

@ -0,0 +1,34 @@
<template>
<div style="margin-bottom: 30px;display: flex;justify-content: center;align-items: center">
<el-input
@keyup.enter.native="searchClick"
placeholder="通过姓名搜索..."
prefix-icon="el-icon-search"
size="small"
style="width: 400px;margin-right: 10px"
v-model="keywords">
</el-input>
<el-button size="small" type="primary" icon="el-icon-search" @click="searchClick"></el-button>
</div>
</template>
<script>
export default {
name: 'SearchBar',
data () {
return {
keywords: '',
records: []
}
},
methods: {
searchClick () {
this.$emit('onSearch')
}
}
}
</script>
<style scoped>
</style>

@ -0,0 +1,40 @@
<template>
<el-menu
class="categories"
default-active="0"
@select="handleSelect"
active-text-color="red">
<el-menu-item index="0">
<i class="el-icon-menu"></i>
<span slot="title">预约挂号记录</span>
</el-menu-item>
</el-menu>
</template>
<script>
export default {
name: 'SideMenu',
data () {
return {
cid: ''
}
},
methods: {
handleSelect (key, keyPath) {
this.cid = key
//
this.$emit('indexSelect')
}
}
}
</script>
<style scoped>
.categories {
position: fixed;
margin-left: 50%;
left: -700px;
top: 130px;
width: 150px;
}
</style>

@ -0,0 +1,64 @@
<template>
<el-table
:data="records"
style="width: 100%">
<el-table-column
prop="name"
label="姓名"
width="180">
</el-table-column>
<el-table-column
prop="major"
label="学院"
width="180">
</el-table-column>
<el-table-column
prop="department"
label="科室"
width="180">
</el-table-column>
<el-table-column
prop="doctor"
label="主治医师"
width="180">
</el-table-column>
<el-table-column
prop="time"
label="预约时间"
width="180">
</el-table-column>
<el-table-column
prop="idnum"
label="预约号"
width="180">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: 'record',
data () {
return {
records: []
}
},
mounted: function () {
this.loadRecords()
},
methods: {
loadRecords () {
var _this = this
this.$axios.get('/records').then(resp => {
if (resp && resp.status === 200) {
_this.records = resp.data
}
})
}
}
}
</script>
<style scoped>
</style>

@ -0,0 +1,128 @@
<template>
<el-form class="login-container" label-position="left"
label-width="0px" :data="RegisterForm">
<h3 class="login_title">填写预约挂号信息</h3>
<el-form-item>
<el-input type="text" v-model="RegisterForm.username" prop="username"
auto-complete="off" placeholder="请输入账号"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" v-model="RegisterForm.name" prop="name"
auto-complete="off" placeholder="请输入患者姓名"></el-input>
</el-form-item>
<el-form-item>
<el-select v-model="RegisterForm.major" prop="major" filterable placeholder="请选择学院">
<el-option label="计算机学院" value="计算机学院"></el-option>
<el-option label="理学院" value="理学院"></el-option>
<el-option label="法学院" value="法学院"></el-option>
<el-option label="飞行学院" value="飞行学院"></el-option>
<el-option label="经济与管理学院" value="经济与管理学院"></el-option>
<el-option label="航空工程学院" value="航空工程学院"></el-option>
<el-option label="外国语学院" value="外国语学院"></el-option>
<el-option label="交通工程学院" value="交通工程学院"></el-option>
<el-option label="电动学院" value="电动学院"></el-option>
<el-option label="空管学院" value="空管学院"></el-option>
<el-option label="中欧学院" value="中欧学院"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="RegisterForm.department" prop="department" filterable placeholder="请选择科室">
<el-option v-for="item in department" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="RegisterForm.doctor" prop="doctor" filterable placeholder="请选择主治医师">
<el-option v-if="RegisterForm.department=='内科'" v-for="item in doctor.slice(0,3)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.department=='外科'" v-for="item in doctor.slice(3,5)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.department=='眼科'" v-for="item in doctor.slice(5,7)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.department=='耳鼻喉科'" v-for="item in doctor.slice(7,9)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.department=='口腔科'" v-for="item in doctor.slice(9,11)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.department=='皮肤科'" v-for="item in doctor.slice(11)" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="RegisterForm.time" prop="time" filterable placeholder="请选择就诊时间">
<el-option v-if="RegisterForm.doctor=='李明'" v-for="item in time.slice(0,7)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='王明'" v-for="item in time.slice(9,16)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='张伟'" v-for="item in time.slice(7,18)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='吴尚洋'" v-for="item in time.slice(2,9)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='王雨辰'" v-for="item in time.slice(5,15)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='曹时嘉'" v-for="item in time.slice(11,20)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='程学成'" v-for="item in time.slice(15)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='郑浩睿'" v-for="item in time.slice(6,14)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='李江涛'" v-for="item in time.slice(11,18)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='李飞翔'" v-for="item in time.slice(0,5)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='吴凯'" v-for="item in time.slice(1,7)" :key="item" :label="item" :value="item"></el-option>
<el-option v-if="RegisterForm.doctor=='侯兴禹'" v-for="item in time.slice(8,13)" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item style="width: 100%">
<el-button type="primary" style="width: 100%;background: #505458;border: none" @click="onSubmit"></el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
name: 'RegisterIndex',
data () {
return {
department: ['内科', '外科', '眼科', '耳鼻喉科', '口腔科', '皮肤科'],
doctor: ['李明', '王明', '张伟', '吴尚洋', '王雨辰', '曹时嘉', '程学成', '郑浩睿', '李江涛', '李飞翔', '吴凯', '侯兴禹'],
time: ['星期一上午9:00', '星期一上午10:00', '星期一下午14:00', '星期一上午15:00', '星期二上午8:00', '星期二上午10:00', '星期二下午14:00', '星期二上午16:00',
'星期三上午9:00', '星期三上午10:00', '星期三下午14:00', '星期三上午15:00', '星期四上午9:00', '星期四上午10:00', '星期四下午14:00', '星期四上午16:00',
'星期五上午8:00', '星期五上午10:00', '星期五下午14:00', '星期五上午15:00'],
RegisterForm: {
username: '',
name: '',
major: '',
department: '',
doctor: '',
time: ''
}
}
},
methods: {
onSubmit () {
this.$axios
.post('/register', {
username: this.RegisterForm.username,
name: this.RegisterForm.name,
major: this.RegisterForm.major,
department: this.RegisterForm.department,
doctor: this.RegisterForm.doctor,
time: this.RegisterForm.time
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('onSubmit')
}
})
this.$message({
message: '挂号成功',
type: 'success'
})
this.$router.replace({path: '/index'})
}
}
}
</script>
<style>
.login-container {
border-radius: 15px;
background-clip: padding-box;
margin: 80px auto;
width: 350px;
padding: 35px 35px 15px 35px;
background: #ffffff;
border: 1px solid #cac6c6;
box-shadow: 0 0 25px #ffffff;
}
.login_title {
margin: 0px auto 40px auto;
text-align: center;
color: #505458;
}
</style>

@ -0,0 +1,147 @@
<template>
<el-table
:data="serecords"
style="width: 100%"
:model="ruleForm"
class="se">
<el-table-column
prop="id"
label="登录身份"
v-model="ruleForm.id"
width="180">
</el-table-column>
<el-table-column
prop="username"
v-model="ruleForm.username"
label="用户名"
width="180">
</el-table-column>
<el-table-column
prop="password"
label="密码"
width="180">
</el-table-column>
<el-table-column
prop="realname"
v-model="ruleForm.realname"
label="姓名"
width="180">
</el-table-column>
<el-table-column
label="操作"
width="180">
<el-button type="text" @click="dialogVisible = true">修改</el-button>
<el-dialog title="修改密码" :visible.sync="dialogVisible" append-to-body>
<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm">
<el-form-item label="身份" prop="id">
<el-input v-model="ruleForm.id" autocomplete="off" clearable></el-input>
</el-form-item>
<el-form-item label="姓名" prop="realname">
<el-input v-model="ruleForm.realname" autocomplete="off" clearable></el-input>
</el-form-item>
<el-form-item label="账号" prop="username">
<el-input v-model="ruleForm.username" autocomplete="off" clearable></el-input>
</el-form-item>
<el-form-item label="密码" prop="pass">
<el-input type="password" v-model="ruleForm.pass" autocomplete="off" clearable></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="checkPass">
<el-input type="password" v-model="ruleForm.checkPass" autocomplete="off" clearable></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm('ruleForm')"> </el-button>
</div>
</el-dialog>
</el-table-column>
</el-table>
</template>
<script>
export default {
name: 'SettingIndex',
data () {
var validatePass = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入密码'))
} else {
if (this.ruleForm.checkPass !== '') {
this.$refs.ruleForm.validateField('checkPass')
}
callback()
}
}
var validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== this.ruleForm.pass) {
callback(new Error('两次输入密码不一致!'))
} else {
callback()
}
}
return {
serecords: [],
dialogVisible: false,
formLabelWidth: '100px',
ruleForm: {
id: '',
username: '',
realname: '',
pass: '',
checkPass: ''
},
rules: {
pass: [
{ validator: validatePass, trigger: 'blur' }
],
checkPass: [
{ validator: validatePass2, trigger: 'blur' }
]
}
}
},
mounted: function () {
this.loadSerecords()
},
methods: {
loadSerecords () {
var _this = this
this.$axios.get('/setting').then(resp => {
if (resp && resp.status === 200) {
_this.serecords = resp.data
}
})
},
submitForm (formName) {
this.$axios
.post('/setting', {
id: this.ruleForm.id,
username: this.ruleForm.username,
realname: this.ruleForm.realname,
password: this.ruleForm.checkPass
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('submitForm')
}
})
this.$message({
message: '修改成功',
type: 'success'
})
this.$router.replace({path: '/login'})
}
}
}
</script>
<style scoped>
.se {
position: fixed;
margin-left: 50%;
left: -400px;
top: 140px;
width: 700px;
}
</style>

@ -0,0 +1,99 @@
<template>
<div class="sh">
<template>
<el-form style="width: 100%" :data="shopRecord">
<el-form-item label="账号:">
<el-input type="text" v-model="shopRecord.username"
auto-complete="off" placeholder="账号"></el-input>
</el-form-item>
<el-form-item label="药品名称:">
<el-input type="text" v-model="shopRecord.medicine"
auto-complete="off" placeholder="药品名称"></el-input>
</el-form-item>
</el-form>
</template>
<template>
<el-table
:data="shopResult.filter(item=>item.name===shopRecord.medicine)"
style="width: 100%">
<el-table-column
prop="name"
label="药品名称">
</el-table-column>
<el-table-column
prop="price"
label="药品价格">
</el-table-column>
<el-table-column
prop="number"
label="药品数量">
</el-table-column>
</el-table>
</template>
<template>
<el-form style="width: 100%" :data="shopRecord">
<el-input type="text" v-model="shopRecord.number"
auto-complete="off" placeholder="购药数量"></el-input>
</el-form>
<el-form style="width: 100%">
<el-button type="primary" style="width: 100%;background: #464849;border: none" @click="onSubmit"></el-button>
</el-form>
</template>
</div>
</template>
<script>
export default {
name: 'ShopIndex',
data () {
return {
shopResult: [],
shopRecord: {
username: '',
medicine: '',
number: ''
}
}
},
mounted: function () {
this.shop()
},
methods: {
shop () {
var _this = this
this.$axios.get('/shop').then(resp => {
if (resp && resp.status === 200) {
_this.shopResult = resp.data
}
})
},
onSubmit () {
this.$axios
.post('/shop', {
myzh: this.shopRecord.username,
medicine: this.shopRecord.medicine,
number: this.shopRecord.number
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('onSubmit')
}
})
this.$message({
message: '购买成功',
type: 'success'
})
this.$router.replace({path: '/shop'})
}
}
}
</script>
<style scoped>
.sh {
position: fixed;
margin-left: 50%;
left: -200px;
top: 160px;
width: 400px;
}
</style>

@ -0,0 +1,56 @@
<template>
<el-table
:data="shrecords"
style="width: 100%"
class="sh">
<el-table-column
prop="mid"
label="取药号"
width="180">
</el-table-column>
<el-table-column
prop="medicine"
label="药名"
width="180">
</el-table-column>
<el-table-column
prop="number"
label="数量"
width="180">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: 'ShoprecordIndex',
data () {
return {
shrecords: []
}
},
mounted: function () {
this.loadShrecords()
},
methods: {
loadShrecords () {
var _this = this
this.$axios.get('/shoprecords').then(resp => {
if (resp && resp.status === 200) {
_this.shrecords = resp.data
}
})
}
}
}
</script>
<style scoped>
.sh {
position: fixed;
margin-left: 50%;
left: -250px;
top: 140px;
width: 700px;
}
</style>

@ -0,0 +1,71 @@
<template>
<el-table
:data="docyz"
style="width: 100%"
class="tre">
<el-table-column
prop="doctorname"
label="医生姓名"
width="180">
</el-table-column>
<el-table-column
prop="yyh"
label="预约号"
width="180">
</el-table-column>
<el-table-column
prop="ghname"
label="挂号姓名"
width="180">
</el-table-column>
<el-table-column
prop="zhengz"
label="症状"
width="180">
</el-table-column>
<el-table-column
prop="zhend"
label="诊断"
width="180">
</el-table-column>
<el-table-column
prop="liaoc"
label="疗程"
width="180">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: 'TreatmentIndex',
data () {
return {
docyz: []
}
},
mounted: function () {
this.loaddocyz()
},
methods: {
loaddocyz () {
var _this = this
this.$axios.get('/treatment').then(resp => {
if (resp && resp.status === 200) {
_this.docyz = resp.data
}
})
}
}
}
</script>
<style scoped>
.tre {
position: fixed;
margin-left: 50%;
left: -500px;
top: 140px;
width: 700px;
}
</style>

@ -0,0 +1,83 @@
<template>
<el-form class="zhuce" label-position="left"
label-width="0px">
<h3 class="login_title">注册新用户</h3>
<el-form-item>
<el-select v-model="ZhuForm.id" placeholder="请选择登录身份">
<el-option label="普通用户" value="普通用户"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-input type="text" v-model="ZhuForm.realname"
auto-complete="off" placeholder="输入姓名"></el-input>
</el-form-item>
<el-form-item>
<el-input type="text" v-model="ZhuForm.username"
auto-complete="off" placeholder="输入账号"></el-input>
</el-form-item>
<el-form-item>
<el-input type="password" v-model="ZhuForm.password"
auto-complete="off" placeholder="输入密码"></el-input>
</el-form-item>
<el-form-item style="width: 100%">
<el-button type="primary" style="width: 100%;background: #505458;border: none" v-on:click="ok">确定</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
name: 'ZhuceIndex',
data () {
return {
ZhuForm: {
id: '',
username: '',
password: '',
realname: ''
},
responseResult: []
}
},
methods: {
ok () {
this.$axios
.post('/zhu', {
id: this.ZhuForm.id,
username: this.ZhuForm.username,
realname: this.ZhuForm.realname,
password: this.ZhuForm.password
}).then(resp => {
if (resp && resp.status === 200) {
this.$emit('ok')
}
})
this.$message({
message: '注册成功',
type: 'success'
})
this.$router.replace({path: '/login'})
}
}
}
</script>
<style>
.zhuce {
border-radius: 15px;
background-clip: padding-box;
margin: 90px auto;
width: 350px;
padding: 35px 35px 15px 35px;
background: #fff;
border: 1px solid #eaeaea;
box-shadow: 0 0 25px #cac6c6;
}
.login_title {
margin: 0px auto 40px auto;
text-align: center;
color: #505458;
}
</style>

@ -0,0 +1,21 @@
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
var axios = require('axios')
axios.defaults.baseURL = 'http://localhost:8443/api'
Vue.prototype.$axios = axios
Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
el: '#app',
render: h => h(App),
router,
components: { App },
template: '<App/>'
})

@ -0,0 +1,123 @@
import Vue from 'vue'
import Router from 'vue-router'
import AppIndex from '../components/home/AppIndex'
import Login from '../components/Login'
import Home from '../components/Home'
import RegisterIndex from '../components/register/RegisterIndex'
import ShopIndex from '../components/shop/ShopIndex'
import RecordIndex from '../components/records/RecordIndex'
import AdvanceIndex from '../components/advance/AdvanceIndex'
import DocrecordIndex from '../components/docrecords/DocrecordIndex'
import TreatmentIndex from '../components/treatment/TreatmentIndex'
import ShoprecordIndex from '../components/shoprecords/ShoprecordIndex'
import SettingIndex from '../components/setting/SettingIndex'
import ZhuceIndex from '../components/zhu/ZhuceIndex'
import AdminIndex from '../components/Admin/AdminIndex'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/home',
name: 'Home',
component: Home,
redirect: '/index',
children: [
{
path: '/index',
name: 'AppIndex',
component: AppIndex,
meta: {
requireAuth: true
}
},
{
path: '/register',
name: 'RegisterIndex',
component: RegisterIndex,
meta: {
requireAuth: true
}
},
{
path: '/shop',
name: 'ShopIndex',
component: ShopIndex,
meta: {
requireAuth: true
}
},
{
path: '/records',
name: 'RecordIndex',
component: RecordIndex,
meta: {
requireAuth: true
}
},
{
path: '/advance',
name: 'AdvanceIndex',
component: AdvanceIndex,
meta: {
requireAuth: true
}
},
{
path: '/treatment',
name: 'TreatmentIndex',
component: TreatmentIndex,
meta: {
requireAuth: true
}
},
{
path: '/shoprecords',
name: 'ShoprecordIndex',
component: ShoprecordIndex,
meta: {
requireAuth: true
}
},
{
path: '/setting',
name: 'SettingIndex',
component: SettingIndex,
meta: {
requireAuth: true
}
}
]
},
{
path: '/docrecords',
name: 'DocrecordIndex',
component: DocrecordIndex,
meta: {
requireAuth: true
}
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/zhu',
name: 'ZhuceIndex',
component: ZhuceIndex,
meta: {
requireAuth: true
}
},
{
path: '/Admin',
name: 'AdminIndex',
component: AdminIndex,
meta: {
requireAuth: true
}
}
]
})

@ -0,0 +1,27 @@
// A custom Nightwatch assertion.
// The assertion name is the filename.
// Example usage:
//
// browser.assert.elementCount(selector, count)
//
// For more information on custom assertions see:
// http://nightwatchjs.org/guide#writing-custom-assertions
exports.assertion = function (selector, count) {
this.message = 'Testing if element <' + selector + '> has count: ' + count
this.expected = count
this.pass = function (val) {
return val === this.expected
}
this.value = function (res) {
return res.value
}
this.command = function (cb) {
var self = this
return this.api.execute(function (selector) {
return document.querySelectorAll(selector).length
}, [selector], function (res) {
cb.call(self, res)
})
}
}

@ -0,0 +1,46 @@
require('babel-register')
var config = require('../../config')
// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}

@ -0,0 +1,48 @@
// 1. start the dev server using production config
process.env.NODE_ENV = 'testing'
const webpack = require('webpack')
const DevServer = require('webpack-dev-server')
const webpackConfig = require('../../build/webpack.prod.conf')
const devConfigPromise = require('../../build/webpack.dev.conf')
let server
devConfigPromise.then(devConfig => {
const devServerOptions = devConfig.devServer
const compiler = webpack(webpackConfig)
server = new DevServer(compiler, devServerOptions)
const port = devServerOptions.port
const host = devServerOptions.host
return server.listen(port, host)
})
.then(() => {
// 2. run the nightwatch test suite against it
// to run in additional browsers:
// 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings"
// 2. add it to the --env flag below
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
// For more information on Nightwatch's config file, see
// http://nightwatchjs.org/guide#settings-file
let opts = process.argv.slice(2)
if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
const spawn = require('cross-spawn')
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
runner.on('exit', function (code) {
server.close()
process.exit(code)
})
runner.on('error', function (err) {
server.close()
throw err
})
})

@ -0,0 +1,19 @@
// For authoring Nightwatch tests, see
// http://nightwatchjs.org/guide#usage
module.exports = {
'default e2e tests': function (browser) {
// automatically uses dev Server port from /config.index.js
// default: http://localhost:8080
// see nightwatch.conf.js
const devServer = browser.globals.devServerURL
browser
.url(devServer)
.waitForElementVisible('#app', 5000)
.assert.elementPresent('.hello')
.assert.containsText('h1', 'Welcome to Your Vue.js App')
.assert.elementCount('img', 1)
.end()
}
}

@ -0,0 +1,7 @@
{
"env": {
"jest": true
},
"globals": {
}
}

@ -0,0 +1,30 @@
const path = require('path')
module.exports = {
rootDir: path.resolve(__dirname, '../../'),
moduleFileExtensions: [
'js',
'json',
'vue'
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
transform: {
'^.+\\.js$': '<rootDir>/node_modules/babel-jest',
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
},
testPathIgnorePatterns: [
'<rootDir>/test/e2e'
],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
setupFiles: ['<rootDir>/test/unit/setup'],
mapCoverage: true,
coverageDirectory: '<rootDir>/test/unit/coverage',
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js',
'!src/router/index.js',
'!**/node_modules/**'
]
}

@ -0,0 +1,3 @@
import Vue from 'vue'
Vue.config.productionTip = false

@ -0,0 +1,11 @@
import Vue from 'vue'
import HelloWorld from '@/components/HelloWorld'
describe('HelloWorld.vue', () => {
it('should render correct contents', () => {
const Constructor = Vue.extend(HelloWorld)
const vm = new Constructor().$mount()
expect(vm.$el.querySelector('.hello h1').textContent)
.toEqual('Welcome to Your Vue.js App')
})
})
Loading…
Cancel
Save