Refactor API requests and update imports

This commit is contained in:
wangqiao
2025-08-18 22:15:55 +08:00
parent ba5f777ed0
commit aac4dec3fd
17 changed files with 113 additions and 193 deletions

View File

@ -1,5 +1,6 @@
import { get, post } from '~/utils/axios' import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
import { AppPayWalletPackageRespVO, PayOrderSubmitReqVO, PayOrderRespVO, PageResultAppPayWalletRechargeRespVO } from './types' import * as useFetchRequest from '~/composables/useFetchRequest'
import type { AppPayWalletPackageRespVO, PayOrderSubmitReqVO, PayOrderRespVO, PageResultAppPayWalletRechargeRespVO } from './types'
/** /**
* 获得VIP列表 * 获得VIP列表
@ -7,71 +8,55 @@ import { AppPayWalletPackageRespVO, PayOrderSubmitReqVO, PayOrderRespVO, PageRes
* @returns * @returns
*/ */
export const listVip = () => { export const listVip = () => {
return get<IResponse<AppPayWalletPackageRespVO[]>>({ return useFetchRequest.get<IResponse<AppPayWalletPackageRespVO[]>>('/prod-api/app-api/pay/wallet-recharge-package/list-vip', {})
url: '/prod-api/app-api/pay/wallet-recharge-package/list-vip',
})
} }
/** /**
* 提交支付订单 * 提交支付订单
*/ */
export const submitPayOrder = (data: PayOrderSubmitReqVO) => { export const submitPayOrder = (data: PayOrderSubmitReqVO) => {
return post< return useDollarFetchRequest.post<
IResponse<{ IResponse<{
displayContent: string displayContent: string
displayMode: string displayMode: string
orderId: number orderId: number
status: number status: number
}> }>
>({ >('/prod-api/app-api/pay/order/submit', data)
url: '/prod-api/app-api/pay/order/submit',
data,
})
} }
/** /**
* 创建示例订单 * 创建示例订单
*/ */
export const createOrder = (params: { spuId: number }) => { export const createOrder = (params: { spuId: number }) => {
return post<IResponse<string>>({ return useDollarFetchRequest.post<IResponse<string>>('/prod-api/app-api/pay/demo-order/create', params)
url: '/prod-api/app-api/pay/demo-order/create',
params,
})
} }
/** /**
* 获得钱包充值套餐列表 * 获得钱包充值套餐列表
*/ */
export const listWalletRechargePackage = () => { export const listWalletRechargePackage = () => {
return get<IResponse<AppPayWalletPackageRespVO[]>>({ return useFetchRequest.get<IResponse<AppPayWalletPackageRespVO[]>>('/prod-api/app-api/pay/wallet-recharge-package/list', {})
url: '/prod-api/app-api/pay/wallet-recharge-package/list',
})
} }
/** /**
* 获取支付状态 * 获取支付状态
*/ */
export const getPayStatus = (params: { id: number }) => { export const getPayStatus = (params: { id: number }) => {
return get<IResponse<PayOrderRespVO>>({ return useDollarFetchRequest.get<IResponse<PayOrderRespVO>>('/prod-api/app-api/pay/order/get', params)
url: '/prod-api/app-api/pay/order/get',
params,
})
} }
/** /**
* 通过code获取token * 通过code获取token
*/ */
export const getTokenByCode = (params: { type: number; code: string; state: string }) => { export const getTokenByCode = (params: { type: number; code: string; state: string }) => {
return post<IResponse<string>>({ return useDollarFetchRequest.post<IResponse<string>>('/prod-api/app-api/member/auth/token-by-code', params)
url: '/prod-api/app-api/member/social-user/bind',
data: params,
})
} }
/** /**
* 社交快捷登录,使用 code 授权码 * 社交快捷登录,使用 code 授权码
*/ */
export const socialLoginByCode = (params: { type: number; code: string; state: string }) => { export const socialLoginByCode = (params: { type: number; code: string; state: string }) => {
return post< return useDollarFetchRequest.post<
IResponse<{ IResponse<{
accessToken: string accessToken: string
refreshToken: string refreshToken: string
@ -79,18 +64,12 @@ export const socialLoginByCode = (params: { type: number; code: string; state: s
expiresTime: number expiresTime: number
openid: string openid: string
}> }>
>({ >('/prod-api/app-api/member/auth/social-login', params)
url: '/prod-api/app-api/member/auth/social-login',
data: params,
})
} }
/** /**
* 获得钱包充值记录分页 * 获得钱包充值记录分页
*/ */
export const getWalletRechargeRecordPage = (params: { pageNo: number; pageSize: number }) => { export const getWalletRechargeRecordPage = (params: { pageNo: number; pageSize: number }) => {
return get<IResponse<PageResultAppPayWalletRechargeRespVO>>({ return useFetchRequest.get<IResponse<PageResultAppPayWalletRechargeRespVO>>('/prod-api/app-api/pay/wallet-transaction/page', params)
url: '/prod-api/app-api/pay/wallet-transaction/page',
params,
})
} }

View File

@ -1,5 +1,6 @@
import { get, post, put, Delete } from '~/utils/axios' import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
import { import * as useFetchRequest from '~/composables/useFetchRequest'
import type {
UserExtendSaveReqVO, UserExtendSaveReqVO,
UserExtendRespVO, UserExtendRespVO,
UserAuthInfoRespVO, UserAuthInfoRespVO,
@ -16,9 +17,7 @@ import {
* @returns * @returns
*/ */
export const getUserInfo = () => { export const getUserInfo = () => {
return get<IResponse<UserExtendRespVO>>({ return useFetchRequest.get<IResponse<UserExtendRespVO>>('/prod-api/app-api/member/user-extend/get', {})
url: '/prod-api/app-api/member/user-extend/get',
})
} }
/** /**
@ -27,10 +26,7 @@ export const getUserInfo = () => {
* @returns * @returns
*/ */
export const userExtend = (params: UserExtendSaveReqVO) => { export const userExtend = (params: UserExtendSaveReqVO) => {
return post<IResponse<number>>({ return useDollarFetchRequest.post<IResponse<number>>('/prod-api/app-api/member/user-extend/create', params)
url: '/prod-api/app-api/member/user-extend/create',
data: params,
})
} }
/** /**
@ -39,10 +35,7 @@ export const userExtend = (params: UserExtendSaveReqVO) => {
* @returns * @returns
*/ */
export const updateUserExtend = (params: UserExtendSaveReqVO) => { export const updateUserExtend = (params: UserExtendSaveReqVO) => {
return put<IResponse<number>>({ return useDollarFetchRequest.put<IResponse<number>>('/prod-api/app-api/member/user-extend/update', params)
url: '/prod-api/app-api/member/user-extend/update',
data: params,
})
} }
/** /**
* 获取用户信息 * 获取用户信息
@ -50,9 +43,7 @@ export const updateUserExtend = (params: UserExtendSaveReqVO) => {
* @returns * @returns
*/ */
export const getUserAuthInfo = () => { export const getUserAuthInfo = () => {
return get<IResponse<UserAuthInfoRespVO>>({ return useFetchRequest.get<IResponse<UserAuthInfoRespVO>>('/prod-api/app-api/member/user-auth-info/get', {})
url: '/prod-api/app-api/member/user-auth-info/get',
})
} }
/** /**
* 创建用户信息 * 创建用户信息
@ -60,10 +51,7 @@ export const getUserAuthInfo = () => {
* @returns * @returns
*/ */
export const createUserAuthInfo = (params: UserAuthInfoRespVO) => { export const createUserAuthInfo = (params: UserAuthInfoRespVO) => {
return post<IResponse<number>>({ return useDollarFetchRequest.post<IResponse<number>>('/prod-api/app-api/member/user-auth-info/create', params)
url: '/prod-api/app-api/member/user-auth-info/create',
data: params,
})
} }
/** /**
* 更新用户信息 * 更新用户信息
@ -71,132 +59,92 @@ export const createUserAuthInfo = (params: UserAuthInfoRespVO) => {
* @returns * @returns
*/ */
export const updateUserAuthInfo = (params: UserAuthInfoRespVO) => { export const updateUserAuthInfo = (params: UserAuthInfoRespVO) => {
return put<IResponse<number>>({ return useDollarFetchRequest.put<IResponse<number>>('/prod-api/app-api/member/user-auth-info/update', params)
url: '/prod-api/app-api/member/user-auth-info/update',
data: params,
})
} }
/** /**
* 获得内容信息分页 * 获得内容信息分页
*/ */
export const getContentPage = (params: { type: number }) => { export const getContentPage = (params: { type: number }) => {
return get<IResponse<PageResultProjectHistoryResVO>>({ return useFetchRequest.get<IResponse<PageResultProjectHistoryResVO>>('/prod-api/app-api/business/project-history/page', params)
url: '/prod-api/app-api/business/project-history/page',
params,
})
} }
/** /**
* 获得用户项目工具箱下载分页 * 获得用户项目工具箱下载分页
*/ */
export const getUserToolBoxPage = (params: { pageNum: number; pageSize: number; type?: number }) => { export const getUserToolBoxPage = (params: { pageNum: number; pageSize: number; type?: number }) => {
return get<IResponse<PageResultProjectHistoryResVO>>({ return useFetchRequest.get<IResponse<PageResultProjectHistoryResVO>>('/prod-api/app-api/business/project-member-file/page', params)
url: '/prod-api/app-api/business/project-member-file/page',
params,
})
} }
/** /**
* 签到 * 签到
*/ */
export const signIn = () => { export const signIn = () => {
return post< return useDollarFetchRequest.post<
IResponse<{ IResponse<{
day: number day: number
point: number point: number
experience: number experience: number
createTime: string createTime: string
}> }>
>({ >('/prod-api/app-api/member/sign-in/record/create', {})
url: '/prod-api/app-api/member/sign-in/record/create',
})
} }
/** /**
* 获得用户积分记录分页 * 获得用户积分记录分页
*/ */
export const getUserPointPage = (params: { pageNo: number; pageSize: number }) => { export const getUserPointPage = (params: { pageNo: number; pageSize: number }) => {
return get<IResponse<PageResultMemberPointRecordRespVO>>({ return useFetchRequest.get<IResponse<PageResultMemberPointRecordRespVO>>('/prod-api/app-api/member/point/record/page', params)
url: '/prod-api/app-api/member/point/record/page',
params,
})
} }
/** /**
* 近期收益和近期活跃 * 近期收益和近期活跃
*/ */
export const getRecentIncomeAndActive = (params: { type: number; limit: number }) => { export const getRecentIncomeAndActive = (params: { type: number; limit: number }) => {
return get<IResponse<UserStatisticsLineRespVO>>({ return useFetchRequest.get<IResponse<UserStatisticsLineRespVO>>('/prod-api/app-api/member/statistics/line', params)
url: '/prod-api/app-api/member/statistics/line',
params,
})
} }
/** /**
* *
资源下载分布 资源下载分布
*/ */
export const getResourceDistribution = (params: { type: number; limit: number }) => { export const getResourceDistribution = (params: { type: number; limit: number }) => {
return get<IResponse<UserStatisticsBarRespVO>>({ return useFetchRequest.get<IResponse<UserStatisticsBarRespVO>>('/prod-api/app-api/member/statistics/bar', params)
url: '/prod-api/app-api/member/statistics/bar',
params,
})
} }
/** /**
* 我的数据统计 包括我的金币 我的关注 我的发布等等 * 我的数据统计 包括我的金币 我的关注 我的发布等等
*/ */
export const getUserStatistics = () => { export const getUserStatistics = () => {
return get<IResponse<UserStatisticsCountRespVO>>({ return useFetchRequest.get<IResponse<UserStatisticsCountRespVO>>('/prod-api/app-api/member/statistics/count', {})
url: '/prod-api/app-api/member/statistics/count',
params: {},
headers: {
'Content-Type': 'application/x-www-form-urlencoded ',
},
})
} }
/** /**
* 获得项目订单用户收藏信息分页 * 获得项目订单用户收藏信息分页
*/ */
export const getUserFavoritePage = (params: { pageNo: number; pageSize: number; userId: any; type: number }) => { export const getUserFavoritePage = (params: { pageNo: number; pageSize: number; userId: any; type: number }) => {
return get<IResponse<PageResultProjectMemberFavoritesRespVO>>({ return useFetchRequest.get<IResponse<PageResultProjectMemberFavoritesRespVO>>('/prod-api/app-api/business/project-member-favorites/page', params)
url: '/prod-api/app-api/business/project-member-favorites/page',
params,
})
} }
/*** /***
* 自己发布的-内容信息分页 * 自己发布的-内容信息分页
*/ */
export const getOwnContentPage = (params: { pageNo: number; pageSize: number; type: number }) => { export const getOwnContentPage = (params: { pageNo: number; pageSize: number; type: number }) => {
return get<IResponse<PageResultProjectMemberFavoritesRespVO>>({ return useFetchRequest.get<IResponse<PageResultProjectHistoryResVO>>('/prod-api/app-api/business/app/project-draw/my-page', params)
url: '/prod-api/app-api/business/app/project-draw/my-page',
params,
})
} }
/** /**
* 下架 * 下架
*/ */
export const offShelf = (params: { id: number }) => { export const offShelf = (params: { id: number }) => {
return put<IResponse<boolean>>({ return useDollarFetchRequest.put<IResponse<boolean>>('/prod-api/app-api/business/app/project-draw/down', params)
url: '/prod-api/app-api/business/app/project-draw/down',
data: params,
})
} }
/** /**
* 删除资源 * 删除资源
*/ */
export const deleteResource = (params: { id: number }) => { export const deleteResource = (params: { id: number }) => {
return Delete<IResponse<boolean>>({ return useDollarFetchRequest.del<IResponse<boolean>>('/prod-api/app-api/business/app/project-draw/delete', params)
url: '/prod-api/app-api/business/app/project-draw/delete',
params,
})
} }
/** /**
* 获得信息拓展 * 获得信息拓展
*/ */
export const getUserExtend = () => { export const getUserExtend = () => {
return get<IResponse<UserExtendRespVO>>({ return useFetchRequest.get<IResponse<UserExtendRespVO>>('/prod-api/app-api/member/user-extend/get', {})
url: '/prod-api/app-api/member/user-extend/get',
})
} }

View File

@ -1,5 +1,6 @@
import { post, get } from '~/utils/axios' import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
import { TcreateReq, TpageReq, TpageRes } from './types' import * as useFetchRequest from '~/composables/useFetchRequest'
import type { TcreateReq, TpageReq, TpageRes } from './types'
/** /**
* 新建工具箱 * 新建工具箱
@ -7,18 +8,12 @@ import { TcreateReq, TpageReq, TpageRes } from './types'
* @returns * @returns
*/ */
export const create = (params: TcreateReq) => { export const create = (params: TcreateReq) => {
return post<IResponse<number>>({ return useDollarFetchRequest.post<IResponse<number>>('/prod-api/app-api/business/app/project-resource/create', params)
url: '/prod-api/app-api/business/app/project-resource/create',
data: params,
})
} }
/*** /***
* 获得内容信息分页 * 获得内容信息分页
*/ */
export const page = (params: TpageReq) => { export const page = (params: TpageReq) => {
return get<IResponse<TpageRes>>({ return useFetchRequest.get<IResponse<TpageRes>>('/prod-api/app-api/business/app/project-resource/page', params)
url: '/prod-api/app-api/business/app/project-resource/page',
params,
})
} }

View File

@ -1,5 +1,6 @@
import { post, get } from '~/utils/axios' import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
import { TcreateReq, pageReq, pageRes, recommendTopReq, recommendTopRes, parentRes, ProjectDictNodeVO } from './types' import * as useFetchRequest from '~/composables/useFetchRequest'
import type { TcreateReq, pageReq, pageRes, recommendTopReq, recommendTopRes, parentRes, ProjectDictNodeVO } from './types'
/** /**
* 新建图纸 * 新建图纸
@ -7,10 +8,7 @@ import { TcreateReq, pageReq, pageRes, recommendTopReq, recommendTopRes, parentR
* @returns * @returns
*/ */
export const create = (params: TcreateReq) => { export const create = (params: TcreateReq) => {
return post<IResponse<boolean>>({ return useDollarFetchRequest.post<IResponse<boolean>>('/prod-api/app-api/business/app/project/create', params)
url: '/prod-api/app-api/business/app/project/create',
data: params,
})
} }
/** /**
* 获取具有上下级的字典信息 * 获取具有上下级的字典信息
@ -18,10 +16,7 @@ export const create = (params: TcreateReq) => {
* @returns * @returns
*/ */
export const parent = (params: { type: string | number; parentId: number }) => { export const parent = (params: { type: string | number; parentId: number }) => {
return get<IResponse<parentRes[]>>({ return useFetchRequest.get<IResponse<parentRes[]>>('/prod-api/app-api/business/app/dict/parent', params)
url: '/prod-api/app-api/business/app/dict/parent',
params,
})
} }
/** /**
* 获取具有上下级的字典信息 * 获取具有上下级的字典信息
@ -29,9 +24,7 @@ export const parent = (params: { type: string | number; parentId: number }) => {
* @returns * @returns
*/ */
export const indexTabs = () => { export const indexTabs = () => {
return get<IResponse<parentRes[]>>({ return useFetchRequest.get<IResponse<parentRes[]>>('/prod-api/app-api/business/project/index/index-tab3')
url: '/prod-api/app-api/business/project/index/index-tab3',
})
} }
/** /**
* 模糊查询获取标签内容 * 模糊查询获取标签内容
@ -39,10 +32,7 @@ export const indexTabs = () => {
* @returns * @returns
*/ */
export const keywords = (params: { type: string | number; keywords: string }) => { export const keywords = (params: { type: string | number; keywords: string }) => {
return get<IResponse<boolean>>({ return useFetchRequest.get<IResponse<boolean>>('/prod-api/app-api/business/app/dict/label-keywords', params)
url: '/prod-api/app-api/business/app/dict/label-keywords',
params,
})
} }
/** /**
* 获取格式类型字典信息 * 获取格式类型字典信息
@ -50,10 +40,7 @@ export const keywords = (params: { type: string | number; keywords: string }) =>
* @returns * @returns
*/ */
export const labels = (params: { type: string | number }) => { export const labels = (params: { type: string | number }) => {
return get<IResponse<boolean>>({ return useFetchRequest.get<IResponse<boolean>>('/prod-api/app-api/business/app/dict/labels', params)
url: '/prod-api/app-api/business/app/dict/labels',
params,
})
} }
/** /**
* 获得项目表内容信息分页 * 获得项目表内容信息分页
@ -61,10 +48,7 @@ export const labels = (params: { type: string | number }) => {
* @returns * @returns
*/ */
export const page = (params: pageReq) => { export const page = (params: pageReq) => {
return get<IResponse<pageRes>>({ return useFetchRequest.get<IResponse<pageRes>>('/prod-api/app-api/business/app/project-draw/page', params)
url: '/prod-api/app-api/business/app/project-draw/page',
params,
})
} }
/** /**
* 获得项目表内容信息分页 * 获得项目表内容信息分页
@ -72,17 +56,12 @@ export const page = (params: pageReq) => {
* @returns * @returns
*/ */
export const recommendTop = (params: recommendTopReq) => { export const recommendTop = (params: recommendTopReq) => {
return get<IResponse<recommendTopRes[]>>({ return useFetchRequest.get<IResponse<recommendTopRes[]>>('/prod-api/app-api/business/app/project-draw/recommend-top', params)
url: '/prod-api/app-api/business/app/project-draw/recommend-top',
params,
})
} }
/** /**
* 首页-标签 * 首页-标签
*/ */
export const homeLabel = () => { export const homeLabel = () => {
return get<IResponse<ProjectDictNodeVO[]>>({ return useFetchRequest.get<IResponse<ProjectDictNodeVO[]>>('/prod-api/app-api/business/app/dict/index-tab')
url: '/prod-api/app-api/business/app/dict/index-tab',
})
} }

View File

@ -57,7 +57,7 @@
import { loginByMobile } from '~/api/login/index' import { loginByMobile } from '~/api/login/index'
const { $openLogin } = useNuxtApp() const { $openLogin } = useNuxtApp()
import { refreshToken as REFRESHTOKEN } from '~/utils/axios' import REFRESHTOKEN from '~/utils/RefreshToken'
import useUserStore from '~/store/user' import useUserStore from '~/store/user'
const userStore = useUserStore() const userStore = useUserStore()

View File

@ -35,14 +35,14 @@ const useClientRequest = async <T = unknown>(
// 明确转换返回类型 // 明确转换返回类型
const response = await $fetch(url, { ...defaultOptions, ...opts }); const response = await $fetch(url, { ...defaultOptions, ...opts });
return response as unknown as IResponse<T>; return response as unknown as T;
}; };
// GET请求 // GET请求
export const get = <T = unknown>( export const get = <T = unknown>(
endpoint: string, endpoint: string,
config?: Omit<FetchOptions, 'method'> config?: Omit<FetchOptions, 'method'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useClientRequest<T>(endpoint, { ...config, method: 'GET' }) return useClientRequest<T>(endpoint, { ...config, method: 'GET' })
} }
@ -51,7 +51,7 @@ const useClientRequest = async <T = unknown>(
endpoint: string, endpoint: string,
body?: any, body?: any,
config?: Omit<FetchOptions, 'method' | 'body'> config?: Omit<FetchOptions, 'method' | 'body'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useClientRequest<T>(endpoint, { ...config, method: 'POST', body }) return useClientRequest<T>(endpoint, { ...config, method: 'POST', body })
} }
@ -60,7 +60,7 @@ const useClientRequest = async <T = unknown>(
export const del = <T = unknown>( export const del = <T = unknown>(
endpoint: string, endpoint: string,
config?: Omit<FetchOptions, 'method'> config?: Omit<FetchOptions, 'method'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useClientRequest<T>(endpoint, { ...config, method: 'DELETE' }) return useClientRequest<T>(endpoint, { ...config, method: 'DELETE' })
} }
@ -69,6 +69,6 @@ const useClientRequest = async <T = unknown>(
endpoint: string, endpoint: string,
body?: any, body?: any,
config?: Omit<FetchOptions, 'method' | 'body'> config?: Omit<FetchOptions, 'method' | 'body'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useClientRequest<T>(endpoint, { ...config, method: 'PUT', body }) return useClientRequest<T>(endpoint, { ...config, method: 'PUT', body })
} }

View File

@ -35,14 +35,14 @@ const useServerRequest = async <T>(
// return useFetch<T>(url, { ...defaultOptions, ...opts } as any); // return useFetch<T>(url, { ...defaultOptions, ...opts } as any);
// 明确转换返回类型 // 明确转换返回类型
const response = await useFetch<T>(url, { ...defaultOptions, ...opts } as any); const response = await useFetch<T>(url, { ...defaultOptions, ...opts } as any);
return response as unknown as IResponse<T>; return response as unknown as T;
}; };
// GET请求 // GET请求
export const get = <T = unknown>( export const get = <T = unknown>(
endpoint: string, endpoint: string,
config?: Omit<FetchOptions, 'method'> config?: Omit<FetchOptions, 'method'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useServerRequest<T>(endpoint, { ...config, method: 'GET' }) return useServerRequest<T>(endpoint, { ...config, method: 'GET' })
} }
@ -51,7 +51,7 @@ const useServerRequest = async <T>(
endpoint: string, endpoint: string,
body?: any, body?: any,
config?: Omit<FetchOptions, 'method' | 'body'> config?: Omit<FetchOptions, 'method' | 'body'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useServerRequest<T>(endpoint, { ...config, method: 'POST', body }) return useServerRequest<T>(endpoint, { ...config, method: 'POST', body })
} }
@ -60,7 +60,7 @@ const useServerRequest = async <T>(
export const del = <T = unknown>( export const del = <T = unknown>(
endpoint: string, endpoint: string,
config?: Omit<FetchOptions, 'method'> config?: Omit<FetchOptions, 'method'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useServerRequest<T>(endpoint, { ...config, method: 'DELETE' }) return useServerRequest<T>(endpoint, { ...config, method: 'DELETE' })
} }
@ -69,6 +69,6 @@ const useServerRequest = async <T>(
endpoint: string, endpoint: string,
body?: any, body?: any,
config?: Omit<FetchOptions, 'method' | 'body'> config?: Omit<FetchOptions, 'method' | 'body'>
): Promise<IResponse<T>> => { ): Promise<T> => {
return useServerRequest<T>(endpoint, { ...config, method: 'PUT', body }) return useServerRequest<T>(endpoint, { ...config, method: 'PUT', body })
} }

View File

@ -1,13 +1,14 @@
// import { base_api } from '~/constants/index' // import { base_api } from '~/constants/index'
// https://nuxt.com/docs/api/configuration/nuxt-config // https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({ export default defineNuxtConfig({
devServer: { // devServer: {
port: 6188, // port: 6188,
}, // },
devtools: { devtools: {
enabled: process.env.NODE_ENV === "development", enabled: process.env.NODE_ENV === "development",
}, },
debug: process.env.NODE_ENV === "development", // 开启详细调试日志
ssr: true, ssr: true,
modules: ["@unocss/nuxt", "@pinia/nuxt", "@element-plus/nuxt"], modules: ["@unocss/nuxt", "@pinia/nuxt", "@element-plus/nuxt"],

View File

@ -23,7 +23,8 @@
"tinymce": "^8.0.2", "tinymce": "^8.0.2",
"vue": "^3.5.18", "vue": "^3.5.18",
"vue-pdf-embed": "^2.1.3", "vue-pdf-embed": "^2.1.3",
"vue-router": "^4.5.1" "vue-router": "^4.5.1",
"vue3-marquee": "^4.2.2"
}, },
"packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610", "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610",
"devDependencies": { "devDependencies": {

View File

@ -17,7 +17,7 @@
<span v-else class="LiHei (Noncommercial) font-MF text-16px text-[#999999] font-normal">{{ index }}</span> <span v-else class="LiHei (Noncommercial) font-MF text-16px text-[#999999] font-normal">{{ index }}</span>
</div> </div>
<div class="ml-20px w-120px flex items-center text-16px text-[#333333] font-normal"> <div class="ml-20px w-120px flex items-center text-16px text-[#333333] font-normal">
<img :src="item.avatar" alt="" srcset="" class="h-36px w-36px rd-50%" /> <img :src="item?.avatar" alt="" srcset="" class="h-36px w-36px rd-50%" />
<span class="ellipsis1 ml-10px">{{ item.nickname }}</span> <span class="ellipsis1 ml-10px">{{ item.nickname }}</span>
</div> </div>
<div class="ml-20px flex text-14px text-[#666666] font-normal"> <div class="ml-20px flex text-14px text-[#666666] font-normal">
@ -48,7 +48,7 @@
<span v-else class="font-MF LiHei (Noncommercial) text-16px text-[#999999] font-normal">{{ index }}</span> <span v-else class="font-MF LiHei (Noncommercial) text-16px text-[#999999] font-normal">{{ index }}</span>
</div> </div>
<div class="ml-20px w-120px flex items-center text-16px text-[#333333] font-normal"> <div class="ml-20px w-120px flex items-center text-16px text-[#333333] font-normal">
<img :src="item.avatar" alt="" srcset="" class="h-36px w-36px rd-50%" /> <img :src="item?.avatar" alt="" srcset="" class="h-36px w-36px rd-50%" />
<span class="ellipsis1 ml-10px">{{ item.nickname }}</span> <span class="ellipsis1 ml-10px">{{ item.nickname }}</span>
</div> </div>
<div class="ml-20px flex text-14px text-[#666666] font-normal"> <div class="ml-20px flex text-14px text-[#666666] font-normal">
@ -110,7 +110,7 @@
type: 1, type: 1,
limit: 11, limit: 11,
}) })
newDrawList.value = res.data // newDrawList.value = res.data
} }
handlenewDraw() handlenewDraw()
@ -118,8 +118,11 @@
const userTopList = ref<ProjectTrendingScoreUserInfoVO[]>([]) // 最新动态 const userTopList = ref<ProjectTrendingScoreUserInfoVO[]>([]) // 最新动态
const handleuserTop = () => { const handleuserTop = () => {
Promise.all([userTop({ type: 1 }), userTop({})]).then((res) => { Promise.all([userTop({ type: 1 }), userTop({})]).then((res) => {
topList.value = res[0].data // topList.value = res[0].data
userTopList.value = res[1].data // userTopList.value = res[1].data
// console.log('res----',JSON.stringify(res));
}) })
} }
handleuserTop() handleuserTop()

View File

@ -76,7 +76,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { refreshToken as REFRESHTOKEN } from '~/utils/axios' import REFRESHTOKEN from '~/utils/RefreshToken'
import { getCurrentInstance, computed, watchEffect, ref } from 'vue' import { getCurrentInstance, computed, watchEffect, ref } from 'vue'
import { handleLoginQQ, handleLoginWechat } from '~/utils/login' import { handleLoginQQ, handleLoginWechat } from '~/utils/login'
import type { UserStatisticsCountRespVO } from '~/api/personal-center/types' import type { UserStatisticsCountRespVO } from '~/api/personal-center/types'

View File

@ -20,6 +20,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import LoginForm from './LoginForm.vue' import LoginForm from './LoginForm.vue'
import { Vue3Marquee } from 'vue3-marquee'
import { getSettingPage } from '~/api/home/index' import { getSettingPage } from '~/api/home/index'
import type { PageResultIndexSettingRespVO } from '~/api/home/type' import type { PageResultIndexSettingRespVO } from '~/api/home/type'

View File

@ -3,20 +3,20 @@
<!-- 搜索 --> <!-- 搜索 -->
<KlSearch></KlSearch> <KlSearch></KlSearch>
<!-- 菜单 --> <!-- 菜单 -->
<KlMenuV2 /> <!-- <KlMenuV2 /> -->
<!-- banner --> <!-- banner -->
<div class="banner-container"> <div class="banner-container">
<SideMenu class="side-menu" /> <!-- <SideMenu class="side-menu" /> -->
<MainContent class="main-content" /> <!-- <MainContent class="main-content" /> -->
</div> </div>
<!-- 学习方法推荐 --> <!-- 学习方法推荐 -->
<LearningRecommendations></LearningRecommendations> <!-- <LearningRecommendations></LearningRecommendations> -->
<!-- 推荐栏目 --> <!-- 推荐栏目 -->
<RecommendedColumns></RecommendedColumns> <!-- <RecommendedColumns></RecommendedColumns> -->
<!-- 热门图纸 --> <!-- 热门图纸 -->
<PopularDrawings></PopularDrawings> <!-- <PopularDrawings></PopularDrawings> -->
<!-- 排行榜 --> <!-- 排行榜 -->
<Leaderboard></Leaderboard> <!-- <Leaderboard></Leaderboard> -->
</div> </div>
</template> </template>

View File

@ -55,16 +55,18 @@ export default defineStore("useUserStore", {
}, },
// 建立连接mqtt // 建立连接mqtt
async connectMqtt() { async connectMqtt() {
this.mqttClient = new MQTTClient("wss://www.tuxixi.net/mqtt", { if (process.client) {
clientId: this.userInfoRes.id, // this.mqttClient = new MQTTClient("wss://www.tuxixi.net/mqtt", {
}); // clientId: this.userInfoRes.id,
await this.mqttClient.connect(); // });
await this.mqttClient?.subscribe( // await this.mqttClient.connect();
`zbjk_message_single/${this.userInfoRes.id}` // await this.mqttClient?.subscribe(
); // `zbjk_message_single/${this.userInfoRes.id}`
await this.mqttClient?.subscribe( // );
`zbjk_message_kefu/${this.userInfoRes.id}` // await this.mqttClient?.subscribe(
); // `zbjk_message_kefu/${this.userInfoRes.id}`
// );
}
}, },
async getToken(row: any) { async getToken(row: any) {
try { try {

6
types/mqtt.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
// types/mqtt.d.ts
declare module 'mqtt' {
import * as mqttTypes from 'mqtt/types/lib/client-options'
export * from 'mqtt/types/lib/client'
export const connect: mqttTypes.IClientOptions
}

View File

@ -1,7 +1,7 @@
import mqtt, { MqttClient, IClientOptions } from 'mqtt' import mqtt from 'mqtt'
// MQTT 配置 // MQTT 配置
const defaultOptions: IClientOptions = { const defaultOptions: any = {
clean: true, clean: true,
connectTimeout: 4000, connectTimeout: 4000,
clientId: 'vue3-client-' + Math.random().toString(16).substr(2, 8), clientId: 'vue3-client-' + Math.random().toString(16).substr(2, 8),
@ -16,9 +16,9 @@ const defaultOptions: IClientOptions = {
const brokerUrl = 'wss://www.tuxixi.net/mqtt' const brokerUrl = 'wss://www.tuxixi.net/mqtt'
export default class MQTTClient { export default class MQTTClient {
private client: MqttClient | null = null private client: any | null = null
private url: string private url: string
private options: IClientOptions private options: any
constructor(url: string, options = {} as any) { constructor(url: string, options = {} as any) {
this.client = null this.client = null

View File

@ -4769,7 +4769,7 @@ mqtt-packet@^9.0.2:
mqtt@^5.14.0: mqtt@^5.14.0:
version "5.14.0" version "5.14.0"
resolved "https://registry.npmmirror.com/mqtt/-/mqtt-5.14.0.tgz" resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-5.14.0.tgz#eeeb1563884f73cad4fb973449d3973666a4202f"
integrity sha512-H7EmeCJhbGblbWjm6APF5sAH3SkdI7lxHw/UkblZp8fjSNl8b2MsLcdAkIaQKxvZYmiORkdAjffvKjqQWPkd6w== integrity sha512-H7EmeCJhbGblbWjm6APF5sAH3SkdI7lxHw/UkblZp8fjSNl8b2MsLcdAkIaQKxvZYmiORkdAjffvKjqQWPkd6w==
dependencies: dependencies:
"@types/readable-stream" "^4.0.21" "@types/readable-stream" "^4.0.21"
@ -6932,6 +6932,11 @@ vue-router@^4.5.1:
dependencies: dependencies:
"@vue/devtools-api" "^6.6.4" "@vue/devtools-api" "^6.6.4"
vue3-marquee@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/vue3-marquee/-/vue3-marquee-4.2.2.tgz#e5316591e5412931856d5a7e5aa2b34be4388673"
integrity sha512-FeFvGUVInKfFilXFcnl8sDRBJBZCZSNLlQDquJErB9db6W2xICRVqbRV/jtdzsEP0rftarLQhx9MeEAU0+TPuQ==
vue@^3.5.18: vue@^3.5.18:
version "3.5.18" version "3.5.18"
resolved "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz" resolved "https://registry.npmmirror.com/vue/-/vue-3.5.18.tgz"