opt: 日志管理,用户,角色,系统管理实现国际化

This commit is contained in:
yanps
2024-12-21 15:42:08 +08:00
parent 08731e551a
commit c63404b718
23 changed files with 563 additions and 383 deletions

View File

@@ -3,12 +3,12 @@
<div class="head-container">
<!--工具栏-->
<el-form :inline="true" class="demo-form-inline" label-suffix=":" label-width="90px">
<el-form-item label="标签">
<el-form-item :label="$t('es_log.table.label')">
<el-select
v-model="system"
clearable
style="width: 100px; height: 35px;top: -5px;"
placeholder="所属标签"
:placeholder="$t('es_log.table.Belonging_tags')"
>
<el-option
v-for="item in systemOptions"
@@ -18,12 +18,12 @@
/>
</el-select>
</el-form-item>
<el-form-item label="级别">
<el-form-item :label="$t('es_log.table.level')">
<el-select
v-model="logLevelValue"
clearable
style="width: 100px; height: 35px;top: -5px;"
placeholder="日志级别"
:placeholder="$t('es_log.table.log_level')"
>
<el-option
v-for="item in labelsOptions"
@@ -33,32 +33,32 @@
/>
</el-select>
</el-form-item>
<el-form-item label="接口">
<el-form-item :label="$t('es_log.table.api')">
<el-input
v-model="requestMethod"
size="mini"
placeholder="请输入接口"
:placeholder="$t('es_log.table.input_api')"
clearable
/>
</el-form-item>
<el-form-item label="关键字">
<el-form-item :label="$t('es_log.table.keywords')">
<el-input
v-model="message"
size="mini"
placeholder="请输入内容"
:placeholder="$t('es_log.table.content')"
clearable
/>
</el-form-item>
<el-form-item label="链路追踪">
<el-form-item :label="$t('es_log.table.tracking')">
<el-input
v-model="traceId"
size="mini"
placeholder="请输入链路id"
:placeholder="$t('es_log.table.table1')"
clearable
/>
</el-form-item>
<el-form-item label="SQL日志" prop="filterSql">
<el-form-item :label="$t('es_log.table.table2')" prop="filterSql">
<el-switch
v-model="filterSql"
active-color="#F56C6C"
@@ -67,7 +67,7 @@
inactive-valu="0"
/>
</el-form-item>
<el-form-item label="HTTP日志" prop="isRequest">
<el-form-item :label="$t('es_log.table.table3')" prop="isRequest">
<el-switch
v-model="isRequest"
active-color="#409EFF"
@@ -77,22 +77,22 @@
/>
</el-form-item>
<el-form-item v-show="!showOptions" label="时间范围">
<el-form-item v-show="!showOptions" :label="$t('es_log.table.table4')">
<el-date-picker
v-model="timeRange"
size="mini"
clearable
type="datetimerange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="$t('es_log.table.table5')"
:end-placeholder="$t('es_log.table.table6')"
align="right"
@change="queryData"
@blur="queryData"
/>
</el-form-item>
<el-form-item v-show="showOptions" label="时间段">
<el-select v-model="timeZoneValue" filterable placeholder="请选择标签" size="mini" @change="queryData">
<el-form-item v-show="showOptions" :label="$t('es_log.table.table7')">
<el-select v-model="timeZoneValue" filterable :placeholder="$t('es_log.table.table8')" size="mini" @change="queryData">
<el-option
v-for="item in timeZoneOptions"
:key="item.index"
@@ -102,11 +102,11 @@
</el-select>
</el-form-item>
<el-form-item>
<el-tooltip class="item" effect="dark" content="切换查询条件" placement="top">
<el-tooltip class="item" effect="dark" :content="$t('es_log.table.table9')" placement="top">
<span class="el-icon-sort" @click="changeShow" />
</el-tooltip>
</el-form-item>
<el-form-item label="显示条数">
<el-form-item :label="$t('es_log.table.table10')">
<el-input-number
v-model="size"
size="mini"
@@ -116,7 +116,7 @@
:step="10"
/>
</el-form-item>
<el-form-item label="当前页">
<el-form-item :label="$t('es_log.table.table11')">
<el-input-number
v-model="page"
size="mini"
@@ -126,7 +126,7 @@
:step="1"
/>
</el-form-item>
<el-form-item label="总条数">
<el-form-item :label="$t('es_log.table.table12')">
<el-input
v-model="total"
size="small"
@@ -136,14 +136,14 @@
</el-form-item>
<el-form-item>
<el-dropdown split-button type="primary" size="mini" @click="queryData">
查询
{{ $t('es_log.table.table13') }}
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, index) in runStatuOptions" :key="index" @click.native="startInterval(item)">{{ item.label }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-form-item>
<el-form-item>
<el-button @click="clearLogs">清空日志</el-button>
<el-button @click="clearLogs">{{ $t('es_log.table.table25') }}</el-button>
</el-form-item>
</el-form>
</div>
@@ -244,37 +244,37 @@ export default {
value: 1800000
}],
timeZoneOptions: [{
label: '最近5分钟',
label: this.$t('es_log.table.table14'),
value: 300 * 1000
}, {
label: '最近15分钟',
label: this.$t('es_log.table.table15'),
value: 900 * 1000
}, {
label: '最近30分钟',
label: this.$t('es_log.table.table16'),
value: 1800 * 1000
}, {
label: '最近1小时',
label: this.$t('es_log.table.table17'),
value: 3600 * 1000
}, {
label: '最近3小时',
label: this.$t('es_log.table.table18'),
value: 3600 * 1000 * 3
}, {
label: '最近6小时',
label: this.$t('es_log.table.table19'),
value: 3600 * 1000 * 6
}, {
label: '最近12小时',
label: this.$t('es_log.table.table20'),
value: 3600 * 1000 * 12
}, {
label: '最近24小时',
label: this.$t('es_log.table.table21'),
value: 3600 * 1000 * 24
}, {
label: '最近2天',
label: this.$t('es_log.table.table22'),
value: 3600 * 1000 * 24 * 2
}, {
label: '最近7天',
label: this.$t('es_log.table.table23'),
value: 3600 * 1000 * 24 * 7
}, {
label: '最近15天',
label: this.$t('es_log.table.table24'),
value: 3600 * 1000 * 24 * 15
}],
timeZoneValue: '',

