commit:同步2.0版本(添加指定审批人功能)

This commit is contained in:
Jerry
2021-10-22 09:50:54 +08:00
parent 3be97f79c0
commit 45de390cc2
321 changed files with 19171 additions and 40 deletions

View File

@@ -0,0 +1,61 @@
export default class SysDataPermController {
/**
* @param params {dataPermId, dataPermName, deptIdListString}
*/
static add (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/add', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId, dataPermName, deptIdListString}
*/
static update (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/update', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId}
*/
static delete (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/delete', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermName}
*/
static list (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/list', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId}
*/
static view (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/view', 'get', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId, searchString}
*/
static listDataPermUser (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/listDataPermUser', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId, userIdListString}
*/
static addDataPermUser (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/addDataPermUser', 'post', params, axiosOption, httpOption);
}
/**
* @param params {dataPermId, userId}
*/
static deleteDataPermUser (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/deleteDataPermUser', 'post', params, axiosOption, httpOption);
}
static listNotInDataPermUser (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDataPerm/listNotInDataPermUser', 'post', params, axiosOption, httpOption);
}
}

View File

@@ -0,0 +1,25 @@
export default class SysDeptController {
static list (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDept/list', 'post', params, axiosOption, httpOption);
}
static view (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDept/view', 'get', params, axiosOption, httpOption);
}
static export (sender, params, fileName) {
return sender.download('admin/upms/sysDept/export', params, fileName);
}
static add (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDept/add', 'post', params, axiosOption, httpOption);
}
static update (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDept/update', 'post', params, axiosOption, httpOption);
}
static delete (sender, params, axiosOption, httpOption) {
return sender.doUrl('admin/upms/sysDept/delete', 'post', params, axiosOption, httpOption);
}
}

View File

@@ -0,0 +1,243 @@
<template>
<div class="form-single-fragment" style="position: relative;">
<el-form ref="formEditSysDataPerm" :model="formData" class="full-width-input" :rules="rules" style="width: 100%;"
label-width="120px" size="mini" label-position="right" @submit.native.prevent>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="数据权限名称" prop="SysDataPerm.dataPermName">
<el-input class="input-item" v-model="formData.SysDataPerm.dataPermName"
:clearable="true" placeholder="显示名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="过滤规则" prop="SysDataPerm.ruleType">
<el-select class="input-item" v-model="formData.SysDataPerm.ruleType" :clearable="true"
placeholder="过滤规则" :loading="formEditSysDataPerm.ruleType.impl.loading"
@visible-change="onRuleTypeVisibleChange"
@change="onRuleTypeValueChange">
<el-option v-for="item in formEditSysDataPerm.ruleType.impl.dropdownList" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-card shadow="never">
<div slot="header" class="card-header">
<span>部门列表</span>
<el-input size="mini" v-model="deptNameFilter" placeholder="输入部门名称过滤" style="width: 250px;" clearable suffix-icon="el-icon-search" />
</div>
<el-scrollbar style="height: 250px;" wrap-class="scrollbar_dropdown__wrap">
<el-tree ref="deptTree" :data="deptTree" show-checkbox node-key="id" default-expand-all
:check-strictly="true" :props="{...deptProps, disabled: () => {return (formData.SysDataPerm.ruleType !== SysDataPermType.CUSTOM_DEPT_AND_CHILD && formData.SysDataPerm.ruleType !== SysDataPermType.CUSTOM_DEPT)}}" :filter-node-method="filterDeptNode" />
</el-scrollbar>
</el-card>
</el-col>
</el-row>
<el-col :span="24" style="margin-top: 20px;">
<el-row type="flex" justify="end">
<el-button type="primary" size="mini" :plain="true" @click="onCancel(false)">
取消
</el-button>
<el-button type="primary" size="mini" @click="onUpdateClick()"
:disabled="!(checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm:add') || checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm:update'))">
保存
</el-button>
</el-row>
</el-col>
</el-form>
</div>
</template>
<script>
import { treeDataTranslate } from '@/utils';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SystemController, DictionaryController, SysDataPermController } from '@/api';
export default {
name: 'formEditSysDataPerm',
props: {
dataPermId: {
default: undefined
}
},
mixins: [uploadMixin, statsDateRangeMixin, cachedPageChildMixin],
data () {
return {
deptTree: [],
deptNameFilter: undefined,
deptProps: {
label: 'name'
},
formData: {
SysDataPerm: {
dataPermId: undefined,
dataPermName: undefined,
ruleType: undefined,
deptIdListString: undefined,
createUserId: undefined,
createUsername: undefined
}
},
rules: {
'SysDataPerm.dataPermName': [
{required: true, message: '请输入数据权限名称', trigger: 'blur'}
],
'SysDataPerm.ruleType': [
{required: true, message: '请选择过滤规则', trigger: 'blur'}
]
},
formEditSysDataPerm: {
formFilter: {
},
formFilterCopy: {
},
ruleType: {
impl: new DropdownWidget(this.loadRuleTypeDropdownList)
},
isInit: false
}
}
},
methods: {
filterDeptNode (value, data) {
if (!value) return true;
return data.deptName ? data.deptName.indexOf(value) !== -1 : true;
},
onCancel (isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
}
},
/**
* 过滤规则下拉数据获取函数
*/
loadRuleTypeDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
DictionaryController.dictSysDataPermType(this, params).then(res => {
resolve(res.getList());
}).catch(e => {
reject(e);
});
});
},
/**
* 过滤规则下拉框显隐
*/
onRuleTypeVisibleChange (show) {
this.formEditSysDataPerm.ruleType.impl.onVisibleChange(show).catch(e => {});
},
/**
* 过滤规则选中值改变
*/
onRuleTypeValueChange (value) {
},
/**
* 部门列表数据获取函数
*/
loadDeptList () {
return new Promise((resolve, reject) => {
let params = {};
DictionaryController.dictSysDept(this, params).then(res => {
this.deptTree = treeDataTranslate(res.getList(), 'id');
if (Array.isArray(this.formData.SysDataPerm.dataPermDeptList)) {
this.$refs.deptTree.setCheckedKeys(this.formData.SysDataPerm.dataPermDeptList.map((item) => {
return item.deptId;
}));
}
}).catch(e => {
reject(e);
});
});
},
/**
* 更新编辑数据权限
*/
refreshFormEditSysDataPerm (reloadData = false) {
this.formEditSysDataPerm.ruleType.impl.onVisibleChange(true).catch(e => {});
this.formEditSysDataPerm.isInit = true;
},
/**
* 编辑
*/
onUpdateClick () {
this.$refs.formEditSysDataPerm.validate((valid) => {
if (!valid) return;
let params = {
sysDataPermDto: {
dataPermId: this.dataPermId,
ruleType: this.formData.SysDataPerm.ruleType,
dataPermName: this.formData.SysDataPerm.dataPermName
}
};
if (this.formData.SysDataPerm.ruleType === this.SysDataPermType.CUSTOM_DEPT_AND_CHILD ||
this.formData.SysDataPerm.ruleType === this.SysDataPermType.CUSTOM_DEPT) {
let deptList = this.$refs.deptTree.getCheckedKeys();
if (deptList.length <= 0) {
this.$message.error('请选择数据权限部门');
return;
}
params.deptIdListString = Array.isArray(deptList) ? deptList.join(',') : undefined;
}
if (this.dataPermId == null) {
SysDataPermController.add(this, params).then(res => {
this.$message.success('添加成功');
this.onCancel(true);
}).catch(e => {});
} else {
SysDataPermController.update(this, params).then(res => {
this.$message.success('编辑成功');
this.onCancel(true);
}).catch(e => {});
}
});
},
/**
* 获取数据权限详细信息
*/
loadSysDataPermData () {
return new Promise((resolve, reject) => {
if (this.dataPermId == null) {
resolve();
} else {
let params = {
dataPermId: this.dataPermId
};
SysDataPermController.view(this, params).then(res => {
this.formData.SysDataPerm = {...res.data};
resolve();
}).catch(e => {
reject();
});
}
});
},
initFormData () {
},
formInit () {
let loadAllDatasource = [
this.loadSysDataPermData()
];
Promise.all(loadAllDatasource).then(res => {
this.initFormData();
this.refreshFormEditSysDataPerm();
this.loadDeptList();
}).catch(e => {});
}
},
mounted () {
this.formInit();
},
watch: {
deptNameFilter (val) {
this.$refs.deptTree.filter(val);
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,201 @@
<template>
<div class="form-single-fragment" style="position: relative;">
<el-form ref="formEditSysDept" :model="formData" :rules="rules" style="width: 100%;"
label-width="100px" size="mini" label-position="right" @submit.native.prevent>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="所属部门" prop="SysDept.parentId">
<el-cascader class="input-item" v-model="formEditSysDept.parentId.value" :clearable="true"
placeholder="所属部门" :loading="formEditSysDept.parentId.impl.loading" :props="{value: 'id', label: 'name', checkStrictly: true}"
@visible-change="onParentIdVisibleChange" :options="formEditSysDept.parentId.impl.dropdownList"
@change="onParentIdValueChange">
</el-cascader>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="部门名称" prop="SysDept.deptName">
<el-input class="input-item" v-model="formData.SysDept.deptName"
:clearable="true" placeholder="部门名称" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="显示顺序" prop="SysDept.showOrder">
<el-input-number class="input-item" v-model="formData.SysDept.showOrder"
:clearable="true" controls-position="right" placeholder="显示顺序" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-row type="flex" justify="end">
<el-button type="primary" size="mini" :plain="true"
@click="onCancel(false)">
取消
</el-button>
<el-button type="primary" size="mini" @click="onUpdateClick()"
:disabled="!(checkPermCodeExist('formSysDept:fragmentSysDept:update') || checkPermCodeExist('formSysDept:fragmentSysDept:add'))">
保存
</el-button>
</el-row>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import { findTreeNodePath } from '@/utils';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SysDeptController, DictionaryController } from '@/api';
export default {
name: 'formEditSysDept',
props: {
deptId: {
default: undefined
}
},
mixins: [uploadMixin, statsDateRangeMixin, cachedPageChildMixin],
data () {
return {
formData: {
SysDept: {
deptId: undefined,
deptName: undefined,
showOrder: undefined,
parentId: undefined,
deletedFlag: undefined
}
},
rules: {
'SysDept.deptName': [
{required: true, message: '请输入部门名称', trigger: 'blur'}
],
'SysDept.showOrder': [
{required: true, message: '请输入显示顺序', trigger: 'blur'}
]
},
formEditSysDept: {
formFilter: {
},
formFilterCopy: {
},
parentId: {
impl: new DropdownWidget(this.loadParentIdDropdownList, true, 'id'),
value: []
},
isInit: false
}
}
},
methods: {
onCancel (isSuccess) {
if (this.observer != null) {
this.observer.cancel(isSuccess);
}
},
/**
* 所属部门下拉数据获取函数
*/
loadParentIdDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
DictionaryController.dictSysDept(this, params).then(res => {
resolve(res.getList());
}).catch(e => {
reject(e);
});
});
},
/**
* 所属部门下拉框显隐
*/
onParentIdVisibleChange (show) {
this.formEditSysDept.parentId.impl.onVisibleChange(show).catch(e => {});
},
/**
* 所属部门选中值改变
*/
onParentIdValueChange (value) {
},
/**
* 更新编辑用户
*/
refreshFormEditSysDept (reloadData = false) {
this.formEditSysDept.parentId.impl.onVisibleChange(true).then(res => {
if (!this.formEditSysDept.isInit) {
this.formEditSysDept.parentId.value = findTreeNodePath(
this.formEditSysDept.parentId.impl.dropdownList, this.formData.SysDept.parentId, 'id');
}
this.formEditSysDept.isInit = true;
});
},
/**
* 编辑
*/
onUpdateClick () {
this.$refs.formEditSysDept.validate((valid) => {
if (!valid) return;
let params = {
sysDeptDto: {
deptName: this.formData.SysDept.deptName,
showOrder: this.formData.SysDept.showOrder,
parentId: Array.isArray(this.formEditSysDept.parentId.value) ? this.formEditSysDept.parentId.value[this.formEditSysDept.parentId.value.length - 1] : undefined,
deptId: this.deptId
}
};
if (this.isEdit) {
SysDeptController.update(this, params).then(res => {
this.$message.success('编辑成功');
this.onCancel(true);
}).catch(e => {});
} else {
SysDeptController.add(this, params).then(res => {
this.$message.success('新建成功');
this.onCancel(true);
}).catch(e => {});
}
});
},
/**
* 获取部门管理详细信息
*/
loadSysDeptData () {
if (!this.isEdit) return;
let params = {
deptId: this.deptId
};
return new Promise((resolve, reject) => {
SysDeptController.view(this, params).then(res => {
this.formData.SysDept = {...res.data};
resolve();
}).catch(e => {
reject();
});
});
},
initFormData () {
},
formInit () {
let loadAllDatasource = [
this.loadSysDeptData()
];
Promise.all(loadAllDatasource).then(res => {
this.initFormData();
this.refreshFormEditSysDept();
}).catch(e => {});
}
},
computed: {
isEdit () {
return this.deptId != null;
}
},
created () {
this.formInit();
}
}
</script>

