| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470 |
- <template>
- <div>
- <el-card class="content">
- <!-- 标题区域 -->
- <el-row class="card_title">账号管理</el-row>
- <!-- 筛选区域 -->
- <el-row :gutter="35" class="card_search">
- <el-col :span="5">
- 账号:
- <el-input
- style="width: 180px"
- placeholder="请输入账号"
- clearable
- v-model="searchAccount"
- ></el-input>
- </el-col>
- <el-col :span="5">
- 姓名:
- <el-input
- style="width: 180px"
- placeholder="请输入姓名"
- clearable
- v-model="searchName"
- ></el-input>
- </el-col>
- <el-col :span="5">
- 创建时间:
- <el-date-picker
- type="date"
- placeholder="请选择创建时间"
- value-format="YYYY-MM-DD"
- v-model="searchTime"
- />
- </el-col>
- <el-col :span="4">
- <el-button type="primary" @click="getData">
- <el-icon><Search /></el-icon>
- <span> 查询</span>
- </el-button>
- </el-col>
- </el-row>
- <!-- 新增账号按钮区域 -->
- <el-row class="card_button">
- <el-button type="primary" @click="handleAdd">
- <el-icon><Plus /></el-icon>
- <span> 新增账号</span>
- </el-button>
- </el-row>
- <!-- 表格区域 -->
- <el-table
- stripe
- height="481"
- :data="tableData"
- style="width: 100%"
- :header-cell-style="{ backgroundColor: '#F0F3F7' }"
- >
- <el-table-column type="index" width="55" align="center" label="序号" />
- <el-table-column
- width="200"
- align="center"
- prop="userName"
- label="账号"
- />
- <el-table-column
- width="200"
- align="center"
- show-overflow-tooltip
- prop="name"
- label="姓名"
- />
- <el-table-column show-overflow-tooltip align="center" label="角色">
- <template #default="{ row }">
- {{ row.adminType == 1 ? '超级管理员' : '管理员' }}
- </template>
- </el-table-column>
- <el-table-column align="center" prop="time" label="创建时间" />
- <el-table-column width="200" align="center" label="操作">
- <template #default="{ row }">
- <el-button type="success" plain @click="handleEdit(row)"
- >编辑
- </el-button>
- <el-button
- v-if="row.adminType == 2"
- type="danger"
- plain
- @click="handleDelete(row.id)"
- >删除
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- <!-- 分页器区域 -->
- <el-row class="card_pagination">
- <el-pagination
- v-model:current-page="currentPage"
- v-model:page-size="pageSize"
- :page-sizes="[8, 20, 50, 100]"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- />
- </el-row>
- </el-card>
- <!-- 编辑弹窗区域 -->
- <el-dialog
- v-model="dialogVisible"
- title="编辑账号"
- width="25%"
- top="20vh"
- :close-on-click-modal="false"
- >
- <div class="dialog_box">
- <div class="dialog_item">
- <span>账号:</span>
- <el-input
- style="width: 180px"
- placeholder="请输入账号"
- clearable
- v-model="editInfo.userName"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>姓名:</span>
- <el-input
- style="width: 180px"
- placeholder="请输入姓名"
- clearable
- v-model="editInfo.name"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>密码:</span>
- <el-input
- type="password"
- :show-password="true"
- style="width: 180px"
- placeholder="请输入密码"
- clearable
- v-model="editInfo.newPassword"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>确认密码:</span>
- <el-input
- type="password"
- :show-password="true"
- style="width: 180px"
- placeholder="请再次输入新密码"
- clearable
- v-model="editInfo.newPassword2"
- ></el-input>
- </div>
- </div>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="dialogVisible = false">取消</el-button>
- <el-button type="primary" @click="handleEditConfirm">
- 确定
- </el-button>
- </span>
- </template>
- </el-dialog>
- <!-- 新增账号弹窗区域 -->
- <el-dialog
- v-model="dialogVisibleAdd"
- title="新增账号"
- width="25%"
- top="20vh"
- :close-on-click-modal="false"
- >
- <div class="dialog_box">
- <div class="dialog_item">
- <span>账号:</span>
- <el-input
- style="width: 180px"
- placeholder="请输入账号"
- clearable
- v-model="addInfo.userName"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>姓名:</span>
- <el-input
- style="width: 180px"
- placeholder="请输入姓名"
- clearable
- v-model="addInfo.name"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>密码:</span>
- <el-input
- type="password"
- :show-password="true"
- style="width: 180px"
- placeholder="请输入密码"
- clearable
- v-model="addInfo.newPassword"
- ></el-input>
- </div>
- <div class="dialog_item">
- <span>确认密码:</span>
- <el-input
- type="password"
- :show-password="true"
- style="width: 180px"
- placeholder="请再次输入新密码"
- clearable
- v-model="addInfo.newPassword2"
- ></el-input>
- </div>
- </div>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="dialogVisibleAdd = false">取消</el-button>
- <el-button type="primary" @click="handleEditConfirmAdd">
- 确定
- </el-button>
- </span>
- </template>
- </el-dialog>
- </div>
- </template>
- <script setup>
- import { ref, onMounted } from 'vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import {
- getUserList,
- editUserList,
- addUserList,
- deleteUserList
- } from '@/api/user'
- import { RSAencrypt } from '@/utils/jsencrypt'
- onMounted(() => {
- getData()
- })
- // 获取账号管理列表
- const getData = async () => {
- const res = await getUserList({
- userName: searchAccount.value,
- name: searchName.value,
- time: searchTime.value,
- currPage: currentPage.value,
- pageSize: pageSize.value
- })
- // console.log(res)
- tableData.value = res.list
- total.value = res.totalCount
- currentPage.value = res.currPage
- }
- // 筛选区域数据
- const searchAccount = ref('')
- const searchName = ref('')
- const searchTime = ref('')
- // 账号管理列表数据
- const tableData = ref([])
- // 编辑弹窗数据
- const editInfo = ref({
- userName: '',
- name: '',
- newPassword: '',
- newPassword2: ''
- })
- // 新增账号弹窗数据
- const addInfo = ref({
- userName: '',
- name: '',
- newPassword: '',
- newPassword2: ''
- })
- // 总条数
- const total = ref(0)
- // 当前页
- const currentPage = ref(1)
- // 每页多少条
- const pageSize = ref(8)
- // 编辑弹窗显示隐藏控制
- const dialogVisible = ref(false)
- // 新增账号弹窗显示隐藏控制
- const dialogVisibleAdd = ref(false)
- // 删除按钮回调
- const handleDelete = (id) => {
- ElMessageBox.confirm('确定删除吗?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- })
- .then(async () => {
- const res = await deleteUserList({
- ids: [id]
- })
- // console.log(res)
- if (res == null) {
- ElMessage.success('删除成功')
- getData()
- }
- })
- .catch(() => {
- ElMessage.info('已取消')
- })
- }
- // 新增按钮回调
- const handleAdd = () => {
- dialogVisibleAdd.value = true
- addInfo.value = {
- userName: '',
- name: '',
- newPassword: '',
- newPassword2: ''
- }
- }
- // 每页条数改变时的回调
- const handleSizeChange = (val) => {
- pageSize.value = val
- }
- // 当前页改变时的回调
- const handleCurrentChange = (val) => {
- currentPage.value = val
- }
- // 编辑按钮回调
- const handleEdit = (row) => {
- dialogVisible.value = true
- editInfo.value = Object.assign(editInfo.value, row)
- }
- // 编辑弹窗确定按钮回调
- const handleEditConfirm = async () => {
- if (editInfo.value.newPassword === '') {
- ElMessage.error('请输入密码')
- return
- }
- if (editInfo.value.newPassword2 === '') {
- ElMessage.error('请输入确认新密码')
- return
- }
- if (editInfo.value.newPassword !== editInfo.value.newPassword2) {
- ElMessage.error('两次输入的密码不一致')
- return
- }
- const res = await editUserList({
- id: editInfo.value.id,
- userName: editInfo.value.userName,
- name: editInfo.value.name,
- password: RSAencrypt(editInfo.value.newPassword)
- })
- // console.log(res)
- if (res == null) {
- dialogVisible.value = false
- editInfo.value.newPassword = ''
- editInfo.value.newPassword2 = ''
- ElMessage.success('编辑账号成功')
- getData()
- }
- }
- // 新增账号弹窗确定按钮回调
- const handleEditConfirmAdd = async () => {
- if (addInfo.value.userName === '') {
- ElMessage.error('请输入账号')
- return
- }
- if (addInfo.value.name === '') {
- ElMessage.error('请输入姓名')
- return
- }
- if (addInfo.value.newPassword === '') {
- ElMessage.error('请输入密码')
- return
- }
- if (addInfo.value.newPassword2 === '') {
- ElMessage.error('请输入确认新密码')
- return
- }
- if (addInfo.value.newPassword !== addInfo.value.newPassword2) {
- ElMessage.error('两次输入的密码不一致')
- return
- }
- const res = await addUserList({
- userName: addInfo.value.userName,
- name: addInfo.value.name,
- password: RSAencrypt(addInfo.value.newPassword)
- })
- // console.log(res)
- if (res == null) {
- ElMessage.success('添加成功')
- dialogVisibleAdd.value = false
- getData()
- }
- }
- </script>
- <style lang="scss" scoped>
- .content {
- width: 1650px;
- height: 782px;
- ::v-deep .el-card__body {
- padding: 0 27px;
- }
- .card_title {
- line-height: 58px;
- font-size: 17px;
- font-weight: bold;
- border-bottom: 2px solid #d9d9d9;
- }
- .card_search {
- line-height: 85px;
- font-size: 13px;
- font-weight: bold;
- }
- .card_button {
- height: 53px;
- }
- .card_pagination {
- float: right;
- line-height: 96px;
- }
- }
- .dialog_box {
- height: 150px;
- .dialog_item {
- height: 30px;
- margin-bottom: 20px;
- span {
- display: inline-block;
- width: 70px;
- }
- }
- }
- ::v-deep .el-button--primary {
- background-color: #0061ff;
- }
- ::v-deep .el-dialog__header {
- margin: 0;
- font-weight: bold;
- background-color: #edf1f5;
- }
- ::v-deep
- .el-table--striped
- .el-table__body
- tr.el-table__row--striped.el-table__row--striped.el-table__row--striped
- td {
- background-color: #f0f3f7;
- }
- </style>
|