v1.5 beta版发布,详细查看发行版说明

This commit is contained in:
郑杰
2019-01-20 19:34:40 +08:00
parent 5bb9c0a156
commit 45655e2bec
37 changed files with 634 additions and 293 deletions

View File

@@ -0,0 +1,62 @@
<template>
<div class="app-container">
<eHeader :query="query"/>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;">
<el-table-column label="序号" width="80" align="center">
<template slot-scope="scope">
<div>{{ scope.$index + 1 }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="tableName" label="表名"/>
<el-table-column prop="createTime" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="160px" align="center">
<template slot-scope="scope">
<Generator :name="scope.row.tableName"/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
:total="total"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChange"
@current-change="pageChange"/>
</div>
</template>
<script>
import initData from '@/mixins/initData'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
import Generator from './module/generator'
export default {
components: { eHeader, Generator },
mixins: [initData],
created() {
this.$nextTick(() => {
this.init()
})
},
methods: {
parseTime,
beforeInit() {
this.url = 'api/generator/tables'
const query = this.query
const name = query.name
this.params = { page: this.page, size: this.size }
if (name) { this.params['name'] = name }
return true
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,99 @@
<template>
<el-dialog :append-to-body="true" :visible.sync="dialog" title="生成器配置" width="550px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="78px">
<el-form-item label="作者名称" prop="author">
<el-input v-model="form.author" style="width: 420px;"/>
</el-form-item>
<el-form-item label="至于包下" prop="pack">
<el-input v-model="form.pack" style="width: 420px;"/>
</el-form-item>
<el-form-item label="模块名称" prop="moduleName">
<el-input v-model="form.moduleName" style="width: 420px;"/>
</el-form-item>
<el-form-item label="前端路径" prop="path">
<el-input v-model="form.path" style="width: 420px;"/>
</el-form-item>
<el-form-item label="API路径" prop="apiPath">
<el-input v-model="form.apiPath" style="width: 420px;"/>
</el-form-item>
<el-form-item label="是否覆盖" prop="cover">
<el-radio v-model="form.cover" label="true"></el-radio>
<el-radio v-model="form.cover" label="false"></el-radio>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { update } from '@/api/genConfig'
export default {
data() {
return {
loading: false, dialog: false,
form: { author: '', pack: '', path: '', moduleName: '', cover: 'false', apiPath: '' },
rules: {
author: [
{ required: true, message: '作者不能为空', trigger: 'blur' }
],
pack: [
{ required: true, message: '包路径不能为空', trigger: 'blur' }
],
moduleName: [
{ required: true, message: '包路径不能为空', trigger: 'blur' }
],
path: [
{ required: true, message: '前端代码生成路径不能为空', trigger: 'blur' }
],
apiPath: [
{ required: true, message: '前端Api文件生成路径不能为空', trigger: 'blur' }
],
cover: [
{ required: true, message: '不能为空', trigger: 'blur' }
]
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.$refs['form'].validate((valid) => {
if (valid) {
this.loading = true
this.doUpdate()
} else {
return false
}
})
},
doUpdate() {
update(this.form).then(res => {
this.resetForm()
this.$notify({
title: '更新成功',
type: 'success',
duration: 2500
})
this.loading = false
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.form = { author: '', pack: '', path: '', moduleName: '', cover: 'false', apiPath: '' }
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,113 @@
<template>
<div>
<el-button v-if="checkPermission(['ADMIN','JOB_ALL','JOB_EDIT'])" type="success" size="mini" @click="to">生成代码</el-button>
<el-dialog :append-to-body="true" :visible.sync="dialog" title="代码生成配置" width="800px">
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;">
<el-table-column label="序号" width="80" align="center">
<template slot-scope="scope">
<div>{{ scope.$index + 1 }}</div>
</template>
</el-table-column>
<el-table-column prop="columnName" label="字段名称"/>
<el-table-column prop="columnType" label="字段类型"/>
<el-table-column prop="columnComment" label="字段标题">
<template slot-scope="scope">
<el-input v-model="data[scope.$index].columnComment" class="edit-input"/>
</template>
</el-table-column>
<el-table-column label="查询方式">
<template slot-scope="scope">
<el-select v-model="data[scope.$index].columnQuery" class="edit-input" clearable placeholder="请选择">
<el-option
label="模糊查询"
value="1"/>
<el-option
label="精确查询"
value="2"/>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="columnShow" label="列表显示">
<template slot-scope="scope">
<el-tooltip :content="scope.row.columnShow === 'true' ?'显示':'不显示'" placement="top">
<el-switch
v-model="data[scope.$index].columnShow"
active-color="#13ce66"
inactive-color="#ff4949"
active-value="true"
inactive-value="false"/>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="genLoading" type="primary" @click="doSubmit">生成</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData'
import { generator } from '@/api/generator'
export default {
name: 'Generator',
mixins: [initData],
props: {
name: {
type: String,
required: true
}
},
data() {
return {
genLoading: false, dialog: false, columnQuery: ''
}
},
methods: {
checkPermission,
to() {
this.dialog = true
this.time = 130
this.$nextTick(() => {
this.init()
})
},
beforeInit() {
this.url = 'api/generator/columns'
const tableName = this.name
this.params = { tableName }
return true
},
cancel() {
this.dialog = false
},
doSubmit() {
this.genLoading = true
generator(this.data, this.name).then(res => {
this.$notify({
title: '生成成功',
type: 'success',
duration: 2500
})
this.dialog = false
this.genLoading = false
}).catch(err => {
this.dialog = false
this.genLoading = false
console.log(err.response.data.message)
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss">
.edit-input {
.el-input__inner {
border: none;
}
}
</style>

View File

@@ -0,0 +1,45 @@
<template>
<div class="head-container">
<el-input v-model="query.name" clearable placeholder="请输入表名" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery"/>
<el-button class="filter-item" size="mini" type="primary" icon="el-icon-search" @click="toQuery">搜索</el-button>
<!-- 新增 -->
<div style="display: inline-block;margin: 0px 2px;">
<el-button
class="filter-item"
size="mini"
type="primary"
icon="el-icon-setting"
@click="to">生成器配置</el-button>
<eForm ref="form"/>
</div>
</div>
</template>
<script>
import { get } from '@/api/genConfig'
import eForm from './form'
// 查询条件
export default {
components: { eForm },
props: {
query: {
type: Object,
required: true
}
},
methods: {
toQuery() {
this.$parent.page = 0
this.$parent.init()
},
to() {
const _this = this.$refs.form
get().then(data => {
_this.form = data
_this.form.cover = _this.form.cover.toString()
})
_this.dialog = true
}
}
}
</script>

View File

@@ -1,32 +1,20 @@
<template>
<div class="login-container">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<div class="title-container">
<h3 class="title"> </h3>
</div>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
<h3 class="title">el-admin 后台管理系统</h3>
<el-form-item prop="username">
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input v-model="loginForm.username" name="username" type="text" auto-complete="on" placeholder="username" />
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon" style="height: 39px;width: 13px;margin-left: 2px;" />
</el-input>
</el-form-item>
<el-form-item prop="password">
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input
:type="pwdType"
v-model="loginForm.password"
name="password"
auto-complete="on"
placeholder="password"
@keyup.enter.native="handleLogin" />
<span class="show-pwd" @click="showPwd">
<svg-icon icon-class="eye" />
</span>
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon" style="height: 39px;width: 13px;margin-left: 2px;" />
</el-input>
</el-form-item>
<el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 35px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-button :loading="loading" size="medium" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
@@ -41,9 +29,11 @@ export default {
name: 'Login',
data() {
return {
checked: false,
loginForm: {
username: 'admin',
password: '123456'
password: '123456',
rememberMe: false
},
loginRules: {
username: [{ required: true, trigger: 'blur', message: '用户名不能为空' }],
@@ -72,7 +62,7 @@ export default {
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
const user = { username: this.loginForm.username, password: md5(this.loginForm.password) }
const user = { username: this.loginForm.username, password: md5(this.loginForm.password), rememberMe: this.loginForm.rememberMe }
if (valid) {
this.loading = true
this.$store.dispatch('Login', user).then(() => {
@@ -92,113 +82,29 @@ export default {
</script>
<style rel="stylesheet/scss" lang="scss">
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
$bg:#283443;
$light_gray:#eee;
$cursor: #fff;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input{
color: $cursor;
&::first-line {
color: $light_gray;
}
}
}
/* reset element-ui css */
.login-container {
.el-input {
display: inline-block;
height: 47px;
width: 85%;
input {
background: transparent;
border: 0px;
-webkit-appearance: none;
border-radius: 0px;
padding: 12px 5px 12px 15px;
color: $light_gray;
height: 47px;
caret-color: $cursor;
&:-webkit-autofill {
-webkit-box-shadow: 0 0 0px 1000px $bg inset !important;
-webkit-text-fill-color: $cursor !important;
}
}
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 5px;
color: #454545;
}
}
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
$bg:#2d3a4b;
$dark_gray:#889aa4;
$light_gray:#eee;
.login-container {
position: fixed;
.login {
display: flex;
justify-content: center;
align-items: center;
background-image:url( https://aurora-1255840532.cos.ap-chengdu.myqcloud.com/1547428971990.jpg);
height: 100%;
width: 100%;
background-color: $bg;
.login-form {
position: absolute;
left: 0;
right: 0;
width: 420px;
max-width: 100%;
padding: 35px 35px 15px 35px;
margin: 120px auto;
}
.tips {
font-size: 14px;
color: #fff;
margin-bottom: 10px;
span {
&:first-of-type {
margin-right: 16px;
}
}
.title {
margin: 0px auto 40px auto;
text-align: center;
color: #555;
}
.login-form {
border-radius: 6px;
background: #ffffff;
width: 365px;
padding: 25px 25px 5px 25px;
.el-input {
height: 38px;
input {
height: 38px;
}
}
.svg-container {
padding: 6px 5px 6px 15px;
color: $dark_gray;
vertical-align: middle;
width: 30px;
display: inline-block;
}
.title-container {
position: relative;
.title {
font-size: 26px;
color: $light_gray;
margin: 0px auto 40px auto;
text-align: center;
font-weight: bold;
}
.set-language {
color: #fff;
position: absolute;
top: 5px;
right: 0px;
}
}
.show-pwd {
position: absolute;
right: 10px;
top: 7px;
font-size: 16px;
color: $dark_gray;
cursor: pointer;
user-select: none;
}
.thirdparty-button {
position: absolute;
right: 35px;
bottom: 28px;
}
}
</style>

View File

@@ -0,0 +1,77 @@
<template>
<div class="app-container">
<eHeader :query="query"/>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;">
<el-table-column prop="username" label="用户名"/>
<el-table-column prop="requestIp" label="IP"/>
<el-table-column prop="description" label="描述"/>
<el-table-column :show-overflow-tooltip="true" prop="method" label="方法名称"/>
<el-table-column :show-overflow-tooltip="true" prop="params" label="参数"/>
<el-table-column prop="createTime" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="异常详情" width="120px">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="info(scope.row.exceptionDetail)">查看详情</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="dialog" style="margin-left: 100px" title="异常详情" top="0" width="85%">
<span>
{{ errorInfo }}
</span>
</el-dialog>
<!--分页组件-->
<el-pagination
:total="total"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChange"
@current-change="pageChange"/>
</div>
</template>
<script>
import initData from '@/mixins/initData'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
export default {
components: { eHeader },
mixins: [initData],
data() {
return {
errorInfo: '', dialog: false
}
},
created() {
this.$nextTick(() => {
this.init()
})
},
methods: {
parseTime,
beforeInit() {
this.url = 'api/logs/error'
const sort = 'id,desc'
const query = this.query
const username = query.username
const logType = query.logType
this.params = { page: this.page, size: this.size, sort: sort }
if (username && username) { this.params['username'] = username }
if (logType !== '' && logType !== null) { this.params['logType'] = logType }
return true
},
info(errorInfo) {
this.errorInfo = errorInfo
this.dialog = true
}
}
}
</script>
<style scoped>
</style>

View File

@@ -8,7 +8,6 @@
<el-table-column prop="description" label="描述"/>
<el-table-column :show-overflow-tooltip="true" prop="method" label="方法名称"/>
<el-table-column :show-overflow-tooltip="true" prop="params" label="参数"/>
<el-table-column :show-overflow-tooltip="true" prop="exceptionDetail" label="异常堆栈信息"/>
<el-table-column prop="time" label="请求耗时" align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.time <= 300">{{ scope.row.time }}ms</el-tag>
@@ -16,12 +15,6 @@
<el-tag v-else type="danger">{{ scope.row.time }}ms</el-tag>
</template>
</el-table-column>
<el-table-column prop="logType" label="日志类型" width="100px" align="center">
<template slot-scope="scope">
<span v-if="scope.row.logType === 'ERROR'" class="badge badge-bg-orange">{{ scope.row.logType }}</span>
<span v-else class="badge">{{ scope.row.logType }}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="180px">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
@@ -39,7 +32,7 @@
</template>
<script>
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
export default {
@@ -57,10 +50,8 @@ export default {
const sort = 'id,desc'
const query = this.query
const username = query.username
const logType = query.logType
this.params = { page: this.page, size: this.size, sort: sort }
if (username && username) { this.params['username'] = username }
if (logType !== '' && logType !== null) { this.params['logType'] = logType }
return true
}
}

View File

@@ -1,9 +1,6 @@
<template>
<div class="head-container">
<el-input v-model="query.username" clearable placeholder="用户名" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery"/>
<el-select v-model="query.logType" placeholder="日志类型" clearable class="filter-item" style="width: 110px" @change="toQuery">
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/>
</el-select>
<el-button class="filter-item" size="mini" type="primary" icon="el-icon-search" @click="toQuery">搜索</el-button>
</div>
</template>
@@ -18,11 +15,7 @@ export default {
},
data() {
return {
downloadLoading: false,
enabledTypeOptions: [
{ key: 'INFO', display_name: 'INFO' },
{ key: 'ERROR', display_name: 'ERROR' }
]
downloadLoading: false
}
},
methods: {

View File

@@ -8,22 +8,34 @@
<div>{{ scope.$index + 1 }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="key" label="KEY"/>
<el-table-column :show-overflow-tooltip="true" prop="value" label="VALUE"/>
<el-table-column prop="key" label="KEY">
<template slot-scope="scope">
<div style="word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
{{ scope.row.key }}
</div>
</template>
</el-table-column>
<el-table-column prop="value" label="VALUE">
<template slot-scope="scope">
<div style="word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
{{ scope.row.value }}
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="150px" align="center">
<template slot-scope="scope">
<edit v-if="checkPermission(['ADMIN','REDIS_ALL','REDIS_EDIT'])" :data="scope.row" :sup_this="sup_this"/>
<el-popover
v-if="checkPermission(['ADMIN','REDIS_ALL','REDIS_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.$index"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button size="mini" type="text" @click="$refs[scope.$index].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
</div>
<el-button slot="reference" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -40,10 +52,9 @@
<script>
import checkPermission from '@/utils/permission' // 权限判断函数
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del } from '@/api/redis'
import { getPermissionTree } from '@/api/permission'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
import edit from './module/edit'
export default {
@@ -78,7 +89,7 @@ export default {
this.delLoading = true
del(row.key).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[index].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -87,13 +98,10 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[index].doClose()
console.log(err.response.data.message)
})
},
time(time) {
return parseTime(time)
},
getPermissions() {
getPermissionTree().then(res => {
this.permissions = res

View File

@@ -31,15 +31,15 @@
<edit v-if="checkPermission(['ADMIN','MENU_ALL','MENU_EDIT'])" :roles="roles" :menus="menus" :data="scope.row" :sup_this="sup_this"/>
<el-popover
v-if="checkPermission(['ADMIN','MENU_ALL','MENU_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="200">
<p>确定删除吗,如果存在下级节点则一并删除此操作不能撤销</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -51,7 +51,7 @@
import checkPermission from '@/utils/permission' // 权限判断函数
import { getRoleTree } from '@/api/role'
import treeTable from '@/components/TreeTable'
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del, getMenusTree } from '@/api/menu'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
@@ -89,11 +89,11 @@ export default {
if (value) { this.params['name'] = value }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -102,7 +102,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},

View File

@@ -117,10 +117,8 @@ export default {
duration: 2500
})
this.loading = false
setTimeout(() => {
this.$parent.$parent.init()
this.$parent.$parent.getMenus()
}, 200)
this.$parent.$parent.init()
this.$parent.$parent.getMenus()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
@@ -135,10 +133,8 @@ export default {
duration: 2500
})
this.loading = false
setTimeout(() => {
this.sup_this.init()
this.sup_this.getMenus()
}, 200)
this.sup_this.init()
this.sup_this.getMenus()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)

View File

@@ -13,15 +13,15 @@
<edit v-if="checkPermission(['ADMIN','PERMISSION_ALL','PERMISSION_EDIT'])" :permissions="permissions" :data="scope.row" :sup_this="sup_this"/>
<el-popover
v-if="checkPermission(['ADMIN','PERMISSION_ALL','PERMISSION_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="200">
<p>确定删除吗,如果存在下级节点则一并删除此操作不能撤销</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -32,7 +32,7 @@
<script>
import checkPermission from '@/utils/permission' // 权限判断函数
import treeTable from '@/components/TreeTable'
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del } from '@/api/permission'
import { getPermissionTree } from '@/api/permission'
import { parseTime } from '@/utils/index'
@@ -74,11 +74,11 @@ export default {
if (value) { this.params['name'] = value }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -87,7 +87,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},

View File

@@ -77,10 +77,8 @@ export default {
duration: 2500
})
this.loading = false
setTimeout(() => {
this.$parent.$parent.init()
this.$parent.$parent.getPermissions()
}, 200)
this.$parent.$parent.init()
this.$parent.$parent.getPermissions()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
@@ -95,10 +93,8 @@ export default {
duration: 2500
})
this.loading = false
setTimeout(() => {
this.sup_this.init()
this.sup_this.getPermissions()
}, 200)
this.sup_this.init()
this.sup_this.getPermissions()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)

View File

@@ -12,18 +12,18 @@
</el-table-column>
<el-table-column label="操作" width="150px" align="center">
<template slot-scope="scope">
<edit v-if="checkPermission(['ADMIN','ROLE_ALL','ROLE_EDIT'])" :permissions="permissions" :data="scope.row" :sup_this="sup_this"/>
<edit v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_EDIT'])" :permissions="permissions" :data="scope.row" :sup_this="sup_this"/>
<el-popover
v-if="checkPermission(['ADMIN','ROLE_ALL','ROLE_DELETE'])"
v-model="scope.row.delPopover"
v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_DELETE'])"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -40,7 +40,7 @@
<script>
import checkPermission from '@/utils/permission'
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del } from '@/api/role'
import { getPermissionTree } from '@/api/permission'
import { parseTime } from '@/utils/index'
@@ -72,11 +72,11 @@ export default {
if (value) { this.params['name'] = value }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -85,7 +85,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},

View File

@@ -6,7 +6,7 @@
<!-- 新增 -->
<div style="display: inline-block;margin: 0px 2px;">
<el-button
v-if="checkPermission(['ADMIN','ROLE_ALL','ROLE_CREATE'])"
v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_CREATE'])"
class="filter-item"
size="mini"
type="primary"

View File

@@ -28,15 +28,15 @@
</el-button>
<el-popover
v-if="checkPermission(['ADMIN','JOB_ALL','JOB_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="200">
<p>确定停止并删除该任务吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="text" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" type="text" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -53,7 +53,7 @@
<script>
import checkPermission from '@/utils/permission'
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del, updateIsPause, execution } from '@/api/timing'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
@@ -106,11 +106,11 @@ export default {
console.log(err.response.data.message)
})
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -119,7 +119,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
}

View File

@@ -15,7 +15,11 @@
<el-table-column :show-overflow-tooltip="true" prop="methodName" width="80px" label="执行方法"/>
<el-table-column :show-overflow-tooltip="true" prop="params" width="80px" label="参数"/>
<el-table-column :show-overflow-tooltip="true" prop="cronExpression" width="100px" label="cron表达式"/>
<el-table-column :show-overflow-tooltip="true" prop="exceptionDetail" width="90px" label="异常详情"/>
<el-table-column prop="createTime" label="异常详情" width="90px">
<template slot-scope="scope">
<el-button v-show="scope.row.exceptionDetail" size="mini" type="text" @click="info(scope.row.exceptionDetail)">查看详情</el-button>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" align="center" prop="time" width="100px" label="耗时(毫秒)"/>
<el-table-column align="center" prop="isSuccess" width="80px" label="状态">
<template slot-scope="scope">
@@ -29,6 +33,11 @@
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="errorDialog" append-to-body style="margin-left: 100px" title="异常详情" width="85%">
<span>
{{ errorInfo }}
</span>
</el-dialog>
<!--分页组件-->
<el-pagination
:total="total"
@@ -42,12 +51,13 @@
<script>
import checkPermission from '@/utils/permission'
import initData from '../../../../mixins/initData'
import initData from '@/mixins/initData'
import { parseTime } from '@/utils/index'
export default {
mixins: [initData],
data() {
return {
errorInfo: '', errorDialog: false,
dialog: false, delLoading: false, sup_this: this,
enabledTypeOptions: [
{ key: 'true', display_name: '成功' },
@@ -78,6 +88,10 @@ export default {
if (value) { this.params['jobName'] = value }
if (isSuccess !== '' && isSuccess !== null) { this.params['isSuccess'] = isSuccess }
return true
},
info(errorInfo) {
this.errorInfo = errorInfo
this.errorDialog = true
}
}
}

View File

@@ -104,6 +104,7 @@ export default {
}
}, 1000)
}).catch(err => {
this.resetForm()
this.codeLoading = false
console.log(err.response.data.message)
})

View File

@@ -25,15 +25,15 @@
<edit v-if="checkPermission(['ADMIN','USER_ALL','USER_EDIT'])" :data="scope.row" :roles="roles" :sup_this="sup_this"/>
<el-popover
v-if="checkPermission(['ADMIN','USER_ALL','USER_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -50,7 +50,7 @@
<script>
import checkPermission from '@/utils/permission'
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del } from '@/api/user'
import { getRoleTree } from '@/api/role'
import { parseTime } from '@/utils/index'
@@ -85,11 +85,11 @@ export default {
if (enabled !== '' && enabled !== null) { this.params['enabled'] = enabled }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -98,7 +98,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},

View File

@@ -22,15 +22,15 @@
<template slot-scope="scope">
<el-popover
v-if="checkPermission(['ADMIN','PICTURE_ALL','PICTURE_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -47,7 +47,7 @@
<script>
import checkPermission from '@/utils/permission' // 权限判断函数
import initData from '../../../mixins/initData'
import initData from '@/mixins/initData'
import { del } from '@/api/picture'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
@@ -76,11 +76,11 @@ export default {
if (value) { this.params['filename'] = value }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -89,7 +89,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
}

View File

@@ -25,15 +25,15 @@
@click="download(scope.row.id)">下载</el-button>
<el-popover
v-if="checkPermission(['ADMIN','PICTURE_ALL','PICTURE_DELETE'])"
v-model="scope.row.delPopover"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="scope.row.delPopover = false">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.$index, scope.row)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="danger" size="mini" @click="scope.row.delPopover = true">删除</el-button>
<el-button slot="reference" type="danger" size="mini">删除</el-button>
</el-popover>
</template>
</el-table-column>
@@ -50,7 +50,7 @@
<script>
import checkPermission from '@/utils/permission' // 权限判断函数
import initData from '../../../../mixins/initData'
import initData from '@/mixins/initData'
import { del, download } from '@/api/qiniu'
import { parseTime } from '@/utils/index'
import eHeader from './module/header'
@@ -93,11 +93,11 @@ export default {
if (value) { this.params['key'] = value }
return true
},
subDelete(index, row) {
subDelete(id) {
this.delLoading = true
del(row.id).then(res => {
del(id).then(res => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
this.init()
this.$notify({
title: '删除成功',
@@ -106,7 +106,7 @@ export default {
})
}).catch(err => {
this.delLoading = false
row.delPopover = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},