View File

@@ -0,0 +1,211 @@
<template>
<div>
<el-form label-width="75px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="325">
<el-form-item label="用户状态">
<el-select class="filter-item" v-model="formSysUser.formFilter.sysUserStatus" :clearable="true"
placeholder="用户状态" :loading="formSysUser.sysUserStatus.impl.loading"
@visible-change="onSysUserStatusVisibleChange">
<el-option v-for="item in formSysUser.sysUserStatus.impl.dropdownList" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item>
<el-form-item label="用户名">
<el-input class="filter-item" v-model="formSysUser.formFilter.sysUserLoginName"
:clearable="true" placeholder="用户名" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFormSysUser(true)">查询</el-button>
<el-button slot="operator" size="mini" type="primary" :plain="false" @click="onSetUser"
:disabled="selectUsers == null || selectUsers.length <= 0">授权人员</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="formSysUser.SysUser.impl.dataList" size="mini" row-key="userId" ref="userTable"
header-cell-class-name="table-header-gray" height="395px" @selection-change="onTableSelectionChange">
<el-table-column label="序号" header-align="center" align="center" type="index" width="50px" :index="formSysUser.SysUser.impl.getTableIndex" />
<el-table-column header-align="center" align="center" type="selection" width="50px" :reserve-selection="true" />
<el-table-column label="用户名" prop="loginName">
</el-table-column>
<el-table-column label="昵称" prop="showName">
</el-table-column>
<el-table-column label="账号类型">
<template slot-scope="scope">
<span>{{SysUserType.getValue(scope.row.userType)}}</span>
</template>
</el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
<el-tag :type="getUserStatusType(scope.row.userStatus)" size="mini">{{SysUserStatus.getValue(scope.row.userStatus)}}</el-tag>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="formSysUser.SysUser.impl.totalCount"
:current-page="formSysUser.SysUser.impl.currentPage"
:page-size="formSysUser.SysUser.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="formSysUser.SysUser.impl.onCurrentPageChange"
@size-change="formSysUser.SysUser.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SysDataPermController, DictionaryController } from '@/api';
export default {
props: {
dataPermId: {
type: [String, Number],
required: true
}
},
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
data () {
return {
formSysUser: {
formFilter: {
sysUserStatus: undefined,
sysUserLoginName: undefined
},
formFilterCopy: {
sysUserStatus: undefined,
sysUserLoginName: undefined
},
sysUserStatus: {
impl: new DropdownWidget(this.loadSysUserStatusDropdownList)
},
SysUser: {
impl: new TableWidget(this.loadSysUserData, this.loadSysUserVerify, true, false)
},
isInit: false
},
selectUsers: []
}
},
methods: {
/**
* 用户状态下拉数据获取函数
*/
loadSysUserStatusDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
DictionaryController.dictSysUserStatus(this, params).then(res => {
resolve(res.getList());
}).catch(e => {
reject(e);
});
});
},
/**
* 用户状态下拉框显隐
*/
onSysUserStatusVisibleChange (show) {
this.formSysUser.sysUserStatus.impl.onVisibleChange(show).catch(e => {});
},
getUserStatusType (status) {
if (status === this.SysUserStatus.NORMAL) {
return 'success';
} else if (status === this.SysUserStatus.LOCKED) {
return 'danger';
} else {
return 'info';
}
},
onTableSelectionChange (values) {
this.selectUsers = values;
},
onSetUser () {
let params = {
dataPermId: this.dataPermId,
userIdListString: this.selectUsers.map((item) => {
return item.userId
}).join(',')
}
SysDataPermController.addDataPermUser(this, params).then(res => {
this.$message.success('授权成功');
this.refreshFormSysUser(true);
this.$refs.userTable.clearSelection();
this.selectUsers = [];
}).catch(e => {});
},
onCancel () {
this.$router.go(-1);
},
loadSysUserData (params) {
params.dataPermId = this.dataPermId;
params.sysUserDtoFilter = {
loginName: this.formSysUser.formFilterCopy.sysUserLoginName,
userStatus: this.formSysUser.formFilterCopy.sysUserStatus
}
this.$refs.userTable.clearSelection();
return new Promise((resolve, reject) => {
SysDataPermController.listNotInDataPermUser(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysUserVerify () {
this.formSysUser.formFilterCopy.sysUserLoginName = this.formSysUser.formFilter.sysUserLoginName;
this.formSysUser.formFilterCopy.sysUserStatus = this.formSysUser.formFilter.sysUserStatus;
return true;
},
refreshFormSysUser (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.formSysUser.SysUser.impl.refreshTable(true, 1);
} else {
this.formSysUser.SysUser.impl.refreshTable();
}
this.formSysUser.sysUserStatus.impl.onVisibleChange(true).catch(e => {});
this.formSysUser.isInit = true;
},
initData () {
this.refreshFormSysUser();
}
},
mounted () {
this.initData();
},
computed: {
getContextHeightStyle () {
return [
{'height': (this.getClientHeight - 142) + 'px'}
]
},
...mapGetters(['getClientHeight'])
},
watch: {
currentPage: function (value, oldValue) {
this.loadDatasource(false).catch(e => {
this.currentPage = oldValue;
})
}
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,479 @@
<template>
<div class="tab-dialog-box" style="position: relative;">
<el-tabs v-model="activeFragmentId" :before-leave="onFragmentChange">
<el-tab-pane label="数据权限管理" name="fragmentSysDataPerm" style="width: 100%;"
v-if="checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm')">
<el-form label-width="100px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="过滤规则">
<el-select class="filter-item" v-model="fragmentSysDataPerm.formFilter.sysDatapermType" :clearable="true"
placeholder="过滤规则" :loading="fragmentSysDataPerm.sysDatapermType.impl.loading"
@visible-change="onSysDatapermTypeVisibleChange"
@change="onSysDatapermTypeValueChange">
<el-option v-for="item in fragmentSysDataPerm.sysDatapermType.impl.dropdownList" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item>
<el-form-item label="数据权限名称">
<el-input class="filter-item" v-model="fragmentSysDataPerm.formFilter.sysDataPermName"
:clearable="true" placeholder="数据权限名称" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysDataPerm(true)">查询</el-button>
<el-button slot="operator" type="primary" size="mini" :disabled="!checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm:add')"
@click="onAddDataPermClick()">
新建
</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysDataPerm.SysDataPerm.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysDataPerm.SysDataPerm.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysDataPerm.SysDataPerm.impl.getTableIndex" />
<el-table-column label="权限名称" prop="dataPermName">
</el-table-column>
<el-table-column label="过滤规则">
<template slot-scope="scope">
<span>{{SysDataPermType.getValue(scope.row.ruleType)}}</span>
</template>
</el-table-column>
<el-table-column label="创建人" prop="createUsername">
</el-table-column>
<el-table-column label="操作" fixed="right">
<template slot-scope="scope">
<el-button @click="onEditDataPermClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm:update')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysDataPerm:fragmentSysDataPerm:delete')">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="fragmentSysDataPerm.SysDataPerm.impl.totalCount"
:current-page="fragmentSysDataPerm.SysDataPerm.impl.currentPage"
:page-size="fragmentSysDataPerm.SysDataPerm.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="fragmentSysDataPerm.SysDataPerm.impl.onCurrentPageChange"
@size-change="fragmentSysDataPerm.SysDataPerm.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="用户授权" name="fragmentSysDataPermUser" style="width: 100%;"
v-if="checkPermCodeExist('formSysDataPerm:fragmentSysDataPermUser')">
<el-form label-width="75px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="数据权限">
<el-select class="filter-item" v-model="fragmentSysDataPermUser.formFilter.dataPermId" clearable
placeholder="数据权限" :loading="fragmentSysDataPermUser.dataPermId.impl.loading"
@visible-change="fragmentSysDataPermUser.dataPermId.impl.onVisibleChange"
@change="onDataPermChange">
<el-option v-for="item in fragmentSysDataPermUser.dataPermId.impl.dropdownList" :key="item.dataPermId"
:value="item.dataPermId" :label="item.dataPermName" />
</el-select>
</el-form-item>
<el-form-item label="用户名">
<el-input class="filter-item" v-model="fragmentSysDataPermUser.formFilter.searchString"
:clearable="true" placeholder="输入用户名 / 昵称查询" @change="refreshFragmentSysDataPermUser(true)" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFragmentSysDataPermUser(true)">
查询
</el-button>
<el-button slot="operator" type="primary" size="mini" @click="onAddDataPermUserClick()"
:disabled="!checkPermCodeExist('formSysDataPerm:fragmentSysDataPermUser:addDataPermUser') ||
fragmentSysDataPermUser.formFilter.dataPermId == null || fragmentSysDataPermUser.formFilter.dataPermId === ''">
添加用户
</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="fragmentSysDataPermUser.SysDataPermUserList.impl.dataList" size="mini" :height="getTableHeight + 'px'"
@sort-change="fragmentSysDataPermUser.SysDataPermUserList.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px"
:index="fragmentSysDataPermUser.SysDataPermUserList.impl.getTableIndex" />
<el-table-column label="用户名" prop="loginName">
</el-table-column>
<el-table-column label="昵称" prop="showName">
</el-table-column>
<el-table-column label="账号类型">
<template slot-scope="scope">
<span>{{SysUserType.getValue(scope.row.userType)}}</span>
</template>
</el-table-column>
<el-table-column label="状态">
<template slot-scope="scope">
<el-tag :type="getUserStatusType(scope.row.userStatus)" size="mini">{{SysUserStatus.getValue(scope.row.userStatus)}}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="80px">
<template slot-scope="scope">
<el-button class="btn-table-delete" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysDataPerm:fragmentSysDataPermUser:deleteDataPermUser')"
@click="onDeleteRow(scope.row)">移除</el-button>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="fragmentSysDataPermUser.SysDataPermUserList.impl.totalCount"
:current-page="fragmentSysDataPermUser.SysDataPermUserList.impl.currentPage"
:page-size="fragmentSysDataPermUser.SysDataPermUserList.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="fragmentSysDataPermUser.SysDataPermUserList.impl.onCurrentPageChange"
@size-change="fragmentSysDataPermUser.SysDataPermUserList.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SysDataPermController, DictionaryController } from '@/api';
import formEditSysDataPerm from '@/views/upms/formEditSysDataPerm';
import formSetSysDataPermUser from '@/views/upms/formSetSysDataPermUser';
export default {
name: 'formSysDataPerm',
props: {
},
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
data () {
return {
activeFragmentId: undefined,
fragmentSysDataPerm: {
formFilter: {
sysDatapermType: undefined,
sysDataPermName: undefined
},
formFilterCopy: {
sysDatapermType: undefined,
sysDataPermName: undefined
},
sysDatapermType: {
impl: new DropdownWidget(this.loadSysDatapermTypeDropdownList)
},
SysDataPerm: {
impl: new TableWidget(this.loadSysDataPermData, this.loadSysDataPermVerify, true, false)
},
isInit: false
},
fragmentSysDataPermUser: {
formFilter: {
dataPermId: undefined,
searchString: undefined
},
dataPermId: {
impl: new DropdownWidget(this.loadDataPermDropdownList)
},
SysDataPermUserList: {
impl: new TableWidget(this.loadSysDataPermUserListData, this.loadSysDataPermUserListVerify, true, false)
},
isInit: false
}
}
},
methods: {
/**
* 数据权限数据获取函数返回Primise
*/
loadSysDataPermData (params) {
params.sysDataPermDtoFilter = {
searchString: this.fragmentSysDataPerm.formFilterCopy.sysDataPermName,
ruleType: this.fragmentSysDataPerm.formFilterCopy.sysDatapermType
};
return new Promise((resolve, reject) => {
SysDataPermController.list(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 数据权限数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysDataPermVerify () {
this.fragmentSysDataPerm.formFilterCopy.sysDataPermName = this.fragmentSysDataPerm.formFilter.sysDataPermName;
this.fragmentSysDataPerm.formFilterCopy.sysDatapermType = this.fragmentSysDataPerm.formFilter.sysDatapermType;
return true;
},
/**
* 过滤规则下拉数据获取函数
*/
loadSysDatapermTypeDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
DictionaryController.dictSysDataPermType(this, params).then(res => {
resolve(res.getList());
}).catch(e => {
reject(e);
});
});
},
/**
* 过滤规则下拉框显隐
*/
onSysDatapermTypeVisibleChange (show) {
this.fragmentSysDataPerm.sysDatapermType.impl.onVisibleChange(show).catch(e => {});
},
/**
* 过滤规则选中值改变
*/
onSysDatapermTypeValueChange (value) {
},
/**
* 更新数据权限管理
*/
refreshFragmentSysDataPerm (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysDataPerm.SysDataPerm.impl.refreshTable(true, 1);
} else {
this.fragmentSysDataPerm.SysDataPerm.impl.refreshTable();
}
this.fragmentSysDataPerm.sysDatapermType.impl.onVisibleChange(true).catch(e => {});
this.fragmentSysDataPerm.isInit = true;
},
/**
* 新建
*/
onAddDataPermClick () {
let params = {};
this.$dialog.show('新建数据权限', formEditSysDataPerm, {
area: ['800px', '520px']
}, params).then(res => {
this.fragmentSysDataPermUser.dataPermId.impl.dirty = true;
this.refreshFragmentSysDataPerm();
}).catch(e => {});
},
/**
* 编辑
*/
onEditDataPermClick (row) {
let params = {
dataPermId: row.dataPermId
};
this.$dialog.show('编辑数据权限', formEditSysDataPerm, {
area: ['800px', '520px']
}, params).then(res => {
if (row.dataPermId === this.fragmentSysDataPermUser.formFilter.dataPermId) {
this.fragmentSysDataPermUser.formFilter.dataPermId = undefined;
this.fragmentSysDataPermUser.SysDataPermUserList.impl.clearTable();
}
this.fragmentSysDataPermUser.dataPermId.impl.dirty = true;
this.fragmentSysDataPerm.SysDataPerm.impl.refreshTable();
}).catch(e => {});
},
/**
* 删除
*/
onDeleteClick (row) {
let params = {
dataPermId: row.dataPermId
};
this.$confirm('是否删除此数据权限?').then(res => {
SysDataPermController.delete(this, params).then(res => {
this.$message.success('删除成功');
if (row.dataPermId === this.fragmentSysDataPermUser.formFilter.dataPermId) {
this.fragmentSysDataPermUser.formFilter.dataPermId = undefined;
this.fragmentSysDataPermUser.SysDataPermUserList.impl.clearTable();
}
this.fragmentSysDataPermUser.dataPermId.impl.dirty = true;
this.fragmentSysDataPerm.SysDataPerm.impl.refreshTable();
}).catch(e => {});
}).catch(e => {});
},
onDataPermChange (value) {
this.refreshFragmentSysDataPermUser(true);
},
getUserStatusType (status) {
if (status === this.SysUserStatus.NORMAL) {
return 'success';
} else if (status === this.SysUserStatus.LOCKED) {
return 'danger';
} else {
return 'info';
}
},
loadDataPermDropdownList () {
return new Promise((resolve, reject) => {
let params = {};
SysDataPermController.list(this, params).then(res => {
resolve(res.data.dataList);
}).catch(e => {
reject(e);
});
});
},
/**
* 用户列表数据获取函数返回Primise
*/
loadSysDataPermUserListData (params) {
return new Promise((resolve, reject) => {
if (this.fragmentSysDataPermUser.formFilter.dataPermId == null || this.fragmentSysDataPermUser.formFilter.dataPermId === '') {
this.$message.error('请选择数据权限');
resolve({
dataList: [],
totalCount: 0
});
return;
}
params.dataPermId = this.fragmentSysDataPermUser.formFilter.dataPermId;
params.searchString = this.fragmentSysDataPermUser.formFilter.searchString;
SysDataPermController.listDataPermUser(this, params).then(res => {
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 用户列表数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysDataPermUserListVerify () {
return true;
},
onDeleteRow (row) {
this.$confirm('是否移除此用户?').then(res => {
let params = {
dataPermId: this.fragmentSysDataPermUser.formFilter.dataPermId,
userId: row.userId
}
SysDataPermController.deleteDataPermUser(this, params).then(res => {
this.refreshFragmentSysDataPermUser(true);
this.$message.success('移除成功');
}).catch(e => {});
}).catch(e => {});
},
/**
* 更新数据权限授权
*/
refreshFragmentSysDataPermUser (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.fragmentSysDataPermUser.SysDataPermUserList.impl.refreshTable(true, 1);
} else {
this.fragmentSysDataPermUser.SysDataPermUserList.impl.refreshTable();
}
this.fragmentSysDataPermUser.isInit = true;
},
/**
* 授权用户
*/
onAddDataPermUserClick () {
let params = {
dataPermId: this.fragmentSysDataPermUser.formFilter.dataPermId
};
this.$dialog.show('授权用户', formSetSysDataPermUser, {
area: ['1100px', '580px']
}, params).then(res => {
this.refreshFragmentSysDataPermUser(true);
}).catch(e => {
this.refreshFragmentSysDataPermUser(true);
});
},
buildFragmentPermCodeMap () {
this.permCodeList = [
{
key: 'fragmentSysDataPerm',
permCode: 'formSysDataPerm:fragmentSysDataPerm',
refresh: this.refreshFragmentSysDataPerm
},
{
key: 'fragmentSysDataPermUser',
permCode: 'formSysDataPerm:fragmentSysDataPermUser',
refresh: this.refreshFragmentSysDataPermUser
}
];
},
onFragmentChange (fragmentId) {
for (let i = 0; i < this.permCodeList.length; i++) {
if (this.permCodeList[i].key === fragmentId) {
this.activeFragmentId = fragmentId;
// if (this.permCodeList[i].refresh) this.permCodeList[i].refresh();
return true;
}
}
return false;
},
getActiveFragment () {
for (let i = 0; i < this.permCodeList.length; i++) {
if (this.permCodeList[i].key === this.activeFragmentId) {
return this.permCodeList[i];
}
}
},
/**
* 根据权限获取默认显示的fragment
*/
getDefaultFragment () {
for (let i = 0; i < this.permCodeList.length; i++) {
if (this.checkPermCodeExist(this.permCodeList[i].permCode)) {
this.activeFragmentId = this.permCodeList[i].key;
return this.permCodeList[i];
}
}
return undefined;
},
onResume () {
this.refreshFragmentSysDataPerm();
},
initFormData () {
},
formInit () {
this.buildFragmentPermCodeMap();
let defaultFragment = this.getDefaultFragment();
if (defaultFragment == null) {
this.$message.error('您没有访问这个页面的权限,请与系统管理员联系!');
} else {
if (defaultFragment.refresh) defaultFragment.refresh();
}
}
},
computed: {
getTableHeight () {
return (this.getMainContextHeight - 192);
},
...mapGetters(['getMainContextHeight'])
},
created () {
this.formInit();
}
}
</script>

View File

@@ -0,0 +1,178 @@
<template>
<div>
<el-form label-width="75px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="部门名称">
<el-input class="filter-item" v-model="formSysDept.formFilter.deptName"
:clearable="true" placeholder="部门名称" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFormSysDept(true)">查询</el-button>
<el-button slot="operator" type="primary" size="mini" :disabled="!checkPermCodeExist('formSysDept:fragmentSysDept:add')"
@click="onCreateSysDeptClick()">
新建
</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table :data="formSysDept.SysDeptList.impl.dataList" size="mini" row-key="deptId"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="50px">
</el-table-column>
<el-table-column label="部门名称" prop="deptName">
</el-table-column>
<el-table-column label="操作" fixed="right" width="150px">
<template slot-scope="scope">
<el-button @click="onEditSysDeptClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysDept:fragmentSysDept:update')">
编辑
</el-button>
<el-button @click="onDeleteClick(scope.row)" type="text" size="mini"
:disabled="!checkPermCodeExist('formSysDept:fragmentSysDept:delete')">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</div>
</template>
<script>
import { treeDataTranslate } from '@/utils';
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachePageMixin, cachedPageChildMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SysDeptController, DictionaryController } from '@/api';
import formEditSysDept from '../formEditSysDept';
export default {
name: 'formSysDept',
props: {
},
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
data () {
return {
formSysDept: {
formFilter: {
deptName: undefined
},
formFilterCopy: {
deptName: undefined
},
SysDeptList: {
impl: new TableWidget(this.loadSysDeptListData, this.loadSysDeptListVerify, false)
},
isInit: false
}
}
},
methods: {
/**
* 部门列表数据获取函数返回Primise
*/
loadSysDeptListData (params) {
params.sysDeptDtoFilter = {
deptName: this.formSysDept.formFilterCopy.deptName
};
return new Promise((resolve, reject) => {
SysDeptController.list(this, params).then(res => {
resolve({
dataList: treeDataTranslate(res.data.dataList, 'deptId', 'parentId'),
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 部门列表数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadSysDeptListVerify () {
this.formSysDept.formFilterCopy.deptName = this.formSysDept.formFilter.deptName;
return true;
},
/**
* 部门列表当前页变化函数
*/
onSysDeptListCurrentPageChange (newPage) {
this.formSysDept.SysDeptList.impl.onCurrentPageChange(newPage);
},
/**
* 部门列表每页显示数量变化函数(跳转回第一页)
*/
onSysDeptListPageSizeChange (newPage) {
this.formSysDept.SysDeptList.impl.onPageSizeChange(newPage);
},
/**
* 更新部门管理
*/
refreshFormSysDept (reloadData = false) {
// 重新获取数据组件的数据
if (reloadData) {
this.formSysDept.SysDeptList.impl.refreshTable(true, 1);
} else {
this.formSysDept.SysDeptList.impl.refreshTable();
}
this.formSysDept.isInit = true;
},
/**
* 新建
*/
onCreateSysDeptClick () {
let params = {};
this.$dialog.show('新建部门', formEditSysDept, {
area: ['500px']
}, params).then(res => {
this.refreshFormSysDept();
}).catch(e => {});
},
/**
* 编辑部门
*/
onEditSysDeptClick (row) {
let params = {
deptId: row.deptId
};
this.$dialog.show('编辑部门', formEditSysDept, {
area: ['500px']
}, params).then(res => {
this.formSysDept.SysDeptList.impl.refreshTable();
}).catch(e => {});
},
/**
* 删除
*/
onDeleteClick (row) {
let params = {
deptId: row.deptId
};
this.$confirm('是否删除部门?').then(res => {
SysDeptController.delete(this, params).then(res => {
this.$message.success('删除成功');
this.formSysDept.SysDeptList.impl.refreshTable();
}).catch(e => {});
}).catch(e => {});
},
onResume () {
this.refreshFormSysDept();
},
initFormData () {
},
formInit () {
this.initFormData();
this.refreshFormSysDept();
}
},
created () {
this.formInit();
}
}
</script>

View File

@@ -0,0 +1,215 @@
<template>
<div style="position: relative;">
<el-form label-width="100px" size="mini" label-position="right" @submit.native.prevent>
<filter-box :item-width="350">
<el-form-item label="操作人员">
<el-input class="filter-item" v-model="formSysOperationLog.formFilter.operatorName" :clearable="true" />
</el-form-item>
<el-form-item label="操作类型">
<el-select class="filter-item" v-model="formSysOperationLog.formFilter.operationType" :clearable="true" placeholder=""
filterable :loading="formSysOperationLog.operationType.impl.loading"
@visible-change="formSysOperationLog.operationType.impl.onVisibleChange">
<el-option v-for="item in formSysOperationLog.operationType.impl.dropdownList" :key="item.id" :value="item.id" :label="item.name" />
</el-select>
</el-form-item>
<el-form-item label="操作状态">
<el-select class="filter-item" v-model="formSysOperationLog.formFilter.success" :clearable="true" filterable placeholder="">
<el-option :value="1" label="成功" />
<el-option :value="0" label="失败" />
</el-select>
</el-form-item>
<el-form-item label="Trace Id">
<el-input class="filter-item" v-model="formSysOperationLog.formFilter.traceId" :clearable="true" />
</el-form-item>
<el-form-item label="调用时长">
<input-number-range class="filter-item" v-model="formSysOperationLog.formFilter.elapse" :clearable="true" />
</el-form-item>
<el-form-item label="操作日期">
<date-range class="filter-item" v-model="formSysOperationLog.formFilter.operationTime" :clearable="true" :allowTypes="['day']" align="left"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd hh:mm:ss" />
</el-form-item>
<el-button slot="operator" type="primary" :plain="true" size="mini" @click="refreshFormOperationType(true)">查询</el-button>
</filter-box>
</el-form>
<el-row>
<el-col :span="24">
<el-table ref="teacher" :data="formSysOperationLog.operationLog.impl.dataList" size="mini" @sort-change="formSysOperationLog.operationLog.impl.onSortChange"
header-cell-class-name="table-header-gray">
<el-table-column label="序号" header-align="center" align="center" type="index" width="55px" :index="formSysOperationLog.operationLog.impl.getTableIndex" />
<el-table-column label="系统模块" prop="serviceName" width="200px" />
<el-table-column label="操作类型" prop="operationType" width="150px">
<template slot-scope="scope">
<span>{{SysOperationType.getValue(scope.row.operationType)}}</span>
</template>
</el-table-column>
<el-table-column label="操作员" prop="operatorName" width="150px" />
<el-table-column label="调用地址" prop="requestUrl" min-width="300px"/>
<el-table-column label="登录 IP" prop="requestIp" width="150px" />
<el-table-column label="调用时长" prop="elapse" width="100px" />
<el-table-column label="操作状态" prop="success" width="100px" >
<template slot-scope="scope">
<el-tag size="mini" v-if="scope.row.success != null"
:type="scope.row.success ? 'success' : 'danger'">
{{scope.row.success ? '成功' : '失败'}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作时间" prop="operationTime" width="150px" />
<el-table-column label="操作" fixed="right" width="150px" >
<template slot-scope="scope">
<el-button @click.stop="onFormViewSysOperationLogClick(scope.row)" type="text" size="mini">
详情
</el-button>
</template>
</el-table-column>
</el-table>
<el-row type="flex" justify="end" style="margin-top: 10px;">
<el-pagination
:total="formSysOperationLog.operationLog.impl.totalCount"
:current-page="formSysOperationLog.operationLog.impl.currentPage"
:page-size="formSysOperationLog.operationLog.impl.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, prev, pager, next, sizes"
@current-change="formSysOperationLog.operationLog.impl.onCurrentPageChange"
@size-change="formSysOperationLog.operationLog.impl.onPageSizeChange">
</el-pagination>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
/* eslint-disable-next-line */
import { DropdownWidget, TableWidget, UploadWidget, ChartWidget } from '@/utils/widget.js';
/* eslint-disable-next-line */
import { uploadMixin, statsDateRangeMixin, cachePageMixin } from '@/core/mixins';
/* eslint-disable-next-line */
import { SystemController } from '@/api';
import formViewSysOperationLog from '@/views/upms/formViewSysOperationLog';
export default {
name: 'formSysOperationLog',
mixins: [uploadMixin, statsDateRangeMixin, cachePageMixin],
data () {
return {
formSysOperationLog: {
formFilter: {
operatorName: undefined,
operationType: undefined,
success: undefined,
traceId: undefined,
elapse: undefined,
operationTime: undefined
},
formFilterCopy: {
operatorName: undefined,
operationType: undefined,
success: undefined,
traceId: undefined,
elapse: undefined,
operationTime: undefined
},
operationType: {
impl: new DropdownWidget(this.loadOperationTypeDropdownList)
},
operationLog: {
impl: new TableWidget(this.loadOperationLogWidgetData, this.loadOperationLogVerify, true, false, 'logId', false)
},
isInit: false
}
}
},
methods: {
/**
* 操作日志数据数据获取函数返回Promise
*/
loadOperationLogWidgetData (params) {
if (params == null) params = {};
params = {
...params,
sysOperationLogDtoFilter: {
operatorName: this.formSysOperationLog.formFilterCopy.operatorName,
operationType: this.formSysOperationLog.formFilterCopy.operationType,
success: this.formSysOperationLog.formFilterCopy.success,
traceId: this.formSysOperationLog.formFilterCopy.traceId,
elapseMin: Array.isArray(this.formSysOperationLog.formFilterCopy.elapse) ? this.formSysOperationLog.formFilterCopy.elapse[0] : undefined,
elapseMax: Array.isArray(this.formSysOperationLog.formFilterCopy.elapse) ? this.formSysOperationLog.formFilterCopy.elapse[1] : undefined,
operationTimeStart: Array.isArray(this.formSysOperationLog.formFilterCopy.operationTime) ? this.formSysOperationLog.formFilterCopy.operationTime[0] : undefined,
operationTimeEnd: Array.isArray(this.formSysOperationLog.formFilterCopy.operationTime) ? this.formSysOperationLog.formFilterCopy.operationTime[1] : undefined
}
}
return new Promise((resolve, reject) => {
SystemController.listSysOperationLog(this, params).then(res => {
console.log(res);
resolve({
dataList: res.data.dataList,
totalCount: res.data.totalCount
});
}).catch(e => {
reject(e);
});
});
},
/**
* 操作日志数据获取检测函数返回true正常获取数据返回false停止获取数据
*/
loadOperationLogVerify () {
this.formSysOperationLog.formFilterCopy = { ...this.formSysOperationLog.formFilter };
return true;
},
/**
* 操作类型下拉数据获取函数
*/
loadOperationTypeDropdownList () {
return new Promise((resolve) => {
resolve(this.SysOperationType.getList());
});
},
/**
* 操作日志详情
*/
onFormViewSysOperationLogClick (row) {
let params = {
rowData: row
};
this.$dialog.show('操作日志详情', formViewSysOperationLog, {
area: ['800px', '85vh']
}, params).catch(e => {});
},
/**
* 更新操作日志
*/
refreshFormOperationType (reloadData = false) {
if (reloadData) {
this.formSysOperationLog.operationLog.impl.refreshTable(true, 1);
} else {
this.formSysOperationLog.operationLog.impl.refreshTable();
}
if (!this.formSysOperationLog.isInit) {
// 初始化下拉数据
}
this.formSysOperationLog.isInit = true;
},
onResume () {
this.refreshFormOperationType();
},
initFormData () {
},
formInit () {
this.refreshFormOperationType();
}
},
mounted () {
// 初始化页面数据
this.formInit();
},
watch: {
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,120 @@
<template>
<div class="form-single-fragment" style="position: relative;">
<el-form ref="formViewOperationLog" :model="formData" class="full-width-input" style="width: 100%;"
label-width="100px" size="mini" label-position="right" @submit.native.prevent>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="操作模块:">
<span class="input-item">{{formData.formViewSysOperationLog.serviceName}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作人员:">
<span class="input-item">{{formData.formViewSysOperationLog.operatorName}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="请求地址:">
<span class="input-item">{{formData.formViewSysOperationLog.requestUrl}}</span>
<el-tag size="mini" style="margin-left: 10px"
:type="formData.formViewSysOperationLog.requestMethod === 'GET' ? 'success' : 'primary'">
{{formData.formViewSysOperationLog.requestMethod}}
</el-tag>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="主机地址:">
<span class="input-item">{{formData.formViewSysOperationLog.requestIp}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作方法:">
<span class="input-item">{{formData.formViewSysOperationLog.apiMethod}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="Trace Id">
<span class="input-item">{{formData.formViewSysOperationLog.traceId}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="Session Id">
<span class="input-item">{{formData.formViewSysOperationLog.sessionId}}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="请求参数:">
<JsonViewer v-model="formData.formViewSysOperationLog.requestArguments" :expand-depth="5" boxed />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="返回结果:">
<JsonViewer v-model="formData.formViewSysOperationLog.responseResult" :expand-depth="5" boxed />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="登录状态:">
<el-tag v-if="formData.formViewSysOperationLog.success != null"
:type="formData.formViewSysOperationLog.success ? 'success' : 'danger'">
{{formData.formViewSysOperationLog.success ? '成功' : '失败'}}
</el-tag>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import JsonViewer from 'vue-json-viewer';
export default {
props: {
rowData: Object
},
components: {
JsonViewer
},
data () {
return {
formData: {
formViewSysOperationLog: {
apiClass: undefined,
apiMethod: undefined,
description: undefined,
operationTime: undefined,
operationType: undefined,
operatorId: undefined,
operatorName: undefined,
requestArguments: {},
requestIp: undefined,
requestMethod: undefined,
requestUrl: undefined,
responseResult: {},
serviceName: undefined,
traceId: undefined,
sessionId: undefined,
success: true
}
}
}
},
mounted () {
this.formData.formViewSysOperationLog = { ...this.rowData };
this.formData.formViewSysOperationLog.requestArguments = JSON.parse(this.rowData.requestArguments) || {};
this.formData.formViewSysOperationLog.responseResult = JSON.parse(this.rowData.responseResult) || {};
}
}
</script>
<style>
.jv-code {
padding: 0px!important;
}
.jv-node {
padding: 3px;
margin: 0px;
background: #F3F3F3;
}
</style>