|
|
@ -1,12 +1,7 @@ |
|
|
|
<template> |
|
|
|
<div class="user-table"> |
|
|
|
<el-table |
|
|
|
:data="tableData" |
|
|
|
header-cell-class-name="table-header" |
|
|
|
row-class-name="table-row" |
|
|
|
style="width: 100%" |
|
|
|
@selection-change="handleSelectionChange" |
|
|
|
> |
|
|
|
<div class="user-table" :key="refreshKey"> |
|
|
|
<el-table :data="tableData" header-cell-class-name="table-header" row-class-name="table-row" style="width: 100%" |
|
|
|
@selection-change="handleSelectionChange"> |
|
|
|
<el-table-column type="selection" /> |
|
|
|
<el-table-column label="用户" width="200" property="account" /> |
|
|
|
<el-table-column label="权限" property="usrRole" /> |
|
|
@ -17,94 +12,36 @@ |
|
|
|
<el-button type="danger" @click="deleteSelectedUsers">删除</el-button> |
|
|
|
</div> |
|
|
|
<!-- 删除用户 --> |
|
|
|
<DelWarn |
|
|
|
v-if="delShowModal" |
|
|
|
:visible="delShowModal" |
|
|
|
icon="/src/assets/Warn.svg" |
|
|
|
title="删除用户" |
|
|
|
:message="deleteUserMessage" |
|
|
|
description="您正在删除用户,请谨慎操作" |
|
|
|
confirm-text="确认删除" |
|
|
|
cancel-text="取消删除" |
|
|
|
@confirm="handleConfirmDelete" |
|
|
|
@cancel="handleCancelDelete" |
|
|
|
/> |
|
|
|
<DelWarn v-if="delShowModal" :visible="delShowModal" icon="/src/assets/Warn.svg" title="删除用户" |
|
|
|
:message="deleteUserMessage" description="您正在删除用户,请谨慎操作" confirm-text="确认删除" cancel-text="取消删除" |
|
|
|
@confirm="handleConfirmDelete" @cancel="handleCancelDelete" /> |
|
|
|
<!-- 通知用户删除成功 --> |
|
|
|
<DelMessage |
|
|
|
v-if="delMessageShowModal" |
|
|
|
:visible="delMessageShowModal" |
|
|
|
icon="/src/assets/OK.svg" |
|
|
|
message="已成功删除用户" |
|
|
|
:username="selectedUsers[0].account" |
|
|
|
@confirm="handleConfirmMsg" |
|
|
|
/> |
|
|
|
<DelMessage v-if="delMessageShowModal" v-model:visible="delMessageShowModal" icon="/src/assets/OK.svg" |
|
|
|
message="已成功删除用户" :username="selectedUsers[0]?.account" @confirm="handleConfirmMsgDelete" /> |
|
|
|
<!-- 确认是否更改该用户的PIN码 --> |
|
|
|
<DelWarn |
|
|
|
v-if="updatePinModal" |
|
|
|
:visible="updatePinModal" |
|
|
|
icon="/src/assets/update-pin-icon.svg" |
|
|
|
title="PIN码更新" |
|
|
|
:message="updatePinMessage" |
|
|
|
description="您正在更改PIN码,请谨慎操作" |
|
|
|
confirm-text="确认更新" |
|
|
|
cancel-text="取消更新" |
|
|
|
@confirm="handleConfirmUpdatePin" |
|
|
|
@cancel="handleCancelUpdatePin" |
|
|
|
/> |
|
|
|
<DelWarn v-if="updatePinModal" :visible="updatePinModal" icon="/src/assets/update-pin-icon.svg" title="PIN码更新" |
|
|
|
:message="updatePinMessage" description="您正在更改PIN码,请谨慎操作" confirm-text="确认更新" cancel-text="取消更新" |
|
|
|
@confirm="handleConfirmUpdatePin" @cancel="handleCancelUpdatePin" /> |
|
|
|
<!-- 让用户输入新的pin --> |
|
|
|
<EnterPinModal |
|
|
|
v-if="enterPinModal" |
|
|
|
:visible="enterPinModal" |
|
|
|
:loading="updatePinLoading" |
|
|
|
@confirm="updatePinConfirm" |
|
|
|
@cancel="closeEnterPinModal" |
|
|
|
/> |
|
|
|
<EnterPinModal v-if="enterPinModal" :visible="enterPinModal" :loading="updatePinLoading" @confirm="updatePinConfirm" |
|
|
|
@cancel="closeEnterPinModal" /> |
|
|
|
<!-- 通知用户PIN码更新成功 --> |
|
|
|
<DelMessage |
|
|
|
v-if="updatePinMsgModal" |
|
|
|
:visible="updatePinMsgModal" |
|
|
|
icon="/src/assets/OK.svg" |
|
|
|
message="PIN码更新成功" |
|
|
|
:username="selectedUsers[0].account" |
|
|
|
@confirm="handleConfirmMsg" |
|
|
|
/> |
|
|
|
<DelMessage v-if="updatePinMsgModal" :visible="updatePinMsgModal" icon="/src/assets/OK.svg" message="PIN码更新成功" |
|
|
|
:username="selectedUsers[0].account" @confirm="handleConfirmMsg" /> |
|
|
|
<div v-if="currentStep === 'username'"> |
|
|
|
<AddUserModal |
|
|
|
:visible="insertUserShowModal" |
|
|
|
:already-exist="isExist" |
|
|
|
placeholder="请输入用户名" |
|
|
|
:tips="tips" |
|
|
|
@confirm="handleConfirmInsert" |
|
|
|
@cancel="handleCancelInsert" |
|
|
|
@resetAlreadyExist="resetAlreadyExist" |
|
|
|
/> |
|
|
|
<AddUserModal :visible="insertUserShowModal" :already-exist="isExist" placeholder="请输入用户名" :tips="tips" |
|
|
|
@confirm="handleConfirmInsert" @cancel="handleCancelInsert" @resetAlreadyExist="resetAlreadyExist" /> |
|
|
|
</div> |
|
|
|
<div v-else-if="currentStep === 'pin'"> |
|
|
|
<EnterPinModal |
|
|
|
:visible="isPinModalVisible" |
|
|
|
:loading="registerLoading" |
|
|
|
@confirm="handlePinConfirm" |
|
|
|
@cancel="closeModal" |
|
|
|
/> |
|
|
|
<EnterPinModal :visible="isPinModalVisible" :loading="registerLoading" @confirm="handlePinConfirm" |
|
|
|
@cancel="closeModal" /> |
|
|
|
</div> |
|
|
|
<!-- 通知成功添加用户 --> |
|
|
|
<DelMessage |
|
|
|
v-if="confirmInsert" |
|
|
|
:visible="confirmInsert" |
|
|
|
icon="/src/assets/OK.svg" |
|
|
|
message="已成功添加新用户" |
|
|
|
:username="newUser.account" |
|
|
|
@confirm="handleConfirmMsg" |
|
|
|
/> |
|
|
|
<DelMessage v-if="confirmInsert" :visible="confirmInsert" icon="/src/assets/OK.svg" message="已成功添加新用户" |
|
|
|
:username="newUser.account" @confirm="handleConfirmMsg" /> |
|
|
|
<!-- 通知用户选中用户 --> |
|
|
|
<DelMessage |
|
|
|
v-if="isChecked" |
|
|
|
:visible="isChecked" |
|
|
|
icon="/src/assets/Warn.svg" |
|
|
|
message="请先选中用户" |
|
|
|
username="" |
|
|
|
@confirm="handleConfirmMsg" |
|
|
|
/> |
|
|
|
<DelMessage v-if="isChecked" :visible="isChecked" icon="/src/assets/Warn.svg" message="请先选中用户" username="" |
|
|
|
@confirm="handleConfirmMsg" /> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|
|
|
@ -165,7 +102,7 @@ const isExist = ref(false) |
|
|
|
const tips = ref('') |
|
|
|
// 模拟用户数据 |
|
|
|
const selectedUsers = ref<User[]>([]) |
|
|
|
|
|
|
|
const refreshKey = ref(0) |
|
|
|
// 获取用户列表 |
|
|
|
const fetchUserList = async () => { |
|
|
|
const response = await getUserList() |
|
|
@ -180,8 +117,15 @@ const fetchUserList = async () => { |
|
|
|
const handleSelectionChange = (val: User[]) => { |
|
|
|
selectedUsers.value = val |
|
|
|
console.log('选中的用户', val) |
|
|
|
tempUser.value.id = val[0].id |
|
|
|
tempUser.value.password = val[0].password |
|
|
|
// 只有当有选中用户时才更新 tempUser |
|
|
|
if (val && val.length > 0) { |
|
|
|
tempUser.value.id = val[0].id |
|
|
|
tempUser.value.password = val[0].password |
|
|
|
} else { |
|
|
|
// 当没有选中用户时,重置 tempUser |
|
|
|
tempUser.value.id = 0 |
|
|
|
tempUser.value.password = '' |
|
|
|
} |
|
|
|
} |
|
|
|
// 新增用户 |
|
|
|
const addUser = async () => { |
|
|
@ -211,29 +155,39 @@ onMounted(() => { |
|
|
|
}) |
|
|
|
|
|
|
|
const handleConfirmDelete = async () => { |
|
|
|
const ids = selectedUsers.value.map((user) => user.id) |
|
|
|
for (const id of ids) { |
|
|
|
const response = await deleteUser({ id }) |
|
|
|
if (!response || !response.success) { |
|
|
|
console.log('删除用户失败') |
|
|
|
return |
|
|
|
try { |
|
|
|
const ids = selectedUsers.value.map((user) => user.id) |
|
|
|
for (const id of ids) { |
|
|
|
const response = await deleteUser({ id }) |
|
|
|
if (!response || !response.success) { |
|
|
|
console.log('删除用户失败') |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
delShowModal.value = false |
|
|
|
// 在显示成功消息之前先保存要显示的用户名 |
|
|
|
const deletedUsername = selectedUsers.value[0]?.account |
|
|
|
// 清空选中的用户 |
|
|
|
selectedUsers.value = [] |
|
|
|
delMessageShowModal.value = true |
|
|
|
} catch (error) { |
|
|
|
console.error('删除用户时发生错误:', error) |
|
|
|
} |
|
|
|
fetchUserList() |
|
|
|
delShowModal.value = false |
|
|
|
console.log('用户已删除') |
|
|
|
delMessageShowModal.value = true |
|
|
|
} |
|
|
|
|
|
|
|
const handleCancelDelete = () => { |
|
|
|
delShowModal.value = false |
|
|
|
console.log('删除操作已取消') |
|
|
|
} |
|
|
|
const handleConfirmMsg = () => { |
|
|
|
delMessageShowModal.value = false |
|
|
|
confirmInsert.value = false |
|
|
|
isChecked.value = false |
|
|
|
updatePinMsgModal.value = false |
|
|
|
fetchUserList() |
|
|
|
} |
|
|
|
const handleConfirmMsgDelete = () => { |
|
|
|
delMessageShowModal.value = false |
|
|
|
fetchUserList() |
|
|
|
} |
|
|
|
//更新PIN |
|
|
|
//定义请求 |
|
|
@ -279,7 +233,6 @@ const handleCancelUpdatePin = () => { |
|
|
|
} |
|
|
|
//添加用户 |
|
|
|
const handleConfirmInsert = (val: string) => { |
|
|
|
console.log(val) |
|
|
|
const user = tableData.value.find((item) => item.account == val) |
|
|
|
if (val == '') { |
|
|
|
isExist.value = true |
|
|
@ -339,6 +292,7 @@ const deleteUserMessage = computed( |
|
|
|
.user-table { |
|
|
|
width: 100%; |
|
|
|
background-color: #f9f9f9; |
|
|
|
|
|
|
|
::v-deep { |
|
|
|
.el-table { |
|
|
|
border: none; |
|
|
@ -364,17 +318,20 @@ const deleteUserMessage = computed( |
|
|
|
color: #333; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
|
|
|
|
.el-table__cell { |
|
|
|
height: 100px; |
|
|
|
line-height: normal; // 更自然的行高,确保内容上下居中 |
|
|
|
padding: 0 20px; // 增加左右间距,确保文字不贴边 |
|
|
|
} |
|
|
|
|
|
|
|
.cell { |
|
|
|
height: 100px; |
|
|
|
line-height: 100px; |
|
|
|
padding: 0 10px; // 增加左右间距 |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
|
|
|
|
th, |
|
|
|
td { |
|
|
|
border-right: none; |
|
|
@ -393,6 +350,7 @@ const deleteUserMessage = computed( |
|
|
|
margin-right: 0 !important; // 取消默认右边距 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.table-footer { |
|
|
|
position: absolute; |
|
|
|
bottom: 100px; |
|
|
@ -400,6 +358,7 @@ const deleteUserMessage = computed( |
|
|
|
display: flex; |
|
|
|
|
|
|
|
justify-content: center; |
|
|
|
|
|
|
|
button { |
|
|
|
font-size: 32px; |
|
|
|
width: 320px; |
|
|
|