From a3259ad36fc6862a3425d27ee25a2a6338276c41 Mon Sep 17 00:00:00 2001 From: Gsh <15170702455@163.com> Date: Sat, 3 Jan 2026 15:16:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=89=8D=E7=AB=AF=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Yi.Ai.Vue3/src/api/aiImage/index.ts | 33 + Yi.Ai.Vue3/src/api/aiImage/types.ts | 53 ++ Yi.Ai.Vue3/src/api/index.ts | 1 + Yi.Ai.Vue3/src/api/model/index.ts | 3 +- .../chat/image/components/ImageGenerator.vue | 566 ++++++++++++++++++ .../chat/image/components/ImagePlaza.vue | 213 +++++++ .../pages/chat/image/components/MyImages.vue | 275 +++++++++ .../pages/chat/image/components/TaskCard.vue | 112 ++++ Yi.Ai.Vue3/src/pages/chat/image/index.vue | 97 ++- Yi.Ai.Vue3/src/pages/console/index.vue | 7 +- Yi.Ai.Vue3/types/components.d.ts | 4 + 11 files changed, 1343 insertions(+), 21 deletions(-) create mode 100644 Yi.Ai.Vue3/src/api/aiImage/index.ts create mode 100644 Yi.Ai.Vue3/src/api/aiImage/types.ts create mode 100644 Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue create mode 100644 Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue create mode 100644 Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue create mode 100644 Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue diff --git a/Yi.Ai.Vue3/src/api/aiImage/index.ts b/Yi.Ai.Vue3/src/api/aiImage/index.ts new file mode 100644 index 00000000..e4c55e67 --- /dev/null +++ b/Yi.Ai.Vue3/src/api/aiImage/index.ts @@ -0,0 +1,33 @@ +import { get, post } from '@/utils/request'; +import type { + GenerateImageRequest, + ImageModel, + PublishImageRequest, + TaskListRequest, + TaskListResponse, + TaskStatusResponse, +} from './types'; + +export function generateImage(data: GenerateImageRequest) { + return post('/ai-image/generate', data).json(); +} + +export function getTaskStatus(taskId: string) { + return get(`/ai-image/task/${taskId}`).json(); +} + +export function getMyTasks(params: TaskListRequest) { + return get('/ai-image/my-tasks', params).json(); +} + +export function getImagePlaza(params: TaskListRequest) { + return get('/ai-image/plaza', params).json(); +} + +export function publishImage(data: PublishImageRequest) { + return post('/ai-image/publish', data).json(); +} + +export function getImageModels() { + return post('/ai-image/model').json(); +} \ No newline at end of file diff --git a/Yi.Ai.Vue3/src/api/aiImage/types.ts b/Yi.Ai.Vue3/src/api/aiImage/types.ts new file mode 100644 index 00000000..0337aff1 --- /dev/null +++ b/Yi.Ai.Vue3/src/api/aiImage/types.ts @@ -0,0 +1,53 @@ +export interface GenerateImageRequest { + tokenId: string; + prompt: string; + modelId: string; + referenceImagesPrefixBase64?: string[]; +} + +export interface TaskStatusResponse { + id: string; + prompt: string; + storePrefixBase64?: string; + storeUrl?: string; + taskStatus: 'Processing' | 'Success' | 'Fail'; + publishStatus: string; + categories: string[]; + creationTime: string; +} + +export interface TaskListRequest { + PageIndex: number; + PageSize: number; + TaskStatus?: 'Processing' | 'Success' | 'Fail'; +} + +export interface TaskItem { + id: string; + prompt: string; + storePrefixBase64?: string; + storeUrl?: string; + taskStatus: 'Processing' | 'Success' | 'Fail'; + publishStatus: string; + categories: string[]; + creationTime: string; +} + +export interface TaskListResponse { + total: number; + items: TaskItem[]; +} + +export interface PublishImageRequest { + taskId: string; + categories: string[]; +} + +export interface ImageModel { + id: string; + modelId: string; + modelName: string; + modelDescribe: string; + remark: string; + isPremiumPackage: boolean; +} diff --git a/Yi.Ai.Vue3/src/api/index.ts b/Yi.Ai.Vue3/src/api/index.ts index 4bfb8e92..b165d819 100644 --- a/Yi.Ai.Vue3/src/api/index.ts +++ b/Yi.Ai.Vue3/src/api/index.ts @@ -6,3 +6,4 @@ export * from './model'; export * from './pay'; export * from './session'; export * from './user'; +export * from './aiImage'; diff --git a/Yi.Ai.Vue3/src/api/model/index.ts b/Yi.Ai.Vue3/src/api/model/index.ts index 05ade05d..28a3a81c 100644 --- a/Yi.Ai.Vue3/src/api/model/index.ts +++ b/Yi.Ai.Vue3/src/api/model/index.ts @@ -138,7 +138,8 @@ export function disableToken(id: string) { // 新增接口2 // 获取可选择的token信息 export function getSelectableTokenInfo() { - return get('/token/select-list').json(); + // return get('/token/select-list').json(); + return get('/token/select-list?includeDefault=false').json(); } /* 返回数据 diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue new file mode 100644 index 00000000..3f50855d --- /dev/null +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue @@ -0,0 +1,566 @@ + + + + + diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue new file mode 100644 index 00000000..6d632e2d --- /dev/null +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue new file mode 100644 index 00000000..12b981b9 --- /dev/null +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue new file mode 100644 index 00000000..4eea66af --- /dev/null +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue @@ -0,0 +1,112 @@ + + + + + \ No newline at end of file diff --git a/Yi.Ai.Vue3/src/pages/chat/image/index.vue b/Yi.Ai.Vue3/src/pages/chat/image/index.vue index b319c725..6d6a0d45 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/index.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/index.vue @@ -1,26 +1,85 @@ - - - diff --git a/Yi.Ai.Vue3/src/pages/console/index.vue b/Yi.Ai.Vue3/src/pages/console/index.vue index b7f7fa4d..9d480616 100644 --- a/Yi.Ai.Vue3/src/pages/console/index.vue +++ b/Yi.Ai.Vue3/src/pages/console/index.vue @@ -6,6 +6,11 @@ import { useRoute, useRouter } from 'vue-router'; const route = useRoute(); const router = useRouter(); +// 从 URL 中提取邀请码参数 +const inviteCodeFromUrl = computed(() => { + return route.query.inviteCode as string | undefined; +}); + // 控制侧边栏折叠状态 const isCollapsed = ref(false); @@ -103,7 +108,7 @@ window.addEventListener('resize', checkIsMobile); - + diff --git a/Yi.Ai.Vue3/types/components.d.ts b/Yi.Ai.Vue3/types/components.d.ts index 16d28441..9e9269b3 100644 --- a/Yi.Ai.Vue3/types/components.d.ts +++ b/Yi.Ai.Vue3/types/components.d.ts @@ -19,6 +19,7 @@ declare module 'vue' { ElBadge: typeof import('element-plus/es')['ElBadge'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] + ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckTag: typeof import('element-plus/es')['ElCheckTag'] ElCol: typeof import('element-plus/es')['ElCol'] ElCollapse: typeof import('element-plus/es')['ElCollapse'] @@ -36,6 +37,7 @@ declare module 'vue' { ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] + ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] ElInput: typeof import('element-plus/es')['ElInput'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElMain: typeof import('element-plus/es')['ElMain'] @@ -59,6 +61,7 @@ declare module 'vue' { ElTimeline: typeof import('element-plus/es')['ElTimeline'] ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] ElTooltip: typeof import('element-plus/es')['ElTooltip'] + ElUpload: typeof import('element-plus/es')['ElUpload'] FilesSelect: typeof import('./../src/components/FilesSelect/index.vue')['default'] IconSelect: typeof import('./../src/components/IconSelect/index.vue')['default'] Indexl: typeof import('./../src/components/SupportModelProducts/indexl.vue')['default'] @@ -87,6 +90,7 @@ declare module 'vue' { WelecomeText: typeof import('./../src/components/WelecomeText/index.vue')['default'] } export interface GlobalDirectives { + vInfiniteScroll: typeof import('element-plus/es')['ElInfiniteScroll'] vLoading: typeof import('element-plus/es')['ElLoadingDirective'] } }