Refactor API requests and update component imports
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
import { get, post, Delete, put } from '@/utils/axios'
|
import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
|
||||||
import {
|
import * as useFetchRequest from '~/composables/useFetchRequest'
|
||||||
|
import type {
|
||||||
TpageReq,
|
TpageReq,
|
||||||
TpageRes,
|
TpageRes,
|
||||||
TcreateReq,
|
TcreateReq,
|
||||||
@ -19,10 +20,7 @@ import {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const page = (params: TpageReq) => {
|
export const page = (params: TpageReq) => {
|
||||||
return get<IResponse<TpageRes>>({
|
return useFetchRequest.get<IResponse<TpageRes>>('/prod-api/app-api/business/posts/page', params)
|
||||||
url: '/prod-api/app-api/business/posts/page',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,49 +28,35 @@ export const page = (params: TpageReq) => {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const create = (params: TcreateReq) => {
|
export const create = (params: TcreateReq) => {
|
||||||
return post<IResponse<number>>({
|
return useDollarFetchRequest.post<IResponse<number>>('/prod-api/app-api/business/posts/create', params)
|
||||||
url: '/prod-api/app-api/business/posts/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获得论坛频道列表
|
* 获得论坛频道列表
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const list = () => {
|
export const list = () => {
|
||||||
return get<IResponse<TlistRes[]>>({
|
return useFetchRequest.get<IResponse<TlistRes[]>>('/prod-api/app-api/business/channel/list')
|
||||||
url: '/prod-api/app-api/business/channel/list',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获得论坛频道列表
|
* 获得论坛频道列表
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getChannelPosts = (params: { id: number }) => {
|
export const getChannelPosts = (params: { id: number }) => {
|
||||||
return get<IResponse<TGetChannelPostsRes[]>>({
|
return useFetchRequest.get<IResponse<TGetChannelPostsRes[]>>('/prod-api/app-api/business/posts/get', params)
|
||||||
url: '/prod-api/app-api/business/posts/get',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 删除频道帖子
|
* 删除频道帖子
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const postsDelete = (params: { id: number }) => {
|
export const postsDelete = (params: { id: number }) => {
|
||||||
return Delete<IResponse<boolean>>({
|
return useDollarFetchRequest.del<IResponse<boolean>>('/prod-api/app-api/business/posts/delete', { params })
|
||||||
url: '/prod-api/app-api/business/posts/delete',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获取帖子详情
|
* 获取帖子详情
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getChannelDetail = (params: { id: string }) => {
|
export const getChannelDetail = (params: { id: string }) => {
|
||||||
return get<IResponse<TGetChannelPostsRes>>({
|
return useFetchRequest.get<IResponse<TGetChannelPostsRes>>('/prod-api/app-api/business/posts/get', params)
|
||||||
url: '/prod-api/app-api/business/posts/get',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,20 +64,14 @@ export const getChannelDetail = (params: { id: string }) => {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const postscommentpage = (params: { postsId: string; pageNo: number; pageSize: number }) => {
|
export const postscommentpage = (params: { postsId: string; pageNo: number; pageSize: number }) => {
|
||||||
return get<IResponse<PageResultPostsCommentRespVO>>({
|
return useFetchRequest.get<IResponse<PageResultPostsCommentRespVO>>('/prod-api/app-api/business/posts-comment/page', params)
|
||||||
url: '/prod-api/app-api/business/posts-comment/page',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 创建帖子评论
|
* 创建帖子评论
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const createPostsComment = (params: { postsId: string; content: string; commentId?: string }) => {
|
export const createPostsComment = (params: { postsId: string; content: string; commentId?: string }) => {
|
||||||
return post<IResponse<number>>({
|
return useDollarFetchRequest.post<IResponse<number>>('/prod-api/app-api/business/posts-comment/create', params)
|
||||||
url: '/prod-api/app-api/business/posts-comment/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,102 +79,68 @@ export const createPostsComment = (params: { postsId: string; content: string; c
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const sendSingleChat = (params: sendSingleChatReq) => {
|
export const sendSingleChat = (params: sendSingleChatReq) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post<IResponse<any>>('/prod-api/app-api/mqtt/message/send/single', params)
|
||||||
url: '/prod-api/app-api/mqtt/message/send/single',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送客服消息
|
* 发送客服消息
|
||||||
*/
|
*/
|
||||||
export const sendKefuMessage = (params: SingleMessageVo) => {
|
export const sendKefuMessage = (params: SingleMessageVo) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post<IResponse<any>>('/prod-api/app-api/mqtt/message/send/kefu', params)
|
||||||
url: '/prod-api/app-api/mqtt/message/send/kefu',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得消息记录分页
|
* 获得消息记录分页
|
||||||
*/
|
*/
|
||||||
export const getMessagePage = (params: { pageNo: number; pageSize: number; fromId?: number; msgType?: number; topic: string }) => {
|
export const getMessagePage = (params: { pageNo: number; pageSize: number; fromId?: number; msgType?: number; topic: string }) => {
|
||||||
return get<IResponse<PageResultMessageRespVO>>({
|
return useFetchRequest.get<IResponse<PageResultMessageRespVO>>('/prod-api/app-api/mqtt/message/page', params)
|
||||||
url: '/prod-api/app-api/mqtt/message/page',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会话列表
|
* 会话列表
|
||||||
*/
|
*/
|
||||||
export const conversationList = () => {
|
export const conversationList = () => {
|
||||||
return get<IResponse<PageResultSessionRespVO[]>>({
|
return useFetchRequest.get<IResponse<PageResultSessionRespVO[]>>('/prod-api/app-api/mqtt/session/list')
|
||||||
url: '/prod-api/app-api/mqtt/session/list',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取聊天记录
|
* 获取聊天记录
|
||||||
*/
|
*/
|
||||||
export const getChatDetail = (params: { sessionId: number; pageNo: number; pageSize: number }) => {
|
export const getChatDetail = (params: { sessionId: number; pageNo: number; pageSize: number }) => {
|
||||||
return get<IResponse<PageResultMessageRespVO>>({
|
return useFetchRequest.get<IResponse<PageResultMessageRespVO>>('/prod-api/app-api/mqtt/message/pageBySession', params)
|
||||||
url: '/prod-api/app-api/mqtt/message/pageBySession',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清空未读信息
|
* 清空未读信息
|
||||||
*/
|
*/
|
||||||
export const clearUnreadMessage = (params: { id: number }) => {
|
export const clearUnreadMessage = (params: { id: number }) => {
|
||||||
return put<IResponse<boolean>>({
|
return useDollarFetchRequest.put<IResponse<boolean>>('/prod-api/app-api/mqtt/session/clear', { params })
|
||||||
url: '/prod-api/app-api/mqtt/session/clear',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得论坛频道
|
* 获得论坛频道
|
||||||
*/
|
*/
|
||||||
export const getChannelLunTanDetail = (params: { id: string }) => {
|
export const getChannelLunTanDetail = (params: { id: string }) => {
|
||||||
return get<IResponse<ChannelRespVO>>({
|
return useFetchRequest.get<IResponse<ChannelRespVO>>('/prod-api/app-api/business/channel/get', params)
|
||||||
url: '/prod-api/app-api/business/channel/get',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建论坛关注
|
* 创建论坛关注
|
||||||
*/
|
*/
|
||||||
export const createChannelFollow = (params: { channelId: string }) => {
|
export const createChannelFollow = (params: { channelId: string }) => {
|
||||||
return post<IResponse<boolean>>({
|
return useDollarFetchRequest.post<IResponse<boolean>>('/prod-api/app-api/business/channel-follow/create', params)
|
||||||
url: '/prod-api/app-api/business/channel-follow/create',
|
|
||||||
data: params,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除论坛关注
|
* 删除论坛关注
|
||||||
*/
|
*/
|
||||||
export const deleteChannelFollow = (params: { channelId: string }) => {
|
export const deleteChannelFollow = (params: { channelId: string }) => {
|
||||||
return Delete<IResponse<boolean>>({
|
return useDollarFetchRequest.del<IResponse<boolean>>('/prod-api/app-api/business/channel-follow/delete', { params })
|
||||||
url: '/prod-api/app-api/business/channel-follow/delete',
|
|
||||||
params,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据群组ID获取群组成员
|
* 根据群组ID获取群组成员
|
||||||
*/
|
*/
|
||||||
export const getGroupMembers = (params: { channelId: string }) => {
|
export const getGroupMembers = (params: { channelId: string }) => {
|
||||||
return get<IResponse<MemberUserRespDTO[]>>({
|
return useFetchRequest.get<IResponse<MemberUserRespDTO[]>>(`/prod-api/app-api/mqtt/session/users/${params.channelId}`)
|
||||||
url: `/prod-api/app-api/mqtt/session/users/${params.channelId}`,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,45 +1,34 @@
|
|||||||
import { post, get } from '@/utils/axios'
|
import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
|
||||||
import type { AppMemberUserInfoRespVO, NotifyMessageRespVO, fileCreateReqVO } from '@/api/common/types'
|
import * as useFetchRequest from '~/composables/useFetchRequest'
|
||||||
|
import type { AppMemberUserInfoRespVO, NotifyMessageRespVO, fileCreateReqVO } from '~/api/common/types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取省份地区
|
* 获取省份地区
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const tree = (params: { id?: number | string }) => {
|
export const tree = (params: { id?: number | string }) => {
|
||||||
return get<IResponse<any[]>>({
|
return useFetchRequest.get<IResponse<any[]>>('/prod-api/app-api/system/area/tree', { params })
|
||||||
url: '/prod-api/app-api/system/area/tree',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 上传附件
|
* 上传附件
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const upload = (uploadUrl = '/prod-api/app-api/infra/file/upload', params: any) => {
|
export const upload = (uploadUrl = '/prod-api/app-api/infra/file/upload', params: any) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post<IResponse<any>>(uploadUrl, params)
|
||||||
url: uploadUrl,
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 上传附件
|
* 上传附件
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const uploadV2 = (uploadUrl = '/prod-api/app-api/infra/file/presigned-url', params: any) => {
|
export const uploadV2 = (uploadUrl = '/prod-api/app-api/infra/file/presigned-url', params: any) => {
|
||||||
return get<IResponse<any>>({
|
return useDollarFetchRequest.get<IResponse<any>>(uploadUrl, { params })
|
||||||
url: uploadUrl,
|
|
||||||
params: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建文件
|
* 创建文件
|
||||||
*/
|
*/
|
||||||
export const creatFile = (params: fileCreateReqVO) => {
|
export const creatFile = (params: fileCreateReqVO) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post<IResponse<any>>('/prod-api/app-api/infra/file/create', params)
|
||||||
url: '/prod-api/app-api/infra/file/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,9 +36,7 @@ export const creatFile = (params: fileCreateReqVO) => {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getUserInfo = () => {
|
export const getUserInfo = () => {
|
||||||
return get<IResponse<AppMemberUserInfoRespVO>>({
|
return useFetchRequest.get<IResponse<AppMemberUserInfoRespVO>>('/prod-api/app-api/member/user/get')
|
||||||
url: '/prod-api/app-api/member/user/get',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,17 +53,11 @@ export const getUserInfo = () => {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const sendSms = (params: { mobile: string; scene: number }) => {
|
export const sendSms = (params: { mobile: string; scene: number }) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post<IResponse<any>>('/prod-api/app-api/member/auth/send-sms-code', params)
|
||||||
url: '/prod-api/app-api/member/auth/send-sms-code',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获得站内信
|
* 获得站内信
|
||||||
*/
|
*/
|
||||||
export const getMessage = (params: { id: number }) => {
|
export const getMessage = (params: { id: number }) => {
|
||||||
return get<IResponse<NotifyMessageRespVO>>({
|
return useFetchRequest.get<IResponse<NotifyMessageRespVO>>('/prod-api/app-api/system/notify-message/get', { params })
|
||||||
url: '/prod-api/app-api/system/notify-message/get',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,13 @@
|
|||||||
import { get, post, Delete } from '@/utils/axios'
|
import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
|
||||||
import { ProjectRespVO, PageResultProjectCommentResVO, ProjectDrawPageRespVO, UserExtendSimpleRespDTO, ProjectDrawMemberRespVO } from './types'
|
import * as useFetchRequest from '~/composables/useFetchRequest'
|
||||||
|
import type { ProjectRespVO, PageResultProjectCommentResVO, ProjectDrawPageRespVO, UserExtendSimpleRespDTO, ProjectDrawMemberRespVO } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取图纸详情
|
* 获取图纸详情
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getDetail = (params: { id?: number | string }) => {
|
export const getDetail = (params: { id?: number | string }) => {
|
||||||
return get<IResponse<ProjectRespVO>>({
|
return useFetchRequest.get<IResponse<ProjectRespVO>>('/prod-api/app-api/business/app/project-draw/preview', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-draw/preview',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -17,10 +15,7 @@ export const getDetail = (params: { id?: number | string }) => {
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getCommentList = (params: { relationId?: number | string; pageNum?: number; pageSize?: number }) => {
|
export const getCommentList = (params: { relationId?: number | string; pageNum?: number; pageSize?: number }) => {
|
||||||
return get<IResponse<PageResultProjectCommentResVO>>({
|
return useFetchRequest.get<IResponse<PageResultProjectCommentResVO>>('/prod-api/app-api/business/app/project-comment/page', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-comment/page',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,10 +23,7 @@ export const getCommentList = (params: { relationId?: number | string; pageNum?:
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const createComment = (params: { relationId?: number | string; content?: string; projectId?: number | string }) => {
|
export const createComment = (params: { relationId?: number | string; content?: string; projectId?: number | string }) => {
|
||||||
return post<IResponse<boolean>>({
|
return useDollarFetchRequest.post<IResponse<boolean>>('/prod-api/app-api/business/app/project-comment/create', params)
|
||||||
url: '/prod-api/app-api/business/app/project-comment/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,10 +31,7 @@ export const createComment = (params: { relationId?: number | string; content?:
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getRelationRecommend = (params: { type?: number | string; projectType?: number | string }) => {
|
export const getRelationRecommend = (params: { type?: number | string; projectType?: number | string }) => {
|
||||||
return get<IResponse<ProjectDrawPageRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawPageRespVO[]>>('/prod-api/app-api/business/app/project-draw/top-list', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-draw/top-list',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,10 +39,7 @@ export const getRelationRecommend = (params: { type?: number | string; projectTy
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const report = (params: { id?: number | string; title?: string; comments?: string; files?: any; projectId: any; drawId: any }) => {
|
export const report = (params: { id?: number | string; title?: string; comments?: string; files?: any; projectId: any; drawId: any }) => {
|
||||||
return post<IResponse<boolean>>({
|
return useDollarFetchRequest.post<IResponse<boolean>>('/prod-api/app-api/business/project-report/create', params)
|
||||||
url: '/prod-api/app-api/business/project-report/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,58 +47,38 @@ export const report = (params: { id?: number | string; title?: string; comments?
|
|||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
export const getUserInfo = (params: { id?: number | string }) => {
|
export const getUserInfo = (params: { id?: number | string }) => {
|
||||||
return get<IResponse<UserExtendSimpleRespDTO>>({
|
return useFetchRequest.get<IResponse<UserExtendSimpleRespDTO>>('/prod-api/app-api/business/app/project-draw/preview-user-info', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-draw/preview-user-info',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前用户的主要作品内容
|
* 当前用户的主要作品内容
|
||||||
*/
|
*/
|
||||||
export const getMainWork = (params: { id?: number | string; limit: number; memberId?: number | string }) => {
|
export const getMainWork = (params: { id?: number | string; limit: number; memberId?: number | string }) => {
|
||||||
return get<IResponse<ProjectDrawMemberRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawMemberRespVO[]>>('/prod-api/app-api/business/app/project-draw/preview-user-projects', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-draw/preview-user-projects',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 创建内容信息
|
* 创建内容信息
|
||||||
*/
|
*/
|
||||||
export const createContent = (params: { projectId: any; drawId: any }) => {
|
export const createContent = (params: { projectId: any; drawId: any }) => {
|
||||||
return post<IResponse<boolean>>({
|
return useDollarFetchRequest.post<IResponse<boolean>>('/prod-api/app-api/business/project-member-favorites/create', params)
|
||||||
url: '/prod-api/app-api/business/project-member-favorites/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建用户项目、工具箱下载
|
* 创建用户项目、工具箱下载
|
||||||
*/
|
*/
|
||||||
export const createUserProject = (params: { relationId: any; type: any }) => {
|
export const createUserProject = (params: { relationId: any; type: any }) => {
|
||||||
return post<IResponse<string>>({
|
return useDollarFetchRequest.post<IResponse<string>>('/prod-api/app-api/business/project-member-file/create', params)
|
||||||
url: '/prod-api/app-api/business/project-member-file/create',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 删除项目订单用户收藏信息
|
* 删除项目订单用户收藏信息
|
||||||
*/
|
*/
|
||||||
export const deleteProject = (params: { id: any }) => {
|
export const deleteProject = (params: { id: any }) => {
|
||||||
return Delete<IResponse<boolean>>({
|
return useDollarFetchRequest.del<IResponse<boolean>>('/prod-api/app-api/business/project-member-favorites/delete', { params })
|
||||||
url: '/prod-api/app-api/business/project-member-favorites/delete',
|
|
||||||
data: params,
|
|
||||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除工具箱信息
|
* 删除工具箱信息
|
||||||
*/
|
*/
|
||||||
export const deleteTool = (params: { id: any }) => {
|
export const deleteTool = (params: { id: any }) => {
|
||||||
return Delete<IResponse<boolean>>({
|
return useDollarFetchRequest.del<IResponse<boolean>>('/prod-api/app-api/business/project-resource/delete', { params })
|
||||||
url: '/prod-api/app-api/business/project-resource/delete',
|
|
||||||
data: params,
|
|
||||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { get } from '@/utils/axios'
|
import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
|
||||||
import {
|
import * as useFetchRequest from '~/composables/useFetchRequest'
|
||||||
|
import type {
|
||||||
ThotTopReq,
|
ThotTopReq,
|
||||||
ProjectDrawPageRespVO,
|
ProjectDrawPageRespVO,
|
||||||
ProjectDictNodeVO,
|
ProjectDictNodeVO,
|
||||||
@ -14,10 +15,7 @@ import {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const hotTop = (params: ThotTopReq) => {
|
export const hotTop = (params: ThotTopReq) => {
|
||||||
return get<IResponse<ProjectDrawPageRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawPageRespVO[]>>('/prod-api/app-api/business/app/project-draw/hot-top', { params })
|
||||||
url: '/prod-api/app-api/business/app/project-draw/hot-top',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,85 +24,60 @@ export const hotTop = (params: ThotTopReq) => {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const recommendTop = (params: ThotTopReq) => {
|
export const recommendTop = (params: ThotTopReq) => {
|
||||||
return get<IResponse<ProjectDrawPageRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawPageRespVO[]>>('/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 newDraw = (params: { type: number; limit: number }) => {
|
export const newDraw = (params: { type: number; limit: number }) => {
|
||||||
return get<IResponse<ProjectDrawPageRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawPageRespVO[]>>('/prod-api/app-api/business/project/index/draw-new', { params })
|
||||||
url: '/prod-api/app-api/business/project/index/draw-new',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 首页-热点标签
|
* 首页-热点标签
|
||||||
*/
|
*/
|
||||||
export const hotTag = (params: { type: number; limit: number; size: number }) => {
|
export const hotTag = (params: { type: number; limit: number; size: number }) => {
|
||||||
return get<IResponse<ProjectDictNodeVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDictNodeVO[]>>('/prod-api/app-api/business/project/index/index-hot-tab', { params })
|
||||||
url: '/prod-api/app-api/business/project/index/index-hot-tab',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 首页-标签
|
* 首页-标签
|
||||||
*/
|
*/
|
||||||
export const tag = () => {
|
export const tag = () => {
|
||||||
return get<IResponse<ProjectDictNodeVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDictNodeVO[]>>('/prod-api/app-api/business/project/index/index-tab', {})
|
||||||
url: '/prod-api/app-api/business/project/index/index-tab',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取top数据
|
* 获取top数据
|
||||||
*/
|
*/
|
||||||
export const top = (params: { type: number; limit: number }) => {
|
export const top = (params: { type: number; limit: number }) => {
|
||||||
return get<IResponse<ProjectDrawStatisticAppRespVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDrawStatisticAppRespVO[]>>('/prod-api/app-api/business/project/index/top', { params })
|
||||||
url: '/prod-api/app-api/business/project/index/top',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户top数据
|
* 获取用户top数据
|
||||||
*/
|
*/
|
||||||
export const userTop = (params: { type?: number }) => {
|
export const userTop = (params: { type?: number }) => {
|
||||||
return get<IResponse<ProjectTrendingScoreUserInfoVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectTrendingScoreUserInfoVO[]>>('/prod-api/app-api/business/project/index/user-top', { params })
|
||||||
url: '/prod-api/app-api/business/project/index/user-top',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置首页设置信息分页
|
* 设置首页设置信息分页
|
||||||
*/
|
*/
|
||||||
export const settinngPage = (params: { pageNo?: number; pageSize: number; type: number; status: number; innerType?: number }) => {
|
export const settinngPage = (params: { pageNo?: number; pageSize: number; type: number; status: number; innerType?: number }) => {
|
||||||
return get<IResponse<PageResultIndexSettingRespVO>>({
|
return useFetchRequest.get<IResponse<PageResultIndexSettingRespVO>>('/prod-api/admin-api/system/index-setting/page', { params })
|
||||||
url: '/prod-api/admin-api/system/index-setting/page',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 获得首页设置信息分页
|
* 获得首页设置信息分页
|
||||||
*/
|
*/
|
||||||
export const getSettingPage = (params: { type: number }) => {
|
export const getSettingPage = (params: { type: number }) => {
|
||||||
return get<IResponse<PageResultIndexSettingRespVO[]>>({
|
return useFetchRequest.get<IResponse<PageResultIndexSettingRespVO[]>>('/prod-api/app-api/system/index-setting/list', { params })
|
||||||
url: '/prod-api/app-api/system/index-setting/list',
|
|
||||||
params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 首页-标签2
|
* 首页-标签2
|
||||||
*/
|
*/
|
||||||
export const tab2 = () => {
|
export const tab2 = () => {
|
||||||
return get<IResponse<ProjectDictNodeVO[]>>({
|
return useFetchRequest.get<IResponse<ProjectDictNodeVO[]>>('/prod-api/app-api/business/project/index/index-tab2', {})
|
||||||
url: '/prod-api/app-api/business/project/index/index-tab2',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { post, put } from '@/utils/axios'
|
import * as useDollarFetchRequest from '~/composables/useDollarFetchRequest'
|
||||||
import { LoginParams, LoginResponseData, AppAuthLoginRespVO } from './types'
|
import * as useFetchRequest from '~/composables/useFetchRequest'
|
||||||
|
import type { LoginParams, LoginResponseData, AppAuthLoginRespVO } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新建图纸
|
* 新建图纸
|
||||||
@ -7,63 +8,39 @@ import { LoginParams, LoginResponseData, AppAuthLoginRespVO } from './types'
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const login = (params: LoginParams) => {
|
export const login = (params: LoginParams) => {
|
||||||
return post<IResponse<LoginResponseData>>({
|
return useDollarFetchRequest.post('/prod-api/app-api/member/auth/login', params)
|
||||||
url: '/prod-api/app-api/member/auth/login',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送手机验证码
|
* 发送手机验证码
|
||||||
*/
|
*/
|
||||||
export const sendCode = (params: { mobile: string }) => {
|
export const sendCode = (params: { mobile: string }) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post('/prod-api/app-api/member/auth/send-sms-code', params)
|
||||||
url: '/prod-api/app-api/member/auth/send-sms-code',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 使用手机 + 验证码登录
|
* 使用手机 + 验证码登录
|
||||||
*/
|
*/
|
||||||
export const loginByMobile = (params: { mobile: string; code: string; socialCode?: string; socialType?: string; socialState?: string }) => {
|
export const loginByMobile = (params: { mobile: string; code: string; socialCode?: string; socialType?: string; socialState?: string }) => {
|
||||||
return post<IResponse<AppAuthLoginRespVO>>({
|
return useDollarFetchRequest.post('/prod-api/app-api/member/auth/sms-login', params)
|
||||||
url: '/prod-api/app-api/member/auth/sms-login',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送邮箱验证码
|
* 发送邮箱验证码
|
||||||
*/
|
*/
|
||||||
export const sendEmailCode = (params: { email: string }) => {
|
export const sendEmailCode = (params: { email: string }) => {
|
||||||
return post<IResponse<any>>({
|
return useDollarFetchRequest.post('/prod-api/app-api/member/auth/send-email-code', params)
|
||||||
url: '/prod-api/app-api/member/auth/send-email-code',
|
|
||||||
data: params,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用邮箱 + 验证码登录
|
* 使用邮箱 + 验证码登录
|
||||||
*/
|
*/
|
||||||
export const loginByEmail = (params: { email: string; code: string }) => {
|
export const loginByEmail = (params: { email: string; code: string }) => {
|
||||||
return post<IResponse<AppAuthLoginRespVO>>({
|
return useDollarFetchRequest.post('/prod-api/app-api/member/auth/verify-code', params)
|
||||||
url: '/prod-api/app-api/member/auth/verify-code',
|
|
||||||
data: params,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重置密码
|
* 重置密码
|
||||||
*/
|
*/
|
||||||
export const resetPassoword = (params: { password: string; code: string }) => {
|
export const resetPassword = (params: { password: string; code: string }) => {
|
||||||
return put<IResponse<boolean>>({
|
return useDollarFetchRequest.put('/prod-api/app-api/member/user/update-password', params)
|
||||||
url: '/prod-api/app-api/member/user/update-password',
|
|
||||||
data: params,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { get, post } from '@/utils/axios'
|
import { get, post } from '~/utils/axios'
|
||||||
import { AppPayWalletPackageRespVO, PayOrderSubmitReqVO, PayOrderRespVO, PageResultAppPayWalletRechargeRespVO } from './types'
|
import { AppPayWalletPackageRespVO, PayOrderSubmitReqVO, PayOrderRespVO, PageResultAppPayWalletRechargeRespVO } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { get, post, put, Delete } from '@/utils/axios'
|
import { get, post, put, Delete } from '~/utils/axios'
|
||||||
import {
|
import {
|
||||||
UserExtendSaveReqVO,
|
UserExtendSaveReqVO,
|
||||||
UserExtendRespVO,
|
UserExtendRespVO,
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { post, get } from '@/utils/axios'
|
import { post, get } from '~/utils/axios'
|
||||||
import { TcreateReq, TpageReq, TpageRes } from './types'
|
import { TcreateReq, TpageReq, TpageRes } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { post, get } from '@/utils/axios'
|
import { post, get } from '~/utils/axios'
|
||||||
import { TcreateReq, pageReq, pageRes, recommendTopReq, recommendTopRes, parentRes, ProjectDictNodeVO } from './types'
|
import { TcreateReq, pageReq, pageRes, recommendTopReq, recommendTopRes, parentRes, ProjectDictNodeVO } from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
2
app.vue
2
app.vue
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<NuxtLoadingIndicator />
|
<NuxtLoadingIndicator />
|
||||||
<NuxtWelcome />
|
<NuxtPage />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -34,8 +34,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { getCommentList, createComment } from '@/api/drawe-detail'
|
import { getCommentList, createComment } from '~/api/drawe-detail'
|
||||||
import type { PageResultProjectCommentResVO } from '@/api/drawe-detail/types'
|
import type { PageResultProjectCommentResVO } from '~/api/drawe-detail/types'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
relationId: {
|
relationId: {
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
import type { ProjectDrawPageRespVO } from '@/api/home/type'
|
import type { ProjectDrawPageRespVO } from '~/api/home/type'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
cardItemInfo: {
|
cardItemInfo: {
|
||||||
|
|||||||
@ -14,15 +14,15 @@
|
|||||||
<div class="mt-24px flex items-center justify-between">
|
<div class="mt-24px flex items-center justify-between">
|
||||||
<div class="flex items-center justify-between text-14px text-[#666666] font-normal">
|
<div class="flex items-center justify-between text-14px text-[#666666] font-normal">
|
||||||
<div class="mr-9px flex items-center">
|
<div class="mr-9px flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="mr-2px h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="mr-2px h-17px" />
|
||||||
<span class="color-#666">{{ props.itemInfo.previewPoint }}</span>
|
<span class="color-#666">{{ props.itemInfo.previewPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mr-9px flex items-center">
|
<div class="mr-9px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" srcset="" class="mr-2px h-22px" />
|
<img src="~/assets/images/add.png" alt="" srcset="" class="mr-2px h-22px" />
|
||||||
<span class="color-#666">{{ props.itemInfo.hotPoint }}</span>
|
<span class="color-#666">{{ props.itemInfo.hotPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px" />
|
||||||
<span class="color-#666">{{ props.itemInfo.commentsPoint }}</span>
|
<span class="color-#666">{{ props.itemInfo.commentsPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
import type { pageRes } from '@/api/upnew/types'
|
import type { pageRes } from '~/api/upnew/types'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
itemInfo: {
|
itemInfo: {
|
||||||
type: Object as PropType<pageRes['list'][0]>,
|
type: Object as PropType<pageRes['list'][0]>,
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
||||||
<!-- 左侧插图 -->
|
<!-- 左侧插图 -->
|
||||||
<div class="login-left">
|
<div class="login-left">
|
||||||
<img src="@/assets/images/login-illustration.png" alt="login" class="login-img" />
|
<img src="~/assets/images/login-illustration.png" alt="login" class="login-img" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧登录表单 -->
|
<!-- 右侧登录表单 -->
|
||||||
@ -56,15 +56,15 @@
|
|||||||
<!-- 第三方登录 -->
|
<!-- 第三方登录 -->
|
||||||
<div class="third-party-login">
|
<div class="third-party-login">
|
||||||
<div class="login-icons" @click="handleLoginQQ">
|
<div class="login-icons" @click="handleLoginQQ">
|
||||||
<img src="@/assets/images/qq-v2.png" alt="QQ登录" class="login-icon" />
|
<img src="~/assets/images/qq-v2.png" alt="QQ登录" class="login-icon" />
|
||||||
<div class="icon-text">QQ登录</div>
|
<div class="icon-text">QQ登录</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-icons" @click="handleLoginWechat">
|
<div class="login-icons" @click="handleLoginWechat">
|
||||||
<img src="@/assets/images/weixin-v2.png" alt="微信登录" class="login-icon" />
|
<img src="~/assets/images/weixin-v2.png" alt="微信登录" class="login-icon" />
|
||||||
<div class="icon-text">微信登录</div>
|
<div class="icon-text">微信登录</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-icons" @click="goToLogin">
|
<div class="login-icons" @click="goToLogin">
|
||||||
<img src="@/assets/images/email-v2.png" alt="邮箱登录" class="login-icon" />
|
<img src="~/assets/images/email-v2.png" alt="邮箱登录" class="login-icon" />
|
||||||
<div class="icon-text">账号登录</div>
|
<div class="icon-text">账号登录</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,10 +84,10 @@
|
|||||||
import { User, Lock, Close } from '@element-plus/icons-vue'
|
import { User, Lock, Close } from '@element-plus/icons-vue'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { login, sendEmailCode, loginByEmail } from '@/api/login/index'
|
import { login, sendEmailCode, loginByEmail } from '~/api/login/index'
|
||||||
import refreshToken from '@/utils/RefreshToken'
|
import refreshToken from '~/utils/RefreshToken'
|
||||||
import { handleLoginQQ, handleLoginWechat, generateRandomString } from '@/utils/login'
|
import { handleLoginQQ, handleLoginWechat, generateRandomString } from '~/utils/login'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const { $openRegister, $openLogin } = useNuxtApp()
|
const { $openRegister, $openLogin } = useNuxtApp()
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
||||||
<!-- 左侧插图 -->
|
<!-- 左侧插图 -->
|
||||||
<div class="login-left">
|
<div class="login-left">
|
||||||
<img src="@/assets/images/login-illustration.png" alt="login" class="login-img" />
|
<img src="~/assets/images/login-illustration.png" alt="login" class="login-img" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧登录表单 -->
|
<!-- 右侧登录表单 -->
|
||||||
@ -56,15 +56,15 @@
|
|||||||
<!-- 第三方登录 -->
|
<!-- 第三方登录 -->
|
||||||
<div class="third-party-login">
|
<div class="third-party-login">
|
||||||
<div class="login-icons" @click="handleLoginQQ">
|
<div class="login-icons" @click="handleLoginQQ">
|
||||||
<img src="@/assets/images/qq-v2.png" alt="QQ登录" class="login-icon" />
|
<img src="~/assets/images/qq-v2.png" alt="QQ登录" class="login-icon" />
|
||||||
<div class="icon-text">QQ登录</div>
|
<div class="icon-text">QQ登录</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-icons" @click="handleLoginWechat">
|
<div class="login-icons" @click="handleLoginWechat">
|
||||||
<img src="@/assets/images/weixin-v2.png" alt="微信登录" class="login-icon" />
|
<img src="~/assets/images/weixin-v2.png" alt="微信登录" class="login-icon" />
|
||||||
<div class="icon-text">微信登录</div>
|
<div class="icon-text">微信登录</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="login-icons" @click="handleLoginEmail">
|
<div class="login-icons" @click="handleLoginEmail">
|
||||||
<img src="@/assets/images/email-v2.png" alt="邮箱登录" class="login-icon" />
|
<img src="~/assets/images/email-v2.png" alt="邮箱登录" class="login-icon" />
|
||||||
<div class="icon-text">邮箱登录</div>
|
<div class="icon-text">邮箱登录</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,11 +84,11 @@
|
|||||||
import { User, Lock, Close } from '@element-plus/icons-vue'
|
import { User, Lock, Close } from '@element-plus/icons-vue'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { login, loginByMobile } from '@/api/login/index'
|
import { login, loginByMobile } from '~/api/login/index'
|
||||||
import { sendSms } from '@/api/common/index'
|
import { sendSms } from '~/api/common/index'
|
||||||
import { refreshToken as REFRESHTOKEN } from '@/utils/axios'
|
import REFRESHTOKEN from '~/utils/RefreshToken'
|
||||||
import { handleLoginQQ, handleLoginWechat } from '@/utils/login'
|
import { handleLoginQQ, handleLoginWechat } from '~/utils/login'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const { $openRegister, $openLogin, $openLoginEmail } = useNuxtApp()
|
const { $openRegister, $openLogin, $openLoginEmail } = useNuxtApp()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
@ -157,7 +157,7 @@
|
|||||||
const handleRegister = () => {
|
const handleRegister = () => {
|
||||||
props.onClose()
|
props.onClose()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
$openRegister()
|
// $openRegister()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 发送验证码
|
// 发送验证码
|
||||||
@ -262,7 +262,7 @@
|
|||||||
const handleLoginEmail = () => {
|
const handleLoginEmail = () => {
|
||||||
props.onClose()
|
props.onClose()
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
$openLoginEmail()
|
// $openLoginEmail()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="w-100% border-b-1px border-b-[#eee] border-b-solid">
|
<div class="w-100% border-b-1px border-b-[#eee] border-b-solid">
|
||||||
<div class="relative ma-auto flex items-center py-20px w-1500px!">
|
<div class="relative ma-auto flex items-center py-20px w-1500px!">
|
||||||
<img src="@/assets/images/logo5.png" alt="图夕夕" srcset="" class="h-51px w-182px cursor-pointer" @click="router.push('/index')" />
|
<img src="~/assets/images/logo5.png" alt="图夕夕" srcset="" class="h-51px w-182px cursor-pointer" @click="router.push('/index')" />
|
||||||
<div class="ml-60px flex items-center">
|
<div class="ml-60px flex items-center">
|
||||||
<span v-for="item in navList" :key="item" class="nav" :class="props.active === item ? 'active' : ''" @click="handleClick(item)">{{ item }}</span>
|
<span v-for="item in navList" :key="item" class="nav" :class="props.active === item ? 'active' : ''" @click="handleClick(item)">{{ item }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -37,7 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="absolute right-10px flex items-center">
|
<div class="absolute right-10px flex items-center">
|
||||||
<div class="h-36px w-36px border-rd-[50%] bg-[#F5F5F5] text-center line-height-44px">
|
<div class="h-36px w-36px border-rd-[50%] bg-[#F5F5F5] text-center line-height-44px">
|
||||||
<img v-if="!isLogin" src="@/assets/images/user.png" alt="" srcset="" class="h-19px w-17px" />
|
<img v-if="!isLogin" src="~/assets/images/user.png" alt="" srcset="" class="h-19px w-17px" />
|
||||||
<img v-else :src="userStore.userInfoRes.avatar" alt="" srcset="" class="h-19px w-17px rd-50%" />
|
<img v-else :src="userStore.userInfoRes.avatar" alt="" srcset="" class="h-19px w-17px rd-50%" />
|
||||||
</div>
|
</div>
|
||||||
<span v-if="!isLogin" class="ml-14px cursor-pointer text-14px text-[#1A65FF] font-normal" @click="handleLogin">立即登录</span>
|
<span v-if="!isLogin" class="ml-14px cursor-pointer text-14px text-[#1A65FF] font-normal" @click="handleLogin">立即登录</span>
|
||||||
@ -63,11 +63,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, getCurrentInstance, computed, onMounted } from 'vue'
|
import { ref, getCurrentInstance, computed, onMounted } from 'vue'
|
||||||
import { Setting, SwitchButton } from '@element-plus/icons-vue'
|
import { Setting, SwitchButton } from '@element-plus/icons-vue'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
import { top } from '@/api/home/index'
|
import { top } from '~/api/home/index'
|
||||||
import type { ProjectDrawStatisticAppRespVO } from '@/api/home/type'
|
import type { ProjectDrawStatisticAppRespVO } from '~/api/home/type'
|
||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const { $openLogin } = useNuxtApp()
|
const { $openLogin } = useNuxtApp()
|
||||||
|
|
||||||
|
|||||||
@ -88,10 +88,10 @@
|
|||||||
import { throttle } from 'lodash'
|
import { throttle } from 'lodash'
|
||||||
import { ref, onMounted, nextTick } from 'vue'
|
import { ref, onMounted, nextTick } from 'vue'
|
||||||
import { Picture, Position, Sunrise, Loading } from '@element-plus/icons-vue'
|
import { Picture, Position, Sunrise, Loading } from '@element-plus/icons-vue'
|
||||||
import { upload } from '@/api/common'
|
import { upload } from '~/api/common'
|
||||||
import { sendKefuMessage, getMessagePage } from '@/api/channel/index'
|
import { sendKefuMessage, getMessagePage } from '~/api/channel/index'
|
||||||
import type { msgType, PageResultMessageRespVO } from '@/api/channel/types'
|
import type { msgType, PageResultMessageRespVO } from '~/api/channel/types'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
|||||||
@ -35,13 +35,13 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, onMounted } from 'vue'
|
import { ref, watch, onMounted } from 'vue'
|
||||||
import { listVip, submitPayOrder, getPayStatus } from '@/api/pay/index'
|
import { listVip, submitPayOrder, getPayStatus } from '~/api/pay/index'
|
||||||
import { accDiv } from '@/utils/utils'
|
import { accDiv } from '~/utils/utils'
|
||||||
import { Close } from '@element-plus/icons-vue'
|
import { Close } from '@element-plus/icons-vue'
|
||||||
import type { AppPayWalletPackageRespVO } from '@/api/pay/types'
|
import type { AppPayWalletPackageRespVO } from '~/api/pay/types'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import QrcodeVue from 'qrcode.vue'
|
import QrcodeVue from 'qrcode.vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted } from 'vue'
|
import { ref, onMounted } from 'vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
import { Service, Top, Promotion, Checked, Trophy } from '@element-plus/icons-vue'
|
import { Service, Top, Promotion, Checked, Trophy } from '@element-plus/icons-vue'
|
||||||
import KlService from './components/kl-service.vue'
|
import KlService from './components/kl-service.vue'
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
<el-icon class="absolute right-0 top-0 cursor-pointer" @click="onClose()"><Close /></el-icon>
|
||||||
<!-- 左侧插图 -->
|
<!-- 左侧插图 -->
|
||||||
<div class="register-left">
|
<div class="register-left">
|
||||||
<img src="@/assets/images/login-illustration.png" alt="register" class="register-img" />
|
<img src="~/assets/images/login-illustration.png" alt="register" class="register-img" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧注册表单 -->
|
<!-- 右侧注册表单 -->
|
||||||
@ -53,12 +53,12 @@
|
|||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import { Close } from '@element-plus/icons-vue'
|
import { Close } from '@element-plus/icons-vue'
|
||||||
import { sendSms } from '@/api/common/index'
|
import { sendSms } from '~/api/common/index'
|
||||||
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 as REFRESHTOKEN } from '~/utils/axios'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
>
|
>
|
||||||
<el-tab-pane v-for="(item, index) in data" :key="index" :label="item.label" :name="item.value">
|
<el-tab-pane v-for="(item, index) in data" :key="index" :label="item.label" :name="item.value">
|
||||||
<template v-if="showNum" #label>
|
<template v-if="showNum" #label>
|
||||||
<img v-if="item.value === tabActive && showIcon" src="@/assets/images/2.png" alt="" srcset="" class="mr-7px" />
|
<img v-if="item.value === tabActive && showIcon" src="~/assets/images/2.png" alt="" srcset="" class="mr-7px" />
|
||||||
<span>{{ item.label }}</span>
|
<span>{{ item.label }}</span>
|
||||||
<el-badge :value="item.num" class="item" :max="9999999999999" :hidden="!item.num" />
|
<el-badge :value="item.num" class="item" :max="9999999999999" :hidden="!item.num" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -68,10 +68,10 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { uploadV2, creatFile } from '@/api/common/index'
|
import { uploadV2, creatFile } from '~/api/common/index'
|
||||||
import { Document } from '@element-plus/icons-vue'
|
import { Document } from '@element-plus/icons-vue'
|
||||||
import type { UploadUserFile, UploadInstance } from 'element-plus'
|
import type { UploadUserFile, UploadInstance } from 'element-plus'
|
||||||
import { accDiv } from '@/utils/utils'
|
import { accDiv } from '~/utils/utils'
|
||||||
// import CryptoJS from 'crypto-js' // 引入 crypto-js
|
// import CryptoJS from 'crypto-js' // 引入 crypto-js
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import { parent } from '@/api/upnew/index'
|
import { parent } from '~/api/upnew/index'
|
||||||
import type { pageReq } from '@/api/upnew/types'
|
import type { pageReq } from '~/api/upnew/types'
|
||||||
import { ArrowRight } from '@element-plus/icons-vue'
|
import { ArrowRight } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { isArray } from "~/utils/utils";
|
|||||||
type FetchType = typeof $fetch;
|
type FetchType = typeof $fetch;
|
||||||
export type FetchOptions = Parameters<FetchType>[1];
|
export type FetchOptions = Parameters<FetchType>[1];
|
||||||
|
|
||||||
export const useClientRequest = <T = unknown>(
|
const useClientRequest = async <T = unknown>(
|
||||||
url: string,
|
url: string,
|
||||||
opts?: FetchOptions
|
opts?: FetchOptions
|
||||||
) => {
|
) => {
|
||||||
@ -33,5 +33,42 @@ export const useClientRequest = <T = unknown>(
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
return $fetch<T>(url, { ...defaultOptions, ...opts });
|
// 明确转换返回类型
|
||||||
|
const response = await $fetch(url, { ...defaultOptions, ...opts });
|
||||||
|
return response as unknown as IResponse<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// GET请求
|
||||||
|
export const get = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
config?: Omit<FetchOptions, 'method'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useClientRequest<T>(endpoint, { ...config, method: 'GET' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST请求
|
||||||
|
export const post = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
body?: any,
|
||||||
|
config?: Omit<FetchOptions, 'method' | 'body'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useClientRequest<T>(endpoint, { ...config, method: 'POST', body })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// DELETE请求
|
||||||
|
export const del = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
config?: Omit<FetchOptions, 'method'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useClientRequest<T>(endpoint, { ...config, method: 'DELETE' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// PUT请求
|
||||||
|
export const put = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
body?: any,
|
||||||
|
config?: Omit<FetchOptions, 'method' | 'body'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useClientRequest<T>(endpoint, { ...config, method: 'PUT', body })
|
||||||
|
}
|
||||||
@ -2,7 +2,7 @@ import { useFetch } from "#app";
|
|||||||
import type { UseFetchOptions } from "#app";
|
import type { UseFetchOptions } from "#app";
|
||||||
import { isArray } from "~/utils/utils";
|
import { isArray } from "~/utils/utils";
|
||||||
|
|
||||||
export const useServerRequest = <T>(
|
const useServerRequest = async <T>(
|
||||||
url: string,
|
url: string,
|
||||||
opts?: UseFetchOptions<T, unknown>
|
opts?: UseFetchOptions<T, unknown>
|
||||||
) => {
|
) => {
|
||||||
@ -32,6 +32,43 @@ export const useServerRequest = <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);
|
||||||
|
return response as unknown as IResponse<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// GET请求
|
||||||
|
export const get = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
config?: Omit<FetchOptions, 'method'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useServerRequest<T>(endpoint, { ...config, method: 'GET' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// POST请求
|
||||||
|
export const post = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
body?: any,
|
||||||
|
config?: Omit<FetchOptions, 'method' | 'body'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useServerRequest<T>(endpoint, { ...config, method: 'POST', body })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// DELETE请求
|
||||||
|
export const del = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
config?: Omit<FetchOptions, 'method'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useServerRequest<T>(endpoint, { ...config, method: 'DELETE' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// PUT请求
|
||||||
|
export const put = <T = unknown>(
|
||||||
|
endpoint: string,
|
||||||
|
body?: any,
|
||||||
|
config?: Omit<FetchOptions, 'method' | 'body'>
|
||||||
|
): Promise<IResponse<T>> => {
|
||||||
|
return useServerRequest<T>(endpoint, { ...config, method: 'PUT', body })
|
||||||
|
}
|
||||||
|
|||||||
11
enum/index.ts
Normal file
11
enum/index.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* 交易分类
|
||||||
|
*/
|
||||||
|
export const bizTypeMap = {
|
||||||
|
1: '充值',
|
||||||
|
2: '充值退款',
|
||||||
|
3: '支付',
|
||||||
|
4: '支付退款',
|
||||||
|
5: '分佣到账',
|
||||||
|
6: '分佣体现',
|
||||||
|
} as Record<number, string>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import KlFooter from './kl-footer/index.vue'
|
import KlFooter from './kl-footer/index.vue'
|
||||||
import KlQuickMenu from '@/components/kl-quick-menu/index.vue'
|
import KlQuickMenu from '~/components/kl-quick-menu/index.vue'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<div class="mb-[40px] flex flex-col items-start justify-between gap-[30px] lg:flex-row">
|
<div class="mb-[40px] flex flex-col items-start justify-between gap-[30px] lg:flex-row">
|
||||||
<!-- 左侧 Logo -->
|
<!-- 左侧 Logo -->
|
||||||
<div class="mx-auto w-[200px] shrink-0 lg:mx0">
|
<div class="mx-auto w-[200px] shrink-0 lg:mx0">
|
||||||
<img src="@/assets/images/logo5.png" class="h-auto w-full" />
|
<img src="~/assets/images/logo5.png" class="h-auto w-full" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 中间部分 -->
|
<!-- 中间部分 -->
|
||||||
@ -52,8 +52,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
|
|
||||||
import { getSettingPage } from '@/api/home/index'
|
import { getSettingPage } from '~/api/home/index'
|
||||||
import { PageResultIndexSettingRespVO } from '@/api/home/type'
|
import type { PageResultIndexSettingRespVO } from '~/api/home/type'
|
||||||
|
|
||||||
// 导航数据
|
// 导航数据
|
||||||
// const columns = [
|
// const columns = [
|
||||||
@ -70,11 +70,11 @@
|
|||||||
// 二维码数据(需要替换真实图片路径)
|
// 二维码数据(需要替换真实图片路径)
|
||||||
// const qrcodes = [
|
// const qrcodes = [
|
||||||
// {
|
// {
|
||||||
// img: new URL('@/assets/images/logo2.png', import.meta.url).href,
|
// img: new URL('~/assets/images/logo2.png', import.meta.url).href,
|
||||||
// text: '抖音电商关注官方号',
|
// text: '抖音电商关注官方号',
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// img: new URL('@/assets/images/logo2.png', import.meta.url).href,
|
// img: new URL('~/assets/images/logo2.png', import.meta.url).href,
|
||||||
// text: '微信扫码关注官方助手',
|
// text: '微信扫码关注官方助手',
|
||||||
// },
|
// },
|
||||||
// ]
|
// ]
|
||||||
@ -122,7 +122,7 @@
|
|||||||
if (item.content && (item.innerType === 3 || item.innerType === 2)) {
|
if (item.content && (item.innerType === 3 || item.innerType === 2)) {
|
||||||
window.open(item.content, '_blank')
|
window.open(item.content, '_blank')
|
||||||
} else if (item.content && (item.innerType === 4 || item.innerType === 0)) {
|
} else if (item.content && (item.innerType === 4 || item.innerType === 0)) {
|
||||||
window.open(`/editor-view?content=${encodeURIComponent(item.content)}`, '_blank')
|
navigateTo(`/editor-view?content=${encodeURIComponent(item.content)}`)
|
||||||
} else if (item.innerType === 1 && item.content) {
|
} else if (item.innerType === 1 && item.content) {
|
||||||
showViewer.value = true
|
showViewer.value = true
|
||||||
previewImgList.value = [item.content]
|
previewImgList.value = [item.content]
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="box-border h-100% h-55px w-221px flex items-center rounded-lg bg-[#1A65FF] pl-24px text-white">
|
<div class="box-border h-100% h-55px w-221px flex items-center rounded-lg bg-[#1A65FF] pl-24px text-white">
|
||||||
<img src="@/assets/images/1.png" alt="" srcset="" />
|
<img src="~/assets/images/1.png" alt="" srcset="" />
|
||||||
<span class="ml-12px text-16px">全部资源分类</span>
|
<span class="ml-12px text-16px">全部资源分类</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-center ml-45px w-660px flex justify-between">
|
<div class="item-center ml-45px w-660px flex justify-between">
|
||||||
<router-link
|
<nuxt-link
|
||||||
v-for="(item, index) in menuItems"
|
v-for="(item, index) in menuItems"
|
||||||
:key="index"
|
:key="index"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@ -15,13 +15,13 @@
|
|||||||
class="parent-links relative rounded-lg px3 py2 text-[#1A65FF]"
|
class="parent-links relative rounded-lg px3 py2 text-[#1A65FF]"
|
||||||
>
|
>
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
<img v-if="item.path === '/communication/channel'" src="@/assets/images/hot.png" alt="火" class="absolute right--15px top--2px" />
|
<img v-if="item.path === '/communication/channel'" src="~/assets/images/hot.png" alt="火" class="absolute right--15px top--2px" />
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="isLogin" class="flex flex-1 items-center justify-end">
|
<div v-if="isLogin" class="flex flex-1 items-center justify-end">
|
||||||
<div class="h-36px w-36px cursor-pointer border-rd-[50%] bg-[#F5F5F5] text-center line-height-44px" @click="handleUserCenter">
|
<div class="h-36px w-36px cursor-pointer border-rd-[50%] bg-[#F5F5F5] text-center line-height-44px" @click="handleUserCenter">
|
||||||
<img src="@/assets/images/user.png" alt="" srcset="" class="h-19px w-17px" />
|
<img src="~/assets/images/user.png" alt="" srcset="" class="h-19px w-17px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-8px h-36px w-36px cursor-pointer border-rd-[50%] text-center line-height-44px" @click="handleMessageCenter">
|
<div class="ml-8px h-36px w-36px cursor-pointer border-rd-[50%] text-center line-height-44px" @click="handleMessageCenter">
|
||||||
<el-icon size="20px" color="#999999"><BellFilled /></el-icon>
|
<el-icon size="20px" color="#999999"><BellFilled /></el-icon>
|
||||||
@ -31,12 +31,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
import { BellFilled } from '@element-plus/icons-vue'
|
import { BellFilled } from '@element-plus/icons-vue'
|
||||||
import { ref, computed } from 'vue'
|
import { ref, computed } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
|
||||||
const router = useRouter()
|
|
||||||
const menuItems = ref([
|
const menuItems = ref([
|
||||||
{ name: '首页', path: '/index' },
|
{ name: '首页', path: '/index' },
|
||||||
{ name: '图纸', path: '/drawe' },
|
{ name: '图纸', path: '/drawe' },
|
||||||
@ -55,12 +53,12 @@
|
|||||||
|
|
||||||
// 用户中心
|
// 用户中心
|
||||||
const handleUserCenter = () => {
|
const handleUserCenter = () => {
|
||||||
router.push('/personal/center/info')
|
navigateTo('/personal/center/info')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 消息中心
|
// 消息中心
|
||||||
const handleMessageCenter = () => {
|
const handleMessageCenter = () => {
|
||||||
router.push('/personal/center/message')
|
navigateTo('/personal/center/message')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@ -1,66 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="kl-menu">
|
|
||||||
<el-scrollbar height="100%">
|
|
||||||
<el-menu class="el-menu-vertical" :default-active="activeRouteComputed" router>
|
|
||||||
<KlMenuItem
|
|
||||||
v-for="menu in childRoutes"
|
|
||||||
:key="menu?.component?.toString()"
|
|
||||||
:title="menu?.meta?.title + ''"
|
|
||||||
:children="menu.children"
|
|
||||||
:index="menu.path"
|
|
||||||
/>
|
|
||||||
</el-menu>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import KlMenuItem from './kl-menu-item.vue'
|
|
||||||
import { RouteRecordRaw, useRoute } from 'vue-router'
|
|
||||||
import { computed } from 'vue'
|
|
||||||
|
|
||||||
const modulesFiles = import.meta.globEager('@/router/modules/*.ts')
|
|
||||||
const childRoutes: RouteRecordRaw[] = []
|
|
||||||
Object.keys(modulesFiles).forEach((path: string) => {
|
|
||||||
const module = modulesFiles[path] as any
|
|
||||||
if (module?.default) {
|
|
||||||
childRoutes.push(...module.default)
|
|
||||||
}
|
|
||||||
}, {})
|
|
||||||
|
|
||||||
const route = useRoute()
|
|
||||||
const activeRouteComputed = computed(() => {
|
|
||||||
return route.path
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.kl-menu {
|
|
||||||
height: 100%;
|
|
||||||
::v-deep(.el-scrollbar) {
|
|
||||||
.el-scrollbar__bar.is-vertical {
|
|
||||||
display: block !important;
|
|
||||||
.el-scrollbar__thumb {
|
|
||||||
width: 0px;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.el-menu-vertical {
|
|
||||||
border: none;
|
|
||||||
.el-sub-menu__title,
|
|
||||||
.el-menu-item {
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
.el-menu-item.is-active {
|
|
||||||
background-color: #ebf1ff;
|
|
||||||
border-right: 4px solid $color-primary;
|
|
||||||
}
|
|
||||||
.el-sub-menu {
|
|
||||||
.el-menu-item {
|
|
||||||
text-indent: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-menu-item v-if="!props.children?.length" :index="props.index">
|
|
||||||
<template #title>
|
|
||||||
<span>{{ props.title }}</span>
|
|
||||||
</template>
|
|
||||||
</el-menu-item>
|
|
||||||
<el-sub-menu v-else-if="props.children.length" :index="props.index + props.title">
|
|
||||||
<template #title>
|
|
||||||
<span>{{ props.title }}</span>
|
|
||||||
</template>
|
|
||||||
<KlMenuItem v-for="menu in props.children" :key="menu.path" :title="menu.meta?.title || ''" :children="menu.children" :index="menu.path"></KlMenuItem>
|
|
||||||
</el-sub-menu>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { PropType } from 'vue'
|
|
||||||
import { RouteRecordRaw } from 'vue-router'
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
title: {
|
|
||||||
type: String as PropType<string>,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
children: {
|
|
||||||
type: Array as PropType<RouteRecordRaw[]>,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
index: {
|
|
||||||
type: String as PropType<string>,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
::v-deep(.el-sub-menu) {
|
|
||||||
.el-menu-item {
|
|
||||||
display: flex;
|
|
||||||
span {
|
|
||||||
text-indent: 6px;
|
|
||||||
flex: 1;
|
|
||||||
position: relative;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
&::before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
width: 4px;
|
|
||||||
height: 4px;
|
|
||||||
background-color: #bcbfc5;
|
|
||||||
border-radius: 10px;
|
|
||||||
margin-left: -4px;
|
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -4,7 +4,7 @@
|
|||||||
<div class="mx-a ml--250px h-full flex items-center justify-center">
|
<div class="mx-a ml--250px h-full flex items-center justify-center">
|
||||||
<!-- Logo区域 -->
|
<!-- Logo区域 -->
|
||||||
<div class="h-100% flex cursor-pointer items-center" @click="router.push('/index')">
|
<div class="h-100% flex cursor-pointer items-center" @click="router.push('/index')">
|
||||||
<img src="@/assets/images/logo5.png" alt="图夕夕" class="h-51px w-182px" />
|
<img src="~/assets/images/logo5.png" alt="图夕夕" class="h-51px w-182px" />
|
||||||
</div>
|
</div>
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="relative ml-49px w-647px px4 p-r-0px!">
|
<div class="relative ml-49px w-647px px4 p-r-0px!">
|
||||||
@ -61,13 +61,12 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref } from 'vue'
|
import { onMounted, ref } from 'vue'
|
||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
import router from '@/router'
|
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
import { top } from '@/api/home/index'
|
import { top } from '~/api/home/index'
|
||||||
import type { ProjectDrawStatisticAppRespVO } from '@/api/home/type'
|
import type { ProjectDrawStatisticAppRespVO } from '~/api/home/type'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
|
|
||||||
const searchQuery = ref('')
|
const searchQuery = ref('')
|
||||||
const showHotList = ref(false)
|
const showHotList = ref(false)
|
||||||
@ -77,7 +76,7 @@
|
|||||||
// 是否登录
|
// 是否登录
|
||||||
if (!userStore.token) return ElMessage.error('请先登录')
|
if (!userStore.token) return ElMessage.error('请先登录')
|
||||||
// 新开窗口 用router跳转 新窗口打开
|
// 新开窗口 用router跳转 新窗口打开
|
||||||
window.open('/upnew/drawe', '_blank')
|
navigateTo('/upnew/drawe')
|
||||||
}
|
}
|
||||||
|
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
@ -121,11 +120,11 @@
|
|||||||
const level = item.pairs?.filter(Boolean).map((item) => ({ id: item?.id, name: item?.name, isChildren: false })) || []
|
const level = item.pairs?.filter(Boolean).map((item) => ({ id: item?.id, name: item?.name, isChildren: false })) || []
|
||||||
level.unshift(normal)
|
level.unshift(normal)
|
||||||
if (item.type === 1) {
|
if (item.type === 1) {
|
||||||
window.open(`/drawe?level=${JSON.stringify(level)}&keywords=${item.title || ''}`, '_blank')
|
navigateTo(`/drawe?level=${JSON.stringify(level)}&keywords=${item.title || ''}`,)
|
||||||
} else if (item.type === 2) {
|
} else if (item.type === 2) {
|
||||||
window.open(`/text?level=${JSON.stringify(level)}&keywords=${item.title || ''}`, '_blank')
|
navigateTo(`/text?level=${JSON.stringify(level)}&keywords=${item.title || ''}`,)
|
||||||
} else if (item.type === 3) {
|
} else if (item.type === 3) {
|
||||||
window.open(`/model?level=${JSON.stringify(level)}&keywords=${item.title || ''}`, '_blank')
|
navigateTo(`/model?level=${JSON.stringify(level)}&keywords=${item.title || ''}`,)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,10 +12,17 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxtjs/axios": "^5.13.6",
|
"@nuxtjs/axios": "^5.13.6",
|
||||||
"@pinia/nuxt": "^0.11.2",
|
"@pinia/nuxt": "^0.11.2",
|
||||||
|
"@tinymce/tinymce-vue": "^6.3.0",
|
||||||
|
"@types/tinymce": "^5.5.0",
|
||||||
|
"decimal.js": "^10.6.0",
|
||||||
|
"echarts": "^6.0.0",
|
||||||
"mqtt": "^5.14.0",
|
"mqtt": "^5.14.0",
|
||||||
"nuxt": "^3.18.1",
|
"nuxt": "^3.18.1",
|
||||||
|
"pdfjs-dist": "^5.4.54",
|
||||||
"pinia": "^3.0.3",
|
"pinia": "^3.0.3",
|
||||||
|
"tinymce": "^8.0.2",
|
||||||
"vue": "^3.5.18",
|
"vue": "^3.5.18",
|
||||||
|
"vue-pdf-embed": "^2.1.3",
|
||||||
"vue-router": "^4.5.1"
|
"vue-router": "^4.5.1"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610",
|
"packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610",
|
||||||
|
|||||||
@ -65,10 +65,10 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { Plus, EditPen } from '@element-plus/icons-vue'
|
import { Plus, EditPen } from '@element-plus/icons-vue'
|
||||||
import { ChannelRespVO } from '@/api/channel/types'
|
import type { ChannelRespVO } from '~/api/channel/types'
|
||||||
import { createChannelFollow, deleteChannelFollow } from '@/api/channel/index'
|
import { createChannelFollow, deleteChannelFollow } from '~/api/channel/index'
|
||||||
import ChatPage from '@/pages/chat-page/index.vue'
|
import ChatPage from '~/pages/chat-page/index.vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const lunTanRes = defineModel<ChannelRespVO>('modelValue', {
|
const lunTanRes = defineModel<ChannelRespVO>('modelValue', {
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { list } from '@/api/channel/index'
|
import { list } from '~/api/channel/index'
|
||||||
|
|
||||||
const channelId = defineModel('modelValue', {
|
const channelId = defineModel('modelValue', {
|
||||||
required: true,
|
required: true,
|
||||||
|
|||||||
@ -36,8 +36,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { TpageRes, ChannelRespVO } from '@/api/channel/types'
|
import type { TpageRes, ChannelRespVO } from '~/api/channel/types'
|
||||||
import { postsDelete } from '@/api/channel/index'
|
import { postsDelete } from '~/api/channel/index'
|
||||||
import ChannelHeader from './ChannelHeader.vue'
|
import ChannelHeader from './ChannelHeader.vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="box-border h-240px w-320px border border-[#EEEEEE] rounded-8px border-solid bg-[#FFFFFF] px-31px py-25px">
|
<div class="box-border h-240px w-320px border border-[#EEEEEE] rounded-8px border-solid bg-[#FFFFFF] px-31px py-25px">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div>
|
<div>
|
||||||
<img src="@/assets/images/user2.png" alt="" srcset="" class="h-47px w-48px rounded-full" />
|
<img src="~/assets/images/user2.png" alt="" srcset="" class="h-47px w-48px rounded-full" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px">
|
<div class="ml-13px">
|
||||||
<div class="text-16px text-[#333333] font-normal">你好</div>
|
<div class="text-16px text-[#333333] font-normal">你好</div>
|
||||||
@ -36,7 +36,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
// 判断是否登录
|
// 判断是否登录
|
||||||
|
|||||||
@ -46,14 +46,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { keywords } from '@/api/upnew/index'
|
import { keywords } from '~/api/upnew/index'
|
||||||
import { reactive, ref, onMounted } from 'vue'
|
import { reactive, ref, onMounted } from 'vue'
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
import { create, list } from '@/api/channel/index'
|
import { create, list } from '~/api/channel/index'
|
||||||
import { parent } from '@/api/upnew/index'
|
import { parent } from '~/api/upnew/index'
|
||||||
import { upload } from '@/api/common/index' // 自定义上传方法
|
import { upload } from '~/api/common/index' // 自定义上传方法
|
||||||
import Editor from '@tinymce/tinymce-vue'
|
import Editor from '@tinymce/tinymce-vue'
|
||||||
import tinymce from 'tinymce/tinymce'
|
import tinymce from 'tinymce/tinymce'
|
||||||
import 'tinymce/themes/silver'
|
import 'tinymce/themes/silver'
|
||||||
@ -74,7 +74,7 @@
|
|||||||
import 'tinymce/plugins/advlist' //列
|
import 'tinymce/plugins/advlist' //列
|
||||||
import 'tinymce/plugins/quickbars' //快速工具条
|
import 'tinymce/plugins/quickbars' //快速工具条
|
||||||
import 'tinymce/plugins/wordcount' // 字数统计插件
|
import 'tinymce/plugins/wordcount' // 字数统计插件
|
||||||
// import '@/assets/tinymce/langs/zh-Hans.js' //下载后的语言包
|
// import '~/assets/tinymce/langs/zh-Hans.js' //下载后的语言包
|
||||||
// import 'tinymce/skins/content/default/content.css'
|
// import 'tinymce/skins/content/default/content.css'
|
||||||
// 获取从其他地方传过来的参数
|
// 获取从其他地方传过来的参数
|
||||||
const channelId = route.query.channelId as string
|
const channelId = route.query.channelId as string
|
||||||
|
|||||||
@ -8,12 +8,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import LeftContent from './components/LeftContent.vue'
|
import LeftContent from './components/LeftContent.vue'
|
||||||
import RightContent from './components/RightContent.vue'
|
import RightContent from './components/RightContent.vue'
|
||||||
import { page, getChannelLunTanDetail } from '@/api/channel/index.ts'
|
import { page, getChannelLunTanDetail } from '~/api/channel/index'
|
||||||
import { reactive, watch, ref } from 'vue'
|
import { reactive, watch, ref } from 'vue'
|
||||||
import { TpageRes, ChannelRespVO } from '@/api/channel/types'
|
import type { TpageRes, ChannelRespVO } from '~/api/channel/types'
|
||||||
|
|
||||||
const pageReq = reactive({
|
const pageReq = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
|
|||||||
@ -13,15 +13,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mt-19px flex items-center justify-between">
|
<div class="mt-19px flex items-center justify-between">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="mr-4px h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="mr-4px h-17px" />
|
||||||
<span class="text-[#666666]">{{ channelDetail?.likeNum || 0 }}人赞过</span>
|
<span class="text-[#666666]">{{ channelDetail?.likeNum || 0 }}人赞过</span>
|
||||||
<div class="ml-16px flex items-center">
|
<div class="ml-16px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" class="mr-4px h-23px" />
|
<img src="~/assets/images/add.png" alt="" class="mr-4px h-23px" />
|
||||||
<span class="text-[#666666]">{{ channelDetail?.commentNum || 0 }}评论</span>
|
<span class="text-[#666666]">{{ channelDetail?.commentNum || 0 }}评论</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-16px flex items-center">
|
<div class="ml-16px flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px" />
|
||||||
<span class="text-[#666666]">{{ channelDetail?.browseNum || 0 }}人看过</span>
|
<span class="text-[#666666]">{{ channelDetail?.browseNum || 0 }}人看过</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="right ml-23px w-100%">
|
<div class="right ml-23px w-100%">
|
||||||
<div class="mt-20px w-398px border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid bg-[#FFFFFF]">
|
<div class="mt-20px w-398px border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid bg-[#FFFFFF]">
|
||||||
<img src="@/assets/images/sign.png" alt="" srcset="" class="h-206px w-100%" />
|
<img src="~/assets/images/sign.png" alt="" srcset="" class="h-206px w-100%" />
|
||||||
<div class="box-border border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid border-t-none bg-[#FFFFFF] pa-18px">
|
<div class="box-border border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid border-t-none bg-[#FFFFFF] pa-18px">
|
||||||
<div class="mt-10px flex items-center">
|
<div class="mt-10px flex items-center">
|
||||||
<div class="text-18px text-[#333333] font-bold">王琦</div>
|
<div class="text-18px text-[#333333] font-bold">王琦</div>
|
||||||
@ -96,10 +96,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { watch, ref, reactive } from 'vue'
|
import { watch, ref, reactive } from 'vue'
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { getChannelDetail, postscommentpage, createPostsComment } from '@/api/channel'
|
import { getChannelDetail, postscommentpage, createPostsComment } from '~/api/channel'
|
||||||
import type { TGetChannelPostsRes, PageResultPostsCommentRespVO } from '@/api/channel/types'
|
import type { TGetChannelPostsRes, PageResultPostsCommentRespVO } from '~/api/channel/types'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const channelId = route.query.channelId as string
|
const channelId = route.query.channelId as string
|
||||||
|
|
||||||
|
|||||||
@ -100,13 +100,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { upload } from '@/api/common/index'
|
import { upload } from '~/api/common/index'
|
||||||
import { Picture, Sunrise } from '@element-plus/icons-vue'
|
import { Picture, Sunrise } from '@element-plus/icons-vue'
|
||||||
import { getGroupMembers } from '@/api/channel/index'
|
import { getGroupMembers } from '~/api/channel/index'
|
||||||
import { msgType, PageResultMessageRespVO, MemberUserRespDTO } from '@/api/channel/types'
|
import type { msgType, PageResultMessageRespVO, MemberUserRespDTO } from '~/api/channel/types'
|
||||||
import { ref, onMounted, nextTick, watch, onUnmounted } from 'vue'
|
import { ref, onMounted, nextTick, watch, onUnmounted } from 'vue'
|
||||||
// import dayjs from 'dayjs'
|
// import dayjs from 'dayjs'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -128,7 +128,7 @@
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
background-image: url('@/assets/images/community-banner.png');
|
background-image: url('~/assets/images/community-banner.png');
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
@ -161,7 +161,7 @@
|
|||||||
h2 {
|
h2 {
|
||||||
color: #333;
|
color: #333;
|
||||||
margin: 40px 0 20px;
|
margin: 40px 0 20px;
|
||||||
background-image: url('@/assets/images/community-bg.png');
|
background-image: url('~/assets/images/community-bg.png');
|
||||||
background-size: 120px 16px;
|
background-size: 120px 16px;
|
||||||
background-position: 14px 22px;
|
background-position: 14px 22px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
|||||||
@ -43,7 +43,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, PropType, watch, nextTick } from 'vue'
|
import type { PropType} from 'vue'
|
||||||
|
import { ref, watch, nextTick } from 'vue'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { Swiper, SwiperSlide } from 'swiper/vue'
|
import { Swiper, SwiperSlide } from 'swiper/vue'
|
||||||
|
|
||||||
|
|||||||
@ -12,17 +12,17 @@
|
|||||||
|
|
||||||
<div class="ml-23px flex flex-1 text-18px text-[#FFFFFF] font-normal">
|
<div class="ml-23px flex flex-1 text-18px text-[#FFFFFF] font-normal">
|
||||||
<div class="h-60px w-160px flex cursor-pointer items-center justify-center rounded-8px bg-[#1A65FF]" @click="handleDownload">
|
<div class="h-60px w-160px flex cursor-pointer items-center justify-center rounded-8px bg-[#1A65FF]" @click="handleDownload">
|
||||||
<img src="@/assets/images/download.png" alt="" srcset="" class="mr-4px h-22px w-27px" />
|
<img src="~/assets/images/download.png" alt="" srcset="" class="mr-4px h-22px w-27px" />
|
||||||
{{ detail.points === 0 ? '免费下载' : '立即下载' }}
|
{{ detail.points === 0 ? '免费下载' : '立即下载' }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="!detail.favoriteId"
|
v-if="!detail.favoriteId"
|
||||||
class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#E7B03B]"
|
class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#E7B03B]"
|
||||||
@click="handleCollect"
|
@click="handleCollect"
|
||||||
><img src="@/assets/images/collect.png" alt="" srcset="" class="mr-4px h-24px w-24px" /> 收藏</div
|
><img src="~/assets/images/collect.png" alt="" srcset="" class="mr-4px h-24px w-24px" /> 收藏</div
|
||||||
>
|
>
|
||||||
<div v-else class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#E7B03B]" @click="handleCollect"
|
<div v-else class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#E7B03B]" @click="handleCollect"
|
||||||
><img src="@/assets/images/wjx2.png" alt="" srcset="" class="mr-4px h-18px w-18px" /> 已收藏</div
|
><img src="~/assets/images/wjx2.png" alt="" srcset="" class="mr-4px h-18px w-18px" /> 已收藏</div
|
||||||
>
|
>
|
||||||
|
|
||||||
<div class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#F56C6C]" @click="handleReport"
|
<div class="ml-11px h-60px flex flex-1 cursor-pointer items-center justify-center rounded-8px bg-[#F56C6C]" @click="handleReport"
|
||||||
@ -52,7 +52,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div v-for="item in detail.files" :key="item.id" class="flex items-center justify-between border-b-1px border-b-[#eee] border-b-solid py-10px">
|
<div v-for="item in detail.files" :key="item.id" class="flex items-center justify-between border-b-1px border-b-[#eee] border-b-solid py-10px">
|
||||||
<!-- <img src="@/assets/images/avater.png" alt="" srcset="" class="h-30px w-30px" /> -->
|
<!-- <img src="~/assets/images/avater.png" alt="" srcset="" class="h-30px w-30px" /> -->
|
||||||
<div>
|
<div>
|
||||||
<span class="ml-10px cursor-pointer" @click="handleDownloadPreview(item)">{{ item.title }}</span>
|
<span class="ml-10px cursor-pointer" @click="handleDownloadPreview(item)">{{ item.title }}</span>
|
||||||
<span v-if="item.size" class="ml-200px color-#999">{{ item.size || '-' }}</span>
|
<span v-if="item.size" class="ml-200px color-#999">{{ item.size || '-' }}</span>
|
||||||
@ -107,7 +107,7 @@
|
|||||||
<div class="mb-10px">软件分类:{{ detail.editionsName }}</div>
|
<div class="mb-10px">软件分类:{{ detail.editionsName }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-20px w-398px border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid bg-[#FFFFFF]">
|
<div class="mt-20px w-398px border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid bg-[#FFFFFF]">
|
||||||
<img src="@/assets/images/banner.png" alt="" srcset="" class="w-100%" />
|
<img src="~/assets/images/banner.png" alt="" srcset="" class="w-100%" />
|
||||||
<div class="box-border border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid border-t-none bg-[#FFFFFF] pa-18px">
|
<div class="box-border border border-[#EEEEEE] border-rd-[10px_10px_0px_0px] border-solid border-t-none bg-[#FFFFFF] pa-18px">
|
||||||
<div class="flex flex-wrap items-start">
|
<div class="flex flex-wrap items-start">
|
||||||
<div v-if="userInfo.nickname" class="mt-10px text-18px text-[#333333] font-bold">{{ userInfo.nickname }}</div>
|
<div v-if="userInfo.nickname" class="mt-10px text-18px text-[#333333] font-bold">{{ userInfo.nickname }}</div>
|
||||||
@ -123,13 +123,13 @@
|
|||||||
<div class="flex items-center gap-40px">
|
<div class="flex items-center gap-40px">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="h-20px">
|
<div class="h-20px">
|
||||||
<img src="@/assets/images/folder.png" alt="works" class="w-80%" />
|
<img src="~/assets/images/folder.png" alt="works" class="w-80%" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-8px mt--4px text-14px text-[#666] font-normal">作品: {{ userInfo.projectCount || 0 }}</div>
|
<div class="ml-8px mt--4px text-14px text-[#666] font-normal">作品: {{ userInfo.projectCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="h-20px">
|
<div class="h-20px">
|
||||||
<img src="@/assets/images/user4.png" alt="fans" class="w-80% rounded-full vertical-top" />
|
<img src="~/assets/images/user4.png" alt="fans" class="w-80% rounded-full vertical-top" />
|
||||||
</div>
|
</div>
|
||||||
<div class="relative top--3px ml-8px text-14px text-[#666] font-normal">粉丝: {{ userInfo.fansCount || 0 }}</div>
|
<div class="relative top--3px ml-8px text-14px text-[#666] font-normal">粉丝: {{ userInfo.fansCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
@ -170,18 +170,18 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { downloadFile } from '@/utils/utils'
|
import { downloadFile } from '~/utils/utils'
|
||||||
import { useMessage } from '@/utils/useMessage'
|
import { useMessage } from '~/utils/useMessage'
|
||||||
import { Warning } from '@element-plus/icons-vue'
|
import { Warning } from '@element-plus/icons-vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { getDetail, getRelationRecommend, report, getUserInfo, getMainWork, createContent, createUserProject, deleteProject } from '@/api/drawe-detail/index'
|
import { getDetail, getRelationRecommend, report, getUserInfo, getMainWork, createContent, createUserProject, deleteProject } from '~/api/drawe-detail/index'
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import ThumBnail from './components/swiper.vue'
|
import ThumBnail from './components/swiper.vue'
|
||||||
import CommentSection from '@/components/comment-section/index.vue'
|
import CommentSection from '~/components/comment-section/index.vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { ProjectRespVO, ProjectDrawPageRespVO, UserExtendSimpleRespDTO, ProjectDrawMemberRespVO } from '@/api/drawe-detail/types'
|
import type { ProjectRespVO, ProjectDrawPageRespVO, UserExtendSimpleRespDTO, ProjectDrawMemberRespVO } from '~/api/drawe-detail/types'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
// 获取路由参数
|
// 获取路由参数
|
||||||
@ -244,7 +244,7 @@
|
|||||||
}
|
}
|
||||||
const handleDownloadPreview = (item: any) => {
|
const handleDownloadPreview = (item: any) => {
|
||||||
// 预览pdf
|
// 预览pdf
|
||||||
window.open(`/pdf-preview?url=${item.url}`)
|
navigateTo(`/pdf-preview?url=${item.url}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获取下载类型 */
|
/** 获取下载类型 */
|
||||||
@ -341,7 +341,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleClick = (id: string | number) => {
|
const handleClick = (id: string | number) => {
|
||||||
window.open(`/down-drawe-detail?id=${id}`, '_blank') // 修改为在新窗口打开
|
navigateTo(`/down-drawe-detail?id=${id}`) // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDownloadFile = (url: string, name: string) => {
|
const handleDownloadFile = (url: string, name: string) => {
|
||||||
|
|||||||
@ -14,9 +14,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { PropType, ref, watch } from 'vue'
|
import type { PropType} from 'vue'
|
||||||
import { recommendTop } from '@/api/upnew/index'
|
import { ref, watch } from 'vue'
|
||||||
import { recommendTopRes } from '@/api/upnew/types'
|
import { recommendTop } from '~/api/upnew/index'
|
||||||
|
import type { recommendTopRes } from '~/api/upnew/types'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
type: Number as PropType<1 | 2 | 3>,
|
type: Number as PropType<1 | 2 | 3>,
|
||||||
|
|||||||
@ -17,11 +17,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
import emptyImg from '@/assets/images/empty.png'
|
import emptyImg from '~/assets/images/empty.png'
|
||||||
|
|
||||||
const query = defineModel<pageReq>('modelValue', {
|
const query = defineModel<pageReq>('modelValue', {
|
||||||
required: true,
|
required: true,
|
||||||
|
|||||||
@ -23,14 +23,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import KlWallpaperCategory from '@/components/kl-wallpaper-category/index.vue'
|
import KlWallpaperCategory from '~/components/kl-wallpaper-category/index.vue'
|
||||||
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
||||||
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { reactive, watch, ref } from 'vue'
|
import { reactive, watch, ref } from 'vue'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const level = ref(
|
const level = ref(
|
||||||
route.query.level
|
route.query.level
|
||||||
|
|||||||
@ -2,10 +2,10 @@
|
|||||||
<div class="wscn-http404-container">
|
<div class="wscn-http404-container">
|
||||||
<div class="wscn-http404">
|
<div class="wscn-http404">
|
||||||
<div class="pic-404">
|
<div class="pic-404">
|
||||||
<img class="pic-404__parent" src="@/assets/images/404.png" alt="404" />
|
<img class="pic-404__parent" src="~/assets/images/404.png" alt="404" />
|
||||||
<img class="left pic-404__child" src="@/assets/images/404_cloud.png" alt="404" />
|
<img class="left pic-404__child" src="~/assets/images/404_cloud.png" alt="404" />
|
||||||
<img class="pic-404__child mid" src="@/assets/images/404_cloud.png" alt="404" />
|
<img class="pic-404__child mid" src="~/assets/images/404_cloud.png" alt="404" />
|
||||||
<img class="pic-404__child right" src="@/assets/images/404_cloud.png" alt="404" />
|
<img class="pic-404__child right" src="~/assets/images/404_cloud.png" alt="404" />
|
||||||
</div>
|
</div>
|
||||||
<div class="bullshit">
|
<div class="bullshit">
|
||||||
<div class="bullshit__oops"> 404错误! </div>
|
<div class="bullshit__oops"> 404错误! </div>
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<button class="join-button">快来加入</button>
|
<button class="join-button">快来加入</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="banner-image">
|
<div class="banner-image">
|
||||||
<img src="@/assets/images/foreign_banner.png" alt="CAD工作环境" />
|
<img src="~/assets/images/foreign_banner.png" alt="CAD工作环境" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -96,7 +96,7 @@
|
|||||||
.large-card {
|
.large-card {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1 / span 2;
|
grid-row: 1 / span 2;
|
||||||
background-image: url('@/assets/images/hardware-tools.png');
|
background-image: url('~/assets/images/hardware-tools.png');
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -115,22 +115,22 @@
|
|||||||
|
|
||||||
/* CAD设计工作站卡片 - 较宽 */
|
/* CAD设计工作站卡片 - 较宽 */
|
||||||
.top-row .card-wide {
|
.top-row .card-wide {
|
||||||
background-image: url('@/assets/images/cad-workstation.png');
|
background-image: url('~/assets/images/cad-workstation.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 工作站卡片 - 较窄 */
|
/* 工作站卡片 - 较窄 */
|
||||||
.top-row .card-narrow {
|
.top-row .card-narrow {
|
||||||
background-image: url('@/assets/images/laptop-workspace.png');
|
background-image: url('~/assets/images/laptop-workspace.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 工业机器人卡片 - 较窄 */
|
/* 工业机器人卡片 - 较窄 */
|
||||||
.bottom-row .card-narrow {
|
.bottom-row .card-narrow {
|
||||||
background-image: url('@/assets/images/industrial-robots.png');
|
background-image: url('~/assets/images/industrial-robots.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CAD工业设计卡片 - 较宽 */
|
/* CAD工业设计卡片 - 较宽 */
|
||||||
.bottom-row .card-wide {
|
.bottom-row .card-wide {
|
||||||
background-image: url('@/assets/images/cad-industrial-design.png');
|
background-image: url('~/assets/images/cad-industrial-design.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-content {
|
.card-content {
|
||||||
|
|||||||
@ -18,10 +18,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { pageRes } from '@/api/upnew/types'
|
import type { pageRes } from '~/api/upnew/types'
|
||||||
|
|
||||||
const level = ref([
|
const level = ref([
|
||||||
{
|
{
|
||||||
|
|||||||
@ -25,15 +25,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
||||||
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
||||||
import BannerTips from './components/BannerTips.vue'
|
import BannerTips from './components/BannerTips.vue'
|
||||||
// import ImageTips from './components/ImageTips.vue'
|
// import ImageTips from './components/ImageTips.vue'
|
||||||
|
|
||||||
import { reactive, watch } from 'vue'
|
import { reactive, watch } from 'vue'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
|
|
||||||
const query = reactive<pageReq>({
|
const query = reactive<pageReq>({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div>
|
<div>
|
||||||
<div class="my-32px mb-20px text-18px text-[#333333] font-normal"><img src="@/assets/images/2.png" alt="" srcset="" /> 多多排行榜</div>
|
<div class="my-32px mb-20px text-18px text-[#333333] font-normal"><img src="~/assets/images/2.png" alt="" srcset="" /> 多多排行榜</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="ma-auto box-border h-470px w-460px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] px-28px">
|
<div class="ma-auto box-border h-470px w-460px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] px-28px">
|
||||||
<div class="title-bg ma-auto mb-40px mt-20px">一周图纸作者排行</div>
|
<div class="title-bg ma-auto mb-40px mt-20px">一周图纸作者排行</div>
|
||||||
@ -22,12 +22,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
||||||
<!-- <el-icon class="text-17px color-#a8abb2!"><Folder /></el-icon> -->
|
<!-- <el-icon class="text-17px color-#a8abb2!"><Folder /></el-icon> -->
|
||||||
<img src="@/assets/images/file.png" alt="" srcset="" class="h-18px" />
|
<img src="~/assets/images/file.png" alt="" srcset="" class="h-18px" />
|
||||||
<div class="ellipsis1 ml-10px">作品:{{ item.projectCount || 0 }}</div>
|
<div class="ellipsis1 ml-10px">作品:{{ item.projectCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
||||||
<!-- <el-icon class="text-17px color-[#e4e7ed!]"><User /></el-icon> -->
|
<!-- <el-icon class="text-17px color-[#e4e7ed!]"><User /></el-icon> -->
|
||||||
<img src="@/assets/images/user4.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/user4.png" alt="" srcset="" class="h-17px" />
|
||||||
<div class="ellipsis1 ml-10px">粉丝:{{ item.fansCount || 0 }}</div>
|
<div class="ellipsis1 ml-10px">粉丝:{{ item.fansCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -52,11 +52,11 @@
|
|||||||
<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">
|
||||||
<img src="@/assets/images/file.png" alt="" srcset="" class="h-18px" />
|
<img src="~/assets/images/file.png" alt="" srcset="" class="h-18px" />
|
||||||
<div class="ellipsis1 ml-10px">作品:{{ item.projectCount || 0 }}</div>
|
<div class="ellipsis1 ml-10px">作品:{{ item.projectCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
<div class="ml-20px flex text-14px text-[#666666] font-normal">
|
||||||
<img src="@/assets/images/user4.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/user4.png" alt="" srcset="" class="h-17px" />
|
||||||
<div class="ellipsis1 ml-10px">粉丝:{{ item.fansCount || 0 }}</div>
|
<div class="ellipsis1 ml-10px">粉丝:{{ item.fansCount || 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-63px">
|
<div class="ml-63px">
|
||||||
<div class="my-32px mb-20px text-18px text-[#333333] font-normal"><img src="@/assets/images/2.png" alt="" srcset="" /> 发布动态</div>
|
<div class="my-32px mb-20px text-18px text-[#333333] font-normal"><img src="~/assets/images/2.png" alt="" srcset="" /> 发布动态</div>
|
||||||
<div class="box-border h-470px w-437px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] p-15px">
|
<div class="box-border h-470px w-437px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] p-15px">
|
||||||
<div
|
<div
|
||||||
v-for="item in newDrawList"
|
v-for="item in newDrawList"
|
||||||
@ -87,11 +87,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
// import { Folder, User } from '@element-plus/icons-vue'
|
// import { Folder, User } from '@element-plus/icons-vue'
|
||||||
import { newDraw, userTop } from '@/api/home/index'
|
import { newDraw, userTop } from '~/api/home/index'
|
||||||
import { ProjectDrawPageRespVO, ProjectTrendingScoreUserInfoVO } from '@/api/home/type'
|
import type { ProjectDrawPageRespVO, ProjectTrendingScoreUserInfoVO } from '~/api/home/type'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
const Url = Object.values(
|
const Url = Object.values(
|
||||||
import.meta.glob('@/assets/images/no*.png', {
|
import.meta.glob('~/assets/images/no*.png', {
|
||||||
eager: true,
|
eager: true,
|
||||||
query: 'url',
|
query: 'url',
|
||||||
})
|
})
|
||||||
@ -133,7 +133,7 @@
|
|||||||
.title-bg {
|
.title-bg {
|
||||||
width: 224px;
|
width: 224px;
|
||||||
height: 52px;
|
height: 52px;
|
||||||
background-image: url('@/assets/images/name_bg.png');
|
background-image: url('~/assets/images/name_bg.png');
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 48px;
|
line-height: 48px;
|
||||||
|
|||||||
@ -23,8 +23,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
|
|
||||||
import { getSettingPage } from '@/api/home/index'
|
import { getSettingPage } from '~/api/home/index'
|
||||||
import { PageResultIndexSettingRespVO } from '@/api/home/type'
|
import type { PageResultIndexSettingRespVO } from '~/api/home/type'
|
||||||
|
|
||||||
const pageReq = reactive({
|
const pageReq = reactive({
|
||||||
type: 2,
|
type: 2,
|
||||||
@ -41,7 +41,7 @@
|
|||||||
getBanner()
|
getBanner()
|
||||||
|
|
||||||
const handleClick = (url: string) => {
|
const handleClick = (url: string) => {
|
||||||
window.open(url, '_blank')
|
navigateTo(url)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -11,29 +11,29 @@
|
|||||||
@click="handleUserInfo"
|
@click="handleUserInfo"
|
||||||
/>
|
/>
|
||||||
<div class="mt-10px text-16px text-[#333333] font-normal">
|
<div class="mt-10px text-16px text-[#333333] font-normal">
|
||||||
<img v-if="userStore.userInfoRes.vipLevel === 1" src="@/assets/svg/vip.svg" alt="" class="relative top-12px" />
|
<img v-if="userStore.userInfoRes.vipLevel === 1" src="~/assets/svg/vip.svg" alt="" class="relative top-12px" />
|
||||||
<img v-if="userStore.userInfoRes.vipLevel === 2" src="@/assets/svg/svip.svg" alt="" class="relative top-12px" />
|
<img v-if="userStore.userInfoRes.vipLevel === 2" src="~/assets/svg/svip.svg" alt="" class="relative top-12px" />
|
||||||
Hi,{{ userStore.userInfoRes.nickname || '欢迎访问~' }}
|
Hi,{{ userStore.userInfoRes.nickname || '欢迎访问~' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="isLogin" class="mt-20px flex flex-col gap-20px px-20px text-14px text-[#333333] font-normal">
|
<div v-if="isLogin" class="mt-20px flex flex-col gap-20px px-20px text-14px text-[#333333] font-normal">
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (1).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (1).png" alt="" srcset="" />
|
||||||
<span class="title ml-4px" :title="`${userStaticInfo?.pointCount}`">我的积分: {{ userStaticInfo?.pointCount || 0 }}</span>
|
<span class="title ml-4px" :title="`${userStaticInfo?.pointCount}`">我的积分: {{ userStaticInfo?.pointCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (2).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (2).png" alt="" srcset="" />
|
||||||
<span class="title ml-4px" :title="`${userStaticInfo?.followCount}`">我的收藏: {{ userStaticInfo?.followCount || 0 }}</span>
|
<span class="title ml-4px" :title="`${userStaticInfo?.followCount}`">我的收藏: {{ userStaticInfo?.followCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (3).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (3).png" alt="" srcset="" />
|
||||||
<span class="title ml-4px" :title="`${userStaticInfo?.projectCount}`">我的发布: {{ userStaticInfo?.projectCount || 0 }}</span>
|
<span class="title ml-4px" :title="`${userStaticInfo?.projectCount}`">我的发布: {{ userStaticInfo?.projectCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (4).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (4).png" alt="" srcset="" />
|
||||||
<span class="title ml-4px" :title="`${userStaticInfo?.downloadCount}`">我的下载: {{ userStaticInfo?.downloadCount || 0 }}</span>
|
<span class="title ml-4px" :title="`${userStaticInfo?.downloadCount}`">我的下载: {{ userStaticInfo?.downloadCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -63,25 +63,25 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isLogin" class="mt-30px flex justify-between px-20px">
|
<div v-if="!isLogin" class="mt-30px flex justify-between px-20px">
|
||||||
<img src="@/assets/images/qq-v2.png" alt="QQ登录" class="social-icon" @click="handleLoginQQ" />
|
<img src="~/assets/images/qq-v2.png" alt="QQ登录" class="social-icon" @click="handleLoginQQ" />
|
||||||
<img src="@/assets/images/weixin-v2.png" alt="微信登录" class="social-icon" @click="handleLoginWechat" />
|
<img src="~/assets/images/weixin-v2.png" alt="微信登录" class="social-icon" @click="handleLoginWechat" />
|
||||||
<img src="@/assets/images/email-v2.png" alt="邮箱登录" class="social-icon" @click="handleLoginEmail" />
|
<img src="~/assets/images/email-v2.png" alt="邮箱登录" class="social-icon" @click="handleLoginEmail" />
|
||||||
<img src="@/assets/images/phone-v2.png" alt="手机登录" class="social-icon" @click="handleLoginPhone" />
|
<img src="~/assets/images/phone-v2.png" alt="手机登录" class="social-icon" @click="handleLoginPhone" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sign-bonus mt-18px" @click="handleSign">
|
<div class="sign-bonus mt-18px" @click="handleSign">
|
||||||
<img src="@/assets/images/sign.png" alt="签到奖励" class="bonus-image" />
|
<img src="~/assets/images/sign.png" alt="签到奖励" class="bonus-image" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { refreshToken as REFRESHTOKEN } from '@/utils/axios'
|
import { refreshToken as REFRESHTOKEN } from '~/utils/axios'
|
||||||
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 { UserStatisticsCountRespVO } from '@/api/personal-center/types'
|
import type { UserStatisticsCountRespVO } from '~/api/personal-center/types'
|
||||||
import { getUserStatistics } from '@/api/personal-center/index'
|
import { getUserStatistics } from '~/api/personal-center/index'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const instance = getCurrentInstance()
|
const instance = getCurrentInstance()
|
||||||
|
|
||||||
@ -103,36 +103,36 @@
|
|||||||
|
|
||||||
const handleLogin = () => {
|
const handleLogin = () => {
|
||||||
if (instance) {
|
if (instance) {
|
||||||
instance.appContext.config.globalProperties.$openLogin()
|
// instance.appContext.config.globalProperties.$openLogin()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleRegister = () => {
|
const handleRegister = () => {
|
||||||
if (instance) {
|
if (instance) {
|
||||||
instance.appContext.config.globalProperties.$openRegister()
|
// instance.appContext.config.globalProperties.$openRegister()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleLoginPhone = () => {
|
const handleLoginPhone = () => {
|
||||||
if (instance) {
|
if (instance) {
|
||||||
instance.appContext.config.globalProperties.$openLogin('verify')
|
// instance.appContext.config.globalProperties.$openLogin('verify')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleLoginEmail = () => {
|
const handleLoginEmail = () => {
|
||||||
if (instance) {
|
if (instance) {
|
||||||
instance.appContext.config.globalProperties.$openLoginEmail()
|
// instance.appContext.config.globalProperties.$openLoginEmail()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleUserInfo = () => {
|
const handleUserInfo = () => {
|
||||||
if (!isLogin.value) return
|
if (!isLogin.value) return
|
||||||
window.open('/personal-detail', '_blank') // 修改为在新窗口打开
|
navigateTo('/personal-detail') // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发布图纸
|
// 发布图纸
|
||||||
const handleDrawe = () => {
|
const handleDrawe = () => {
|
||||||
window.open('/upnew/drawe', '_blank') // 修改为在新窗口打开
|
navigateTo('/upnew/drawe') // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
|
|
||||||
// 推出登录
|
// 推出登录
|
||||||
@ -145,7 +145,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleSign = () => {
|
const handleSign = () => {
|
||||||
window.open('/sign-page', '_blank') // 修改为在新窗口打开
|
navigateTo('/sign-page') // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<LoginForm />
|
<LoginForm />
|
||||||
</div>
|
</div>
|
||||||
<div class="box-border h-56px w-1219px flex items-center border border-[#EEEEEE] border-solid border-t-none bg-[#FFFFFF] pl-10px line-height-46px">
|
<div class="box-border h-56px w-1219px flex items-center border border-[#EEEEEE] border-solid border-t-none bg-[#FFFFFF] pl-10px line-height-46px">
|
||||||
<img src="@/assets/images/voice.png" alt="" srcset="" class="mr-10px h-15px w-16px" />
|
<img src="~/assets/images/voice.png" alt="" srcset="" class="mr-10px h-15px w-16px" />
|
||||||
<Vue3Marquee :duration="10" direction="normal" pause-on-hover>· 经典来袭,SolidWorks装配经典案例之气动发动机 </Vue3Marquee>
|
<Vue3Marquee :duration="10" direction="normal" pause-on-hover>· 经典来袭,SolidWorks装配经典案例之气动发动机 </Vue3Marquee>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -21,8 +21,8 @@
|
|||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import LoginForm from './LoginForm.vue'
|
import LoginForm from './LoginForm.vue'
|
||||||
|
|
||||||
import { getSettingPage } from '@/api/home/index'
|
import { getSettingPage } from '~/api/home/index'
|
||||||
import { PageResultIndexSettingRespVO } from '@/api/home/type'
|
import type { PageResultIndexSettingRespVO } from '~/api/home/type'
|
||||||
|
|
||||||
const pageReq = reactive({
|
const pageReq = reactive({
|
||||||
type: 1,
|
type: 1,
|
||||||
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
const handleClick = (url: string) => {
|
const handleClick = (url: string) => {
|
||||||
if (url) {
|
if (url) {
|
||||||
window.open(url, '_blank')
|
navigateTo(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
<div class="content mt-10px flex">
|
<div class="content mt-10px flex">
|
||||||
<!-- <div class="sider">
|
<!-- <div class="sider">
|
||||||
<div class="box-border h-100% h-55px w-221px flex items-center rounded-lg bg-[#1A65FF] pl-24px text-white">
|
<div class="box-border h-100% h-55px w-221px flex items-center rounded-lg bg-[#1A65FF] pl-24px text-white">
|
||||||
<img src="@/assets/images/1.png" alt="" srcset="" />
|
<img src="~/assets/images/1.png" alt="" srcset="" />
|
||||||
<span class="ml-12px text-16px">全部资源分类</span>
|
<span class="ml-12px text-16px">全部资源分类</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="side-menu border border-[#EEEEEE] border-solid">
|
<div class="side-menu border border-[#EEEEEE] border-solid">
|
||||||
@ -65,10 +65,10 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref, watch } from 'vue'
|
import { reactive, ref, watch } from 'vue'
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
// import KlCardDetail from '@/components/kl-card-detail/index.vue'
|
// import KlCardDetail from '~/components/kl-card-detail/index.vue'
|
||||||
import { hotTop, hotTag } from '@/api/home/index'
|
import { hotTop, hotTag } from '~/api/home/index'
|
||||||
import { ProjectDrawPageRespVO, ProjectDictNodeVO } from '@/api/home/type'
|
import type { ProjectDrawPageRespVO, ProjectDictNodeVO } from '~/api/home/type'
|
||||||
|
|
||||||
/** 请求参数 */
|
/** 请求参数 */
|
||||||
const query = reactive({
|
const query = reactive({
|
||||||
@ -105,7 +105,7 @@
|
|||||||
/** 点击卡片 */
|
/** 点击卡片 */
|
||||||
const handleCardClick = (item: ProjectDrawPageRespVO) => {
|
const handleCardClick = (item: ProjectDrawPageRespVO) => {
|
||||||
// 跳转到下载详情页 并且是单独开标签
|
// 跳转到下载详情页 并且是单独开标签
|
||||||
window.open(`/down-drawe-detail?id=${item.id}`, '_blank') // 修改为在新窗口打开
|
navigateTo(`/down-drawe-detail?id=${item.id}`) // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClickType = (primary?: ProjectDictNodeVO, secondary?: ProjectDictNodeVO) => {
|
const handleClickType = (primary?: ProjectDictNodeVO, secondary?: ProjectDictNodeVO) => {
|
||||||
@ -118,11 +118,11 @@
|
|||||||
level.unshift(normal)
|
level.unshift(normal)
|
||||||
}
|
}
|
||||||
if (query.type === 1) {
|
if (query.type === 1) {
|
||||||
window.open(`/drawe?level=${JSON.stringify(level)}`)
|
navigateTo(`/drawe?level=${JSON.stringify(level)}`)
|
||||||
} else if (query.type === 2) {
|
} else if (query.type === 2) {
|
||||||
window.open(`/text?level=${JSON.stringify(level)}`)
|
navigateTo(`/text?level=${JSON.stringify(level)}`)
|
||||||
} else if (query.type === 3) {
|
} else if (query.type === 3) {
|
||||||
window.open(`/model?level=${JSON.stringify(level)}`)
|
navigateTo(`/model?level=${JSON.stringify(level)}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, watch } from 'vue'
|
import { ref, reactive, watch } from 'vue'
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { recommendTop } from '@/api/home/index'
|
import { recommendTop } from '~/api/home/index'
|
||||||
import { ProjectDrawPageRespVO } from '@/api/home/type'
|
import type { ProjectDrawPageRespVO } from '~/api/home/type'
|
||||||
|
|
||||||
const query = reactive({
|
const query = reactive({
|
||||||
type: 1,
|
type: 1,
|
||||||
@ -55,11 +55,11 @@
|
|||||||
|
|
||||||
const handleClick = () => {
|
const handleClick = () => {
|
||||||
if (query.type === 1) {
|
if (query.type === 1) {
|
||||||
window.open('/drawe', '_blank')
|
navigateTo('/drawe')
|
||||||
} else if (query.type === 2) {
|
} else if (query.type === 2) {
|
||||||
window.open('/text', '_blank')
|
navigateTo('/text')
|
||||||
} else {
|
} else {
|
||||||
window.open('/model', '_blank')
|
navigateTo('/model')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -33,8 +33,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted } from 'vue'
|
import { ref, onMounted } from 'vue'
|
||||||
import type { ComponentPublicInstance } from 'vue'
|
import type { ComponentPublicInstance } from 'vue'
|
||||||
import { tab2 } from '@/api/home/index'
|
import { tab2 } from '~/api/home/index'
|
||||||
import { ProjectDictNodeVO } from '@/api/home/type'
|
import type { ProjectDictNodeVO } from '~/api/home/type'
|
||||||
|
|
||||||
const activeIndex = ref(-1)
|
const activeIndex = ref(-1)
|
||||||
const submenuTop = ref(0)
|
const submenuTop = ref(0)
|
||||||
@ -67,7 +67,7 @@
|
|||||||
level.unshift(normal)
|
level.unshift(normal)
|
||||||
}
|
}
|
||||||
|
|
||||||
window.open(`/drawe?level=${JSON.stringify(level)}`, '_blank')
|
navigateTo(`/drawe?level=${JSON.stringify(level)}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const keepSubmenuVisible = () => {
|
const keepSubmenuVisible = () => {
|
||||||
|
|||||||
@ -17,11 +17,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
import emptyImg from '@/assets/images/empty.png'
|
import emptyImg from '~/assets/images/empty.png'
|
||||||
|
|
||||||
const query = defineModel<pageReq>('modelValue', {
|
const query = defineModel<pageReq>('modelValue', {
|
||||||
required: true,
|
required: true,
|
||||||
|
|||||||
@ -23,14 +23,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import KlWallpaperCategory from '@/components/kl-wallpaper-category/index.vue'
|
import KlWallpaperCategory from '~/components/kl-wallpaper-category/index.vue'
|
||||||
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
||||||
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
||||||
|
|
||||||
import { reactive, watch, ref } from 'vue'
|
import { reactive, watch, ref } from 'vue'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const level = ref(
|
const level = ref(
|
||||||
|
|||||||
@ -54,9 +54,9 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import { resetPassoword } from '@/api/login/index'
|
import { resetPassoword } from '~/api/login/index'
|
||||||
import { sendSms } from '@/api/common/index'
|
import { sendSms } from '~/api/common/index'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const activeName = ref('修改密码')
|
const activeName = ref('修改密码')
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ProjectHistoryResVO } from '@/api/personal-center/types'
|
import type { ProjectHistoryResVO } from '~/api/personal-center/types'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
const modelValue = defineModel<ProjectHistoryResVO[]>('modelValue', {
|
const modelValue = defineModel<ProjectHistoryResVO[]>('modelValue', {
|
||||||
|
|||||||
@ -9,15 +9,15 @@
|
|||||||
<div class="text-14px text-[#333333] font-normal my-10px!">by {{ scope.row?.ownedUserIdInfo?.nickName }}</div>
|
<div class="text-14px text-[#333333] font-normal my-10px!">by {{ scope.row?.ownedUserIdInfo?.nickName }}</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
<img src="~/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
||||||
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -35,7 +35,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ProjectHistoryResVO } from '@/api/personal-center/types'
|
import type { ProjectHistoryResVO } from '~/api/personal-center/types'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
const modelValue = defineModel<ProjectHistoryResVO[]>('modelValue', {
|
const modelValue = defineModel<ProjectHistoryResVO[]>('modelValue', {
|
||||||
|
|||||||
@ -10,15 +10,15 @@
|
|||||||
<div class="text-14px text-[#333333] font-normal my-10px!">{{ scope.row?.ownedUserIdInfo?.nickName }}</div>
|
<div class="text-14px text-[#333333] font-normal my-10px!">{{ scope.row?.ownedUserIdInfo?.nickName }}</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.rowpreviewPoint || 0 }}</span>
|
<span class="ml-4px">{{ scope.rowpreviewPoint || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
<img src="~/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
||||||
<span class="ml-4px">{{ scope.row.hotPoint || 0 }}</span>
|
<span class="ml-4px">{{ scope.row.hotPoint || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.commentsPoint || 0 }}</span>
|
<span class="ml-4px">{{ scope.row.commentsPoint || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -42,11 +42,11 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import KlTabBar from '@/components/kl-tab-bar/v2/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/v2/index.vue'
|
||||||
import { PageResultProjectMemberFavoritesRespVO } from '@/api/personal-center/types'
|
import type { PageResultProjectMemberFavoritesRespVO } from '~/api/personal-center/types'
|
||||||
import { deleteProject } from '@/api/drawe-detail/index'
|
import { deleteProject } from '~/api/drawe-detail/index'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useMessage } from '@/utils/useMessage'
|
import { useMessage } from '~/utils/useMessage'
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
|
|
||||||
const type = defineModel<number | string>('type', {
|
const type = defineModel<number | string>('type', {
|
||||||
|
|||||||
@ -128,10 +128,10 @@
|
|||||||
import { throttle } from 'lodash'
|
import { throttle } from 'lodash'
|
||||||
import { ref, computed, onMounted, nextTick } from 'vue'
|
import { ref, computed, onMounted, nextTick } from 'vue'
|
||||||
import { Picture, Position, Sunrise, Search, Loading } from '@element-plus/icons-vue'
|
import { Picture, Position, Sunrise, Search, Loading } from '@element-plus/icons-vue'
|
||||||
import { upload } from '@/api/common'
|
import { upload } from '~/api/common'
|
||||||
import { sendSingleChat, conversationList, getChatDetail, clearUnreadMessage } from '@/api/channel/index'
|
import { sendSingleChat, conversationList, getChatDetail, clearUnreadMessage } from '~/api/channel/index'
|
||||||
import { chatMessagesReq, msgType, PageResultSessionRespVO, PageResultMessageRespVO } from '@/api/channel/types'
|
import type { chatMessagesReq, msgType, PageResultSessionRespVO, PageResultMessageRespVO } from '~/api/channel/types'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
|||||||
@ -23,11 +23,11 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive } from 'vue'
|
import { reactive } from 'vue'
|
||||||
// import { accDiv } from '@/utils/utils'
|
// import { accDiv } from '~/utils/utils'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { bizTypeMap } from '@/enum/index'
|
import { bizTypeMap } from '~/enum/index'
|
||||||
import { getWalletRechargeRecordPage } from '@/api/pay/index'
|
import { getWalletRechargeRecordPage } from '~/api/pay/index'
|
||||||
import { AppPayWalletRechargeRespVO } from '@/api/pay/types'
|
import type { AppPayWalletRechargeRespVO } from '~/api/pay/types'
|
||||||
|
|
||||||
const result = reactive({
|
const result = reactive({
|
||||||
data: [] as AppPayWalletRechargeRespVO[],
|
data: [] as AppPayWalletRechargeRespVO[],
|
||||||
|
|||||||
@ -38,13 +38,13 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, onMounted } from 'vue'
|
import { ref, watch, onMounted } from 'vue'
|
||||||
import { listWalletRechargePackage, submitPayOrder, getPayStatus } from '@/api/pay/index'
|
import { listWalletRechargePackage, submitPayOrder, getPayStatus } from '~/api/pay/index'
|
||||||
import { accDiv } from '@/utils/utils'
|
import { accDiv } from '~/utils/utils'
|
||||||
import { Close } from '@element-plus/icons-vue'
|
import { Close } from '@element-plus/icons-vue'
|
||||||
import type { AppPayWalletPackageRespVO } from '@/api/pay/types'
|
import type { AppPayWalletPackageRespVO } from '~/api/pay/types'
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import QrcodeVue from 'qrcode.vue'
|
import QrcodeVue from 'qrcode.vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|||||||
@ -10,15 +10,15 @@
|
|||||||
<div class="text-14px text-[#333333] font-normal my-10px!">{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</div>
|
<div class="text-14px text-[#333333] font-normal my-10px!">{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
<img src="~/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
||||||
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -43,11 +43,11 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
|
|
||||||
import { offShelf, deleteResource } from '@/api/personal-center'
|
import { offShelf, deleteResource } from '~/api/personal-center'
|
||||||
|
|
||||||
import KlTabBar from '@/components/kl-tab-bar/v2/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/v2/index.vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useMessage } from '@/utils/useMessage'
|
import { useMessage } from '~/utils/useMessage'
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
|
|
||||||
const type = defineModel<number | string>('type', {
|
const type = defineModel<number | string>('type', {
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, onUnmounted } from 'vue'
|
import { onMounted, ref, onUnmounted } from 'vue'
|
||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
import { getRecentIncomeAndActive, getResourceDistribution } from '@/api/personal-center/index'
|
import { getRecentIncomeAndActive, getResourceDistribution } from '~/api/personal-center/index'
|
||||||
|
|
||||||
const incomeChartRef = ref<HTMLElement>()
|
const incomeChartRef = ref<HTMLElement>()
|
||||||
const activeChartRef = ref<HTMLElement>()
|
const activeChartRef = ref<HTMLElement>()
|
||||||
|
|||||||
@ -5,8 +5,8 @@
|
|||||||
<div class="ml-29px">
|
<div class="ml-29px">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<span class="text-20px text-[#333333] font-normal">Hi,{{ userStore.userInfoRes.nickname }}</span>
|
<span class="text-20px text-[#333333] font-normal">Hi,{{ userStore.userInfoRes.nickname }}</span>
|
||||||
<img v-if="userStore.userInfoRes.vipLevel === 1" src="@/assets/svg/vip.svg" alt="" class="relative top-2px ml-5px" />
|
<img v-if="userStore.userInfoRes.vipLevel === 1" src="~/assets/svg/vip.svg" alt="" class="relative top-2px ml-5px" />
|
||||||
<img v-if="userStore.userInfoRes.vipLevel === 2" src="@/assets/svg/svip.svg" alt="" class="relative top-2px ml-5px" />
|
<img v-if="userStore.userInfoRes.vipLevel === 2" src="~/assets/svg/svip.svg" alt="" class="relative top-2px ml-5px" />
|
||||||
<div
|
<div
|
||||||
class="ml-18px h-30px w-80px cursor-pointer border border-[#1A65FF] rounded-15px border-solid text-center text-14px text-[#1A65FF] font-normal line-height-30px"
|
class="ml-18px h-30px w-80px cursor-pointer border border-[#1A65FF] rounded-15px border-solid text-center text-14px text-[#1A65FF] font-normal line-height-30px"
|
||||||
@click="handleClick"
|
@click="handleClick"
|
||||||
@ -15,19 +15,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mt-20px flex items-center text-14px text-[#333333] font-normal">
|
<div class="mt-20px flex items-center text-14px text-[#333333] font-normal">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (1).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (1).png" alt="" srcset="" />
|
||||||
<span class="ml-4px">我的积分: {{ userStaticInfo?.pointCount || 0 }}</span>
|
<span class="ml-4px">我的积分: {{ userStaticInfo?.pointCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-37px flex items-center">
|
<div class="ml-37px flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (2).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (2).png" alt="" srcset="" />
|
||||||
<span class="ml-4px">我的收藏: {{ userStaticInfo?.followCount || 0 }}</span>
|
<span class="ml-4px">我的收藏: {{ userStaticInfo?.followCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-37px flex items-center">
|
<div class="ml-37px flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (3).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (3).png" alt="" srcset="" />
|
||||||
<span class="ml-4px">我的发布: {{ userStaticInfo?.projectCount || 0 }}</span>
|
<span class="ml-4px">我的发布: {{ userStaticInfo?.projectCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-37px flex items-center">
|
<div class="ml-37px flex items-center">
|
||||||
<img src="@/assets/images/cad_0 (4).png" alt="" srcset="" />
|
<img src="~/assets/images/cad_0 (4).png" alt="" srcset="" />
|
||||||
<span class="ml-4px">我的下载: {{ userStaticInfo?.downloadCount || 0 }}</span>
|
<span class="ml-4px">我的下载: {{ userStaticInfo?.downloadCount || 0 }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -36,8 +36,8 @@
|
|||||||
<div class="mt-30px flex items-center justify-around">
|
<div class="mt-30px flex items-center justify-around">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<img src="@/assets/images/info_1 (3).png" alt="" srcset="" />
|
<img src="~/assets/images/info_1 (3).png" alt="" srcset="" />
|
||||||
<img src="@/assets/images/info_1 (4).png" alt="" srcset="" class="absolute left-18px top-18px" />
|
<img src="~/assets/images/info_1 (4).png" alt="" srcset="" class="absolute left-18px top-18px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-18px">
|
<div class="ml-18px">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
@ -49,8 +49,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<img src="@/assets/images/info_1 (5).png" alt="" srcset="" />
|
<img src="~/assets/images/info_1 (5).png" alt="" srcset="" />
|
||||||
<img src="@/assets/images/info_1 (6).png" alt="" srcset="" class="absolute left-18px top-22px" />
|
<img src="~/assets/images/info_1 (6).png" alt="" srcset="" class="absolute left-18px top-22px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-18px">
|
<div class="ml-18px">
|
||||||
<div>
|
<div>
|
||||||
@ -61,8 +61,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<img src="@/assets/images/info_1 (1).png" alt="" srcset="" />
|
<img src="~/assets/images/info_1 (1).png" alt="" srcset="" />
|
||||||
<img src="@/assets/images/info_1 (2).png" alt="" srcset="" class="absolute left-20px top-18px" />
|
<img src="~/assets/images/info_1 (2).png" alt="" srcset="" class="absolute left-20px top-18px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-18px">
|
<div class="ml-18px">
|
||||||
<div>
|
<div>
|
||||||
@ -78,15 +78,15 @@
|
|||||||
<div class="title">快捷入口</div>
|
<div class="title">快捷入口</div>
|
||||||
<div class="mt-20px flex items-center">
|
<div class="mt-20px flex items-center">
|
||||||
<div class="info_item cursor-pointer" @click="handleClickPush('/upnew/drawe')">
|
<div class="info_item cursor-pointer" @click="handleClickPush('/upnew/drawe')">
|
||||||
<img src="@/assets/images/fabu_2 (3).png" alt="" srcset="" />
|
<img src="~/assets/images/fabu_2 (3).png" alt="" srcset="" />
|
||||||
<div class="mt-10px">发布资源</div>
|
<div class="mt-10px">发布资源</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="info_item ml-31px cursor-pointer" @click="handleClickPush('/communication/channel')">
|
<div class="info_item ml-31px cursor-pointer" @click="handleClickPush('/communication/channel')">
|
||||||
<img src="@/assets/images/fabu_2 (1).png" alt="" srcset="" />
|
<img src="~/assets/images/fabu_2 (1).png" alt="" srcset="" />
|
||||||
<div class="mt-10px">交流频道</div>
|
<div class="mt-10px">交流频道</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="info_item ml-31px cursor-pointer" @click="handleService">
|
<div class="info_item ml-31px cursor-pointer" @click="handleService">
|
||||||
<img src="@/assets/images/fabu_2 (2).png" alt="" srcset="" />
|
<img src="~/assets/images/fabu_2 (2).png" alt="" srcset="" />
|
||||||
<div class="mt-10px">消息</div>
|
<div class="mt-10px">消息</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -102,12 +102,12 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { getUserStatistics } from '@/api/personal-center/index'
|
import { getUserStatistics } from '~/api/personal-center/index'
|
||||||
import { UserStatisticsCountRespVO } from '@/api/personal-center/types'
|
import type { UserStatisticsCountRespVO } from '~/api/personal-center/types'
|
||||||
import Message from './components/message.vue'
|
import Message from './components/message.vue'
|
||||||
import InfoEcharts from './info-echarts.vue'
|
import InfoEcharts from './info-echarts.vue'
|
||||||
import Pay from './components/pay.vue'
|
import Pay from './components/pay.vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
// 路由跳转
|
// 路由跳转
|
||||||
@ -136,7 +136,7 @@
|
|||||||
if (!path) {
|
if (!path) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
window.open(path, '_blank')
|
navigateTo(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="flex items-center justify-between border-b-1px border-b-[#eeeeee] border-b-solid pb-18px">
|
<div class="flex items-center justify-between border-b-1px border-b-[#eeeeee] border-b-solid pb-18px">
|
||||||
<div class="text-16px text-[#333333] font-normal">个人资料</div>
|
<div class="text-16px text-[#333333] font-normal">个人资料</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<!-- <img src="@/assets/images/fans.png" alt="" srcset="" /> -->
|
<!-- <img src="~/assets/images/fans.png" alt="" srcset="" /> -->
|
||||||
<span class="ml-8px text-14px text-[#333333] font-normal"></span>
|
<span class="ml-8px text-14px text-[#333333] font-normal"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -118,13 +118,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col justify-center text-14px text-[#333333] font-normal">
|
<div class="flex flex-col justify-center text-14px text-[#333333] font-normal">
|
||||||
<div class="mt-30px flex items-center">
|
<div class="mt-30px flex items-center">
|
||||||
<img src="@/assets/images/qq-v2.png" alt="" srcset="" class="h-35px w-34px" />
|
<img src="~/assets/images/qq-v2.png" alt="" srcset="" class="h-35px w-34px" />
|
||||||
<div class="ml-19px">QQ</div>
|
<div class="ml-19px">QQ</div>
|
||||||
<div class="ml-100px flex items-center"><div class="w-90px">QQ昵称:</div><div class="w-180px">xxx</div></div>
|
<div class="ml-100px flex items-center"><div class="w-90px">QQ昵称:</div><div class="w-180px">xxx</div></div>
|
||||||
<div class="btn">绑定</div>
|
<div class="btn">绑定</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-30px flex items-center">
|
<div class="mt-30px flex items-center">
|
||||||
<img src="@/assets/images/weixin-v2.png" alt="" srcset="" class="h-35px w-34px" />
|
<img src="~/assets/images/weixin-v2.png" alt="" srcset="" class="h-35px w-34px" />
|
||||||
<div class="ml-19px">微信</div>
|
<div class="ml-19px">微信</div>
|
||||||
<div class="ml-95px flex items-center"><div class="w-90px">微信昵称:</div><div class="w-180px">xxx</div></div>
|
<div class="ml-95px flex items-center"><div class="w-90px">微信昵称:</div><div class="w-180px">xxx</div></div>
|
||||||
<div class="btn">绑定</div>
|
<div class="btn">绑定</div>
|
||||||
@ -137,10 +137,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import { Plus } from '@element-plus/icons-vue'
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
import { tree, upload } from '@/api/common/index'
|
import { tree, upload } from '~/api/common/index'
|
||||||
import { keywords } from '@/api/upnew/index'
|
import { keywords } from '~/api/upnew/index'
|
||||||
import { userExtend, getUserInfo, updateUserExtend } from '@/api/personal-center/index.ts'
|
import { userExtend, getUserInfo, updateUserExtend } from '~/api/personal-center/index'
|
||||||
import { UserExtendSaveReqVO } from '@/api/personal-center/types'
|
import type { UserExtendSaveReqVO } from '~/api/personal-center/types'
|
||||||
import verifyDialog from './verify-dialog.vue'
|
import verifyDialog from './verify-dialog.vue'
|
||||||
const userFormRef = ref()
|
const userFormRef = ref()
|
||||||
|
|
||||||
|
|||||||
@ -33,14 +33,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
|
|
||||||
import { getContentPage, getUserToolBoxPage, getUserFavoritePage, getOwnContentPage } from '@/api/personal-center/index'
|
import { getContentPage, getUserToolBoxPage, getUserFavoritePage, getOwnContentPage } from '~/api/personal-center/index'
|
||||||
// import { ProjectHistoryResVO } from '@/api/personal-center/types'
|
// import { ProjectHistoryResVO } from '~/api/personal-center/types'
|
||||||
|
|
||||||
import uploadTable from './components/upload-table.vue'
|
import uploadTable from './components/upload-table.vue'
|
||||||
import downloadTable from './components/download-table.vue'
|
import downloadTable from './components/download-table.vue'
|
||||||
import favoriteTable from './components/favorite-table.vue'
|
import favoriteTable from './components/favorite-table.vue'
|
||||||
import browseTable from './components/browse-table.vue'
|
import browseTable from './components/browse-table.vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const activeName = ref('我的上传')
|
const activeName = ref('我的上传')
|
||||||
|
|||||||
@ -39,8 +39,8 @@
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import Pay from './components/pay.vue'
|
import Pay from './components/pay.vue'
|
||||||
import PayRecords from './components/pay-records.vue'
|
import PayRecords from './components/pay-records.vue'
|
||||||
import { getUserStatistics } from '@/api/personal-center/index'
|
import { getUserStatistics } from '~/api/personal-center/index'
|
||||||
import { UserStatisticsCountRespVO } from '@/api/personal-center/types'
|
import type { UserStatisticsCountRespVO } from '~/api/personal-center/types'
|
||||||
|
|
||||||
const activeTab = ref('purchase')
|
const activeTab = ref('purchase')
|
||||||
// const currentMonth = ref('2025.03')
|
// const currentMonth = ref('2025.03')
|
||||||
|
|||||||
@ -38,8 +38,8 @@
|
|||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import { Plus } from '@element-plus/icons-vue'
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
import { getUserAuthInfo, createUserAuthInfo, updateUserAuthInfo } from '@/api/personal-center/index.ts'
|
import { getUserAuthInfo, createUserAuthInfo, updateUserAuthInfo } from '~/api/personal-center/index'
|
||||||
import { UserAuthInfoRespVO } from '@/api/personal-center/types'
|
import type { UserAuthInfoRespVO } from '~/api/personal-center/types'
|
||||||
|
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const formRef = ref<FormInstance>()
|
const formRef = ref<FormInstance>()
|
||||||
|
|||||||
@ -2,77 +2,77 @@
|
|||||||
<KlNavTab />
|
<KlNavTab />
|
||||||
<div class="ma-auto w-1198px flex justify-between">
|
<div class="ma-auto w-1198px flex justify-between">
|
||||||
<div class="left mt-25px box-border h-370px w-260px border border-[#EEEEEE] rounded-4px border-solid bg-[#FFFFFF] text-15px text-[#333333] font-medium">
|
<div class="left mt-25px box-border h-370px w-260px border border-[#EEEEEE] rounded-4px border-solid bg-[#FFFFFF] text-15px text-[#333333] font-medium">
|
||||||
<router-link to="/personal/center/info" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/center/info" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="route.path.startsWith('/personal/center/info')" src="@/assets/images/user3.png" alt="" srcset="" class="h-20px" />
|
<img v-if="route.path.startsWith('/personal/center/info')" src="~/assets/images/user3.png" alt="" srcset="" class="h-20px" />
|
||||||
<img v-else src="@/assets/images/个人.png" alt="" srcset="" class="h-20px" />
|
<img v-else src="~/assets/images/个人.png" alt="" srcset="" class="h-20px" />
|
||||||
<span class="ml-10px">个人中心</span>
|
<span class="ml-10px">个人中心</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
|
|
||||||
<router-link to="/personal/profile" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/profile" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="!route.path.startsWith('/personal/profile')" src="@/assets/images/user_zl.png" alt="" srcset="" class="h-16px" />
|
<img v-if="!route.path.startsWith('/personal/profile')" src="~/assets/images/user_zl.png" alt="" srcset="" class="h-16px" />
|
||||||
<img v-else src="@/assets/images/个人资料 (1).png" alt="" srcset="" class="h-16px" />
|
<img v-else src="~/assets/images/个人资料 (1).png" alt="" srcset="" class="h-16px" />
|
||||||
<span class="ml-10px">个人资料</span>
|
<span class="ml-10px">个人资料</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
<router-link to="/personal/account/security" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/account/security" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="!route.path.startsWith('/personal/account/security')" src="@/assets/images/account.png" alt="" srcset="" class="h-20px" />
|
<img v-if="!route.path.startsWith('/personal/account/security')" src="~/assets/images/account.png" alt="" srcset="" class="h-20px" />
|
||||||
<img v-else src="@/assets/images/账户安全.png" alt="" srcset="" class="h-20px" />
|
<img v-else src="~/assets/images/账户安全.png" alt="" srcset="" class="h-20px" />
|
||||||
<span class="ml-14px">账户与安全</span>
|
<span class="ml-14px">账户与安全</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
<router-link to="/personal/resource/center" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/resource/center" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="!route.path.startsWith('/personal/resource/center')" src="@/assets/images/ziyuan.png" alt="" srcset="" class="h-18px" />
|
<img v-if="!route.path.startsWith('/personal/resource/center')" src="~/assets/images/ziyuan.png" alt="" srcset="" class="h-18px" />
|
||||||
<img v-else src="@/assets/images/资源.png" alt="" srcset="" class="h-18px" />
|
<img v-else src="~/assets/images/资源.png" alt="" srcset="" class="h-18px" />
|
||||||
<span class="ml-12px">资源中心</span>
|
<span class="ml-12px">资源中心</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
<router-link to="/personal/trading/center" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/trading/center" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="!route.path.startsWith('/personal/trading/center')" src="@/assets/images/pay.png" alt="" srcset="" class="h-20px" />
|
<img v-if="!route.path.startsWith('/personal/trading/center')" src="~/assets/images/pay.png" alt="" srcset="" class="h-20px" />
|
||||||
<img v-else src="@/assets/images/交易管理.png" alt="" srcset="" class="h-20px" />
|
<img v-else src="~/assets/images/交易管理.png" alt="" srcset="" class="h-20px" />
|
||||||
<span class="ml-12px">交易中心</span>
|
<span class="ml-12px">交易中心</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
<router-link to="/personal/center/message" class="flex items-center justify-between py-14px">
|
<nuxt-link to="/personal/center/message" class="flex items-center justify-between py-14px">
|
||||||
<div class="flex items-center pl-20px">
|
<div class="flex items-center pl-20px">
|
||||||
<img v-if="!route.path.startsWith('/personal/center/message')" src="@/assets/images/message.png" alt="" srcset="" class="h-18px" />
|
<img v-if="!route.path.startsWith('/personal/center/message')" src="~/assets/images/message.png" alt="" srcset="" class="h-18px" />
|
||||||
<img v-else src="@/assets/images/消息.png" alt="" srcset="" class="h-18px" />
|
<img v-else src="~/assets/images/消息.png" alt="" srcset="" class="h-18px" />
|
||||||
<span class="ml-14px">消息通知</span>
|
<span class="ml-14px">消息通知</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="pr-20px">
|
<div class="pr-20px">
|
||||||
<el-icon><ArrowRight /></el-icon>
|
<el-icon><ArrowRight /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</nuxt-link>
|
||||||
</div>
|
</div>
|
||||||
<div class="right mt-25px">
|
<div class="right mt-25px">
|
||||||
<router-view></router-view>
|
<NuxtPage />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ArrowRight } from '@element-plus/icons-vue'
|
import { ArrowRight } from '@element-plus/icons-vue'
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|||||||
@ -41,15 +41,15 @@
|
|||||||
<div class="text-14px text-[#666] font-normal my-10px!">{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</div>
|
<div class="text-14px text-[#666] font-normal my-10px!">{{ dayjs(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/look.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
<span class="ml-4px">{{ scope.row.previewPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
<img src="~/assets/images/add.png" alt="" srcset="" class="h-23px" />
|
||||||
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
<span class="ml-4px">{{ scope.row.hotPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-13px flex items-center">
|
<div class="ml-13px flex items-center">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="h-17px" />
|
||||||
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
<span class="ml-4px">{{ scope.row.commentsPoint }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -104,13 +104,13 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted, reactive } from 'vue'
|
import { ref, onMounted, reactive } from 'vue'
|
||||||
import { UserExtendSaveReqVO } from '@/api/personal-center/types'
|
import type { UserExtendSaveReqVO } from '~/api/personal-center/types'
|
||||||
import { getMainWork } from '@/api/drawe-detail/index'
|
import { getMainWork } from '~/api/drawe-detail/index'
|
||||||
import { getOwnContentPage } from '@/api/personal-center/index.ts'
|
import { getOwnContentPage } from '~/api/personal-center/index'
|
||||||
import { offShelf, deleteResource, getUserExtend } from '@/api/personal-center'
|
import { offShelf, deleteResource, getUserExtend } from '~/api/personal-center'
|
||||||
import { ProjectDrawMemberRespVO } from '@/api/drawe-detail/types'
|
import type { ProjectDrawMemberRespVO } from '~/api/drawe-detail/types'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useMessage } from '@/utils/useMessage'
|
import { useMessage } from '~/utils/useMessage'
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
// 用户信息
|
// 用户信息
|
||||||
const userForm = reactive<UserExtendSaveReqVO>({
|
const userForm = reactive<UserExtendSaveReqVO>({
|
||||||
@ -249,7 +249,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleClickV2 = (id: string | number) => {
|
const handleClickV2 = (id: string | number) => {
|
||||||
window.open(`/down-drawe-detail?id=${id}`, '_blank') // 修改为在新窗口打开
|
navigateTo(`/down-drawe-detail?id=${id}`) // 修改为在新窗口打开
|
||||||
}
|
}
|
||||||
// 获取最新发布
|
// 获取最新发布
|
||||||
const mainWork = ref<ProjectDrawMemberRespVO[]>([])
|
const mainWork = ref<ProjectDrawMemberRespVO[]>([])
|
||||||
|
|||||||
@ -67,9 +67,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive } from 'vue'
|
import { reactive } from 'vue'
|
||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import { signIn, getUserPointPage } from '@/api/personal-center/index'
|
import { signIn, getUserPointPage } from '~/api/personal-center/index'
|
||||||
import { PageResultMemberPointRecordRespVO } from '@/api/personal-center/types'
|
import type { PageResultMemberPointRecordRespVO } from '~/api/personal-center/types'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
|
|||||||
@ -17,11 +17,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import KlTabBar from '@/components/kl-tab-bar/index.vue'
|
import KlTabBar from '~/components/kl-tab-bar/index.vue'
|
||||||
import CardPicture from '@/components/kl-card-picture/index.vue'
|
import CardPicture from '~/components/kl-card-picture/index.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
import emptyImg from '@/assets/images/empty.png'
|
import emptyImg from '~/assets/images/empty.png'
|
||||||
|
|
||||||
const query = defineModel<pageReq>('modelValue', {
|
const query = defineModel<pageReq>('modelValue', {
|
||||||
required: true,
|
required: true,
|
||||||
|
|||||||
@ -23,14 +23,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import KlWallpaperCategory from '@/components/kl-wallpaper-category/index.vue'
|
import KlWallpaperCategory from '~/components/kl-wallpaper-category/index.vue'
|
||||||
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
import RecommendedColumnsV2 from './components/RecommendedColumnsV2.vue'
|
||||||
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
// import FeaturedSpecials from './components/FeaturedSpecials.vue'
|
||||||
|
|
||||||
import { reactive, watch, ref } from 'vue'
|
import { reactive, watch, ref } from 'vue'
|
||||||
import { page } from '@/api/upnew/index'
|
import { page } from '~/api/upnew/index'
|
||||||
import { pageRes, pageReq } from '@/api/upnew/types'
|
import type { pageRes, pageReq } from '~/api/upnew/types'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|||||||
@ -88,10 +88,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import { Plus } from '@element-plus/icons-vue'
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
import KlUploader from '@/components/kl-uploader/index.vue'
|
import KlUploader from '~/components/kl-uploader/index.vue'
|
||||||
import { parent, keywords, labels } from '@/api/upnew/index'
|
import { parent, keywords, labels } from '~/api/upnew/index'
|
||||||
import { create } from '@/api/toolbox/index.js'
|
import { create } from '~/api/toolbox/index.js'
|
||||||
import { TcreateReq } from '@/api/toolbox/types'
|
import type { TcreateReq } from '~/api/toolbox/types'
|
||||||
|
|
||||||
const form = reactive<TcreateReq>({
|
const form = reactive<TcreateReq>({
|
||||||
title: '',
|
title: '',
|
||||||
|
|||||||
@ -37,7 +37,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import useUserStore from '@/store/user'
|
import useUserStore from '~/store/user'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const emits = defineEmits(['search'])
|
const emits = defineEmits(['search'])
|
||||||
@ -48,7 +48,7 @@
|
|||||||
// 是否登录
|
// 是否登录
|
||||||
if (!userStore.token) return ElMessage.error('请先登录')
|
if (!userStore.token) return ElMessage.error('请先登录')
|
||||||
// 新开窗口 用router跳转 新窗口打开
|
// 新开窗口 用router跳转 新窗口打开
|
||||||
window.open('/toolbox-publish', '_blank')
|
navigateTo('/toolbox-publish')
|
||||||
}
|
}
|
||||||
|
|
||||||
const search = () => {
|
const search = () => {
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<KlSearch @search="search"></KlSearch>
|
<KlSearch @search="search"></KlSearch>
|
||||||
<div v-loading="loading" class="ml-auto mr-auto mt-20px w1440 flex justify-center gap-60px">
|
<div v-loading="loading" class="ml-auto mr-auto mt-20px w1440 flex justify-center gap-60px">
|
||||||
<div class="left w-821px">
|
<div class="left w-821px">
|
||||||
<img src="@/assets/images/banner2.png" alt="" srcset="" class="h-284px w-100%" />
|
<img src="~/assets/images/banner2.png" alt="" srcset="" class="h-284px w-100%" />
|
||||||
<div
|
<div
|
||||||
class="box-border border border-t-0px border-t-0px border-[#EEEEEE] rounded-12px border-solid border-t-none bg-[#FFFFFF] px-28px py-17px"
|
class="box-border border border-t-0px border-t-0px border-[#EEEEEE] rounded-12px border-solid border-t-none bg-[#FFFFFF] px-28px py-17px"
|
||||||
style="border-top-left-radius: 0px; border-top-right-radius: 0px"
|
style="border-top-left-radius: 0px; border-top-right-radius: 0px"
|
||||||
@ -19,10 +19,10 @@
|
|||||||
<div class="mt-10px flex items-center justify-between">
|
<div class="mt-10px flex items-center justify-between">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<div class="flex items-center text-14px text-[#666666] font-normal">
|
<div class="flex items-center text-14px text-[#666666] font-normal">
|
||||||
<img src="@/assets/images/look.png" alt="" srcset="" class="mr-4px h-17px w-23px" />{{ item.previewPoint }}
|
<img src="~/assets/images/look.png" alt="" srcset="" class="mr-4px h-17px w-23px" />{{ item.previewPoint }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-26px flex items-center text-14px text-[#666666] font-normal">
|
<div class="ml-26px flex items-center text-14px text-[#666666] font-normal">
|
||||||
<img src="@/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px w-19px" /> {{ item.commentsPoint }}
|
<img src="~/assets/images/chat.png" alt="" srcset="" class="mr-4px h-17px w-19px" /> {{ item.commentsPoint }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-20px">
|
<div class="ml-20px">
|
||||||
<div v-for="(v, index) in item.labels" :key="index" class="mr-10px inline-block text-14px text-[#1A65FF] font-normal">#{{ v }}</div>
|
<div v-for="(v, index) in item.labels" :key="index" class="mr-10px inline-block text-14px text-[#1A65FF] font-normal">#{{ v }}</div>
|
||||||
@ -85,7 +85,7 @@
|
|||||||
:key="item"
|
:key="item"
|
||||||
class="mt-16px flex items-center border-b-1px border-b-[#eee] border-b-solid pb-16px text-16px text-[#333333] font-normal"
|
class="mt-16px flex items-center border-b-1px border-b-[#eee] border-b-solid pb-16px text-16px text-[#333333] font-normal"
|
||||||
>
|
>
|
||||||
<img src="@/assets/images/aucad.png" alt="" srcset="" class="h-68px w-110px" />
|
<img src="~/assets/images/aucad.png" alt="" srcset="" class="h-68px w-110px" />
|
||||||
<div class="ml-20px text-16px text-[#333333] font-normal">Stable Diffusion 商业变现与 绘画大模型多场景实战</div>
|
<div class="ml-20px text-16px text-[#333333] font-normal">Stable Diffusion 商业变现与 绘画大模型多场景实战</div>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
@ -94,14 +94,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import { page } from '@/api/toolbox/index.js'
|
import { page } from '~/api/toolbox/index.js'
|
||||||
import { TpageReq, TpageRes } from '@/api/toolbox/types'
|
import type { TpageReq, TpageRes } from '~/api/toolbox/types'
|
||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
import KlSearch from '@/pages/toolbox/components/search.vue'
|
import KlSearch from '~/pages/toolbox/components/search.vue'
|
||||||
import { getRelationRecommend } from '@/api/drawe-detail/index'
|
import { getRelationRecommend } from '~/api/drawe-detail/index'
|
||||||
import { ProjectDrawPageRespVO } from '@/api/drawe-detail/types'
|
import type { ProjectDrawPageRespVO } from '~/api/drawe-detail/types'
|
||||||
import emptyImg from '@/assets/images/empty.png'
|
import emptyImg from '~/assets/images/empty.png'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
const pageReq = reactive<TpageReq>({
|
const pageReq = reactive<TpageReq>({
|
||||||
|
|||||||
@ -157,11 +157,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, PropType, computed } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
|
import { ref, computed } from 'vue'
|
||||||
import { Plus } from '@element-plus/icons-vue'
|
import { Plus } from '@element-plus/icons-vue'
|
||||||
import KlUploader from '@/components/kl-uploader/index.vue'
|
import KlUploader from '~/components/kl-uploader/index.vue'
|
||||||
import { parent, keywords, labels, indexTabs } from '@/api/upnew/index'
|
import { parent, keywords, labels, indexTabs } from '~/api/upnew/index'
|
||||||
import { TcreateReq } from '@/api/upnew/types'
|
import type { TcreateReq } from '~/api/upnew/types'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
vaildRules: {
|
vaildRules: {
|
||||||
|
|||||||
@ -53,9 +53,9 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { nextTick, ref } from 'vue'
|
import { nextTick, ref } from 'vue'
|
||||||
import { TcreateReq } from '@/api/upnew/types'
|
import type { TcreateReq } from '~/api/upnew/types'
|
||||||
import { tree } from '@/api/common/index'
|
import { tree } from '~/api/common/index'
|
||||||
import { DrawsEnmu } from '../util.ts'
|
import { DrawsEnmu } from '../util'
|
||||||
|
|
||||||
const form = defineModel<TcreateReq>('modelValue', {
|
const form = defineModel<TcreateReq>('modelValue', {
|
||||||
required: true,
|
required: true,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ml-23px box-border min-h-930px w-516px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] px-33px py-22px">
|
<div class="ml-23px box-border min-h-930px w-516px border border-[#EEEEEE] rounded-12px border-solid bg-[#FFFFFF] px-33px py-22px">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<img src="@/assets/images/preview.png" alt="" srcset="" width="16px" height="19px" /><span class="ml-7px text-18px text-[#333333] font-normal"
|
<img src="~/assets/images/preview.png" alt="" srcset="" width="16px" height="19px" /><span class="ml-7px text-18px text-[#333333] font-normal"
|
||||||
>预览</span
|
>预览</span
|
||||||
></div
|
></div
|
||||||
>
|
>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
>
|
>
|
||||||
<div class="my-30px h-1px w-460px rounded-1px bg-[#EEEEEE]"></div>
|
<div class="my-30px h-1px w-460px rounded-1px bg-[#EEEEEE]"></div>
|
||||||
<div class="flex items-center"
|
<div class="flex items-center"
|
||||||
><img src="@/assets/images/tip.png" width="20px" height="20px" /><span class="ml-7px text-18px text-[#333333] font-normal"
|
><img src="~/assets/images/tip.png" width="20px" height="20px" /><span class="ml-7px text-18px text-[#333333] font-normal"
|
||||||
>上传遇到问题可以咨询</span
|
>上传遇到问题可以咨询</span
|
||||||
></div
|
></div
|
||||||
>
|
>
|
||||||
|
|||||||
@ -28,11 +28,11 @@
|
|||||||
import PreView from './components/Preview.vue'
|
import PreView from './components/Preview.vue'
|
||||||
import DrawType from './components/DrawType.vue'
|
import DrawType from './components/DrawType.vue'
|
||||||
import DrawForm from './components/DrawForm.vue'
|
import DrawForm from './components/DrawForm.vue'
|
||||||
import KlNavTab from '@/components/kl-nav-tab/index.vue'
|
import KlNavTab from '~/components/kl-nav-tab/index.vue'
|
||||||
import { reactive, ref, onMounted, computed } from 'vue'
|
import { reactive, ref, onMounted, computed } from 'vue'
|
||||||
|
|
||||||
import { TcreateReq } from '@/api/upnew/types'
|
import type { TcreateReq } from '~/api/upnew/types'
|
||||||
import { create } from '@/api/upnew/index'
|
import { create } from '~/api/upnew/index'
|
||||||
|
|
||||||
const form = reactive<TcreateReq>({
|
const form = reactive<TcreateReq>({
|
||||||
activeName: '', // 标签
|
activeName: '', // 标签
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
// import { getPermissions } from '@/api/common'
|
// import { getPermissions } from '~/api/common'
|
||||||
import type { IPermissions } from '~/api/common/types'
|
import type { IPermissions } from '~/api/common/types'
|
||||||
|
|
||||||
// type TPayload = {
|
// type TPayload = {
|
||||||
|
|||||||
@ -1,7 +1,4 @@
|
|||||||
import type { AppMemberUserInfoRespVO } from "@/api/common/types";
|
import type { AppMemberUserInfoRespVO } from "~/api/common/types";
|
||||||
export type onRefreshTokenResponse = (
|
|
||||||
data: AxiosResponse | boolean
|
|
||||||
) => { token: string; refreshToken: string } | false;
|
|
||||||
|
|
||||||
class RefreshToken {
|
class RefreshToken {
|
||||||
static instance: RefreshToken;
|
static instance: RefreshToken;
|
||||||
@ -10,10 +7,10 @@ class RefreshToken {
|
|||||||
static SOTRAGE_USERID = "kl-userId";
|
static SOTRAGE_USERID = "kl-userId";
|
||||||
static SOTRAGE_USERNAME = "kl-userName";
|
static SOTRAGE_USERNAME = "kl-userName";
|
||||||
static SOTRAGE_USERINFO = "kl-userInfo";
|
static SOTRAGE_USERINFO = "kl-userInfo";
|
||||||
public pending = false;
|
static pending = false;
|
||||||
public callbacks: any[] = [];
|
static callbacks: any[] = [];
|
||||||
|
|
||||||
protected constructor(config: TRefreshTokenConstructorConfig) {
|
protected constructor(config: any) {
|
||||||
RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY = config?.refreshTokenKey || "kl-tk";
|
RefreshToken.SOTRAGE_REFRESH_TOKEN_KEY = config?.refreshTokenKey || "kl-tk";
|
||||||
RefreshToken.SOTRAGE_TOKENKEY = config?.refreshTokenKey || "kl-rfk";
|
RefreshToken.SOTRAGE_TOKENKEY = config?.refreshTokenKey || "kl-rfk";
|
||||||
RefreshToken.SOTRAGE_USERID = config?.refreshTokenKey || "kl-userId";
|
RefreshToken.SOTRAGE_USERID = config?.refreshTokenKey || "kl-userId";
|
||||||
@ -72,4 +69,5 @@ class RefreshToken {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default RefreshToken;
|
const REFRESHTOKEN = RefreshToken;
|
||||||
|
export default REFRESHTOKEN;
|
||||||
|
|||||||
151
utils/axios.ts
151
utils/axios.ts
@ -1,151 +0,0 @@
|
|||||||
import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosRequestConfig, AxiosResponse } from 'axios'
|
|
||||||
import qs from 'qs'
|
|
||||||
import useUserStore from '@/store/user'
|
|
||||||
import isPlainObject from 'lodash/isPlainObject'
|
|
||||||
import RefreshToken from './RefreshToken'
|
|
||||||
// 允许跨域
|
|
||||||
axios.defaults.headers.post['Access-Control-Allow-Origin-Type'] = '*'
|
|
||||||
const axiosInstance: AxiosInstance = axios.create({
|
|
||||||
baseURL: import.meta.env.VITE_APP_BASE_API,
|
|
||||||
timeout: 1200000,
|
|
||||||
})
|
|
||||||
|
|
||||||
// 自动刷新 token 实现
|
|
||||||
export const refreshToken = RefreshToken.create({
|
|
||||||
axiosInstance,
|
|
||||||
refreshTokenApiUrl: '',
|
|
||||||
onRefreshTokenResponse: (res: any) => {
|
|
||||||
if (res.data && (res?.data?.code === 0 || res?.data?.statusCode === '00000') && res.data.data) {
|
|
||||||
return {
|
|
||||||
token: res?.data?.data?.access_token || '',
|
|
||||||
refreshToken: res?.data?.data?.refresh_token || '',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const userStore = useUserStore()
|
|
||||||
userStore.logout()
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
onRefreshTokenResquest() {
|
|
||||||
const tokens = refreshToken.getToken()
|
|
||||||
return {
|
|
||||||
data: {
|
|
||||||
refreshToken: tokens.refreshToken,
|
|
||||||
},
|
|
||||||
config: {
|
|
||||||
headers: {
|
|
||||||
refreshToken: tokens.refreshToken,
|
|
||||||
},
|
|
||||||
data: {
|
|
||||||
refreshToken: tokens.refreshToken,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
||||||
// axios实例拦截响应
|
|
||||||
axiosInstance.interceptors.response.use(
|
|
||||||
(response: AxiosResponse) => {
|
|
||||||
//因为后端的有些接口没有statusCode这个状态码,先这样判断吧
|
|
||||||
if (response.data.statusCode === '00000' || response.data.code === 0) {
|
|
||||||
return response.data
|
|
||||||
} else {
|
|
||||||
ElMessage.error(response.data.msg)
|
|
||||||
return response.data
|
|
||||||
}
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
let message = '系统异常'
|
|
||||||
const { status, config } = error.response
|
|
||||||
if (status === 401) {
|
|
||||||
if (refreshToken.pending) {
|
|
||||||
return refreshToken.pushCallbacks(config)
|
|
||||||
} else {
|
|
||||||
// 刷新token
|
|
||||||
refreshToken.refresh().then((refreshSuccess) => {
|
|
||||||
// 刷新成功 回调错误队列
|
|
||||||
if (refreshSuccess) {
|
|
||||||
refreshToken.releaseQueue()
|
|
||||||
} else {
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// 推入第一个401请求
|
|
||||||
return refreshToken.pushCallbacks(config)
|
|
||||||
}
|
|
||||||
} else if (status === 404) {
|
|
||||||
message = '接口地址有误'
|
|
||||||
} else if (status === 400) {
|
|
||||||
message = '参数有误,请确认参数是否正确'
|
|
||||||
}
|
|
||||||
ElMessage.error(message)
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
// axios实例拦截请求
|
|
||||||
axiosInstance.interceptors.request.use(
|
|
||||||
(config: InternalAxiosRequestConfig) => {
|
|
||||||
config.headers['Accept-Language'] = 'zh-CN'
|
|
||||||
const tokens = refreshToken.getToken()
|
|
||||||
if (tokens !== null) {
|
|
||||||
config.headers['authorization'] = `Bearer ${tokens.token}`
|
|
||||||
config.headers['Refreshtoken'] = tokens.refreshToken
|
|
||||||
}
|
|
||||||
|
|
||||||
// 防止get请求缓存
|
|
||||||
if (config.method === 'get') {
|
|
||||||
config.params = {
|
|
||||||
...config.params,
|
|
||||||
...{ _t: new Date().getTime() },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isPlainObject(config.data)) {
|
|
||||||
// eslint-disable-next-line no-param-reassign
|
|
||||||
config.data = {
|
|
||||||
...config.data,
|
|
||||||
}
|
|
||||||
if (config.headers?.['content-type']) {
|
|
||||||
const contentType: string = config.headers['content-type'] + ''
|
|
||||||
if (/^application\/x-www-form-urlencoded/.test(contentType)) {
|
|
||||||
// form形式编码
|
|
||||||
config.data = qs.stringify(config.data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return config
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
const request = <T = any>(config: AxiosRequestConfig): Promise<T> => {
|
|
||||||
const conf = config
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
axiosInstance
|
|
||||||
.request<any, AxiosResponse<IResponse>>(conf)
|
|
||||||
.then((res: AxiosResponse<IResponse>) => {
|
|
||||||
const data: any = res
|
|
||||||
resolve(data as T)
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 封装get
|
|
||||||
export function get<T = any>(config: AxiosRequestConfig): Promise<T> {
|
|
||||||
return request({ ...config, method: 'GET' })
|
|
||||||
}
|
|
||||||
// 封装delete
|
|
||||||
export function Delete<T = any>(config: AxiosRequestConfig): Promise<T> {
|
|
||||||
return request({ ...config, method: 'delete' })
|
|
||||||
}
|
|
||||||
// 封装put
|
|
||||||
export function put<T = any>(config: AxiosRequestConfig): Promise<T> {
|
|
||||||
return request({ ...config, method: 'put' })
|
|
||||||
}
|
|
||||||
// 封装post
|
|
||||||
export function post<T = any>(config: AxiosRequestConfig): Promise<T> {
|
|
||||||
return request({ ...config, method: 'POST' })
|
|
||||||
}
|
|
||||||
|
|
||||||
export default axiosInstance
|
|
||||||
export type { AxiosInstance, AxiosResponse }
|
|
||||||
129
yarn.lock
129
yarn.lock
@ -709,6 +709,72 @@
|
|||||||
semver "^7.5.3"
|
semver "^7.5.3"
|
||||||
tar "^7.4.0"
|
tar "^7.4.0"
|
||||||
|
|
||||||
|
"@napi-rs/canvas-android-arm64@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.77.tgz#58debdab512a950d505f17cd499e7171f33a5184"
|
||||||
|
integrity sha512-jC8YX0rbAnu9YrLK1A52KM2HX9EDjrJSCLVuBf9Dsov4IC6GgwMLS2pwL9GFLJnSZBFgdwnA84efBehHT9eshA==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-darwin-arm64@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.77.tgz#84bbbf72d2ca647d2be7d1a0a64548ba086b8b95"
|
||||||
|
integrity sha512-VFaCaCgAV0+hPwXajDIiHaaGx4fVCuUVYp/CxCGXmTGz699ngIEBx3Sa2oDp0uk3X+6RCRLueb7vD44BKBiPIg==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-darwin-x64@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.77.tgz#e0f845fa5d2ad7eafe49c5e862a94b4be1dbc040"
|
||||||
|
integrity sha512-uD2NSkf6I4S3o0POJDwweK85FE4rfLNA2N714MgiEEMMw5AmupfSJGgpYzcyEXtPzdaca6rBfKcqNvzR1+EyLQ==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-arm-gnueabihf@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.77.tgz#51f2d786951c9c1eac8dbc92471a128212392cb6"
|
||||||
|
integrity sha512-03GxMMZGhHRQxiA4gyoKT6iQSz8xnA6T9PAfg/WNJnbkVMFZG782DwUJUb39QIZ1uE1euMCPnDgWAJ092MmgJQ==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-arm64-gnu@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.77.tgz#e92897dac7f3b7acb806529bf8a0ab20ac26e84f"
|
||||||
|
integrity sha512-ZO+d2gRU9JU1Bb7SgJcJ1k9wtRMCpSWjJAJ+2phhu0Lw5As8jYXXXmLKmMTGs1bOya2dBMYDLzwp7KS/S/+aCA==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-arm64-musl@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.77.tgz#f2ba1f00e734c6ab142efd86263adf5cb391a228"
|
||||||
|
integrity sha512-S1KtnP1+nWs2RApzNkdNf8X4trTLrHaY7FivV61ZRaL8NvuGOkSkKa+gWN2iedIGFEDz6gecpl/JAUSewwFXYg==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-riscv64-gnu@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.77.tgz#c6b3cb3cd277de835ac06a87403eca51efa67acd"
|
||||||
|
integrity sha512-A4YIKFYUwDtrSzCtdCAO5DYmRqlhCVKHdpq0+dBGPnIEhOQDFkPBTfoTAjO3pjlEnorlfKmNMOH21sKQg2esGA==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-x64-gnu@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.77.tgz#c36c7dbec434d6c60529edbfe46a32d1ac21d096"
|
||||||
|
integrity sha512-Lt6Sef5l0+5O1cSZ8ysO0JI+x+rSrqZyXs5f7+kVkCAOVq8X5WTcDVbvWvEs2aRhrWTp5y25Jf2Bn+3IcNHOuQ==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-linux-x64-musl@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.77.tgz#36c20eae7c46f724da406a68199755601a7b311d"
|
||||||
|
integrity sha512-NiNFvC+D+omVeJ3IjYlIbyt/igONSABVe9z0ZZph29epHgZYu4eHwV9osfpRt1BGGOAM8LkFrHk4LBdn2EDymA==
|
||||||
|
|
||||||
|
"@napi-rs/canvas-win32-x64-msvc@0.1.77":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.77.tgz#1cb0b9964e0b4db348e4120eea39b5c60aa5432c"
|
||||||
|
integrity sha512-fP6l0hZiWykyjvpZTS3sI46iib8QEflbPakNoUijtwyxRuOPTTBfzAWZUz5z2vKpJJ/8r305wnZeZ8lhsBHY5A==
|
||||||
|
|
||||||
|
"@napi-rs/canvas@^0.1.65", "@napi-rs/canvas@^0.1.74":
|
||||||
|
version "0.1.77"
|
||||||
|
resolved "https://registry.npmmirror.com/@napi-rs/canvas/-/canvas-0.1.77.tgz#e78e208adb79cf211f6d260664d766b6f26da341"
|
||||||
|
integrity sha512-N9w2DkEKE1AXGp3q55GBOP6BEoFrqChDiFqJtKViTpQCWNOSVuMz7LkoGehbnpxtidppbsC36P0kCZNqJKs29w==
|
||||||
|
optionalDependencies:
|
||||||
|
"@napi-rs/canvas-android-arm64" "0.1.77"
|
||||||
|
"@napi-rs/canvas-darwin-arm64" "0.1.77"
|
||||||
|
"@napi-rs/canvas-darwin-x64" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-arm-gnueabihf" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-arm64-gnu" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-arm64-musl" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-riscv64-gnu" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-x64-gnu" "0.1.77"
|
||||||
|
"@napi-rs/canvas-linux-x64-musl" "0.1.77"
|
||||||
|
"@napi-rs/canvas-win32-x64-msvc" "0.1.77"
|
||||||
|
|
||||||
"@napi-rs/wasm-runtime@^1.0.1":
|
"@napi-rs/wasm-runtime@^1.0.1":
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz#24593dbd6fd1454b0b9c8b73bf7ac62d92a6bf63"
|
resolved "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz#24593dbd6fd1454b0b9c8b73bf7ac62d92a6bf63"
|
||||||
@ -1664,6 +1730,11 @@
|
|||||||
resolved "https://registry.npmmirror.com/@speed-highlight/core/-/core-1.2.7.tgz"
|
resolved "https://registry.npmmirror.com/@speed-highlight/core/-/core-1.2.7.tgz"
|
||||||
integrity sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==
|
integrity sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==
|
||||||
|
|
||||||
|
"@tinymce/tinymce-vue@^6.3.0":
|
||||||
|
version "6.3.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@tinymce/tinymce-vue/-/tinymce-vue-6.3.0.tgz#1ea4d57eea71e48aa71da9d8de98472f8505b2d4"
|
||||||
|
integrity sha512-DSP8Jhd3XqCCliTnusfbmz3D8GqQ4iRzkc4aadYHDcJPVjkaqopJ61McOdH82CSy599vGLkPjGzqJYWJkRMiUA==
|
||||||
|
|
||||||
"@tybys/wasm-util@^0.10.0":
|
"@tybys/wasm-util@^0.10.0":
|
||||||
version "0.10.0"
|
version "0.10.0"
|
||||||
resolved "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369"
|
resolved "https://registry.npmmirror.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369"
|
||||||
@ -1726,6 +1797,13 @@
|
|||||||
resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz"
|
resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz"
|
||||||
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
|
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
|
||||||
|
|
||||||
|
"@types/tinymce@^5.5.0":
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.npmmirror.com/@types/tinymce/-/tinymce-5.5.0.tgz#b92f376ff97a1a3fef474827e13874786a2fa838"
|
||||||
|
integrity sha512-fOma8SV34kaHoiigF/RJ7/wbgv2B2DXtP51qTWn5nt2D2ubHFDTl/HKy/QmSgBxkdvpMNW9bng58cMsqgfQrUA==
|
||||||
|
dependencies:
|
||||||
|
tinymce "*"
|
||||||
|
|
||||||
"@types/triple-beam@^1.3.2":
|
"@types/triple-beam@^1.3.2":
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
resolved "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz"
|
resolved "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz"
|
||||||
@ -3102,6 +3180,11 @@ decache@^4.6.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
callsite "^1.0.0"
|
callsite "^1.0.0"
|
||||||
|
|
||||||
|
decimal.js@^10.6.0:
|
||||||
|
version "10.6.0"
|
||||||
|
resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a"
|
||||||
|
integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==
|
||||||
|
|
||||||
deepmerge@^4.2.2:
|
deepmerge@^4.2.2:
|
||||||
version "4.3.1"
|
version "4.3.1"
|
||||||
resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz"
|
resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz"
|
||||||
@ -3317,6 +3400,14 @@ eastasianwidth@^0.2.0:
|
|||||||
resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
|
resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
|
||||||
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||||
|
|
||||||
|
echarts@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz#2935aa7751c282d1abbbf7d719d397199a15b9e7"
|
||||||
|
integrity sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==
|
||||||
|
dependencies:
|
||||||
|
tslib "2.3.0"
|
||||||
|
zrender "6.0.0"
|
||||||
|
|
||||||
ee-first@1.1.1:
|
ee-first@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz"
|
resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz"
|
||||||
@ -5303,6 +5394,20 @@ pathe@^2.0.1, pathe@^2.0.3:
|
|||||||
resolved "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz"
|
resolved "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz"
|
||||||
integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
|
integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
|
||||||
|
|
||||||
|
pdfjs-dist@^4.10.38:
|
||||||
|
version "4.10.38"
|
||||||
|
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz#3ee698003790dc266cc8b55c0e662ccb9ae18f53"
|
||||||
|
integrity sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==
|
||||||
|
optionalDependencies:
|
||||||
|
"@napi-rs/canvas" "^0.1.65"
|
||||||
|
|
||||||
|
pdfjs-dist@^5.4.54:
|
||||||
|
version "5.4.54"
|
||||||
|
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-5.4.54.tgz#a2a605cd65d401f988c1e8e79454f2eca9d385bd"
|
||||||
|
integrity sha512-TBAiTfQw89gU/Z4LW98Vahzd2/LoCFprVGvGbTgFt+QCB1F+woyOPmNNVgLa6djX9Z9GGTnj7qE1UzpOVJiINw==
|
||||||
|
optionalDependencies:
|
||||||
|
"@napi-rs/canvas" "^0.1.74"
|
||||||
|
|
||||||
pend@~1.2.0:
|
pend@~1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz"
|
resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz"
|
||||||
@ -6369,6 +6474,11 @@ tinyglobby@0.2.14, tinyglobby@^0.2.14:
|
|||||||
fdir "^6.4.4"
|
fdir "^6.4.4"
|
||||||
picomatch "^4.0.2"
|
picomatch "^4.0.2"
|
||||||
|
|
||||||
|
tinymce@*, tinymce@^8.0.2:
|
||||||
|
version "8.0.2"
|
||||||
|
resolved "https://registry.npmmirror.com/tinymce/-/tinymce-8.0.2.tgz#babaaa40c154d0832b41332f25f3485b5887a6f2"
|
||||||
|
integrity sha512-Gkvn5mRcZCAK1EKP7hnk3VBzwqPbqpZU2AN0T08BMtvmY9Sg0C0ZqmMghJCQ3vgo+LWA38pDOPiaM8EW7BZEow==
|
||||||
|
|
||||||
tmp-promise@^3.0.2:
|
tmp-promise@^3.0.2:
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.npmmirror.com/tmp-promise/-/tmp-promise-3.0.3.tgz"
|
resolved "https://registry.npmmirror.com/tmp-promise/-/tmp-promise-3.0.3.tgz"
|
||||||
@ -6418,6 +6528,11 @@ ts-api-utils@^2.1.0:
|
|||||||
resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz"
|
resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz"
|
||||||
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
|
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
|
||||||
|
|
||||||
|
tslib@2.3.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
|
||||||
|
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
|
||||||
|
|
||||||
tslib@^2.4.0, tslib@^2.6.3, tslib@^2.8.1:
|
tslib@^2.4.0, tslib@^2.6.3, tslib@^2.8.1:
|
||||||
version "2.8.1"
|
version "2.8.1"
|
||||||
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz"
|
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz"
|
||||||
@ -6803,6 +6918,13 @@ vue-flow-layout@^0.2.0:
|
|||||||
resolved "https://registry.npmmirror.com/vue-flow-layout/-/vue-flow-layout-0.2.0.tgz"
|
resolved "https://registry.npmmirror.com/vue-flow-layout/-/vue-flow-layout-0.2.0.tgz"
|
||||||
integrity sha512-zKgsWWkXq0xrus7H4Mc+uFs1ESrmdTXlO0YNbR6wMdPaFvosL3fMB8N7uTV308UhGy9UvTrGhIY7mVz9eN+L0Q==
|
integrity sha512-zKgsWWkXq0xrus7H4Mc+uFs1ESrmdTXlO0YNbR6wMdPaFvosL3fMB8N7uTV308UhGy9UvTrGhIY7mVz9eN+L0Q==
|
||||||
|
|
||||||
|
vue-pdf-embed@^2.1.3:
|
||||||
|
version "2.1.3"
|
||||||
|
resolved "https://registry.npmmirror.com/vue-pdf-embed/-/vue-pdf-embed-2.1.3.tgz#e2575b75ed0463c41265d2405506a7d1c39ed0ee"
|
||||||
|
integrity sha512-EGgZNb8HRrAloBpb8p8CugDpJpoPbQ8CFfAYdWZgq2e5qBMP9JSeLzVQIAJkXsclHXRIS3O9fp3WQbP9T5Inwg==
|
||||||
|
dependencies:
|
||||||
|
pdfjs-dist "^4.10.38"
|
||||||
|
|
||||||
vue-router@^4.5.1:
|
vue-router@^4.5.1:
|
||||||
version "4.5.1"
|
version "4.5.1"
|
||||||
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz"
|
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz"
|
||||||
@ -7074,3 +7196,10 @@ zod@^3.23.8:
|
|||||||
version "3.25.76"
|
version "3.25.76"
|
||||||
resolved "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz"
|
resolved "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz"
|
||||||
integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==
|
integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==
|
||||||
|
|
||||||
|
zrender@6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz#947077bc69cdea744134984927f132f3727f8079"
|
||||||
|
integrity sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==
|
||||||
|
dependencies:
|
||||||
|
tslib "2.3.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user