Commit b24c210c by tangyi

优化

parent 52f05d3b
......@@ -40,10 +40,10 @@
</appender>
<!-- 输出到logstash的appender, LOGSTASH_HOST为logstash的IP和端口,从环境变量注入-->
<!--<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOGSTASH_HOST}</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>-->
<!--<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOGSTASH_HOST}</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>-->
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="warn">
......
......@@ -6,10 +6,19 @@
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>硕果云-sg-admin</title>
<style media="screen" type="text/css">
.preloader-init {
position: absolute;
top: calc(50% - 65px);
left: calc(50% - 65px)
}
</style>
</head>
<body>
<script src=/static/tinymce4.7.5/tinymce.min.js></script>
<div id="app"></div>
<img id="preloader-init" src="static/img/spinner.gif" class="preloader-init" alt="spinner"/>
<div id="app" style="display: none">
</div>
<!-- built files will be auto injected -->
</body>
</html>
......@@ -6,6 +6,10 @@
<script>
export default{
name: 'App'
name: 'App',
mounted () {
document.getElementById('app').style.display = 'block'
document.getElementById('preloader-init').style.display = 'none'
}
}
</script>
......@@ -90,7 +90,7 @@ export default {
any: '随便填',
thirdparty: '第三方登录',
thirdpartyTips: '本地不能模拟,请结合自己业务进行模拟!!!',
forget: '忘记密码',
forget: '忘记密码',
info: '你咋忘不了吃呢?'
},
documentation: {
......@@ -157,6 +157,7 @@ export default {
enable: '启用',
disable: '禁用',
resetPassword: '重置密码',
loginTime: '最近登录时间',
roleName: '角色名称',
roleCode: '角色代码',
roleDesc: '角色描述',
......@@ -192,6 +193,8 @@ export default {
time: '耗时',
answerCorrectType: '答题结果',
score: '得分',
modifyDate: '修改时间',
modifier: '修改人',
subject: {
serialNumber: '序号',
type: '类型',
......@@ -206,9 +209,7 @@ export default {
optionE: '选项E',
optionF: '选项F',
answer: '参考答案',
analysis: '解析',
modifyDate: '修改时间',
modifier: '修改人'
analysis: '解析'
},
public: '发布',
withdraw: '撤回',
......
......@@ -14,7 +14,6 @@ import './permission' // permission control
import './mock' // simulation data
import * as filters from './filters' // global filters
import VueParticles from 'vue-particles'
import { loadStyle } from './utils/util'
import * as urls from '@/config/env'
import Spinner from 'vue-spinkit'
......@@ -28,9 +27,6 @@ Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
})
// 使用登录页粒子效果插件
Vue.use(VueParticles)
Vue.prototype.moment = moment
// loading效果
......
module.exports = (file, path) => {
if (!path) path = 'page'
return require(`../${path}/${file}.vue`)
}
const _import = require('./_import')
export default [{
path: '/',
name: '主页',
redirect: '/dashboard'
}, {
path: '*',
redirect: '/404',
hidden: true
}, {
path: '/login',
name: '登录页',
component: _import('login/index')
}, {
path: '/lock',
name: '锁屏页',
component: _import('lock/index')
}, {
path: '/404',
component: _import('error-page/404', 'components'),
name: '404'
}, {
path: '/403',
component: _import('error-page/403', 'components'),
name: '403'
}, {
path: '/500',
component: _import('error-page/500', 'components'),
name: '500'
}]
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'
import { formatRoutes } from '@/utils/util'
import baseRouter from './_router'
Vue.use(VueRouter)
export default new VueRouter({
// mode: 'history',
strict: process.env.NODE_ENV !== 'production',
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
if (from.meta.keepAlive) {
from.meta.savedPosition = document.body.scrollTop
}
return {
x: 0,
y: to.meta.savedPosition || 0
}
}
},
routes: [].concat(...formatRoutes(store.state.routers), baseRouter)
})
......@@ -38,14 +38,14 @@
<span>{{ scope.row.attachName }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.uploader')" min-width="50">
<el-table-column label="附件类型" min-width="90">
<template slot-scope="scope">
<span>{{ scope.row.creator }}</span>
<span>{{ scope.row.busiType | attachmentTypeFilter }}</span>
</template>
</el-table-column>
<el-table-column label="附件类型" min-width="90">
<el-table-column :label="$t('table.uploader')" min-width="50">
<template slot-scope="scope">
<span>{{ scope.row.busiType | attachmentTypeFilter }}</span>
<span>{{ scope.row.creator }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.uploadDate')" min-width="70">
......
......@@ -37,6 +37,16 @@
<span>{{ scope.row.teacher }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.modifier')" property="modifier" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.modifier }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.modifyDate')" property="updateTime" width="150">
<template slot-scope="scope">
<span>{{ scope.row.modifyDate | fmtDate('yyyy-MM-dd hh:mm') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col" width="300">
<template slot-scope="scope">
<el-button v-if="course_btn_edit" type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button>
......
......@@ -32,6 +32,16 @@
<el-tag :type="scope.row.status | statusTypeFilter" effect="dark" size="small">{{ scope.row.status | publicStatusFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('table.status')" min-width="80">
<template slot-scope="scope">
<el-tag :type="scope.row.status | statusTypeFilter" effect="dark" size="small">{{ scope.row.status | statusFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('table.modifyDate')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.modifyDate | fmtDate('yyyy-MM-dd hh:mm') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col" width="300px">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button>
......
......@@ -64,14 +64,14 @@
<span>{{ scope.row.score }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.subject.modifyDate')" property="updateTime" width="150">
<el-table-column :label="$t('table.modifier')" property="modifier" width="120">
<template slot-scope="scope">
<span>{{ scope.row.modifyDate | fmtDate('yyyy-MM-dd hh:mm') }}</span>
<span>{{ scope.row.modifier }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.subject.modifier')" property="modifier" width="120">
<el-table-column :label="$t('table.modifyDate')" property="updateTime" width="150">
<template slot-scope="scope">
<span>{{ scope.row.modifier }}</span>
<span>{{ scope.row.modifyDate | fmtDate('yyyy-MM-dd hh:mm') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col">
......
......@@ -140,7 +140,7 @@ export default {
})
}).catch(() => {
this.previewSwitch = !this.previewSwitch
});
})
},
getPreviewSwitch () {
getPreviewSwitch().then(response => {
......
<template>
<div class="bg">
<div class="login-wrap animated flipInY">
<h3>{{ $t('login.title') }}</h3>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<el-form-item prop="tenantCode">
<el-input :placeholder="$t('login.tenantCode')" v-model="loginForm.tenantCode" name="tenantCode" type="text" auto-complete="on"/>
</el-form-item>
<el-form-item prop="identifier">
<el-input :placeholder="$t('login.identifier')" v-model="loginForm.identifier" name="identifier" type="text" auto-complete="on"/>
</el-form-item>
<el-form-item prop="password">
<el-input :placeholder="$t('login.credential')" :type="passwordType" v-model="loginForm.credential" name="credential" auto-complete="on" @keyup.enter.native="handleLogin"/>
</el-form-item>
<el-form-item prop="code">
<el-row :span="24">
<el-col :span="14">
<el-input :maxlength="code.len" v-model="loginForm.code" size="small" auto-complete="off" placeholder="请输入验证码" @keyup.enter.native="handleLogin" />
</el-col>
<el-col :span="10">
<div class="login-code">
<span v-if="code.type === 'text'" class="login-code-img" @click="refreshCode">{{ code.value }}</span>
<img v-else :src="code.src" alt="验证码" class="login-code-img" @click="refreshCode">
</div>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-row type="flex" justify="space-between">
<el-checkbox v-model="loginForm.rememberMe" style="color:#eee">记住密码</el-checkbox>
<a href="" style="color:#eee" @click.prevent="openMsg">{{ $t('login.forget') }}</a>
</el-row>
</el-form-item>
<el-form-item>
<el-button :loading="loading" type="primary" @click.native.prevent="handleLogin">{{ $t('login.logIn') }}</el-button>
</el-form-item>
</el-form>
<div class="text-center">
<h3>
<span class="light-font">SG-</span>Admin
</h3>
</div>
<el-row>
<el-col :span="24">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<el-form-item prop="tenantCode">
<el-input :placeholder="$t('login.tenantCode')" v-model="loginForm.tenantCode" name="tenantCode" type="text" auto-complete="on"/>
</el-form-item>
<el-form-item prop="identifier">
<el-input :placeholder="$t('login.identifier')" v-model="loginForm.identifier" name="identifier" type="text" auto-complete="on"/>
</el-form-item>
<el-form-item prop="password">
<el-input :placeholder="$t('login.credential')" :type="passwordType" v-model="loginForm.credential" name="credential" auto-complete="on" @keyup.enter.native="handleLogin"/>
</el-form-item>
<el-form-item prop="code">
<el-row>
<el-col :span="14">
<el-input :maxlength="code.len" v-model="loginForm.code" size="small" auto-complete="off" placeholder="请输入验证码" @keyup.enter.native="handleLogin" />
</el-col>
<el-col :span="10">
<div class="login-code">
<span v-if="code.type === 'text'" class="login-code-img" @click="refreshCode">{{ code.value }}</span>
<img v-else :src="code.src" alt="验证码" class="login-code-img" @click="refreshCode">
</div>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button class="login-btn" type="primary" :loading="loading" @click.native.prevent="handleLogin"> {{ $t('login.logIn') }}</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
<!-- 粒子漂浮物 -->
<vue-particles
:particle-opacity="0.7"
:particles-number="30"
:particle-size="5"
:lines-width="2"
:line-linked="true"
:line-opacity="0.4"
:lines-distance="150"
:move-speed="3"
:hover-effect="true"
:click-effect="true"
click-mode="push"
color="#fff"
shape-type="star"
hover-mode="grab"
lines-color="#fff"
/>
</div>
</template>
......@@ -165,30 +149,31 @@ export default {
display: flex;
justify-content: center;
align-items: center;
//background-image: linear-gradient(-45deg, #0e4067 0%, #2978b7 33%, #16776a 100%);
background: url('../../../static/img/login_bg.jpg') -20% 10%;
background-size: cover;
#particles-js {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
}
.light-font {
color: #00abff;
}
.login-wrap {
width: 330px;
top: 15%;
position: absolute;
width: 420px;
margin: 0 auto;
border-radius: 5px;
padding: 20px;
z-index: 3;
margin-right: -37%;
background: rgba(149, 159, 181, 0.5);
color: #fff;
background: rgba(0,0,0,.55);
text-align: center;
padding: 32px;
background-size: cover;
.el-form-item {
margin-bottom: 25px !important;
}
h3 {
text-align: center;
color: #ebedef;
margin-top: 0px;
margin-top: 0;
margin-bottom: 5px;
span {
color: #20a0ff;
......@@ -209,10 +194,21 @@ export default {
font-weight: 600;
}
}
.login-form {
input {
color: #fff;
border: 1px solid hsla(0,0%,100%,.6);
border-radius: 5px;
background-color: hsla(0,0%,100%,.1);
box-shadow: none;
font-size: 14px;
}
}
.login-code-img {
margin-left: 10px;
margin-top: -4px;
width: 110px;
height: 40px;
border-radius: 2px;
}
</style>
......@@ -47,7 +47,7 @@
</el-col>
</el-row>
<el-form-item>
<el-button type="primary" @click="create">保存</el-button>
<el-button v-if="dept_btn_add || dept_btn_edit" type="primary" @click="create">保存</el-button>
<el-button @click="onCancel">取消</el-button>
</el-form-item>
</el-form>
......
......@@ -22,27 +22,37 @@
<span>{{ scope.row.routeId }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.route.routeName')">
<el-table-column :label="$t('table.route.routeName')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.routeName }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.route.uri')">
<el-table-column :label="$t('table.route.uri')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.uri }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.route.sort')">
<el-table-column :label="$t('table.route.sort')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.sort }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.route.status')">
<el-table-column :label="$t('table.route.status')" min-width="80">
<template slot-scope="scope">
<el-tag :type="scope.row.status | statusTypeFilter" effect="dark" size="small">{{ scope.row.status | statusFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col" width="300px">
<el-table-column :label="$t('table.modifier')" property="modifier" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.modifier }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.modifyDate')" property="updateTime" width="150">
<template slot-scope="scope">
<span>{{ scope.row.modifyDate | fmtDate('yyyy-MM-dd hh:mm') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col">
<template slot-scope="scope">
<el-button v-if="route_btn_edit" type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button>
<el-button v-if="route_btn_del" type="danger" size="mini" @click="handleDelete(scope.row)">{{ $t('table.delete') }}</el-button>
......
......@@ -18,42 +18,47 @@
@selection-change="handleSelectionChange"
@sort-change="sortChange">
<el-table-column type="selection" width="55"/>
<el-table-column :label="$t('login.identifier')" min-width="110">
<el-table-column :label="$t('login.identifier')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.identifier }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.name')" min-width="110">
<el-table-column :label="$t('table.name')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.sex')">
<el-table-column :label="$t('table.sex')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.sex | sexFilter}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.ownDept')">
<el-table-column :label="$t('table.ownDept')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.deptName }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.role')">
<el-table-column :label="$t('table.role')" min-width="80">
<template slot-scope="scope">
<span v-for="role in scope.row.roleList" :key="role.id">{{ role.roleName }} </span>
</template>
</el-table-column>
<el-table-column :label="$t('table.status')">
<el-table-column :label="$t('table.status')" min-width="80">
<template slot-scope="scope">
<el-tag :type="scope.row.status | statusTypeFilter" effect="dark" size="small">{{ scope.row.status | statusFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col" width="300px">
<el-table-column :label="$t('table.loginTime')" min-width="80">
<template slot-scope="scope">
<span>{{ scope.row.loginTime | fmtDate('yyyy-MM-dd hh:mm') }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('table.actions')" class-name="status-col">
<template slot-scope="scope">
<el-button v-if="user_btn_edit" type="primary" size="mini" @click="handleUpdate(scope.row)">{{ $t('table.edit') }}</el-button>
<el-button v-if="user_btn_edit" type="warning" size="mini" @click="handleResetPassword(scope.row)">{{ $t('table.resetPassword') }}</el-button>
<el-button v-if="user_btn_edit && scope.row.status === 0" type="danger" size="mini" @click="handleEnableOrDisable(scope.row, 1)">{{ $t('table.disable') }}</el-button>
<el-button v-else type="success" size="mini" @click="handleEnableOrDisable(scope.row, 0)">{{ $t('table.enable') }}</el-button>
<el-button v-if="user_btn_edit && scope.row.status === 1" type="success" size="mini" @click="handleEnableOrDisable(scope.row, 0)">{{ $t('table.enable') }}</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -19,7 +19,6 @@ export default {
methods: {
// 提交考试
handleSubmitExam () {
debugger
this.$refs.mainRef.handleSubmitExam()
}
}
......
......@@ -5,6 +5,7 @@ import com.github.tangyi.common.core.constant.CommonConstant;
import com.github.tangyi.common.core.exceptions.CommonException;
import com.github.tangyi.common.core.model.ResponseBean;
import com.github.tangyi.common.core.utils.PageUtil;
import com.github.tangyi.common.core.utils.SysUtil;
import com.github.tangyi.common.core.web.BaseController;
import com.github.tangyi.gateway.module.Route;
import com.github.tangyi.gateway.service.RouteService;
......@@ -80,6 +81,7 @@ public class RouteController extends BaseController {
@PutMapping
public ResponseBean<Boolean> updateRoute(@RequestBody @Valid Route route) {
try {
route.setCommonValue(SysUtil.getUser(), SysUtil.getSysCode());
// 更新路由
return new ResponseBean<>(routeService.update(route) > 0);
} catch (Exception e) {
......
......@@ -73,6 +73,7 @@
<jjwt.version>0.9.0</jjwt.version>
<qiniu.version>[7.2.0, 7.2.99]</qiniu.version>
<easyexcel.version>2.1.4</easyexcel.version>
<guava.version>28.2-jre</guava.version>
<!-- docker -->
<docker.maven.verion>1.4.3</docker.maven.verion>
......@@ -330,6 +331,13 @@
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<!-- guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment