feat:添加admin相关接口
This commit is contained in:
@@ -0,0 +1,358 @@
|
||||
<template>
|
||||
<div class="admin-group-container">
|
||||
<!-- 操作栏 -->
|
||||
<el-card class="filter-container" shadow="never">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-input
|
||||
v-model="queryParams.key"
|
||||
placeholder="搜索关键词"
|
||||
clearable
|
||||
@clear="fetchGroupList"
|
||||
@keyup.enter="fetchGroupList"
|
||||
>
|
||||
<template #prefix>
|
||||
<el-icon><Search /></el-icon>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="16">
|
||||
<el-button type="primary" @click="handleAdd">
|
||||
<el-icon><Plus /></el-icon>新增管理员组
|
||||
</el-button>
|
||||
<el-button type="success" @click="fetchGroupList">
|
||||
<el-icon><Refresh /></el-icon>刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<!-- 管理员组列表 -->
|
||||
<el-card class="table-container" shadow="never">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="groupList"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column prop="id" label="组ID" width="100" />
|
||||
<el-table-column prop="name" label="组名称" min-width="200" />
|
||||
<el-table-column prop="note" label="备注" min-width="250" />
|
||||
<!-- <el-table-column prop="member_count" label="成员数量" width="120" /> -->
|
||||
<el-table-column prop="CreatedAt" label="创建时间" width="180" />
|
||||
<el-table-column label="操作" width="250" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="success" link @click="handleViewMembers(row)">查看成员</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
<el-pagination
|
||||
v-model:current-page="queryParams.page"
|
||||
v-model:page-size="queryParams.count"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
background
|
||||
class="pagination"
|
||||
/>
|
||||
</el-card>
|
||||
|
||||
<!-- 管理员组表单对话框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="dialogType === 'add' ? '新增管理员组' : '编辑管理员组'"
|
||||
width="600px"
|
||||
>
|
||||
<el-form
|
||||
ref="groupFormRef"
|
||||
:model="groupForm"
|
||||
:rules="groupRules"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="组名称" prop="name">
|
||||
<el-input v-model="groupForm.name" placeholder="请输入组名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="note">
|
||||
<el-input v-model="groupForm.note" type="textarea" :rows="4" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 成员列表对话框 -->
|
||||
<el-dialog
|
||||
v-model="memberDialogVisible"
|
||||
title="管理员组成员"
|
||||
width="900px"
|
||||
>
|
||||
<el-input
|
||||
v-model="memberParams.key"
|
||||
placeholder="搜索成员"
|
||||
clearable
|
||||
@clear="fetchMemberList"
|
||||
@keyup.enter="fetchMemberList"
|
||||
style="margin-bottom: 16px"
|
||||
>
|
||||
<template #prefix>
|
||||
<el-icon><Search /></el-icon>
|
||||
</template>
|
||||
</el-input>
|
||||
<el-table
|
||||
v-loading="memberLoading"
|
||||
:data="memberList"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column prop="UserId" label="用户ID" width="100" />
|
||||
<el-table-column prop="UserName" label="用户名" min-width="150" />
|
||||
<el-table-column prop="Email" label="邮箱" min-width="200" />
|
||||
<el-table-column prop="Phone" label="手机号" width="130" />
|
||||
<el-table-column label="性别" width="80">
|
||||
<template #default="{ row }">
|
||||
{{ row.Sex ? '男' : '女' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="Age" label="年龄" width="80" />
|
||||
<el-table-column prop="UserGroupId" label="用户组" width="120" />
|
||||
<el-table-column label="加入时间" width="180">
|
||||
<template #default="{ row }">
|
||||
{{ formatTime(row.CreatedAt) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination
|
||||
v-model:current-page="memberParams.page"
|
||||
v-model:page-size="memberParams.count"
|
||||
:page-sizes="[10, 20, 50]"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="memberTotal"
|
||||
@size-change="handleMemberSizeChange"
|
||||
@current-change="handleMemberCurrentChange"
|
||||
background
|
||||
class="pagination"
|
||||
/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { Plus, Refresh, Search } from '@element-plus/icons-vue'
|
||||
import {
|
||||
getAdminGroupList,
|
||||
getAdminGroupMemberList,
|
||||
addAdminGroup,
|
||||
updateAdminGroupInfo,
|
||||
deleteAdminGroup
|
||||
} from '@/api/admin/group'
|
||||
import { formatTime } from '@/utils/tool'
|
||||
|
||||
// 查询参数
|
||||
const queryParams = reactive({
|
||||
key: '',
|
||||
page: 1,
|
||||
count: 10
|
||||
})
|
||||
|
||||
// 成员查询参数
|
||||
const memberParams = reactive({
|
||||
key: '',
|
||||
group_id: '',
|
||||
page: 1,
|
||||
count: 10
|
||||
})
|
||||
|
||||
// 管理员组表单
|
||||
const groupForm = reactive({
|
||||
group_id: undefined,
|
||||
name: '',
|
||||
note: ''
|
||||
})
|
||||
|
||||
const groupRules = {
|
||||
name: [
|
||||
{ required: true, message: '请输入组名称', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
|
||||
// 状态数据
|
||||
const loading = ref(false)
|
||||
const memberLoading = ref(false)
|
||||
const groupList = ref([])
|
||||
const memberList = ref([])
|
||||
const total = ref(0)
|
||||
const memberTotal = ref(0)
|
||||
const dialogVisible = ref(false)
|
||||
const memberDialogVisible = ref(false)
|
||||
const dialogType = ref('add')
|
||||
const groupFormRef = ref(null)
|
||||
|
||||
// 获取管理员组列表
|
||||
const fetchGroupList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await getAdminGroupList(queryParams)
|
||||
if (res.data.code === 200) {
|
||||
let responseData = res.data.data.data || []
|
||||
responseData.forEach(item => {
|
||||
item.CreatedAt = formatTime(item.CreatedAt)
|
||||
})
|
||||
groupList.value = responseData
|
||||
total.value = res.data.data.total || 0
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('获取管理员组列表失败')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 获取成员列表
|
||||
const fetchMemberList = async () => {
|
||||
memberLoading.value = true
|
||||
try {
|
||||
const res = await getAdminGroupMemberList(memberParams)
|
||||
if (res.data.code === 200) {
|
||||
let responseData = res.data.data.data || []
|
||||
// 数据已经包含所有需要的字段,不需要额外处理
|
||||
memberList.value = responseData
|
||||
memberTotal.value = res.data.data.total || 0
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('获取成员列表失败')
|
||||
} finally {
|
||||
memberLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
const handleSizeChange = (size) => {
|
||||
queryParams.count = size
|
||||
fetchGroupList()
|
||||
}
|
||||
|
||||
const handleCurrentChange = (page) => {
|
||||
queryParams.page = page
|
||||
fetchGroupList()
|
||||
}
|
||||
|
||||
const handleMemberSizeChange = (size) => {
|
||||
memberParams.count = size
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
const handleMemberCurrentChange = (page) => {
|
||||
memberParams.page = page
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
// 新增管理员组
|
||||
const handleAdd = () => {
|
||||
dialogType.value = 'add'
|
||||
dialogVisible.value = true
|
||||
Object.assign(groupForm, {
|
||||
group_id: undefined,
|
||||
name: '',
|
||||
note: ''
|
||||
})
|
||||
groupFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 编辑管理员组
|
||||
const handleEdit = (row) => {
|
||||
console.log("编辑管理员组",row)
|
||||
dialogType.value = 'edit'
|
||||
dialogVisible.value = true
|
||||
Object.assign(groupForm, {
|
||||
group_id: row.id,
|
||||
name: row.name,
|
||||
note: row.note
|
||||
})
|
||||
}
|
||||
|
||||
// 查看成员
|
||||
const handleViewMembers = (row) => {
|
||||
memberParams.group_id = row.id
|
||||
memberParams.key = ''
|
||||
memberParams.page = 1
|
||||
memberDialogVisible.value = true
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
// 删除管理员组
|
||||
const handleDelete = (row) => {
|
||||
ElMessageBox.confirm(`确认删除管理员组 ${row.name} 吗?`, '警告', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
try {
|
||||
const res = await deleteAdminGroup({ group_id: row.id })
|
||||
if (res.data.code === 200) {
|
||||
ElMessage.success('删除成功')
|
||||
fetchGroupList()
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('删除失败')
|
||||
}
|
||||
}).catch(() => {})
|
||||
}
|
||||
|
||||
// 提交表单
|
||||
const submitForm = () => {
|
||||
groupFormRef.value?.validate(async (valid) => {
|
||||
if (valid) {
|
||||
try {
|
||||
let res
|
||||
if (dialogType.value === 'add') {
|
||||
res = await addAdminGroup(groupForm)
|
||||
} else {
|
||||
res = await updateAdminGroupInfo(groupForm)
|
||||
}
|
||||
if (res.data.code === 200) {
|
||||
ElMessage.success(dialogType.value === 'add' ? '新增成功' : '修改成功')
|
||||
dialogVisible.value = false
|
||||
fetchGroupList()
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('操作失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
fetchGroupList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.admin-group-container {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.filter-container {
|
||||
margin-bottom: 20px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.table-container {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
margin-top: 24px;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,632 @@
|
||||
<template>
|
||||
<div class="user-group-container">
|
||||
<!-- 操作栏 -->
|
||||
<el-card class="filter-container" shadow="never">
|
||||
<el-button type="primary" @click="handleAdd">
|
||||
<el-icon><Plus /></el-icon>新增用户组
|
||||
</el-button>
|
||||
<el-button type="success" @click="fetchGroupList">
|
||||
<el-icon><Refresh /></el-icon>刷新
|
||||
</el-button>
|
||||
</el-card>
|
||||
|
||||
<!-- 用户组列表 -->
|
||||
<el-card class="table-container" shadow="never">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="groupList"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column label="组ID" width="100">
|
||||
<template #default="{ row }">
|
||||
{{ row.group_id || row.GroupId || row.id || row.Id }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="组名称" min-width="200">
|
||||
<template #default="{ row }">
|
||||
{{ row.group_name || row.name || row.Name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="权限" min-width="200" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<el-tag type="info">{{ row.auth || row.Auth || '-' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="升级金额" width="120">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.floor_price || row.FloorPrice">¥{{ row.floor_price || row.FloorPrice }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下一级组ID" width="120">
|
||||
<template #default="{ row }">
|
||||
{{ row.higher_level_id || row.HigherLevelId || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="(row.fixed || row.Fixed) ? 'warning' : 'success'" size="small">
|
||||
{{ (row.fixed || row.Fixed) ? '固定' : '可升级' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成员数量" width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.member_count || row.MemberCount || 0 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" width="160" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
{{ row.create_time || row.CreateTime || row.CreatedAt || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="280" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="success" link @click="handleViewMembers(row)">查看成员</el-button>
|
||||
<!-- <el-button type="warning" link @click="handleAddMember(row)">添加成员</el-button> -->
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
<el-pagination
|
||||
v-model:current-page="queryParams.page"
|
||||
v-model:page-size="queryParams.count"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
background
|
||||
class="pagination"
|
||||
/>
|
||||
</el-card>
|
||||
|
||||
<!-- 用户组表单对话框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="dialogType === 'add' ? '新增用户组' : '编辑用户组'"
|
||||
width="650px"
|
||||
destroy-on-close
|
||||
>
|
||||
<el-form
|
||||
ref="groupFormRef"
|
||||
:model="groupForm"
|
||||
:rules="groupRules"
|
||||
label-width="140px"
|
||||
>
|
||||
<el-form-item v-if="dialogType === 'edit'" label="组ID">
|
||||
<el-input v-model="groupForm.group_id" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="组名称" prop="name">
|
||||
<el-input v-model="groupForm.name" placeholder="请输入组名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="权限" prop="auth">
|
||||
<el-input v-model="groupForm.auth" type="textarea" :rows="4" placeholder="请输入权限配置(JSON格式)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下一级用户组ID">
|
||||
<el-input-number
|
||||
v-model="groupForm.higher_level_id"
|
||||
:min="0"
|
||||
placeholder="请输入下一级用户组ID"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="升级所需消费金额">
|
||||
<el-input-number
|
||||
v-model="groupForm.floor_price"
|
||||
:min="0"
|
||||
:precision="2"
|
||||
placeholder="请输入升级所需消费金额"
|
||||
style="width: 100%"
|
||||
>
|
||||
<template #prepend>¥</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否为固定用户组">
|
||||
<el-switch
|
||||
v-model="groupForm.fixed"
|
||||
active-text="固定(不可升级)"
|
||||
inactive-text="可升级"
|
||||
/>
|
||||
<div style="color: #909399; font-size: 12px; margin-top: 4px;">
|
||||
固定用户组不能通过消费金额自动升级
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 成员列表对话框 -->
|
||||
<el-dialog
|
||||
v-model="memberDialogVisible"
|
||||
title="用户组成员"
|
||||
width="800px"
|
||||
>
|
||||
<el-table
|
||||
v-loading="memberLoading"
|
||||
:data="memberList"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column label="用户ID" width="100">
|
||||
<template #default="{ row }">
|
||||
{{ row.user_id || row.UserId || row.id || row.Id }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="用户名" min-width="150">
|
||||
<template #default="{ row }">
|
||||
{{ row.username || row.Username || row.UserName || row.name || row.Name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="邮箱" min-width="200">
|
||||
<template #default="{ row }">
|
||||
{{ row.email || row.Email || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="加入时间" width="180">
|
||||
<template #default="{ row }">
|
||||
{{ row.join_time || row.JoinTime || row.CreatedAt || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination
|
||||
v-model:current-page="memberParams.page"
|
||||
v-model:page-size="memberParams.count"
|
||||
:page-sizes="[10, 20, 50]"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="memberTotal"
|
||||
@size-change="handleMemberSizeChange"
|
||||
@current-change="handleMemberCurrentChange"
|
||||
background
|
||||
class="pagination"
|
||||
/>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 添加成员对话框 -->
|
||||
<el-dialog
|
||||
v-model="addMemberDialogVisible"
|
||||
title="添加用户组成员"
|
||||
width="500px"
|
||||
>
|
||||
<el-form
|
||||
ref="memberFormRef"
|
||||
:model="memberForm"
|
||||
:rules="memberRules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item label="用户ID" prop="user_ids">
|
||||
<el-input v-model="memberForm.user_ids" placeholder="请输入用户ID,多个用逗号分隔" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="addMemberDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitAddMember">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { Plus, Refresh } from '@element-plus/icons-vue'
|
||||
import {
|
||||
getUserGroupList,
|
||||
getUserGroupMemberList,
|
||||
createUserGroup,
|
||||
updateUserGroupInfo,
|
||||
deleteUserGroup,
|
||||
addUserGroupMember
|
||||
} from '@/api/admin/user'
|
||||
import { formatTime } from '@/utils/tool'
|
||||
|
||||
// 查询参数
|
||||
const queryParams = reactive({
|
||||
page: 1,
|
||||
count: 10
|
||||
})
|
||||
|
||||
// 成员查询参数
|
||||
const memberParams = reactive({
|
||||
group_id: '',
|
||||
page: 1,
|
||||
count: 10
|
||||
})
|
||||
|
||||
// 用户组表单
|
||||
const groupForm = reactive({
|
||||
group_id: undefined,
|
||||
name: '',
|
||||
auth: '',
|
||||
higher_level_id: undefined,
|
||||
floor_price: undefined,
|
||||
fixed: false
|
||||
})
|
||||
|
||||
const groupRules = {
|
||||
name: [
|
||||
{ required: true, message: '请输入组名称', trigger: 'blur' }
|
||||
],
|
||||
auth: [
|
||||
{ required: true, message: '请输入权限', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
|
||||
// 成员表单
|
||||
const memberForm = reactive({
|
||||
group_id: '',
|
||||
user_ids: ''
|
||||
})
|
||||
|
||||
const memberRules = {
|
||||
user_ids: [
|
||||
{ required: true, message: '请输入用户ID', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
|
||||
// 状态数据
|
||||
const loading = ref(false)
|
||||
const memberLoading = ref(false)
|
||||
const groupList = ref([])
|
||||
const memberList = ref([])
|
||||
const total = ref(0)
|
||||
const memberTotal = ref(0)
|
||||
const dialogVisible = ref(false)
|
||||
const memberDialogVisible = ref(false)
|
||||
const addMemberDialogVisible = ref(false)
|
||||
const dialogType = ref('add')
|
||||
const groupFormRef = ref(null)
|
||||
const memberFormRef = ref(null)
|
||||
|
||||
// 获取用户组列表
|
||||
const fetchGroupList = async () => {
|
||||
console.log('=== 获取用户组列表 ===')
|
||||
console.log('请求参数:', queryParams)
|
||||
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await getUserGroupList(queryParams)
|
||||
console.log('用户组列表响应:', res)
|
||||
console.log('响应状态码:', res.data?.code || res.code)
|
||||
console.log('响应数据:', res.data?.data || res.data)
|
||||
|
||||
const code = res.data?.code || res.code
|
||||
if (code === 200) {
|
||||
let responseData = res.data?.data || res.data
|
||||
responseData.data.forEach(item => {
|
||||
item.CreatedAt = formatTime(item.CreatedAt)
|
||||
})
|
||||
|
||||
// 处理不同的数据结构
|
||||
if (Array.isArray(responseData)) {
|
||||
groupList.value = responseData
|
||||
total.value = responseData.length
|
||||
} else if (responseData.list) {
|
||||
groupList.value = responseData.list || []
|
||||
total.value = responseData.total || responseData.all_count || 0
|
||||
} else if (responseData.data && Array.isArray(responseData.data)) {
|
||||
groupList.value = responseData.data
|
||||
total.value = responseData.all_count || responseData.data.length
|
||||
} else {
|
||||
groupList.value = []
|
||||
total.value = 0
|
||||
}
|
||||
|
||||
console.log('用户组列表数据:', groupList.value)
|
||||
console.log('总数:', total.value)
|
||||
|
||||
if (groupList.value.length > 0) {
|
||||
console.log('第一个用户组示例:', groupList.value[0])
|
||||
}
|
||||
} else {
|
||||
console.error('获取用户组列表失败:', res.data)
|
||||
ElMessage.error(res.data?.message || '获取用户组列表失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取用户组列表错误:', error)
|
||||
console.error('错误详情:', error.response || error.message)
|
||||
ElMessage.error('获取用户组列表失败')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 获取成员列表
|
||||
const fetchMemberList = async () => {
|
||||
console.log('=== 获取用户组成员列表 ===')
|
||||
console.log('请求参数:', memberParams)
|
||||
|
||||
memberLoading.value = true
|
||||
try {
|
||||
const res = await getUserGroupMemberList(memberParams)
|
||||
console.log('成员列表响应:', res)
|
||||
console.log('响应状态码:', res.data?.code || res.code)
|
||||
console.log('响应数据:', res.data?.data || res.data)
|
||||
|
||||
const code = res.data?.code || res.code
|
||||
if (code === 200) {
|
||||
const responseData = res.data?.data || res.data
|
||||
|
||||
// 处理不同的数据结构
|
||||
if (Array.isArray(responseData)) {
|
||||
memberList.value = responseData
|
||||
memberTotal.value = responseData.length
|
||||
} else if (responseData.list) {
|
||||
memberList.value = responseData.list || []
|
||||
memberTotal.value = responseData.total || responseData.all_count || 0
|
||||
} else if (responseData.data && Array.isArray(responseData.data)) {
|
||||
memberList.value = responseData.data
|
||||
memberTotal.value = responseData.all_count || responseData.data.length
|
||||
} else {
|
||||
memberList.value = []
|
||||
memberTotal.value = 0
|
||||
}
|
||||
|
||||
console.log('成员列表数据:', memberList.value)
|
||||
console.log('成员总数:', memberTotal.value)
|
||||
|
||||
if (memberList.value.length > 0) {
|
||||
console.log('第一个成员示例:', memberList.value[0])
|
||||
}
|
||||
} else {
|
||||
console.error('获取成员列表失败:', res.data)
|
||||
ElMessage.error(res.data?.message || '获取成员列表失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取成员列表错误:', error)
|
||||
console.error('错误详情:', error.response || error.message)
|
||||
ElMessage.error('获取成员列表失败')
|
||||
} finally {
|
||||
memberLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 分页
|
||||
const handleSizeChange = (size) => {
|
||||
queryParams.count = size
|
||||
fetchGroupList()
|
||||
}
|
||||
|
||||
const handleCurrentChange = (page) => {
|
||||
queryParams.page = page
|
||||
fetchGroupList()
|
||||
}
|
||||
|
||||
const handleMemberSizeChange = (size) => {
|
||||
memberParams.count = size
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
const handleMemberCurrentChange = (page) => {
|
||||
memberParams.page = page
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
// 新增用户组
|
||||
const handleAdd = () => {
|
||||
console.log('=== 打开新增用户组对话框 ===')
|
||||
dialogType.value = 'add'
|
||||
dialogVisible.value = true
|
||||
Object.assign(groupForm, {
|
||||
group_id: undefined,
|
||||
name: '',
|
||||
auth: '',
|
||||
higher_level_id: undefined,
|
||||
floor_price: undefined,
|
||||
fixed: false
|
||||
})
|
||||
groupFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 编辑用户组
|
||||
const handleEdit = (row) => {
|
||||
console.log('=== 打开编辑用户组对话框 ===')
|
||||
console.log('用户组数据:', row)
|
||||
|
||||
dialogType.value = 'edit'
|
||||
dialogVisible.value = true
|
||||
|
||||
// 适配不同的字段名
|
||||
const groupId = row.group_id || row.GroupId || row.id || row.Id
|
||||
const groupName = row.group_name || row.name || row.Name
|
||||
const groupAuth = row.auth || row.Auth || ''
|
||||
const higherLevelId = row.higher_level_id || row.HigherLevelId
|
||||
const floorPrice = row.floor_price || row.FloorPrice
|
||||
const fixed = row.fixed || row.Fixed || false
|
||||
|
||||
Object.assign(groupForm, {
|
||||
group_id: groupId,
|
||||
name: groupName,
|
||||
auth: typeof groupAuth === 'object' ? JSON.stringify(groupAuth, null, 2) : groupAuth,
|
||||
higher_level_id: higherLevelId,
|
||||
floor_price: floorPrice,
|
||||
fixed: fixed
|
||||
})
|
||||
|
||||
console.log('表单数据:', groupForm)
|
||||
}
|
||||
|
||||
// 查看成员
|
||||
const handleViewMembers = (row) => {
|
||||
// 适配不同的字段名
|
||||
const groupId = row.group_id || row.GroupId || row.id || row.Id
|
||||
|
||||
console.log('=== 查看用户组成员 ===')
|
||||
console.log('用户组数据:', row)
|
||||
console.log('组ID:', groupId)
|
||||
|
||||
memberParams.group_id = groupId
|
||||
memberParams.page = 1
|
||||
memberDialogVisible.value = true
|
||||
fetchMemberList()
|
||||
}
|
||||
|
||||
// 添加成员
|
||||
const handleAddMember = (row) => {
|
||||
// 适配不同的字段名
|
||||
const groupId = row.group_id || row.GroupId || row.id || row.Id
|
||||
|
||||
console.log('=== 打开添加成员对话框 ===')
|
||||
console.log('用户组数据:', row)
|
||||
console.log('组ID:', groupId)
|
||||
|
||||
memberForm.group_id = groupId
|
||||
memberForm.user_ids = ''
|
||||
addMemberDialogVisible.value = true
|
||||
}
|
||||
|
||||
// 删除用户组
|
||||
const handleDelete = (row) => {
|
||||
// 适配不同的字段名
|
||||
const groupId = row.group_id || row.GroupId || row.id || row.Id
|
||||
const groupName = row.group_name || row.name || row.Name
|
||||
|
||||
console.log('=== 删除用户组 ===')
|
||||
console.log('用户组数据:', row)
|
||||
console.log('组ID:', groupId)
|
||||
console.log('组名称:', groupName)
|
||||
|
||||
ElMessageBox.confirm(`确认删除用户组 ${groupName} 吗?`, '警告', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
try {
|
||||
const res = await deleteUserGroup({ group_id: groupId })
|
||||
console.log('删除响应:', res)
|
||||
console.log('响应状态码:', res.data?.code || res.code)
|
||||
|
||||
const code = res.data?.code || res.code
|
||||
if (code === 200) {
|
||||
ElMessage.success('删除成功')
|
||||
fetchGroupList()
|
||||
} else {
|
||||
console.error('删除失败:', res.data)
|
||||
ElMessage.error(res.data?.message || '删除失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('删除错误:', error)
|
||||
console.error('错误详情:', error.response || error.message)
|
||||
ElMessage.error('删除失败')
|
||||
}
|
||||
}).catch(() => {})
|
||||
}
|
||||
|
||||
// 提交用户组表单
|
||||
const submitForm = () => {
|
||||
groupFormRef.value?.validate(async (valid) => {
|
||||
if (valid) {
|
||||
console.log('=== 提交用户组表单 ===')
|
||||
console.log('操作类型:', dialogType.value)
|
||||
console.log('表单数据:', groupForm)
|
||||
|
||||
try {
|
||||
let res
|
||||
const submitData = {
|
||||
name: groupForm.name,
|
||||
auth: groupForm.auth
|
||||
}
|
||||
|
||||
// 添加可选字段(如果有值才添加)
|
||||
if (groupForm.higher_level_id !== undefined && groupForm.higher_level_id !== null) {
|
||||
submitData.higher_level_id = groupForm.higher_level_id
|
||||
}
|
||||
if (groupForm.floor_price !== undefined && groupForm.floor_price !== null) {
|
||||
submitData.floor_price = groupForm.floor_price
|
||||
}
|
||||
// fixed 字段总是传递(boolean 值)
|
||||
submitData.fixed = groupForm.fixed
|
||||
|
||||
if (dialogType.value === 'add') {
|
||||
console.log('新增用户组,提交数据:', submitData)
|
||||
res = await createUserGroup(submitData)
|
||||
} else {
|
||||
submitData.group_id = groupForm.group_id
|
||||
console.log('更新用户组,提交数据:', submitData)
|
||||
res = await updateUserGroupInfo(submitData)
|
||||
}
|
||||
|
||||
console.log('提交响应:', res)
|
||||
console.log('响应状态码:', res.data?.code || res.code)
|
||||
|
||||
const code = res.data?.code || res.code
|
||||
if (code === 200) {
|
||||
ElMessage.success(dialogType.value === 'add' ? '新增成功' : '修改成功')
|
||||
dialogVisible.value = false
|
||||
fetchGroupList()
|
||||
} else {
|
||||
console.error('操作失败:', res.data)
|
||||
ElMessage.error(res.data?.message || '操作失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('提交失败:', error)
|
||||
console.error('错误详情:', error.response || error.message)
|
||||
ElMessage.error('操作失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 提交添加成员
|
||||
const submitAddMember = () => {
|
||||
memberFormRef.value?.validate(async (valid) => {
|
||||
if (valid) {
|
||||
console.log('=== 提交添加成员 ===')
|
||||
console.log('表单数据:', memberForm)
|
||||
|
||||
try {
|
||||
const res = await addUserGroupMember(memberForm)
|
||||
console.log('添加成员响应:', res)
|
||||
console.log('响应状态码:', res.data?.code || res.code)
|
||||
|
||||
const code = res.data?.code || res.code
|
||||
if (code === 200) {
|
||||
ElMessage.success('添加成功')
|
||||
addMemberDialogVisible.value = false
|
||||
fetchGroupList()
|
||||
} else {
|
||||
console.error('添加失败:', res.data)
|
||||
ElMessage.error(res.data?.message || '添加失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('添加错误:', error)
|
||||
console.error('错误详情:', error.response || error.message)
|
||||
ElMessage.error('添加失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
console.log('=== 用户组管理页面初始化 ===')
|
||||
fetchGroupList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.user-group-container {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.filter-container {
|
||||
margin-bottom: 20px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.table-container {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
margin-top: 24px;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user