<template> <div class="app-container"> <el-row :gutter="20"> <splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme"> <!--用户数据--> <pane size="84"> <el-col> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="用户名称" prop="userName"> <el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="手机号码" prop="phone"> <el-input v-model="queryParams.phone" placeholder="请输入手机号码" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="状态" prop="status"> <el-select v-model="queryParams.dataStatus" placeholder="用户状态" clearable style="width: 240px"> <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="创建时间"> <el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:user:add']">新增</el-button> </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> </el-row> <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="50" align="center" /> <el-table-column label="用户编号" align="center" key="id" prop="id" v-if="columns[0].visible" /> <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="登录名称" align="center" key="loginName" prop="loginName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> <el-table-column label="手机号" align="center" key="phone" prop="phone" v-if="columns[3].visible" :show-overflow-tooltip= "true" /> <!-- <el-table-column label="状态" align="center" key="dataStatus" prop="dataStatus" v-if="columns[4].visible" :show-overflow-tooltip="true" />--> <el-table-column label="状态" align="center" key="dataStatus" prop="dataStatus" :show-overflow-tooltip="true" > <template slot-scope="scope"> <template v-for="dict in dict.type.sys_normal_disable" > <div v-if = "dict.value == scope.row.dataStatus"> {{dict.label}} </div> </template> </template> </el-table-column> <el-table-column label="创建时间" align="center" key="createTime" prop="createTime" v-if="columns[5].visible" width="160" /> <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width"> <template slot-scope="scope" v-if="scope.row.id !== 0"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">修改</el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleResetPwd(scope.row)" v-hasPermi="['system:user:edit']">重置密码</el-button> </template> </el-table-column> </el-table> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> </el-col> </pane> </splitpanes> </el-row> <!-- 添加或修改用户配置对话框 --> <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-row> <el-col :span="12"> <el-form-item label="姓名:" prop="userName"> <el-input v-model="form.userName" placeholder="请输入用户姓名" maxlength="30" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="手机号码" prop="phone"> <el-input v-model="form.phone" placeholder="请输入手机号码" maxlength="11" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="状态"> <el-radio-group v-model="form.dataStatus"> <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> <!-- 添加用户对话框--> <el-dialog :title="addUser.title" :visible.sync="addUser.open" width="800px" append-to-body> <el-form ref="formAdd" :model="form" :rules="rules" label-width="80px"> <el-row> <el-col :span="12"> <el-form-item label="姓名" prop="userName" > <el-input v-model="form.userName" placeholder="请输入用户姓名" maxlength="30"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="手机号码" prop="phone"> <el-input v-model="form.phone" placeholder="请输入手机号码" maxlength="30"></el-input> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="邮箱" prop="email"> <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="30"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="状态"> <el-radio-group v-model="form.dataStatus"> <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value"> {{dict.label}}</el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> <el-form-item label="账号信息" prop="loginName"> <el-input v-model="form.loginName" placeholder="请输入账号信息" maxlength="30"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" placeholder="请输入密码" maxlength="30"></el-input> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="addUserSubmit">确定</el-button> <el-button @click="cancelAdd">取消</el-button> </div> </el-dialog> </div> </template> <script> import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd } from "@/api/web/frontUser"; import { Splitpanes, Pane } from "splitpanes"; import "splitpanes/dist/splitpanes.css"; export default { name: "frontUser", dicts: ['sys_normal_disable', 'sys_user_sex'], components: { Splitpanes, Pane }, data() { return { // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 用户表格数据 userList: null, // 弹出层标题 title: "", // // 所有部门树选项 // deptOptions: undefined, // // 过滤掉已禁用部门树选项 // enabledDeptOptions: undefined, // 是否显示弹出层 open: false, // 部门名称 // deptName: undefined, // 默认密码 initPassword: undefined, // 日期范围 dateRange: [], // 岗位选项 // postOptions: [], // 角色选项 // roleOptions: [], // 表单参数 form: {}, defaultProps: { children: "children", label: "label" }, addUser: { open: false, title: "" }, // 用户导入参数 /*upload: { // 是否显示弹出层(用户导入) open: false, // 弹出层标题(用户导入) title: "", // 是否禁用上传 isUploading: false, // 是否更新已经存在的用户数据 updateSupport: 0, // 设置上传的请求头部 headers: { Authorization: "Bearer " + getToken() }, // 上传的地址 url: process.env.VUE_APP_BASE_API + "/system/user/importData" },*/ // 查询参数 queryParams: { pageNum: 1, pageSize: 10, userName: undefined, phone: undefined, dataStatus: undefined }, // 列信息 columns: [ { key: 0, label: `用户编号`, visible: true }, { key: 1, label: `用户名称`, visible: true }, { key: 2, label: `登录名称`, visible: true }, { key: 3, label: `手机号码`, visible: true }, // { key: 4, label: `用户类型`, visible: true }, { key: 4, label: `状态`, visible: true }, { key: 5, label: `创建时间`, visible: true } // { key: 5, label: `监控上限`, visible: true }, ], // 表单校验 rules: { userName: [ { required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } ], loginName: [ { required: true, message: "账号信息不能为空", trigger: "blur" }, { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } ], password: [ { required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } ], email: [ { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] } ], phone: [ { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" } ] } }; }, /*watch: { // 根据名称筛选部门树 deptName(val) { this.$refs.tree.filter(val); } },*/ created() { this.getList(); }, methods: { /** 查询用户列表 */ getList() { this.loading = true; listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { this.userList = response.rows; this.total = response.total; this.loading = false; } ); }, // 取消按钮 cancel() { this.open = false; this.reset(); }, // 表单重置 reset() { this.form = { id: undefined, userName: undefined, password: undefined, phone: undefined, email: undefined, dataStatus: "0", remark: undefined }; this.resetForm("form"); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.dateRange = []; this.resetForm("queryForm"); this.queryParams.deptId = undefined; this.$refs.tree.setCurrentKey(null); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.userId); this.single = selection.length != 1; this.multiple = !selection.length; }, // 更多操作触发 /*handleCommand(command, row) { switch (command) { case "handleResetPwd": this.handleResetPwd(row); break; case "handleAuthRole": this.handleAuthRole(row); break; default: break; } },*/ /** 新增按钮操作 */ handleAdd(){ this.reset(); this.addUser.open = true; this.addUser.title = "添加用户"; }, addUserSubmit: function (){ this.$refs["formAdd"].validate(validate => { if(validate){ console.log(this.form); addUser(this.form).then(response => { if (response.code === 200) this.$modal.msgSuccess("保存成功"); else this.$modal.msgSuccess("保存失败"); this.cancelAdd(); }).catch(()=>{}); // addUser(this.form); } }); }, cancelAdd(){ this.addUser.open = false; this.reset(); }, /*handleAdd() { this.reset(); getUser().then(response => { // console.log(response.posts) // console.log(response.roles) // this.postOptions = response.posts; // this.roleOptions = response.roles; this.open = true; this.title = "添加用户"; this.form.password = this.initPassword; }); },*/ /** 修改按钮操作 */ handleUpdate(row) { this.reset(); const userId = row.id || this.ids; getUser(userId).then(response => { this.form = response.data; // this.postOptions = response.posts; // this.roleOptions = response.roles; // this.$set(this.form, "postIds", response.postIds); // this.$set(this.form, "roleIds", response.roleIds); this.open = true; this.title = "修改用户"; this.form.password = ""; }); }, /** 重置密码按钮操作 */ handleResetPwd(row) { this.$confirm("确定要修改密码吗?", "提示",{ confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { resetUserPwd(row.id,).then(res => { if (res.code === 200){ this.$modal.msgSuccess("修改成功"); } else{ this.$modal.msgSuccess("修改失败"); } }) }).catch(() =>{}); /*this.$prompt('请输入"' + row.userName + '"的新密码', "提示", { confirmButtonText: "确定", cancelButtonText: "取消", closeOnClickModal: false, inputPattern: /^.{5,20}$/, inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", inputValidator: (value) => { if (/<|>|"|'|\||\\/.test(value)) { return "不能包含非法字符:< > \" ' \\\ |" } }, }).then(({ value }) => { resetUserPwd(row.userId, value).then(response => { this.$modal.msgSuccess("修改成功,新密码是:" + value); }); }).catch(() => {});*/ }, /** 分配角色操作 */ /*handleAuthRole: function(row) { const userId = row.userId; this.$router.push("/system/user-auth/role/" + userId); },*/ /** 提交按钮 */ submitForm: function() { this.$refs["form"].validate(va => { if (va){ updateUser(this.form).then(response =>{ this.$modal.alertWarning("修改成功"); this.open = false; this.getList(); }); } }); /*this.$refs["form"].validate(valid => { // console.log(this.form); if (valid) { if (this.form.userId != undefined) { console.log(this.form); updateUser(this.form).then(response => { this.$modal.msgSuccess("修改成功"); this.open = false; this.getList(); }); } else { addUser(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.open = false; this.getList(); }); } } });*/ }, /** 删除按钮操作 */ handleDelete(row) { const userIds = row.userId || this.ids; this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() { return delUser(userIds); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => {}); }, /** 导出按钮操作 */ handleExport() { this.download('system/user/export', { ...this.queryParams }, `user_${new Date().getTime()}.xlsx`) }, /** 导入按钮操作 */ handleImport() { this.upload.title = "用户导入"; this.upload.open = true; }, /** 下载模板操作 */ importTemplate() { this.download('system/user/importTemplate', { }, `user_template_${new Date().getTime()}.xlsx`) }, // 文件上传中处理 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("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); this.getList(); }, // 提交上传文件 submitFileForm() { this.$refs.upload.submit(); } } }; </script>