@@ -1,35 +1,43 @@
< template >
< div class = "app-container" >
< el-row :gutter = "20" >
< splitpanes : horizontal = "this.$store.getters.device === 'mobile'" class = "default-theme" >
<!-- < splitpanes : horizontal = "this.$store.getters.device === 'mobile'" class = "default-theme" > -- >
<!-- 部门数据 -- >
< pane size = "16" >
< el-col >
<!-- < pane size = "16" > -- >
< el-col :span = "4" >
< div class = "" >
< el-input v-model = "deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" / >
< el-input v-model = "deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search"
style = "margin-bottom: 20px" / >
< / div >
< div class = "" >
< el-tree :data = "deptOptions" :props = "defaultProps" :expand-on-click-node = "false" :filter-node-method = "filterNode" ref = "tree" node -key = " id " default -expand -all highlight -current @ node -click = " handleNodeClick " / >
< el-tree :data = "deptOptions" :props = "defaultProps" :expand-on-click-node = "false"
:filter-node-method = "filterNode" ref = "tree" node -key = " id " default -expand -all highlight -current
@ node -click = " handleNodeClick " / >
< / div >
< / el-col >
< / pane >
<!-- < / pane > -- >
<!-- 用户数据 -- >
< pane size = "84" >
< el-col >
< el-form :model = "queryParams" ref = "queryForm" size = "small" :inline = "true" v-show = "showSearch" label-width="68px" >
<!-- < pane size = "84" > -- >
< el-col :span = "20" >
< el-form :model = "queryParams" ref = "queryForm" size = "small" :inline = "true" v-show = "showSearch"
label -width = " 68px " >
< el-form-item label = "用户名称" prop = "userName" >
< el-input v-model = "queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" / >
< el-input v-model = "queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
@keyup.enter.native ="handleQuery" / >
< / el-form-item >
< el-form-item label = "手机号码" prop = "phonenumber" >
< el-input v-model = "queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px" @keyup.enter.native="handleQuery" / >
< el-input v-model = "queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
@keyup.enter.native ="handleQuery" / >
< / el-form-item >
< el-form-item label = "状态" prop = "status" >
< el-select v-model = "queryParams.status" placeholder="用户状态" clearable style="width: 240px" >
< el -option v-for = "dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" / >
< el -option v-for = "dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
:value = "dict.value" / >
< / el-select >
< / el-form-item >
< el-form-item label = "创建时间" >
< el-date-picker v-model = "dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" > < / el -date -picker >
< el-date-picker v-model = "dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-"
start -placeholder = " 开始日期 " end -placeholder = " 结束日期 " > < / el-date-picker >
< / el-form-item >
< el-form-item >
< el-button type = "primary" icon = "el-icon-search" size = "mini" @click ="handleQuery" > 搜索 < / el -button >
@@ -39,33 +47,47 @@
< el-row :gutter = "10" class = "mb8" >
< el-col :span = "1.5" >
< el-button type = "primary" plain icon = "el-icon-plus" size = "mini" @click ="handleAdd" v-hasPermi = "['system:user:add']" > 新增 < / el -button >
< el-button type = "primary" plain icon = "el-icon-plus" size = "mini" @click ="handleAdd"
v-hasPermi = "['system:user:add']" > 新增 < / el -button >
< / el-col >
< el-col :span = "1.5" >
< el-button type = "success" plain icon = "el-icon-edit" size = "mini" :disabled = "single" @click ="handleUpdate" v-hasPermi = "['system:user:edit']" > 修改 < / el -button >
< el-button type = "success" plain icon = "el-icon-edit" size = "mini" :disabled = "single" @click ="handleUpdate"
v-hasPermi = "['system:user:edit']" > 修改 < / el -button >
< / el-col >
< el-col :span = "1.5" >
< el-button type = "danger" plain icon = "el-icon-delete" size = "mini" :disabled = "multiple" @click ="handleDelete" v-hasPermi = "['system:user:remove']" > 删除 < / el -button >
< el-button type = "danger" plain icon = "el-icon-delete" size = "mini" :disabled = "multiple" @click ="handleDelete"
v-hasPermi = "['system:user:remove']" > 删除 < / el -button >
< / el-col >
< el-col :span = "1.5" >
< el-button type = "info" plain icon = "el-icon-upload2" size = "mini" @click ="handleImport" v-hasPermi = "['system:user:import']" > 导入 < / el -button >
< el-button type = "info" plain icon = "el-icon-upload2" size = "mini" @click ="handleImport"
v-hasPermi = "['system:user:import']" > 导入 < / el -button >
< / el-col >
<!-- < el-col :span = "1.5" >
< el-button type = "warning" plain icon = "el-icon-download" size = "mini" @click ="handleExport"
v-hasPermi = "['system:user:export']" > 导出 < / el -button >
< / el-col > -- >
< el-button type = "warning" plain icon = "el-icon-download" size = "mini" @click ="handleExport"
v-hasPermi = "['system:user:export']" > 导出 < / el -button >
< el-col :span = "1.5" >
< el-button type = "warning" plain icon = "el-icon-download" size = "mini" @click ="handleExport" v-hasPermi = "['system:user:export']" > 导出 < / el -button >
< / el-col >
< right-toolbar :showSearch.sync = "showSearch" @queryTable ="getList" :columns = "columns" > < / right-toolbar >
< / el-col >
< / el-row >
< el-table v-loading = "loading" :data="userList" @selection-change="handleSelectionChange" >
< el -table -column type = "selection" width = "50" align = "center" / >
< el-table-column label = "用户编号" align = "center" key = "userId" prop = "userId" v-if = "columns.userId.visible" / >
< el-table-column label = "用户名称" align = "center" key = "userName" prop = "userName" v-if = "columns.userName.visible" :show-overflow-tooltip="true" / >
< el-table-column label = "用户昵称" align = "center" key = "nickName" prop = "nickName" v-if = "columns.nickName.visible" :show-overflow-tooltip= "true" / >
< el-table-column label = "部门 " align = "center" key = "dept Name" prop = "dept.dept Name" v-if = "columns.dept Name.visible" :show-overflow-tooltip="true" / >
< el-table-column label = "手机号码" align = "center" key = "phonenumber" prop = "phonenumber" v-if = "columns.phonenumber.visible" width="120" / >
< el-table-column label = "用户名称" align = "center" key = "userName" prop = "userName" v-if = "columns.userName.visible"
:show-overflow-tooltip= "true" / >
< el-table-column label = "用户昵称 " align = "center" key = "nick Name" prop = "nick Name" v-if = "columns.nick Name.visible"
:show-overflow-tooltip = "true" / >
< el-table-column label = "部门" align = "center" key = "deptName" prop = "dept.deptName" v-if = "columns.deptName.visible"
:show-overflow-tooltip = "true" / >
< el-table-column label = "手机号码" align = "center" key = "phonenumber" prop = "phonenumber"
v-if = "columns.phonenumber.visible" width="120" / >
< el-table-column label = "状态" align = "center" key = "status" v-if = "columns.status.visible" >
< template slot -scope = " scope " >
< el-switch v-model = "scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" > < / el -switch >
< el-switch v-model = "scope.row.status" active-value="0" inactive-value="1"
@change ="handleStatusChange(scope.row)" > < / el -switch >
< / template >
< / el-table-column >
< el-table-column label = "创建时间" align = "center" prop = "createTime" v-if = "columns.createTime.visible" width="160" >
@@ -75,23 +97,29 @@
< / el-table-column >
< el-table-column label = "操作" align = "center" width = "160" class -name = " small -padding fixed -width " >
< template slot -scope = " scope " v-if = "scope.row.userId !== 1" >
< el -button size = "mini" type = "text" icon = "el-icon-edit" @click ="handleUpdate(scope.row)" v-hasPermi = "['system:user:edit']" > 修改 < / el -button >
< el-button size = "mini" type = "text" icon = "el-icon-delete" @click ="handleDelete(scope.row)" v-hasPermi = "['system:user:remove ']" > 删除 < / el -button >
< el-dropdow n size = "mini" @command ="(command) => handleCommand(command, scope.row)" v-hasPermi = "['system:user:resetPwd', 'system:user:edit']" >
< el -button size = "mini" type = "text" icon = "el-icon-edit" @click ="handleUpdate(scope.row)"
v-hasPermi = "['system:user:edit ']" > 修改 < / el -button >
< el-butto n size = "mini" type = "text" icon = "el-icon-delete" @click ="handleDelete(scope.row)"
v-hasPermi = "['system:user:remove']" > 删除 < / el -button >
< el-dropdown size = "mini" @command ="(command) => handleCommand(command, scope.row)"
v-hasPermi = "['system:user:resetPwd', 'system:user:edit']" >
< el -button size = "mini" type = "text" icon = "el-icon-d-arrow-right" > 更多 < / el-button >
< el-dropdown-menu slot = "dropdown" >
< el-dropdown-item command = "handleResetPwd" icon = "el-icon-key" v-hasPermi = "['system:user:resetPwd']" > 重置密码 < / el -dropdown -item >
< el-dropdown-item command = "handleAuthRole" icon = "el-icon-circle-check" v-hasPermi = "['system:user:edit ']" > 分配角色 < / el -dropdown -item >
< el-dropdown-item command = "handleResetPwd" icon = "el-icon-key"
v-hasPermi = "['system:user:resetPwd ']" > 重置密码 < / el -dropdown -item >
< el-dropdown-item command = "handleAuthRole" icon = "el-icon-circle-check"
v-hasPermi = "['system:user:edit']" > 分配角色 < / el -dropdown -item >
< / el-dropdown-menu >
< / el-dropdown >
< / template >
< / el-table-column >
< / el-table >
< pagination v-show = "total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" / >
< pagination v-show = "total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync = "queryParams.pageSize" @pagination ="getList" / >
< / el-col >
< / pane >
< / splitpanes >
<!-- < / pane > -- >
<!-- < / splitpanes > -- >
< / el-row >
<!-- 添加或修改用户配置对话框 -- >
@@ -105,7 +133,8 @@
< / el-col >
< el-col :span = "12" >
< el-form-item label = "归属部门" prop = "deptId" >
< treeselect v-model = "form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" / >
< treeselect v-model = "form.deptId" :options="enabledDeptOptions" :show-count="true"
placeholder = "请选择归属部门" / >
< / el-form-item >
< / el-col >
< / el-row >
@@ -137,14 +166,17 @@
< el-col :span = "12" >
< el-form-item label = "用户性别" >
< el-select v-model = "form.sex" placeholder="请选择性别" >
< el -option v-for = "dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value" > < / el -option >
< el -option v-for = "dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label"
:value = "dict.value" > < / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "状态" >
< el-radio-group v-model = "form.status" >
< el -radio v-for = "dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value" > {{ dict.label }} < / el -radio >
< el -radio v-for = "dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value" > {{
dict.label
}} < / el -radio >
< / el-radio-group >
< / el-form-item >
< / el-col >
@@ -153,14 +185,16 @@
< el-col :span = "12" >
< el-form-item label = "岗位" >
< el-select v-model = "form.postIds" multiple placeholder="请选择岗位" >
< el -option v-for = "item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId" :disabled="item.status == 1" > < / el-option >
< el -option v-for = "item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
: disabled = "item.status == 1" > < / el-option >
< / el-select >
< / el-form-item >
< / el-col >
< el-col :span = "12" >
< el-form-item label = "角色" >
< el-select v-model = "form.roleIds" multiple placeholder="请选择角色" >
< el -option v-for = "item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1" > < / el -option >
< el -option v-for = "item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId"
: disabled = "item.status == 1" > < / el-option >
< / el-select >
< / el-form-item >
< / el-col >
@@ -181,7 +215,9 @@
<!-- 用户导入对话框 -- >
< el-dialog :title = "upload.title" :visible.sync = "upload.open" width = "400px" append -to -body >
< el-upload ref = "upload" :limit = "1" accept = ".xlsx, .xls" :headers = "upload.headers" : action = "upload.url + '?updateSupport=' + upload.updateSupport" :disabled = "upload.isUploading" :on-progress = "handleFileUploadProgress" :on-success = "handleFileSuccess" :auto-upload = "false" drag >
< el-upload ref = "upload" :limit = "1" accept = ".xlsx, .xls" :headers = "upload.headers"
: action = "upload.url + '?updateSupport=' + upload.updateSupport" :disabled = "upload.isUploading"
:on-progress = "handleFileUploadProgress" :on-success = "handleFileSuccess" :auto-upload = "false" drag >
< i class = "el-icon-upload" > < / i >
< div class = "el-upload__text" > 将文件拖到此处 , 或 < em > 点击上传 < / em > < / div >
< div class = "el-upload__tip text-center" slot = "tip" >
@@ -189,7 +225,8 @@
< el-checkbox v-model = "upload.updateSupport" / > 是否更新已经存在的用户数据
< / div >
< span > 仅允许导入xls 、 xlsx格式文件 。 < / span >
< el-link type = "primary" :underline = "false" style = "font-size: 12px; vertical-align: baseline" @click ="importTemplate" > 下载模板 < / el -link >
< el-link type = "primary" :underline = "false" style = "font-size: 12px; vertical-align: baseline"
@click ="importTemplate" > 下载模板 < / el -link >
< / div >
< / el-upload >
< div slot = "footer" class = "dialog-footer" >
@@ -561,18 +598,36 @@ export default {
background : # 2 B2F36 ;
border : none ;
}
. splitpanes . default - theme . splitpanes _ _splitter {
position : relative ;
background : # 39414 A ! important ;
transition : background .2 s ease ;
}
. splitpanes . default - theme . splitpanes _ _splitter : hover { background : # 46505 A ! important ; }
. splitpanes . default - theme . splitpanes _ _splitter : : before {
content : "" ; position : absolute ; left : 50 % ; top : 50 % ; transform : translate ( - 50 % , - 50 % ) ;
border - radius : 2 px ; background : # 4 A525B ;
. splitpanes . default - theme . splitpanes _ _splitter : hover {
background : # 46505 A ! important ;
}
. splitpanes . default - theme . splitpanes _ _splitter : : before {
content : "" ;
position : absolute ;
left : 50 % ;
top : 50 % ;
transform : translate ( - 50 % , - 50 % ) ;
border - radius : 2 px ;
background : # 4 A525B ;
}
. splitpanes . default - theme . splitpanes -- vertical . splitpanes _ _splitter : : before {
width : 2 px ;
height : 60 % ;
}
. splitpanes . default - theme . splitpanes -- horizontal . splitpanes _ _splitter : : before {
height : 2 px ;
width : 60 % ;
}
. splitpanes . default - theme . splitpanes -- vertical . splitpanes _ _splitter : : before { width : 2 px ; height : 60 % ; }
. splitpanes . default - theme . splitpanes -- horizontal . splitpanes _ _splitter : : before { height : 2 px ; width : 60 % ; }
/* ========== 左侧 pane: 树卡片化 ========== */
. splitpanes . default - theme . splitpanes _ _pane : first - child {
@@ -581,23 +636,32 @@ export default {
padding : 12 px ;
box - sizing : border - box ;
border : 1 px solid # 39414 A ;
border - radius : 10 px ; /* 外缘圆角 */
border - radius : 10 px ;
/* 外缘圆角 */
box - shadow :
0 10 px 20 px rgba ( 0 , 0 , 0 , .28 ) , /* 外部阴影,轻悬浮 */
inset 0 1 px 0 rgba ( 255 , 255 , 255 , .04 ) ; /* 顶部微高光 */
0 10 px 20 px rgba ( 0 , 0 , 0 , .28 ) ,
/* 外部阴影,轻悬浮 */
inset 0 1 px 0 rgba ( 255 , 255 , 255 , .04 ) ;
/* 顶部微高光 */
}
/* 左卡片内部:搜索输入与树对齐、树铺满 */
. splitpanes . default - theme . splitpanes _ _pane : first - child . head - container {
margin : 0 0 10 px 0 ;
}
. splitpanes . default - theme . splitpanes _ _pane : first - child . el - input . el - input _ _inner {
background : # 2 F3339 ; border : 1 px solid # 444 A52 ; color : # EAEAEA ;
background : # 2 F3339 ;
border : 1 px solid # 444 A52 ;
color : # EAEAEA ;
}
. splitpanes . default - theme . splitpanes _ _pane : first - child . el - tree {
height : calc ( 100 % - 48 px ) ; /* 让树尽量铺满高度(根据你的搜索区高度可微调) */
height : calc ( 100 % - 48 px ) ;
/* 让树尽量铺满高度(根据你的搜索区高度可微调) */
overflow : auto ;
background : transparent ; /* 让卡片底色透出 */
background : transparent ;
/* 让卡片底色透出 */
border : none ;
}
@@ -610,7 +674,8 @@ export default {
border : 1 px solid # 39414 A ;
border - radius : 10 px ;
box - shadow :
inset 0 12 px 24 px rgba ( 0 , 0 , 0 , .35 ) , /* 内阴影,像面板内凹 */
inset 0 12 px 24 px rgba ( 0 , 0 , 0 , .35 ) ,
/* 内阴影,像面板内凹 */
0 1 px 0 rgba ( 255 , 255 , 255 , .04 ) inset ;
}
@@ -618,15 +683,20 @@ export default {
. splitpanes . default - theme . splitpanes _ _pane : last - child . el - form {
margin - bottom : 10 px ;
}
. splitpanes . default - theme . splitpanes _ _pane : last - child . mb8 { margin - bottom : 10 px ; }
. splitpanes . default - theme . splitpanes _ _pane : last - child . mb8 {
margin - bottom : 10 px ;
}
. splitpanes . default - theme . splitpanes _ _pane : last - child . el - table {
background : # 1 E2227 ; /* 表格卡片底 */
background : # 1 E2227 ;
/* 表格卡片底 */
border - radius : 10 px ;
border : 1 px solid # 444 A52 ;
overflow : hidden ;
box - shadow :
0 8 px 16 px rgba ( 0 , 0 , 0 , .25 ) , /* 外部阴影 */
0 8 px 16 px rgba ( 0 , 0 , 0 , .25 ) ,
/* 外部阴影 */
inset 0 1 px 0 rgba ( 255 , 255 , 255 , .03 ) ;
}
@@ -636,19 +706,35 @@ export default {
}
/* pane 内滚动条统一 */
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar { width : 8 px ; height : 8 px ; }
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar - thumb { background : # 4 A525B ; border - radius : 6 px ; }
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar - track { background : transparent ; }
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar {
width : 8 px ;
height : 8 px ;
}
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar - thumb {
background : # 4 A525B ;
border - radius : 6 px ;
}
. splitpanes . default - theme . splitpanes _ _pane : : - webkit - scrollbar - track {
background : transparent ;
}
/* 响应式:窄屏减少内边距,避免拥挤 */
@ media ( max - width : 1200 px ) {
. splitpanes . default - theme . splitpanes _ _pane : first - child ,
. splitpanes . default - theme . splitpanes _ _pane : last - child { padding : 12 px ; }
. splitpanes . default - theme . splitpanes _ _pane : last - child {
padding : 12 px ;
}
}
@ media ( max - width : 992 px ) {
. splitpanes . default - theme . splitpanes _ _pane : first - child ,
. splitpanes . default - theme . splitpanes _ _pane : last - child { padding : 8 px ; border - radius : 8 px ; }
. splitpanes . default - theme . splitpanes _ _pane : last - child {
padding : 8 px ;
border - radius : 8 px ;
}
}
< / style >