管理员管理增加操作日志查看,对接 /houtai/hqczrz。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -67,11 +67,19 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="jilushuliang" label="操作记录" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="openLogDialog(row)">
|
||||
{{ row.jilushuliang ?? 0 }} 条
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" label="创建时间" width="160" />
|
||||
<el-table-column prop="update_time" label="更新时间" width="160" />
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<el-table-column label="操作" width="180" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="openDetailDialog(row)">详情</el-button>
|
||||
<el-button type="warning" link @click="openLogDialog(row)">操作日志</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -205,7 +213,12 @@
|
||||
<div class="dialog-content">
|
||||
<el-form :model="newUserForm" label-width="100px" ref="addUserFormRef">
|
||||
<el-form-item label="账号" required>
|
||||
<el-input v-model="newUserForm.phone" placeholder="手机号" />
|
||||
<el-input
|
||||
v-model="newUserForm.phone"
|
||||
placeholder="11位手机号"
|
||||
maxlength="11"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" required>
|
||||
<el-input
|
||||
@@ -248,6 +261,57 @@
|
||||
<el-button type="primary" @click="confirmAddUser">确认添加</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 操作日志弹窗 -->
|
||||
<el-dialog
|
||||
v-model="logDialogVisible"
|
||||
:title="`操作日志 - ${logTargetUser?.nicheng || ''}(${logTargetUser?.phone || ''})`"
|
||||
width="920px"
|
||||
class="user-dialog log-dialog"
|
||||
destroy-on-close
|
||||
>
|
||||
<div class="log-filters">
|
||||
<el-select v-model="logFilters.leixing" placeholder="用户类型" clearable style="width: 140px" @change="fetchLogList(1)">
|
||||
<el-option label="全部类型" value="" />
|
||||
<el-option label="打手" :value="2" />
|
||||
<el-option label="管事" :value="3" />
|
||||
<el-option label="商家" :value="4" />
|
||||
<el-option label="组长" :value="5" />
|
||||
<el-option label="后台账号" :value="9" />
|
||||
<el-option label="系统配置" :value="0" />
|
||||
</el-select>
|
||||
<el-input
|
||||
v-model="logFilters.yonghuid"
|
||||
placeholder="被操作用户ID"
|
||||
clearable
|
||||
style="width: 160px"
|
||||
@keyup.enter="fetchLogList(1)"
|
||||
/>
|
||||
<el-button type="primary" @click="fetchLogList(1)">搜索</el-button>
|
||||
</div>
|
||||
<el-table :data="logList" v-loading="logLoading" border class="user-table" max-height="480">
|
||||
<el-table-column prop="create_time" label="时间" width="170" />
|
||||
<el-table-column prop="leixing_name" label="类型" width="90" />
|
||||
<el-table-column prop="beixiugai_yonghuid" label="被操作用户" width="110" />
|
||||
<el-table-column label="资金/数值变动" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<div class="log-change">{{ formatLogChange(row) }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qitashuoming" label="操作说明" min-width="240" show-overflow-tooltip />
|
||||
</el-table>
|
||||
<div class="pagination">
|
||||
<el-pagination
|
||||
v-model:current-page="logPage"
|
||||
v-model:page-size="logPageSize"
|
||||
:page-sizes="[10, 20, 50]"
|
||||
:total="logTotal"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@size-change="fetchLogList()"
|
||||
@current-change="fetchLogList()"
|
||||
/>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -308,6 +372,91 @@ const newUserForm = ref({
|
||||
})
|
||||
const newUserRoleCodes = ref([])
|
||||
|
||||
// 操作日志
|
||||
const logDialogVisible = ref(false)
|
||||
const logTargetUser = ref(null)
|
||||
const logList = ref([])
|
||||
const logLoading = ref(false)
|
||||
const logPage = ref(1)
|
||||
const logPageSize = ref(20)
|
||||
const logTotal = ref(0)
|
||||
const logFilters = ref({
|
||||
leixing: '',
|
||||
yonghuid: ''
|
||||
})
|
||||
|
||||
const _changed = (before, after) => {
|
||||
const b = Number(before)
|
||||
const a = Number(after)
|
||||
if (Number.isNaN(b) || Number.isNaN(a)) return false
|
||||
return b !== a
|
||||
}
|
||||
|
||||
const formatLogChange = (row) => {
|
||||
const parts = []
|
||||
if (_changed(row.dashou_yue_qian, row.dashou_yue_hou)) {
|
||||
parts.push(`打手余额 ${row.dashou_yue_qian} → ${row.dashou_yue_hou}`)
|
||||
}
|
||||
if (_changed(row.dashou_jifen_qian, row.dashou_jifen_hou)) {
|
||||
parts.push(`积分 ${row.dashou_jifen_qian} → ${row.dashou_jifen_hou}`)
|
||||
}
|
||||
if (_changed(row.dashou_yajin_qian, row.dashou_yajin_hou)) {
|
||||
parts.push(`押金 ${row.dashou_yajin_qian} → ${row.dashou_yajin_hou}`)
|
||||
}
|
||||
if (_changed(row.shangjia_yue_qian, row.shangjia_yue_hou)) {
|
||||
parts.push(`商家余额 ${row.shangjia_yue_qian} → ${row.shangjia_yue_hou}`)
|
||||
}
|
||||
if (_changed(row.guanshi_yue_qian, row.guanshi_yue_hou)) {
|
||||
parts.push(`管事余额 ${row.guanshi_yue_qian} → ${row.guanshi_yue_hou}`)
|
||||
}
|
||||
if (_changed(row.zuzhang_yue_qian, row.zuzhang_yue_hou)) {
|
||||
parts.push(`组长可提现 ${row.zuzhang_yue_qian} → ${row.zuzhang_yue_hou}`)
|
||||
}
|
||||
if (row.huiyuants) {
|
||||
parts.push(`会员天数 ${row.huiyuants}${row.huiyuan_id ? `(${row.huiyuan_id})` : ''}`)
|
||||
}
|
||||
return parts.length ? parts.join('\n') : '—'
|
||||
}
|
||||
|
||||
const openLogDialog = (user) => {
|
||||
logTargetUser.value = user
|
||||
logFilters.value = { leixing: '', yonghuid: '' }
|
||||
logPage.value = 1
|
||||
logDialogVisible.value = true
|
||||
fetchLogList(1)
|
||||
}
|
||||
|
||||
const fetchLogList = async (pageOverride) => {
|
||||
if (!logTargetUser.value?.phone) return
|
||||
if (pageOverride) logPage.value = pageOverride
|
||||
logLoading.value = true
|
||||
try {
|
||||
const payload = {
|
||||
username,
|
||||
phone: logTargetUser.value.phone,
|
||||
page: logPage.value,
|
||||
pageSize: logPageSize.value
|
||||
}
|
||||
if (logFilters.value.leixing !== '' && logFilters.value.leixing !== null && logFilters.value.leixing !== undefined) {
|
||||
payload.leixing = logFilters.value.leixing
|
||||
}
|
||||
if (logFilters.value.yonghuid) {
|
||||
payload.yonghuid = String(logFilters.value.yonghuid).trim()
|
||||
}
|
||||
const res = await request.post('/houtai/hqczrz', payload)
|
||||
if (res.code === 0) {
|
||||
logList.value = res.data.list || []
|
||||
logTotal.value = res.data.total || 0
|
||||
} else {
|
||||
ElMessage.error(res.msg || '获取操作日志失败')
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('网络错误')
|
||||
} finally {
|
||||
logLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== 接口调用 ====================
|
||||
// 获取角色列表(第一个接口)
|
||||
const fetchRoleList = async () => {
|
||||
@@ -481,6 +630,10 @@ const confirmAddUser = async () => {
|
||||
ElMessage.warning('请填写完整信息')
|
||||
return
|
||||
}
|
||||
if (String(newUserForm.value.phone).trim().length > 11) {
|
||||
ElMessage.warning('账号最长11位,请使用手机号')
|
||||
return
|
||||
}
|
||||
if (newUserForm.value.password.length < 6 || newUserForm.value.erjimima.length < 6) {
|
||||
ElMessage.warning('密码和二级密码至少6位')
|
||||
return
|
||||
@@ -680,4 +833,19 @@ onMounted(async () => {
|
||||
color: rgba(255,255,255,0.5);
|
||||
margin-top: 4px;
|
||||
}
|
||||
.log-filters {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.log-change {
|
||||
font-size: 13px;
|
||||
line-height: 1.5;
|
||||
color: #a8e6ff;
|
||||
white-space: pre-line;
|
||||
}
|
||||
:deep(.log-dialog .el-dialog__body) {
|
||||
padding-top: 10px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user