Commit caebd246 authored by 杨硕's avatar 杨硕

完善模版项目

parent 39e63d54
import request from '@/utils/request'
import Qs from 'qs'
// 查询异常日志列表
export function list(query) {
return request({
url: '/monitor/errorLog/list',
url: '/monitor/errorLog/queryErrorLogListByPagination',
method: 'get',
params: query
})
}
// 删除异常日志
export function delErrLog(operId) {
export function delErrLog(data) {
// data = Qs.stringify(data)
return request({
url: '/monitor/errorLog/' + operId,
method: 'delete'
url: '/monitor/errorLog/delete',
method: 'post',
data,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
......
import request from '@/utils/request'
import Qs from 'qs'
// 查询登录日志列表
export function list(query) {
return request({
url: '/monitor/loginInfo/list',
url: '/monitor/loginInfo/querySysLoginListByPagination',
method: 'get',
params: query
})
}
// 删除登录日志
export function delLogininfo(infoId) {
export function delLogininfo(data) {
// data = Qs.stringify(data)
return request({
url: '/monitor/loginInfo/' + infoId,
method: 'delete'
url: '/monitor/loginInfo/delete',
method: 'post',
data,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
......
import request from '@/utils/request'
import Qs from 'qs'
// 查询操作日志列表
export function list(query) {
return request({
url: '/monitor/operLog/list',
url: '/monitor/operLog/queryOperLogListByPagination',
method: 'get',
params: query
})
}
// 删除操作日志
export function delOperLog(operId) {
export function delOperLog(data) {
// data = Qs.stringify(data)
return request({
url: '/monitor/operLog/' + operId,
method: 'delete'
url: '/monitor/operLog/delete',
method: 'post',
data,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
......
......@@ -8,6 +8,12 @@ export function listRole(query) {
params: query
})
}
export function getlistRole() {
return request({
url: 'system/role/listAll',
method: 'get'
})
}
// 查询角色详细
export function getRole(businessId) {
......
......@@ -40,10 +40,10 @@ export function addUser(data) {
// 修改用户
export function updateUser(data) {
const businessId = data.businessId
// const businessId = data.businessId
data = Qs.stringify(data)
return request({
url: '/system/user/update/' + businessId,
url: '/system/user/update',
method: 'put',
data: data,
headers: {
......
......@@ -98,7 +98,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column :show-overflow-tooltip="true" label="日志编号" width="100" align="center" prop="businessId">
<template slot-scope="scope">
{{ scope.row.operId || '-' }}
{{ scope.row.businessId || '-' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="系统模块" align="center" prop="systemMode">
......@@ -200,9 +200,9 @@
</el-col>
</el-row>
</el-form>
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
</el-dialog>
</div>
</template>
......@@ -315,7 +315,7 @@ export default {
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.operId)
this.ids = selection.map(item => item.businessId)
},
/** 详细按钮操作 */
handleView(row) {
......@@ -329,7 +329,13 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return delErrLog(this.ids)
const id = this.ids.join(',')
// TODO: clear this log
console.log(`this.ids`, id)
const query = {
deleteIds: id
}
return delErrLog(query)
}).then(() => {
this.getList()
this.$message.success('删除成功')
......@@ -384,7 +390,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.app-container-errlog {
.app-container-errlog {
padding: 0;
font-size: 18px;
.placeholder{
......@@ -392,6 +398,6 @@ export default {
background-color: #F4F4F4;
margin-bottom:10px
}
}
}
</style>
......@@ -80,50 +80,60 @@
<div style="padding:10px">
<div class="mb12 font-small-bold">登录日志列表</div>
<el-table v-loading="loading" border :data="list" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- &lt;!&ndash; <el-table-column type="index" label="序号" width="50" />&ndash;&gt;-->
<!-- <el-table-column label="访问编号" width="100" align="center" prop="infoId" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.infoId || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="用户名称" align="center" prop="userName" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.userName || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="登录地址" align="center" prop="ipaddr" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.ipaddr || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作信息" align="center" prop="msg" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.msg || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- &lt;!&ndash; <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />&ndash;&gt;-->
<!-- <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />-->
<!-- &lt;!&ndash; <el-table-column label="浏览器" align="center" prop="browser" show-overflow-tooltip>&ndash;&gt;-->
<!-- &lt;!&ndash; <template slot-scope="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; {{ scope.row.browser || '-' }}&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column label="操作系统" align="center" prop="os" show-overflow-tooltip>&ndash;&gt;-->
<!-- &lt;!&ndash; <template slot-scope="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; {{ scope.row.os || '-' }}&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- <el-table-column label="登录状态" align="center" prop="status" :formatter="statusFormat" />-->
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- &lt;!&ndash; <el-table-column type="index" label="序号" width="50" />&ndash;&gt;-->
<!-- <el-table-column label="访问编号" width="100" align="center" prop="infoId" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.infoId || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="用户名称" align="center" prop="userName" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.userName || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="登录地址" align="center" prop="ipaddr" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.ipaddr || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作信息" align="center" prop="msg" show-overflow-tooltip>-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.msg || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- &lt;!&ndash; <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />&ndash;&gt;-->
<!-- <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />-->
<!-- &lt;!&ndash; <el-table-column label="浏览器" align="center" prop="browser" show-overflow-tooltip>&ndash;&gt;-->
<!-- &lt;!&ndash; <template slot-scope="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; {{ scope.row.browser || '-' }}&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- &lt;!&ndash; <el-table-column label="操作系统" align="center" prop="os" show-overflow-tooltip>&ndash;&gt;-->
<!-- &lt;!&ndash; <template slot-scope="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; {{ scope.row.os || '-' }}&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- <el-table-column label="登录状态" align="center" prop="status" :formatter="statusFormat" />-->
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="访问编号" align="center" prop="businessId" />
<el-table-column label="用户名称" align="center" prop="username" />
<el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<!-- <el-table-column label="浏览器" align="center" prop="browser" />
<el-table-column label="操作系统" align="center" prop="os" />-->
<el-table-column label="登录状态" align="center" prop="status" :formatter="statusFormat" />
<el-table-column label="提示信息" align="center" prop="msg" />
<!-- <el-table-column label="登录状态" align="center" prop="status" :formatter="statusFormat" />-->
<el-table-column label="登录状态" align="center" prop="status">
<template slot-scope="scope">
<span v-if="scope.row.status === '0'">失败</span>
<span v-if="scope.row.status === '1'">成功</span>
</template>
</el-table-column>
<el-table-column label="提示信息" align="center">
<template slot-scope="scope">
{{ scope.row.msg || '-' }}
</template>
</el-table-column>
<el-table-column label="登录时间" align="center" prop="loginTime" width="180" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.loginTime) | transformDateByFormat('YYYY-MM-DD HH:mm:ss') }}</span>
......@@ -144,8 +154,10 @@
<script>
import { list, delLogininfo, cleanLogininfo, exportLogininfo } from '@/api/monitor/loginInfo'
import dictCons from '@/utils/dictCons'
import Template from '@/views/instance/Template'
export default {
name: 'LoginInfo',
components: { Template },
data() {
return {
// 遮罩层
......@@ -226,7 +238,7 @@ export default {
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.infoId)
this.ids = selection.map(item => item.businessId)
this.multiple = !selection.length
},
/** 删除按钮操作 */
......@@ -236,7 +248,13 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return delLogininfo(this.ids)
const id = this.ids.join(',')
// TODO: clear this log
console.log(`this.ids`, id)
const query = {
deleteIds: id
}
return delLogininfo(query)
}).then(() => {
this.getList()
this.$message.success('删除成功')
......@@ -291,7 +309,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.app-container {
.app-container {
padding: 0;
font-size: 18px;
.placeholder{
......@@ -299,6 +317,6 @@ export default {
background-color: #F4F4F4;
margin-bottom:10px
}
}
}
</style>
......@@ -98,7 +98,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column :show-overflow-tooltip="true" label="日志编号" width="100" align="center" prop="operId">
<template slot-scope="scope">
{{ scope.row.operId || '-' }}
{{ scope.row.businessId || '-' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="系统模块" align="center" prop="systemMode">
......@@ -200,9 +200,9 @@
<!-- </el-col>-->
</el-row>
</el-form>
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
</el-dialog>
</div>
</template>
......@@ -316,7 +316,7 @@ export default {
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.operId)
this.ids = selection.map(item => item.businessId)
},
/** 详细按钮操作 */
handleView(row) {
......@@ -330,7 +330,14 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return delOperLog(this.ids)
const id = this.ids.join(',')
// TODO: clear this log
console.log(`this.ids`, id)
const query = {
deleteIds: id
}
// const deleteIds = JSON.stringify(query)
return delOperLog(query)
}).then(() => {
this.getList()
this.$message.success('删除成功')
......@@ -385,7 +392,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.app-container-operlog {
.app-container-operlog {
padding: 0;
font-size: 18px;
.placeholder{
......@@ -393,6 +400,6 @@ export default {
background-color: #F4F4F4;
margin-bottom:10px
}
}
}
</style>
<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" style="width: 100%" :model="queryParams" :inline="true">
<el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType" placeholder="请选择字典名称" clearable size="small">
<el-option
v-for="item in typeOptions"
:key="item.businessId"
:label="item.dictName"
:value="item.dictType"
/>
</el-select>
</el-form-item>
<el-form-item label="字典标签" prop="dictLabel">
<div class="user-manage">
<div class="search" style="border-bottom: 14px solid #f4f4f4">
<el-form v-show="showSearch" ref="queryForm" style="padding: 0 0 0 10px" class="formClass" :model="queryParams" :inline="true" label-width="auto">
<!-- <el-form-item label="用户类型" prop="name" class="noMargin">-->
<!-- <el-input-->
<!-- v-model="queryParams.name"-->
<!-- placeholder="请输入用户类型"-->
<!-- clearable-->
<!-- :maxlength="30"-->
<!-- size="small"-->
<!-- style="width: 150px"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="登录名" prop="username">
<el-input
v-model="queryParams.dictLabel"
placeholder="请输入字典标签"
v-model="queryParams.username"
placeholder="请输入登录名"
clearable
:maxlength="30"
size="small"
@keyup.enter.native="handleQuery"
style="width: 150px"
/>
</el-form-item>
<el-form-item label="状态" prop="flag">
<el-select v-model="queryParams.flag" placeholder="数据状态" clearable size="small">
<el-select
v-model="queryParams.flag"
placeholder="请选择用户状态"
clearable
size="small"
style="width: 150px"
>
<el-option
v-for="dict in statusOptions"
:key="dict.dictValue"
......@@ -32,131 +39,153 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" @click="handleQuery">搜索</el-button>
<el-button size="small" @click="resetQuery">重置</el-button>
<el-button type="primary" style="padding: 8px 7px;" icon="el-icon-search" size="small" @click="handleQuery">查询</el-button>
<el-button type="primary" style="padding: 8px 7px;" icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-form-item style="float: right">
<!-- <el-button-->
<!-- v-hasPermi="['sys:user:add']"-->
<!-- style="padding: 8px 7px;"-->
<!-- type="primary"-->
<!-- size="small"-->
<!-- icon="el-icon-plus"-->
<!-- @click="handleFormAdd"-->
<!-- >表单页新增模板</el-button>-->
<el-button
v-hasPermi="['sys:dict:add']"
v-hasPermi="['sys:user:add']"
style="padding: 8px 7px;"
type="primary"
size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['sys:dict:update']"
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
>新增</el-button>
<el-button
v-hasPermi="['sys:dict:delete']"
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-has-permi="['sys:dict:export']"
style="padding: 8px 7px;"
type="warning"
icon="el-icon-upload"
size="small"
@click="handleImport"
>导入</el-button>
<el-button
v-hasPermi="['sys:user:export']"
style="padding: 8px 7px;"
type="success"
size="small"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出
</el-button>
>导出</el-button>
</el-form-item>
</el-form>
</div>
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24" style="background: #f4f4f4;height: 100%">
<div class="head-container" style="padding: 10px 6px;background: #FFFFFF">
<el-input
v-model="deptName"
placeholder="请输入部门名称"
clearable
:maxlength="30"
size="mini"
/>
</div>
<div class="head-container" style="overflow-y:auto;min-height: 70.6vh;height: calc(100% - 48px);background: #ffffff;padding-right: 5px">
<el-tree
ref="tree"
:key="currentNodeKey"
:data="deptOptionsTree"
:props="defaultProps"
:expand-on-click-node="false"
:filter-node-method="filterNode"
default-expand-all
highlight-current
:current-node-key="currentNode"
@node-click="handleNodeClick"
>
<div slot-scope="{ node }" style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden" class="custom-tree-node">
<span style="font-size: 14px" :title="node.label">{{ node.label }}</span>
</div>
</el-tree>
</div>
</el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<div class="placeholder" />
<div style="padding:10px">
<div class="mb12 font-small-bold">字典参数列表</div>
<el-table v-loading="loading" :data="dataList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column :show-overflow-tooltip="true" label="参数编码" prop="dictCode">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.dictCode || '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="字典编码" align="center" prop="businessId" />
<el-table-column :show-overflow-tooltip="true" label="字典标签" prop="dictLabel">
<!--用户数据-->
<el-col :span="20" :xs="24">
<div class="mb12 font-small-bold" style="margin-top: 20px">用户管理列表</div>
<el-table
v-loading="loading"
style="padding-right: 10px"
:data="userList"
>
<el-table-column type="index" label="序号" width="50" />
<el-table-column
label="用户编号"
>
<template v-slot:default="scope">
{{ scope.row.businessId || '-' }}
</template>
</el-table-column>
<el-table-column label="登录名" prop="username" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.dictLabel || '-' }}
{{ scope.row.username || '-' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="字典键值" prop="dictValue">
<el-table-column label="用户名称" prop="userType" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.dictValue || '-' }}
{{ scope.row.name || '-' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="字典排序" prop="dictSort">
<el-table-column label="手机号" prop="phone" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ isNaN(scope.row.dictSort) ? '-' : scope.row.dictSort }}
{{ scope.row.phone || '-' }}
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="flag" :formatter="statusFormat" >
<el-table-column width="120" label="状态" prop="flag">
<template slot-scope="scope">
<el-switch
v-model="scope.row.flag"
class="switchDisabledStyle"
inactive-value="0"
active-value="1"
@click.native="changeStatus(scope.row)"
>
</el-switch>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="备注" prop="remarks">
<template slot-scope="scope">
{{ scope.row.remarks || '-' }}
@click.native="handleStatusChange(scope.row)"
/>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="创建时间" prop="createDate">
<el-table-column :show-overflow-tooltip="true" label="创建时间" prop="createDate" width="160">
<template slot-scope="scope">
<span>{{ scope.row.createDate | transformDateByFormat('YYYY-MM-DD HH:mm') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width">
<el-table-column
label="操作"
width="180"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
v-hasPermi="['sys:dictConfig:edit']"
v-hasPermi="['sys:user:update']"
size="mini"
type="text"
style="color: #49cec9"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['sys:dictConfig:remove']"
v-hasPermi="['sys:user:resetPwd']"
size="mini"
type="text"
:loading="addLoading"
@click="handleResetPwd(scope.row)"
>重置</el-button>
<el-button
v-if="scope.row.businessId !== 1"
v-hasPermi="['sys:user:delete']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
<el-switch
v-model="scope.row.status"
v-hasPermi="['sys:dictConfig:toggle']"
disabled
class="switchDisabledStyle"
active-value="0"
inactive-value="1"
@click.native="changeStatus(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total>0"
:total="total"
......@@ -164,147 +193,523 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="字典类型">
<el-input v-model.trim="form.dictType" :disabled="true" show-word-limit maxlength="30" placeholder="请输入字典类型" />
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" />
</el-form-item>
<el-form-item label="参数标签" prop="dictLabel">
<el-input v-model.trim="form.dictLabel" show-word-limit maxlength="30" placeholder="请输入参数标签" />
</el-col>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择">
<el-option
v-for="dict in sexOptions"
:key="dict.dictValue"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="参数键值" prop="dictValue">
<el-input v-model.trim="form.dictValue" show-word-limit maxlength="300" placeholder="请输入参数键值" />
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="phone">
<el-input
v-model.trim="form.phone"
value="phone"
placeholder="请输入手机号码"
maxlength="11"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="25" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="登录名" prop="username">
<el-input v-model="form.username" placeholder="请输入登录名" />
</el-form-item>
<el-form-item label="参数排序" prop="dictSort">
<el-input-number v-model="form.dictSort" style="width: 100%" controls-position="right" :min="0" />
</el-col>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="参数状态" prop="status">
<el-radio-group v-model="form.status">
</el-col>
<el-col :span="12">
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model.trim="form.idNumber" placeholder="请输入身份证号" maxlength="18" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="状态">
<el-radio-group v-model="form.flag">
<el-radio
v-for="dict in statusOptions.filter(item => { return item.dictValue })"
v-for="dict in statusOptions"
:key="dict.dictValue"
:label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model.trim="form.remarks" type="textarea" show-word-limit maxlength="200" placeholder="请输入内容" />
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="部门" prop="postId">
<treeSelect
v-model="form.deptId"
:disable-branch-nodes="true"
:options="deptChildren"
:show-count="true"
placeholder="请选择归属部门"
@input="changeValue"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="角色" prop="postId">
<el-select v-model="form.roleList" multiple placeholder="请选择" style="width: 100%" @change="roleChange">
<el-option
v-for="item in options"
:key="item.businessId"
:label="item.roleName"
:value="item.businessId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submitForm">确 定</el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
:on-change="employeeUpload"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-preview="handlePreview"
:file-list="fileList"
drag
>
<i class="el-icon-upload" />
<div class="el-upload__text">
将文件拖到此处,或
<em>点击上传</em>
</div>
<div slot="tip" class="el-upload__tip">
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
<el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
</div>
<div slot="tip" class="el-upload__tip" style="color:red">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取 消</el-button>
<el-button :loading="importLoading" type="primary" @click="submitFileForm">确 定</el-button>
</div>
</el-dialog>
<el-dialog
:close-on-click-modal="false"
title="修改密码"
width="30%"
custom-class="paddingFixed"
:visible.sync="resetPwdDiaLog"
@close="$refs.ruleForm.resetFields(),pwdType = 'password'"
>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="demo-ruleForm">
<el-form-item label="新密码" prop="newPassword">
<el-input
id="restPwd"
v-model.trim="ruleForm.newPassword"
:show-password="false"
autocomplete="off"
auto-complete="off"
:type="pwdType"
placeholder="请输入8~16位,由字母和数字混合所组成的新密码"
:maxlength="16"
>
<svg-icon
slot="suffix"
:style="{ width: '18px', height: '18px', verticalAlign: pwdTypeMap[pwdType] ? 'middle' : '-6px', marginRight: '5px', cursor: 'pointer' }"
:icon-class="pwdType === 'password' ? 'eye' : 'eye-open'"
@click.stop="pwdTypeMap[pwdType] ? pwdType = 'password' : pwdType = 'text'"
/>
</el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="resetPwdDiaLog = false">取 消</el-button>
<el-button :disabled="userRestLoading" :loading="userRestLoading" type="primary" @click="handleResetPwdSure">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { listData, getData, delData, addData, updateData, exportData, checkDictLabelUnique } from '@/api/system/dict/data'
import {listType, getType, updateType} from '@/api/system/dict/type'
import dictCons from '@/utils/dictCons'
import {
listUser,
getUser,
delUser,
addUser,
updateUser,
exportUser,
resetUserPwd,
changeUserStatus,
importExcel,
uploadFalseFile,
importTemplate
// userLoginManage
} from '@/api/system/user'
import { getToken } from '@/utils/auth'
import { getChildrenDept, treeselect } from '@/api/system/dept'
import TreeSelect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getlistRole, listRole } from '@/api/system/role'
export default {
name: 'Data',
name: 'User',
components: { TreeSelect },
data() {
const verifyIDProp = (rule, value, callback) => {
if (value === '' || value === undefined || value === null) {
var trueGroupName = (rule, value, callback) => {
if (value && !value.trim()) {
return callback(new Error('请输入正确的用户昵称'))
}
callback()
} else if (!this.form.dictLabelOne || this.form.dictLabelOne !== this.form.dictLabel) {
// 验证编码是否重复
checkDictLabelUnique(this.form.dictLabel).then(
(res) => {
if (res.code === 200) {
if (res.msg === '0') {
}
var passwordCheck = (rule, value, callback) => {
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/
if (!pattern.test(value)) {
callback(new Error('新密码必须为数字与字母的组合'))
}
callback()
} else if (res.msg === '1') {
callback(new Error('字典标签已存在'))
}
var phone = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入手机号'))
} else {
callback()
}
}
var idNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入身份证号'))
} else {
callback()
}
}
).catch(err => {
callback()
})
var name = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入用户类型'))
} else {
callback()
}
}
return {
pwdTypeMap: {
text: true,
password: false
},
pwdType: 'password',
// 遮罩层
loading: true,
// 导入列表
fileList: [],
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 字典表格数据
dataList: [],
// 默认字典类型
defaultDictType: '',
// 用户表格数据
userList: null,
// 显示查询条件
showSearch: true,
// 弹出层标题
title: '',
resetPwdDiaLog: false,
// 部门树选项
deptOptions: undefined,
deptOptionsTree: undefined,
currentNode: undefined,
currentNodeKey: false,
options: [],
// 是否显示弹出层
open: false,
// 部门名称
deptName: undefined,
// 默认密码
initPassword: undefined,
importLoading: false,
// // 时间范围
// dateRange: ['', ''],
// 状态数据字典
statusOptions: [],
// 类型数据字典
typeOptions: [],
statusOptions: [
{
dictLabel: '启用',
dictValue: '1'
},
{
dictLabel: '停用',
dictValue: '0'
}
],
// 性别状态字典
sexOptions: [
{ label: '男', value: '0' },
{ label: '女', value: '1' }
],
// 岗位选项
postOptions: [],
// 角色选项
roleOptions: [],
// 子部门信息
deptChildren: [],
// 表单参数
form: {
username: '',
phone: '',
email: '',
idNumber: '',
name: ''
},
defaultProps: {
children: 'children',
label: 'label'
},
ruleForm: {
newPassword: '',
row: undefined
},
// 用户导入参数
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + '/system/user/importExcel'
},
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
dictName: undefined,
dictType: undefined,
status: '',
flag: undefined
username: undefined,
email: undefined,
phone: undefined,
nickName: undefined,
idNumber: undefined,
userType: undefined,
allowLogin: undefined,
flag: undefined,
deptId: undefined,
name: undefined
},
// 表单参数
form: {},
// 表单校验
rules: {
dictLabel: [
{ required: true, message: '请输入参数标签', trigger: 'blur' }
// { validator: verifyIDProp, trigger: 'blur' }
username: [
{ required: true, message: '请输入登录名', trigger: 'blur' }
],
dictValue: [
{ required: true, message: '请输入参数键值', trigger: 'blur' }
nickName: [
{ required: false, message: '请输入用户昵称', trigger: 'blur' },
{ validator: trueGroupName, message: '请输入正确的用户昵称' }
],
dictSort: [
{ required: true, message: '请输入参数顺序', trigger: 'blur' }
deptId: [
{ required: false, message: '请输入归属部门', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入用户密码', trigger: 'blur' },
{ min: 8, max: 16, message: '长度在 8 到 16 个字符', trigger: 'blur' },
{
validator: passwordCheck,
trigger: 'blur'
}
],
name: [
{ require: true, message: '用户姓名不能为空', trigger: 'blur' },
{ validator: name, trigger: 'blur' }
],
email: [
{ required: false, message: '请输入邮箱地址', trigger: 'blur' },
{
type: 'email',
message: '请输入正确的邮箱地址',
trigger: ['blur', 'change']
}
],
newPassword: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 8, max: 16, message: '长度在 8 到 16 个字符', trigger: 'blur' },
{ validator: passwordCheck, trigger: 'blur' }
],
phone: [
{ required: false, message: '请输入手机号码', trigger: 'blur' },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
},
{ validator: phone, trigger: 'blur' }
],
idNumber: [
{ require: true, message: '请输入身份证号', trigger: 'blur' },
{ min: 18, max: 18, message: '长度18字符', trigger: 'blur' },
{ validator: idNumber, trigger: 'blur' }
]
},
manageLoading: false
userInfoLoading: false,
userImportLoading: false,
userRestLoading: false,
addLoading: false
}
},
created() {
const dictId = this.$route.params && this.$route.params.dictId
this.getType(dictId)
this.getTypeList()
this.getDicts(dictCons['NORMAL_DISABLE']).then(response => {
this.statusOptions = response.data
/** 路由离开前存储筛选条件*/
beforeRouteLeave(to, from, next) {
this.$store.dispatch('searchSave/searchParamsSet', {
path: this.$route.path,
param: {
...this.queryParams
}
})
next()
},
watch: {
// 根据名称筛选部门树
deptName(val) {
this.$refs.tree.filter(val)
}
},
created() {
if (this.$store.getters.searchParams[this.$route.path]) {
const { searchParams } = this.$store.getters; const { path } = this.$route
const param = JSON.parse(searchParams[path]) // 保留着的查询条件
this.queryParams = { ...param }
}
this.getList()
this.getTreeSelect()
this.getRole()
// this.getConfigKey('sys.user.initPassword').then(response => {
// this.initPassword = response.msg
// })
},
methods: {
// 状态
changeStatus(row) {
changeValue() {
this.$refs.form.validateField('id')
},
/** 查询用户列表 */
getList() {
this.loading = true
listUser(this.queryParams).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false
}
)
},
roleChange(e) {
// TODO: clear this log
console.log(`e`, e)
this.$forceUpdate()
},
/** 查询部门下拉树结构 */
getTreeSelect() {
treeselect().then(response => {
this.deptOptionsTree = response.data.concat({
id: -1,
label: '无部门人员',
children: undefined
})
if (response.data && response.data.length > 0) {
this.deptOptions = response.data[0].children
}
})
},
/** 查询子部门 */
getChildrenDept(userId) {
treeselect().then(response => {
this.deptChildren = response.data
// this.form.postId = response.data.checkedKeys
})
},
getRole() {
getlistRole().then(
response => {
this.options = response.data
}
)
},
// 筛选节点
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
// 节点单击事件
handleNodeClick(data) {
if (this.currentNode === data.id) {
this.currentNode = undefined
this.queryParams.deptId = ''
this.currentNodeKey = !this.currentNodeKey
} else {
this.currentNode = data.id
this.queryParams.deptId = data.id
}
this.getList()
},
handleClick(data) {
// this.form.deptId = data.id
},
// 用户状态修改
handleStatusChange(row) {
const text = row.flag === '1' ? '启用' : '停用'
this.$confirm('确认要"' + text + '""' + row.dictLabel + '"吗?', '提示', {
this.$confirm('确认要"' + text + '""' + row.username + '"用户吗?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return updateData(row)
return changeUserStatus(row.businessId, row.flag)
}).then(() => {
this.$message({
message: text + '成功',
......@@ -314,33 +719,6 @@ export default {
row.flag = row.flag === '0' ? '1' : '0'
})
},
/** 查询字典类型详细 */
getType(dictId) {
getType(dictId).then(response => {
this.queryParams.dictType = response.data.dictType
this.defaultDictType = response.data.dictType
this.getList()
})
},
/** 查询字典类型列表 */
getTypeList() {
listType().then(response => {
this.typeOptions = response.rows
})
},
/** 查询字典数据列表 */
getList() {
this.loading = true
listData(this.queryParams).then(response => {
this.dataList = response.rows
this.total = response.total
this.loading = false
})
},
// 数据状态字典翻译
statusFormat(row, column) {
return this.selectDictLabel(this.statusOptions, row.flag)
},
// 取消按钮
cancel() {
this.open = false
......@@ -349,65 +727,127 @@ export default {
// 表单重置
reset() {
this.form = {
bussinessId: undefined,
dictCode: undefined,
dictLabel: undefined,
dictValue: undefined,
dictSort: 0,
flag: '1',
status: '0',
remarks: undefined
userId: undefined,
deptId: undefined,
phone: undefined,
username: undefined,
userType: undefined,
nickName: undefined,
password: undefined,
idNumber: undefined,
email: undefined,
sex: undefined,
flag: undefined,
remark: undefined,
postIds: [],
roleIds: []
}
this.resetForm('form')
},
/** 搜索按钮操作 */
/** 查询按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.queryParams.page = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.queryParams.dictType = this.defaultDictType
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = '添加字典数据'
this.form.dictType = this.queryParams.dictType
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.businessId)
this.ids = selection.map(item => item.userId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 没有实际作用,用来展示切换tab后表单字段保留功能*/
handleFormAdd() {
this.$router.push(
{
path: '/system/user/addFormList'
}
)
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.getChildrenDept(0)
this.open = true
this.title = '添加用户'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const dictCode = row.businessId || this.ids
getData(dictCode).then(response => {
this.form = response.data
this.form.dictLabelOne = response.data.dictLabel
const userId = row.businessId || this.ids
getUser(userId).then(response => {
this.open = true
this.title = '修改字典数据'
this.form = response.data
const data = response.data.roleIds.split(',')
// TODO: clear this log
console.log(`data`, data)
this.form.roleList = []
data.forEach(item => {
const id = Number(item)
this.form.roleList.push(id)
})
// this.form.postId = response.data.deptId
this.title = '修改'
})
this.getChildrenDept(userId)
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.ruleForm.newPassword = ''
this.ruleForm.row = row.businessId
this.resetPwdDiaLog = !this.resetPwdDiaLog
},
handleResetPwdSure() {
this.$refs.ruleForm.validate(pass => {
if (pass) {
this.userRestLoading = true
resetUserPwd(this.ruleForm.row, this.ruleForm.newPassword).then(response => {
if (response.code === 200) {
this.$message({
message: '修改成功',
type: 'success'
})
this.resetPwdDiaLog = false
}
this.userRestLoading = false
}).catch(e => { this.userRestLoading = false })
} else {
return false
}
})
},
// 数组值是否相同
isAllEqual(array) {
if (array.length > 0) {
return !array.some(function(value, index) {
return value !== array[0]
})
} else {
return true
}
},
/** 提交按钮 */
submitForm: function() {
submitForm() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.businessId !== undefined) {
updateData(this.form).then(response => {
this.msgSuccess('修改成功')
updateUser(this.form).then(response => {
this.$message({
message: '修改成功',
type: 'success'
})
this.open = false
this.getList()
})
} else {
addData(this.form).then(response => {
this.msgSuccess('新增成功')
addUser(this.form).then(response => {
this.$message({
message: '新增成功', type: 'success'
})
this.open = false
this.getList()
})
......@@ -417,17 +857,17 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const dictCodes = row.businessId || this.ids
const userId = row.businessId || this.ids
this.$confirm('所选择数据被删除后不可再恢复,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delData(dictCodes)
return delUser(userId)
}).then(() => {
this.getList()
this.$message({
message: '除成功',
message: '除成功',
type: 'success'
})
}).catch(function() {})
......@@ -435,43 +875,147 @@ export default {
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams
this.$confirm('是否确认导出所有数据项?', '警告', {
this.$confirm('是否确认导出所有用户信息?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return exportData(queryParams).then(response => {
return exportUser(queryParams).then(response => {
const blob = new Blob([response])
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)// 创建下载的链接
downloadElement.href = href
downloadElement.download = '用户信息' + '.xls' // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click()// 点击下载
document.body.removeChild(downloadElement)// 下载完成移除元素
window.URL.revokeObjectURL(href)// 释放掉blob对象
// this.download(response.msg);
})
})
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = '用户导入'
this.upload.open = true
},
/** 下载模板操作 */
importTemplate() {
importTemplate().then(response => {
const blob = new Blob([response])
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)// 创建下载的链接
downloadElement.href = href
downloadElement.download = '字典数据信息' + '.xls' // 下载后文件名
downloadElement.download = '用户导入模板' + '.xls' // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click()// 点击下载
document.body.removeChild(downloadElement)// 下载完成移除元素
window.URL.revokeObjectURL(href)// 释放掉blob对象
// this.download(response.msg);
})
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
this.getList()
},
// 提交上传文件
submitFileForm() {
// this.$refs.upload.submit()
this.importLoading = true
if (this.fileList.length === 0) {
this.$message.warning('请上传文件')
// 导入成功后关闭弹出框
this.importLoading = false
this.upload.open = true
} else { // 根据后台需求数据格式
var formData = new FormData() // 当前为空
formData.append('file', this.fileList)
importExcel(formData).then(res => {
if (res.code === 200) {
if (res.data.filename === null) {
this.$message.success('导入成功')
this.fileList = []
// 导入成功后关闭弹出框
this.importLoading = false
this.upload.open = false
// 导入成功后刷新页面
this.getList()
} else {
uploadFalseFile({ fileName: res.data.filename }).then(res => {
const blob = new Blob([res])
const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob) // 创建下载的链接
downloadElement.href = href
downloadElement.download = '模板错误提示' + '.txt' // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click() // 点击下载
document.body.removeChild(downloadElement) // 下载完成移除元素
window.URL.revokeObjectURL(href) // 释放掉blob对象
})
}
this.importLoading = false
} else if (res.code === 41020) {
this.$message.info('上传超时,请重新上传')
this.importLoading = false
}
}).catch(err => {
this.$message.success(err.message)
this.importLoading = false
})
}
},
employeeUpload(file, fileList) {
if (fileList.length > 1) {
fileList.splice(0, 1)
}
this.fileList = fileList[0].raw
},
handleRemove(file, fileList) {
this.fileList = []
},
beforeRemove(file, fileList) {
this.fileList = []
},
/* 上传文件所需求 */
handlePreview(file) {
}
}
}
</script>
<style lang="scss" scoped>
.app-container {
.user-manage {
font-size: 18px;
padding: 0;
.placeholder{
height:1.3vh;
background-color: #F4F4F4;
margin-bottom:10px
height:14px;
background-color: #F4F4F4
}
}
.table-drop{
margin-left: 15px;
font-size: 16px;
font-weight: bold;
color: #46BCF3;
}
</style>
<style lang="scss">
.user-manage {
.formClass {
}
.optionsContent{
box-sizing: border-box;
width: 100%;
padding: 0 0 0 10px;
display: flex;
flex-direction: row;
.paddingFixed {
.el-dialog__body {
padding-bottom: 17px;
}
}
.el-form-item__label-wrap {
margin-left: 0!important;
}
}
</style>
......@@ -109,13 +109,13 @@
style="color: #49cec9"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
v-hasPermi="['sys:role:update']"
size="mini"
type="text"
icon="el-icon-circle-check"
@click="handleMenu(scope.row)"
>数据权限</el-button>
<!-- <el-button-->
<!-- v-hasPermi="['sys:role:update']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-circle-check"-->
<!-- @click="handleMenu(scope.row)"-->
<!-- >数据权限</el-button>-->
<el-button
size="mini"
type="text"
......@@ -674,7 +674,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.app-container {
.app-container {
font-size: 18px;
padding: 0;
......@@ -693,9 +693,9 @@ export default {
.el-switch {
margin-left: 15px;
}
}
.el-divider--vertical{
}
.el-divider--vertical{
height: 12em;
width: 4px;
}
}
</style>
......@@ -43,14 +43,14 @@
<el-button type="primary" style="padding: 8px 7px;" icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
</el-form-item>
<el-form-item style="float: right">
<!-- <el-button-->
<!-- v-hasPermi="['sys:user:add']"-->
<!-- style="padding: 8px 7px;"-->
<!-- type="primary"-->
<!-- size="small"-->
<!-- icon="el-icon-plus"-->
<!-- @click="handleFormAdd"-->
<!-- >表单页新增模板</el-button>-->
<!-- <el-button-->
<!-- v-hasPermi="['sys:user:add']"-->
<!-- style="padding: 8px 7px;"-->
<!-- type="primary"-->
<!-- size="small"-->
<!-- icon="el-icon-plus"-->
<!-- @click="handleFormAdd"-->
<!-- >表单页新增模板</el-button>-->
<el-button
v-hasPermi="['sys:user:add']"
style="padding: 8px 7px;"
......@@ -129,7 +129,7 @@
{{ scope.row.username || '-' }}
</template>
</el-table-column>
<el-table-column label="用户类型" prop="userType" :show-overflow-tooltip="true">
<el-table-column label="用户名称" prop="userType" :show-overflow-tooltip="true">
<template slot-scope="scope">
{{ scope.row.name || '-' }}
</template>
......@@ -248,8 +248,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户类型" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入用户类型" />
<el-form-item label="用户名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入用户名称" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -273,11 +273,10 @@
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="岗位" prop="postId">
<el-form-item label="部门" prop="postId">
<treeSelect
v-model="form.postId"
v-model="form.deptId"
:disable-branch-nodes="true"
multiple
:options="deptChildren"
:show-count="true"
placeholder="请选择归属部门"
......@@ -286,6 +285,20 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="角色" prop="postId">
<el-select v-model="form.roleList" multiple placeholder="请选择" style="width: 100%" @change="roleChange">
<el-option
v-for="item in options"
:key="item.businessId"
:label="item.roleName"
:value="item.businessId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
......@@ -387,6 +400,7 @@ import { getToken } from '@/utils/auth'
import { getChildrenDept, treeselect } from '@/api/system/dept'
import TreeSelect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getlistRole, listRole } from '@/api/system/role'
export default {
name: 'User',
......@@ -456,6 +470,7 @@ export default {
deptOptionsTree: undefined,
currentNode: undefined,
currentNodeKey: false,
options: [],
// 是否显示弹出层
open: false,
// 部门名称
......@@ -615,9 +630,10 @@ export default {
}
this.getList()
this.getTreeSelect()
this.getConfigKey('sys.user.initPassword').then(response => {
this.initPassword = response.msg
})
this.getRole()
// this.getConfigKey('sys.user.initPassword').then(response => {
// this.initPassword = response.msg
// })
},
methods: {
changeValue() {
......@@ -633,6 +649,11 @@ export default {
}
)
},
roleChange(e) {
// TODO: clear this log
console.log(`e`, e)
this.$forceUpdate()
},
/** 查询部门下拉树结构 */
getTreeSelect() {
treeselect().then(response => {
......@@ -648,11 +669,18 @@ export default {
},
/** 查询子部门 */
getChildrenDept(userId) {
getChildrenDept(userId).then(response => {
this.deptChildren = response.data.postChildren
this.form.postId = response.data.checkedKeys
treeselect().then(response => {
this.deptChildren = response.data
// this.form.postId = response.data.checkedKeys
})
},
getRole() {
getlistRole().then(
response => {
this.options = response.data
}
)
},
// 筛选节点
filterNode(value, data) {
if (!value) return true
......@@ -754,6 +782,15 @@ export default {
getUser(userId).then(response => {
this.open = true
this.form = response.data
const data = response.data.roleIds.split(',')
// TODO: clear this log
console.log(`data`, data)
this.form.roleList = []
data.forEach(item => {
const id = Number(item)
this.form.roleList.push(id)
})
// this.form.postId = response.data.deptId
this.title = '修改'
})
this.getChildrenDept(userId)
......@@ -954,22 +991,22 @@ export default {
}
</script>
<style lang="scss" scoped>
.user-manage {
.user-manage {
font-size: 18px;
.placeholder{
height:14px;
background-color: #F4F4F4
}
}
.table-drop{
}
.table-drop{
margin-left: 15px;
font-size: 16px;
font-weight: bold;
color: #46BCF3;
}
}
</style>
<style lang="scss">
.user-manage {
.user-manage {
.formClass {
}
.paddingFixed {
......@@ -980,5 +1017,5 @@ export default {
.el-form-item__label-wrap {
margin-left: 0!important;
}
}
}
</style>
......@@ -79,9 +79,10 @@ module.exports = {
// }
// },
[process.env.VUE_APP_BASE_API]: {
// target: `http://192.168.1.17:10010/internal`,
// target: `http://192.168.1.29:8088/`,
// target: `http://10.5.87.231:10010/internal`,
target: `http://117.122.212.91:32012/`,
// target: `http://117.122.212.91:32012/`,
target: `http://192.144.239.97:20070/`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment