From 7919af54dac5d04b79d90f1c42823e87d68d4b86 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Sat, 23 Aug 2025 11:46:49 +0800
Subject: [PATCH] 用户导入添加验证提示
---
ruoyi-ui/src/views/system/user/index.vue | 244 ++++++++++++++++++++++++++----------------------
1 files changed, 132 insertions(+), 112 deletions(-)
diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue
index 6a0ffcf..9d6e61c 100644
--- a/ruoyi-ui/src/views/system/user/index.vue
+++ b/ruoyi-ui/src/views/system/user/index.vue
@@ -58,17 +58,17 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[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="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
- <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
- <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
- <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
+ <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />
+ <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns.userName.visible" :show-overflow-tooltip="true" />
+ <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />
+ <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns.deptName.visible" :show-overflow-tooltip="true" />
+ <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns.phonenumber.visible" width="120" />
+ <el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
- <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
+ <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns.createTime.visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
@@ -105,7 +105,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
- <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
+ <treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" />
</el-form-item>
</el-col>
</el-row>
@@ -201,12 +201,12 @@
</template>
<script>
-import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user";
-import { getToken } from "@/utils/auth";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-import { Splitpanes, Pane } from "splitpanes";
-import "splitpanes/dist/splitpanes.css";
+import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"
+import { getToken } from "@/utils/auth"
+import Treeselect from "@riophae/vue-treeselect"
+import "@riophae/vue-treeselect/dist/vue-treeselect.css"
+import { Splitpanes, Pane } from "splitpanes"
+import "splitpanes/dist/splitpanes.css"
export default {
name: "User",
@@ -230,8 +230,10 @@
userList: null,
// 弹出层标题
title: "",
- // 部门树选项
+ // 所有部门树选项
deptOptions: undefined,
+ // 过滤掉已禁用部门树选项
+ enabledDeptOptions: undefined,
// 是否显示弹出层
open: false,
// 部门名称
@@ -275,15 +277,15 @@
deptId: 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: 5, label: `状态`, visible: true },
- { key: 6, label: `创建时间`, visible: true }
- ],
+ columns: {
+ userId: { label: '用户编号', visible: true },
+ userName: { label: '用户名称', visible: true },
+ nickName: { label: '用户昵称', visible: true },
+ deptName: { label: '部门', visible: true },
+ phonenumber: { label: '手机号码', visible: true },
+ status: { label: '状态', visible: true },
+ createTime: { label: '创建时间', visible: true }
+ },
// 表单校验
rules: {
userName: [
@@ -313,63 +315,76 @@
}
]
}
- };
+ }
},
watch: {
// 根据名称筛选部门树
deptName(val) {
- this.$refs.tree.filter(val);
+ this.$refs.tree.filter(val)
}
},
created() {
- this.getList();
- this.getDeptTree();
+ this.getList()
+ this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
- this.initPassword = response.msg;
- });
+ this.initPassword = response.msg
+ })
},
methods: {
/** 查询用户列表 */
getList() {
- this.loading = true;
+ this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
- this.userList = response.rows;
- this.total = response.total;
- this.loading = false;
+ this.userList = response.rows
+ this.total = response.total
+ this.loading = false
}
- );
+ )
},
/** 查询部门下拉树结构 */
getDeptTree() {
deptTreeSelect().then(response => {
- this.deptOptions = response.data;
- });
+ this.deptOptions = response.data
+ this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
+ })
+ },
+ // 过滤禁用的部门
+ filterDisabledDept(deptList) {
+ return deptList.filter(dept => {
+ if (dept.disabled) {
+ return false
+ }
+ if (dept.children && dept.children.length) {
+ dept.children = this.filterDisabledDept(dept.children)
+ }
+ return true
+ })
},
// 筛选节点
filterNode(value, data) {
- if (!value) return true;
- return data.label.indexOf(value) !== -1;
+ if (!value) return true
+ return data.label.indexOf(value) !== -1
},
// 节点单击事件
handleNodeClick(data) {
- this.queryParams.deptId = data.id;
- this.handleQuery();
+ this.queryParams.deptId = data.id
+ this.handleQuery()
},
// 用户状态修改
handleStatusChange(row) {
- let text = row.status === "0" ? "启用" : "停用";
+ let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
- return changeUserStatus(row.userId, row.status);
+ return changeUserStatus(row.userId, row.status)
}).then(() => {
- this.$modal.msgSuccess(text + "成功");
+ this.$modal.msgSuccess(text + "成功")
}).catch(function() {
- row.status = row.status === "0" ? "1" : "0";
- });
+ row.status = row.status === "0" ? "1" : "0"
+ })
},
// 取消按钮
cancel() {
- this.open = false;
- this.reset();
+ this.open = false
+ this.reset()
},
// 表单重置
reset() {
@@ -386,66 +401,66 @@
remark: undefined,
postIds: [],
roleIds: []
- };
- this.resetForm("form");
+ }
+ this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
+ this.queryParams.pageNum = 1
+ this.getList()
},
/** 重置按钮操作 */
resetQuery() {
- this.dateRange = [];
- this.resetForm("queryForm");
- this.queryParams.deptId = undefined;
- this.$refs.tree.setCurrentKey(null);
- this.handleQuery();
+ 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;
+ 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;
+ this.handleResetPwd(row)
+ break
case "handleAuthRole":
- this.handleAuthRole(row);
- break;
+ this.handleAuthRole(row)
+ break
default:
- break;
+ break
}
},
/** 新增按钮操作 */
handleAdd() {
- this.reset();
+ this.reset()
getUser().then(response => {
- this.postOptions = response.posts;
- this.roleOptions = response.roles;
- this.open = true;
- this.title = "添加用户";
- this.form.password = this.initPassword;
- });
+ 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.userId || this.ids;
+ this.reset()
+ const userId = row.userId || 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 = "";
- });
+ 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) {
@@ -462,14 +477,14 @@
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
- this.$modal.msgSuccess("修改成功,新密码是:" + value);
- });
- }).catch(() => {});
+ this.$modal.msgSuccess("修改成功,新密码是:" + value)
+ })
+ }).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
- const userId = row.userId;
- this.$router.push("/system/user-auth/role/" + userId);
+ const userId = row.userId
+ this.$router.push("/system/user-auth/role/" + userId)
},
/** 提交按钮 */
submitForm: function() {
@@ -477,29 +492,29 @@
if (valid) {
if (this.form.userId != undefined) {
updateUser(this.form).then(response => {
- this.$modal.msgSuccess("修改成功");
- this.open = false;
- this.getList();
- });
+ this.$modal.msgSuccess("修改成功")
+ this.open = false
+ this.getList()
+ })
} else {
addUser(this.form).then(response => {
- this.$modal.msgSuccess("新增成功");
- this.open = false;
- this.getList();
- });
+ this.$modal.msgSuccess("新增成功")
+ this.open = false
+ this.getList()
+ })
}
}
- });
+ })
},
/** 删除按钮操作 */
handleDelete(row) {
- const userIds = row.userId || this.ids;
+ const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
- return delUser(userIds);
+ return delUser(userIds)
}).then(() => {
- this.getList();
- this.$modal.msgSuccess("删除成功");
- }).catch(() => {});
+ this.getList()
+ this.$modal.msgSuccess("删除成功")
+ }).catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
@@ -509,8 +524,8 @@
},
/** 导入按钮操作 */
handleImport() {
- this.upload.title = "用户导入";
- this.upload.open = true;
+ this.upload.title = "用户导入"
+ this.upload.open = true
},
/** 下载模板操作 */
importTemplate() {
@@ -519,20 +534,25 @@
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
- this.upload.isUploading = true;
+ 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();
+ 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();
+ const file = this.$refs.upload.uploadFiles
+ if (!file || file.length === 0 || !file[0].name.toLowerCase().endsWith('.xls') && !file[0].name.toLowerCase().endsWith('.xlsx')) {
+ this.$modal.msgError("请选择后缀为 “xls”或“xlsx”的文件。")
+ return
+ }
+ this.$refs.upload.submit()
}
}
-};
+}
</script>
\ No newline at end of file
--
Gitblit v1.9.3