Commit 25913730 authored by 杨硕's avatar 杨硕

修改按钮

parent f329a8f0
...@@ -25,15 +25,21 @@ ...@@ -25,15 +25,21 @@
class="filter-item" class="filter-item"
type="primary" type="primary"
size="small" size="small"
style="padding: 8px 7px;"
icon="el-icon-search"
@click="getList" @click="getList"
>查询</el-button> >查询</el-button>
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>-->
</el-form-item>
<el-form-item style="float: right">
<el-button <el-button
style="padding: 8px 7px;"
class="filter-item" class="filter-item"
type="primary" type="primary"
size="small" size="small"
icon="el-icon-plus"
@click="handleAdd" @click="handleAdd"
>新增</el-button> >新增</el-button>
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>-->
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -98,13 +104,14 @@ ...@@ -98,13 +104,14 @@
<!-- >删除</el-button>--> <!-- >删除</el-button>-->
<!-- </template>--> <!-- </template>-->
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dept:update']" <!-- v-hasPermi="['sys:dept:update']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
style="color: #49cec9" <!-- style="color: #49cec9"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
>修改</el-button> <!-- >修改</el-button>-->
<coolbutton style="color: #49cec9" :type="typeParent" :name="updataName" :size="size" :haspermi="updateHaspermi" @btn-click="handleUpdate(scope.row)" />
<!-- <el-switch--> <!-- <el-switch-->
<!-- v-model="scope.row.flag"--> <!-- v-model="scope.row.flag"-->
<!-- v-hasPermi="['system:dept:toggle']"--> <!-- v-hasPermi="['system:dept:toggle']"-->
...@@ -112,19 +119,21 @@ ...@@ -112,19 +119,21 @@
<!-- inactive-value="1"--> <!-- inactive-value="1"-->
<!-- @change="handleStatusChange(scope.row)"--> <!-- @change="handleStatusChange(scope.row)"-->
<!-- />--> <!-- />-->
<el-button <!-- <el-button-->
v-hasPermi="['sys:dept:add']" <!-- v-hasPermi="['sys:dept:add']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
@click="handleAdd(scope.row)" <!-- @click="handleAdd(scope.row)"-->
>新增</el-button> <!-- >新增</el-button>-->
<el-button <coolbutton :type="typeParent" :name="addName" :size="size" :haspermi="addHaspermi" @btn-click="handleAdd(scope.row)" />
v-if="scope.row.parentId !== 0" <!-- <el-button-->
v-hasPermi="['sys:dept:delete']" <!-- v-if="scope.row.parentId !== 0"-->
size="mini" <!-- v-hasPermi="['sys:dept:delete']"-->
type="text" <!-- size="mini"-->
@click="handleDelete(scope.row)" <!-- type="text"-->
>删除</el-button> <!-- @click="handleDelete(scope.row)"-->
<!-- >删除</el-button>-->
<coolbutton :type="typeParent" :name="nameParent" :size="size" :icon="delicon" :haspermi="delHaspermi" @btn-click="handleDelete(scope.row)" />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -196,12 +205,34 @@ ...@@ -196,12 +205,34 @@
import { addDept, delDept, getDept, listDept, listDeptExcludeChild, updateDept } from '@/api/system/dept' import { addDept, delDept, getDept, listDept, listDeptExcludeChild, updateDept } from '@/api/system/dept'
import Treeselect from '@riophae/vue-treeselect' import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css' import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import Coolbutton from '@/components/coolbutton'
export default { export default {
name: 'Dept', name: 'Dept',
components: { Treeselect }, components: { Treeselect, Coolbutton },
data() { data() {
return { return {
typeParent: 'text',
typePrimary: 'primary',
typeSuccess: 'success',
nameParent: '删除',
resetName: '重置',
addName: '新增',
queryName: '查询',
exportName: '导出',
updataName: '修改',
size: 'mini',
smallSize: 'small',
delicon: 'el-icon-delete',
addIcon: 'el-icon-plus',
exportIcon: 'el-icon-download',
queryIcon: 'el-icon-search',
resetIcon: '',
delHaspermi: ['sys:dept:delete'],
resetHaspermi: ['sys:user:resetPwd'],
updateHaspermi: ['sys:dept:update'],
addHaspermi: ['sys:dept:add'],
exportHaspermi: ['sys:role:export'],
queryHaspermi: ['sys:menu:query'],
// 搜索条件 // 搜索条件
showSearch: true, showSearch: true,
// 遮罩 // 遮罩
......
<template> <template>
<div class="user-manage"> <div class="app-container">
<div class="search" style="border-bottom: 14px solid #f4f4f4"> <el-form v-show="showSearch" ref="queryForm" style="width: 100%" :model="queryParams" :inline="true">
<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="dictType">
<!-- <el-form-item label="用户类型" prop="name" class="noMargin">--> <el-select v-model="queryParams.dictType" placeholder="请选择字典名称" clearable size="small">
<!-- <el-input--> <el-option
<!-- v-model="queryParams.name"--> v-for="item in typeOptions"
<!-- placeholder="请输入用户类型"--> :key="item.businessId"
<!-- clearable--> :label="item.dictName"
<!-- :maxlength="30"--> :value="item.dictType"
<!-- size="small"--> />
<!-- style="width: 150px"--> </el-select>
<!-- />--> </el-form-item>
<!-- </el-form-item>--> <el-form-item label="字典标签" prop="dictLabel">
<el-form-item label="登录名" prop="username">
<el-input <el-input
v-model="queryParams.username" v-model="queryParams.dictLabel"
placeholder="请输入登录名" placeholder="请输入字典标签"
clearable clearable
:maxlength="30" :maxlength="30"
size="small" size="small"
style="width: 150px" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="flag"> <el-form-item label="状态" prop="flag">
<el-select <el-select v-model="queryParams.flag" placeholder="数据状态" clearable size="small">
v-model="queryParams.flag"
placeholder="请选择用户状态"
clearable
size="small"
style="width: 150px"
>
<el-option <el-option
v-for="dict in statusOptions" v-for="dict in statusOptions"
:key="dict.dictValue" :key="dict.dictValue"
...@@ -39,153 +32,135 @@ ...@@ -39,153 +32,135 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" style="padding: 8px 7px;" icon="el-icon-search" size="small" @click="handleQuery">查询</el-button> <el-button type="primary" 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-button size="small" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
<el-form-item style="float: right"> </el-form>
<!-- <el-button--> <el-row :gutter="10" class="mb8">
<!-- v-hasPermi="['sys:user:add']"--> <el-col :span="1.5">
<!-- style="padding: 8px 7px;"--> <!-- <el-button-->
<!-- type="primary"--> <!-- v-hasPermi="['sys:dict:add']"-->
<!-- size="small"--> <!-- type="primary"-->
<!-- icon="el-icon-plus"--> <!-- icon="el-icon-plus"-->
<!-- @click="handleFormAdd"--> <!-- size="mini"-->
<!-- >表单页新增模板</el-button>--> <!-- @click="handleAdd"-->
<el-button <!-- >新增-->
v-hasPermi="['sys:user:add']" <!-- </el-button>-->
style="padding: 8px 7px;" <coolbutton :type="typePrimary" :name="addName" :icon="addIcon" :size="size" :haspermi="addHaspermi" @btn-click="handleAdd" />
type="primary" </el-col>
size="small" <el-col :span="1.5">
icon="el-icon-plus" <!-- <el-button-->
@click="handleAdd" <!-- v-hasPermi="['sys:dict:update']"-->
>新增</el-button> <!-- type="success"-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- >修改-->
<!-- </el-button>-->
<coolbutton :type="typeSuccess" :name="updataName" :icon="updateIcon" :size="size" :haspermi="updateHaspermi" @btn-click="handleUpdate" />
</el-col>
<el-col :span="1.5">
<!-- <el-button-->
<!-- v-hasPermi="['sys:dict:delete']"-->
<!-- type="danger"-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- >删除-->
<!-- </el-button>-->
<coolbutton :type="typeDanger" :name="nameParent" :icon="delicon" :size="size" :haspermi="delHaspermi" @btn-click="handleDelete" />
</el-col>
<el-col :span="1.5">
<el-button <el-button
style="padding: 8px 7px;" v-has-permi="['sys:dict:export']"
type="warning" 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" icon="el-icon-download"
@click="handleExport"
>导出</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" size="mini"
/> @click="handleExport"
</div> >导出
<div class="head-container" style="overflow-y:auto;min-height: 70.6vh;height: calc(100% - 48px);background: #ffffff;padding-right: 5px"> </el-button>
<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> </el-col>
<!--用户数据--> <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
<el-col :span="20" :xs="24"> </el-row>
<div class="mb12 font-small-bold" style="margin-top: 20px">用户管理列表</div> <div class="placeholder" />
<el-table <div style="padding:10px">
v-loading="loading" <div class="mb12 font-small-bold">字典参数列表</div>
style="padding-right: 10px" <el-table v-loading="loading" :data="dataList" border @selection-change="handleSelectionChange">
:data="userList" <el-table-column type="selection" width="55" align="center" />
> <!-- <el-table-column :show-overflow-tooltip="true" label="参数编码" prop="dictCode">-->
<el-table-column type="index" label="序号" width="50" /> <!-- <template slot-scope="scope">-->
<el-table-column <!-- {{ scope.row.dictCode || '-' }}-->
label="用户编号" <!-- </template>-->
> <!-- </el-table-column>-->
<template v-slot:default="scope"> <el-table-column label="字典编码" align="center" prop="businessId" />
{{ scope.row.businessId || '-' }} <el-table-column :show-overflow-tooltip="true" label="字典标签" prop="dictLabel">
</template>
</el-table-column>
<el-table-column label="登录名" prop="username" :show-overflow-tooltip="true">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.username || '-' }} {{ scope.row.dictLabel || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户名称" prop="userType" :show-overflow-tooltip="true"> <el-table-column :show-overflow-tooltip="true" label="字典键值" prop="dictValue">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.name || '-' }} {{ scope.row.dictValue || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="手机号" prop="phone" :show-overflow-tooltip="true"> <el-table-column :show-overflow-tooltip="true" label="字典排序" prop="dictSort">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.phone || '-' }} {{ isNaN(scope.row.dictSort) ? '-' : scope.row.dictSort }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="120" label="状态" prop="flag"> <el-table-column label="状态" align="center" prop="flag">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-switch
v-model="scope.row.flag" v-model="scope.row.flag"
class="switchDisabledStyle" class="switchDisabledStyle"
inactive-value="0" inactive-value="0"
active-value="1" active-value="1"
@click.native="handleStatusChange(scope.row)" @click.native="changeStatus(scope.row)"
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :show-overflow-tooltip="true" label="创建时间" prop="createDate" width="160"> <el-table-column :show-overflow-tooltip="true" label="备注" prop="remarks">
<template slot-scope="scope">
{{ scope.row.remarks || '-' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" label="创建时间" prop="createDate">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.createDate | transformDateByFormat('YYYY-MM-DD HH:mm') }}</span> <span>{{ scope.row.createDate | transformDateByFormat('YYYY-MM-DD HH:mm') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="操作" class-name="small-padding fixed-width">
label="操作"
width="180"
class-name="small-padding fixed-width"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <!-- <el-button-->
v-hasPermi="['sys:user:update']" <!-- v-hasPermi="['sys:dictConfig:edit']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
style="color: #49cec9" <!-- style="color: #49cec9"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
>修改</el-button> <!-- >修改</el-button>-->
<el-button <coolbutton style="color: #49cec9" :type="typeParent" :name="updataName" :size="size" :haspermi="editHaspermi" @btn-click="handleUpdate(scope.row)" />
v-hasPermi="['sys:user:resetPwd']" <!-- <el-button-->
size="mini" <!-- v-hasPermi="['sys:dictConfig:remove']"-->
type="text" <!-- size="mini"-->
:loading="addLoading" <!-- type="text"-->
@click="handleResetPwd(scope.row)" <!-- @click="handleDelete(scope.row)"-->
>重置</el-button> <!-- >删除</el-button>-->
<el-button <coolbutton :type="typeParent" :icon="delicon" :name="nameParent" :size="size" :haspermi="removeHaspermi" @btn-click="handleDelete(scope.row)" />
v-if="scope.row.businessId !== 1" <!-- <el-switch-->
v-hasPermi="['sys:user:delete']" <!-- v-model="scope.row.status"-->
size="mini" <!-- v-hasPermi="['sys:dictConfig:toggle']"-->
type="text" <!-- disabled-->
icon="el-icon-delete" <!-- class="switchDisabledStyle"-->
@click="handleDelete(scope.row)" <!-- active-value="0"-->
>删除</el-button> <!-- inactive-value="1"-->
<!-- @click.native="changeStatus(scope.row)"-->
<!-- />-->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
...@@ -193,523 +168,175 @@ ...@@ -193,523 +168,175 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</el-col>
</el-row>
<!-- 添加或修改参数配置对话框 --> <!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row> <el-form-item label="字典类型">
<el-col :span="12"> <el-input v-model.trim="form.dictType" :disabled="true" show-word-limit maxlength="30" placeholder="请输入字典类型" />
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" />
</el-form-item> </el-form-item>
</el-col> <el-form-item label="参数标签" prop="dictLabel">
<el-col :span="12"> <el-input v-model.trim="form.dictLabel" show-word-limit maxlength="30" placeholder="请输入参数标签" />
<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>
</el-col> <el-form-item label="参数键值" prop="dictValue">
</el-row> <el-input v-model.trim="form.dictValue" show-word-limit maxlength="300" placeholder="请输入参数键值" />
<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-form-item>
</el-col> <el-form-item label="参数排序" prop="dictSort">
</el-row> <el-input-number v-model="form.dictSort" style="width: 100%" controls-position="right" :min="0" />
<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-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-form-item>
</el-col> <el-form-item label="参数状态" prop="status">
</el-row> <el-radio-group v-model="form.status">
<el-row>
<el-col :span="12">
<el-form-item label="用户名称" prop="name">
<el-input v-model.trim="form.name" placeholder="请输入用户名称" />
</el-form-item>
</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 <el-radio
v-for="dict in statusOptions" v-for="dict in statusOptions.filter(item => { return item.dictValue })"
:key="dict.dictValue" :key="dict.dictValue"
:label="dict.dictValue" :label="dict.dictValue"
>{{ dict.dictLabel }}</el-radio> >{{ dict.dictLabel }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> <el-form-item label="备注" prop="remarks">
</el-row> <el-input v-model.trim="form.remarks" type="textarea" show-word-limit maxlength="200" placeholder="请输入内容" />
<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-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submitForm">确 定</el-button> <el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </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> </div>
</template> </template>
<script> <script>
import { import { listData, getData, delData, addData, updateData, exportData, checkDictLabelUnique } from '@/api/system/dict/data'
listUser, import { listType, getType, updateType } from '@/api/system/dict/type'
getUser, import dictCons from '@/utils/dictCons'
delUser, import Coolbutton from '@/components/coolbutton'
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 { export default {
name: 'User', name: 'Data',
components: { TreeSelect }, components: {Coolbutton },
data() { data() {
var trueGroupName = (rule, value, callback) => { const verifyIDProp = (rule, value, callback) => {
if (value && !value.trim()) { if (value === '' || value === undefined || value === null) {
return callback(new Error('请输入正确的用户昵称'))
}
callback() callback()
} } else if (!this.form.dictLabelOne || this.form.dictLabelOne !== this.form.dictLabel) {
var passwordCheck = (rule, value, callback) => { // 验证编码是否重复
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/ checkDictLabelUnique(this.form.dictLabel).then(
if (!pattern.test(value)) { (res) => {
callback(new Error('新密码必须为数字与字母的组合')) if (res.code === 200) {
} if (res.msg === '0') {
callback() callback()
} } else if (res.msg === '1') {
var phone = (rule, value, callback) => { callback(new Error('字典标签已存在'))
if (!value) {
return callback(new Error('请输入手机号'))
} else { } else {
callback() callback()
} }
}
var idNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入身份证号'))
} else { } else {
callback() callback()
} }
} }
var name = (rule, value, callback) => { ).catch(err => {
if (!value) { callback()
return callback(new Error('请输入用户类型')) })
} else { } else {
callback() callback()
} }
} }
return { return {
pwdTypeMap: { typeParent: 'text',
text: true, typePrimary: 'primary',
password: false typeSuccess: 'success',
}, typeDanger: 'danger',
pwdType: 'password', nameParent: '删除',
resetName: '重置',
addName: '新增',
queryName: '查询',
exportName: '导出',
updataName: '修改',
size: 'mini',
smallSize: 'small',
delicon: 'el-icon-delete',
addIcon: 'el-icon-plus',
exportIcon: 'el-icon-download',
queryIcon: 'el-icon-search',
updateIcon: 'el-icon-edit',
resetIcon: '',
delHaspermi: ['sys:dict:delete'],
removeHaspermi: ['sys:dictConfig:remove'],
resetHaspermi: ['sys:user:resetPwd'],
updateHaspermi: ['sys:dict:update'],
editHaspermi: ['sys:dictConfig:edit'],
addHaspermi: ['sys:dict:add'],
exportHaspermi: ['sys:dict:export'],
queryHaspermi: ['sys:menu:query'],
// 遮罩层 // 遮罩层
loading: true, loading: false,
// 导入列表
fileList: [],
// 选中数组 // 选中数组
ids: [], ids: [],
// 非单个禁用 // 非单个禁用
single: true, single: true,
// 非多个禁用 // 非多个禁用
multiple: true, multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数 // 总条数
total: 0, total: 0,
// 用户表格数据 // 字典表格数据
userList: null, dataList: [],
// 显示查询条件 // 默认字典类型
showSearch: true, defaultDictType: '',
// 弹出层标题 // 弹出层标题
title: '', title: '',
resetPwdDiaLog: false,
// 部门树选项
deptOptions: undefined,
deptOptionsTree: undefined,
currentNode: undefined,
currentNodeKey: false,
options: [],
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
// 部门名称
deptName: undefined,
// 默认密码
initPassword: undefined,
importLoading: false,
// // 时间范围
// dateRange: ['', ''],
// 状态数据字典 // 状态数据字典
statusOptions: [ statusOptions: [],
{ // 类型数据字典
dictLabel: '启用', typeOptions: [],
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: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
username: undefined, dictName: undefined,
email: undefined, dictType: undefined,
phone: undefined, status: '',
nickName: undefined, flag: undefined
idNumber: undefined,
userType: undefined,
allowLogin: undefined,
flag: undefined,
deptId: undefined,
name: undefined
}, },
// 表单参数
form: {},
// 表单校验 // 表单校验
rules: { rules: {
username: [ dictLabel: [
{ required: true, message: '请输入登录名', trigger: 'blur' } { required: true, message: '请输入参数标签', trigger: 'blur' }
], // { validator: verifyIDProp, trigger: 'blur' }
nickName: [
{ required: false, message: '请输入用户昵称', trigger: 'blur' },
{ validator: trueGroupName, message: '请输入正确的用户昵称' }
], ],
deptId: [ dictValue: [
{ required: false, message: '请输入归属部门', trigger: 'blur' } { required: true, message: '请输入参数键值', trigger: 'blur' }
], ],
password: [ dictSort: [
{ required: true, message: '请输入用户密码', trigger: 'blur' }, { 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' }
] ]
}, },
userInfoLoading: false, manageLoading: false
userImportLoading: false,
userRestLoading: false,
addLoading: false
}
},
/** 路由离开前存储筛选条件*/
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() { created() {
if (this.$store.getters.searchParams[this.$route.path]) { const dictId = this.$route.params && this.$route.params.dictId
const { searchParams } = this.$store.getters; const { path } = this.$route this.getType(dictId)
const param = JSON.parse(searchParams[path]) // 保留着的查询条件 this.getTypeList()
this.queryParams = { ...param } // this.getDicts(dictCons['NORMAL_DISABLE']).then(response => {
} // this.statusOptions = response.data
this.getList()
this.getTreeSelect()
this.getRole()
// this.getConfigKey('sys.user.initPassword').then(response => {
// this.initPassword = response.msg
// }) // })
}, },
methods: { methods: {
changeValue() { // 状态
this.$refs.form.validateField('id') changeStatus(row) {
},
/** 查询用户列表 */
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' ? '启用' : '停用' const text = row.flag === '1' ? '启用' : '停用'
this.$confirm('确认要"' + text + '""' + row.username + '"用户吗?', '警告', { this.$confirm('确认要"' + text + '""' + row.dictLabel + '"吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(function() { }).then(function() {
return changeUserStatus(row.businessId, row.flag) return updateData(row)
}).then(() => { }).then(() => {
this.$message({ this.$message({
message: text + '成功', message: text + '成功',
...@@ -719,6 +346,35 @@ export default { ...@@ -719,6 +346,35 @@ export default {
row.flag = row.flag === '0' ? '1' : '0' 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 => {
if (response.rows) {
this.dataList = response.rows
this.total = response.total
}
this.loading = false
})
},
// 数据状态字典翻译
// statusFormat(row, column) {
// return this.selectDictLabel(this.statusOptions, row.flag)
// },
// 取消按钮 // 取消按钮
cancel() { cancel() {
this.open = false this.open = false
...@@ -727,127 +383,65 @@ export default { ...@@ -727,127 +383,65 @@ export default {
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
userId: undefined, bussinessId: undefined,
deptId: undefined, dictCode: undefined,
phone: undefined, dictLabel: undefined,
username: undefined, dictValue: undefined,
userType: undefined, dictSort: 0,
nickName: undefined, flag: '1',
password: undefined, status: '0',
idNumber: undefined, remarks: undefined
email: undefined,
sex: undefined,
flag: undefined,
remark: undefined,
postIds: [],
roleIds: []
} }
this.resetForm('form') this.resetForm('form')
}, },
/** 查询按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.page = 1 this.queryParams.pageNum = 1
this.getList() this.getList()
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm('queryForm') this.resetForm('queryForm')
this.queryParams.dictType = this.defaultDictType
this.handleQuery() this.handleQuery()
}, },
// 多选框选中数据
handleSelectionChange(selection) {
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() { handleAdd() {
this.reset() this.reset()
this.getChildrenDept(0)
this.open = true this.open = true
this.title = '添加用户' this.title = '添加字典数据'
this.form.dictType = this.queryParams.dictType
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.businessId)
this.single = selection.length !== 1
this.multiple = !selection.length
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset() this.reset()
const userId = row.businessId || this.ids const dictCode = row.businessId || this.ids
getUser(userId).then(response => { getData(dictCode).then(response => {
this.open = true
this.form = response.data this.form = response.data
const data = response.data.roleIds.split(',') this.form.dictLabelOne = response.data.dictLabel
// TODO: clear this log this.open = true
console.log(`data`, data) this.title = '修改字典数据'
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() { submitForm: function() {
this.$refs['form'].validate(valid => { this.$refs['form'].validate(valid => {
if (valid) { if (valid) {
if (this.form.businessId !== undefined) { if (this.form.businessId !== undefined) {
updateUser(this.form).then(response => { updateData(this.form).then(response => {
this.$message({ this.msgSuccess('修改成功')
message: '修改成功',
type: 'success'
})
this.open = false this.open = false
this.getList() this.getList()
}) })
} else { } else {
addUser(this.form).then(response => { addData(this.form).then(response => {
this.$message({ this.msgSuccess('新增成功')
message: '新增成功', type: 'success'
})
this.open = false this.open = false
this.getList() this.getList()
}) })
...@@ -857,17 +451,17 @@ export default { ...@@ -857,17 +451,17 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const userId = row.businessId || this.ids const dictCodes = row.businessId || this.ids
this.$confirm('所选择数据被删除后不可再恢复,是否继续?', '提示', { this.$confirm('所选择数据被删除后不可再恢复,是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(function() { }).then(function() {
return delUser(userId) return delData(dictCodes)
}).then(() => { }).then(() => {
this.getList() this.getList()
this.$message({ this.$message({
message: '除成功', message: '除成功',
type: 'success' type: 'success'
}) })
}).catch(function() {}) }).catch(function() {})
...@@ -875,147 +469,43 @@ export default { ...@@ -875,147 +469,43 @@ export default {
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
const queryParams = this.queryParams const queryParams = this.queryParams
this.$confirm('是否确认导出所有用户信息?', '警告', { this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(function() { }).then(function() {
return exportUser(queryParams).then(response => { return exportData(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 blob = new Blob([response])
const downloadElement = document.createElement('a') const downloadElement = document.createElement('a')
const href = window.URL.createObjectURL(blob)// 创建下载的链接 const href = window.URL.createObjectURL(blob)// 创建下载的链接
downloadElement.href = href downloadElement.href = href
downloadElement.download = '用户导入模板' + '.xls' // 下载后文件名 downloadElement.download = '字典数据信息' + '.xls' // 下载后文件名
document.body.appendChild(downloadElement) document.body.appendChild(downloadElement)
downloadElement.click()// 点击下载 downloadElement.click()// 点击下载
document.body.removeChild(downloadElement)// 下载完成移除元素 document.body.removeChild(downloadElement)// 下载完成移除元素
window.URL.revokeObjectURL(href)// 释放掉blob对象 window.URL.revokeObjectURL(href)// 释放掉blob对象
// this.download(response.msg); // 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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.user-manage { .app-container {
font-size: 18px; font-size: 18px;
padding: 0;
.placeholder{ .placeholder{
height:14px; height:1.3vh;
background-color: #F4F4F4 background-color: #F4F4F4;
} margin-bottom:10px
} }
.table-drop{ .optionsContent{
margin-left: 15px; box-sizing: border-box;
font-size: 16px; width: 100%;
font-weight: bold; padding: 0 0 0 10px;
color: #46BCF3; display: flex;
} flex-direction: row;
</style>
<style lang="scss">
.user-manage {
.formClass {
}
.paddingFixed {
.el-dialog__body {
padding-bottom: 17px;
}
}
.el-form-item__label-wrap {
margin-left: 0!important;
} }
} }
</style> </style>
...@@ -57,44 +57,48 @@ ...@@ -57,44 +57,48 @@
</el-form-item> </el-form-item>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dict:add']" <!-- v-hasPermi="['sys:dict:add']"-->
type="primary" <!-- type="primary"-->
icon="el-icon-plus" <!-- icon="el-icon-plus"-->
size="small" <!-- size="small"-->
@click="handleAdd" <!-- @click="handleAdd"-->
>新增</el-button> <!-- >新增</el-button>-->
<coolbutton :type="typePrimary" :name="addName" :size="smallSize" :icon="addIcon" :haspermi="addHaspermi" @btn-click="handleAdd" />
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dict:update']" <!-- v-hasPermi="['sys:dict:update']"-->
type="success" <!-- type="success"-->
icon="el-icon-edit" <!-- icon="el-icon-edit"-->
size="mini" <!-- size="mini"-->
:disabled="single" <!-- :disabled="single"-->
@click="handleUpdate" <!-- @click="handleUpdate"-->
>修改 <!-- >修改-->
</el-button> <!-- </el-button>-->
<coolbutton :type="typeSuccess" :name="updataName" :icon="updateIcon" :size="size" :haspermi="updateHaspermi" @btn-click="handleUpdate" />
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dict:delete']" <!-- v-hasPermi="['sys:dict:delete']"-->
type="danger" <!-- type="danger"-->
icon="el-icon-delete" <!-- icon="el-icon-delete"-->
size="mini" <!-- size="mini"-->
:disabled="multiple" <!-- :disabled="multiple"-->
@click="handleDelete" <!-- @click="handleDelete"-->
>删除 <!-- >删除-->
</el-button> <!-- </el-button>-->
<coolbutton :type="typeDanger" :name="nameParent" :icon="delicon" :size="size" :haspermi="delHaspermi" @btn-click="handleDelete" />
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dict:export']" <!-- v-hasPermi="['sys:dict:export']"-->
type="success" <!-- type="success"-->
icon="el-icon-download" <!-- icon="el-icon-download"-->
size="small" <!-- size="small"-->
@click="handleExport" <!-- @click="handleExport"-->
>导出</el-button> <!-- >导出</el-button>-->
<coolbutton :type="typeSuccess" :name="exportName" :icon="exportIcon" :size="size" :haspermi="exportHaspermi" @btn-click="handleExport" />
</el-col> </el-col>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" /> <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row> </el-row>
...@@ -115,11 +119,10 @@ ...@@ -115,11 +119,10 @@
<!-- v-hasPermi="['system:dictConfig:list']"--> <!-- v-hasPermi="['system:dictConfig:list']"-->
<router-link <router-link
v-if="scope.row.businessId" v-if="scope.row.businessId"
:style="{ pointerEvents: $haveAuth('sys:dictConfig:list') ? '' : 'none' }"
:to="'/dict/type/data/' + scope.row.businessId" :to="'/dict/type/data/' + scope.row.businessId"
class="link-type" class="link-type"
> >
<span :style="{color: $haveAuth('sys:dictConfig:list') ? '#20a0ff' : '#333333' }">{{ scope.row.dictType }}</span> <span style="color: #20a0ff">{{ scope.row.dictType }}</span>
</router-link> </router-link>
<div v-else>-</div> <div v-else>-</div>
</template> </template>
...@@ -147,19 +150,21 @@ ...@@ -147,19 +150,21 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width"> <el-table-column label="操作" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <!-- <el-button-->
v-hasPermi="['sys:dict:edit']" <!-- v-hasPermi="['sys:dict:edit']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
style="color: #49cec9" <!-- style="color: #49cec9"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
>修改</el-button> <!-- >修改</el-button>-->
<el-button <coolbutton :type="typeParent" style="color: #49cec9" :name="updataName" :size="size" :haspermi="editHaspermi" @btn-click="handleUpdate(scope.row)" />
v-hasPermi="['sys:dict:remove']" <!-- <el-button-->
size="mini" <!-- v-hasPermi="['sys:dict:remove']"-->
type="text" <!-- size="mini"-->
@click="handleDelete(scope.row)" <!-- type="text"-->
>删除</el-button> <!-- @click="handleDelete(scope.row)"-->
<!-- >删除</el-button>-->
<coolbutton :type="typeParent" :icon="delicon" :name="nameParent" :size="size" :haspermi="removeHaspermi" @btn-click="handleDelete(scope.row)" />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -242,10 +247,10 @@ import { listType, ...@@ -242,10 +247,10 @@ import { listType,
} from '@/api/system/dict/type' } from '@/api/system/dict/type'
import dictCons from '@/utils/dictCons' import dictCons from '@/utils/dictCons'
import Template from '@/views/instance/Template' import Template from '@/views/instance/Template'
import Coolbutton from '@/components/coolbutton'
export default { export default {
name: 'Dict', name: 'Dict',
components: { Template }, components: { Template,Coolbutton },
data() { data() {
const verifyTypeProp = (rule, value, callback) => { const verifyTypeProp = (rule, value, callback) => {
if (value === '' || value === undefined || value === null) { if (value === '' || value === undefined || value === null) {
...@@ -302,6 +307,32 @@ export default { ...@@ -302,6 +307,32 @@ export default {
return { return {
test: '', test: '',
options: [], options: [],
typeParent: 'text',
typePrimary: 'primary',
typeSuccess: 'success',
typeDanger: 'danger',
nameParent: '删除',
resetName: '重置',
addName: '新增',
queryName: '查询',
exportName: '导出',
updataName: '修改',
size: 'mini',
smallSize: 'small',
delicon: 'el-icon-delete',
addIcon: 'el-icon-plus',
exportIcon: 'el-icon-download',
queryIcon: 'el-icon-search',
updateIcon: 'el-icon-edit',
resetIcon: '',
delHaspermi: ['sys:dict:delete'],
removeHaspermi: ['sys:dict:remove'],
resetHaspermi: ['sys:user:resetPwd'],
updateHaspermi: ['sys:dict:update'],
editHaspermi: ['sys:dict:edit'],
addHaspermi: ['sys:dict:add'],
exportHaspermi: ['sys:dict:export'],
queryHaspermi: ['sys:menu:query'],
optionsDict: [], optionsDict: [],
// 遮罩层 // 遮罩层
loading: true, loading: true,
...@@ -373,9 +404,9 @@ export default { ...@@ -373,9 +404,9 @@ export default {
this.getDicts(dictCons['NORMAL_DISABLE']).then(response => { this.getDicts(dictCons['NORMAL_DISABLE']).then(response => {
this.statusOptions = response.data this.statusOptions = response.data
}) })
optionselect().then(response => { // optionselect().then(response => {
this.options = response.data // this.options = response.data
}) // })
}, },
methods: { methods: {
/** 查询字典类型列表 */ /** 查询字典类型列表 */
...@@ -389,12 +420,12 @@ export default { ...@@ -389,12 +420,12 @@ export default {
) )
}, },
// 获取当前父字典数据 // 获取当前父字典数据
/* getOptions(val) { getOptions(val) {
selectDictType(this.options.find(item => { return item.businessId === val }).dictType).then(response => { selectDictType(this.options.find(item => { return item.businessId === val }).dictType).then(response => {
this.optionsDict = response.data this.optionsDict = response.data
}) })
this.form.dataId = '' this.form.dataId = ''
},*/ },
clearSelected(flag) { clearSelected(flag) {
// flag = true 为下拉框选项展开时的标识 // flag = true 为下拉框选项展开时的标识
if (flag) { if (flag) {
......
...@@ -12,11 +12,13 @@ ...@@ -12,11 +12,13 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button v-hasPermi="['sys:menu:query']" type="primary" size="small" @click="handleQuery">查询</el-button> <!-- <el-button v-hasPermi="['sys:menu:query']" type="primary" size="small" @click="handleQuery">查询</el-button>-->
<coolbutton style="padding: 8px 7px;" :icon="queryIcon" :type="typePrimary" :name="queryName" :size="smallSize" :haspermi="queryHaspermi" @btn-click="handleQuery" />
</el-form-item> </el-form-item>
<div style="float: right"> <div style="float: right">
<el-form-item> <el-form-item>
<el-button v-hasPermi="['sys:menu:add']" type="primary" size="small" @click="handleAdd">新增</el-button> <!-- <el-button v-hasPermi="['sys:menu:add']" type="primary" size="small" @click="handleAdd">新增</el-button>-->
<coolbutton style="padding: 8px 7px;" :type="typePrimary" :name="addName" :size="smallSize" :icon="addIcon" :haspermi="addHaspermi" @btn-click="handleAdd" />
<!-- <el-button size="small" @click="resetQuery">重置</el-button>--> <!-- <el-button size="small" @click="resetQuery">重置</el-button>-->
</el-form-item> </el-form-item>
</div> </div>
...@@ -83,16 +85,16 @@ ...@@ -83,16 +85,16 @@
>删除</el-button> >删除</el-button>
</template>--> </template>-->
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <!-- <el-button-->
v-hasPermi="['sys:menu:update']" <!-- v-hasPermi="['sys:menu:update']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
style="color: #49cec9" <!-- style="color: #49cec9"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
>修改</el-button> <!-- >修改</el-button>-->
<coolbutton style="color: #49cec9" :type="typeParent" :name="updataName" :size="size" :haspermi="updateHaspermi" @btn-click="handleUpdate(scope.row)" />
<el-switch <el-switch
v-model="scope.row.flag" v-model="scope.row.flag"
v-hasPermi="['sys:menu:toggle']"
active-value="1" active-value="1"
inactive-value="0" inactive-value="0"
@change="handleStatusChange(scope.row)" @change="handleStatusChange(scope.row)"
...@@ -103,20 +105,22 @@ ...@@ -103,20 +105,22 @@
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item> <el-dropdown-item>
<el-button <!-- <el-button-->
v-hasPermi="['sys:menu:delete']" <!-- v-hasPermi="['sys:menu:delete']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
@click="handleDelete(scope.row)" <!-- @click="handleDelete(scope.row)"-->
>删除</el-button> <!-- >删除</el-button>-->
<coolbutton :type="typeParent" :name="nameParent" :size="size" :haspermi="delHaspermi" @btn-click="handleDelete(scope.row)" />
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item> <el-dropdown-item>
<el-button <!-- <el-button-->
v-hasPermi="['sys:menu:add']" <!-- v-hasPermi="['sys:menu:add']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
@click="handleAdd(scope.row)" <!-- @click="handleAdd(scope.row)"-->
>新增</el-button> <!-- >新增</el-button>-->
<coolbutton :type="typeParent" :name="addName" :size="size" :haspermi="addHaspermi" @btn-click="handleAdd(scope.row)" />
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
...@@ -259,10 +263,10 @@ import Treeselect from '@riophae/vue-treeselect' ...@@ -259,10 +263,10 @@ import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css' import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import IconSelect from '@/components/IconSelect' import IconSelect from '@/components/IconSelect'
import dictCons from '@/utils/dictCons' import dictCons from '@/utils/dictCons'
import Coolbutton from '@/components/coolbutton'
export default { export default {
name: 'Menu', name: 'Menu',
components: { Treeselect, IconSelect }, components: { Treeselect, IconSelect,Coolbutton },
data() { data() {
var trueGroupName = (rule, value, callback) => { var trueGroupName = (rule, value, callback) => {
if (!value.trim()) { if (!value.trim()) {
...@@ -271,6 +275,28 @@ export default { ...@@ -271,6 +275,28 @@ export default {
callback() callback()
} }
return { return {
typeParent: 'text',
typePrimary: 'primary',
typeSuccess: 'success',
nameParent: '删除',
resetName: '重置',
addName: '新增',
queryName: '查询',
exportName: '导出',
updataName: '修改',
size: 'mini',
smallSize: 'small',
delicon: 'el-icon-delete',
addIcon: 'el-icon-plus',
exportIcon: 'el-icon-download',
queryIcon: 'el-icon-search',
resetIcon: '',
delHaspermi: ['sys:menu:delete'],
resetHaspermi: ['sys:user:resetPwd'],
updateHaspermi: ['sys:menu:update'],
addHaspermi: ['sys:menu:add'],
exportHaspermi: ['sys:role:export'],
queryHaspermi: ['sys:menu:query'],
isWorkFlow: '0', isWorkFlow: '0',
workFlow: '', workFlow: '',
workFlows: [], workFlows: [],
......
...@@ -43,20 +43,22 @@ ...@@ -43,20 +43,22 @@
</el-form-item> </el-form-item>
<div style="float: right"> <div style="float: right">
<el-form-item> <el-form-item>
<el-button <!-- <el-button-->
v-hasPermi="['sys:role:add']" <!-- v-hasPermi="['sys:role:add']"-->
type="primary" <!-- type="primary"-->
size="small" <!-- size="small"-->
@click="handleAdd" <!-- @click="handleAdd"-->
>新增</el-button> <!-- >新增</el-button>-->
<el-button <coolbutton style="padding: 8px 7px;" :type="typePrimary" :name="addName" :size="smallSize" :icon="addIcon" :haspermi="addHaspermi" @btn-click="handleAdd" />
v-hasPermi="['sys:role:export']" <!-- <el-button-->
style="padding: 8px 7px;" <!-- v-hasPermi="['sys:role:export']"-->
type="success" <!-- style="padding: 8px 7px;"-->
size="small" <!-- type="success"-->
icon="el-icon-download" <!-- size="small"-->
@click="handleExport" <!-- icon="el-icon-download"-->
>导出</el-button> <!-- @click="handleExport"-->
<!-- >导出</el-button>-->
<coolbutton style="padding: 8px 7px;" :type="typeSuccess" :name="exportName" :size="smallSize" :icon="exportIcon" :haspermi="exportHaspermi" @btn-click="handleExport" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
...@@ -102,13 +104,14 @@ ...@@ -102,13 +104,14 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" class-name="small-padding fixed-width" width="240px"> <el-table-column label="操作" class-name="small-padding fixed-width" width="240px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <!-- <el-button-->
v-hasPermi="['sys:role:update']" <!-- v-hasPermi="['sys:role:update']"-->
size="mini" <!-- size="mini"-->
type="text" <!-- type="text"-->
style="color: #49cec9" <!-- style="color: #49cec9"-->
@click="handleUpdate(scope.row)" <!-- @click="handleUpdate(scope.row)"-->
>修改</el-button> <!-- >修改</el-button>-->
<coolbutton style="color: #49cec9" :type="typeParent" :name="updataName" :size="size" :haspermi="updateHaspermi" @btn-click="handleUpdate(scope.row)" />
<!-- <el-button--> <!-- <el-button-->
<!-- v-hasPermi="['sys:role:update']"--> <!-- v-hasPermi="['sys:role:update']"-->
<!-- size="mini"--> <!-- size="mini"-->
...@@ -264,10 +267,31 @@ import { listRole, getRole, delRole, addRole, updateRole, exportRole, dataScope, ...@@ -264,10 +267,31 @@ import { listRole, getRole, delRole, addRole, updateRole, exportRole, dataScope,
import { roleMenuTreeselectMC, treeselect as menuTreeselect, roleMenuTreeselect } from '@/api/system/menu' import { roleMenuTreeselectMC, treeselect as menuTreeselect, roleMenuTreeselect } from '@/api/system/menu'
import { treeselect as deptTreeselect, roleDeptTreeselect } from '@/api/system/dept' import { treeselect as deptTreeselect, roleDeptTreeselect } from '@/api/system/dept'
// import { getRolesByInsId } from '../../../api/businessManage/template' // import { getRolesByInsId } from '../../../api/businessManage/template'
import Coolbutton from '@/components/coolbutton'
export default { export default {
name: 'Role', name: 'Role',
components: { Coolbutton },
data() { data() {
return { return {
typeParent: 'text',
typePrimary: 'primary',
typeSuccess: 'success',
nameParent: '删除',
resetName: '重置',
addName: '新增',
exportName: '导出',
updataName: '修改',
size: 'mini',
smallSize: 'small',
delicon: 'el-icon-delete',
addIcon: 'el-icon-plus',
exportIcon: 'el-icon-download',
resetIcon: '',
haspermi: ['sys:user:delete'],
resetHaspermi: ['sys:user:resetPwd'],
updateHaspermi: ['sys:role:update'],
addHaspermi: ['sys:role:add'],
exportHaspermi: ['sys:role:export'],
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 选中数组 // 选中数组
......
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