feat(用户审核): 增加用户审核弹窗及驳回状态处理

- 在用户管理页面添加审核弹窗,支持通过/驳回操作
- 新增驳回状态(3)及相关状态显示处理
- 修改查询参数username为userName以保持一致性
- 调整时间范围选择器的日期格式为YYYY-MM-DD
- 将审批按钮点击事件改为打开弹窗方式
This commit is contained in:
liangbin 2026-01-30 10:59:09 +08:00
parent 37747116ed
commit 06b10364fa
3 changed files with 96 additions and 20 deletions

View File

@ -129,6 +129,7 @@ const statusMap = {
'0': '已生效', '0': '已生效',
'1': '已停用', '1': '已停用',
'2': '待审核', '2': '待审核',
'3': '已驳回',
} }
const dialogShow = ref(false); // const dialogShow = ref(false); //
@ -293,6 +294,7 @@ const getStatusTagType = (status) => {
if (status === '0') return 'success' if (status === '0') return 'success'
if (status === '1') return 'info' if (status === '1') return 'info'
if (status === '2') return 'primary' if (status === '2') return 'primary'
if (status === '3') return 'danger'
return 'info' return 'info'
} }

View File

@ -3,11 +3,11 @@
<div class="MainBox"> <div class="MainBox">
<div class="FormBox card-box"> <div class="FormBox card-box">
<el-form :model="queryData" inline ref="formRef"> <el-form :model="queryData" inline ref="formRef">
<el-form-item label="用户名" prop="username"> <el-form-item label="用户名" prop="userName">
<el-input v-model="queryData.username" placeholder="请输入用户名"></el-input> <el-input v-model="queryData.userName" placeholder="请输入用户名"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="时间范围" prop="timeRange"> <el-form-item label="时间范围" prop="timeRange">
<el-date-picker v-model="queryData.timeRange" type="daterange" value-format="yyyy-MM-dd" <el-date-picker v-model="queryData.timeRange" type="daterange" value-format="YYYY-MM-DD"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" /> range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -38,7 +38,7 @@
<el-table-column prop="operation" label="操作" width="100"> <el-table-column prop="operation" label="操作" width="100">
<template #default="scope"> <template #default="scope">
<div class="FlexBox"> <div class="FlexBox">
<el-button type="text" size="mini" @click="handleApprove(scope.row)">审批</el-button> <el-button type="text" size="mini" @click="openApproveDialog(scope.row)">审批</el-button>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -50,22 +50,42 @@
@current-change="handleCurrentChange" /> @current-change="handleCurrentChange" />
</div> </div>
</div> </div>
<el-dialog v-model="approveDialogVisible" title="用户审批" width="500px" :close-on-click-modal="false">
<el-form :model="approveForm" :rules="approveRules" ref="approveFormRef" label-width="100px">
<el-form-item label="审核状态" prop="auditStatus">
<el-radio-group v-model="approveForm.auditStatus">
<el-radio label="1">通过</el-radio>
<el-radio label="2">驳回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input v-model="approveForm.auditOpinion" type="textarea" :rows="4" placeholder="请输入审核意见" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="closeApproveDialog">取消</el-button>
<el-button type="primary" @click="submitApprove">确定</el-button>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import dayjs from "dayjs"; import dayjs from "dayjs";
import { ref, onBeforeMount } from "vue"; import { ref, onBeforeMount } from "vue";
import { ElMessage } from 'element-plus'
import { listUser, FetchUserReview } from "@/api/system/user"; import { listUser, FetchUserReview } from "@/api/system/user";
// //
const statusMap = { const statusMap = {
'0': '已生效', '0': '已生效',
'1': '已停用', '1': '已停用',
'2': '待审核', '2': '待审核',
'3': '已驳回',
} }
// //
const queryData = ref({ const queryData = ref({
username: "", userName: "",
timeRange: [], timeRange: [],
}); });
@ -85,6 +105,35 @@ const tableData = ref([]);
// //
const currentUser = ref(); const currentUser = ref();
//
const approveDialogVisible = ref(false);
const approveFormRef = ref();
const approveForm = ref({
auditStatus: '1',
auditOpinion: ''
});
//
const approveRules = ref({
auditStatus: [
{ required: true, message: '请选择审核状态', trigger: 'change' }
],
auditOpinion: [
{
required: true,
message: '驳回时审核意见为必填项',
trigger: 'blur',
validator: (rule, value, callback) => {
if (approveForm.value.auditStatus === '0' && !value) {
callback(new Error('驳回时审核意见为必填项'));
} else {
callback();
}
}
}
]
});
// //
const handleCurrentChange = (val) => { const handleCurrentChange = (val) => {
pageInfo.value.pageNum = val; pageInfo.value.pageNum = val;
@ -104,7 +153,7 @@ const handleSearch = () => {
// //
const handleReset = () => { const handleReset = () => {
queryData.value = { queryData.value = {
username: "", userName: "",
timeRange: [], timeRange: [],
}; };
pageInfo.value.pageNum = 1; pageInfo.value.pageNum = 1;
@ -113,8 +162,9 @@ const handleReset = () => {
// //
const getinit = async () => { const getinit = async () => {
console.log(queryData.value.timeRange,'时间范围');
let query = { let query = {
username: queryData.value.username, userName: queryData.value.userName,
startTime: queryData.value.timeRange[0] ? dayjs(queryData.value.timeRange[0]).format('YYYY-MM-DD') : '', startTime: queryData.value.timeRange[0] ? dayjs(queryData.value.timeRange[0]).format('YYYY-MM-DD') : '',
endTime: queryData.value.timeRange[1] ? dayjs(queryData.value.timeRange[1]).format('YYYY-MM-DD') : '', endTime: queryData.value.timeRange[1] ? dayjs(queryData.value.timeRange[1]).format('YYYY-MM-DD') : '',
pageNum: pageInfo.value.pageNum, pageNum: pageInfo.value.pageNum,
@ -131,19 +181,43 @@ const getinit = async () => {
}; };
// //
const handleApprove = async (row) => { const openApproveDialog = (row) => {
let params = { currentUser.value = row;
userId: row.userId, approveForm.value = {
status: row.status === 2 ? 0 : 2, auditStatus: '1',
auditOpinion: ''
}; };
approveDialogVisible.value = true;
}
//
const closeApproveDialog = () => {
approveDialogVisible.value = false;
currentUser.value = null;
getinit();
}
//
const submitApprove = async () => {
await approveFormRef.value.validate(async (valid) => {
if (valid) {
let params = {
userId: currentUser.value.userId,
auditStatus: approveForm.value.auditStatus,
auditOpinion: approveForm.value.auditOpinion,
status: approveForm.value.auditStatus === '1' ? 0 : 3
};
let res = await FetchUserReview(params); let res = await FetchUserReview(params);
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('操作成功'); ElMessage.success('操作成功');
getinit(); closeApproveDialog();
} else { } else {
ElMessage.error(res.msg || '操作失败'); ElMessage.error(res.msg || '操作失败');
} }
}
});
} }
</script> </script>

View File

@ -110,7 +110,7 @@ const dialogShow = ref(false); // 弹窗显示状态
// //
const tableData = ref([]); const tableData = ref([]);
const pageNum = ref(1); // const pageNum = ref(1); //
const pageSize = ref(5); // const pageSize = ref(10); //
const total = ref(20); // const total = ref(20); //