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.
WeChat/src/views/modules/sys/user.vue

168 lines
8.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="mod-user">
<!-- 搜索表单 -->
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<!-- 用户名输入框 -->
<el-input v-model="dataForm.userName" placeholder="用户名" clearable></el-input>
</el-form-item>
<el-form-item>
<!-- 查询按钮 -->
<el-button @click="getDataList()">查询</el-button>
<!-- 新增按钮,只有在有权限时显示 -->
<el-button v-if="isAuth('sys:user:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
<!-- 批量删除按钮,只有在有权限时显示,并且在没有选择项时禁用 -->
<el-button v-if="isAuth('sys:user:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0">批量删除</el-button>
</el-form-item>
</el-form>
<!-- 用户数据表格 -->
<el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle" style="width: 100%;">
<!-- 选择框列 -->
<el-table-column type="selection" header-align="center" align="center" width="50">
</el-table-column>
<!-- ID列 -->
<el-table-column prop="userId" header-align="center" align="center" width="80" label="ID">
</el-table-column>
<!-- 用户名列 -->
<el-table-column prop="username" header-align="center" align="center" label="用户名">
</el-table-column>
<!-- 邮箱列 -->
<el-table-column prop="email" header-align="center" align="center" label="邮箱">
</el-table-column>
<!-- 手机号列 -->
<el-table-column prop="mobile" header-align="center" align="center" label="手机号">
</el-table-column>
<!-- 状态列 -->
<el-table-column prop="status" header-align="center" align="center" label="状态">
<template slot-scope="scope">
<el-tag v-if="scope.row.status === 0" size="small" type="danger">禁用</el-tag>
<el-tag v-else size="small">正常</el-tag>
</template>
</el-table-column>
<!-- 操作列 -->
<el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<template slot-scope="scope">
<!-- 修改按钮,只有在有权限时显示 -->
<el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.userId)">修改</el-button>
<!-- 删除按钮,只有在有权限时显示 -->
<el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.userId)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalCount" layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<!-- 弹窗,用于新增或修改用户 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</template>
<script>
import AddOrUpdate from './user-add-or-update' // 导入新增/修改用户组件
export default {
data() {
return {
dataForm: {
userName: '' // 搜索表单数据
},
dataList: [], // 用户数据列表
pageIndex: 1, // 当前页码
pageSize: 10, // 每页显示条数
totalCount: 0, // 总记录数
dataListLoading: false, // 数据加载状态
dataListSelections: [], // 选中的用户列表
addOrUpdateVisible: false // 控制新增/修改弹窗的可见性
}
},
components: {
AddOrUpdate // 注册新增/修改用户组件
},
activated() {
this.getDataList() // 组件激活时获取用户数据列表
},
methods: {
// 获取用户数据列表
getDataList() {
this.dataListLoading = true // 设置加载状态为true
this.$http({
url: this.$http.adornUrl('/sys/user/list'), // 获取用户列表的API地址
method: 'get',
params: this.$http.adornParams({
'page': this.pageIndex, // 当前页码
'limit': this.pageSize, // 每页显示条数
'username': this.dataForm.userName // 用户名搜索条件
})
}).then(({ data }) => {
if (data && data.code === 200) {
// 请求成功,更新用户数据列表和总记录数
this.dataList = data.page.list
this.totalCount = data.page.totalCount
} else {
// 请求失败,清空数据列表
this.dataList = []
this.totalCount = 0
}
this.dataListLoading = false // 设置加载状态为false
})
},
// 每页数变化处理
sizeChangeHandle(val) {
this.pageSize = val // 更新每页显示条数
this.pageIndex = 1 // 重置为第一页
this.getDataList() // 重新获取数据列表
},
// 当前页变化处理
currentChangeHandle(val) {
this.pageIndex = val // 更新当前页码
this.getDataList() // 重新获取数据列表
},
// 多选处理
selectionChangeHandle(val) {
this.dataListSelections = val // 更新选中的用户列表
},
// 新增或修改用户处理
addOrUpdateHandle(id) {
this.addOrUpdateVisible = true // 显示新增/修改弹窗
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id) // 初始化弹窗传入用户ID
})
},
// 删除用户处理
deleteHandle(id) {
// 确定要删除的用户ID单个或多个
var userIds = id ? [id] : this.dataListSelections.map(item => item.userId)
this.$confirm(`确定对[id=${userIds.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 确认删除
this.$http({
url: this.$http.adornUrl('/sys/user/delete'), // 删除用户的API地址
method: 'post',
data: this.$http.adornData(userIds, false) // 发送要删除的用户ID
}).then(({ data }) => {
if (data && data.code === 200) {
// 删除成功
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => this.getDataList() // 关闭提示时重新获取数据列表
})
} else {
// 删除失败,显示错误信息
this.$message.error(data.msg)
}
})
}).catch(() => {
// 取消删除操作的处理逻辑(空)
})
}
}
}
</script>