| | |
| | | style="width: 240px"
|
| | | >
|
| | | <el-option
|
| | | v-for="dict in statusOptions"
|
| | | :key="dict.dictValue"
|
| | | :label="dict.dictLabel"
|
| | | :value="dict.dictValue"
|
| | | v-for="dict in dict.type.sys_normal_disable"
|
| | | :key="dict.value"
|
| | | :label="dict.label"
|
| | | :value="dict.value"
|
| | | />
|
| | | </el-select>
|
| | | </el-form-item>
|
| | |
| | | width="160"
|
| | | class-name="small-padding fixed-width"
|
| | | >
|
| | | <template slot-scope="scope">
|
| | | <template slot-scope="scope" v-if="scope.row.userId !== 1">
|
| | | <el-button
|
| | | size="mini"
|
| | | type="text"
|
| | |
| | | v-hasPermi="['system:user:edit']"
|
| | | >修改</el-button>
|
| | | <el-button
|
| | | v-if="scope.row.userId !== 1"
|
| | | size="mini"
|
| | | type="text"
|
| | | icon="el-icon-delete"
|
| | | @click="handleDelete(scope.row)"
|
| | | v-hasPermi="['system:user:remove']"
|
| | | >删除</el-button>
|
| | | <el-button
|
| | | size="mini"
|
| | | type="text"
|
| | | icon="el-icon-key"
|
| | | @click="handleResetPwd(scope.row)"
|
| | | v-hasPermi="['system:user:resetPwd']"
|
| | | >重置</el-button>
|
| | | <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
|
| | | <span class="el-dropdown-link">
|
| | | <i class="el-icon-d-arrow-right el-icon--right"></i>更多
|
| | | </span>
|
| | | <el-dropdown-menu slot="dropdown">
|
| | | <el-dropdown-item command="handleResetPwd" icon="el-icon-key"
|
| | | v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item>
|
| | | <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check"
|
| | | v-hasPermi="['system:user:edit']">分配角色</el-dropdown-item>
|
| | | </el-dropdown-menu>
|
| | | </el-dropdown>
|
| | | </template>
|
| | | </el-table-column>
|
| | | </el-table>
|
| | |
| | | </el-col>
|
| | | </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="nickName">
|
| | | <el-input v-model="form.nickName" placeholder="请输入用户昵称" />
|
| | | <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
|
| | | </el-form-item>
|
| | | </el-col>
|
| | | <el-col :span="12">
|
| | |
| | | <el-row>
|
| | | <el-col :span="12">
|
| | | <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
|
| | | <el-input v-model="form.userName" placeholder="请输入用户名称" />
|
| | | <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
| | | </el-form-item>
|
| | | </el-col>
|
| | | <el-col :span="12">
|
| | | <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
|
| | | <el-input v-model="form.password" placeholder="请输入用户密码" type="password" />
|
| | | <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
|
| | | </el-form-item>
|
| | | </el-col>
|
| | | </el-row>
|
| | |
| | | <el-form-item label="用户性别">
|
| | | <el-select v-model="form.sex" placeholder="请选择">
|
| | | <el-option
|
| | | v-for="dict in sexOptions"
|
| | | :key="dict.dictValue"
|
| | | :label="dict.dictLabel"
|
| | | :value="dict.dictValue"
|
| | | v-for="dict in dict.type.sys_user_sex"
|
| | | :key="dict.value"
|
| | | :label="dict.label"
|
| | | :value="dict.value"
|
| | | ></el-option>
|
| | | </el-select>
|
| | | </el-form-item>
|
| | |
| | | <el-form-item label="状态">
|
| | | <el-radio-group v-model="form.status">
|
| | | <el-radio
|
| | | v-for="dict in statusOptions"
|
| | | :key="dict.dictValue"
|
| | | :label="dict.dictValue"
|
| | | >{{dict.dictLabel}}</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>
|
| | |
| | | drag
|
| | | >
|
| | | <i class="el-icon-upload"></i>
|
| | | <div class="el-upload__text">
|
| | | 将文件拖到此处,或
|
| | | <em>点击上传</em>
|
| | | <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
| | | <div class="el-upload__tip text-center" slot="tip">
|
| | | <div class="el-upload__tip" slot="tip">
|
| | | <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
|
| | | </div>
|
| | | <span>仅允许导入xls、xlsx格式文件。</span>
|
| | | <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
|
| | | </div>
|
| | | <div class="el-upload__tip" slot="tip">
|
| | | <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
|
| | | <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
|
| | | </div>
|
| | | <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
|
| | | </el-upload>
|
| | | <div slot="footer" class="dialog-footer">
|
| | | <el-button type="primary" @click="submitFileForm">确 定</el-button>
|
| | |
| | | </template>
|
| | |
|
| | | <script>
|
| | | import { listUser, getUser, delUser, addUser, updateUser, exportUser, resetUserPwd, changeUserStatus, importTemplate } from "@/api/system/user";
|
| | | import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user";
|
| | | import { getToken } from "@/utils/auth";
|
| | | import { treeselect } from "@/api/system/dept";
|
| | | import Treeselect from "@riophae/vue-treeselect";
|
| | |
| | |
|
| | | export default {
|
| | | name: "User",
|
| | | dicts: ['sys_normal_disable', 'sys_user_sex'],
|
| | | components: { Treeselect },
|
| | | data() {
|
| | | return {
|
| | |
| | | initPassword: undefined,
|
| | | // 日期范围
|
| | | dateRange: [],
|
| | | // 状态数据字典
|
| | | statusOptions: [],
|
| | | // 性别状态字典
|
| | | sexOptions: [],
|
| | | // 岗位选项
|
| | | postOptions: [],
|
| | | // 角色选项
|
| | |
| | | // 表单校验
|
| | | rules: {
|
| | | userName: [
|
| | | { required: true, message: "用户名称不能为空", trigger: "blur" }
|
| | | { required: true, message: "用户名称不能为空", trigger: "blur" },
|
| | | { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
|
| | | ],
|
| | | nickName: [
|
| | | { required: true, message: "用户昵称不能为空", trigger: "blur" }
|
| | | ],
|
| | | password: [
|
| | | { required: true, message: "用户密码不能为空", trigger: "blur" }
|
| | | { required: true, message: "用户密码不能为空", trigger: "blur" },
|
| | | { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
|
| | | ],
|
| | | email: [
|
| | | {
|
| | |
| | | created() {
|
| | | this.getList();
|
| | | this.getTreeselect();
|
| | | this.getDicts("sys_normal_disable").then(response => {
|
| | | this.statusOptions = response.data;
|
| | | });
|
| | | this.getDicts("sys_user_sex").then(response => {
|
| | | this.sexOptions = response.data;
|
| | | });
|
| | | this.getConfigKey("sys.user.initPassword").then(response => {
|
| | | this.initPassword = response.msg;
|
| | | });
|
| | |
| | | // 用户状态修改
|
| | | handleStatusChange(row) {
|
| | | let text = row.status === "0" ? "启用" : "停用";
|
| | | this.$confirm('确认要"' + text + '""' + row.userName + '"用户吗?', "警告", {
|
| | | confirmButtonText: "确定",
|
| | | cancelButtonText: "取消",
|
| | | type: "warning"
|
| | | }).then(function() {
|
| | | return changeUserStatus(row.userId, row.status);
|
| | | }).then(() => {
|
| | | this.msgSuccess(text + "成功");
|
| | | }).catch(function() {
|
| | | row.status = row.status === "0" ? "1" : "0";
|
| | | });
|
| | | this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
|
| | | return changeUserStatus(row.userId, row.status);
|
| | | }).then(() => {
|
| | | this.$modal.msgSuccess(text + "成功");
|
| | | }).catch(function() {
|
| | | row.status = row.status === "0" ? "1" : "0";
|
| | | });
|
| | | },
|
| | | // 取消按钮
|
| | | cancel() {
|
| | |
| | | },
|
| | | /** 搜索按钮操作 */
|
| | | handleQuery() {
|
| | | this.queryParams.page = 1;
|
| | | this.queryParams.pageNum = 1;
|
| | | this.getList();
|
| | | },
|
| | | /** 重置按钮操作 */
|
| | |
| | | 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() {
|
| | |
| | | handleResetPwd(row) {
|
| | | this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
|
| | | confirmButtonText: "确定",
|
| | | cancelButtonText: "取消"
|
| | | cancelButtonText: "取消",
|
| | | closeOnClickModal: false,
|
| | | inputPattern: /^.{5,20}$/,
|
| | | inputErrorMessage: "用户密码长度必须介于 5 和 20 之间"
|
| | | }).then(({ value }) => {
|
| | | resetUserPwd(row.userId, value).then(response => {
|
| | | this.msgSuccess("修改成功,新密码是:" + value);
|
| | | this.$modal.msgSuccess("修改成功,新密码是:" + value);
|
| | | });
|
| | | }).catch(() => {});
|
| | | },
|
| | | /** 分配角色操作 */
|
| | | handleAuthRole: function(row) {
|
| | | const userId = row.userId;
|
| | | this.$router.push("/system/user-auth/role/" + userId);
|
| | | },
|
| | | /** 提交按钮 */
|
| | | submitForm: function() {
|
| | |
| | | if (valid) {
|
| | | if (this.form.userId != undefined) {
|
| | | updateUser(this.form).then(response => {
|
| | | this.msgSuccess("修改成功");
|
| | | this.$modal.msgSuccess("修改成功");
|
| | | this.open = false;
|
| | | this.getList();
|
| | | });
|
| | | } else {
|
| | | addUser(this.form).then(response => {
|
| | | this.msgSuccess("新增成功");
|
| | | this.$modal.msgSuccess("新增成功");
|
| | | this.open = false;
|
| | | this.getList();
|
| | | });
|
| | |
| | | /** 删除按钮操作 */
|
| | | handleDelete(row) {
|
| | | const userIds = row.userId || this.ids;
|
| | | this.$confirm('是否确认删除用户编号为"' + userIds + '"的数据项?', "警告", {
|
| | | confirmButtonText: "确定",
|
| | | cancelButtonText: "取消",
|
| | | type: "warning"
|
| | | }).then(function() {
|
| | | return delUser(userIds);
|
| | | }).then(() => {
|
| | | this.getList();
|
| | | this.msgSuccess("删除成功");
|
| | | })
|
| | | this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
|
| | | return delUser(userIds);
|
| | | }).then(() => {
|
| | | this.getList();
|
| | | this.$modal.msgSuccess("删除成功");
|
| | | }).catch(() => {});
|
| | | },
|
| | | /** 导出按钮操作 */
|
| | | handleExport() {
|
| | | const queryParams = this.queryParams;
|
| | | this.$confirm('是否确认导出所有用户数据项?', "警告", {
|
| | | confirmButtonText: "确定",
|
| | | cancelButtonText: "取消",
|
| | | type: "warning"
|
| | | }).then(function() {
|
| | | return exportUser(queryParams);
|
| | | }).then(response => {
|
| | | this.download(response.msg);
|
| | | })
|
| | | this.download('system/user/export', {
|
| | | ...this.queryParams
|
| | | }, `user_${new Date().getTime()}.xlsx`)
|
| | | },
|
| | | /** 导入按钮操作 */
|
| | | handleImport() {
|
| | |
| | | },
|
| | | /** 下载模板操作 */
|
| | | importTemplate() {
|
| | | importTemplate().then(response => {
|
| | | this.download(response.msg);
|
| | | });
|
| | | this.download('system/user/importTemplate', {
|
| | | }, `user_template_${new Date().getTime()}.xlsx`)
|
| | | },
|
| | | // 文件上传中处理
|
| | | handleFileUploadProgress(event, file, fileList) {
|