91 changed files with 1795 additions and 68 deletions
@ -0,0 +1,8 @@ |
|||
# 默认忽略的文件 |
|||
/shelf/ |
|||
/workspace.xml |
|||
# 基于编辑器的 HTTP 客户端请求 |
|||
/httpRequests/ |
|||
# Datasource local storage ignored files |
|||
/dataSources/ |
|||
/dataSources.local.xml |
|||
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module type="JAVA_MODULE" version="4"> |
|||
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$" /> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
|||
@ -0,0 +1,6 @@ |
|||
<component name="InspectionProjectProfileManager"> |
|||
<profile version="1.0"> |
|||
<option name="myName" value="Project Default" /> |
|||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> |
|||
</profile> |
|||
</component> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectRootManager"> |
|||
<output url="file://$PROJECT_DIR$/out" /> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectModuleManager"> |
|||
<modules> |
|||
<module fileurl="file://$PROJECT_DIR$/.idea/admin.iml" filepath="$PROJECT_DIR$/.idea/admin.iml" /> |
|||
</modules> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="PrettierConfiguration"> |
|||
<option name="myConfigurationMode" value="AUTOMATIC" /> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="VcsDirectoryMappings"> |
|||
<mapping directory="" vcs="Git" /> |
|||
</component> |
|||
</project> |
|||
@ -0,0 +1,63 @@ |
|||
import request from '@/utils/request'; |
|||
import { AxiosPromise } from 'axios'; |
|||
import { UserGroupVO, UserGroupForm, UserGroupQuery } from '@/api/im/userGroup/types'; |
|||
|
|||
/** |
|||
* 查询用户分组列表 |
|||
* @param query |
|||
* @returns {*} |
|||
*/ |
|||
|
|||
export const listUserGroup = (query?: UserGroupQuery): AxiosPromise<UserGroupVO[]> => { |
|||
return request({ |
|||
url: '/im/userGroup/list', |
|||
method: 'get', |
|||
params: query |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 查询用户分组详细 |
|||
* @param id |
|||
*/ |
|||
export const getUserGroup = (id: string | number): AxiosPromise<UserGroupVO> => { |
|||
return request({ |
|||
url: '/im/userGroup/' + id, |
|||
method: 'get' |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* @param data |
|||
*/ |
|||
export const addUserGroup = (data: UserGroupForm) => { |
|||
return request({ |
|||
url: '/im/userGroup', |
|||
method: 'post', |
|||
data: data |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* @param data |
|||
*/ |
|||
export const updateUserGroup = (data: UserGroupForm) => { |
|||
return request({ |
|||
url: '/im/userGroup', |
|||
method: 'put', |
|||
data: data |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 删除用户分组 |
|||
* @param id |
|||
*/ |
|||
export const delUserGroup = (id: string | number | Array<string | number>) => { |
|||
return request({ |
|||
url: '/im/userGroup/' + id, |
|||
method: 'delete' |
|||
}); |
|||
}; |
|||
@ -0,0 +1,66 @@ |
|||
export interface UserGroupVO { |
|||
/** |
|||
* id |
|||
*/ |
|||
id: string | number; |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
groupName: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort: number; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
remark: string; |
|||
|
|||
} |
|||
|
|||
export interface UserGroupForm extends BaseEntity { |
|||
/** |
|||
* id |
|||
*/ |
|||
id?: string | number; |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
groupName?: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort?: number; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
remark?: string; |
|||
|
|||
} |
|||
|
|||
export interface UserGroupQuery extends PageQuery { |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
groupName?: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort?: number; |
|||
|
|||
/** |
|||
* 日期范围参数 |
|||
*/ |
|||
params?: any; |
|||
} |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,63 @@ |
|||
import request from '@/utils/request'; |
|||
import { AxiosPromise } from 'axios'; |
|||
import { UserLableVO, UserLableForm, UserLableQuery } from '@/api/im/userLable/types'; |
|||
|
|||
/** |
|||
* 查询用户分组列表 |
|||
* @param query |
|||
* @returns {*} |
|||
*/ |
|||
|
|||
export const listUserLable = (query?: UserLableQuery): AxiosPromise<UserLableVO[]> => { |
|||
return request({ |
|||
url: '/im/userLable/list', |
|||
method: 'get', |
|||
params: query |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 查询用户分组详细 |
|||
* @param id |
|||
*/ |
|||
export const getUserLable = (id: string | number): AxiosPromise<UserLableVO> => { |
|||
return request({ |
|||
url: '/im/userLable/' + id, |
|||
method: 'get' |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* @param data |
|||
*/ |
|||
export const addUserLable = (data: UserLableForm) => { |
|||
return request({ |
|||
url: '/im/userLable', |
|||
method: 'post', |
|||
data: data |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* @param data |
|||
*/ |
|||
export const updateUserLable = (data: UserLableForm) => { |
|||
return request({ |
|||
url: '/im/userLable', |
|||
method: 'put', |
|||
data: data |
|||
}); |
|||
}; |
|||
|
|||
/** |
|||
* 删除用户分组 |
|||
* @param id |
|||
*/ |
|||
export const delUserLable = (id: string | number | Array<string | number>) => { |
|||
return request({ |
|||
url: '/im/userLable/' + id, |
|||
method: 'delete' |
|||
}); |
|||
}; |
|||
@ -0,0 +1,66 @@ |
|||
export interface UserLableVO { |
|||
/** |
|||
* id |
|||
*/ |
|||
id: string | number; |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
lableName: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort: number; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
remark: string; |
|||
|
|||
} |
|||
|
|||
export interface UserLableForm extends BaseEntity { |
|||
/** |
|||
* id |
|||
*/ |
|||
id?: string | number; |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
lableName?: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort?: number; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
remark?: string; |
|||
|
|||
} |
|||
|
|||
export interface UserLableQuery extends PageQuery { |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
lableName?: string; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
sort?: number; |
|||
|
|||
/** |
|||
* 日期范围参数 |
|||
*/ |
|||
params?: any; |
|||
} |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,234 @@ |
|||
<template> |
|||
<div class="p-2"> |
|||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> |
|||
<div v-show="showSearch" class="mb-[10px]"> |
|||
<el-card shadow="hover"> |
|||
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> |
|||
<el-form-item label="分组名称" prop="groupName"> |
|||
<el-input v-model="queryParams.groupName" placeholder="请输入分组名称" clearable @keyup.enter="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item label="排序" prop="sort"> |
|||
<el-input v-model="queryParams.sort" placeholder="请输入排序" clearable @keyup.enter="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="Refresh" @click="resetQuery">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
</div> |
|||
</transition> |
|||
|
|||
<el-card shadow="never"> |
|||
<template #header> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['im:userGroup:add']">新增</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['im:userGroup:edit']">修改</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['im:userGroup:remove']">删除</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['im:userGroup:export']">导出</el-button> |
|||
</el-col> |
|||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</template> |
|||
|
|||
<el-table v-loading="loading" :data="userGroupList" @selection-change="handleSelectionChange"> |
|||
<el-table-column type="selection" width="55" align="center" /> |
|||
<el-table-column label="id" align="center" prop="id" v-if="true" /> |
|||
<el-table-column label="分组名称" align="center" prop="groupName" /> |
|||
<el-table-column label="排序" align="center" prop="sort" /> |
|||
<el-table-column label="备注" align="center" prop="remark" /> |
|||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
|||
<template #default="scope"> |
|||
<el-tooltip content="修改" placement="top"> |
|||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['im:userGroup:edit']"></el-button> |
|||
</el-tooltip> |
|||
<el-tooltip content="删除" placement="top"> |
|||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['im:userGroup:remove']"></el-button> |
|||
</el-tooltip> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
|
|||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> |
|||
</el-card> |
|||
<!-- 添加或修改用户分组对话框 --> |
|||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> |
|||
<el-form ref="userGroupFormRef" :model="form" :rules="rules" label-width="80px"> |
|||
<el-form-item label="分组名称" prop="groupName"> |
|||
<el-input v-model="form.groupName" placeholder="请输入分组名称" /> |
|||
</el-form-item> |
|||
<el-form-item label="排序" prop="sort"> |
|||
<el-input v-model="form.sort" placeholder="请输入排序" /> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="form.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup name="UserGroup" lang="ts"> |
|||
import { listUserGroup, getUserGroup, delUserGroup, addUserGroup, updateUserGroup } from '@/api/im/userGroup'; |
|||
import { UserGroupVO, UserGroupQuery, UserGroupForm } from '@/api/im/userGroup/types'; |
|||
|
|||
const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
|||
|
|||
const userGroupList = ref<UserGroupVO[]>([]); |
|||
const buttonLoading = ref(false); |
|||
const loading = ref(true); |
|||
const showSearch = ref(true); |
|||
const ids = ref<Array<string | number>>([]); |
|||
const single = ref(true); |
|||
const multiple = ref(true); |
|||
const total = ref(0); |
|||
|
|||
const queryFormRef = ref<ElFormInstance>(); |
|||
const userGroupFormRef = ref<ElFormInstance>(); |
|||
|
|||
const dialog = reactive<DialogOption>({ |
|||
visible: false, |
|||
title: '' |
|||
}); |
|||
|
|||
const initFormData: UserGroupForm = { |
|||
id: undefined, |
|||
groupName: undefined, |
|||
sort: undefined, |
|||
remark: undefined |
|||
} |
|||
const data = reactive<PageData<UserGroupForm, UserGroupQuery>>({ |
|||
form: {...initFormData}, |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
groupName: undefined, |
|||
sort: undefined, |
|||
params: { |
|||
} |
|||
}, |
|||
rules: { |
|||
id: [ |
|||
{ required: true, message: "id不能为空", trigger: "blur" } |
|||
], |
|||
groupName: [ |
|||
{ required: true, message: "分组名称不能为空", trigger: "blur" } |
|||
], |
|||
sort: [ |
|||
{ required: true, message: "排序不能为空", trigger: "blur" } |
|||
], |
|||
remark: [ |
|||
{ required: true, message: "备注不能为空", trigger: "blur" } |
|||
] |
|||
} |
|||
}); |
|||
|
|||
const { queryParams, form, rules } = toRefs(data); |
|||
|
|||
/** 查询用户分组列表 */ |
|||
const getList = async () => { |
|||
loading.value = true; |
|||
const res = await listUserGroup(queryParams.value); |
|||
userGroupList.value = res.rows; |
|||
total.value = res.total; |
|||
loading.value = false; |
|||
} |
|||
|
|||
/** 取消按钮 */ |
|||
const cancel = () => { |
|||
reset(); |
|||
dialog.visible = false; |
|||
} |
|||
|
|||
/** 表单重置 */ |
|||
const reset = () => { |
|||
form.value = {...initFormData}; |
|||
userGroupFormRef.value?.resetFields(); |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.value.pageNum = 1; |
|||
getList(); |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value?.resetFields(); |
|||
handleQuery(); |
|||
} |
|||
|
|||
/** 多选框选中数据 */ |
|||
const handleSelectionChange = (selection: UserGroupVO[]) => { |
|||
ids.value = selection.map(item => item.id); |
|||
single.value = selection.length != 1; |
|||
multiple.value = !selection.length; |
|||
} |
|||
|
|||
/** 新增按钮操作 */ |
|||
const handleAdd = () => { |
|||
reset(); |
|||
dialog.visible = true; |
|||
dialog.title = "添加用户分组"; |
|||
} |
|||
|
|||
/** 修改按钮操作 */ |
|||
const handleUpdate = async (row?: UserGroupVO) => { |
|||
reset(); |
|||
const _id = row?.id || ids.value[0] |
|||
const res = await getUserGroup(_id); |
|||
Object.assign(form.value, res.data); |
|||
dialog.visible = true; |
|||
dialog.title = "修改用户分组"; |
|||
} |
|||
|
|||
/** 提交按钮 */ |
|||
const submitForm = () => { |
|||
userGroupFormRef.value?.validate(async (valid: boolean) => { |
|||
if (valid) { |
|||
buttonLoading.value = true; |
|||
if (form.value.id) { |
|||
await updateUserGroup(form.value).finally(() => buttonLoading.value = false); |
|||
} else { |
|||
await addUserGroup(form.value).finally(() => buttonLoading.value = false); |
|||
} |
|||
proxy?.$modal.msgSuccess("操作成功"); |
|||
dialog.visible = false; |
|||
await getList(); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (row?: UserGroupVO) => { |
|||
const _ids = row?.id || ids.value; |
|||
await proxy?.$modal.confirm('是否确认删除用户分组编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); |
|||
await delUserGroup(_ids); |
|||
proxy?.$modal.msgSuccess("删除成功"); |
|||
await getList(); |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = () => { |
|||
proxy?.download('im/userGroup/export', { |
|||
...queryParams.value |
|||
}, `userGroup_${new Date().getTime()}.xlsx`) |
|||
} |
|||
|
|||
onMounted(() => { |
|||
getList(); |
|||
}); |
|||
</script> |
|||
@ -0,0 +1,234 @@ |
|||
<template> |
|||
<div class="p-2"> |
|||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> |
|||
<div v-show="showSearch" class="mb-[10px]"> |
|||
<el-card shadow="hover"> |
|||
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> |
|||
<el-form-item label="标签名称" prop="lableName"> |
|||
<el-input v-model="queryParams.lableName" placeholder="请输入标签名称" clearable @keyup.enter="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item label="排序" prop="sort"> |
|||
<el-input v-model="queryParams.sort" placeholder="请输入排序" clearable @keyup.enter="handleQuery" /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
|||
<el-button icon="Refresh" @click="resetQuery">重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
</div> |
|||
</transition> |
|||
|
|||
<el-card shadow="never"> |
|||
<template #header> |
|||
<el-row :gutter="10" class="mb8"> |
|||
<el-col :span="1.5"> |
|||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['im:userLable:add']">新增</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['im:userLable:edit']">修改</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['im:userLable:remove']">删除</el-button> |
|||
</el-col> |
|||
<el-col :span="1.5"> |
|||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['im:userLable:export']">导出</el-button> |
|||
</el-col> |
|||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> |
|||
</el-row> |
|||
</template> |
|||
|
|||
<el-table v-loading="loading" :data="userLableList" @selection-change="handleSelectionChange"> |
|||
<el-table-column type="selection" width="55" align="center" /> |
|||
<el-table-column label="id" align="center" prop="id" v-if="true" /> |
|||
<el-table-column label="标签名称" align="center" prop="lableName" /> |
|||
<el-table-column label="排序" align="center" prop="sort" /> |
|||
<el-table-column label="备注" align="center" prop="remark" /> |
|||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
|||
<template #default="scope"> |
|||
<el-tooltip content="修改" placement="top"> |
|||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['im:userLable:edit']"></el-button> |
|||
</el-tooltip> |
|||
<el-tooltip content="删除" placement="top"> |
|||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['im:userLable:remove']"></el-button> |
|||
</el-tooltip> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
|
|||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> |
|||
</el-card> |
|||
<!-- 添加或修改用户分组对话框 --> |
|||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> |
|||
<el-form ref="userLableFormRef" :model="form" :rules="rules" label-width="80px"> |
|||
<el-form-item label="标签名称" prop="lableName"> |
|||
<el-input v-model="form.lableName" placeholder="请输入标签名称" /> |
|||
</el-form-item> |
|||
<el-form-item label="排序" prop="sort"> |
|||
<el-input v-model="form.sort" placeholder="请输入排序" /> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="form.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template #footer> |
|||
<div class="dialog-footer"> |
|||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup name="UserLable" lang="ts"> |
|||
import { listUserLable, getUserLable, delUserLable, addUserLable, updateUserLable } from '@/api/im/userLable'; |
|||
import { UserLableVO, UserLableQuery, UserLableForm } from '@/api/im/userLable/types'; |
|||
|
|||
const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
|||
|
|||
const userLableList = ref<UserLableVO[]>([]); |
|||
const buttonLoading = ref(false); |
|||
const loading = ref(true); |
|||
const showSearch = ref(true); |
|||
const ids = ref<Array<string | number>>([]); |
|||
const single = ref(true); |
|||
const multiple = ref(true); |
|||
const total = ref(0); |
|||
|
|||
const queryFormRef = ref<ElFormInstance>(); |
|||
const userLableFormRef = ref<ElFormInstance>(); |
|||
|
|||
const dialog = reactive<DialogOption>({ |
|||
visible: false, |
|||
title: '' |
|||
}); |
|||
|
|||
const initFormData: UserLableForm = { |
|||
id: undefined, |
|||
lableName: undefined, |
|||
sort: undefined, |
|||
remark: undefined |
|||
} |
|||
const data = reactive<PageData<UserLableForm, UserLableQuery>>({ |
|||
form: {...initFormData}, |
|||
queryParams: { |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
lableName: undefined, |
|||
sort: undefined, |
|||
params: { |
|||
} |
|||
}, |
|||
rules: { |
|||
id: [ |
|||
{ required: true, message: "id不能为空", trigger: "blur" } |
|||
], |
|||
lableName: [ |
|||
{ required: true, message: "标签名称不能为空", trigger: "blur" } |
|||
], |
|||
sort: [ |
|||
{ required: true, message: "排序不能为空", trigger: "blur" } |
|||
], |
|||
remark: [ |
|||
{ required: true, message: "备注不能为空", trigger: "blur" } |
|||
] |
|||
} |
|||
}); |
|||
|
|||
const { queryParams, form, rules } = toRefs(data); |
|||
|
|||
/** 查询用户分组列表 */ |
|||
const getList = async () => { |
|||
loading.value = true; |
|||
const res = await listUserLable(queryParams.value); |
|||
userLableList.value = res.rows; |
|||
total.value = res.total; |
|||
loading.value = false; |
|||
} |
|||
|
|||
/** 取消按钮 */ |
|||
const cancel = () => { |
|||
reset(); |
|||
dialog.visible = false; |
|||
} |
|||
|
|||
/** 表单重置 */ |
|||
const reset = () => { |
|||
form.value = {...initFormData}; |
|||
userLableFormRef.value?.resetFields(); |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.value.pageNum = 1; |
|||
getList(); |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value?.resetFields(); |
|||
handleQuery(); |
|||
} |
|||
|
|||
/** 多选框选中数据 */ |
|||
const handleSelectionChange = (selection: UserLableVO[]) => { |
|||
ids.value = selection.map(item => item.id); |
|||
single.value = selection.length != 1; |
|||
multiple.value = !selection.length; |
|||
} |
|||
|
|||
/** 新增按钮操作 */ |
|||
const handleAdd = () => { |
|||
reset(); |
|||
dialog.visible = true; |
|||
dialog.title = "添加用户分组"; |
|||
} |
|||
|
|||
/** 修改按钮操作 */ |
|||
const handleUpdate = async (row?: UserLableVO) => { |
|||
reset(); |
|||
const _id = row?.id || ids.value[0] |
|||
const res = await getUserLable(_id); |
|||
Object.assign(form.value, res.data); |
|||
dialog.visible = true; |
|||
dialog.title = "修改用户分组"; |
|||
} |
|||
|
|||
/** 提交按钮 */ |
|||
const submitForm = () => { |
|||
userLableFormRef.value?.validate(async (valid: boolean) => { |
|||
if (valid) { |
|||
buttonLoading.value = true; |
|||
if (form.value.id) { |
|||
await updateUserLable(form.value).finally(() => buttonLoading.value = false); |
|||
} else { |
|||
await addUserLable(form.value).finally(() => buttonLoading.value = false); |
|||
} |
|||
proxy?.$modal.msgSuccess("操作成功"); |
|||
dialog.visible = false; |
|||
await getList(); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (row?: UserLableVO) => { |
|||
const _ids = row?.id || ids.value; |
|||
await proxy?.$modal.confirm('是否确认删除用户分组编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); |
|||
await delUserLable(_ids); |
|||
proxy?.$modal.msgSuccess("删除成功"); |
|||
await getList(); |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = () => { |
|||
proxy?.download('im/userLable/export', { |
|||
...queryParams.value |
|||
}, `userLable_${new Date().getTime()}.xlsx`) |
|||
} |
|||
|
|||
onMounted(() => { |
|||
getList(); |
|||
}); |
|||
</script> |
|||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,105 @@ |
|||
package org.dromara.im.controller; |
|||
|
|||
import java.util.List; |
|||
|
|||
import lombok.RequiredArgsConstructor; |
|||
import jakarta.servlet.http.HttpServletResponse; |
|||
import jakarta.validation.constraints.*; |
|||
import cn.dev33.satoken.annotation.SaCheckPermission; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.dromara.common.idempotent.annotation.RepeatSubmit; |
|||
import org.dromara.common.log.annotation.Log; |
|||
import org.dromara.common.web.core.BaseController; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import org.dromara.common.core.domain.R; |
|||
import org.dromara.common.core.validate.AddGroup; |
|||
import org.dromara.common.core.validate.EditGroup; |
|||
import org.dromara.common.log.enums.BusinessType; |
|||
import org.dromara.common.excel.utils.ExcelUtil; |
|||
import org.dromara.im.domain.vo.ImUserGroupVo; |
|||
import org.dromara.im.domain.bo.ImUserGroupBo; |
|||
import org.dromara.im.service.IImUserGroupService; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
|
|||
/** |
|||
* 用户分组 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Validated |
|||
@RequiredArgsConstructor |
|||
@RestController |
|||
@RequestMapping("/im/userGroup") |
|||
public class ImUserGroupController extends BaseController { |
|||
|
|||
private final IImUserGroupService imUserGroupService; |
|||
|
|||
/** |
|||
* 查询用户分组列表 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:list") |
|||
@GetMapping("/list") |
|||
public TableDataInfo<ImUserGroupVo> list(ImUserGroupBo bo, PageQuery pageQuery) { |
|||
return imUserGroupService.queryPageList(bo, pageQuery); |
|||
} |
|||
|
|||
/** |
|||
* 导出用户分组列表 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:export") |
|||
@Log(title = "用户分组", businessType = BusinessType.EXPORT) |
|||
@PostMapping("/export") |
|||
public void export(ImUserGroupBo bo, HttpServletResponse response) { |
|||
List<ImUserGroupVo> list = imUserGroupService.queryList(bo); |
|||
ExcelUtil.exportExcel(list, "用户分组", ImUserGroupVo.class, response); |
|||
} |
|||
|
|||
/** |
|||
* 获取用户分组详细信息 |
|||
* |
|||
* @param id 主键 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:query") |
|||
@GetMapping("/{id}") |
|||
public R<ImUserGroupVo> getInfo(@NotNull(message = "主键不能为空") |
|||
@PathVariable Long id) { |
|||
return R.ok(imUserGroupService.queryById(id)); |
|||
} |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:add") |
|||
@Log(title = "用户分组", businessType = BusinessType.INSERT) |
|||
@RepeatSubmit() |
|||
@PostMapping() |
|||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ImUserGroupBo bo) { |
|||
return toAjax(imUserGroupService.insertByBo(bo)); |
|||
} |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:edit") |
|||
@Log(title = "用户分组", businessType = BusinessType.UPDATE) |
|||
@RepeatSubmit() |
|||
@PutMapping() |
|||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ImUserGroupBo bo) { |
|||
return toAjax(imUserGroupService.updateByBo(bo)); |
|||
} |
|||
|
|||
/** |
|||
* 删除用户分组 |
|||
* |
|||
* @param ids 主键串 |
|||
*/ |
|||
@SaCheckPermission("im:userGroup:remove") |
|||
@Log(title = "用户分组", businessType = BusinessType.DELETE) |
|||
@DeleteMapping("/{ids}") |
|||
public R<Void> remove(@NotEmpty(message = "主键不能为空") |
|||
@PathVariable Long[] ids) { |
|||
return toAjax(imUserGroupService.deleteWithValidByIds(List.of(ids), true)); |
|||
} |
|||
} |
|||
@ -0,0 +1,105 @@ |
|||
package org.dromara.im.controller; |
|||
|
|||
import java.util.List; |
|||
|
|||
import lombok.RequiredArgsConstructor; |
|||
import jakarta.servlet.http.HttpServletResponse; |
|||
import jakarta.validation.constraints.*; |
|||
import cn.dev33.satoken.annotation.SaCheckPermission; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.dromara.common.idempotent.annotation.RepeatSubmit; |
|||
import org.dromara.common.log.annotation.Log; |
|||
import org.dromara.common.web.core.BaseController; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import org.dromara.common.core.domain.R; |
|||
import org.dromara.common.core.validate.AddGroup; |
|||
import org.dromara.common.core.validate.EditGroup; |
|||
import org.dromara.common.log.enums.BusinessType; |
|||
import org.dromara.common.excel.utils.ExcelUtil; |
|||
import org.dromara.im.domain.vo.ImUserLableVo; |
|||
import org.dromara.im.domain.bo.ImUserLableBo; |
|||
import org.dromara.im.service.IImUserLableService; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
|
|||
/** |
|||
* 用户分组 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Validated |
|||
@RequiredArgsConstructor |
|||
@RestController |
|||
@RequestMapping("/im/userLable") |
|||
public class ImUserLableController extends BaseController { |
|||
|
|||
private final IImUserLableService imUserLableService; |
|||
|
|||
/** |
|||
* 查询用户分组列表 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:list") |
|||
@GetMapping("/list") |
|||
public TableDataInfo<ImUserLableVo> list(ImUserLableBo bo, PageQuery pageQuery) { |
|||
return imUserLableService.queryPageList(bo, pageQuery); |
|||
} |
|||
|
|||
/** |
|||
* 导出用户分组列表 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:export") |
|||
@Log(title = "用户分组", businessType = BusinessType.EXPORT) |
|||
@PostMapping("/export") |
|||
public void export(ImUserLableBo bo, HttpServletResponse response) { |
|||
List<ImUserLableVo> list = imUserLableService.queryList(bo); |
|||
ExcelUtil.exportExcel(list, "用户分组", ImUserLableVo.class, response); |
|||
} |
|||
|
|||
/** |
|||
* 获取用户分组详细信息 |
|||
* |
|||
* @param id 主键 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:query") |
|||
@GetMapping("/{id}") |
|||
public R<ImUserLableVo> getInfo(@NotNull(message = "主键不能为空") |
|||
@PathVariable Long id) { |
|||
return R.ok(imUserLableService.queryById(id)); |
|||
} |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:add") |
|||
@Log(title = "用户分组", businessType = BusinessType.INSERT) |
|||
@RepeatSubmit() |
|||
@PostMapping() |
|||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ImUserLableBo bo) { |
|||
return toAjax(imUserLableService.insertByBo(bo)); |
|||
} |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:edit") |
|||
@Log(title = "用户分组", businessType = BusinessType.UPDATE) |
|||
@RepeatSubmit() |
|||
@PutMapping() |
|||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ImUserLableBo bo) { |
|||
return toAjax(imUserLableService.updateByBo(bo)); |
|||
} |
|||
|
|||
/** |
|||
* 删除用户分组 |
|||
* |
|||
* @param ids 主键串 |
|||
*/ |
|||
@SaCheckPermission("im:userLable:remove") |
|||
@Log(title = "用户分组", businessType = BusinessType.DELETE) |
|||
@DeleteMapping("/{ids}") |
|||
public R<Void> remove(@NotEmpty(message = "主键不能为空") |
|||
@PathVariable Long[] ids) { |
|||
return toAjax(imUserLableService.deleteWithValidByIds(List.of(ids), true)); |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
package org.dromara.im.domain; |
|||
|
|||
import com.fhs.core.trans.vo.TransPojo; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
import com.baomidou.mybatisplus.annotation.*; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.io.Serial; |
|||
|
|||
/** |
|||
* 用户分组对象 im_user_group |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@TableName("im_user_group") |
|||
public class ImUserGroup implements TransPojo { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@TableId(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
private String groupName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
package org.dromara.im.domain; |
|||
|
|||
import com.fhs.core.trans.vo.TransPojo; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
import com.baomidou.mybatisplus.annotation.*; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.io.Serial; |
|||
|
|||
/** |
|||
* 用户分组对象 im_user_lable |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@TableName("im_user_lable") |
|||
public class ImUserLable implements TransPojo { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@TableId(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
private String lableName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
package org.dromara.im.domain.bo; |
|||
|
|||
import org.dromara.im.domain.ImUserGroup; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
import org.dromara.common.core.validate.AddGroup; |
|||
import org.dromara.common.core.validate.EditGroup; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import jakarta.validation.constraints.*; |
|||
|
|||
/** |
|||
* 用户分组业务对象 im_user_group |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@AutoMapper(target = ImUserGroup.class, reverseConvertGenerate = false) |
|||
public class ImUserGroupBo extends BaseEntity { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@NotNull(message = "id不能为空", groups = { EditGroup.class }) |
|||
private Long id; |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
@NotBlank(message = "分组名称不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String groupName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
@NotNull(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
package org.dromara.im.domain.bo; |
|||
|
|||
import org.dromara.im.domain.ImUserLable; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
import org.dromara.common.core.validate.AddGroup; |
|||
import org.dromara.common.core.validate.EditGroup; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import jakarta.validation.constraints.*; |
|||
|
|||
/** |
|||
* 用户分组业务对象 im_user_lable |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@AutoMapper(target = ImUserLable.class, reverseConvertGenerate = false) |
|||
public class ImUserLableBo extends BaseEntity { |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@NotNull(message = "id不能为空", groups = { EditGroup.class }) |
|||
private Long id; |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
@NotBlank(message = "标签名称不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String lableName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
@NotNull(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,56 @@ |
|||
package org.dromara.im.domain.vo; |
|||
|
|||
import org.dromara.im.domain.ImUserGroup; |
|||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import org.dromara.common.excel.annotation.ExcelDictFormat; |
|||
import org.dromara.common.excel.convert.ExcelDictConvert; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serial; |
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
|
|||
|
|||
/** |
|||
* 用户分组视图对象 im_user_group |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@ExcelIgnoreUnannotated |
|||
@AutoMapper(target = ImUserGroup.class) |
|||
public class ImUserGroupVo implements Serializable { |
|||
|
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@ExcelProperty(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 分组名称 |
|||
*/ |
|||
@ExcelProperty(value = "分组名称") |
|||
private String groupName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
@ExcelProperty(value = "排序") |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
@ExcelProperty(value = "备注") |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,56 @@ |
|||
package org.dromara.im.domain.vo; |
|||
|
|||
import org.dromara.im.domain.ImUserLable; |
|||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; |
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import org.dromara.common.excel.annotation.ExcelDictFormat; |
|||
import org.dromara.common.excel.convert.ExcelDictConvert; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serial; |
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
|
|||
|
|||
/** |
|||
* 用户分组视图对象 im_user_lable |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@Data |
|||
@ExcelIgnoreUnannotated |
|||
@AutoMapper(target = ImUserLable.class) |
|||
public class ImUserLableVo implements Serializable { |
|||
|
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* id |
|||
*/ |
|||
@ExcelProperty(value = "id") |
|||
private Long id; |
|||
|
|||
/** |
|||
* 标签名称 |
|||
*/ |
|||
@ExcelProperty(value = "标签名称") |
|||
private String lableName; |
|||
|
|||
/** |
|||
* 排序 |
|||
*/ |
|||
@ExcelProperty(value = "排序") |
|||
private Long sort; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
@ExcelProperty(value = "备注") |
|||
private String remark; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
package org.dromara.im.mapper; |
|||
|
|||
import org.dromara.im.domain.ImUserGroup; |
|||
import org.dromara.im.domain.vo.ImUserGroupVo; |
|||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
|||
|
|||
/** |
|||
* 用户分组Mapper接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
public interface ImUserGroupMapper extends BaseMapperPlus<ImUserGroup, ImUserGroupVo> { |
|||
|
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
package org.dromara.im.mapper; |
|||
|
|||
import org.dromara.im.domain.ImUserLable; |
|||
import org.dromara.im.domain.vo.ImUserLableVo; |
|||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; |
|||
|
|||
/** |
|||
* 用户分组Mapper接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
public interface ImUserLableMapper extends BaseMapperPlus<ImUserLable, ImUserLableVo> { |
|||
|
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
package org.dromara.im.service; |
|||
|
|||
import org.dromara.im.domain.vo.ImUserGroupVo; |
|||
import org.dromara.im.domain.bo.ImUserGroupBo; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 用户分组Service接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
public interface IImUserGroupService { |
|||
|
|||
/** |
|||
* 查询用户分组 |
|||
* |
|||
* @param id 主键 |
|||
* @return 用户分组 |
|||
*/ |
|||
ImUserGroupVo queryById(Long id); |
|||
|
|||
/** |
|||
* 分页查询用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 用户分组分页列表 |
|||
*/ |
|||
TableDataInfo<ImUserGroupVo> queryPageList(ImUserGroupBo bo, PageQuery pageQuery); |
|||
|
|||
/** |
|||
* 查询符合条件的用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 用户分组列表 |
|||
*/ |
|||
List<ImUserGroupVo> queryList(ImUserGroupBo bo); |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
Boolean insertByBo(ImUserGroupBo bo); |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
Boolean updateByBo(ImUserGroupBo bo); |
|||
|
|||
/** |
|||
* 校验并批量删除用户分组信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
package org.dromara.im.service; |
|||
|
|||
import org.dromara.im.domain.vo.ImUserLableVo; |
|||
import org.dromara.im.domain.bo.ImUserLableBo; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 用户分组Service接口 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
public interface IImUserLableService { |
|||
|
|||
/** |
|||
* 查询用户分组 |
|||
* |
|||
* @param id 主键 |
|||
* @return 用户分组 |
|||
*/ |
|||
ImUserLableVo queryById(Long id); |
|||
|
|||
/** |
|||
* 分页查询用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 用户分组分页列表 |
|||
*/ |
|||
TableDataInfo<ImUserLableVo> queryPageList(ImUserLableBo bo, PageQuery pageQuery); |
|||
|
|||
/** |
|||
* 查询符合条件的用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 用户分组列表 |
|||
*/ |
|||
List<ImUserLableVo> queryList(ImUserLableBo bo); |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
Boolean insertByBo(ImUserLableBo bo); |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
Boolean updateByBo(ImUserLableBo bo); |
|||
|
|||
/** |
|||
* 校验并批量删除用户分组信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); |
|||
} |
|||
@ -0,0 +1,133 @@ |
|||
package org.dromara.im.service.impl; |
|||
|
|||
import org.dromara.common.core.utils.MapstructUtils; |
|||
import org.dromara.common.core.utils.StringUtils; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|||
import com.baomidou.dynamic.datasource.annotation.DS; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.dromara.im.constant.ImConstant; |
|||
import org.springframework.stereotype.Service; |
|||
import org.dromara.im.domain.bo.ImUserGroupBo; |
|||
import org.dromara.im.domain.vo.ImUserGroupVo; |
|||
import org.dromara.im.domain.ImUserGroup; |
|||
import org.dromara.im.mapper.ImUserGroupMapper; |
|||
import org.dromara.im.service.IImUserGroupService; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Collection; |
|||
|
|||
/** |
|||
* 用户分组 Service 业务层处理 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@DS(ImConstant.DS_IM_PLATFORM) |
|||
@RequiredArgsConstructor |
|||
@Service |
|||
public class ImUserGroupServiceImpl implements IImUserGroupService { |
|||
|
|||
private final ImUserGroupMapper baseMapper; |
|||
|
|||
/** |
|||
* 查询用户分组 |
|||
* |
|||
* @param id 主键 |
|||
* @return 用户分组 |
|||
*/ |
|||
@Override |
|||
public ImUserGroupVo queryById(Long id){ |
|||
return baseMapper.selectVoById(id); |
|||
} |
|||
|
|||
/** |
|||
* 分页查询用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 用户分组分页列表 |
|||
*/ |
|||
@Override |
|||
public TableDataInfo<ImUserGroupVo> queryPageList(ImUserGroupBo bo, PageQuery pageQuery) { |
|||
LambdaQueryWrapper<ImUserGroup> lqw = buildQueryWrapper(bo); |
|||
Page<ImUserGroupVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
|||
return TableDataInfo.build(result); |
|||
} |
|||
|
|||
/** |
|||
* 查询符合条件的用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 用户分组列表 |
|||
*/ |
|||
@Override |
|||
public List<ImUserGroupVo> queryList(ImUserGroupBo bo) { |
|||
LambdaQueryWrapper<ImUserGroup> lqw = buildQueryWrapper(bo); |
|||
return baseMapper.selectVoList(lqw); |
|||
} |
|||
|
|||
private LambdaQueryWrapper<ImUserGroup> buildQueryWrapper(ImUserGroupBo bo) { |
|||
Map<String, Object> params = bo.getParams(); |
|||
LambdaQueryWrapper<ImUserGroup> lqw = Wrappers.lambdaQuery(); |
|||
lqw.like(StringUtils.isNotBlank(bo.getGroupName()), ImUserGroup::getGroupName, bo.getGroupName()); |
|||
lqw.eq(bo.getSort() != null, ImUserGroup::getSort, bo.getSort()); |
|||
return lqw; |
|||
} |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
@Override |
|||
public Boolean insertByBo(ImUserGroupBo bo) { |
|||
ImUserGroup add = MapstructUtils.convert(bo, ImUserGroup.class); |
|||
validEntityBeforeSave(add); |
|||
boolean flag = baseMapper.insert(add) > 0; |
|||
if (flag) { |
|||
bo.setId(add.getId()); |
|||
} |
|||
return flag; |
|||
} |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
@Override |
|||
public Boolean updateByBo(ImUserGroupBo bo) { |
|||
ImUserGroup update = MapstructUtils.convert(bo, ImUserGroup.class); |
|||
validEntityBeforeSave(update); |
|||
return baseMapper.updateById(update) > 0; |
|||
} |
|||
|
|||
/** |
|||
* 保存前的数据校验 |
|||
*/ |
|||
private void validEntityBeforeSave(ImUserGroup entity){ |
|||
//TODO 做一些数据校验,如唯一约束
|
|||
} |
|||
|
|||
/** |
|||
* 校验并批量删除用户分组信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
@Override |
|||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { |
|||
if(isValid){ |
|||
//TODO 做一些业务上的校验,判断是否需要校验
|
|||
} |
|||
return baseMapper.deleteByIds(ids) > 0; |
|||
} |
|||
} |
|||
@ -0,0 +1,133 @@ |
|||
package org.dromara.im.service.impl; |
|||
|
|||
import org.dromara.common.core.utils.MapstructUtils; |
|||
import org.dromara.common.core.utils.StringUtils; |
|||
import org.dromara.common.mybatis.core.page.TableDataInfo; |
|||
import org.dromara.common.mybatis.core.page.PageQuery; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|||
import com.baomidou.dynamic.datasource.annotation.DS; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.dromara.im.constant.ImConstant; |
|||
import org.springframework.stereotype.Service; |
|||
import org.dromara.im.domain.bo.ImUserLableBo; |
|||
import org.dromara.im.domain.vo.ImUserLableVo; |
|||
import org.dromara.im.domain.ImUserLable; |
|||
import org.dromara.im.mapper.ImUserLableMapper; |
|||
import org.dromara.im.service.IImUserLableService; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Collection; |
|||
|
|||
/** |
|||
* 用户分组 Service 业务层处理 |
|||
* |
|||
* @author Blue |
|||
* @date 2026-04-01 |
|||
*/ |
|||
@DS(ImConstant.DS_IM_PLATFORM) |
|||
@RequiredArgsConstructor |
|||
@Service |
|||
public class ImUserLableServiceImpl implements IImUserLableService { |
|||
|
|||
private final ImUserLableMapper baseMapper; |
|||
|
|||
/** |
|||
* 查询用户分组 |
|||
* |
|||
* @param id 主键 |
|||
* @return 用户分组 |
|||
*/ |
|||
@Override |
|||
public ImUserLableVo queryById(Long id){ |
|||
return baseMapper.selectVoById(id); |
|||
} |
|||
|
|||
/** |
|||
* 分页查询用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @param pageQuery 分页参数 |
|||
* @return 用户分组分页列表 |
|||
*/ |
|||
@Override |
|||
public TableDataInfo<ImUserLableVo> queryPageList(ImUserLableBo bo, PageQuery pageQuery) { |
|||
LambdaQueryWrapper<ImUserLable> lqw = buildQueryWrapper(bo); |
|||
Page<ImUserLableVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
|||
return TableDataInfo.build(result); |
|||
} |
|||
|
|||
/** |
|||
* 查询符合条件的用户分组列表 |
|||
* |
|||
* @param bo 查询条件 |
|||
* @return 用户分组列表 |
|||
*/ |
|||
@Override |
|||
public List<ImUserLableVo> queryList(ImUserLableBo bo) { |
|||
LambdaQueryWrapper<ImUserLable> lqw = buildQueryWrapper(bo); |
|||
return baseMapper.selectVoList(lqw); |
|||
} |
|||
|
|||
private LambdaQueryWrapper<ImUserLable> buildQueryWrapper(ImUserLableBo bo) { |
|||
Map<String, Object> params = bo.getParams(); |
|||
LambdaQueryWrapper<ImUserLable> lqw = Wrappers.lambdaQuery(); |
|||
lqw.like(StringUtils.isNotBlank(bo.getLableName()), ImUserLable::getLableName, bo.getLableName()); |
|||
lqw.eq(bo.getSort() != null, ImUserLable::getSort, bo.getSort()); |
|||
return lqw; |
|||
} |
|||
|
|||
/** |
|||
* 新增用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否新增成功 |
|||
*/ |
|||
@Override |
|||
public Boolean insertByBo(ImUserLableBo bo) { |
|||
ImUserLable add = MapstructUtils.convert(bo, ImUserLable.class); |
|||
validEntityBeforeSave(add); |
|||
boolean flag = baseMapper.insert(add) > 0; |
|||
if (flag) { |
|||
bo.setId(add.getId()); |
|||
} |
|||
return flag; |
|||
} |
|||
|
|||
/** |
|||
* 修改用户分组 |
|||
* |
|||
* @param bo 用户分组 |
|||
* @return 是否修改成功 |
|||
*/ |
|||
@Override |
|||
public Boolean updateByBo(ImUserLableBo bo) { |
|||
ImUserLable update = MapstructUtils.convert(bo, ImUserLable.class); |
|||
validEntityBeforeSave(update); |
|||
return baseMapper.updateById(update) > 0; |
|||
} |
|||
|
|||
/** |
|||
* 保存前的数据校验 |
|||
*/ |
|||
private void validEntityBeforeSave(ImUserLable entity){ |
|||
//TODO 做一些数据校验,如唯一约束
|
|||
} |
|||
|
|||
/** |
|||
* 校验并批量删除用户分组信息 |
|||
* |
|||
* @param ids 待删除的主键集合 |
|||
* @param isValid 是否进行有效性校验 |
|||
* @return 是否删除成功 |
|||
*/ |
|||
@Override |
|||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { |
|||
if(isValid){ |
|||
//TODO 做一些业务上的校验,判断是否需要校验
|
|||
} |
|||
return baseMapper.deleteByIds(ids) > 0; |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<!DOCTYPE mapper |
|||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="org.dromara.im.mapper.ImUserGroupMapper"> |
|||
|
|||
</mapper> |
|||
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<!DOCTYPE mapper |
|||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="org.dromara.im.mapper.ImUserLableMapper"> |
|||
|
|||
</mapper> |
|||
@ -1,12 +1,16 @@ |
|||
org.dromara.im.domain.bo.ImGroupMessageBo |
|||
org.dromara.im.domain.bo.ImSensitiveWordBo |
|||
org.dromara.im.domain.vo.ImGroupMemberVo |
|||
org.dromara.im.domain.bo.ImUserGroupBo |
|||
org.dromara.im.domain.vo.ImPrivateMessageVo |
|||
org.dromara.im.domain.vo.ImSensitiveWordVo |
|||
org.dromara.im.domain.bo.ImGroupMemberBo |
|||
org.dromara.im.domain.vo.ImGroupVo |
|||
org.dromara.im.domain.bo.ImUserLableBo |
|||
org.dromara.im.domain.vo.ImUserLableVo |
|||
org.dromara.im.domain.vo.ImGroupMessageVo |
|||
org.dromara.im.domain.vo.ImUserGroupVo |
|||
org.dromara.im.domain.vo.ImUserVo |
|||
org.dromara.im.domain.bo.ImGroupBo |
|||
org.dromara.im.domain.bo.ImPrivateMessageBo |
|||
org.dromara.im.domain.bo.ImSensitiveWordBo |
|||
org.dromara.im.domain.vo.ImGroupMemberVo |
|||
org.dromara.im.domain.vo.ImSensitiveWordVo |
|||
org.dromara.im.domain.vo.ImGroupVo |
|||
org.dromara.im.domain.bo.ImGroupBo |
|||
org.dromara.im.domain.bo.ImUserBo |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue