Files
SMANAGE/backup/GERP copy/KeyUnit/SiteUserManagement.html
T

518 lines
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<resource-share type="script" src="/assets/js/formConfigs/userForm.js"></resource-share>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<!-- 搜索栏 -->
<div class="layui-card-header">
<form class="layui-form layui-form-pane" lay-filter="searchForm">
<div class="layui-form-item">
<div class="layui-input-inline" style="width: 150px;">
<select name="SearchField" lay-verify="">
<option value="UserUUID">用户编号</option>
<option value="UserJobNumber">用户工号</option>
<option value="UserName">用户昵称</option>
<option value="UserEmail">用户邮件</option>
<option value="UserTele">用户电话</option>
</select>
</div>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="SearchKeyword" placeholder="请输入搜索关键词" class="layui-input">
</div>
<div class="layui-input-inline" style="width: 120px;">
<select name="MatchMode" lay-verify="">
<option value="Like">模糊匹配</option>
<option value="Regex">正则匹配</option>
</select>
</div>
<div class="layui-input-inline" style="width: 150px;">
<select name="SortField" lay-verify="">
<option value="UserCreateTime">创建时间</option>
<option value="UserLastLoginDate">最后登录</option>
<option value="UserName">昵称排序</option>
<option value="UserPermission">权限等级</option>
</select>
</div>
<div class="layui-input-inline" style="width: 100px;">
<select name="SortOrder" lay-verify="">
<option value="Desc">降序</option>
<option value="Asc">升序</option>
</select>
</div>
<button class="layui-btn layui-btn-normal" type="button" id="searchBtn">
<i class="layui-icon layui-icon-search"></i> 搜索
</button>
<button class="layui-btn layui-btn-primary" type="button" id="resetBtn">
<i class="layui-icon layui-icon-refresh"></i> 重置
</button>
</div>
</form>
</div>
</div>
<div class="layui-card">
<table class="layui-hide" id="ID-treeTable"></table>
<script type="text/html" id="TPL-treeTable">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-event="NewUser">
<i class="layui-icon layui-icon-add"></i> 新建用户
</button>
<button class="layui-btn layui-btn-sm" lay-event="FullChecked">展开全部</button>
<button class="layui-btn layui-btn-sm" lay-event="FullOutChecked">收起全部</button>
<button class="layui-btn layui-btn-sm" lay-event="CopyCheckedUUID">复制选中的 UUID</button>
<button class="layui-btn layui-btn-sm" lay-event="Refresh">刷新</button>
<button class="layui-btn layui-btn-danger layui-btn-sm" lay-event="batchDelete" style="float: right;">
<i class="layui-icon layui-icon-delete"></i> 批量删除
</button>
</div>
</script>
<script type="text/html" id="TPL-treeTable-tools">
<div class="layui-btn-container">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detailBackpack">查看背包</a>
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="CopyUUID">复制 UUID</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">删除</a>
<a class="layui-btn layui-btn-xs" lay-event="more">更多 <i class="layui-icon layui-icon-down"></i></a>
</div>
</script>
</div>
</div>
</div>
</div>
<script>
layui.use(['treeTable', 'layer', 'dropdown', 'form', 'formEngine', 'jquery'], function() {
const treeTable = layui.treeTable;
const layer = layui.layer;
const dropdown = layui.dropdown;
const form = layui.form;
const formEngine = layui.formEngine;
const $ = layui.jquery;
// 统一错误处理函数
function handleAjaxError(xhr) {
try {
const response = JSON.parse(xhr.responseText);
const errorMsg = response.msg || '未知错误';
layer.msg(`请求失败: ${errorMsg}`, {icon: 5});
} catch (e) {
layer.msg('网络错误或服务器错误', {icon: 5});
}
}
// 渲染树形表格(启用分页)
const tableInst = treeTable.render({
elem: '#ID-treeTable',
id: 'ID-treeTable',
url: '/API/SiteUserManagement/GetSiteUsers',
tree: {
view: {
iconLeaf: '<i class="layui-icon layui-icon-username"></i>'
},
// 如果不需要树形结构,可设置 enable: false
enable: true
},
toolbar: '#TPL-treeTable',
cols: [[
{ type: 'checkbox', fixed: 'left' },
{ field: 'UserUUID', title: '用户编号', minWidth: 120, fixed: 'left' },
{ field: 'UserJobNumber', title: '用户工号', minWidth: 120 },
{ field: 'UserName', title: '用户昵称', minWidth: 100 },
{ field: 'UserPermission', title: '用户权限', minWidth: 80, templet: function(d) {
// 权限等级格式化显示
const permissionMap = {
1.0: '管理员',
0.5: '操作员',
0.1: '普通用户'
};
return permissionMap[d.UserPermission] || d.UserPermission;
}},
{ field: 'UserGender', title: '用户性别', minWidth: 60 },
{ field: 'UserEmail', title: '用户邮件', minWidth: 180 },
{ field: 'UserEmailVerify', title: '邮件验证', minWidth: 50, templet: function(d) {
return d.UserEmailVerify ?
'<span class="layui-badge layui-bg-blue">已验证</span>' :
'<span class="layui-badge layui-bg-red">未验证</span>';
}},
{ field: 'UserAccountLicense', title: '账户许可证', minWidth: 50, templet: function(d) {
return d.UserAccountLicense ?
'<span class="layui-badge layui-bg-green">通过</span>' :
'<span class="layui-badge layui-bg-red">终止</span>';
}},
{ field: 'UserTele', title: '用户电话', minWidth: 120 },
{ field: 'UserLastLoginDate', title: '最后登录时间', minWidth: 200 },
{ field: 'UserCreateTime', title: '创建时间', minWidth: 200 },
{
fixed: 'right',
title: '操作',
width: 400,
align: 'center',
toolbar: '#TPL-treeTable-tools'
}
]],
page: true, // 启用分页
limit: 10, // 每页默认10条
limits: [5, 10, 20, 50, 100], // 每页条数选择器
request: {
pageName: 'PageIndex', // 页码参数名(匹配API)
limitName: 'PageSize' // 每页条数参数名(匹配API)
},
response: {
statusName: 'code', // 状态码字段名
statusCode: 0, // 成功状态码
countName: 'count', // 总条数字段名
dataName: 'data' // 数据列表字段名
},
error: function(xhr) {
handleAjaxError(xhr);
}
});
// 搜索按钮事件
$('#searchBtn').on('click', function() {
const formData = form.val('searchForm');
// 重新加载表格,携带搜索参数
tableInst.reload({
where: formData,
page: {
curr: 1 // 搜索后重置到第一页 (layui 2.6+ 使用 curr)
}
});
});
// 重置按钮事件
$('#resetBtn').on('click', function() {
form.val('searchForm', {
SearchField: 'UserUUID',
SearchKeyword: '',
MatchMode: 'Like',
SortField: 'UserCreateTime',
SortOrder: 'Desc'
});
// 重置表格
tableInst.reload({
where: {},
page: {
curr: 1
}
});
});
// 表头工具栏事件
treeTable.on('toolbar(ID-treeTable)', function(obj) {
const tableId = obj.config.id;
const checkStatus = treeTable.checkStatus(tableId);
const data = checkStatus.data;
switch (obj.event) {
case 'FullChecked':
layer.msg('成功展开全部', {icon: 1});
treeTable.expandAll(tableId, true);
break;
case 'FullOutChecked':
layer.msg('成功收起全部', {icon: 1});
treeTable.expandAll(tableId, false);
break;
case 'CopyCheckedUUID':
copyToClipboard({ text: data.map(row => row.UserUUID).join('\n') }).then(() => {
layer.msg(`复制成功`, {icon: 1});
})
.catch((err) => {
layer.msg(`复制失败:${err}`, {icon: 5});
});
break;
case 'Refresh':
tableInst.reload();
layer.msg('已刷新', {icon: 1});
break;
case 'NewUser':
// 打开新建用户表单
formEngine.openRegisteredForm('user-add', {
confirm: function(formData, close) {
$.ajax({
url: '/API/SiteUserManagement/AddUser',
type: 'POST',
data: formData,
success: function(res) {
if (res.code == 0) {
layer.msg('成功添加用户', {icon: 1});
tableInst.reload();
close();
} else {
layer.msg(`添加失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
}
});
break;
case 'batchDelete':
if (data.length === 0) {
layer.msg('请选择要删除的用户', {icon: 3});
return;
}
// 获取选中用户的UUID列表
const userUUIDs = data.map(item => item.UserUUID);
layer.confirm("确定要删除选中的 " + data.length + " 个用户吗?删除后不可恢复!", {
title: '批量删除确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/BatchDeleteUsers",
type: 'POST',
data: { UserUUIDs: userUUIDs },
success: function(res) {
if (res.code == 0) {
layer.msg('删除成功', {icon: 1});
tableInst.reload();
} else {
layer.msg(`删除失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
}
});
// 单元格工具事件
treeTable.on(`tool(${tableInst.config.id})`, function(obj) {
const { event: layEvent, data: trData } = obj;
if (layEvent === 'detail') {
layer.open({
type: 2,
title: `用户详情 - ${trData.UserName}`,
content: `/WorkGroup/UserDetail.html?UserUUID=${trData.UserUUID}`,
area: ['800px', '600px'],
shade: 0.3,
maxmin: true
});
}
if (layEvent === 'detailBackpack') {
gerp.addTab(
`站点用户管理 - 背包 [${trData.UserName}]`,
`/KeyUnit/Backpack.html?UserUUID=${trData.UserUUID}`
);
}
else if (layEvent === 'edit') {
formEngine.openRegisteredForm('user-edit', {
data: trData,
confirm: function(formData, close) {
formData.UserUUID = trData.UserUUID;
$.ajax({
url: '/API/SiteUserManagement/ModifyUser',
type: 'POST',
data: formData,
success: function(res) {
if (res.code == 0) {
layer.msg('成功修改用户信息', {icon: 1});
tableInst.reload();
close();
} else {
layer.msg(`修改失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
}
});
}
else if (layEvent === 'CopyUUID') {
copyToClipboard({ text: trData.UserUUID }).then(() => {
layer.msg(`复制成功,UUID: ${trData.UserUUID}`, {icon: 1});
})
.catch((err) => {
layer.msg(`复制失败:${err}`, {icon: 1});
});
}
else if (layEvent === 'delete') {
// 单个删除
layer.confirm("确定要删除用户【" + trData.UserName + "】吗?删除后不可恢复!", {
title: '删除确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/DeleteUser",
type: 'POST',
data: { UserUUID: trData.UserUUID },
success: function(res) {
if (res.code == 0) {
layer.msg('删除成功', {icon: 1});
obj.del(); // 删除表格行
tableInst.reload();
} else {
layer.msg(`删除失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
}
else if (layEvent === 'more') {
// 更多操作下拉菜单
dropdown.render({
elem: this,
show: true,
align: 'right',
data: [
{ title: '重置密码', id: 'resetPwd' },
{ title: '验证密码', id: 'verifyPassword' },
{ title: '禁用账户', id: 'disableAccount' },
{ title: '启用账户', id: 'enableAccount' },
{ title: '通过邮箱验证', id: 'enableEmailVerify' },
{ title: '结束邮箱验证', id: 'disableEmailVerify' },
],
click: function(menudata) {
switch (menudata.id) {
case 'resetPwd':
layer.prompt({
title: '重置密码',
value: '123456789',
formType: 1
}, function(pwd, index) {
$.ajax({
url: "/API/SiteUserManagement/ResetPassword",
type: 'POST',
data: {
UserUUID: trData.UserUUID,
UserNewPassword: pwd
},
success: function(res) {
if (res.code == 0) {
layer.msg('密码重置成功', {icon: 1});
} else {
layer.msg(`重置失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
case 'verifyPassword':
layer.prompt({
title: '验证用户密码',
formType: 1 // 密码输入框
}, function(pwd, index) {
// 发起请求验证密码
$.ajax({
url: "/API/SiteUserManagement/VerifyPassword",
type: 'POST',
data: {
UserUUID: trData.UserUUID,
UserPassword: pwd
},
success: function(res) {
if (res.code == 0) {
layer.msg('密码正确', {icon: 1, time: 1500});
} else {
layer.msg(`密码错误:${res.msg || '未知错误'}`, {icon: 5, time: 2000});
}
},
error: handleAjaxError
});
layer.close(index); // 关闭输入框
});
break;
case 'disableAccount':
layer.confirm("确定要禁用用户【" + trData.UserName + "】吗?", {
title: '禁用确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/DisableAccount",
type: 'POST',
data: { UserUUID: trData.UserUUID },
success: function(res) {
if (res.code == 0) {
layer.msg('账户已禁用', {icon: 1});
tableInst.reload();
} else {
layer.msg(`禁用失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
case 'enableAccount':
layer.confirm("确定要启用用户【" + trData.UserName + "】吗?", {
title: '启用确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/EnableAccount",
type: 'POST',
data: { UserUUID: trData.UserUUID },
success: function(res) {
if (res.code == 0) {
layer.msg('账户已启用', {icon: 1});
tableInst.reload();
} else {
layer.msg(`启用失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
case 'enableEmailVerify':
layer.confirm(`确定要通过用户【${trData.UserName}】的邮箱验证吗?`, {
title: '通过邮箱验证确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/EnableAccountEmailVerify",
type: 'POST',
data: { UserUUID: trData.UserUUID },
success: function(res) {
if (res.code == 0) {
layer.msg('邮箱验证已通过', {icon: 1});
tableInst.reload(); // 刷新表格更新状态
} else {
layer.msg(`通过失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
case 'disableEmailVerify':
layer.confirm(`确定要结束用户【${trData.UserName}】的邮箱验证状态吗?`, {
title: '结束邮箱验证确认',
icon: 3
}, function(index) {
$.ajax({
url: "/API/SiteUserManagement/DisableAccountEmailVerify",
type: 'POST',
data: { UserUUID: trData.UserUUID },
success: function(res) {
if (res.code == 0) {
layer.msg('邮箱验证已结束', {icon: 1});
tableInst.reload(); // 刷新表格更新状态
} else {
layer.msg(`结束失败:${res.msg}`, {icon: 5});
}
},
error: handleAjaxError
});
layer.close(index);
});
break;
}
}
});
}
});
// 表单渲染
form.render();
});
</script>