From 807637b11fa17477313fddeda4165a725e82efbb Mon Sep 17 00:00:00 2001 From: H_uang Date: Tue, 31 Mar 2026 17:32:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=A2=E6=9C=8D=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- im-admin-ui/.eslintignore | 1 + im-admin-ui/src/api/im/user/customer.ts | 143 +++++++++ im-admin-ui/src/api/im/user/index.ts | 5 +- im-admin-ui/src/views/im/customer/index.vue | 325 ++++++++++++++++++++ 4 files changed, 470 insertions(+), 4 deletions(-) create mode 100644 im-admin-ui/src/api/im/user/customer.ts create mode 100644 im-admin-ui/src/views/im/customer/index.vue diff --git a/im-admin-ui/.eslintignore b/im-admin-ui/.eslintignore index e74db40..e857d70 100644 --- a/im-admin-ui/.eslintignore +++ b/im-admin-ui/.eslintignore @@ -15,3 +15,4 @@ dist prettier.config.js src/assets tailwind.config.js +.vite.config.ts diff --git a/im-admin-ui/src/api/im/user/customer.ts b/im-admin-ui/src/api/im/user/customer.ts new file mode 100644 index 0000000..3590d48 --- /dev/null +++ b/im-admin-ui/src/api/im/user/customer.ts @@ -0,0 +1,143 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { UserVO, UserBanDTO, UserUnbanDTO, UserQuery, UserForm } from '@/api/im/user/types'; + +/** + * 查询用户列表 + * @param query + * @returns {*} + */ + +export const listUser = (query?: UserQuery): AxiosPromise => { + return request({ + url: '/im/user/listCustomer', + method: 'get', + params: query + }); +}; + +/** + * 新增客服 + */ +export const addUser = (data: UserForm) => { + return request({ + url: '/im/user/addCustomer', + method: 'post', + data: data + }); +}; + +/** + * 修改客服 + */ +export const updateUser = (data: UserForm) => { + return request({ + url: '/im/user/editCustomer', + method: 'post', + data: data + }); +}; + +// 删除客服 +export function delUser(data: Array) { + return request({ + url: '/im/user/removeCustomer', + method: 'post', + data: data + }); +} + +/** + * 用户密码重置 + * @param id 用户ID + * @param password 密码 + */ +export const resetUserPwd = (id: string | number, password: string) => { + const data = { + id: id, + password + }; + return request({ + url: '/im/user/resetPwdCustomer', + method: 'post', + headers: { + isEncrypt: true, + repeatSubmit: false + }, + data: data + }); +}; + +/** + * 查询用户详细 + * @param id + */ +export const getUser = (id: string | number): AxiosPromise => { + return request({ + url: '/im/user/' + id, + method: 'get' + }); +}; + +/** + * 封禁用户 + * @param data + */ +export const ban = (data: UserBanDTO) => { + return request({ + url: '/im/user/ban', + method: 'put', + data: data + }); +}; + +/** + * 解封用户 + * @param data + */ +export const unban = (data: UserUnbanDTO) => { + return request({ + url: '/im/user/unban', + method: 'put', + data: data + }); +}; + +export const findUserByName = (name?: string): AxiosPromise => { + return request({ + url: '/im/user/findByName?name=' + name, + method: 'get' + }); +}; + +/** + * 按天统计用户注册数量 + * @param days 统计天数 + */ +export const getDailyRegistrationCount = (days?: number): AxiosPromise => { + return request({ + url: '/im/user/dailyRegistrationCount', + method: 'get', + params: { days } + }); +}; + +/** + * 获取总用户数量 + */ +export const getTotalUserCount = (): AxiosPromise => { + return request({ + url: '/im/user/totalCount', + method: 'get' + }); +}; + +/** + * 获取活跃用户统计(日活、周活、月活) + */ +export const getActiveUserStats = (): AxiosPromise => { + return request({ + url: '/im/user/activeStats', + method: 'get' + }); +}; diff --git a/im-admin-ui/src/api/im/user/index.ts b/im-admin-ui/src/api/im/user/index.ts index 5df0a60..17c213a 100644 --- a/im-admin-ui/src/api/im/user/index.ts +++ b/im-admin-ui/src/api/im/user/index.ts @@ -27,7 +27,6 @@ export const getUser = (id: string | number): AxiosPromise => { }); }; - /** * 封禁用户 * @param data @@ -40,7 +39,6 @@ export const ban = (data: UserBanDTO) => { }); }; - /** * 解封用户 * @param data @@ -53,8 +51,7 @@ export const unban = (data: UserUnbanDTO) => { }); }; - -export const findUserByName = (name?: String): AxiosPromise => { +export const findUserByName = (name?: string): AxiosPromise => { return request({ url: '/im/user/findByName?name=' + name, method: 'get' diff --git a/im-admin-ui/src/views/im/customer/index.vue b/im-admin-ui/src/views/im/customer/index.vue new file mode 100644 index 0000000..a5f63dd --- /dev/null +++ b/im-admin-ui/src/views/im/customer/index.vue @@ -0,0 +1,325 @@ + + +