You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

528 lines
19 KiB

<template>
<el-container>
<el-header>
<backIndex />
</el-header>
<el-container>
<el-main class="emain">
<div class="management-container">
<!-- 用户管理 -->
<div class="section">
<h3>用户管理</h3>
</div>
<div>
<!-- 搜索框和添加用户按钮的容器 -->
<div class="toolbar">
<!-- 用户搜索框 -->
<el-input v-model="userSearch" placeholder="输入员工id或用户id" class="user-search" prefix-icon="el-icon-search">
</el-input>
<!-- 添加用户按钮 -->
<el-button @click="handleAddUser" type="primary" class="add-user-button">
添加用户
</el-button>
</div>
<!-- 用户表格 -->
<el-table :data="paginatedUsers" stripe style="width: 90%; margin: 20px auto;" border>
<el-table-column prop="id" label="用户ID" align="center"></el-table-column>
<el-table-column prop="email" label="邮箱" align="center"></el-table-column>
<el-table-column prop="password" label="密码" align="center"></el-table-column>
<el-table-column prop="phone" label="电话号" align="center"></el-table-column>
<el-table-column prop="lastLogin" label="最后登录时间" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" align="center"></el-table-column>
<el-table-column label="操作" width="220" align="center">
<template v-slot="scope">
<div class="button-group">
<el-button @click="handleEditUser(scope.row)" size="mini" type="primary" plain>编辑</el-button>
<el-button @click="handleDeleteUser(scope.row)" size="mini" type="danger" plain>删除</el-button>
<el-button @click="handleViewUser(scope.row)" size="mini" type="info" plain>查看详情</el-button>
</div>
</template>
</el-table-column>
</el-table>
<!-- 分页控件 -->
<el-pagination :current-page="userCurrentPage" :page-size="userPageSize" :total="userData.length"
@current-change="handleUserPageChange" layout="prev, pager, next, jumper" class="pagination" />
</div>
<!-- 快递员管理 -->
<div class="section">
<h3>快递员管理</h3>
<!-- 添加快递员按钮 -->
<div class="action-buttons">
<el-button @click="handleAddCourier" type="primary">添加快递员</el-button>
</div>
<el-table :data="paginatedCouriers" stripe style="width: 90%; margin: 0 auto;" border>
<el-table-column prop="id" label="员工号" align="center"></el-table-column>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="status" label="在职状态" align="center"></el-table-column>
<el-table-column prop="phone" label="电话" align="center"></el-table-column>
<el-table-column prop="entryTime" label="入职时间" align="center"></el-table-column>
<el-table-column label="操作" width="220" align="center">
<template v-slot="scope">
<div class="button-group">
<el-button @click="handleEditCourier(scope.row)" size="mini" type="primary" plain>编辑</el-button>
<el-button @click="handleDeleteCourier(scope.row)" size="mini" type="danger" plain>删除</el-button>
<el-button @click="handleViewCourier(scope.row)" size="mini" type="info" plain>查看详情</el-button>
</div>
</template>
</el-table-column>
</el-table>
<!-- 分页控件 -->
<el-pagination :current-page="courierCurrentPage" :page-size="courierPageSize" :total="courierData.length"
@current-change="handleCourierPageChange" layout="prev, pager, next, jumper" class="pagination" />
</div>
</div>
</el-main>
</el-container>
<el-footer>
<Footer />
</el-footer>
<!-- 编辑用户对话框 -->
<el-dialog title="编辑用户" v-model="editUserDialogVisible">
<el-form :model="currentUser">
<el-form-item label="用户ID">
<el-input v-model="currentUser.id" readonly />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="currentUser.email" />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="currentUser.password" />
</el-form-item>
<el-form-item label="电话号">
<el-input v-model="currentUser.phone" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="editUserDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSaveUserEdit">保存</el-button>
</div>
</el-dialog>
<!-- 添加用户对话框 -->
<el-dialog title="添加用户" v-model="addUserDialogVisible">
<el-form :model="newUser" label-width="100px">
<el-form-item label="用户ID">
<el-input v-model="newUser.id" placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="newUser.email" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="newUser.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item label="电话号">
<el-input v-model="newUser.phone" placeholder="请输入电话号码" />
</el-form-item>
<el-form-item label="注册时间">
<el-date-picker v-model="newUser.registerTime" type="date" placeholder="选择注册时间" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addUserDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSaveNewUser">保存</el-button>
</div>
</el-dialog>
<!-- 编辑快递员对话框 -->
<el-dialog title="编辑快递员" v-model="editCourierDialogVisible">
<el-form :model="currentCourier">
<el-form-item label="员工号">
<el-input v-model="currentCourier.id" readonly />
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="currentCourier.name" />
</el-form-item>
<el-form-item label="在职状态">
<el-input v-model="currentCourier.status" />
</el-form-item>
<el-form-item label="电话">
<el-input v-model="currentCourier.phone" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="editCourierDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSaveCourierEdit">保存</el-button>
</div>
</el-dialog>
<!-- 添加快递员对话框 -->
<el-dialog title="添加快递员" v-model="addCourierDialogVisible">
<el-form :model="newCourier" label-width="100px">
<el-form-item label="员工号">
<el-input v-model="newCourier.id" placeholder="请输入员工号" />
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="newCourier.name" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="在职状态">
<el-input v-model="newCourier.status" placeholder="请输入在职状态(如:在职、离职)" />
</el-form-item>
<el-form-item label="电话">
<el-input v-model="newCourier.phone" placeholder="请输入电话号码" />
</el-form-item>
<el-form-item label="入职时间">
<el-date-picker v-model="newCourier.entryTime" type="date" placeholder="选择入职时间" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="addCourierDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSaveNewCourier">保存</el-button>
</div>
</el-dialog>
<!-- 查看快递员详情对话框 -->
<el-dialog title="快递员详情" v-model="viewCourierDialogVisible">
<el-form :model="currentCourier" label-width="100px">
<el-form-item label="员工号">
<el-input v-model="currentCourier.id" readonly />
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="currentCourier.name" readonly />
</el-form-item>
<el-form-item label="在职状态">
<el-input v-model="currentCourier.status" readonly />
</el-form-item>
<el-form-item label="电话">
<el-input v-model="currentCourier.phone" readonly />
</el-form-item>
<el-form-item label="入职时间">
<el-input v-model="currentCourier.entryTime" readonly />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="viewCourierDialogVisible = false">关闭</el-button>
</div>
</el-dialog>
<!-- 查看详情对话框 -->
<!-- 查看用户详情对话框 -->
<el-dialog title="查看用户详情" v-model="viewUserDialogVisible">
<el-form :model="currentUser" label-width="100px" readonly>
<el-form-item label="用户ID">
<el-input v-model="currentUser.id" readonly />
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="currentUser.email" readonly />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="currentUser.password" readonly />
</el-form-item>
<el-form-item label="电话号">
<el-input v-model="currentUser.phone" readonly />
</el-form-item>
<el-form-item label="最后登录时间">
<el-input v-model="currentUser.lastLogin" readonly />
</el-form-item>
<el-form-item label="注册时间">
<el-input v-model="currentUser.registerTime" readonly />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="viewUserDialogVisible = false"></el-button>
</div>
</el-dialog>
</el-container>
</template>
<script lang="ts" setup>
import { ref, computed } from 'vue'
import { ElMessageBox, ElMessage } from 'element-plus'
// 查看用户详情
const viewUserDialogVisible = ref(false)
const handleViewUser = (user) => {
currentUser.value = { ...user } // 将选中的用户数据赋值给当前用户对象
viewUserDialogVisible.value = true // 显示查看详情对话框
}
// 查看快递员
const viewCourierDialogVisible = ref(false) // 控制查看对话框的显示
const handleViewCourier = (courier: any) => {
currentCourier.value = { ...courier } // 将当前选择的快递员数据赋值
viewCourierDialogVisible.value = true // 打开查看对话框
}
// 添加用户
const addUserDialogVisible = ref(false) // 控制添加用户对话框的显示
const newUser = ref({
id: '', // 用户ID
email: '', // 用户邮箱
password: '', // 用户密码
phone: '', // 用户电话
registerTime: '' // 注册时间
})
const handleAddUser = () => {
newUser.value = { id: '', email: '', password: '', phone: '', registerTime: '' } // 初始化表单
addUserDialogVisible.value = true // 打开添加对话框
}
const handleSaveNewUser = () => {
if (!newUser.value.id || !newUser.value.email || !newUser.value.phone) {
ElMessage.warning('请完整填写信息')
return
}
// 添加到用户数据
ElMessage.success('用户添加成功')
addUserDialogVisible.value = false // 关闭对话框
}
// 用户和快递员数据
const userData = ref([
{ id: '001', email: 'user1@example.com', password: 'password123', phone: '13800000001', lastLogin: '2024-11-01 10:30:00', registerTime: '2023-01-15 14:20:00' },
{ id: '002', email: 'user2@example.com', password: 'password123', phone: '13800000002', lastLogin: '2024-11-02 12:00:00', registerTime: '2023-02-10 09:15:00' },
// ... 其他用户数据
]);
const courierData = ref([
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
// ... 其他快递员数据
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
{ id: '001', name: '小刘', status: '在职', phone: '13800000001', entryTime: '2022-03-01' },
{ id: '002', name: '小王', status: '离职', phone: '13800000002', entryTime: '2021-06-15' },
]);
// 当前用户/快递员
const currentUser = ref<any>({})
const currentCourier = ref<any>({})
// 对话框可见性
const editUserDialogVisible = ref(false)
const editCourierDialogVisible = ref(false)
// 当前页和分页大小
const userPageSize = 5
const courierPageSize = 5
const userCurrentPage = ref(1)
const courierCurrentPage = ref(1)
const userSearch = ref('')
// 添加快递员
const addCourierDialogVisible = ref(false) // 控制添加快递员对话框的显示
const newCourier = ref({
id: '', // 员工号
name: '', // 姓名
status: '', // 在职状态
phone: '', // 电话
entryTime: '' // 入职时间
})
const handleAddCourier = () => {
newCourier.value = { id: '', name: '', status: '', phone: '', entryTime: '' } // 初始化表单
addCourierDialogVisible.value = true // 打开添加对话框
}
const handleSaveNewCourier = () => {
if (!newCourier.value.id || !newCourier.value.name || !newCourier.value.phone) {
ElMessage.warning('请完整填写信息')
return
}
// 添加到快递员数据
courierData.value.push({ ...newCourier.value })
ElMessage.success('快递员添加成功')
addCourierDialogVisible.value = false // 关闭对话框
}
// 分页后的用户和快递员数据
const paginatedUsers = computed(() => {
const start = (userCurrentPage.value - 1) * userPageSize
return userData.value.slice(start, start + userPageSize)
})
const paginatedCouriers = computed(() => {
const start = (courierCurrentPage.value - 1) * courierPageSize
return courierData.value.slice(start, start + courierPageSize)
})
// 编辑用户
const handleEditUser = (user: any) => {
currentUser.value = { ...user }
editUserDialogVisible.value = true
}
// 编辑快递员
const handleEditCourier = (courier: any) => {
currentCourier.value = { ...courier }
editCourierDialogVisible.value = true
}
// 删除用户
const handleDeleteUser = (user: any) => {
ElMessageBox.confirm(
'确定删除该用户吗?',
'删除确认',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
// 删除操作
const index = userData.value.findIndex(u => u.id === user.id)
if (index !== -1) userData.value.splice(index, 1)
ElMessage.success('删除成功')
}).catch(() => {
ElMessage.info('删除已取消')
})
}
// 删除快递员
const handleDeleteCourier = (courier: any) => {
ElMessageBox.confirm(
'确定删除该快递员吗?',
'删除确认',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
// 删除操作
const index = courierData.value.findIndex(c => c.id === courier.id)
if (index !== -1) courierData.value.splice(index, 1)
ElMessage.success('删除成功')
}).catch(() => {
ElMessage.info('删除已取消')
})
}
// 保存用户编辑
const handleSaveUserEdit = () => {
const index = userData.value.findIndex(u => u.id === currentUser.value.id)
if (index !== -1) {
userData.value[index] = { ...currentUser.value }
ElMessage.success('用户信息已更新')
}
editUserDialogVisible.value = false
}
// 保存快递员编辑
const handleSaveCourierEdit = () => {
const index = courierData.value.findIndex(c => c.id === currentCourier.value.id)
if (index !== -1) {
courierData.value[index] = { ...currentCourier.value }
ElMessage.success('快递员信息已更新')
}
editCourierDialogVisible.value = false
}
// 分页变化
const handleUserPageChange = (page: number) => userCurrentPage.value = page
const handleCourierPageChange = (page: number) => courierCurrentPage.value = page
</script>
<style scoped>
.toolbar {
display: flex;
justify-content: flex-end;
/* 将内容对齐到右边 */
align-items: center;
width: 90%;
margin: 20px auto;
}
.user-search {
flex: 0 0 200px;
/* 搜索框的固定宽度 */
margin-right: 10px;
/* 可以根据需要调整这个值 */
}
/* 添加用户按钮 */
.add-user-button {
flex-shrink: 0;
}
.emain {
margin-top: 50px;
}
.management-container {
padding: 20px;
background-color: #f9f9f9;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
}
.management-container h2 {
font-size: 24px;
color: #333;
margin-bottom: 20px;
}
.section {
margin-top: 30px;
}
.section h3 {
font-size: 20px;
color: #666;
margin-bottom: 15px;
text-align: center;
}
.el-table {
margin-top: 20px;
}
.button-group {
display: flex;
justify-content: space-evenly;
}
.el-button {
min-width: 60px;
font-size: 12px;
padding: 4px 8px;
}
.pagination {
margin-top: 20px;
display: flex;
justify-content: center;
}
.el-table-column {
text-align: center;
}
.el-table__header-wrapper th {
text-align: center;
}
.action-buttons {
text-align: right;
margin-top: 20px;
margin-right: 100px;
margin-bottom: 20px;
}
</style>