rev:代码合并

This commit is contained in:
2024-02-27 09:12:00 +08:00
305 changed files with 9345 additions and 5458 deletions

View File

@@ -4,7 +4,7 @@
<el-col style="margin-bottom: 10px">
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">字段配置{{ tableName }}</span>
<span class="role-span">字段配置{{ table_name }}</span>
<el-button
:loading="genLoading"
icon="el-icon-s-promotion"
@@ -34,8 +34,8 @@
</div>
<el-form size="mini" label-width="90px">
<el-table v-loading="loading" :data="data" :max-height="tableHeight" size="mini" style="width: 100%;margin-bottom: 15px">
<el-table-column prop="columnName" label="字段名称" />
<el-table-column prop="columnType" label="字段类型" />
<el-table-column prop="column_name" label="字段名称" />
<el-table-column prop="column_type" label="字段类型" />
<el-table-column prop="remark" label="字段描述">
<template slot-scope="scope">
<el-input v-model="data[scope.$index].remark" size="mini" class="edit-input" />
@@ -43,22 +43,22 @@
</el-table-column>
<el-table-column align="center" label="必填" width="70px">
<template slot-scope="scope">
<el-checkbox v-model="data[scope.$index].notNull" />
<el-checkbox v-model="data[scope.$index].not_null" />
</template>
</el-table-column>
<el-table-column align="center" label="列表" width="70px">
<template slot-scope="scope">
<el-checkbox v-model="data[scope.$index].listShow" />
<el-checkbox v-model="data[scope.$index].list_show" />
</template>
</el-table-column>
<el-table-column align="center" label="表单" width="70px">
<template slot-scope="scope">
<el-checkbox v-model="data[scope.$index].formShow" />
<el-checkbox v-model="data[scope.$index].form_show" />
</template>
</el-table-column>
<el-table-column label="表单类型">
<template slot-scope="scope">
<el-select v-model="data[scope.$index].formType" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-select v-model="data[scope.$index].form_type" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-option
label="文本框"
value="Input"
@@ -84,7 +84,7 @@
</el-table-column>
<el-table-column label="查询方式">
<template slot-scope="scope">
<el-select v-model="data[scope.$index].queryType" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-select v-model="data[scope.$index].query_type" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-option
label="="
value="="
@@ -106,8 +106,8 @@
value="Like"
/>
<el-option
label="NotNull"
value="NotNull"
label="not_null"
value="not_null"
/>
<el-option
label="BetWeen"
@@ -118,7 +118,7 @@
</el-table-column>
<el-table-column label="日期注解">
<template slot-scope="scope">
<el-select v-model="data[scope.$index].dateAnnotation" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-select v-model="data[scope.$index].date_annotation" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-option
label="自动创建时间"
value="CreationTimestamp"
@@ -132,8 +132,11 @@
</el-table-column>
<el-table-column label="关联字典">
<template slot-scope="scope">
<el-select v-model="data[scope.$index].dictName" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-option v-for="item in dicts" :key="item.id" :label="item.remark === '' ? item.name : item.remark" :value="item.name" />
<el-select v-model="data[scope.$index].dict_name" filterable class="edit-input" clearable size="mini" placeholder="请选择">
<el-option v-for="item in dicts" :key="item.dict_id" :label="item.code === '' ? item.name : item.code" :value="item.code">
<span style="float: left">{{ item.code }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.name }}</span>
</el-option>
</el-select>
</template>
</el-table-column>
@@ -159,8 +162,8 @@
<el-input v-model="form.author" style="width: 40%" />
<span style="color: #C0C0C0;margin-left: 10px;">类上面的作者名称</span>
</el-form-item>
<el-form-item label="模块名称" prop="moduleName">
<el-input v-model="form.moduleName" style="width: 40%" />
<el-form-item label="模块名称" prop="module_name">
<el-input v-model="form.module_name" style="width: 40%" />
<span style="color: #C0C0C0;margin-left: 10px;">模块的名称请选择项目中已存在的模块</span>
</el-form-item>
<el-form-item label="至于包下" prop="pack">
@@ -168,7 +171,7 @@
<span style="color: #C0C0C0;margin-left: 10px;">项目包的名称生成的代码放到哪个包里面</span>
</el-form-item>
<el-form-item label="接口名称" prop="apiAlias">
<el-input v-model="form.apiAlias" style="width: 40%" />
<el-input v-model="form.api_alias" style="width: 40%" />
<span style="color: #C0C0C0;margin-left: 10px;">接口的名称用于控制器与接口文档中</span>
</el-form-item>
<el-form-item label="前端路径" prop="path">
@@ -208,8 +211,8 @@ export default {
mixins: [crud],
data() {
return {
activeName: 'first', tableName: '', tableHeight: 550, columnLoading: false, configLoading: false, dicts: [], syncLoading: false, genLoading: false,
form: { id: null, tableName: '', author: '', pack: '', path: '', moduleName: '', cover: 'false', apiPath: '', prefix: '', apiAlias: null },
activeName: 'first', table_name: '', tableHeight: 550, columnLoading: false, configLoading: false, dicts: [], syncLoading: false, genLoading: false,
form: { id: null, table_name: '', author: '', pack: '', path: '', module_name: '', cover: 'false', apiPath: '', prefix: '', api_alias: null },
rules: {
author: [
{ required: true, message: '作者不能为空', trigger: 'blur' }
@@ -217,13 +220,13 @@ export default {
pack: [
{ required: true, message: '包路径不能为空', trigger: 'blur' }
],
moduleName: [
module_name: [
{ required: true, message: '包路径不能为空', trigger: 'blur' }
],
path: [
{ required: true, message: '前端路径不能为空', trigger: 'blur' }
],
apiAlias: [
api_alias: [
{ required: true, message: '接口名称不能为空', trigger: 'blur' }
],
cover: [
@@ -234,10 +237,10 @@ export default {
},
created() {
this.tableHeight = document.documentElement.clientHeight - 385
this.tableName = this.$route.params.tableName
this.table_name = this.$route.params.tableName
this.$nextTick(() => {
this.init()
get(this.tableName).then(data => {
get(this.table_name).then(data => { // 获取作者等信息
this.form = data
this.form.cover = this.form.cover.toString()
})
@@ -249,7 +252,7 @@ export default {
methods: {
beforeInit() {
this.url = 'api/generator/columns'
const tableName = this.tableName
const tableName = this.table_name
this.params = { tableName }
return true
},
@@ -281,7 +284,7 @@ export default {
},
sync() {
this.syncLoading = true
sync([this.tableName]).then(() => {
sync([this.table_name]).then(() => {
this.init()
this.notify('同步成功', 'success')
this.syncLoading = false
@@ -294,7 +297,7 @@ export default {
save(this.data).then(res => {
this.notify('保存成功', 'success')
// 生成代码
generator(this.tableName, 0).then(data => {
generator(this.table_name, 0).then(data => {
this.genLoading = false
this.notify('生成成功', 'success')
}).catch(err => {
@@ -311,15 +314,15 @@ export default {
</script>
<style rel="stylesheet/scss" lang="scss">
.edit-input {
.el-input__inner {
border: 1px solid #e5e6e7;
}
.edit-input {
.el-input__inner {
border: 1px solid #e5e6e7;
}
}
</style>
<style scoped>
::v-deep .input-with-select .el-input-group__prepend {
background-color: #fff;
}
::v-deep .input-with-select .el-input-group__prepend {
background-color: #fff;
}
</style>

View File

@@ -23,29 +23,29 @@
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column show-overflow-tooltip prop="tableName" label="表名" />
<el-table-column show-overflow-tooltip prop="table_name" label="表名" />
<el-table-column show-overflow-tooltip prop="engine" label="数据库引擎" />
<el-table-column show-overflow-tooltip prop="coding" label="字符编码集" />
<el-table-column show-overflow-tooltip prop="remark" label="备注" />
<el-table-column prop="createTime" label="创建日期">
<el-table-column prop="create_time" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="160px" align="center" fixed="right">
<template slot-scope="scope">
<el-button size="mini" style="margin-right: 2px" type="text">
<router-link :to="'/sys-tools/generator/preview/' + scope.row.tableName">
<router-link :to="'/sys-tools/generator/preview/' + scope.row.table_name">
预览
</router-link>
</el-button>
<el-button size="mini" style="margin-left: -1px;margin-right: 2px" type="text" @click="toDownload(scope.row.tableName)">下载</el-button>
<el-button size="mini" style="margin-left: -1px;margin-right: 2px" type="text" @click="toDownload(scope.row.table_name)">下载</el-button>
<el-button size="mini" style="margin-left: -1px;margin-right: 2px" type="text">
<router-link :to="'/sys-tools/generator/config/' + scope.row.tableName">
<router-link :to="'/sys-tools/generator/config/' + scope.row.table_name">
配置
</router-link>
</el-button>
<el-button type="text" style="margin-left: -1px" size="mini" @click="toGen(scope.row.tableName)">生成</el-button>
<el-button type="text" style="margin-left: -1px" size="mini" @click="toGen(scope.row.table_name)">生成</el-button>
</template>
</el-table-column>
</el-table>
@@ -79,9 +79,9 @@ export default {
this.crud.optShow = { add: false, edit: false, del: false, download: false }
},
methods: {
toGen(tableName) {
toGen(table_name) {
// 生成代码
generator(tableName, 0).then(data => {
generator(table_name, 0).then(data => {
this.$notify({
title: '生成成功',
type: 'success',
@@ -89,16 +89,16 @@ export default {
})
})
},
toDownload(tableName) {
toDownload(table_name) {
// 打包下载
generator(tableName, 2).then(data => {
downloadFile(data, tableName, 'zip')
generator(table_name, 2).then(data => {
downloadFile(data, table_name, 'zip')
})
},
sync() {
const tables = []
this.crud.selections.forEach(val => {
tables.push(val.tableName)
tables.push(val.table_name)
})
this.syncLoading = true
sync(tables).then(() => {

View File

@@ -31,18 +31,18 @@
</template>
</el-table-column>
<el-table-column prop="username" label="用户名" />
<el-table-column prop="requestIp" label="IP" />
<el-table-column prop="request_ip" label="IP" />
<el-table-column show-overflow-tooltip prop="address" label="IP来源" />
<el-table-column prop="description" label="描述" show-overflow-tooltip />
<el-table-column prop="browser" label="浏览器" min-width="120" show-overflow-tooltip />
<el-table-column prop="createTime" label="创建日期" min-width="100" show-overflow-tooltip>
<el-table-column prop="create_time" label="创建日期" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
<el-table-column label="异常详情" width="100px">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="info(scope.row.id)">查看详情</el-button>
<el-button size="mini" type="text" @click="info(scope.row.log_id)">查看详情</el-button>
</template>
</el-table-column>
</el-table>
@@ -83,9 +83,9 @@ export default {
},
methods: {
// 获取异常详情
info(id) {
info(log_id) {
this.dialog = true
getErrDetail(id).then(res => {
getErrDetail(log_id).then(res => {
this.errorInfo = res.exception
})
},

View File

@@ -31,7 +31,7 @@
</template>
</el-table-column>
<el-table-column prop="username" label="用户名" />
<el-table-column prop="requestIp" label="IP" />
<el-table-column prop="request_ip" label="IP" />
<el-table-column show-overflow-tooltip prop="address" label="IP来源" />
<el-table-column prop="description" label="描述" show-overflow-tooltip />
<el-table-column prop="browser" label="浏览器" min-width="120" show-overflow-tooltip />
@@ -42,9 +42,9 @@
<el-tag v-else type="danger">{{ scope.row.time }}ms</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" width="180px">
<el-table-column prop="create_time" label="创建日期" width="180px">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
</el-table>

View File

@@ -15,7 +15,7 @@
</el-form-item>
<el-form-item label="排序">
<el-input-number
v-model.number="form.orderSort"
v-model.number="form.order_sort"
:min="0"
:max="999"
controls-position="right"
@@ -26,7 +26,7 @@
<el-input v-model="form.remark" style="width: 370px;" />
</el-form-item>
<el-form-item label="是否启用">
<el-switch v-model="form.isUsed" active-value="1" inactive-value="0" />
<el-switch v-model="form.is_used" active-value="1" inactive-value="0" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -37,19 +37,19 @@
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column v-if="false" prop="permissionId" label="permissionId" :min-width="flexWidth('permissionId',crud.data,'permissionId')" />
<el-table-column v-if="false" prop="permission_id" label="permission_id" :min-width="flexWidth('permission_id',crud.data,'permission_id')" />
<el-table-column prop="code" label="编码" :min-width="flexWidth('code',crud.data,'编码')" />
<el-table-column prop="name" label="名称" :min-width="flexWidth('name',crud.data,'名称')" />
<el-table-column prop="orderSort" label="排序" :min-width="flexWidth('orderSort',crud.data,'排序')" />
<el-table-column prop="order_sort" label="排序" :min-width="flexWidth('order_sort',crud.data,'排序')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="createName" label="创建人" :min-width="flexWidth('createName',crud.data,'创建人')" />
<el-table-column prop="isUsed" label="是否启用" :min-width="flexWidth('isUsed',crud.data,'是否启用')" >
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
<el-table-column prop="is_used" label="是否启用" :min-width="flexWidth('is_used',crud.data,'是否启用')" >
<template slot-scope="scope">
{{ scope.row.isUsed==1?'是':'否' }}
{{ scope.row.is_used==1?'是':'否' }}
</template>
</el-table-column>
<el-table-column prop="createName" label="创建" :min-width="flexWidth('createName',crud.data,'创建人')" />
<el-table-column prop="updateTime" label="修改时间" :min-width="flexWidth('updateTime',crud.data,'修改时间')" />
<el-table-column prop="update_name" label="更新" :min-width="flexWidth('update_name',crud.data,'创建人')" />
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')" />
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope">
<udOperation
@@ -73,13 +73,13 @@ import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { permissionId: null, code: null, name: null, orderSort: '1', remark: null, createName: null, isUsed: '1', createId: null, createTime: null, updateTime: null, updateId: null, updateName: null }
const defaultForm = { permission_id: null, code: null, name: null, order_sort: '1', remark: null, createName: null, is_used: '1', createId: null, createTime: null, updateTime: null, updateId: null, updateName: null }
export default {
name: 'DataPermission',
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({ title: '数据权限', url: 'api/dataPermission', idField: 'permissionId', sort: 'order_sort,asc', crudMethod: { ...crudDataPermission }})
return CRUD({ title: '数据权限', url: 'api/dataPermission', idField: 'permission_id', sort: 'order_sort,asc', crudMethod: { ...crudDataPermission }})
},
data() {
return {

View File

@@ -14,7 +14,7 @@
@keyup.enter.native="crud.toQuery"
/>
<el-select
v-model="query.isUsed"
v-model="query.is_used"
clearable
size="mini"
placeholder="状态"
@@ -38,22 +38,22 @@
>
<el-form ref="form" inline :model="form" :rules="rules" size="mini" label-width="80px">
<el-form-item label="部门编码" prop="code">
<el-input v-model="form.code" :disabled="true" style="width: 370px;" />
<el-input v-model="form.code" :disabled="crud.status.edit" style="width: 370px;" />
</el-form-item>
<el-form-item label="部门名称" prop="name">
<el-input v-model="form.name" style="width: 370px;" />
</el-form-item>
<el-form-item label="部门排序" prop="deptSort">
<el-form-item label="部门排序" prop="dept_sort">
<el-input-number
v-model.number="form.deptSort"
v-model.number="form.dept_sort"
:min="0"
:max="999"
controls-position="right"
style="width: 370px;"
/>
</el-form-item>
<el-form-item label="外部标识" prop="extId">
<el-input v-model="form.extId" style="width: 370px;" />
<el-form-item label="外部标识" prop="ext_id">
<el-input v-model="form.ext_id" style="width: 370px;" />
</el-form-item>
<el-form-item label="顶级部门">
<el-radio-group v-model="form.isTop" style="width: 140px">
@@ -61,9 +61,9 @@
<el-radio label="0">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" prop="isUesd">
<el-form-item label="状态" prop="is_used">
<el-switch
v-model="form.isUsed"
v-model="form.is_used"
active-color="#409EFF"
inactive-color="#F56C6C"
active-value = 'true'
@@ -90,11 +90,12 @@
<el-table
ref="table"
v-loading="crud.loading"
:default-sort = "{prop: 'dept_sort', order: 'ascending'}"
lazy
:load="getDeptDatas"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
:tree-props="{children: 'children', hasChildren: 'has_children'}"
:data="crud.data"
row-key="deptId"
row-key="dept_id"
@select="crud.selectChange"
@select-all="crud.selectAllChange"
@selection-change="crud.selectionChangeHandler"
@@ -102,19 +103,19 @@
<el-table-column :selectable="checkboxT" type="selection" width="55" />
<!-- <el-table-column label="编码" prop="code" />-->
<el-table-column label="名称" prop="name" />
<el-table-column label="排序" prop="deptSort" />
<el-table-column label="状态" align="center" prop="isUsed">
<el-table-column label="排序" prop="dept_sort" />
<el-table-column label="状态" align="center" prop="is_used">
<template slot-scope="scope">
<el-switch
v-model="scope.row.isUsed"
v-model="scope.row.is_used"
:disabled="scope.row.id === 1"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.isUsed,)"
@change="changeEnabled(scope.row, scope.row.is_used)"
/>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" />
<el-table-column prop="create_time" label="创建日期" />
<el-table-column
v-permission="['admin','dept:edit','dept:del']"
label="操作"
@@ -136,7 +137,7 @@
</template>
<script>
import crudDept from '@/views/system/dept/dept'
import crudDept from './dept'
import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
@@ -150,15 +151,15 @@ const defaultForm = {
isTop: '1',
sub_count: 0,
pid: null,
deptSort: 999,
isUsed: true,
extId: null
dept_sort: 999,
is_used: true,
ext_id: null
}
export default {
name: 'Dept',
components: { Treeselect, crudOperation, rrOperation, udOperation },
cruds() {
return CRUD({ title: '部门', idField: 'deptId', url: 'api/dept/vo', crudMethod: { ...crudDept }})
return CRUD({ title: '部门', idField: 'dept_id', url: 'api/dept/vo', crudMethod: { ...crudDept }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
// 设置数据字典
@@ -170,7 +171,7 @@ export default {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
],
deptSort: [
dept_sort: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
},
@@ -187,7 +188,7 @@ export default {
},
methods: {
getDeptDatas(tree, treeNode, resolve) {
const params = { pid: tree.deptId }
const params = { pid: tree.dept_id }
setTimeout(() => {
crudDept.getDeptvo(params).then(res => {
resolve(res.content)
@@ -201,7 +202,7 @@ export default {
} else {
form.isTop = '1'
}
form.isUsed = `${form.isUsed}`
form.is_used = `${form.is_used}`
if (form.pid != null) {
this.getSupDepts(form.pid)
} else {
@@ -220,15 +221,15 @@ export default {
if (data.children) {
this.buildDepts(data.children)
}
if (data.hasChildren && !data.children) {
if (data.has_children && !data.children) {
data.children = null
}
})
},
getDepts() {
crudDept.getDeptvo({ isUsed: true }).then(res => {
crudDept.getDeptvo({ is_used: true }).then(res => {
this.depts = res.content.map(function(obj) {
if (obj.hasChildren) {
if (obj.has_children) {
obj.children = null
}
return obj
@@ -238,7 +239,7 @@ export default {
// 获取弹窗内部门数据
loadDepts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudDept.getDeptvo({ isUsed: true, pid: parentNode.deptId }).then(res => {
crudDept.getDeptvo({ is_used: true, pid: parentNode.dept_id }).then(res => {
parentNode.children = res.content.map(function(obj) {
obj.children = null
return obj
@@ -265,8 +266,8 @@ export default {
},
// 改变状态
changeEnabled(data, val) {
const satus = this.enabledTypeOptions.find(item => { return item.key == data.isUsed })
const satus = this.enabledTypeOptions.find(item => { return item.key == data.is_used })
debugger
this.$confirm('此操作将 "' + satus.display_name + '" ' + data.name + '部门, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@@ -276,7 +277,7 @@ export default {
this.crud.notify(satus.display_name + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
})
}).catch(() => {
data.isUsed = !data.isUsed
data.is_used = !data.is_used
})
},
checkboxT(row, rowIndex) {
@@ -284,7 +285,7 @@ export default {
},
normalizer(node) {
return {
id: node.deptId,
id: node.dept_id,
label: node.name,
children: node.children
}

View File

@@ -38,7 +38,7 @@
</el-form-item>
<el-form-item label="排序" prop="dict_sort">
<el-input-number
v-model.number="form.dictSort"
v-model.number="form.dict_sort"
:min="0"
:max="999"
controls-position="right"
@@ -74,7 +74,7 @@
</el-table-column>
<el-table-column prop="label" label="字典标签" align="center" width="120" show-overflow-tooltip />
<el-table-column prop="value" label="字典值" align="center" width="60" />
<el-table-column prop="dictSort" label="排序" align="center" width="65" />
<el-table-column prop="dict_sort" label="排序" align="center" width="65" />
<el-table-column prop="para1" label="参数1" align="center" width="65" />
<el-table-column prop="para2" label="参数2" align="center" width="65" />
<el-table-column prop="para3" label="参数3" align="center" width="65" />
@@ -106,7 +106,7 @@ import pagination from '@crud/Pagination'
import rrOperation from '@crud/RR.operation'
import udOperation from '@crud/UD.operation'
const defaultForm = { dictId: null, name: null, label: null, value: null, dictSort: null, dictType: null, para1: null, para2: null, para3: null, createId: null, createName: null, createTime: null, updateId: null, updateName: null, updateTime: null }
const defaultForm = { dict_id: null, name: null, label: null, value: null, dict_sort: null, dictType: null, para1: null, para2: null, para3: null, createId: null, createName: null, createTime: null, updateId: null, updateName: null, updateTime: null }
export default {
components: { pagination, rrOperation, udOperation },
@@ -116,8 +116,8 @@ export default {
title: '字典详情',
url: 'api/dict/dictDetail',
query: { code: '' },
idField: 'dictId',
sort: ['dictSort,asc', 'dictId,desc'],
idField: 'dict_id',
sort: ['dict_sort,asc', 'dict_id,desc'],
crudMethod: { ...crudDictDetail },
optShow: {
add: true,
@@ -133,11 +133,11 @@ export default {
presenter(),
header(),
form(function() {
return Object.assign({ dict: { dictId: this.dictId }}, defaultForm)
return Object.assign({ dict: { dict_id: this.dict_id }}, defaultForm)
})],
data() {
return {
dictId: null,
dict_id: null,
rules: {
label: [
{ required: true, message: '请输入字典标签', trigger: 'blur' }
@@ -145,7 +145,7 @@ export default {
value: [
{ required: true, message: '请输入字典值', trigger: 'blur' }
],
dictSort: [
dict_sort: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
},

View File

@@ -1,7 +1,14 @@
<template>
<div class="app-container">
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title" width="500px">
<el-dialog
append-to-body
:close-on-click-modal="false"
:before-close="crud.cancelCU"
:visible="crud.status.cu > 0"
:title="crud.status.title"
width="500px"
>
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
<el-form-item label="字典编码" prop="code">
<el-input v-model="form.code" style="width: 370px;" />
@@ -23,7 +30,15 @@
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-input v-model="query.blurry" clearable size="mini" placeholder="输入名称或者描述搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-input
v-model="query.blurry"
clearable
size="mini"
placeholder="输入名称或者描述搜索"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
<rrOperation />
</div>
<crudOperation :permission="permission" />
@@ -36,11 +51,18 @@
highlight-current-row
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
@current-change="handleCurrentChange">
@current-change="handleCurrentChange"
>
<el-table-column type="selection" width="55" />
<el-table-column show-overflow-tooltip prop="code" label="编码" />
<el-table-column show-overflow-tooltip prop="name" label="名称" />
<el-table-column v-permission="['admin','dict:edit','dict:del']" label="操作" width="130px" align="center" fixed="right">
<el-table-column
v-permission="['admin','dict:edit','dict:del']"
label="操作"
width="130px"
align="center"
fixed="right"
>
<template slot-scope="scope">
<udOperation
:data="scope.row"
@@ -66,7 +88,8 @@
type="primary"
icon="el-icon-plus"
@click="$refs.dictDetail && $refs.dictDetail.crud.toAdd()"
>新增</el-button>
>新增
</el-button>
</div>
<dictDetail ref="dictDetail" :permission="permission" />
</el-card>
@@ -86,14 +109,25 @@ import pagination from '@crud/Pagination'
import rrOperation from '@crud/RR.operation'
import udOperation from '@crud/UD.operation'
const defaultForm = { dictId: null, code: null, name: null, label: null, value: null, dictSort: null, dictType: null, para1: null, para2: null, para3: null, createId: null, createName: null, createTime: null, updateId: null, updateName: null, updateTime: null }
const defaultForm = {
dict_id: null,
code: null,
name: null,
label: null,
value: null,
dict_sort: null,
dict_type: null,
para1: null,
para2: null,
para3: null
}
export default {
name: 'Dict',
components: { crudOperation, pagination, rrOperation, udOperation, dictDetail },
cruds() {
return [
CRUD({ title: '字典', url: 'api/dict', idField: 'dictId', crudMethod: { ...crudDict }})
CRUD({ title: '字典', url: 'api/dict', idField: 'dict_id', crudMethod: { ...crudDict }})
]
},
mixins: [presenter(), header(), form(defaultForm)],

View File

@@ -67,10 +67,10 @@
<el-radio-button label="0">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1' " label="菜单隐藏" prop="hidden">
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1' " label="菜单可见" prop="hidden">
<el-radio-group v-model="form.hidden" size="mini">
<el-radio-button label=true>是</el-radio-button>
<el-radio-button label=false>否</el-radio-button>
<el-radio-button label="1">是</el-radio-button>
<el-radio-button label="0">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单标题" prop="title">
@@ -89,9 +89,9 @@
<el-form-item v-if="form.type.toString() !== '1' && form.type.toString() !== '2'" label="路由地址" prop="path">
<el-input v-model="form.path" placeholder="路由地址" style="width: 190px;" />
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<el-form-item label="菜单排序" prop="menu_sort">
<el-input-number
v-model.number="form.menuSort"
v-model.number="form.menu_sort"
:min="0"
:max="999"
controls-position="right"
@@ -130,7 +130,7 @@
:auto-load-root-options="false"
:data="crud.data"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
row-key="menuId"
row-key="menu_id"
@select="crud.selectChange"
@select-all="crud.selectAllChange"
@@ -144,9 +144,9 @@
<svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" />
</template>
</el-table-column>
<el-table-column prop="menuSort" align="center" label="排序" :min-width="flexWidth('menuSort',crud.data,'排序')">
<el-table-column prop="menu_sort" align="center" label="排序" :min-width="flexWidth('menu_sort',crud.data,'排序')">
<template slot-scope="scope">
{{ scope.row.menuSort }}
{{ scope.row.menu_sort }}
</template>
</el-table-column>
<el-table-column prop="permission" label="权限标识" :min-width="flexWidth('permission',crud.data,'权限标识')" />
@@ -176,7 +176,7 @@
</template>
<script>
import crudMenu from '@/views/system/menu/menu'
import crudMenu from '../menu'
import IconSelect from '@/components/IconSelect'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
@@ -188,9 +188,9 @@ import udOperation from '@crud/UD.operation'
// crud交由presenter持有
const defaultForm = {
menuId: null,
menu_id: null,
title: null,
menuSort: 999,
menu_sort: 999,
path: null,
system_type: null,
category: null,
@@ -209,7 +209,7 @@ export default {
name: 'Menu',
components: { Treeselect, IconSelect, crudOperation, rrOperation, udOperation },
cruds() {
return CRUD({ title: '菜单', idField: 'menuId', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
return CRUD({ title: '菜单', idField: 'menu_id', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
@@ -222,7 +222,7 @@ export default {
},
normalizer(node) {
return {
id: node.menuId,
id: node.menu_id,
label: node.title,
children: node.children
}
@@ -241,37 +241,37 @@ export default {
// 新增与编辑前做的操作
[CRUD.HOOK.afterToCU](crud, form) {
this.menus = []
if (form.menuId) { // 修改
if (form.menu_id) { // 修改
if (!form.pid) { // 一级菜单一级的父级菜单的pid为0.
form.pid = 0
}
this.getSupDepts(form.menuId)
this.getSupDepts(form.menu_id)
} else { // 新增
this.menus.push({ menuId: 0, title: '顶级类目', children: null })
this.menus.push({ menu_id: 0, title: '顶级类目', children: null })
}
},
getMenus(tree, treeNode, resolve) {
const params = { pid: tree.menuId }
const params = { pid: tree.menu_id }
setTimeout(() => {
crudMenu.getMenus(params).then(res => {
resolve(res.content)
})
}, 100)
},
getSupDepts(menuId) {
crudMenu.getMenuSuperior(menuId).then(res => {
getSupDepts(menu_id) {
crudMenu.getMenuSuperior(menu_id).then(res => {
const children = res.map(function(obj) {
if (!obj.leaf && !obj.children) {
obj.children = null
}
return obj
})
this.menus = [{ menuId: 0, title: '顶级类目', children: children }]
this.menus = [{ menu_id: 0, title: '顶级类目', children: children }]
})
},
loadMenus({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudMenu.getMenusTree(parentNode.menuId).then(res => {
crudMenu.getMenusTree(parentNode.menu_id).then(res => {
parentNode.children = res.map(function(obj) {
if (!obj.leaf) {
obj.children = null

View File

@@ -14,7 +14,7 @@
@keyup.enter.native="queryBlurry"
/>
<el-select
v-model="query.systemType"
v-model="query.system_type"
style="width: 100px; height: 35px;top: -5px;"
placeholder="所属系统"
@change="changetype"
@@ -75,14 +75,14 @@
</el-form-item>
<el-form-item v-show="form.type.toString() === '3'" label="菜单缓存" prop="cache">
<el-radio-group v-model="form.cache" size="mini">
<el-radio-button label=true>是</el-radio-button>
<el-radio-button label=false>否</el-radio-button>
<el-radio-button label="true">是</el-radio-button>
<el-radio-button label="false">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1' " label="菜单隐藏" prop="hidden">
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1' " label="菜单可见" prop="hidden">
<el-radio-group v-model="form.hidden" size="mini">
<el-radio-button label=true>是</el-radio-button>
<el-radio-button label=false>否</el-radio-button>
<el-radio-button label="false">是</el-radio-button>
<el-radio-button label="true">否</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单标题" prop="title">
@@ -101,17 +101,17 @@
<el-form-item v-if="form.type.toString() !== '1' && form.type.toString() !== '2'" label="路由地址" prop="path">
<el-input v-model="form.path" placeholder="路由地址" style="width: 190px;" />
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<el-form-item label="菜单排序" prop="menu_sort">
<el-input-number
v-model.number="form.menuSort"
v-model.number="form.menu_sort"
:min="0"
:max="999"
controls-position="right"
style="width: 190px;"
/>
</el-form-item>
<el-form-item v-show="!form.iframe && form.type.toString() === '3' " label="组件名称" prop="componentName">
<el-input v-model="form.componentName" style="width: 190px;" placeholder="匹配组件内Name字段" />
<el-form-item v-show="!form.iframe && form.type.toString() === '3' " label="组件名称" prop="component_name">
<el-input v-model="form.component_name" style="width: 190px;" placeholder="匹配组件内Name字段" />
</el-form-item>
<el-form-item v-show="!form.iframe && (form.type.toString() === '2' ||form.type.toString() === '3' ) " label="组件路径" prop="component">
<el-input v-model="form.component" style="width: 190px;" placeholder="组件路径" />
@@ -141,8 +141,8 @@
:load="getMenus"
:auto-load-root-options="false"
:data="crud.data"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
row-key="menuId"
:tree-props="{children: 'children', hasChildren: 'has_children'}"
row-key="menu_id"
@select="crud.selectChange"
@select-all="crud.selectAllChange"
@@ -150,9 +150,9 @@
>
<el-table-column type="selection" width="55" />
<el-table-column label="菜单标题" prop="title" :min-width="100" />
<el-table-column label="所属系统" prop="systemType" :min-width="flexWidth('systemType',crud.data,'所属系统')">
<el-table-column label="所属系统" prop="system_type" :min-width="flexWidth('system_type',crud.data,'所属系统')">
<template slot-scope="scope">
{{ dict.label.system_type[scope.row.systemType] }} : {{scope.row.systemType}}
{{ dict.label.system_type[scope.row.system_type] }} : {{scope.row.system_type}}
</template>
</el-table-column>
<el-table-column prop="icon" label="图标" align="center" :min-width="flexWidth('icon',crud.data,'图标')">
@@ -160,9 +160,9 @@
<svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" />
</template>
</el-table-column>
<el-table-column prop="menuSort" align="center" label="排序" :min-width="flexWidth('menuSort',crud.data,'排序')">
<el-table-column prop="menu_sort" align="center" label="排序" :min-width="flexWidth('menu_sort',crud.data,'排序')">
<template slot-scope="scope">
{{ scope.row.menuSort }}
{{ scope.row.menu_sort }}
</template>
</el-table-column>
<el-table-column prop="permission" label="权限标识" :min-width="flexWidth('permission',crud.data,'权限标识')" />
@@ -185,7 +185,7 @@
<span v-else>是</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" :min-width="flexWidth('createTime',crud.data,'创建日期')" />
<el-table-column prop="create_time" label="创建日期" :min-width="flexWidth('create_time',crud.data,'创建日期')" />
<el-table-column
v-permission="['admin','menu:edit','menu:del']"
label="操作"
@@ -206,7 +206,7 @@
</template>
<script>
import crudMenu from '@/views/system/menu/menu'
import crudMenu from './menu'
import IconSelect from '@/components/IconSelect'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
@@ -220,20 +220,20 @@ import Dict from '../../../components/Dict/Dict'
// crud交由presenter持有
const defaultForm = {
menuId: null,
menu_id: null,
title: null,
menuSort: 999,
menu_sort: 999,
path: null,
systemType: null,
system_type: null,
category: null,
component: null,
componentName: null,
component_name: null,
iframe: false,
roles: [],
pid: 0,
icon: null,
cache: 0,
hidden: 0,
cache: false,
hidden: false,
type: 0,
permission: null
}
@@ -241,7 +241,7 @@ export default {
name: 'Menu',
components: { Treeselect, IconSelect, crudOperation, rrOperation, udOperation, DateRangePicker },
cruds() {
return CRUD({ title: '菜单', idField: 'menuId', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
return CRUD({ title: '菜单', idField: 'menu_id', sort: 'menu_id,asc', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['system_type'],
@@ -268,7 +268,7 @@ export default {
methods: {
normalizer(node) {
return {
id: node.menuId,
id: node.menu_id,
label: node.title,
children: node.children
}
@@ -280,7 +280,7 @@ export default {
this.crud.toQuery()
},
changetype() {
const sysType = this.dict.dict.system_type[this.query.systemType]
const sysType = this.dict.dict.system_type[this.query.system_type]
this.query.pid = sysType.para1
this.crud.toQuery()
},
@@ -292,15 +292,14 @@ export default {
},
// 新增与编辑前做的操作
[CRUD.HOOK.afterToCU](crud, form) {
console.log(this.dict)
this.menus = []
if (form.menuId) { // 修改
if (form.menu_id) { // 修改
if (!form.pid) { // 一级菜单一级的父级菜单的pid为0.
form.pid = 0
}
this.getSupMenus(form.menuId)
this.getSupMenus(form.menu_id)
} else { // 新增
this.menus.push({ menuId: 0, title: '顶级类目', children: null })
this.menus.push({ menu_id: 0, title: '顶级类目', children: null })
}
},
[CRUD.HOOK.afterSubmit](crud, form) {
@@ -322,27 +321,27 @@ export default {
}
},
getMenus(tree, treeNode, resolve) {
const params = { pid: tree.menuId, systemType: tree.systemType }
const params = { pid: tree.menu_id, system_type: tree.system_type }
setTimeout(() => {
crudMenu.getMenus(params).then(res => {
resolve(res.content)
})
}, 100)
},
getSupMenus(menuId) {
crudMenu.getMenuSuperior(menuId).then(res => {
getSupMenus(menu_id) {
crudMenu.getMenuSuperior(menu_id).then(res => {
const children = res.map(function(obj) {
if (!obj.leaf && !obj.children) {
obj.children = null
}
return obj
})
this.menus = [{ menuId: 0, title: '顶级类目', children: children }]
this.menus = [{ menu_id: 0, title: '顶级类目', children: children }]
})
},
loadMenus({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudMenu.getMenusTree(parentNode.menuId).then(res => {
crudMenu.getMenusTree(parentNode.menu_id).then(res => {
parentNode.children = res.map(function(obj) {
if (!obj.leaf) {
obj.children = null

View File

@@ -3,7 +3,6 @@
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
@@ -14,10 +13,9 @@
<el-form-item label="模糊查询">
<el-input
v-model="query.code"
size="mini"
clearable
placeholder="编码、名称"
@keyup.enter.native="crud.toQuery"
style="width: 240px"
placeholder="编码/名称"
/>
</el-form-item>
<rrOperation />
@@ -63,11 +61,11 @@
>
<el-table-column type="selection" width="55" />
<el-table-column v-if="false" prop="id" label="id" />
<el-table-column prop="code" label="编码" min-width="60" show-overflow-tooltip />
<el-table-column prop="code" label="编码" min-width="130" show-overflow-tooltip />
<el-table-column prop="name" label="名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="value" label="" min-width="120" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" min-width="120" show-overflow-tooltip />
<el-table-column label="操作" width="150px" align="center">
<el-table-column prop="value" label="" min-width="270" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" />
<el-table-column v-permission="['admin','param:edit','param:del']" label="操作" width="150px" align="center">
<template slot-scope="scope">
<udOperation
:data="scope.row"
@@ -96,11 +94,7 @@ const defaultForm = {
name: null,
value: null,
remark: null,
isActive: 1,
createName: null,
createTime: null,
updateOptname: null,
updateTime: null
is_active: true
}
export default {
name: 'Param',
@@ -120,6 +114,9 @@ export default {
data() {
return {
permission: {
add: ['admin', 'param:add'],
edit: ['admin', 'param:edit'],
del: ['admin', 'param:del']
},
rules: {
@@ -142,7 +139,7 @@ export default {
}
},
created() {
this.webSocket()
// this.webSocket()
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据

View File

@@ -9,36 +9,36 @@
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%">
<tbody>
<tr>
<td><div class="cell">Redis版本:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.redis_version }}</div></td>
<td><div class="cell">运行模式:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}</div></td>
<td><div class="cell">端口:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.tcp_port }}</div></td>
<td><div class="cell">客户端数:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.connected_clients }}</div></td>
</tr>
<tr>
<td><div class="cell">运行时间():</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.uptime_in_days }}</div></td>
<td><div class="cell">使用内存:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.used_memory_human }}</div></td>
<td><div class="cell">使用CPU:</div></td>
<td><div v-if="cache.info" class="cell">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td>
<td><div class="cell">内存配置:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.maxmemory_human }}</div></td>
</tr>
<tr>
<td><div class="cell">AOF是否开启:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.aof_enabled === "0" ? "否" : "是" }}</div></td>
<td><div class="cell">RDB是否成功:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.rdb_last_bgsave_status }}</div></td>
<td><div class="cell">Key数量:</div></td>
<td><div v-if="cache.dbSize" class="cell">{{ cache.dbSize }} </div></td>
<td><div class="cell">网络入口/出口:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.instantaneous_input_kbps }}kps/{{ cache.info.instantaneous_output_kbps }}kps</div></td>
</tr>
<tr>
<td><div class="cell">Redis版本:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.redis_version }}</div></td>
<td><div class="cell">运行模式:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}</div></td>
<td><div class="cell">端口:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.tcp_port }}</div></td>
<td><div class="cell">客户端数:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.connected_clients }}</div></td>
</tr>
<tr>
<td><div class="cell">运行时间():</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.uptime_in_days }}</div></td>
<td><div class="cell">使用内存:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.used_memory_human }}</div></td>
<td><div class="cell">使用CPU:</div></td>
<td><div v-if="cache.info" class="cell">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td>
<td><div class="cell">内存配置:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.maxmemory_human }}</div></td>
</tr>
<tr>
<td><div class="cell">AOF是否开启:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.aof_enabled === "0" ? "否" : "是" }}</div></td>
<td><div class="cell">RDB是否成功:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.rdb_last_bgsave_status }}</div></td>
<td><div class="cell">Key数量:</div></td>
<td><div v-if="cache.dbSize" class="cell">{{ cache.dbSize }} </div></td>
<td><div class="cell">网络入口/出口:</div></td>
<td><div v-if="cache.info" class="cell">{{ cache.info.instantaneous_input_kbps }}kps/{{ cache.info.instantaneous_output_kbps }}kps</div></td>
</tr>
</tbody>
</table>
</div>
@@ -194,7 +194,7 @@ export default {
})
// 查询 Redis Key 模板列表
getKeyDefineList().then(res => {
// console.log(res)
console.log(res)
this.keyDefineList = res.info
this.keyDefineListLoad = false
})

View File

@@ -58,9 +58,9 @@
<el-table-column type="selection" width="55"/>
<el-table-column prop="name" label="名称" min-width="100" show-overflow-tooltip/>
<el-table-column show-overflow-tooltip prop="remark" label="描述"/>
<el-table-column show-overflow-tooltip width="135px" prop="createTime" label="创建日期">
<el-table-column show-overflow-tooltip width="135px" prop="create_time" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
<el-table-column
@@ -112,7 +112,7 @@
check-strictly
accordion
show-checkbox
node-key="menuId"
node-key="menu_id"
@check="menuChange"
/>
</el-card>
@@ -123,20 +123,20 @@
<script>
import crudRoles from './role'
import crudMenu from '@/views/system/menu'
import { getChild, getMenusTree } from '@/views/system/menu/menu'
import crudMenu from '../menu/menu'
import { getChild, getMenusTree } from '../menu/menu'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { roleId: null, name: null, remark: null }
const defaultForm = { role_id: null, name: null, remark: null }
export default {
name: 'Role',
components: { pagination, crudOperation, rrOperation, udOperation, crudMenu },
cruds() {
return CRUD({ idField: 'roleId', title: '角色', url: 'api/sysRole', crudMethod: { ...crudRoles } })
return CRUD({ idField: 'role_id', title: '角色', url: 'api/sysRole', crudMethod: { ...crudRoles } })
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
@@ -164,7 +164,7 @@ export default {
methods: {
getMenuDatas(node, resolve) {
setTimeout(() => {
getMenusTree(node.data.menuId ? node.data.menuId : 0).then(res => {
getMenusTree(node.data.menu_id ? node.data.menu_id : 0).then(res => {
resolve(res)
})
}, 100)
@@ -203,7 +203,7 @@ export default {
// 清空菜单的选中
this.$refs.menu.setCheckedKeys([])
// 保存当前的角色id
this.currentId = val.roleId
this.currentId = val.role_id
// 初始化默认选中的key
this.menuIds = []
val.menus.forEach(function(data) {
@@ -214,9 +214,9 @@ export default {
},
menuChange(menu) {
// 获取该节点的所有子节点id 包含自身
getChild(menu.menuId).then(childIds => {
getChild(menu.menu_id).then(childIds => {
// 判断是否在 menuIds 中,如果存在则删除,否则添加
if (this.menuIds.indexOf(menu.menuId) !== -1) {
if (this.menuIds.indexOf(menu.menu_id) !== -1) {
for (let i = 0; i < childIds.length; i++) {
const index = this.menuIds.indexOf(childIds[i])
if (index !== -1) {
@@ -237,7 +237,7 @@ export default {
// 保存菜单
saveMenu() {
this.menuLoading = true
const role = { roleId: this.currentId, menus: [] }
const role = { role_id: this.currentId, menus: [] }
// 得到已选中的 key 值
this.menuIds.forEach(function(menuId) {
const menu = { menuId: menuId }
@@ -258,7 +258,7 @@ export default {
// 无刷新更新 表格数据
crudRoles.get(this.currentId).then(res => {
for (let i = 0; i < this.crud.data.length; i++) {
if (res.menuId === this.crud.data[i].menuId) {
if (res.menu_id === this.crud.data[i].menu_id) {
this.crud.data[i] = res
break
}

View File

@@ -4,7 +4,15 @@
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-input v-model="query.jobName" clearable size="mini" placeholder="输入任务名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" />
<el-input
v-model="query.job_name"
clearable
size="mini"
placeholder="输入任务名称搜索"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="toQuery"
/>
<rrOperation />
</div>
<crudOperation :permission="permission">
@@ -16,28 +24,36 @@
type="info"
icon="el-icon-tickets"
@click="doLog"
>日志</el-button>
>日志
</el-button>
</crudOperation>
<Log ref="log" />
</div>
<!--Form表单-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" append-to-body width="730px">
<el-dialog
:close-on-click-modal="false"
:before-close="crud.cancelCU"
:visible.sync="crud.status.cu > 0"
:title="crud.status.title"
append-to-body
width="730px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="100px">
<el-form-item label="任务名称" prop="jobName">
<el-input v-model="form.jobName" style="width: 220px;" />
<el-form-item label="任务名称" prop="job_name">
<el-input v-model="form.job_name" style="width: 220px;" />
</el-form-item>
<el-form-item label="任务描述" prop="description">
<el-input v-model="form.description" style="width: 220px;" />
</el-form-item>
<el-form-item label="Bean名称" prop="beanName">
<el-input v-model="form.beanName" style="width: 220px;" />
<el-form-item label="Bean名称" prop="bean_name">
<el-input v-model="form.bean_name" style="width: 220px;" />
</el-form-item>
<el-form-item label="执行方法" prop="methodName">
<el-input v-model="form.methodName" style="width: 220px;" />
<el-form-item label="执行方法" prop="method_name">
<el-input v-model="form.method_name" style="width: 220px;" />
</el-form-item>
<el-form-item label="Cron表达式" prop="cronExpression">
<!-- <el-input v-model="form.cronExpression" style="width: 220px;" />-->
<el-input v-model="form.cronExpression" placeholder="请输入CRON 表达式" style="width: 220px;">
<el-form-item label="Cron表达式" prop="cron_expression">
<!-- <el-input v-model="form.cron_expression" style="width: 220px;" />-->
<el-input v-model="form.cron_expression" placeholder="请输入CRON 表达式" style="width: 220px;">
<template slot="append">
<el-button type="primary" @click="handleShowCron">
生成表达式
@@ -47,22 +63,22 @@
</el-input>
</el-form-item>
<el-form-item label="子任务ID">
<el-input v-model="form.subTask" placeholder="多个用逗号隔开按顺序执行" style="width: 220px;" />
<el-input v-model="form.sub_task" placeholder="多个用逗号隔开按顺序执行" style="width: 220px;" />
</el-form-item>
<el-form-item label="任务负责人" prop="person_in_charge">
<el-input v-model="form.personInCharge" style="width: 220px;" />
<el-input v-model="form.person_in_charge" style="width: 220px;" />
</el-form-item>
<el-form-item label="告警邮箱" prop="email">
<el-input v-model="form.email" placeholder="多个邮箱用逗号隔开" style="width: 220px;" />
</el-form-item>
<el-form-item label="失败后暂停">
<el-radio-group v-model="form.pauseAfterFailure" style="width: 220px">
<el-radio-group v-model="form.pause_after_failure" style="width: 220px">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="任务状态">
<el-radio-group v-model="form.isPause" style="width: 220px">
<el-radio-group v-model="form.is_pause" style="width: 220px">
<el-radio :label="false">启用</el-radio>
<el-radio :label="true">暂停</el-radio>
</el-radio-group>
@@ -77,42 +93,84 @@
</div>
</el-dialog>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column :selectable="checkboxT" type="selection" width="55" />
<el-table-column show-overflow-tooltip prop="jobId" label="任务ID" />
<el-table-column show-overflow-tooltip prop="jobName" label="任务名称" min-width="120" />
<el-table-column show-overflow-tooltip prop="beanName" label="Bean名称" />
<el-table-column show-overflow-tooltip prop="methodName" label="执行方法" />
<el-table-column show-overflow-tooltip prop="job_id" label="任务ID" />
<el-table-column show-overflow-tooltip prop="job_name" label="任务名称" min-width="120" />
<el-table-column show-overflow-tooltip prop="bean_name" label="Bean名称" />
<el-table-column show-overflow-tooltip prop="method_name" label="执行方法" />
<el-table-column show-overflow-tooltip prop="params" label="参数" />
<el-table-column show-overflow-tooltip prop="cronExpression" label="cron表达式" min-width="100" show-tooltip-when-overflow />
<el-table-column show-overflow-tooltip prop="isPause" width="90px" label="状态">
<el-table-column
show-overflow-tooltip
prop="cron_expression"
label="cron表达式"
min-width="100"
show-tooltip-when-overflow
/>
<el-table-column show-overflow-tooltip prop="is_pause" width="90px" label="状态">
<template slot-scope="scope">
<el-tag :type="scope.row.isPause ? 'warning' : 'success'">{{ scope.row.isPause ? '已暂停' : '运行中' }}</el-tag>
<el-tag :type="scope.row.is_pause ? 'warning' : 'success'">{{
scope.row.is_pause ? '已暂停' : '运行中'
}}
</el-tag>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="description" width="150px" label="描述" />
<el-table-column show-overflow-tooltip prop="createTime" width="136px" label="创建日期">
<el-table-column show-overflow-tooltip prop="create_time" width="136px" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
<el-table-column v-permission="['admin','timing:edit','timing:del']" label="操作" width="170px" align="center" fixed="right">
<el-table-column
v-permission="['admin','timing:edit','timing:del']"
label="操作"
width="170px"
align="center"
fixed="right"
>
<template slot-scope="scope">
<el-button v-permission="['admin','timing:edit']" size="mini" style="margin-right: 3px;" type="text" @click="crud.toEdit(scope.row)">编辑</el-button>
<el-button v-permission="['admin','timing:edit']" style="margin-left: -2px" type="text" size="mini" @click="execute(scope.row.jobId)">执行</el-button>
<el-button v-permission="['admin','timing:edit']" style="margin-left: 3px" type="text" size="mini" @click="updateStatus(scope.row.jobId,scope.row.isPause ? '恢复' : '暂停')">
{{ scope.row.isPause ? '恢复' : '暂停' }}
<el-button
v-permission="['admin','timing:edit']"
size="mini"
style="margin-right: 3px;"
type="text"
@click="crud.toEdit(scope.row)"
>编辑
</el-button>
<el-button
v-permission="['admin','timing:edit']"
style="margin-left: -2px"
type="text"
size="mini"
@click="execute(scope.row.job_id)"
>执行
</el-button>
<el-button
v-permission="['admin','timing:edit']"
style="margin-left: 3px"
type="text"
size="mini"
@click="updateStatus(scope.row.job_id,scope.row.is_pause ? '恢复' : '暂停')"
>
{{ scope.row.is_pause ? '恢复' : '暂停' }}
</el-button>
<el-popover
:ref="scope.row.jobId"
:ref="scope.row.job_id"
v-permission="['admin','timing:del']"
placement="top"
width="200"
>
<p>确定停止并删除该任务吗?</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="$refs[scope.row.jobId].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="delMethod(scope.row.jobId)">确定</el-button>
<el-button size="mini" type="text" @click="$refs[scope.row.job_id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="delMethod(scope.row.job_id)">确定
</el-button>
</div>
<el-button slot="reference" type="text" size="mini">删除</el-button>
</el-popover>
@@ -136,12 +194,25 @@ import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import Crontab from './components/crontab'
const defaultForm = { jobId: null, beanName: null, cronExpression: null, isPause: false, jobName: null, methodName: null, params: null, description: null, personInCharge: null, email: null, subTask: null, pauseAfterFailure: true, createId: null, createName: null, createTime: null, updateId: null, updateName: null, updateTime: null }
const defaultForm = {
job_id: null,
bean_name: null,
cron_expression: null,
is_pause: false,
job_name: null,
method_name: null,
params: null,
description: null,
person_in_charge: null,
email: null,
sub_task: null,
pause_after_failure: true
}
export default {
name: 'Timing',
components: { Log, pagination, crudOperation, rrOperation, Crontab },
cruds() {
return CRUD({ title: '定时任务', idField: 'jobId', url: 'api/jobs', crudMethod: { ...crudJob }})
return CRUD({ title: '定时任务', idField: 'job_id', url: 'api/jobs', crudMethod: { ...crudJob }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {
@@ -153,22 +224,22 @@ export default {
del: ['admin', 'timing:del']
},
rules: {
jobName: [
job_name: [
{ required: true, message: '请输入任务名称', trigger: 'blur' }
],
description: [
{ required: true, message: '请输入任务描述', trigger: 'blur' }
],
beanName: [
bean_name: [
{ required: true, message: '请输入Bean名称', trigger: 'blur' }
],
methodName: [
method_name: [
{ required: true, message: '请输入方法名称', trigger: 'blur' }
],
cronExpression: [
cron_expression: [
{ required: true, message: '请输入Cron表达式', trigger: 'blur' }
],
personInCharge: [
person_in_charge: [
{ required: true, message: '请输入负责人名称', trigger: 'blur' }
]
},
@@ -225,12 +296,12 @@ export default {
},
/** cron表达式按钮操作 */
handleShowCron() {
this.expression = this.form.cronExpression
this.expression = this.form.cron_expression
this.openCron = true
},
/** 确定后回传值 */
crontabFill(value) {
this.form.cronExpression = value
this.form.cron_expression = value
}
}
}

View File

@@ -2,34 +2,34 @@
<el-dialog :visible.sync="dialog" append-to-body title="执行日志" width="88%">
<!-- 搜索 -->
<div class="head-container">
<el-input v-model="query.jobName" clearable size="mini" placeholder="输入任务名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" />
<date-range-picker v-model="query.createTime" class="date-item" />
<el-select v-model="query.isSuccess" placeholder="日志状态" clearable size="mini" class="filter-item" style="width: 110px" @change="toQuery">
<el-input v-model="query.job_name" clearable size="mini" placeholder="输入任务名称搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="toQuery" />
<date-range-picker v-model="query.create_time" class="date-item" />
<el-select v-model="query.is_success" placeholder="日志状态" clearable size="mini" class="filter-item" style="width: 110px" @change="toQuery">
<el-option v-for="item in enabledTypeOptions" :key="item.key" :label="item.displayName" :value="item.key" />
</el-select>
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="toQuery">搜索</el-button>
</div>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" style="width: 100%;margin-top: -10px;">
<el-table-column show-overflow-tooltip prop="jobName" label="任务名称" />
<el-table-column show-overflow-tooltip prop="beanName" label="Bean名称" />
<el-table-column show-overflow-tooltip prop="methodName" label="执行方法" />
<el-table-column show-overflow-tooltip prop="job_name" label="任务名称" />
<el-table-column show-overflow-tooltip prop="bean_name" label="Bean名称" />
<el-table-column show-overflow-tooltip prop="method_name" label="执行方法" />
<el-table-column show-overflow-tooltip prop="params" width="120px" label="参数" />
<el-table-column show-overflow-tooltip prop="cronExpression" label="cron表达式" />
<el-table-column show-overflow-tooltip prop="cron_expression" label="cron表达式" />
<el-table-column prop="create_time" label="异常详情" width="110px">
<template slot-scope="scope">
<el-button v-show="scope.row.exceptionDetail" size="mini" type="text" @click="info(scope.row.exceptionDetail)">查看详情</el-button>
<el-button v-show="scope.row.exception_detail" size="mini" type="text" @click="info(scope.row.exception_detail)">查看详情</el-button>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="time" width="100px" label="耗时(毫秒)" />
<el-table-column align="center" prop="is_success" width="80px" label="状态">
<template slot-scope="scope">
<el-tag :type="scope.row.isSuccess ? 'success' : 'danger'">{{ scope.row.isSuccess ? '成功' : '失败' }}</el-tag>
<el-tag :type="scope.row.is_success ? 'success' : 'danger'">{{ scope.row.is_success ? '成功' : '失败' }}</el-tag>
</template>
</el-table-column>
<el-table-column min-width="100" show-overflow-tooltip prop="createTime" label="创建日期">
<el-table-column min-width="100" show-overflow-tooltip prop="create_time" label="创建日期">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
</el-table>
@@ -87,11 +87,11 @@ export default {
</script>
<style scoped>
.java.hljs{
color: #444;
background: #ffffff !important;
}
::v-deep .el-dialog__body{
padding: 0 20px 10px 20px !important;
}
.java.hljs{
color: #444;
background: #ffffff !important;
}
::v-deep .el-dialog__body{
padding: 0 20px 10px 20px !important;
}
</style>

View File

@@ -20,22 +20,15 @@
</div>
<ul class="user-info">
<li><div style="height: 100%"><svg-icon icon-class="login" /> 登录账号<div class="user-right">{{ user.username }}</div></div></li>
<li><svg-icon icon-class="user1" /> 用户姓名 <div class="user-right">{{ user.personName }}</div></li>
<li><svg-icon icon-class="dept" /> 所属部门
<el-tooltip effect="dark" placement="top">
<div slot="content">
<span v-for="item in depts">{{ item.name }} </span>
</div>
<span class="user-right" v-for="item in depts">{{ item.name }}<span v-if="depts.length>1">...</span></span>
</el-tooltip>
</li>
<li><svg-icon icon-class="user1" /> 用户姓名 <div class="user-right">{{ user.person_name }}</div></li>
<!-- <li><svg-icon icon-class="dept" /> 所属部门 <div class="user-right"> {{ user.dept.name }}</div></li>-->
<li><svg-icon icon-class="phone" /> 手机号码 <div class="user-right">{{ user.phone }}</div></li>
<li><svg-icon icon-class="email" /> 用户邮箱 <div class="user-right">{{ user.email }}</div></li>
<li>
<svg-icon icon-class="anq" /> 安全设置
<div class="user-right">
<a @click="$refs.pass.dialog = true">修改密码</a>
<a @click="$refs.email.dialog = true">修改邮箱</a>
<!-- <a @click="$refs.email.dialog = true">修改邮箱</a>-->
</div>
</li>
</ul>
@@ -48,8 +41,8 @@
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="用户资料" name="first">
<el-form ref="form" :model="form" :rules="rules" style="margin-top: 10px;" size="mini" label-width="65px">
<el-form-item label="姓名" prop="personName">
<el-input v-model="form.personName" style="width: 35%" />
<el-form-item label="姓名" prop="person_name">
<el-input v-model="form.person_name" style="width: 35%" />
<span style="color: #C0C0C0;margin-left: 10px;">用户姓名不作为登录使用</span>
</el-form-item>
<el-form-item label="手机号" prop="phone">
@@ -71,7 +64,7 @@
<el-tab-pane label="操作日志" name="second">
<el-table v-loading="loading" :data="data" style="width: 100%;">
<el-table-column prop="description" label="行为" min-width="130" show-overflow-tooltip />
<el-table-column prop="requestIp" label="IP" />
<el-table-column prop="request_ip" label="IP" />
<el-table-column show-overflow-tooltip prop="address" label="IP来源" />
<el-table-column prop="browser" label="浏览器" min-width="120" show-overflow-tooltip />
<el-table-column prop="time" label="请求耗时" align="center">
@@ -90,7 +83,7 @@
<div style="display:inline-block;float: right;cursor: pointer" @click="init">创建日期<i class="el-icon-refresh" style="margin-left: 40px" /></div>
</template>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.create_time) }}</span>
</template>
</el-table-column>
</el-table>
@@ -123,7 +116,7 @@ import store from '@/store'
import { isvalidPhone } from '@/utils/validate'
import { parseTime } from '@/utils/index'
import crud from '@/mixins/crud'
import { editUser } from '@/views/system/user'
import { editUser } from '@/views/system/user/user'
import Avatar from '@/assets/images/avatar.png'
export default {
name: 'Center',
@@ -149,9 +142,8 @@ export default {
'Authorization': getToken()
},
form: {},
deptsName: '',
rules: {
personName: [
person_name: [
{ required: true, message: '请输入用户姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
],
@@ -164,13 +156,12 @@ export default {
computed: {
...mapGetters([
'user',
'depts',
'updateAvatarApi',
'baseApi'
])
},
created() {
this.form = { id: this.user.id, personName: this.user.personName, gender: this.user.gender, phone: this.user.phone }
this.form = { id: this.user.id, person_name: this.user.person_name, gender: this.user.gender, phone: this.user.phone }
store.dispatch('GetInfo').then(() => {})
},
methods: {
@@ -211,24 +202,24 @@ export default {
</script>
<style rel="stylesheet/scss" lang="scss">
.avatar {
width: 120px;
height: 120px;
border-radius: 50%;
.avatar {
width: 120px;
height: 120px;
border-radius: 50%;
}
.user-info {
padding-left: 0;
list-style: none;
li{
border-bottom: 1px solid #F0F3F4;
padding: 11px 0;
font-size: 13px;
}
.user-info {
padding-left: 0;
list-style: none;
li{
border-bottom: 1px solid #F0F3F4;
padding: 11px 0;
font-size: 13px;
}
.user-right {
float: right;
a{
color: #317EF3;
}
.user-right {
float: right;
a{
color: #317EF3;
}
}
}
</style>

View File

@@ -67,7 +67,7 @@
<script>
import crudDept from '@/views/system/dept/dept'
import crudDept from '../../dept/dept'
import CRUD, { header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import pagination from '@crud/Pagination'

View File

@@ -36,7 +36,7 @@
@keyup.enter.native="crud.toQuery"
/>
<el-select
v-model="query.isUsed"
v-model="query.is_used"
clearable
size="mini"
placeholder="状态"
@@ -72,7 +72,7 @@
<el-input v-model.number="form.phone" style="width: 200px;" />
</el-form-item>
<el-form-item label="姓名" prop="preson_name">
<el-input v-model="form.personName" style="width: 200px;" />
<el-input v-model="form.person_name" style="width: 200px;" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" style="width: 200px;" />
@@ -91,7 +91,7 @@
/>
</el-form-item>
<br v-if="!crud.status.add">
<el-form-item v-if="crud.status.add" label="密码" prop="password">
<el-form-item label="密码" prop="password">
<el-input v-model="form.password" style="width: 200px;" show-password auto-complete="new-password" />
</el-form-item>
<el-form-item label="性别">
@@ -100,9 +100,9 @@
<el-radio label="">女</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" prop="isUesd">
<el-form-item label="状态" prop="is_uesd">
<el-switch
v-model="form.isUsed"
v-model="form.is_used"
active-color="#409EFF"
inactive-color="#F56C6C"
/>
@@ -122,9 +122,9 @@
<!--:disabled="level !== 1 && item.level <= level"-->
<el-option
v-for="item in roles"
:key="item.roleId"
:key="item.role_id"
:label="item.name"
:value="item.roleId"
:value="item.role_id"
/>
</el-select>
</el-form-item>
@@ -145,24 +145,26 @@
<el-table-column :selectable="checkboxT" type="selection" width="55" />
<el-table-column prop="username" label="用户名" :min-width="flexWidth('username',crud.data,'用户名')" />
<el-table-column
prop="personName"
prop="person_name"
label="姓名"
:min-width="flexWidth('personName',crud.data,'姓名')"
:min-width="flexWidth('person_name',crud.data,'姓名')"
/>
<el-table-column prop="gender" label="性别" :min-width="flexWidth('personName',crud.data,'性别')" />
<el-table-column prop="gender" label="性别" :min-width="flexWidth('gender',crud.data,'性别')" />
<el-table-column prop="phone" label="电话" :min-width="flexWidth('phone',crud.data,'电话')" />
<el-table-column prop="email" label="邮箱" :min-width="flexWidth('email',crud.data,'邮箱')" />
<el-table-column show-overflow-tooltip prop="depts" label="部门">
<el-table-column show-overflow-tooltip prop="depts" label="部门" :min-width="flexWidth('depts',crud.data,'邮箱')">
<template slot-scope="scope">
<span v-for=" item in scope.row.depts" :key="item.index">{{ item.name }} </span>
</template>
</el-table-column>>
<el-table-column label="状态" align="center" prop="enabled">
<template slot-scope="scope">
<span :style="{'color': caseStatusColorFilter(scope.row.isUsed)}">{{ enabledTypeOptions.find(item => {return item.key == scope.row.isUsed}).display_name }}</span>
<span v-for="(item, index) in scope.row.depts" :key="index">
{{ item.name }}<span v-if="index !== scope.row.depts.length - 1">、</span>
</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" :min-width="flexWidth('createTime',crud.data,'创建日期')" />
<el-table-column label="状态" align="center" prop="enabled">
<template slot-scope="scope">
<span :style="{'color': caseStatusColorFilter(scope.row.is_used)}">{{ enabledTypeOptions.find(item => {return item.key == scope.row.is_used}).display_name }}</span>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建日期" :min-width="flexWidth('create_time',crud.data,'创建日期')" />
<el-table-column
label="操作"
fixed="right"
@@ -172,17 +174,17 @@
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="crud.toEdit(scope.row)">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handdeleted(scope.row)">删除</el-button>
<el-dropdown size="mini">
<el-dropdown v-hasPermi="['system:user:resetPwd', 'system:user:edit']" size="mini">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item icon="el-icon-refresh-right"><span @click="resetPassword(scope.row)">重置密码</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDeptDrawer(scope.row)">分配部门</span>
<span @click="openDeptDrawer(scope.row)">部门权限</span>
</el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDataDialog(scope.row)">数据权限</span>
</el-dropdown-item>
<el-dropdown-item icon="el-icon-lock"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.isUsed}).display_name }}账号</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-lock"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}账号</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-check">
<span @click="openRoleDrawer(scope.row)">分配角色</span>
</el-dropdown-item>
@@ -214,7 +216,7 @@
:data="deptsDatas"
:default-checked-keys="depChecked"
:props="deptProps"
node-key="deptId"
node-key="dept_id"
highlight-current
check-strictly
@check="handCheck"
@@ -249,8 +251,8 @@
<el-form-item label="用户名" prop="username">
<el-input v-model="dataDialog.username" disabled style="width: 200px;" />
</el-form-item>
<el-form-item label="姓名" prop="presonName">
<el-input v-model="dataDialog.personName" disabled style="width: 200px;" />
<el-form-item label="姓名" prop="person_name">
<el-input v-model="dataDialog.person_name" disabled style="width: 200px;" />
</el-form-item>
<el-table
ref="dialogTable"
@@ -263,15 +265,15 @@
<el-table-column label="数据权限">
<template slot-scope="scope">
<el-select
v-model="scope.row.permissionId"
v-model="scope.row.permission_id"
placeholder="请选择"
@change="openRelevance(scope.row, scope.$index)"
>
<el-option
v-for="item in permissions"
:key="item.permissionId"
:key="item.permission_id"
:label="item.name"
:value="item.permissionId"
:value="item.permission_id"
/>
</el-select>
</template>
@@ -304,10 +306,14 @@
:data="dataPermissions"
style="width: 100%; max-height: 500px"
>
<el-table-column prop="permissionScopeType" label="权限类型" min-width="100" show-overflow-tooltip />
<el-table-column prop="permission_scope_type" label="权限类型" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
{{ dict.label.permission_scope_type[scope.row.permission_scope_type] }}
</template>
</el-table-column>
<el-table-column prop="permissionName" label="权限范围" min-width="100" show-overflow-tooltip />
<el-table-column prop="deptName" label="部门名称" min-width="100" show-overflow-tooltip />
<el-table-column prop="personName" label="用户名称" min-width="100" show-overflow-tooltip />
<el-table-column prop="person_name" label="用户名称" min-width="100" show-overflow-tooltip />
</el-table>
</el-dialog>
<relevance-user-dialog :dialog-show.sync="relevanceUser" :is-single="false" :users="userIds" @selectUsers="selectUsers" />
@@ -317,7 +323,7 @@
<script>
import crudUser from '@/views/system/user/user'
import crudDept from '@/views/system/dept/dept'
import crudDept from '../dept/dept'
import crudDataPermission from '@/views/system/dataPermission/dataPermission'
import { getAll, getLevel } from '@/views/system/role/role'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
@@ -333,13 +339,13 @@ import RelevanceDeptDialog from '@/views/system/user/dialog/relevanceDeptDialog'
let userRoles = []
const defaultForm = {
deptId: null,
dept_id: null,
depts: [],
username: null,
personName: null,
person_name: null,
gender: '男',
email: null,
isUsed: true,
is_used: true,
roles: [],
phone: null,
password: null
@@ -348,7 +354,7 @@ export default {
name: 'User',
components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, udOperation, pagination },
cruds() {
return CRUD({ title: '用户', idField: 'userId', url: 'api/users', crudMethod: { ...crudUser }})
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
// 数据字典
@@ -374,7 +380,7 @@ export default {
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
],
personName: [
person_name: [
{ required: true, message: '请输入用户姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
]
@@ -389,7 +395,7 @@ export default {
dataPerm: false,
dataDialog: {},
permissions: [],
permissionId: '',
permission_id: '',
multipleSelection: [], // 选中
relevanceUser: false, // 关联用户
rowData: {}, // 当行数据
@@ -433,8 +439,8 @@ export default {
}
})
},
caseStatusColorFilter(isUsed) {
if (isUsed === true) {
caseStatusColorFilter(is_used) {
if (is_used === true) {
return '#378be2'
}
return '#F56C6C'
@@ -453,13 +459,13 @@ export default {
// 新增与编辑前做的操作
[CRUD.HOOK.afterToCU](crud, form) {
this.getRoles()
if (form.deptId == null) {
if (form.dept_id == null) {
crudDept.getDepts()
} else {
this.getSupDepts(form.deptId)
this.getSupDepts(form.dept_id)
}
// this.getRoleLevel() 暂时不用
form.isUsed = form.enabled.toString()
// form.is_used = form.enabled.toString()
},
// 新增前将多选的值设置为空
[CRUD.HOOK.beforeToAdd]() {
@@ -511,7 +517,6 @@ export default {
q = { name: node }
}
crudDept.getDeptTree(q).then(res => {
console.log('res', res)
if (resolve) {
resolve(res.content)
} else {
@@ -529,10 +534,7 @@ export default {
}, 100)
},
getDepts() {
console.log('获取部门')
crudDept.getDepts({ isUsed: true }).then(res => {
console.log('获取的部门信息', res)
crudDept.getDepts({ is_used: true }).then(res => {
this.depts = res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
@@ -543,7 +545,6 @@ export default {
},
getSupDepts(deptId) {
crudDept.getDeptSuperior(deptId).then(res => {
console.log('父部门', res)
const date = res.content
this.buildDepts(date)
this.depts = date
@@ -562,7 +563,7 @@ export default {
// 获取弹窗内部门数据
loadDepts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudDept.getDeptvo({ isUsed: true, pid: parentNode.dept_id }).then(res => {
crudDept.getDeptvo({ is_used: true, pid: parentNode.dept_id }).then(res => {
parentNode.children = res.content.map(function(obj) {
obj.children = null
return obj
@@ -575,27 +576,27 @@ export default {
},
normalizer(node) {
return {
id: node.deptId,
id: node.dept_id,
label: node.name,
children: node.children
}
},
// 切换部门
handleNodeClick(data) {
this.query.deptId = data.deptId
this.query.dept_id = data.dept_id
this.query.needAll = true
this.crud.toQuery()
this.query.deptId = null
this.query.dept_id = null
},
// 改变状态
changeEnabled(row) {
const satus = this.enabledTypeOptions.find(item => { return item.key !== row.isUsed })
const satus = this.enabledTypeOptions.find(item => { return item.key !== row.is_used })
this.$confirm('此操作将' + satus.display_name + '账号:' + row.username + ', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
row.isUsed = satus.key
row.is_used = satus.key
crudUser.edit(row).then(res => {
this.crud.toQuery()
this.crud.notify('账号' + row.username + '已' + satus.display_name)
@@ -638,13 +639,13 @@ export default {
crudDept.getDeptTree().then(res => {
this.deptsDatas = res.content
})
this.openDrawer()
this.openDrawer() // 打开抽屉
this.drawerTitle = '分配部门权限'
this.flag = true
// 默认选中
const deptIds = []
for (var index in row.depts) {
deptIds.push(row.depts[index].deptId)
deptIds.push(row.depts[index].dept_id)
}
this.$nextTick(() => {
this.$refs.deptUser.setCheckedKeys(deptIds)
@@ -679,23 +680,25 @@ export default {
this.multipleSelection = []
// 获取权限范围
crudDataPermission.getDataScopeType().then(res => {
console.log('权限范围', res)
this.dataDialog.dataScopeType = res
// permissions
crudDataPermission.getDataPermissionOption().then(res => {
// console.log(res)
console.log('数据权限', res)
this.permissions = res
this.dataDialog.personName = row.personName
this.dataDialog.person_name = row.person_name
this.dataDialog.username = row.username
this.dataDialog.userId = row.userId
this.dataPermissionTitle = '[' + row.personName + '] 数据权限'
this.dataDialog.user_id = row.user_id
this.dataPermissionTitle = '[' + row.person_name + '] 数据权限'
this.dataPerm = true
// 回显数据
crudDataPermission.getDataShow(row.userId).then(res => {
crudDataPermission.getDataShow(row.user_id).then(res => {
console.log('要回显的数据', res)
this.$nextTick(function() {
for (var index = 0; index < res.length; index++) {
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
if (this.dataDialog.dataScopeType[i].value == res[index].permissionScopeType) {
this.dataDialog.dataScopeType[i].permissionId = res[index].permissionId
this.dataDialog.dataScopeType[i].permission_id = res[index].permission_id
if (res[index].users) this.dataDialog.dataScopeType[i].users = res[index].users
if (res[index].depts) this.dataDialog.dataScopeType[i].depts = res[index].depts
// 选中
@@ -714,24 +717,23 @@ export default {
},
openRelevance(row, index) {
for (var i = 0; i < this.permissions.length; i++) {
if (this.permissions[i].permissionId != undefined && this.permissions[i].permissionId && this.permissions[i].permissionId != row.permissionId) {
this.$delete(this.dataDialog.dataScopeType[index], this.permissions[i].permissionId.toString())
if (this.permissions[i].permission_id != undefined && this.permissions[i].permission_id && this.permissions[i].permission_id != row.permission_id) {
this.$delete(this.dataDialog.dataScopeType[index], this.permissions[i].permission_id.toString())
}
}
this.$set(this.dataDialog.dataScopeType[index], this.dataDialog.dataScopeType[index].permissionId, row.permissionId)
this.$set(this.dataDialog.dataScopeType[index], this.dataDialog.dataScopeType[index].permission_id, row.permission_id)
this.rowData = {}
this.deptIds = []
this.userIds = []
console.log(row)
if (row.permissionId == '1605129738328870912') { // 选择用户
if (row.permission_id == '1605129738328870912') { // 选择用户
this.userIds = this.dataDialog.dataScopeType[index].users
this.rowData = row
this.relevanceUser = true
} else if (row.permissionId == '1605129882164137984') { // 选择部门
} else if (row.permission_id == '1605129882164137984') { // 选择部门
this.deptIds = this.dataDialog.dataScopeType[index].depts
this.rowData = row
this.relevanceDept = true
} else if (row.permissionId == '1605128919449735168') { // 自身
} else if (row.permission_id == '1605128919449735168') { // 自身
const param = {
userId: this.dataDialog.userId
}
@@ -744,7 +746,7 @@ export default {
},
selectUsers(row) { // row对话框传来的数据
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
if (this.dataDialog.dataScopeType[i].dictId == this.rowData.dictId) {
if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dict_id) {
if (this.dataDialog.dataScopeType[i].depts != undefined && this.dataDialog.dataScopeType[i].depts.length > 0) this.dataDialog.dataScopeType[i].depts = []
this.dataDialog.dataScopeType[i].users = row
break
@@ -754,7 +756,7 @@ export default {
},
selectDepts(row) {
for (var i = 0; i < this.dataDialog.dataScopeType.length; i++) {
if (this.dataDialog.dataScopeType[i].dictId == this.rowData.dictId) {
if (this.dataDialog.dataScopeType[i].dict_id == this.rowData.dictId) {
if (this.dataDialog.dataScopeType[i].users != undefined && this.dataDialog.dataScopeType[i].users.length > 0) this.dataDialog.dataScopeType[i].users = []
this.dataDialog.dataScopeType[i].depts = row
break
@@ -767,10 +769,9 @@ export default {
},
savePermise() {
const param = {
userId: this.dataDialog.userId,
user_id: this.dataDialog.user_id,
datas: this.multipleSelection
}
console.log('param', param)
crudDataPermission.saveDataPermission(param).then(res => {
this.dataPerm = false
this.crud.notify('添加数据权限成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
@@ -783,7 +784,7 @@ export default {
this.depChecked = []
},
giveValue(row) {
this.depCheckedId = row.userId
this.depCheckedId = row.user_id
},
clearCheck() { // 清空选中
if (this.flag) this.$refs.deptUser.setCheckedKeys([])
@@ -801,12 +802,12 @@ export default {
},
saveChecked() {
const user = {
userId: this.depCheckedId
user_id: this.depCheckedId
}
if (this.flag) {
user.deptIds = this.$refs.deptUser.getCheckedKeys()
} else {
user.rolesIds = this.crud.selections.map(item => (item.roleId))
user.rolesIds = this.crud.selections.map(item => (item.role_id))
}
crudUser.edit(user).then(res => {
this.cancelForm()
@@ -864,7 +865,6 @@ export default {
permissionScopeType: row.value
}
crudDataPermission.getDataDetail(param).then(res => {
console.log(res)
this.dataPermissions = res
})
this.showData = true