''
31
HSLink-back/.gitignore
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**
|
||||||
|
!**/src/test/**
|
||||||
|
|
||||||
|
### 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/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
118
HSLink-back/.mvn/wrapper/MavenWrapperDownloader.java
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2007-present the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.channels.*;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class MavenWrapperDownloader {
|
||||||
|
|
||||||
|
private static final String WRAPPER_VERSION = "0.5.6";
|
||||||
|
/**
|
||||||
|
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
|
||||||
|
*/
|
||||||
|
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
|
||||||
|
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
|
||||||
|
* use instead of the default one.
|
||||||
|
*/
|
||||||
|
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
|
||||||
|
".mvn/wrapper/maven-wrapper.properties";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path where the maven-wrapper.jar will be saved to.
|
||||||
|
*/
|
||||||
|
private static final String MAVEN_WRAPPER_JAR_PATH =
|
||||||
|
".mvn/wrapper/maven-wrapper.jar";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name of the property which should be used to override the default download url for the wrapper.
|
||||||
|
*/
|
||||||
|
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
System.out.println("- Downloader started");
|
||||||
|
File baseDirectory = new File(args[0]);
|
||||||
|
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
|
||||||
|
|
||||||
|
// If the maven-wrapper.properties exists, read it and check if it contains a custom
|
||||||
|
// wrapperUrl parameter.
|
||||||
|
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
|
||||||
|
String url = DEFAULT_DOWNLOAD_URL;
|
||||||
|
if (mavenWrapperPropertyFile.exists()) {
|
||||||
|
FileInputStream mavenWrapperPropertyFileInputStream = null;
|
||||||
|
try {
|
||||||
|
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
|
||||||
|
Properties mavenWrapperProperties = new Properties();
|
||||||
|
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
|
||||||
|
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (mavenWrapperPropertyFileInputStream != null) {
|
||||||
|
mavenWrapperPropertyFileInputStream.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Ignore ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("- Downloading from: " + url);
|
||||||
|
|
||||||
|
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
|
||||||
|
if (!outputFile.getParentFile().exists()) {
|
||||||
|
if (!outputFile.getParentFile().mkdirs()) {
|
||||||
|
System.out.println(
|
||||||
|
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
|
||||||
|
try {
|
||||||
|
downloadFileFromURL(url, outputFile);
|
||||||
|
System.out.println("Done");
|
||||||
|
System.exit(0);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
System.out.println("- Error downloading");
|
||||||
|
e.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
|
||||||
|
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
|
||||||
|
String username = System.getenv("MVNW_USERNAME");
|
||||||
|
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
|
||||||
|
Authenticator.setDefault(new Authenticator() {
|
||||||
|
@Override
|
||||||
|
protected PasswordAuthentication getPasswordAuthentication() {
|
||||||
|
return new PasswordAuthentication(username, password);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
URL website = new URL(urlString);
|
||||||
|
ReadableByteChannel rbc;
|
||||||
|
rbc = Channels.newChannel(website.openStream());
|
||||||
|
FileOutputStream fos = new FileOutputStream(destination);
|
||||||
|
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
|
||||||
|
fos.close();
|
||||||
|
rbc.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
BIN
HSLink-back/.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
2
HSLink-back/.mvn/wrapper/maven-wrapper.properties
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
|
||||||
|
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
|
310
HSLink-back/mvnw
vendored
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
#!/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 /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="`which 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/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
else
|
||||||
|
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.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"
|
||||||
|
else
|
||||||
|
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$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 \
|
||||||
|
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||||
|
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||||
|
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
182
HSLink-back/mvnw.cmd
vendored
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
@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 "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
|
||||||
|
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\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/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
|
||||||
|
|
||||||
|
FOR /F "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%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.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 "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
|
||||||
|
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\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%
|
||||||
|
|
||||||
|
exit /B %ERROR_CODE%
|
75
HSLink-back/pom.xml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.2.6.RELEASE</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.qinxx</groupId>
|
||||||
|
<artifactId>hslink</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>hslink</name>
|
||||||
|
<description>Demo project for Spring Boot</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
|
<version>2.1.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-devtools</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<resources>
|
||||||
|
<!--不然编译找不到xml-->
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/java</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.properties</include>
|
||||||
|
<include>**/*.xml</include>
|
||||||
|
</includes>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.qinxx.hslink;
|
||||||
|
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@MapperScan(basePackages = {"com.qinxx.hslink.dao"})
|
||||||
|
@SpringBootApplication
|
||||||
|
public class HslinkApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(HslinkApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
package com.qinxx.hslink.controller;
|
||||||
|
|
||||||
|
import com.qinxx.hslink.service.HSService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/hs")
|
||||||
|
public class HSController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
HSService hsService;
|
||||||
|
|
||||||
|
//登录验证
|
||||||
|
@RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String,Object> hello(@RequestBody Map<String,Object> param) {
|
||||||
|
Map<String,Object> result = new HashMap<>();
|
||||||
|
result = hsService.login(param);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册
|
||||||
|
@RequestMapping(value = "/register", method = {RequestMethod.POST,RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String,Object> register(@RequestBody Map<String,Object> param) {
|
||||||
|
Map<String,Object> result = new HashMap<>();
|
||||||
|
result = hsService.register(param);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取首页内容
|
||||||
|
@RequestMapping(value = "/getAllContent", method = {RequestMethod.POST,RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String,Object> getAllContent(@RequestBody Map<String,Object> param) {
|
||||||
|
Map<String,Object> result = new HashMap<>();
|
||||||
|
result = hsService.getAllContent(param);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取一条数据具体内容
|
||||||
|
@RequestMapping(value = "/getOneContent", method = {RequestMethod.POST,RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String,Object> getOneContent(@RequestBody Map<String,Object> param) {
|
||||||
|
Map<String,Object> result = hsService.getOneContent(param);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//新增留言
|
||||||
|
@RequestMapping(value = "/addMessage", method = {RequestMethod.POST,RequestMethod.GET})
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String,Object> addMessage(@RequestBody Map<String,Object> param) {
|
||||||
|
Map<String,Object> result = hsService.addMessage(param);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.qinxx.hslink.dao;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface HSLinkMapper {
|
||||||
|
/**
|
||||||
|
*登录验证
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String,Object> login(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册
|
||||||
|
*/
|
||||||
|
int register(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取校园通知
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> getSchoolNotice(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取优秀建议
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> getParentAdvice(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取神奇想法
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> getStudentThinking(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取一条数据具体内容
|
||||||
|
*/
|
||||||
|
Map<String,Object> getOneContent(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取一条数据具体内容
|
||||||
|
*/
|
||||||
|
List<Map<String,Object>> getOneLeaveMessage(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增留言
|
||||||
|
*/
|
||||||
|
int addMessage(Map<String,Object> param);
|
||||||
|
}
|
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.qinxx.hslink.dao.HSLinkMapper">
|
||||||
|
|
||||||
|
<!--登录验证-->
|
||||||
|
<select id="login" resultType="map" parameterType="map">
|
||||||
|
select * from hs_user where (real_name = #{username} and pass_word = #{password} and user_type = #{role})
|
||||||
|
or (mobile = #{username} and pass_word = #{password} and user_type = #{role})
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--注册-->
|
||||||
|
<insert id="register" parameterType="map">
|
||||||
|
INSERT INTO hs_user ( user_id, pass_word,real_name, mobile, user_type, creat_time, frozen_state, error_times)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
uuid(),
|
||||||
|
#{password},
|
||||||
|
#{realname},
|
||||||
|
#{mobile},
|
||||||
|
#{type},
|
||||||
|
now(),
|
||||||
|
'00',
|
||||||
|
'0'
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<!--获取校园通知-->
|
||||||
|
<select id="getSchoolNotice" parameterType="map" resultType="map">
|
||||||
|
SELECT
|
||||||
|
s.id,
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
real_name,
|
||||||
|
release_time
|
||||||
|
FROM
|
||||||
|
hs_notice s left join hs_user u on s.release_id = u.user_id
|
||||||
|
where type = '校园通知'
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and s.id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="type != null and type != ''">
|
||||||
|
and label = #{label}
|
||||||
|
</if>
|
||||||
|
ORDER BY release_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--获取家长建议-->
|
||||||
|
<select id="getParentAdvice" parameterType="map" resultType="map">
|
||||||
|
SELECT
|
||||||
|
p.id,
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
real_name,
|
||||||
|
release_time
|
||||||
|
FROM
|
||||||
|
hs_notice p left join hs_user u on p.release_id = u.user_id
|
||||||
|
where type = '家长建议'
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and p.id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="type != null and type != ''">
|
||||||
|
and label = #{label}
|
||||||
|
</if>
|
||||||
|
ORDER BY release_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--获取学生想法-->
|
||||||
|
<select id="getStudentThinking" parameterType="map" resultType="map">
|
||||||
|
SELECT
|
||||||
|
s.id,
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
real_name,
|
||||||
|
release_time
|
||||||
|
FROM
|
||||||
|
hs_notice s left join hs_user u on s.release_id = u.user_id
|
||||||
|
where type = '学生想法'
|
||||||
|
<if test="id != null and id != ''">
|
||||||
|
and s.id = #{id}
|
||||||
|
</if>
|
||||||
|
<if test="type != null and type != ''">
|
||||||
|
and label = #{label}
|
||||||
|
</if>
|
||||||
|
ORDER BY release_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--获取一条数据的具体内容-->
|
||||||
|
<select id="getOneContent" resultType="map" parameterType="map">
|
||||||
|
select
|
||||||
|
id,
|
||||||
|
release_id author_id,
|
||||||
|
real_name author_name,
|
||||||
|
create_time,
|
||||||
|
label,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
integral,
|
||||||
|
'' header_photo
|
||||||
|
from hs_notice n left join hs_user u on n.release_id = u.user_id
|
||||||
|
where id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--获取一条数据的留言-->
|
||||||
|
<select id="getOneLeaveMessage" parameterType="map" resultType="map">
|
||||||
|
select id,
|
||||||
|
messager_id,
|
||||||
|
content,
|
||||||
|
hs_leave_message.create_time,
|
||||||
|
real_name,
|
||||||
|
'' header_photot from hs_leave_message left join hs_user on messager_id = user_id where notice_id = #{id} ORDER BY create_time desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!--新增留言-->
|
||||||
|
<insert id="addMessage" parameterType="map">
|
||||||
|
insert into hs_leave_message(id,notice_id,messager_id,content,create_time) VALUES (uuid(),#{noticeId},#{userId},#{content},#{createTime})
|
||||||
|
</insert>
|
||||||
|
</mapper>
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.qinxx.hslink.service;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface HSService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*登录验证
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String,Object> login(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册
|
||||||
|
*/
|
||||||
|
Map<String, Object> register(Map<String, Object> parameter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取首页内容
|
||||||
|
*/
|
||||||
|
Map<String,Object> getAllContent(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取一条数据具体内容
|
||||||
|
*/
|
||||||
|
Map<String,Object> getOneContent(Map<String,Object> param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增留言
|
||||||
|
*/
|
||||||
|
Map<String,Object> addMessage(Map<String,Object> param);
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
package com.qinxx.hslink.service.impl;
|
||||||
|
|
||||||
|
import com.qinxx.hslink.dao.HSLinkMapper;
|
||||||
|
import com.qinxx.hslink.service.HSService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
@Service
|
||||||
|
public class HSServiceImpl implements HSService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
HSLinkMapper hsLinkMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> login(Map<String, Object> param) {
|
||||||
|
Map<String,Object> result = new HashMap<>();
|
||||||
|
Map<String,Object> res = hsLinkMapper.login(param);
|
||||||
|
result.put("data",res);
|
||||||
|
result.put("success",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> register(Map<String, Object> parameter) {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
int res = 0;
|
||||||
|
try {
|
||||||
|
res = hsLinkMapper.register(parameter);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
res = 0;
|
||||||
|
}
|
||||||
|
result.put("data",res);
|
||||||
|
result.put("success",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getAllContent(Map<String, Object> param) {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
Map<String,Object> res = new HashMap<>();
|
||||||
|
List<Map<String,Object>> schoolNoticeList = hsLinkMapper.getSchoolNotice(param);
|
||||||
|
res.put("schoolNoticeList",schoolNoticeList);
|
||||||
|
List<Map<String,Object>> parentAdvice = hsLinkMapper.getParentAdvice(param);
|
||||||
|
res.put("parentAdvice",parentAdvice);
|
||||||
|
List<Map<String,Object>> studentThinking = hsLinkMapper.getStudentThinking(param);
|
||||||
|
res.put("studentThinking",studentThinking);
|
||||||
|
result.put("data",res);
|
||||||
|
result.put("success",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getOneContent(Map<String, Object> param) {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
Map<String, Object> res = new HashMap<>();
|
||||||
|
Map<String, Object> res1 = hsLinkMapper.getOneContent(param);
|
||||||
|
List<Map<String, Object>> res2 = hsLinkMapper.getOneLeaveMessage(param);
|
||||||
|
res.put("content",res1);
|
||||||
|
res.put("message",res2);
|
||||||
|
result.put("data",res);
|
||||||
|
result.put("success",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> addMessage(Map<String, Object> param) {
|
||||||
|
int res = 0;
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
try {
|
||||||
|
res = hsLinkMapper.addMessage(param);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
res = 0;
|
||||||
|
}
|
||||||
|
result.put("data",res);
|
||||||
|
result.put("success",true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.qinxx.hslink.util;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||||
|
import org.springframework.web.filter.CorsFilter;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CorsConfig {
|
||||||
|
private CorsConfiguration buildConfig() {
|
||||||
|
CorsConfiguration corsConfiguration = new CorsConfiguration();
|
||||||
|
corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用
|
||||||
|
corsConfiguration.addAllowedHeader("*"); // 2允许任何头
|
||||||
|
corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等)
|
||||||
|
return corsConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public CorsFilter corsFilter() {
|
||||||
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||||
|
source.registerCorsConfiguration("/**", buildConfig()); // 4
|
||||||
|
return new CorsFilter(source);
|
||||||
|
}
|
||||||
|
}
|
21
HSLink-back/src/main/resources/application.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
##端口号
|
||||||
|
server:
|
||||||
|
port: 8048
|
||||||
|
## mybatis配置
|
||||||
|
mybatis:
|
||||||
|
mapper-locations: classpath*:com/qinxx/hslink/dao/mapping/*.xml
|
||||||
|
typeAliasesPackage: com.qinxx.hslink.model
|
||||||
|
##日志等级
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
com.qinxx.hslink.dao : debug
|
||||||
|
##数据源
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
# url: jdbc:mysql://123.57.22.91:3306/hslink?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8
|
||||||
|
url: jdbc:mysql://127.0.0.1:3306/hslink?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf8
|
||||||
|
username: root
|
||||||
|
password: 123456
|
||||||
|
db-name: hslink
|
||||||
|
filters: log4j,wall,mergeStat
|
||||||
|
driverClassName: com.mysql.cj.jdbc.Driver
|
@ -13,7 +13,7 @@ module.exports = {
|
|||||||
proxyTable: {},
|
proxyTable: {},
|
||||||
|
|
||||||
// Various Dev Server settings
|
// Various Dev Server settings
|
||||||
host: 'localhost', // can be overwritten by process.env.HOST
|
host: '192.168.10.29', // 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
|
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||||
autoOpenBrowser: false,
|
autoOpenBrowser: false,
|
||||||
errorOverlay: true,
|
errorOverlay: true,
|
||||||
|
90
HSLink-front/package-lock.json
generated
@ -262,6 +262,14 @@
|
|||||||
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
|
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"async-validator": {
|
||||||
|
"version": "1.8.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
|
||||||
|
"integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
|
||||||
|
"requires": {
|
||||||
|
"babel-runtime": "6.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
"atob": {
|
"atob": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
||||||
@ -282,6 +290,32 @@
|
|||||||
"postcss-value-parser": "^3.2.3"
|
"postcss-value-parser": "^3.2.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.19.2",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.2.tgz",
|
||||||
|
"integrity": "sha1-PqNsXYgY0NX4qKl6bTa4bNwAyyc=",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "1.5.10"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
|
||||||
|
"integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.5.10",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz",
|
||||||
|
"integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
|
||||||
|
"requires": {
|
||||||
|
"debug": "=3.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-code-frame": {
|
"babel-code-frame": {
|
||||||
"version": "6.26.0",
|
"version": "6.26.0",
|
||||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
||||||
@ -532,8 +566,7 @@
|
|||||||
"babel-helper-vue-jsx-merge-props": {
|
"babel-helper-vue-jsx-merge-props": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
|
||||||
"integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==",
|
"integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"babel-helpers": {
|
"babel-helpers": {
|
||||||
"version": "6.24.1",
|
"version": "6.24.1",
|
||||||
@ -1061,7 +1094,6 @@
|
|||||||
"version": "6.26.0",
|
"version": "6.26.0",
|
||||||
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
|
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
|
||||||
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
|
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"core-js": "^2.4.0",
|
"core-js": "^2.4.0",
|
||||||
"regenerator-runtime": "^0.11.0"
|
"regenerator-runtime": "^0.11.0"
|
||||||
@ -2000,8 +2032,7 @@
|
|||||||
"core-js": {
|
"core-js": {
|
||||||
"version": "2.6.11",
|
"version": "2.6.11",
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
|
||||||
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
|
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@ -3149,6 +3180,11 @@
|
|||||||
"regexp.prototype.flags": "^1.2.0"
|
"regexp.prototype.flags": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"deepmerge": {
|
||||||
|
"version": "1.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
|
||||||
|
"integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
|
||||||
|
},
|
||||||
"define-properties": {
|
"define-properties": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
|
||||||
@ -3433,6 +3469,19 @@
|
|||||||
"integrity": "sha512-4RvbM5x+002gKI8sltkqWEk5pptn0UnzekUx8RTThAMPDSb8jjpm6SwGiSnEve7f85biyZl8DMXaipaCxDjXag==",
|
"integrity": "sha512-4RvbM5x+002gKI8sltkqWEk5pptn0UnzekUx8RTThAMPDSb8jjpm6SwGiSnEve7f85biyZl8DMXaipaCxDjXag==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"element-ui": {
|
||||||
|
"version": "2.13.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.0.tgz",
|
||||||
|
"integrity": "sha512-KYsHWsBXYbLELS8cdfvgJTOMSUby3UEjvsPV1V1VmgJ/DdkOAS4z3MiOrPxrT9w2Cc5lZ4eVSQiGhYFR5NVChw==",
|
||||||
|
"requires": {
|
||||||
|
"async-validator": "~1.8.1",
|
||||||
|
"babel-helper-vue-jsx-merge-props": "^2.0.0",
|
||||||
|
"deepmerge": "^1.2.0",
|
||||||
|
"normalize-wheel": "^1.0.1",
|
||||||
|
"resize-observer-polyfill": "^1.5.0",
|
||||||
|
"throttle-debounce": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"elliptic": {
|
"elliptic": {
|
||||||
"version": "6.5.2",
|
"version": "6.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
|
||||||
@ -5894,6 +5943,11 @@
|
|||||||
"object-visit": "^1.0.0"
|
"object-visit": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"marked": {
|
||||||
|
"version": "0.8.2",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/marked/download/marked-0.8.2.tgz?cache=0&sync_timestamp=1584894910023&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmarked%2Fdownload%2Fmarked-0.8.2.tgz",
|
||||||
|
"integrity": "sha1-T6rSjSbt41Gnoaql/sZ5Fchp41U="
|
||||||
|
},
|
||||||
"math-expression-evaluator": {
|
"math-expression-evaluator": {
|
||||||
"version": "1.2.22",
|
"version": "1.2.22",
|
||||||
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz",
|
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz",
|
||||||
@ -6220,8 +6274,7 @@
|
|||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"multicast-dns": {
|
"multicast-dns": {
|
||||||
"version": "6.2.3",
|
"version": "6.2.3",
|
||||||
@ -6400,6 +6453,11 @@
|
|||||||
"sort-keys": "^1.0.0"
|
"sort-keys": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"normalize-wheel": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
|
||||||
|
},
|
||||||
"npm-run-path": {
|
"npm-run-path": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
||||||
@ -9586,8 +9644,7 @@
|
|||||||
"regenerator-runtime": {
|
"regenerator-runtime": {
|
||||||
"version": "0.11.1",
|
"version": "0.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
|
||||||
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
|
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"regenerator-transform": {
|
"regenerator-transform": {
|
||||||
"version": "0.10.1",
|
"version": "0.10.1",
|
||||||
@ -9724,6 +9781,11 @@
|
|||||||
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"resize-observer-polyfill": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
|
||||||
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.15.1",
|
"version": "1.15.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
|
||||||
@ -10660,6 +10722,11 @@
|
|||||||
"integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==",
|
"integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"throttle-debounce": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
|
||||||
|
},
|
||||||
"through2": {
|
"through2": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
|
||||||
@ -11248,6 +11315,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.6.tgz",
|
||||||
"integrity": "sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA=="
|
"integrity": "sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA=="
|
||||||
},
|
},
|
||||||
|
"vue-scroll": {
|
||||||
|
"version": "2.1.13",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/vue-scroll/download/vue-scroll-2.1.13.tgz",
|
||||||
|
"integrity": "sha1-Q+KfQ/1k1S/yhWh3wtDFsPZDMYg="
|
||||||
|
},
|
||||||
"vue-style-loader": {
|
"vue-style-loader": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz",
|
||||||
|
@ -10,9 +10,12 @@
|
|||||||
"build": "node build/build.js"
|
"build": "node build/build.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"axios": "^0.19.2",
|
||||||
"element-ui": "^2.13.0",
|
"element-ui": "^2.13.0",
|
||||||
|
"marked": "^0.8.2",
|
||||||
"vue": "^2.5.2",
|
"vue": "^2.5.2",
|
||||||
"vue-router": "^3.0.1"
|
"vue-router": "^3.0.1",
|
||||||
|
"vue-scroll": "^2.1.13"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^7.1.2",
|
"autoprefixer": "^7.1.2",
|
||||||
@ -39,6 +42,8 @@
|
|||||||
"postcss-loader": "^2.0.8",
|
"postcss-loader": "^2.0.8",
|
||||||
"postcss-url": "^7.2.1",
|
"postcss-url": "^7.2.1",
|
||||||
"rimraf": "^2.6.0",
|
"rimraf": "^2.6.0",
|
||||||
|
"sass": "^1.26.3",
|
||||||
|
"sass-loader": "^7.3.1",
|
||||||
"semver": "^5.3.0",
|
"semver": "^5.3.0",
|
||||||
"shelljs": "^0.7.6",
|
"shelljs": "^0.7.6",
|
||||||
"uglifyjs-webpack-plugin": "^1.1.1",
|
"uglifyjs-webpack-plugin": "^1.1.1",
|
||||||
|
88
HSLink-front/src/api/index.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// 配置API接口地址
|
||||||
|
import de from "element-ui/src/locale/lang/de";
|
||||||
|
|
||||||
|
// let root = 'http://192.168.10.29:8008'
|
||||||
|
// let root = 'http://123.57.22.91:8002'
|
||||||
|
let root = 'http://127.0.0.1:8048'
|
||||||
|
// 引用axios
|
||||||
|
let axios = require('axios')
|
||||||
|
// 自定义判断元素类型JS
|
||||||
|
function toType (obj) {
|
||||||
|
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
|
||||||
|
}
|
||||||
|
// 参数过滤函数
|
||||||
|
function filterNull (o) {
|
||||||
|
for (let key in o) {
|
||||||
|
if (o[key] === null) {
|
||||||
|
delete o[key]
|
||||||
|
}
|
||||||
|
if (toType(o[key]) === 'string') {
|
||||||
|
o[key] = o[key].trim()
|
||||||
|
} else if (toType(o[key]) === 'object') {
|
||||||
|
o[key] = filterNull(o[key])
|
||||||
|
} else if (toType(o[key]) === 'array') {
|
||||||
|
o[key] = filterNull(o[key])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
接口处理函数
|
||||||
|
这个函数每个项目都是不一样的,我现在调整的是适用于
|
||||||
|
https://cnodejs.org/api/v1 的接口,如果是其他接口
|
||||||
|
需要根据接口的参数进行调整。参考说明文档地址:
|
||||||
|
https://cnodejs.org/topic/5378720ed6e2d16149fa16bd
|
||||||
|
主要是,不同的接口的成功标识和失败提示是不一致的。
|
||||||
|
另外,不同的项目的处理方法也是不一致的,这里出错就是简单的alert
|
||||||
|
*/
|
||||||
|
function apiAxios (method, url, params, success, failure) {
|
||||||
|
if (params) {
|
||||||
|
params = filterNull(params)
|
||||||
|
}
|
||||||
|
axios({
|
||||||
|
method: method,
|
||||||
|
url: url,
|
||||||
|
data: method === 'POST' || method === 'PUT' ? params : null,
|
||||||
|
params: method === 'GET' || method === 'DELETE' ? params : null,
|
||||||
|
baseURL: root,
|
||||||
|
withCredentials: false
|
||||||
|
})
|
||||||
|
.then(function (res) {
|
||||||
|
console.log("success",res)
|
||||||
|
if (res.data.success === true) {
|
||||||
|
if (success) {
|
||||||
|
success(res.data.data)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (failure) {
|
||||||
|
failure(res.data)
|
||||||
|
} else {
|
||||||
|
console.log('error: ' + JSON.stringify(res.data))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
console.log("error",err)
|
||||||
|
let res = err.response
|
||||||
|
if (err) {
|
||||||
|
console.log('api error, HTTP CODE: ' + res)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回在vue模板中的调用接口
|
||||||
|
export default {
|
||||||
|
get: function (url, params, success, failure) {
|
||||||
|
return apiAxios('GET', url, params, success, failure)
|
||||||
|
},
|
||||||
|
post: function (url, params, success, failure) {
|
||||||
|
return apiAxios('POST', url, params, success, failure)
|
||||||
|
},
|
||||||
|
put: function (url, params, success, failure) {
|
||||||
|
return apiAxios('PUT', url, params, success, failure)
|
||||||
|
},
|
||||||
|
delete: function (url, params, success, failure) {
|
||||||
|
return apiAxios('DELETE', url, params, success, failure)
|
||||||
|
}
|
||||||
|
}
|
1
HSLink-front/src/assets/css/atom-one-dark.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.hljs{display:block;overflow-x:auto;padding:0.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-link{text-decoration:underline}
|
681
HSLink-front/src/assets/css/github-markdown.css
Normal file
@ -0,0 +1,681 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: octicons-link;
|
||||||
|
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body {
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #333;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-c {
|
||||||
|
color: #969896;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-c1,
|
||||||
|
.markdown-body .pl-s .pl-v {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-e,
|
||||||
|
.markdown-body .pl-en {
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-smi,
|
||||||
|
.markdown-body .pl-s .pl-s1 {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ent {
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-k {
|
||||||
|
color: #a71d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-s,
|
||||||
|
.markdown-body .pl-pds,
|
||||||
|
.markdown-body .pl-s .pl-pse .pl-s1,
|
||||||
|
.markdown-body .pl-sr,
|
||||||
|
.markdown-body .pl-sr .pl-cce,
|
||||||
|
.markdown-body .pl-sr .pl-sre,
|
||||||
|
.markdown-body .pl-sr .pl-sra {
|
||||||
|
color: #183691;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-v {
|
||||||
|
color: #ed6a43;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-id {
|
||||||
|
color: #b52a1d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ii {
|
||||||
|
color: #f8f8f8;
|
||||||
|
background-color: #b52a1d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-sr .pl-cce {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-ml {
|
||||||
|
color: #693a17;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mh,
|
||||||
|
.markdown-body .pl-mh .pl-en,
|
||||||
|
.markdown-body .pl-ms {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1d3e81;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mq {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mi {
|
||||||
|
font-style: italic;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mb {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-md {
|
||||||
|
color: #bd2c00;
|
||||||
|
background-color: #ffecec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mi1 {
|
||||||
|
color: #55a532;
|
||||||
|
background-color: #eaffea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mdr {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-mo {
|
||||||
|
color: #1d3e81;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .octicon {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: text-top;
|
||||||
|
fill: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:active,
|
||||||
|
.markdown-body a:hover {
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code,
|
||||||
|
.markdown-body kbd,
|
||||||
|
.markdown-body pre {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
font: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body [type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
color: #4078c0;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:hover,
|
||||||
|
.markdown-body a:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body strong {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
height: 0;
|
||||||
|
margin: 15px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr::before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr::after {
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body td,
|
||||||
|
.markdown-body th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3,
|
||||||
|
.markdown-body h4,
|
||||||
|
.markdown-body h5,
|
||||||
|
.markdown-body h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ul ol {
|
||||||
|
list-style-type: lower-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul ol,
|
||||||
|
.markdown-body ul ol ol,
|
||||||
|
.markdown-body ol ul ol,
|
||||||
|
.markdown-body ol ol ol {
|
||||||
|
list-style-type: lower-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dd {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code {
|
||||||
|
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .octicon {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body input {
|
||||||
|
-webkit-font-feature-settings: "liga" 0;
|
||||||
|
font-feature-settings: "liga" 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body::before {
|
||||||
|
display: table;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body::after {
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:first-child {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body>*:last-child {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a:not([href]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .anchor {
|
||||||
|
float: left;
|
||||||
|
padding-right: 4px;
|
||||||
|
margin-left: -20px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .anchor:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p,
|
||||||
|
.markdown-body blockquote,
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol,
|
||||||
|
.markdown-body dl,
|
||||||
|
.markdown-body table,
|
||||||
|
.markdown-body pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
height: 0.25em;
|
||||||
|
padding: 0;
|
||||||
|
margin: 24px 0;
|
||||||
|
background-color: #e7e7e7;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote {
|
||||||
|
padding: 0 1em;
|
||||||
|
color: #777;
|
||||||
|
border-left: 0.25em solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote>:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body blockquote>:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body kbd {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 3px 5px;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 10px;
|
||||||
|
color: #555;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
border: solid 1px #ccc;
|
||||||
|
border-bottom-color: #bbb;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: inset 0 -1px 0 #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3,
|
||||||
|
.markdown-body h4,
|
||||||
|
.markdown-body h5,
|
||||||
|
.markdown-body h6 {
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 .octicon-link,
|
||||||
|
.markdown-body h2 .octicon-link,
|
||||||
|
.markdown-body h3 .octicon-link,
|
||||||
|
.markdown-body h4 .octicon-link,
|
||||||
|
.markdown-body h5 .octicon-link,
|
||||||
|
.markdown-body h6 .octicon-link {
|
||||||
|
color: #000;
|
||||||
|
vertical-align: middle;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1:hover .anchor,
|
||||||
|
.markdown-body h2:hover .anchor,
|
||||||
|
.markdown-body h3:hover .anchor,
|
||||||
|
.markdown-body h4:hover .anchor,
|
||||||
|
.markdown-body h5:hover .anchor,
|
||||||
|
.markdown-body h6:hover .anchor {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h2:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h3:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h4:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h5:hover .anchor .octicon-link,
|
||||||
|
.markdown-body h6:hover .anchor .octicon-link {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1 {
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
font-size: 2em;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h2 {
|
||||||
|
padding-bottom: 0.3em;
|
||||||
|
font-size: 1.5em;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h3 {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h4 {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h5 {
|
||||||
|
font-size: 0.875em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h6 {
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul,
|
||||||
|
.markdown-body ol {
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body ul ul,
|
||||||
|
.markdown-body ul ol,
|
||||||
|
.markdown-body ol ol,
|
||||||
|
.markdown-body ol ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li>p {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body li+li {
|
||||||
|
margin-top: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dt {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 16px;
|
||||||
|
font-size: 1em;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body dl dd {
|
||||||
|
padding: 0 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table th,
|
||||||
|
.markdown-body table td {
|
||||||
|
padding: 6px 13px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table tr {
|
||||||
|
background-color: #fff;
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body table tr:nth-child(2n) {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body img {
|
||||||
|
max-width: 100%;
|
||||||
|
box-sizing: content-box;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code {
|
||||||
|
padding: 0;
|
||||||
|
padding-top: 0.2em;
|
||||||
|
padding-bottom: 0.2em;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 85%;
|
||||||
|
background-color: rgba(0,0,0,0.04);
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body code::before,
|
||||||
|
.markdown-body code::after {
|
||||||
|
letter-spacing: -0.2em;
|
||||||
|
content: "\00a0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre {
|
||||||
|
word-wrap: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre>code {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
word-break: normal;
|
||||||
|
white-space: pre;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .highlight {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .highlight pre {
|
||||||
|
margin-bottom: 0;
|
||||||
|
word-break: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .highlight pre,
|
||||||
|
.markdown-body pre {
|
||||||
|
padding: 16px;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: 85%;
|
||||||
|
line-height: 1.45;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre code {
|
||||||
|
display: inline;
|
||||||
|
max-width: auto;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: visible;
|
||||||
|
line-height: inherit;
|
||||||
|
word-wrap: normal;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body pre code::before,
|
||||||
|
.markdown-body pre code::after {
|
||||||
|
content: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-0 {
|
||||||
|
padding-left: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-1 {
|
||||||
|
padding-left: 3px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-2 {
|
||||||
|
padding-left: 6px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-3 {
|
||||||
|
padding-left: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-4 {
|
||||||
|
padding-left: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-5 {
|
||||||
|
padding-left: 36px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .pl-6 {
|
||||||
|
padding-left: 48px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .full-commit .btn-outline:not(:disabled):hover {
|
||||||
|
color: #4078c0;
|
||||||
|
border: 1px solid #4078c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body kbd {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 3px 5px;
|
||||||
|
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
line-height: 10px;
|
||||||
|
color: #555;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
border: solid 1px #ccc;
|
||||||
|
border-bottom-color: #bbb;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: inset 0 -1px 0 #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body :checked+.radio-label {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
border-color: #4078c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item+.task-list-item {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body .task-list-item input {
|
||||||
|
margin: 0 0.2em 0.25em -1.6em;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body hr {
|
||||||
|
border-bottom-color: #eee;
|
||||||
|
}
|
30
HSLink-front/src/assets/css/public.css
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
html {
|
||||||
|
overflow-y: overlay;
|
||||||
|
}
|
||||||
|
.default-color{
|
||||||
|
color: #666!important;
|
||||||
|
}
|
||||||
|
.pointer{
|
||||||
|
cursor: pointer!important;
|
||||||
|
}
|
||||||
|
.blue{
|
||||||
|
color: #419EFF!important;
|
||||||
|
}
|
||||||
|
.special-font-blue:hover{
|
||||||
|
color: #419EFF!important;
|
||||||
|
}
|
||||||
|
.white{
|
||||||
|
color: #fff!important;
|
||||||
|
}
|
||||||
|
.text-underline:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.theme-font-blue{
|
||||||
|
color: #1B94D4;
|
||||||
|
}
|
||||||
|
.body-background{
|
||||||
|
background: #EEFCFE;
|
||||||
|
}
|
||||||
|
body{
|
||||||
|
padding-right:0 !important
|
||||||
|
}
|
436
HSLink-front/src/assets/css/reset.scss
Normal file
@ -0,0 +1,436 @@
|
|||||||
|
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Set default font family to sans-serif.
|
||||||
|
* 2. Prevent iOS and IE text size adjust after device orientation change,
|
||||||
|
* without disabling user zoom.
|
||||||
|
*/
|
||||||
|
|
||||||
|
*{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif; /* 1 */
|
||||||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default margin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HTML5 display definitions
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||||
|
* and Firefox.
|
||||||
|
* Correct `block` display not defined for `main` in IE 11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block; /* 1 */
|
||||||
|
vertical-align: baseline; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent modern browsers from displaying `audio` without controls.
|
||||||
|
* Remove excess height in iOS 5 devices.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||||
|
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background color from active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Improve readability of focused elements when they are also in an
|
||||||
|
* active/hover state.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in Safari and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address variable `h1` font-size and margin within `section` and `article`
|
||||||
|
* contexts in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent and variable font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove border when inside `a` element in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct overflow not hidden in IE 9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address margin not present in IE 8/9 and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address differences between Firefox and other browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contain overflow in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address odd `em`-unit font size rendering in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||||
|
* styling of `select`, unless a `border` property is set.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct color not being inherited.
|
||||||
|
* Known issue: affects color of disabled elements.
|
||||||
|
* 2. Correct font properties not being inherited.
|
||||||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
color: inherit; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
margin: 0; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||||
|
* All other form control elements do not inherit `text-transform` values.
|
||||||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||||
|
* Correct `select` style inheritance in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||||
|
* and `video` controls.
|
||||||
|
* 2. Correct inability to style clickable `input` types in iOS.
|
||||||
|
* 3. Improve usability and consistency of cursor style between image-type
|
||||||
|
* `input` and others.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
html input[type="button"], /* 1 */
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
-webkit-appearance: button; /* 2 */
|
||||||
|
cursor: pointer; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-set default cursor for disabled elements.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button[disabled],
|
||||||
|
html input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and border in Firefox 4+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||||
|
* the UA stylesheet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It's recommended that you don't attempt to style these elements.
|
||||||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||||
|
*
|
||||||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||||
|
* 2. Remove excess padding in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||||
|
* `font-size` values of the `input`, it causes the cursor style of the
|
||||||
|
* decrement button to change from `default` to `text`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-inner-spin-button,
|
||||||
|
input[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */
|
||||||
|
box-sizing: content-box; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||||
|
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||||
|
* padding (and `textfield` appearance).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define consistent border, margin, and padding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't inherit the `font-weight` (applied by a rule above).
|
||||||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||||
|
*/
|
||||||
|
|
||||||
|
optgroup {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove most spacing between table cells.
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.clearfix {
|
||||||
|
overflow: hidden;
|
||||||
|
_zoom: 1;
|
||||||
|
}
|
BIN
HSLink-front/src/assets/img/carousel/carousel1.jpg
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
HSLink-front/src/assets/img/carousel/carousel2.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
HSLink-front/src/assets/img/carousel/carousel3.jpg
Normal file
After Width: | Height: | Size: 207 KiB |
BIN
HSLink-front/src/assets/img/carousel/carousel4.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
HSLink-front/src/assets/img/dh-002.gif
Normal file
After Width: | Height: | Size: 155 B |
BIN
HSLink-front/src/assets/img/header-background.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
HSLink-front/src/assets/img/left-1.gif
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
HSLink-front/src/assets/img/login.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
HSLink-front/src/assets/img/no-data.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
HSLink-front/src/assets/img/qq.png
Normal file
After Width: | Height: | Size: 5.4 KiB |
BIN
HSLink-front/src/assets/img/register.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
HSLink-front/src/assets/img/title-background.jpg
Normal file
After Width: | Height: | Size: 835 B |
BIN
HSLink-front/src/assets/img/title.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
3
HSLink-front/src/assets/js/highlight.min.js
vendored
Normal file
130
HSLink-front/src/assets/js/rangeFn.js
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
// 获取光标位置
|
||||||
|
function getCursortPosition(textDom) {
|
||||||
|
var cursorPos = 0;
|
||||||
|
if (document.selection) {
|
||||||
|
// IE Support
|
||||||
|
textDom.focus();
|
||||||
|
var selectRange = document.selection.createRange();
|
||||||
|
selectRange.moveStart('character', -textDom.value.length);
|
||||||
|
cursorPos = selectRange.text.length;
|
||||||
|
} else if (textDom.selectionStart || textDom.selectionStart == '0') {
|
||||||
|
// Firefox support
|
||||||
|
cursorPos = textDom.selectionStart;
|
||||||
|
}
|
||||||
|
return cursorPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置光标位置
|
||||||
|
function setCaretPosition(textDom, pos) {
|
||||||
|
if (textDom.setSelectionRange) {
|
||||||
|
// IE Support
|
||||||
|
textDom.focus();
|
||||||
|
textDom.setSelectionRange(pos, pos);
|
||||||
|
} else if (textDom.createTextRange) {
|
||||||
|
// Firefox support
|
||||||
|
var range = textDom.createTextRange();
|
||||||
|
range.collapse(true);
|
||||||
|
range.moveEnd('character', pos);
|
||||||
|
range.moveStart('character', pos);
|
||||||
|
range.select();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 获取选中文字
|
||||||
|
function getSelectText() {
|
||||||
|
var userSelection, text;
|
||||||
|
if (window.getSelection) {
|
||||||
|
// Firefox support
|
||||||
|
userSelection = window.getSelection();
|
||||||
|
} else if (document.selection) {
|
||||||
|
// IE Support
|
||||||
|
userSelection = document.selection.createRange();
|
||||||
|
}
|
||||||
|
if (!(text = userSelection.text)) {
|
||||||
|
text = userSelection;
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 选中特定范围的文本
|
||||||
|
* 参数:
|
||||||
|
* textDom [JavaScript DOM String] 当前对象
|
||||||
|
* startPos [Int] 起始位置
|
||||||
|
* endPos [Int] 终点位置
|
||||||
|
*/
|
||||||
|
function setSelectText(textDom, startPos, endPos) {
|
||||||
|
var startPos = parseInt(startPos),
|
||||||
|
endPos = parseInt(endPos),
|
||||||
|
textLength = textDom.value.length;
|
||||||
|
if (textLength) {
|
||||||
|
if (!startPos) {
|
||||||
|
startPos = 0;
|
||||||
|
}
|
||||||
|
if (!endPos) {
|
||||||
|
endPos = textLength;
|
||||||
|
}
|
||||||
|
if (startPos > textLength) {
|
||||||
|
startPos = textLength;
|
||||||
|
}
|
||||||
|
if (endPos > textLength) {
|
||||||
|
endPos = textLength;
|
||||||
|
}
|
||||||
|
if (startPos < 0) {
|
||||||
|
startPos = textLength + startPos;
|
||||||
|
}
|
||||||
|
if (endPos < 0) {
|
||||||
|
endPos = textLength + endPos;
|
||||||
|
}
|
||||||
|
if (textDom.createTextRange) {
|
||||||
|
// IE Support
|
||||||
|
var range = textDom.createTextRange();
|
||||||
|
range.moveStart("character", -textLength);
|
||||||
|
range.moveEnd("character", -textLength);
|
||||||
|
range.moveStart("character", startPos);
|
||||||
|
range.moveEnd("character", endPos);
|
||||||
|
range.select();
|
||||||
|
} else {
|
||||||
|
// Firefox support
|
||||||
|
textDom.setSelectionRange(startPos, endPos);
|
||||||
|
textDom.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在光标后插入文本
|
||||||
|
* 参数:
|
||||||
|
* textDom [JavaScript DOM String] 当前对象
|
||||||
|
* value [String] 要插入的文本
|
||||||
|
*/
|
||||||
|
function insertAfterText(textDom, value) {
|
||||||
|
var selectRange;
|
||||||
|
if (document.selection) {
|
||||||
|
// IE Support
|
||||||
|
textDom.focus();
|
||||||
|
selectRange = document.selection.createRange();
|
||||||
|
selectRange.text = value;
|
||||||
|
textDom.focus();
|
||||||
|
} else if (textDom.selectionStart || textDom.selectionStart == '0') {
|
||||||
|
// Firefox support
|
||||||
|
var startPos = textDom.selectionStart;
|
||||||
|
var endPos = textDom.selectionEnd;
|
||||||
|
var scrollTop = textDom.scrollTop;
|
||||||
|
textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length);
|
||||||
|
textDom.focus();
|
||||||
|
textDom.selectionStart = startPos + value.length;
|
||||||
|
textDom.selectionEnd = startPos + value.length;
|
||||||
|
textDom.scrollTop = scrollTop;
|
||||||
|
} else {
|
||||||
|
textDom.value += value;
|
||||||
|
textDom.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getCursortPosition,
|
||||||
|
setCaretPosition,
|
||||||
|
getSelectText,
|
||||||
|
setSelectText,
|
||||||
|
insertAfterText
|
||||||
|
};
|
369
HSLink-front/src/components/Content.vue
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
<template>
|
||||||
|
<el-container>
|
||||||
|
<el-main>
|
||||||
|
<div class="content">
|
||||||
|
<div class="header">
|
||||||
|
<h1>{{all.title}}</h1>
|
||||||
|
<span>作者:</span>
|
||||||
|
<span class="blue pointer authorspan">{{all.author_name}}</span>
|
||||||
|
<span>发布时间:{{all.creat_time}}</span>
|
||||||
|
<div class="label">
|
||||||
|
<span>文章标签:</span>
|
||||||
|
<span class="special-text-yellow blue">{{all.label}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="middle">
|
||||||
|
<div class="editorContainer">
|
||||||
|
<markdown
|
||||||
|
:mdValuesP="msg.mdValue"
|
||||||
|
:fullPageStatusP="false"
|
||||||
|
:editStatusP="true"
|
||||||
|
:previewStatusP="true"
|
||||||
|
:navStatusP="true"
|
||||||
|
:icoStatusP="true"
|
||||||
|
@childevent="childEventHandler"
|
||||||
|
ref="markdown"
|
||||||
|
></markdown>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<el-row>
|
||||||
|
<el-button type="primary" icon="el-icon-thumb" plain>点赞</el-button>
|
||||||
|
<el-button type="primary" icon="el-icon-share" plain>分享</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="comment-area">
|
||||||
|
<el-button class="message" type="primary" @click="messages">留言</el-button>
|
||||||
|
<div class="comment-list">
|
||||||
|
<div class="comment-one" v-for="item in message">
|
||||||
|
<div class="comment-header">
|
||||||
|
<div class="header-photo">{{item.header_photo}}</div>
|
||||||
|
<div class="name">{{item.real_name}}</div>
|
||||||
|
<div class="time">{{item.create_time}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="comment-content">{{item.content}}</div>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-main>
|
||||||
|
<el-aside>
|
||||||
|
<div class="person-info">
|
||||||
|
<div class="info">
|
||||||
|
<div class="name">
|
||||||
|
<div class="header-photo">{{all.header_photo}}</div>
|
||||||
|
<div class="username">{{all.author_name}}</div>
|
||||||
|
<div class="go-homepage pointer">TA的个人主页 ></div>
|
||||||
|
</div>
|
||||||
|
<div class="grades">
|
||||||
|
<div class="grade">
|
||||||
|
<span>等级:</span>
|
||||||
|
<div class="number">
|
||||||
|
<span>博客</span>
|
||||||
|
<span>2</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="integral">
|
||||||
|
<span>积分: </span>
|
||||||
|
<span>{{all.integral}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="operation">
|
||||||
|
<el-button type="primary" plain>关 注</el-button>
|
||||||
|
<el-button type="primary" plain>私信</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footers></footers>
|
||||||
|
</el-aside>
|
||||||
|
</el-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import footers from './components/Footer'
|
||||||
|
import markdown from "./components/Mdeditor";
|
||||||
|
export default {
|
||||||
|
name: "Content",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
all: "",
|
||||||
|
message: '',
|
||||||
|
id:'',
|
||||||
|
msgShow:'我要显示的内容',
|
||||||
|
dilogStatus:false,
|
||||||
|
msg: {
|
||||||
|
mdValue:''
|
||||||
|
},
|
||||||
|
flag:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$ajax.post("/hs/getOneContent", {
|
||||||
|
id: sessionStorage.getItem("noticeId")
|
||||||
|
}, r => {
|
||||||
|
this.all = r.content;
|
||||||
|
this.message = r.message;
|
||||||
|
this.msg.mdValue = r.content.content;
|
||||||
|
this.all.header_photo = this.all.author_name.substring(0, 1)
|
||||||
|
for (let i = 0; i < this.message.length; i++) {
|
||||||
|
this.message[i].header_photo = this.message[i].real_name.substring(0, 1)
|
||||||
|
}
|
||||||
|
setTimeout(()=>{this.$refs.markdown.addLine()},1)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
messages() {
|
||||||
|
this.$prompt('请输入留言', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
inputPattern: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,
|
||||||
|
inputErrorMessage: '邮箱格式不正确'
|
||||||
|
}).then(({ value }) => {
|
||||||
|
let day2 = new Date();
|
||||||
|
day2.setTime(day2.getTime());
|
||||||
|
let date = day2.getFullYear()+"-" + (day2.getMonth()+1) + "-" + day2.getDate()+" "+day2.getHours()+"-"+day2.getMinutes()
|
||||||
|
this.$ajax.post("/hs/addMessage",{noticeId:sessionStorage.getItem("noticeId"),content:value,
|
||||||
|
createTime:date,userId:JSON.parse(sessionStorage.getItem("userInfo")).user_id},r=>{
|
||||||
|
if (r == "1") {
|
||||||
|
this.$message({
|
||||||
|
type: 'success',
|
||||||
|
message: '留言成功'
|
||||||
|
});
|
||||||
|
this.$ajax.post("/hs/getOneContent", {
|
||||||
|
id: sessionStorage.getItem("noticeId")
|
||||||
|
}, r => {this.message = r.message;})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
this.$message({
|
||||||
|
type: 'info',
|
||||||
|
message: '取消输入'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
childEventHandler:function(res){
|
||||||
|
// res会传回一个data,包含属性mdValue和htmlValue,具体含义请自行翻译
|
||||||
|
this.msg=res;
|
||||||
|
},
|
||||||
|
closeMaskFn:function(){
|
||||||
|
this.msgShow='';
|
||||||
|
this.dilogStatus=false;
|
||||||
|
},
|
||||||
|
handleChange(val) {
|
||||||
|
console.log(val);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
footers,
|
||||||
|
markdown
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.message{
|
||||||
|
margin: 1rem 1rem 0 0;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.mdContainer >>> .editContainer,.mdContainer >>> .navContainer{
|
||||||
|
display: none!important;
|
||||||
|
}
|
||||||
|
.list{
|
||||||
|
.title{
|
||||||
|
padding-left: 1rem;
|
||||||
|
height: 3rem;
|
||||||
|
line-height: 3rem;
|
||||||
|
background: #999;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
background: #fff;
|
||||||
|
ul{
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
li{
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aside-right{
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
.authorspan{
|
||||||
|
/*float: right;*/
|
||||||
|
/*margin-left: 2.5rem;*/
|
||||||
|
}
|
||||||
|
.navContainer{
|
||||||
|
display: none!important;
|
||||||
|
}
|
||||||
|
.comment-content{
|
||||||
|
margin: 0.5rem 0 0 2rem;
|
||||||
|
}
|
||||||
|
.reply{
|
||||||
|
display: inline-block;
|
||||||
|
float: right;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
.comment-one{
|
||||||
|
padding: 1rem 1rem 0 1rem;
|
||||||
|
}
|
||||||
|
.comment-header{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.comment-header .name{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.comment-header .name, .comment-header .time{
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
.comment-one div{
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
.comment-one .header-photo{
|
||||||
|
height: 1.5rem;
|
||||||
|
width: 1.5rem;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #3399ea;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
float: left;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
.comment-area{
|
||||||
|
margin-top: 1rem;
|
||||||
|
background: #fff;
|
||||||
|
min-height: 4.5rem;
|
||||||
|
}
|
||||||
|
.achievement{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-left: 3.5rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
.content .middle{
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
.type span:nth-child(2){
|
||||||
|
background: #F5F6F7;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
.label span:nth-child(n+2){
|
||||||
|
background: #F5F6F7;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
.original1{
|
||||||
|
position: absolute;
|
||||||
|
color: #ca0c16;
|
||||||
|
background: #f9ecec;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
.reprint{
|
||||||
|
color: #74cf59;
|
||||||
|
background: #eaf9e3;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
.header span:nth-child(-n+4){
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
padding: 1rem;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.content .header .label{
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
.operation .el-button:nth-child(1){
|
||||||
|
margin-left: 2rem;
|
||||||
|
}
|
||||||
|
.operation .el-button:nth-child(2){
|
||||||
|
margin-right: 2rem;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.integral span:nth-child(2),.ranking span:nth-child(2){
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.number{
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
position: absolute;
|
||||||
|
margin-left: 2.6rem;
|
||||||
|
margin-top: -1.1rem!important;
|
||||||
|
}
|
||||||
|
.number span:nth-child(1){
|
||||||
|
background: #9DC75F;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.number span:nth-child(2){
|
||||||
|
background: #2D5315;
|
||||||
|
float: left;
|
||||||
|
min-width: 1rem;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
}
|
||||||
|
.grades{
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
.grades div{
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
.read{
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
}
|
||||||
|
.read div{
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
.read div p:nth-child(2){
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.person-info{
|
||||||
|
background: #fff;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
.username{
|
||||||
|
margin-left: 3.5rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
.go-homepage{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #3399ea;
|
||||||
|
margin-left: 3.5rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
.header-photo{
|
||||||
|
height: 3rem;
|
||||||
|
width: 3rem;
|
||||||
|
line-height: 3rem;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #3399ea;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
float: left;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-right: 2rem;
|
||||||
|
}
|
||||||
|
.el-container{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.el-aside{
|
||||||
|
/*margin-top: 1rem;*/
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
padding: 0;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
.read{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
</style>
|
60
HSLink-front/src/components/Help.vue
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<template>
|
||||||
|
<el-main class="body-background">
|
||||||
|
<div class="left">
|
||||||
|
<div class="top">
|
||||||
|
<img src="../assets/img/left-1.gif" height="83" width="142"/>
|
||||||
|
</div>
|
||||||
|
<div class="bottom">
|
||||||
|
<el-menu
|
||||||
|
default-active="2"
|
||||||
|
class="el-menu-vertical-demo">
|
||||||
|
<el-menu-item index="1">首页</el-menu-item>
|
||||||
|
<el-menu-item index="2">校园通知</el-menu-item>
|
||||||
|
<el-menu-item index="3">家长意见</el-menu-item>
|
||||||
|
<el-menu-item index="4">学生想法</el-menu-item>
|
||||||
|
<el-menu-item index="5">我的班级</el-menu-item>
|
||||||
|
<el-menu-item index="6">常见问题</el-menu-item>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div>请联系管理员更新内容</div>
|
||||||
|
<div>管理员联系方式:15006732580</div>
|
||||||
|
<div>管理员QQ邮箱:617594538@qq.com</div>
|
||||||
|
</div>
|
||||||
|
</el-main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Help"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.right{
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
width: calc(85% - 1rem);
|
||||||
|
margin-left: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
.el-menu-item{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.left{
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
width: 15%;
|
||||||
|
}
|
||||||
|
.left img{
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
padding: 1rem 0;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,9 +1,377 @@
|
|||||||
<template>
|
<template>
|
||||||
<p>hhh</p>
|
<el-container>
|
||||||
|
<div id="top">
|
||||||
|
<div class="school-dynamic">
|
||||||
|
<div id="title">
|
||||||
|
校<br>园<br>动<br>态
|
||||||
|
</div>
|
||||||
|
<el-carousel indicator-position="outside">
|
||||||
|
<el-carousel-item>
|
||||||
|
<img src="../assets/img/carousel/carousel1.jpg" height="100%" width="100%"/>
|
||||||
|
</el-carousel-item>
|
||||||
|
<el-carousel-item>
|
||||||
|
<img src="../assets/img/carousel/carousel2.jpg" height="100%" width="100%"/>
|
||||||
|
</el-carousel-item>
|
||||||
|
<el-carousel-item>
|
||||||
|
<img src="../assets/img/carousel/carousel3.jpg" height="100%" width="100%"/>
|
||||||
|
</el-carousel-item>
|
||||||
|
<el-carousel-item>
|
||||||
|
<img src="../assets/img/carousel/carousel4.jpg" height="100%" width="100%"/>
|
||||||
|
</el-carousel-item>
|
||||||
|
</el-carousel>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="bottom">
|
||||||
|
<div class="left">
|
||||||
|
<el-tabs v-model="activeName" @tab-click="">
|
||||||
|
<el-tab-pane label="校园通知" name="first">
|
||||||
|
<div class="newest-notice module">
|
||||||
|
<div class="title">
|
||||||
|
<i class="el-icon-chat-dot-square"></i> 最 新 通 知
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="one theme-font-blue" v-for="item in newestNotice" :data-id="item.id" >
|
||||||
|
<div class="type">
|
||||||
|
[{{item.label}}]
|
||||||
|
</div>
|
||||||
|
<div class="text" @click="getContent(item.id)">{{item.title}}</div>
|
||||||
|
<div class="release">{{item.real_name}}</div>
|
||||||
|
<div class="release-time">{{item.release_time}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="家长意见" name="second">
|
||||||
|
<div class="good-advice module">
|
||||||
|
<div class="title">
|
||||||
|
<i class="el-icon-chat-line-square"></i> 优 秀 建 议
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="one theme-font-blue" v-for="item in goodAdvice" :data-id="item.id">
|
||||||
|
<div class="type">
|
||||||
|
[{{item.label}}]
|
||||||
|
</div>
|
||||||
|
<div class="text">{{item.title}}</div>
|
||||||
|
<div class="release">{{item.real_name}}</div>
|
||||||
|
<div class="release-time">{{item.release_time}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="学生想法" name="third">
|
||||||
|
<div class="magical-thinking module">
|
||||||
|
<div class="title">
|
||||||
|
<i class="el-icon-chat-square"></i> 神 奇 想 法
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="one theme-font-blue" v-for="item in magicalThinking" :data-id="item.id">
|
||||||
|
<div class="type">
|
||||||
|
[{{item.label}}]
|
||||||
|
</div>
|
||||||
|
<div class="text">{{item.title}}</div>
|
||||||
|
<div class="release">{{item.real_name}}</div>
|
||||||
|
<div class="release-time">{{item.release_time}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="prominent-teacher">
|
||||||
|
<div class="header">
|
||||||
|
<i class="el-icon-trophy"></i>
|
||||||
|
优 秀 教 师
|
||||||
|
</div>
|
||||||
|
<div class="one" v-for="item in prominentTeacher">
|
||||||
|
<div class="name theme-font-blue">{{item.name}}老师</div>
|
||||||
|
<!-- <div class="subject theme-font-blue">数学</div>-->
|
||||||
|
<!-- <div class="grade theme-font-blue">2016届</div>-->
|
||||||
|
<div class="class theme-font-blue">{{item.class}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="merit-student">
|
||||||
|
<div class="header">
|
||||||
|
<i class="el-icon-trophy-1"></i>
|
||||||
|
三 好 学 生
|
||||||
|
</div>
|
||||||
|
<div class="one" v-for="item in meritStudent">
|
||||||
|
<div class="name theme-font-blue">{{item.name}}同学</div>
|
||||||
|
<!-- <div class="grade theme-font-blue">2016届</div>-->
|
||||||
|
<div class="subject theme-font-blue">{{item.class}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Hompage",
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
newestNotice: '',
|
||||||
|
goodAdvice: '',
|
||||||
|
magicalThinking: '',
|
||||||
|
activeName: 'first',
|
||||||
|
prominentTeacher: [
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '张伟',
|
||||||
|
class: '2016届物联网一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '吕小布',
|
||||||
|
class: '2016届物联网二班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '李星',
|
||||||
|
class: '大数据一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '吴达',
|
||||||
|
class: '软件外包一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '田七',
|
||||||
|
class: '机算计科学与技术一班',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
meritStudent: [
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '王阔',
|
||||||
|
class: '2016届物联网一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '于洋',
|
||||||
|
class: '2016届生物医学1班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '冯宇',
|
||||||
|
class: '2016届大数据一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '刘强',
|
||||||
|
class: '2016届软件外包一班',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '',
|
||||||
|
name: '张智超',
|
||||||
|
class: '2016届护理一班',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$ajax.post("/hs/getAllContent",{},r=>{
|
||||||
|
this.newestNotice = r.schoolNoticeList.slice(0,12);
|
||||||
|
this.goodAdvice = r.parentAdvice.slice(0,12);
|
||||||
|
this.magicalThinking = r.studentThinking.slice(0,12);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getContent(id) {
|
||||||
|
this.$router.push({name: 'content'});
|
||||||
|
sessionStorage.setItem("noticeId",id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style scoped>
|
||||||
|
.release-time{
|
||||||
|
color: #999;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
#top{
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding-bottom: 4rem;
|
||||||
|
}
|
||||||
|
#bottom{
|
||||||
|
display: flex;
|
||||||
|
background: #fff;
|
||||||
|
margin-top: 1rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0 0 0 1rem;
|
||||||
|
}
|
||||||
|
#title{
|
||||||
|
border-left: 1px solid #419EFF;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.merit-student, .prominent-teacher{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
.merit-student{
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
margin-top: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 9.5rem;
|
||||||
|
}
|
||||||
|
.merit-student .header{
|
||||||
|
cursor: default;
|
||||||
|
height: 2rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
padding: 0 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1B94D4;
|
||||||
|
background: url("../assets/img/title-background.jpg");
|
||||||
|
|
||||||
|
}
|
||||||
|
.merit-student .one{
|
||||||
|
display: flex;
|
||||||
|
height: 1.5rem;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
.merit-student .one div:nth-child(1){
|
||||||
|
flex: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.merit-student .one div:nth-child(2){
|
||||||
|
flex: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.prominent-teacher .one{
|
||||||
|
display: flex;
|
||||||
|
height: 1.5rem;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
padding: 0 2rem;
|
||||||
|
}
|
||||||
|
.prominent-teacher .one .subject{
|
||||||
|
flex: 1!important;
|
||||||
|
}
|
||||||
|
.prominent-teacher .one div:nth-child(1){
|
||||||
|
flex: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.prominent-teacher .one div:nth-child(2){
|
||||||
|
flex: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.prominent-teacher{
|
||||||
|
margin-top: 2.4rem;
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
width: 100%;
|
||||||
|
height: 9.5rem;
|
||||||
|
}
|
||||||
|
.prominent-teacher .header{
|
||||||
|
cursor: default;
|
||||||
|
height: 2rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
padding: 0 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1B94D4;
|
||||||
|
background: url("../assets/img/title-background.jpg");
|
||||||
|
}
|
||||||
|
.left{
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
.right{
|
||||||
|
width: 30%;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
.one div{
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.one div:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.content .one{
|
||||||
|
display: flex;
|
||||||
|
padding: 0 1rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
.one .type{
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.one .text{
|
||||||
|
flex: 4;
|
||||||
|
}
|
||||||
|
.one .release{
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.one .release-time{
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.module{
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
width: calc(100% - 1rem);
|
||||||
|
height: 20.2rem;
|
||||||
|
}
|
||||||
|
.module .title{
|
||||||
|
cursor: default;
|
||||||
|
height: 2rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
padding: 0 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1B94D4;
|
||||||
|
background: url("../assets/img/title-background.jpg");
|
||||||
|
}
|
||||||
|
.school-dynamic{
|
||||||
|
display: flex;
|
||||||
|
width: 80%;
|
||||||
|
padding: 0 10%;
|
||||||
|
height: 24rem;
|
||||||
|
}
|
||||||
|
#title{
|
||||||
|
color: #419EFF;
|
||||||
|
padding: 1rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-family: 楷体;
|
||||||
|
}
|
||||||
|
.el-carousel >>> .el-carousel__container{
|
||||||
|
height: 90% !important;
|
||||||
|
}
|
||||||
|
.el-carousel >>> .el-carousel__indicators{
|
||||||
|
height: 10%!important;
|
||||||
|
}
|
||||||
|
.el-carousel{
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
width: calc(100% - 3.5rem);
|
||||||
|
height: 100%;
|
||||||
|
border: 1px solid #419EFF;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.el-container{
|
||||||
|
/*padding: 0 20%;*/
|
||||||
|
background: #EEFCFE;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
207
HSLink-front/src/components/Index.vue
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<template>
|
||||||
|
<el-container>
|
||||||
|
<el-header>
|
||||||
|
<div id="header">
|
||||||
|
<div class="date default-color">{{date}}</div>
|
||||||
|
<div class="function">
|
||||||
|
<span class="pointer special-font-blue " v-if="!isLogin" @click="login">登录</span>
|
||||||
|
<span class="pointer special-font-blue " v-if="isLogin">欢迎:{{userInfo.real_name}}({{userInfo.user_type}})</span>
|
||||||
|
<span class="pointer special-font-blue " v-if="isLogin" @click="cancellation">注销</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer special-font-blue" @click="service">客服中心</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer special-font-blue" @click="opinion">用户意见</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer special-font-blue" v-if="!isLogin" @click="register">免费注册</span>
|
||||||
|
<el-divider direction="vertical" v-if="!isLogin"></el-divider>
|
||||||
|
<span class="pointer special-font-blue" v-if="isLogin" @click="forget">忘记密码</span>
|
||||||
|
<el-divider direction="vertical" v-if="isLogin"></el-divider>
|
||||||
|
<span class="pointer special-font-blue" @click="help">帮助中心</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-header>
|
||||||
|
<el-container class="second">
|
||||||
|
<el-aside>
|
||||||
|
<el-menu
|
||||||
|
default-active="1"
|
||||||
|
class="el-menu-vertical-demo">
|
||||||
|
<el-menu-item index="1" @click="goHomepage">首页</el-menu-item>
|
||||||
|
<el-menu-item index="2" @click="goSchoolNotice">校园通知</el-menu-item>
|
||||||
|
<el-menu-item index="3" @click="goMyClass">我的班级</el-menu-item>
|
||||||
|
<el-menu-item index="4" @click="goParentsOpinion">家长意见</el-menu-item>
|
||||||
|
<el-menu-item index="5" @click="goStudentThought">学生想法</el-menu-item>
|
||||||
|
<el-menu-item index="6" @click="goMore">更多···</el-menu-item>
|
||||||
|
</el-menu>
|
||||||
|
</el-aside>
|
||||||
|
<el-main>
|
||||||
|
<!--<div id="tab">
|
||||||
|
<span class="pointer white text-underline" @click="goHomepage">首页</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer white text-underline" @click="goSchoolNotice">校园通知</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer white text-underline" @click="goParentsOpinion">家长建议</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer white text-underline" @click="goStudentThought">学生想法</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer white text-underline" @click="goMyClass">我的班级</span>
|
||||||
|
<el-divider direction="vertical"></el-divider>
|
||||||
|
<span class="pointer white text-underline" @click="goMore">更多···</span>
|
||||||
|
<span class="pointer white text-underline user-info" v-if="!isLogin" @click="login">登录</span>
|
||||||
|
<span class="pointer white text-underline user-cancellation" v-if="isLogin" @click="cancellation">注销</span>
|
||||||
|
<span class="pointer white text-underline user-info" v-if="isLogin">欢迎:{{userInfo.real_name}}({{userInfo.user_type}})</span>
|
||||||
|
</div>-->
|
||||||
|
<router-view></router-view>
|
||||||
|
</el-main>
|
||||||
|
</el-container>
|
||||||
|
</el-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
isCollapse: true,
|
||||||
|
isLogin: false,
|
||||||
|
date: '',
|
||||||
|
userInfo: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
let userInfo = JSON.parse(sessionStorage.getItem("userInfo"));
|
||||||
|
this.userInfo = userInfo;
|
||||||
|
if (userInfo != '' || userInfo != null) {
|
||||||
|
this.isLogin = true;
|
||||||
|
}
|
||||||
|
setInterval(()=>{
|
||||||
|
let day2 = new Date();
|
||||||
|
day2.setTime(day2.getTime());
|
||||||
|
this.date = day2.getFullYear()+"年" + (day2.getMonth()+1) + "月" + day2.getDate()+'日 星期'+"日一二三四五六".charAt(new Date().getDay())
|
||||||
|
+" | "+day2.getHours()+"时"+day2.getMinutes()+"分"+day2.getSeconds()+"秒";},1000)
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
goMore() {
|
||||||
|
this.$message({
|
||||||
|
message:"期待更多内容",
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
goMyClass() {
|
||||||
|
this.$router.push({name: "myclass"})
|
||||||
|
},
|
||||||
|
goStudentThought() {
|
||||||
|
this.$router.push({name: "studentthought"})
|
||||||
|
},
|
||||||
|
goParentsOpinion() {
|
||||||
|
this.$router.push({name: "parentsproposal"})
|
||||||
|
},
|
||||||
|
goSchoolNotice() {
|
||||||
|
this.$router.push({name: "schoolnotice"})
|
||||||
|
},
|
||||||
|
goHomepage() {
|
||||||
|
this.$router.push({name: "homepage"})
|
||||||
|
},
|
||||||
|
help() {
|
||||||
|
this.$router.push({
|
||||||
|
name: "help",
|
||||||
|
})
|
||||||
|
},
|
||||||
|
forget() {
|
||||||
|
this.$message("请联系管理员重置密码")
|
||||||
|
},
|
||||||
|
register() {
|
||||||
|
this.$router.push({
|
||||||
|
name: "homepage",
|
||||||
|
params: {
|
||||||
|
type: "register"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
opinion() {
|
||||||
|
this.$message('用户意见请发邮箱至:617594538@qq.com')
|
||||||
|
},
|
||||||
|
service() {
|
||||||
|
this.$message('客服中心请拨打:15006732580')
|
||||||
|
},
|
||||||
|
login() {
|
||||||
|
this.$router.push({
|
||||||
|
name: "login"
|
||||||
|
})
|
||||||
|
},
|
||||||
|
cancellation() {
|
||||||
|
this.$confirm('确认退出?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
sessionStorage.setItem("userInfo","");
|
||||||
|
this.$router.push({
|
||||||
|
name: "login"
|
||||||
|
})
|
||||||
|
// location.reload()
|
||||||
|
}).catch(() => {
|
||||||
|
this.$message({
|
||||||
|
type: 'info',
|
||||||
|
message: '已取消退出'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-menu{
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.el-aside{
|
||||||
|
background: #FFF;
|
||||||
|
overflow-x: hidden;
|
||||||
|
width: 10rem!important;
|
||||||
|
margin-top: 1rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.el-radio-group{
|
||||||
|
margin-bottom: 0!important;
|
||||||
|
}
|
||||||
|
.second{
|
||||||
|
background: #EEFCFE;
|
||||||
|
padding: 0 20%;
|
||||||
|
}
|
||||||
|
.user-cancellation{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.user-info{
|
||||||
|
float: right;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
#tab{
|
||||||
|
background-image: url("../assets/img/dh-002.gif");
|
||||||
|
padding: 0 20%;
|
||||||
|
height: 2rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
#header{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding: 0.2rem 0 0.4rem 0;
|
||||||
|
}
|
||||||
|
#header .date{
|
||||||
|
margin-left: 20%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
#header .function{
|
||||||
|
float: right;
|
||||||
|
margin-right: 20%;
|
||||||
|
}
|
||||||
|
.el-header{
|
||||||
|
height: 7.8rem!important;
|
||||||
|
background-image: url("../assets/img/title.jpg");
|
||||||
|
background-size: 100%;
|
||||||
|
background-position: 0 2rem;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,33 +1,300 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="login">
|
<el-container>
|
||||||
<el-span>账号:</el-span>
|
<el-main>
|
||||||
<el-col :span="8">
|
<div class="login-box" v-loading="loading">
|
||||||
<el-input placeholder = "请输入用户名"></el-input>
|
<el-tabs type="border-card" v-model="defaultTabs">
|
||||||
</el-col>
|
<el-tab-pane name="login">
|
||||||
<el-span>密码:</el-span>
|
<span slot="label"><i class="el-icon-user"></i> 登录</span>
|
||||||
<el-col :span="8">
|
<el-form :model="form"
|
||||||
<el-input placeholder = "请输入密码" show-password></el-input>
|
:rules="rules"
|
||||||
</el-col>
|
ref="form"
|
||||||
<el-button type = "text">登录</el-button>
|
label-width="80px"
|
||||||
<router-view/>
|
class="demo-ruleForm"
|
||||||
</div>
|
close-on-click-modal=false
|
||||||
|
label-position="left">
|
||||||
|
<el-form-item label="角色" prop="role">
|
||||||
|
<el-select v-model="form.role" placeholder="请选择">
|
||||||
|
<el-option value="学生"></el-option>
|
||||||
|
<el-option value="家长"></el-option>
|
||||||
|
<el-option value="教师"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="账号" prop="username">
|
||||||
|
<el-select
|
||||||
|
v-if="isSelect"
|
||||||
|
v-model="form.username"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
default-first-option
|
||||||
|
placeholder="请输入手机号或姓名"
|
||||||
|
@change="selectUsername">
|
||||||
|
<el-option
|
||||||
|
v-for="(item,index) in rememberList"
|
||||||
|
:key="item.username"
|
||||||
|
:label="item.username"
|
||||||
|
:value="item.username">
|
||||||
|
<span style="float: left">{{ item.username}}</span>
|
||||||
|
<span style="float: right; color: #8492a6; font-size: 13px" @click="deleteUser(item.username,index)"><i class="el-icon-circle-close"></i></span>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<!-- <el-input v-model="form.username" type="text" placeholder="请输入手机号或姓名"></el-input>-->
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="password">
|
||||||
|
<el-input v-model="form.password" type="password" placeholder="请输入密码" @keyup.enter.native="login"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div id="forget" @click="forget">忘记密码</div>
|
||||||
|
<el-checkbox class="remember-password" v-model="rememberPassword">记住密码</el-checkbox>
|
||||||
|
<el-button type="primary" @click="login">登 录</el-button>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane name="register">
|
||||||
|
<span slot="label"><i class="el-icon-circle-plus-outline"></i>注册</span>
|
||||||
|
<el-form :model="form1"
|
||||||
|
:rules="rules1"
|
||||||
|
ref="form1"
|
||||||
|
label-width="80px"
|
||||||
|
class="demo-ruleForm"
|
||||||
|
close-on-click-modal=false
|
||||||
|
label-position="left">
|
||||||
|
<el-form-item label="角色" prop="role">
|
||||||
|
<el-select v-model="form1.role" placeholder="请选择">
|
||||||
|
<!-- <el-option value="学生"></el-option>-->
|
||||||
|
<el-option value="家长"></el-option>
|
||||||
|
<el-option value="教师"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="姓名" prop="realName">
|
||||||
|
<el-input v-model="form1.realName" type="text"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号" prop="mobile">
|
||||||
|
<el-input v-model="form1.mobile" type="text"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="password">
|
||||||
|
<el-input v-model="form1.password" type="password"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="确认密码" prop="againPassword" @keyup.enter.native="register">
|
||||||
|
<el-input v-model="form1.againPassword" type="password"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-button type="primary" @click="register">提 交</el-button>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</el-main>
|
||||||
|
</el-container>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default{
|
export default{
|
||||||
|
data() {
|
||||||
|
let againPassword = (rule, value, callback) => {
|
||||||
|
if (value === '') {
|
||||||
|
callback(new Error('请再次输入密码'));
|
||||||
|
} else if (value !== this.form1.password) {
|
||||||
|
callback(new Error('两次输入密码不一致!'));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let type;
|
||||||
|
if (this.$route.params.type == "login" || this.$route.params.type == "register") {
|
||||||
|
type = this.$route.params.type
|
||||||
|
} else {
|
||||||
|
type = "login"
|
||||||
|
}
|
||||||
|
return{
|
||||||
|
isSelect: true,
|
||||||
|
rememberList: JSON.parse(sessionStorage.getItem("rememberList")),
|
||||||
|
rememberPassword: false,
|
||||||
|
defaultTabs: type,
|
||||||
|
loading: false,
|
||||||
|
form: {
|
||||||
|
role: '',
|
||||||
|
username: '',
|
||||||
|
password: '',
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
role: [
|
||||||
|
{ required: true, message: '请选择身份', trigger: 'blur' },
|
||||||
|
{ min: 2, max: 2, message: '请选择身份', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
username: [
|
||||||
|
{ required: true, message: '请输入用户名', trigger: 'blur' },
|
||||||
|
{ min: 6, max: 11, message: '长度在 6 到 11 个字符', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
password: [
|
||||||
|
{ required: true, message: '请输入密码', trigger: 'blur' },
|
||||||
|
{ min: 6, max: 8, message: '长度在 6 到 8 个字符', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
},
|
||||||
|
form1: {
|
||||||
|
role: '',
|
||||||
|
realName: '',
|
||||||
|
mobile: '',
|
||||||
|
username: '',
|
||||||
|
password: '',
|
||||||
|
againPassword: '',
|
||||||
|
},
|
||||||
|
rules1: {
|
||||||
|
role: [
|
||||||
|
{ required: true, message: '请选择身份', trigger: 'blur' },
|
||||||
|
{ min: 2, max: 2, message: '请选择身份', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
realName: [
|
||||||
|
{ required: true, message: '请输入真实姓名', trigger: 'blur' },
|
||||||
|
{ min: 2, max: 10, message: '请输入正确的姓名', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
mobile: [
|
||||||
|
{ required: true, message: '请输入手机号', trigger: 'blur' },
|
||||||
|
{ min: 11, max: 11, message: '手机号格式不正确', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
password: [
|
||||||
|
{ required: true, message: '请输入密码', trigger: 'blur' },
|
||||||
|
{ min: 6, max: 8, message: '长度在 6 到 8 个字符', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
againPassword: [
|
||||||
|
{ required: true, message: '请确认密码', trigger: 'blur' },
|
||||||
|
{ validator:againPassword, trigger: 'blur'},
|
||||||
|
],
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
methods:{
|
methods:{
|
||||||
change() {
|
deleteUser(username,index) {
|
||||||
// console.log(1)
|
if (this.rememberList != null) {
|
||||||
// this.$router.push({
|
this.rememberList.forEach((item)=>{
|
||||||
// name: 'box1',
|
if (item.username == username) {
|
||||||
// params:{
|
this.rememberList.splice(index,1);
|
||||||
// id:1
|
}
|
||||||
// }
|
})
|
||||||
// })
|
}
|
||||||
|
sessionStorage.setItem("rememberList",JSON.stringify(this.rememberList));
|
||||||
|
this.form.role = '';
|
||||||
|
this.form.password = '';
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.form.username = '';
|
||||||
|
},10)
|
||||||
|
console.log(this.form.username)
|
||||||
|
},
|
||||||
|
selectUsername(event) {
|
||||||
|
if (this.rememberList != null) {
|
||||||
|
this.rememberList.forEach((item)=>{
|
||||||
|
if (item.username == event) {
|
||||||
|
this.form = item
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.isSelect = false
|
||||||
|
this.isSelect = true
|
||||||
|
},
|
||||||
|
forget() {
|
||||||
|
this.$message("请联系管理员重置密码")
|
||||||
|
},
|
||||||
|
login() {
|
||||||
|
this.loading = true;
|
||||||
|
this.$ajax.post("/hs/login",{role:this.form.role,username: this.form.username,password:this.form.password},r=>{
|
||||||
|
if (r == '' || r == null) {
|
||||||
|
this.$message.error('用户名和密码不匹配');
|
||||||
|
this.loading = false;
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "登录成功",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
if (this.rememberPassword == true) {
|
||||||
|
let one = {
|
||||||
|
role: this.form.role,
|
||||||
|
username: this.form.username,
|
||||||
|
password: this.form.password,
|
||||||
|
}
|
||||||
|
if (this.rememberList != null) {
|
||||||
|
let flag = false;
|
||||||
|
this.rememberList.forEach((item)=>{
|
||||||
|
if (item.username == one.username) {
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (flag == false) {
|
||||||
|
this.rememberList.push(one)
|
||||||
|
sessionStorage.setItem("rememberList",JSON.stringify(this.rememberList));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let rememberList = [];
|
||||||
|
rememberList.push(one)
|
||||||
|
sessionStorage.setItem("rememberList",JSON.stringify(rememberList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.loading = false;
|
||||||
|
this.$router.push({
|
||||||
|
name: "homepage"
|
||||||
|
})
|
||||||
|
sessionStorage.setItem("userInfo",JSON.stringify(r));
|
||||||
|
// location.reload();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
register() {
|
||||||
|
this.$ajax.post("/hs/register",{type:this.form1.role,realname:this.form1.realName,mobile:this.form1.mobile,password:this.form1.password},r=>{
|
||||||
|
console.log(r)
|
||||||
|
if (r == '0') {
|
||||||
|
this.$message.error('该手机号已被注册');
|
||||||
|
this.form1.password = '';
|
||||||
|
this.form1.againPassword = '';
|
||||||
|
} else {
|
||||||
|
this.$message({
|
||||||
|
message: "注册成功",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
|
this.form.role = this.form1.role;
|
||||||
|
this.form.username = this.form1.realName;
|
||||||
|
this.form.password = this.form1.password;
|
||||||
|
this.form1.role = '';
|
||||||
|
this.form1.realName = '';
|
||||||
|
this.form1.mobile = '';
|
||||||
|
this.form1.password = '';
|
||||||
|
this.form1.againPassword = '';
|
||||||
|
this.defaultTabs = 'login';
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style scoped>
|
||||||
|
.remember-password{
|
||||||
|
float: right;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
#forget{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
float: right;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
#forget:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #419EFF;
|
||||||
|
}
|
||||||
|
.login-box{
|
||||||
|
width: 30rem;
|
||||||
|
/*height: 20rem;*/
|
||||||
|
margin: 8rem auto;
|
||||||
|
/*color: #FAFAFA;*/
|
||||||
|
/*border-radius: 5px;*/
|
||||||
|
/*border: 1px solid #419EFF;*/
|
||||||
|
/*padding: 2rem;*/
|
||||||
|
}
|
||||||
|
.el-button--primary{
|
||||||
|
width: 6rem;
|
||||||
|
margin-left: 11rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
background: #EEFCFE;
|
||||||
|
height: 55rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
19
HSLink-front/src/components/MyClass.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<el-main>
|
||||||
|
<h1>我的班级</h1>
|
||||||
|
</el-main>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "MyClass"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-main{
|
||||||
|
padding: 0;
|
||||||
|
background: #EEFCFE;
|
||||||
|
}
|
||||||
|
</style>
|
19
HSLink-front/src/components/ParentsProposal.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<el-main>
|
||||||
|
<h1>家长意见</h1>
|
||||||
|
</el-main>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "ParentsOpinion"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-main{
|
||||||
|
padding: 0;
|
||||||
|
background: #EEFCFE;
|
||||||
|
}
|
||||||
|
</style>
|
61
HSLink-front/src/components/SchoolNotice.vue
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<template>
|
||||||
|
<el-main>
|
||||||
|
<div class="search">
|
||||||
|
<el-input class="searchinp" v-model="condition" placeholder="请输入内容"></el-input>
|
||||||
|
<el-button type="primary" class="searchbtn">搜索</el-button>
|
||||||
|
</div>
|
||||||
|
<el-calendar>
|
||||||
|
<!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
|
||||||
|
<template
|
||||||
|
slot="dateCell"
|
||||||
|
slot-scope="{date, data}">
|
||||||
|
<p :class="data.isSelected ? 'is-selected' : ''">
|
||||||
|
{{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
</el-calendar>
|
||||||
|
</el-main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Home",
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
condition: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.search{
|
||||||
|
margin: 0 0 3rem 0;
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.searchinp{
|
||||||
|
float: left;
|
||||||
|
width: calc(100% - 6rem);
|
||||||
|
|
||||||
|
}
|
||||||
|
.searchbtn{
|
||||||
|
float: left;
|
||||||
|
width: 6rem;
|
||||||
|
}
|
||||||
|
.el-calendar{
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.el-calendar__body{
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.el-container{
|
||||||
|
background: #EEFCFE;
|
||||||
|
height: 45rem;
|
||||||
|
}
|
||||||
|
.is-selected {
|
||||||
|
color: #1989FA;
|
||||||
|
}
|
||||||
|
</style>
|
17
HSLink-front/src/components/StudentThought.vue
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<template>
|
||||||
|
<el-main>
|
||||||
|
<h1>学生想法</h1>
|
||||||
|
</el-main>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "StudentThought"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-main{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
74
HSLink-front/src/components/components/Footer.vue
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<el-main>
|
||||||
|
<div class="list">
|
||||||
|
<div class="one">
|
||||||
|
<img src="../../assets/img/qq.png" />
|
||||||
|
<span>QQ客服</span>
|
||||||
|
</div>
|
||||||
|
<div class="one">
|
||||||
|
<i class="el-icon-s-promotion"></i>
|
||||||
|
<span>{{emil}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="one">
|
||||||
|
<i class="el-icon-s-home"></i>
|
||||||
|
<span>客服论坛</span>
|
||||||
|
</div>
|
||||||
|
<div class="one">
|
||||||
|
<i class="el-icon-phone"></i>
|
||||||
|
<span>150-0673-2580</span>
|
||||||
|
</div>
|
||||||
|
<p>工作时间 8:30-22:00</p>
|
||||||
|
<a class="beian" rel="nofollow" href="http://www.beian.miit.gov.cn" target="_blank"><p>备案号:鲁ICP备19037910号-1</p></a>
|
||||||
|
</div>
|
||||||
|
</el-main>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "Footer",
|
||||||
|
data() {
|
||||||
|
return{
|
||||||
|
emil: "617594538@qq.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.container{
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
.el-main{
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.list p{
|
||||||
|
color: #8590A6;
|
||||||
|
}
|
||||||
|
.one{
|
||||||
|
height: 2rem;
|
||||||
|
color: #8590A6;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.one img{
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
height: 1rem;
|
||||||
|
width: 1rem;
|
||||||
|
}
|
||||||
|
.one i{
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
.one span{
|
||||||
|
position: absolute;
|
||||||
|
margin-top: 0.3rem;
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
}
|
||||||
|
.beian{
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.beian p{
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
</style>
|
390
HSLink-front/src/components/components/Mdeditor.vue
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
<template>
|
||||||
|
<div class="mdContainer" :class="{ fullPage: fullPageStatus }">
|
||||||
|
<div class="navContainer" v-if="navStatus">
|
||||||
|
<!--<div class="nameContainer" v-if="icoStatusP" @click="happyDay">OVEN-mdEditor</div>-->
|
||||||
|
<div class="markContainer">
|
||||||
|
<ul class="markListGroup">
|
||||||
|
<li class="markListItem" @click="addStrong" title="strong"><b>B</b></li>
|
||||||
|
<li class="markListItem" @click="addItalic" title="italic"><i>I</i></li>
|
||||||
|
<li class="markListItem" @click="addStrikethrough" title="strikethrough"><i class="fa fa-strikethrough" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addHTitle(1)" title="H1-title">H1</li>
|
||||||
|
<li class="markListItem" @click="addHTitle(2)" title="H2-title">H2</li>
|
||||||
|
<li class="markListItem" @click="addHTitle(3)" title="H3-title">H3</li>
|
||||||
|
<li class="markListItem" @click="addHTitle(4)" title="H4-title">H4</li>
|
||||||
|
<li class="markListItem" @click="addHTitle(5)" title="H5-title">H5</li>
|
||||||
|
<li class="markListItem" @click="addHTitle(6)" title="H6-title">H6</li>
|
||||||
|
<li class="markListItem" @click="addLine" title="line">一</li>
|
||||||
|
<li class="markListItem" @click="addQuote" title="quote"><i class="fa fa-quote-left" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addCode"><i class="fa fa-code" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addLink"><i class="fa fa-link" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addImage"><i class="fa fa-picture-o" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addTable" title="table"><i class="fa fa-table" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addUl" title="ul-list"><i class="fa fa-list-ul" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="addOl" title="ol-list"><i class="fa fa-list-ol" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="fullPageFn" title="fullpage"><i class="fa fa-arrows-alt" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="previewFn" title="preview"><i class="fa fa-eye-slash" aria-hidden="true"></i></li>
|
||||||
|
<li class="markListItem" @click="previewAllFn" title="previewAll"><i class="fa fa-eye" aria-hidden="true"></i></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mdBodyContainer" :class="{ noMenu: !navStatus }">
|
||||||
|
<div class="editContainer" v-if="editStatus">
|
||||||
|
<textarea name="" class="mdEditor" @keydown.9="tabFn" v-scroll="editScroll" v-model="input">{{this.mdValuesP}}</textarea>
|
||||||
|
</div>
|
||||||
|
<div class="previewContainer markdown-body" v-scroll="previewScroll" v-html="compiledMarkdown" v-if="previewStatus">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Vue from 'vue'
|
||||||
|
import marked from 'marked'
|
||||||
|
import scroll from 'vue-scroll'
|
||||||
|
import hljs from '../../assets/js/highlight.min.js'
|
||||||
|
import range from '../../assets/js/rangeFn.js'
|
||||||
|
Vue.use(scroll)
|
||||||
|
marked.setOptions({
|
||||||
|
renderer: new marked.Renderer(),
|
||||||
|
gfm: true,
|
||||||
|
tables: true,
|
||||||
|
breaks: false,
|
||||||
|
pedantic: false,
|
||||||
|
sanitize: false,
|
||||||
|
smartLists: true,
|
||||||
|
smartypants: false,
|
||||||
|
highlight: function(code) {
|
||||||
|
return hljs.highlightAuto(code).value
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function insertContent(val, that) {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
let lastFourCharts = value.substring(point - 4, point);
|
||||||
|
if (lastChart != '\n' && value != '' && lastFourCharts != ' ') {
|
||||||
|
val = '\n' + val;
|
||||||
|
range.insertAfterText(textareaDom, val);
|
||||||
|
} else {
|
||||||
|
range.insertAfterText(textareaDom, val);
|
||||||
|
}
|
||||||
|
that.input = document.querySelector('.mdEditor').value;
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'markdown',
|
||||||
|
props: ['mdValuesP', 'fullPageStatusP', 'editStatusP', 'previewStatusP', 'navStatusP', 'icoStatusP'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
input: this.mdValuesP || '',
|
||||||
|
editStatus: Boolean(this.editStatusP),
|
||||||
|
previewStatus: Boolean(this.previewStatusP),
|
||||||
|
fullPageStatus: Boolean(this.fullPageStatusP),
|
||||||
|
navStatus: Boolean(this.navStatusP),
|
||||||
|
icoStatus: Boolean(this.icoStatusP),
|
||||||
|
maxEditScrollHeight: 0,
|
||||||
|
maxPreviewScrollHeight: 0,
|
||||||
|
htmlText: marked(this.mdValuesP, {
|
||||||
|
sanitize: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created: function() {
|
||||||
|
if (!this.editStatus && !this.previewStatus) {
|
||||||
|
this.editStatus = true;
|
||||||
|
this.previewStatus = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
tabFn: function(evt) {
|
||||||
|
insertContent(" ", this);
|
||||||
|
// 屏蔽屌tab切换事件
|
||||||
|
if (evt.preventDefault) {
|
||||||
|
evt.preventDefault();
|
||||||
|
} else {
|
||||||
|
evt.returnValue = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addImage: function(evt) {
|
||||||
|
insertContent("![Vue](https://cn.vuejs.org/images/logo.png)", this);
|
||||||
|
},
|
||||||
|
addHTitle: function(index) {
|
||||||
|
let tmp = '';
|
||||||
|
switch (index) {
|
||||||
|
case 1:
|
||||||
|
tmp = '# ';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
tmp = '## ';
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
tmp = '### ';
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
tmp = '#### ';
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
tmp = '##### ';
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
tmp = '###### ';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
insertContent(tmp, this);
|
||||||
|
},
|
||||||
|
addCode: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
insertContent('```\n\n```', this);
|
||||||
|
if (lastChart != '\n' && value != '') {
|
||||||
|
range.setCaretPosition(textareaDom, point + 5);
|
||||||
|
} else {
|
||||||
|
range.setCaretPosition(textareaDom, point + 4);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addStrikethrough: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
insertContent('~~~~', this);
|
||||||
|
if (lastChart != '\n' && value != '') {
|
||||||
|
range.setCaretPosition(textareaDom, point + 3);
|
||||||
|
} else {
|
||||||
|
range.setCaretPosition(textareaDom, point + 2);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addStrong: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
insertContent('****', this);
|
||||||
|
if (lastChart != '\n' && value != '') {
|
||||||
|
range.setCaretPosition(textareaDom, point + 3);
|
||||||
|
} else {
|
||||||
|
range.setCaretPosition(textareaDom, point + 2);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addItalic: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
insertContent('**', this);
|
||||||
|
if (lastChart != '\n' && value != '') {
|
||||||
|
range.setCaretPosition(textareaDom, point + 2);
|
||||||
|
} else {
|
||||||
|
range.setCaretPosition(textareaDom, point + 1);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setStrong: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
},
|
||||||
|
addLine: function() {
|
||||||
|
insertContent('\n----\n', this);
|
||||||
|
},
|
||||||
|
addLink: function() {
|
||||||
|
insertContent("[Vue](https://cn.vuejs.org/images/logo.png)", this);
|
||||||
|
},
|
||||||
|
addQuote: function() {
|
||||||
|
let textareaDom = document.querySelector('.mdEditor');
|
||||||
|
let value = textareaDom.value;
|
||||||
|
let point = range.getCursortPosition(textareaDom);
|
||||||
|
let lastChart = value.substring(point - 1, point);
|
||||||
|
insertContent('> ', this);
|
||||||
|
if (lastChart != '\n' && value != '') {
|
||||||
|
range.setCaretPosition(textareaDom, point + 3);
|
||||||
|
} else {
|
||||||
|
range.setCaretPosition(textareaDom, point + 2);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addTable: function() {
|
||||||
|
insertContent('\nheader 1 | header 2\n', this);
|
||||||
|
insertContent('---|---\n', this);
|
||||||
|
insertContent('row 1 col 1 | row 1 col 2\n', this);
|
||||||
|
insertContent('row 2 col 1 | row 2 col 2\n\n', this);
|
||||||
|
},
|
||||||
|
addUl: function() {
|
||||||
|
insertContent('* ', this);
|
||||||
|
},
|
||||||
|
addOl: function() {
|
||||||
|
insertContent('1. ', this);
|
||||||
|
},
|
||||||
|
previewFn: function() {
|
||||||
|
if (!this.editStatus) {
|
||||||
|
this.editStatus = true;
|
||||||
|
this.previewStatus = !this.previewStatus;
|
||||||
|
} else {
|
||||||
|
this.previewStatus = !this.previewStatus;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
previewAllFn: function() {
|
||||||
|
if (!this.editStatus && this.previewStatus) {
|
||||||
|
this.editStatus = true;
|
||||||
|
this.previewStatus = true;
|
||||||
|
} else {
|
||||||
|
this.editStatus = false;
|
||||||
|
this.previewStatus = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fullPageFn: function() {
|
||||||
|
this.fullPageStatus = !this.fullPageStatus;
|
||||||
|
let maxEditScrollHeight=document.querySelector('.mdEditor').scrollHeight-document.querySelector('.mdEditor').clientHeight;
|
||||||
|
let maxPreviewScrollHeight=document.querySelector('.previewContainer').scrollHeight-document.querySelector('.previewContainer').clientHeight;
|
||||||
|
this.maxEditScrollHeight = maxEditScrollHeight;
|
||||||
|
this.maxPreviewScrollHeight = maxPreviewScrollHeight
|
||||||
|
},
|
||||||
|
previewScroll: function(e, position) {
|
||||||
|
if(this.maxEditScrollHeight!==0){
|
||||||
|
let topPercent=position.scrollTop/this.maxPreviewScrollHeight;
|
||||||
|
document.querySelector('.mdEditor').scrollTop = this.maxEditScrollHeight*topPercent;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
editScroll:function(e, position){
|
||||||
|
if(this.maxPreviewScrollHeight!==0){
|
||||||
|
let topPercent=position.scrollTop/this.maxEditScrollHeight;
|
||||||
|
document.querySelector('.previewContainer').scrollTop = this.maxPreviewScrollHeight*topPercent;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
happyDay:function(){
|
||||||
|
window.open('https://github.com/ovenslove/vue-mdEditor');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
compiledMarkdown: function() {
|
||||||
|
return marked(this.input, {
|
||||||
|
sanitize: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
input: function() {
|
||||||
|
let data = {};
|
||||||
|
data.mdValue = this.input;
|
||||||
|
data.htmlValue = marked(this.input, {
|
||||||
|
sanitize: false
|
||||||
|
});
|
||||||
|
this.$emit('childevent', data);
|
||||||
|
let maxEditScrollHeight=document.querySelector('.mdEditor').scrollHeight-document.querySelector('.mdEditor').clientHeight;
|
||||||
|
let maxPreviewScrollHeight=document.querySelector('.previewContainer').scrollHeight-document.querySelector('.previewContainer').clientHeight;
|
||||||
|
this.maxEditScrollHeight = maxEditScrollHeight;
|
||||||
|
this.maxPreviewScrollHeight = maxPreviewScrollHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
/*引入reset文件*/
|
||||||
|
@import "../../assets/css/reset";
|
||||||
|
/*引入github的markdown样式文件*/
|
||||||
|
@import "../../assets/css/github-markdown.css";
|
||||||
|
/*引入atom的代码高亮样式文件*/
|
||||||
|
@import "../../assets/css/atom-one-dark.min.css";
|
||||||
|
.mdContainer {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: lightblue;
|
||||||
|
&.fullPage {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 1000;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.navContainer {
|
||||||
|
width: 100%;
|
||||||
|
height: 36px;
|
||||||
|
background: #fff;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 10px;
|
||||||
|
.nameContainer {
|
||||||
|
color: lightblue;
|
||||||
|
margin-right: 10px;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.markContainer {
|
||||||
|
width: auto;
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 0px;
|
||||||
|
ul.markListGroup {
|
||||||
|
height: 100%;
|
||||||
|
width: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
li.markListItem {
|
||||||
|
list-style: none;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin: 0 1rem 0 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
color: #333;
|
||||||
|
&:hover {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mdBodyContainer {
|
||||||
|
width: 100%;
|
||||||
|
height: calc(100% - 36px);
|
||||||
|
background: #fff;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
&.noMenu{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//编辑区域
|
||||||
|
.editContainer {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-right: 1px solid #ddd;
|
||||||
|
background: #333;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
.mdEditor {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
background: transparent;
|
||||||
|
outline: none;
|
||||||
|
color: #fff;
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预览区
|
||||||
|
.previewContainer {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: #fff;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
27
HSLink-front/src/components/components/NoData.vue
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<el-container>
|
||||||
|
<el-main>
|
||||||
|
<img src="../../assets/img/no-data.png" height="200" width="200"/>
|
||||||
|
<div class="nodata">
|
||||||
|
暂无数据
|
||||||
|
</div>
|
||||||
|
</el-main>
|
||||||
|
</el-container>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "NoData"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-main img{
|
||||||
|
display: block;
|
||||||
|
margin: 2rem auto 0;
|
||||||
|
}
|
||||||
|
.nodata{
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
</style>
|
@ -5,8 +5,16 @@ import App from './App'
|
|||||||
import router from './router'
|
import router from './router'
|
||||||
import ElementUI from 'element-ui'
|
import ElementUI from 'element-ui'
|
||||||
import 'element-ui/lib/theme-chalk/index.css'
|
import 'element-ui/lib/theme-chalk/index.css'
|
||||||
|
import '@/assets/css/public.css'
|
||||||
|
// 引用API文件
|
||||||
|
import api from './api/index.js'
|
||||||
|
// 将API方法绑定到全局
|
||||||
|
import marked from 'marked'
|
||||||
|
import scroll from 'vue-scroll'
|
||||||
|
Vue.prototype.$ajax = api
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
Vue.use(ElementUI);
|
Vue.use(ElementUI);
|
||||||
|
Vue.use(scroll)
|
||||||
/* eslint-disable no-new */
|
/* eslint-disable no-new */
|
||||||
new Vue({
|
new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
|
@ -8,14 +8,50 @@ export default new Router({
|
|||||||
routes: [{
|
routes: [{
|
||||||
path: '/login',
|
path: '/login',
|
||||||
name: 'login',
|
name: 'login',
|
||||||
component:() => import('@/components/Login'),
|
component:() => import('@/components/Login')
|
||||||
children:[{
|
|
||||||
//path和name不区分大小写
|
|
||||||
path:'homepage',
|
|
||||||
name:'homepage',
|
|
||||||
component:() => import('@/components/Homepage')
|
|
||||||
}]
|
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path:'/',
|
||||||
|
name:'index',
|
||||||
|
component:() => import('@/components/Index'),
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path:'help',
|
||||||
|
name:'help',
|
||||||
|
component:() => import('@/components/Help')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'homepage',
|
||||||
|
name:'homepage',
|
||||||
|
component:() => import('@/components/Homepage')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'schoolnotice',
|
||||||
|
name:'schoolnotice',
|
||||||
|
component:() => import('@/components/SchoolNotice')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'parentsproposal',
|
||||||
|
name:'parentsproposal',
|
||||||
|
component:() => import('@/components/ParentsProposal')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'studentthought',
|
||||||
|
name:'studentthought',
|
||||||
|
component:() => import('@/components/StudentThought')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'myclass',
|
||||||
|
name:'myclass',
|
||||||
|
component:() => import('@/components/MyClass')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'content',
|
||||||
|
name:'content',
|
||||||
|
component:() => import('@/components/Content')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|