View File

@@ -8,7 +8,7 @@
v-model="query.name"
clearable
size="mini"
placeholder="输入部门名称搜索"
:placeholder="$t('department.table_title.enter_department_name')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
@@ -17,7 +17,7 @@
v-model="query.is_used"
clearable
size="mini"
placeholder="状态"
:placeholder="$t('department.table_value.State')"
class="filter-item"
style="width: 90px"
@change="crud.toQuery"
@@ -37,13 +37,13 @@
width="500px"
>
<el-form ref="form" inline :model="form" :rules="rules" size="mini" label-width="80px">
<el-form-item label="部门编码" prop="code">
<el-form-item :label="$t('department.other.Department_code')" prop="code">
<el-input v-model="form.code" :disabled="true" style="width: 370px;" />
</el-form-item>
<el-form-item label="部门名称" prop="name">
<el-form-item :label="$t('department.table_title.Department_name')" prop="name" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<el-input v-model="form.name" style="width: 370px;" />
</el-form-item>
<el-form-item label="部门排序" prop="dept_sort">
<el-form-item :label="$t('department.other.Department_sort')" prop="dept_sort" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<el-input-number
v-model.number="form.dept_sort"
:min="0"
@@ -52,16 +52,18 @@
style="width: 370px;"
/>
</el-form-item>
<el-form-item label="外部标识" prop="extId">
<el-form-item :label="$t('department.other.External_identification')" prop="ext_id" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<el-input v-model="form.ext_id" style="width: 370px;" />
</el-form-item>
<el-form-item label="顶级部门">
<el-form-item :label="$t('department.other.Top_departments')" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<el-radio-group v-model="form.isTop" style="width: 140px">
<el-radio label="1">是</el-radio>
<el-radio label="0"></el-radio>
<el-row>
<el-radio label="1">{{ $t('auto.common.true') }}</el-radio>
<el-radio label="0">{{ $t('auto.common.false') }}</el-radio>
</el-row>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" prop="isUesd">
<el-form-item :label="$t('department.table_value.State')" prop="is_used" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<el-switch
v-model="form.is_used"
active-color="#409EFF"
@@ -70,7 +72,7 @@
inactive-valu="false"
/>
</el-form-item>
<el-form-item v-if="form.isTop === '0'" style="margin-bottom: 0;" label="上级部门" prop="pid">
<el-form-item v-if="form.isTop === '0'" style="margin-bottom: 0;" :label="$t('department.other.Top_departments')" prop="pid" :min-width="flexWidth('code',crud.data,$t('department.other.Department_code'))">
<treeselect
v-model="form.pid"
:load-options="loadDepts"
@@ -82,8 +84,8 @@
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
<el-button type="text" @click="crud.cancelCU">{{ $t('task.select.Cancel') }}</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">{{ $t('task.select.Confirm') }}</el-button>
</div>
</el-dialog>
<!--表格渲染 :load="getDeptDatas" 点击事件 row-key需要指定唯一的数据id-->
@@ -101,23 +103,23 @@
>
<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="dept_sort" />
<el-table-column label="状态" align="center" prop="is_used">
<el-table-column :label="$t('department.table_value.Name')" prop="name" :min-width="flexWidth('name',crud.data,$t('department.table_value.Name'))" />
<el-table-column :label="$t('department.table_value.Sort')" prop="dept_sort" :min-width="flexWidth('dept_sort',crud.data,$t('department.table_value.Sort'))" />
<el-table-column :label="$t('department.table_value.State')" align="center" prop="is_used" :min-width="flexWidth('is_used',crud.data,$t('department.table_value.State'))">
<template slot-scope="scope">
<el-switch
v-model="scope.row.is_used"
:disabled="scope.row.id === 1"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.is_used,)"
@change="changeEnabled(scope.row, scope.row.is_used)"
/>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建日期" />
<el-table-column prop="create_time" :label="$t('department.table_value.CreateDate')" :min-width="flexWidth('create_time',crud.data,$t('department.table_value.CreateDate'))" />
<el-table-column
v-permission="['admin','dept:edit','dept:del']"
label="操作"
:label="$t('department.table_value.Operate')"
width="130px"
align="center"
fixed="right"
@@ -127,7 +129,7 @@
:data="scope.row"
:permission="permission"
:disabled-dle="scope.row.id === 1"
msg="确定删除吗,如果存在下级节点则一并删除此操作不能撤销"
:msg="$t('menu.msg.delete_msg')"
/>
</template>
</el-table-column>
@@ -143,6 +145,7 @@ 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 i18n from '@/i18n'
const defaultForm = {
code: null,
@@ -158,7 +161,7 @@ export default {
name: 'Dept',
components: { Treeselect, crudOperation, rrOperation, udOperation },
cruds() {
return CRUD({ title: '部门', idField: 'dept_id', url: 'api/dept/vo', crudMethod: { ...crudDept }})
return CRUD({ title: i18n.t('department.table_title.Department'), idField: 'dept_id', url: 'api/dept/vo', crudMethod: { ...crudDept }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
// 设置数据字典
@@ -265,7 +268,7 @@ export default {
},
// 改变状态
changeEnabled(data, val) {
const satus = this.enabledTypeOptions.find(item => { return item.key == data.is_used })
const satus = this.enabledTypeOptions.find(item => { return item.key === data.is_used })
this.$confirm('此操作将 "' + satus.display_name + '" ' + data.name + '部门, 是否继续?', '提示', {
confirmButtonText: '确定',

View File

@@ -8,7 +8,7 @@
v-model="query.blurry"
clearable
size="mini"
placeholder="模糊搜索"
:placeholder="$t('menu.placeholder.fuzzy_search')"
style="width: 200px;margin-bottom: 10px"
class="filter-item"
@keyup.enter.native="queryBlurry"
@@ -16,11 +16,12 @@
<el-select
v-model="query.systemType"
style="width: 100px; height: 35px;top: -5px;"
placeholder="所属系统"
:placeholder="$t('menu.placeholder.owning_system')"
@change="changetype"
>
<el-option
v-for="item in dict.system_type"
:key="item.id"
:label="item.label"
:value="item.value"
/>
@@ -39,15 +40,15 @@
width="650px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="80px">
<el-form-item label="菜单类型" prop="type">
<el-form-item :label="$t('menu.dialog.menu_type')" prop="type">
<el-radio-group v-model="form.type" size="mini">
<el-radio-button label="1">系统</el-radio-button>
<el-radio-button label="2">目录</el-radio-button>
<el-radio-button label="3">菜单</el-radio-button>
<el-radio-button label="4">按钮</el-radio-button>
<el-radio-button label="1">{{ $t('menu.dialog.system') }}</el-radio-button>
<el-radio-button label="2">{{ $t('menu.dialog.catalogue') }}</el-radio-button>
<el-radio-button label="3">{{ $t('menu.dialog.menu') }}</el-radio-button>
<el-radio-button label="4">{{ $t('menu.dialog.button') }}</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '1' && form.type.toString() !== '4' " label="菜单图标" prop="icon">
<el-form-item v-show="form.type.toString() !== '1' && form.type.toString() !== '4' " :label="$t('menu.dialog.menu_icon')" prop="icon">
<el-popover
placement="bottom-start"
width="450"
@@ -55,7 +56,7 @@
@show="$refs['iconSelect'].reset()"
>
<IconSelect ref="iconSelect" @selected="selected" />
<el-input slot="reference" v-model="form.icon" style="width: 450px;" placeholder="点击选择图标" readonly>
<el-input slot="reference" v-model="form.icon" style="width: 450px;" :placeholder="$t('menu.placeholder.choose_icon')" readonly>
<svg-icon
v-if="form.icon"
slot="prefix"
@@ -67,41 +68,62 @@
</el-input>
</el-popover>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1'" label="外链菜单" prop="iframe">
<el-form-item v-show="form.type.toString() !== '2' && form.type.toString() !== '1'" :label="$t('menu.dialog.menu_chain')" prop="iframe">
<el-radio-group v-model="form.iframe" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
<el-radio-button label="true">{{ $t('auto.common.true') }}</el-radio-button>
<el-radio-button label="false">{{ $t('auto.common.false') }}</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-show="form.type.toString() === '3'" label="菜单缓存" prop="cache">
<el-form-item v-show="form.type.toString() === '2'" :label="$t('menu.dialog.menu_cache')" 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">{{ $t('auto.common.true') }}</el-radio-button>
<el-radio-button label="false">{{ $t('auto.common.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="$t('menu.dialog.menu_visible')" 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">{{ $t('auto.common.true') }}</el-radio-button>
<el-radio-button label="true">{{ $t('auto.common.false') }}</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单标题" prop="title">
<el-form-item v-if="form.type.toString() !== '2'" :label="$t('menu.dialog.default_title')" prop="title">
<el-input
v-model="form.title"
:style=" form.type.toString() === '0' ? 'width: 450px' : 'width: 190px'"
placeholder="菜单标题"
:placeholder="$t('menu.dialog.default_title')"
/>
</el-form-item>
<el-form-item v-if="form.type.toString() === '2'" label="目录名称" prop="title">
<el-input v-model="form.title" placeholder="目录名称" style="width: 190px;" />
<el-form-item v-if="form.type.toString() !== '2'" :label="$t('menu.dialog.zh_title')" prop="zh_title">
<el-input
v-model="form.zh_title"
:style=" form.type.toString() === '0' ? 'width: 450px' : 'width: 190px'"
:placeholder="$t('menu.dialog.zh_title')"
/>
</el-form-item>
<el-form-item v-show="form.type.toString() !== '1' " label="权限标识" prop="permission">
<el-input v-model="form.permission" :disabled="form.iframe" placeholder="权限标识" style="width: 190px;" />
<el-form-item v-if="form.type.toString() !== '2'" :label="$t('menu.dialog.en_title')" prop="en_title">
<el-input
v-model="form.en_title"
:style=" form.type.toString() === '0' ? 'width: 450px' : 'width: 190px'"
:placeholder="$t('menu.dialog.en_title')"
/>
</el-form-item>
<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 v-if="form.type.toString() !== '2'" :label="$t('menu.dialog.id_title')" prop="in_title">
<el-input
v-model="form.in_title"
:style=" form.type.toString() === '0' ? 'width: 450px' : 'width: 190px'"
:placeholder="$t('menu.dialog.id_title')"
/>
</el-form-item>
<el-form-item label="菜单排序" prop="menu_sort">
<el-form-item v-if="form.type.toString() === '2'" :label="$t('menu.dialog.button_name')" prop="title">
<el-input v-model="form.title" :placeholder="$t('menu.dialog.button_name')" style="width: 190px;" />
</el-form-item>
<el-form-item v-show="form.type.toString() !== '1' " :label="$t('menu.table_title.permission_ident')" prop="permission">
<el-input v-model="form.permission" :disabled="form.iframe" :placeholder="$t('menu.table_title.permission_ident')" style="width: 190px;" />
</el-form-item>
<el-form-item v-if="form.type.toString() !== '1' && form.type.toString() !== '2'" :label="$t('menu.dialog.router_path')" prop="path">
<el-input v-model="form.path" :placeholder="$t('menu.dialog.router_path')" style="width: 190px;" />
</el-form-item>
<el-form-item :label="$t('menu.dialog.menu_sort')" prop="menu_sort">
<el-input-number
v-model.number="form.menu_sort"
:min="0"
@@ -110,13 +132,13 @@
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="$t('menu.dialog.component_name')" prop="component_name">
<el-input v-model="form.component_name" style="width: 190px;" :placeholder="$t('menu.placeholder.component_tip')" />
</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="组件路径" />
<el-form-item v-show="!form.iframe && (form.type.toString() === '2' ||form.type.toString() === '3' ) " :label="$t('menu.dialog.component_path')" prop="component">
<el-input v-model="form.component" style="width: 190px;" :placeholder="$t('menu.dialog.component_path')" />
</el-form-item>
<el-form-item label="上级类目" prop="pid">
<el-form-item :label="$t('menu.dialog.superior_class')" prop="pid">
<!-- normalizer转换- loadMenus 点击扩展的时候会调用该方法-->
<treeselect
v-model="form.pid"
@@ -124,13 +146,13 @@
:load-options="loadMenus"
:normalizer="normalizer"
style="width: 450px;"
placeholder="选择上级类目"
:placeholder="$t('menu.placeholder.choose_superior_category')"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
<el-button type="text" @click="crud.cancelCU">{{ $t('auto.common.Cancel') }}</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">{{ $t('auto.common.Confirm') }}</el-button>
</div>
</el-dialog>
<!--表格渲染-->
@@ -149,46 +171,46 @@
@selection-change="crud.selectionChangeHandler"
>
<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="$t('menu.table_title.menu_title')" prop="title" :min-width="100" />
<el-table-column :label="$t('menu.table_title.system')" prop="systemType" :min-width="flexWidth('systemType',crud.data,$t('menu.table_title.system'))">
<template slot-scope="scope">
{{ dict.label.system_type[scope.row.systemType] }} : {{ scope.row.systemType }}
</template>
</el-table-column>
<el-table-column prop="icon" label="图标" align="center" :min-width="flexWidth('icon',crud.data,'图标')">
<el-table-column prop="icon" :label="$t('menu.table_title.icon')" align="center" :min-width="flexWidth('icon',crud.data,$t('menu.table_title.icon'))">
<template slot-scope="scope">
<svg-icon :icon-class="scope.row.icon ? scope.row.icon : ''" />
</template>
</el-table-column>
<el-table-column prop="menu_sort" align="center" label="排序" :min-width="flexWidth('menu_sort',crud.data,'排序')">
<el-table-column prop="menu_sort" align="center" :label="$t('menu.table_title.sort')" :min-width="flexWidth('menu_sort',crud.data,$t('menu.table_title.sort'))">
<template slot-scope="scope">
{{ scope.row.menu_sort }}
</template>
</el-table-column>
<el-table-column prop="permission" label="权限标识" :min-width="flexWidth('permission',crud.data,'权限标识')" />
<el-table-column prop="component" label="组件路径" min-width="120" />
<el-table-column prop="iframe" label="外链" :formatter="crud.formatIsOrNot" :min-width="flexWidth('iframe',crud.data,'外链')">
<el-table-column prop="permission" :label="$t('menu.table_title.permission_ident')" :min-width="flexWidth('permission',crud.data,$t('menu.table_title.permission_ident'))" />
<el-table-column prop="component" :label="$t('menu.table_title.path')" min-width="120" />
<el-table-column prop="iframe" :label="$t('menu.table_title.outside_chain')" :formatter="crud.formatIsOrNot" :min-width="flexWidth('iframe',crud.data,$t('menu.table_title.outside_chain'))">
<template slot-scope="scope">
<span v-if="scope.row.iframe">是</span>
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column prop="cache" label="缓存" :formatter="crud.formatIsOrNot" :min-width="flexWidth('cache',crud.data,'缓存')">
<el-table-column prop="cache" :label="$t('menu.table_title.cache')" :formatter="crud.formatIsOrNot" :min-width="flexWidth('cache',crud.data,$t('menu.table_title.cache'))">
<template slot-scope="scope">
<span v-if="scope.row.cache"></span>
<span v-else></span>
<span v-if="scope.row.cache">YES</span>
<span v-else> NO</span>
</template>
</el-table-column>
<el-table-column prop="hidden" label="可见" :formatter="crud.formatIsOrNot" :min-width="flexWidth('hidden',crud.data,'可见')">
<el-table-column prop="hidden" :label="$t('menu.table_title.visible')" :formatter="crud.formatIsOrNot" :min-width="flexWidth('hidden',crud.data,$t('menu.table_title.visible'))">
<template slot-scope="scope">
<span v-if="scope.row.hidden"></span>
<span v-else></span>
<span v-if="scope.row.hidden">NO</span>
<span v-else>YES</span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建日期" :min-width="flexWidth('createTime',crud.data,'创建日期')" />
<el-table-column prop="createTime" :label="$t('menu.table_title.create_time')" :min-width="flexWidth('createTime',crud.data,$t('menu.table_title.create_time'))" />
<el-table-column
v-permission="['admin','menu:edit','menu:del']"
label="操作"
:label="$t('auto.common.Operate')"
width="130px"
align="center"
fixed="right"
@@ -197,7 +219,7 @@
<udOperation
:data="scope.row"
:permission="permission"
msg="确定删除吗,如果存在下级节点则一并删除此操作不能撤销"
:msg="$t('menu.msg.delete_msg')"
/>
</template>
</el-table-column>
@@ -216,6 +238,7 @@ import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import Dict from '../../../components/Dict/Dict'
import i18n from '@/i18n'
// crud交由presenter持有
const defaultForm = {
@@ -240,7 +263,7 @@ export default {
name: 'Menu',
components: { Treeselect, IconSelect, crudOperation, rrOperation, udOperation },
cruds() {
return CRUD({ title: '菜单', idField: 'menu_id', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
return CRUD({ title: i18n.t('menu.title'), idField: 'menu_id', url: 'api/sysMenu', crudMethod: { ...crudMenu }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['system_type'],

View File

@@ -8,7 +8,7 @@
v-model="query.blurry"
size="mini"
clearable
placeholder="输入名称"
:placeholder="$t('role.table_title.input_name')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
@@ -27,16 +27,16 @@
width="520px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="80px">
<el-form-item label="角色名称" prop="name">
<el-form-item :label="$t('role.table_value.Name')" prop="name">
<el-input v-model="form.name" style="width: 380px;" />
</el-form-item>
<el-form-item label="备注" prop="description">
<el-form-item :label="$t('role.table_value.Name')" prop="description">
<el-input v-model="form.remark" style="width: 380px;" rows="2" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
<el-button type="text" @click="crud.cancelCU">{{ $t('task.select.Cancel') }}</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">{{ $t('task.select.Confirm') }}</el-button>
</div>
</el-dialog>
<el-row :gutter="15">
@@ -44,7 +44,7 @@
<el-col :span="12" style="margin-bottom: 10px">
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">角色列表</span>
<span class="role-span">{{ $t('role.table_value.roleList') }}</span>
</div>
<el-table
ref="table"
@@ -56,16 +56,16 @@
@current-change="handleCurrentChange"
>
<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 prop="name" :label="$t('role.table_value.Name')" :min-width="flexWidth('name',crud.data,$t('role.table_value.Name'))" show-overflow-tooltip />
<el-table-column show-overflow-tooltip prop="remark" :label="$t('role.table_value.Description')" :min-width="flexWidth('remark',crud.data,$t('role.table_value.Description'))" />
<el-table-column show-overflow-tooltip :min-width="flexWidth('create_time',crud.data,$t('role.table_value.CreateDate'))" prop="create_time" :label="$t('role.table_value.CreateDate')">
<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','roles:edit','roles:del']"
label="操作"
:label="$t('role.table_value.Operate')"
width="130px"
align="center"
fixed="right"
@@ -87,7 +87,7 @@
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<el-tooltip class="item" effect="dark" content="选择指定角色分配菜单" placement="top">
<span class="role-span">菜单分配</span>
<span class="role-span">{{ $t('role.other.Menu_assignments') }}</span>
</el-tooltip>
<el-button
v-permission="['admin','roles:edit']"
@@ -98,7 +98,7 @@
style="float: right; padding: 6px 10px"
type="primary"
@click="saveMenu"
>保存
>{{ $t('role.other.Save') }}
</el-button>
</div>
@@ -130,13 +130,14 @@ import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import i18n from '@/i18n'
const defaultForm = { role_id: null, name: null, remark: null }
export default {
name: 'Role',
components: { pagination, crudOperation, rrOperation, udOperation, crudMenu },
components: { pagination, crudOperation, rrOperation, udOperation },
cruds() {
return CRUD({ idField: 'role_id', title: '角色', url: 'api/sysRole', crudMethod: { ...crudRoles }})
return CRUD({ idField: 'role_id', title: i18n.t('role.table_value.Role'), url: 'api/sysRole', crudMethod: { ...crudRoles }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
data() {

View File

@@ -8,7 +8,7 @@
v-model="deptName"
clearable
size="mini"
placeholder="请输入部门名称"
:placeholder="$t('user.table_title.enter_department_name')"
prefix-icon="el-icon-search"
class="filter-item"
@input="getDeptDatas"
@@ -30,7 +30,7 @@
v-model="query.blurry"
clearable
size="mini"
placeholder="输入账号或者名称"
:placeholder="$t('user.table_title.Enter_Account_Number (Name)')"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
@@ -39,7 +39,7 @@
v-model="query.is_used"
clearable
size="mini"
placeholder="状态"
:placeholder="$t('user.table_title.State')"
class="filter-item"
style="width: 90px"
@change="crud.toQuery"
@@ -65,42 +65,42 @@
width="700px"
>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="100px">
<el-form-item label="用户名" prop="username">
<el-form-item :label="$t('user.table_value.Username')" prop="username">
<el-input v-model="form.username" style="width: 200px;" />
</el-form-item>
<el-form-item label="电话" prop="phone">
<el-form-item :label="$t('user.table_value.Phone')" prop="phone">
<el-input v-model.number="form.phone" style="width: 200px;" />
</el-form-item>
<el-form-item label="姓名" prop="preson_name">
<el-form-item :label="$t('user.table_value.Name')" prop="preson_name">
<el-input v-model="form.person_name" style="width: 200px;" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-form-item :label="$t('user.table_value.Mailbox')" prop="email">
<el-input v-model="form.email" style="width: 200px;" />
</el-form-item>
<br v-if="!crud.status.edit">
<el-form-item v-if="crud.status.add" label="部门" prop="depts" :rules="[{ required: true, message: '请选择部门', trigger: 'change' }]">
<el-form-item v-if="crud.status.add" :label="$t('user.table_value.Department')" prop="depts" :rules="[{ required: true, message: '请选择部门', trigger: 'change' }]">
<treeselect
v-model="form.depts"
:load-options="loadDepts"
:options="deptDatas"
style="width: 370px;"
style="width: 200px;"
:multiple="true"
:flat="true"
:normalizer="normalizer"
placeholder="选择部门类目"
:placeholder="$t('user.table_value.Select_Sector_Categories')"
/>
</el-form-item>
<br v-if="!crud.status.add">
<el-form-item v-if="crud.status.add" label="密码" prop="password">
<el-form-item v-if="crud.status.add" :label="$t('user.table_value.Password')" prop="password">
<el-input v-model="form.password" style="width: 200px;" show-password auto-complete="new-password" />
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="form.gender" style="width: 178px">
<el-radio label="">男</el-radio>
<el-radio label="">女</el-radio>
<el-form-item :label="$t('user.table_value.Sex')">
<el-radio-group v-model="form.gender" style="width: 200px">
<el-radio :label="$t('user.table_value.boy')">{{ $t('user.table_value.boy') }}</el-radio>
<el-radio :label="$t('user.table_value.girl')">{{ $t('user.table_value.girl') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" prop="is_uesd">
<el-form-item :label="$t('user.table_value.State')" prop="is_uesd">
<el-switch
v-model="form.is_used"
active-color="#409EFF"
@@ -108,14 +108,14 @@
/>
</el-form-item>
<br v-if="!crud.status.edit">
<el-form-item v-if="crud.status.add" style="margin-bottom: 0;" label="角色" prop="roles">
<el-form-item v-if="crud.status.add" style="margin-bottom: 0;" :label="$t('role.table_value.Role')" prop="roles">
<el-select
v-model="roleDatas"
style="width: 512px"
style="width: 200px"
multiple
active-value="1"
inactive-value="0"
placeholder="请选择"
:placeholder="$t('auto.common.please')"
@remove-tag="deleteTag"
@change="changeRole"
>
@@ -130,8 +130,8 @@
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
<el-button type="text" @click="crud.cancelCU">{{ $t('auto.common.Cancel') }}</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">{{ $t('auto.common.Confirm') }}</el-button>
</div>
</el-dialog>
<!--表格渲染-->
@@ -143,48 +143,50 @@
@selection-change="crud.selectionChangeHandler"
>
<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="username" :label="$t('user.table_value.Username')" :min-width="flexWidth('username',crud.data,$t('user.table_value.Username'))" />
<el-table-column
prop="person_name"
label="姓名"
:min-width="flexWidth('person_name',crud.data,'姓名')"
:label="$t('user.table_value.Name')"
:min-width="flexWidth('person_name',crud.data,$t('user.table_value.Name'))"
/>
<el-table-column prop="gender" label="性别" :min-width="flexWidth('person_name',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 prop="gender" :label="$t('user.table_value.Sex')" :min-width="flexWidth('gender',crud.data,$t('user.table_value.Sex'))" />
<el-table-column prop="phone" :label="$t('user.table_value.Phone')" :min-width="flexWidth('phone',crud.data,$t('user.table_value.Phone'))" />
<el-table-column prop="email" :label="$t('user.table_value.Mailbox')" :min-width="flexWidth('email',crud.data,$t('user.table_value.Mailbox'))" />
<el-table-column show-overflow-tooltip prop="depts" :label="$t('user.table_value.Department')" :min-width="flexWidth('depts',crud.data,$t('user.table_value.Department'))">
<template slot-scope="scope">
<span v-for=" item in scope.row.depts" :key="item.index">{{ item.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 label="状态" align="center" prop="enabled">
</el-table-column>
<el-table-column :label="$t('user.table_value.State')" align="center" prop="enabled" :min-width="flexWidth('enabled',crud.data,$t('user.table_value.State'))">
<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 prop="create_time" :label="$t('user.table_value.create_Date')" :min-width="flexWidth('create_time',crud.data,$t('user.table_value.create_Date'))" />
<el-table-column
label="操作"
:label="$t('user.table_value.Operate')"
fixed="right"
align="center"
width="200"
>
<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-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="crud.toEdit(scope.row)">{{ $t('user.other.Revise') }}</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handdeleted(scope.row)">{{ $t('user.other.Delete') }}</el-button>
<el-dropdown v-hasPermi="['system:user:resetPwd', 'system:user:edit']" size="mini">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">{{ $t('user.other.More') }}</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-refresh-right"><span @click="resetPassword(scope.row)">{{ $t('user.other.Reset') }}</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDeptDrawer(scope.row)">分配部门</span>
<span @click="openDeptDrawer(scope.row)">{{ $t('user.other.Department_permissions') }}</span>
</el-dropdown-item>
<el-dropdown-item icon="el-icon-key">
<span @click="openDataDialog(scope.row)">数据权限</span>
<span @click="openDataDialog(scope.row)">{{ $t('user.other.Data_Permissions') }}</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-lock"><span @click="changeEnabled(scope.row)">{{ enabledTypeOptions.find(item => {return item.key !== scope.row.is_used}).display_name }}{{ $t('user.other.Lock_account') }}</span></el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-check">
<span @click="openRoleDrawer(scope.row)">分配角色</span>
<span @click="openRoleDrawer(scope.row)">{{ $t('user.other.Assign_roles') }}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@@ -323,13 +325,13 @@ import { getAll, getLevel } from '@/views/system/role/role'
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'
import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
import { mapGetters } from 'vuex'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import RelevanceUserDialog from '@/views/system/user/dialog/relevanceUserDialog'
import RelevanceDeptDialog from '@/views/system/user/dialog/relevanceDeptDialog'
import i18n from '@/i18n'
let userRoles = []
const defaultForm = {
@@ -346,9 +348,9 @@ const defaultForm = {
}
export default {
name: 'User',
components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, udOperation, pagination },
components: { RelevanceDeptDialog, RelevanceUserDialog, Treeselect, crudOperation, rrOperation, pagination },
cruds() {
return CRUD({ title: '用户', idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
return CRUD({ title: i18n.t('user.table_value.User'), idField: 'user_id', url: 'api/users', crudMethod: { ...crudUser }})
},
mixins: [presenter(), header(), form(defaultForm), crud()],
// 数据字典
@@ -366,8 +368,8 @@ export default {
del: ['admin', 'user:del']
},
enabledTypeOptions: [
{ key: true, display_name: '激活' },
{ key: false, display_name: '锁定' }
{ key: true, display_name: i18n.t('user.table_value.activation') },
{ key: false, display_name: i18n.t('user.table_value.lock') }
],
rules: {
username: [
@@ -445,7 +447,6 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.crud.delAllLoading = true
this.crud.doDelete(datas)
}).catch(() => {
@@ -583,7 +584,6 @@ export default {
},
// 切换部门
handleNodeClick(data) {
this.query.dept_id = data.dept_id
this.query.needAll = true
this.crud.toQuery()
@@ -696,7 +696,7 @@ export default {
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) {
if (this.dataDialog.dataScopeType[i].value === res[index].permissionScopeType) {
this.dataDialog.dataScopeType[i].permissionId = res[index].permissionId
if (res[index].users) this.dataDialog.dataScopeType[i].users = res[index].users
if (res[index].depts) this.dataDialog.dataScopeType[i].depts = res[index].depts
@@ -716,7 +716,7 @@ 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) {
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())
}
}
@@ -725,15 +725,15 @@ export default {
this.deptIds = []
this.userIds = []
console.log(row)
if (row.permissionId == '1605129738328870912') { // 选择用户
if (row.permissionId === '1605129738328870912') { // 选择用户
this.userIds = this.dataDialog.dataScopeType[index].users
this.rowData = row
this.relevanceUser = true
} else if (row.permissionId == '1605129882164137984') { // 选择部门
} else if (row.permissionId === '1605129882164137984') { // 选择部门
this.deptIds = this.dataDialog.dataScopeType[index].depts
this.rowData = row
this.relevanceDept = true
} else if (row.permissionId == '1605128919449735168') { // 自身
} else if (row.permissionId === '1605128919449735168') { // 自身
const param = {
user_id: this.dataDialog.user_id
}
@@ -746,8 +746,8 @@ 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].depts != undefined && this.dataDialog.dataScopeType[i].depts.length > 0) this.dataDialog.dataScopeType[i].depts = []
if (this.dataDialog.dataScopeType[i].dictId === this.rowData.dictId) {
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
}
@@ -756,8 +756,8 @@ 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].users != undefined && this.dataDialog.dataScopeType[i].users.length > 0) this.dataDialog.dataScopeType[i].users = []
if (this.dataDialog.dataScopeType[i].dictId === 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
}
@@ -855,7 +855,7 @@ export default {
checkNode.parent.indeterminate = false
}
// 如果取消所有第二节点的勾选状态,则第一层父节点也取消勾选
if (checkNode.level == 2 && checkNode.parent.childNodes.every(ele => !ele.checked)) {
if (checkNode.level === 2 && checkNode.parent.childNodes.every(ele => !ele.checked)) {
checkNode.parent.checked = false
checkNode.parent.indeterminate = false
}
@@ -880,4 +880,13 @@ export default {
height: 30px;
line-height: 30px;
}
.el-form-item__label {
white-space: nowrap;
}
.no-wrap {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>