Skip to content

Commit 21c7c17

Browse files
YunaiVgitee-org
authored andcommitted
!479 AI 大模型的草稿提交(code review 代码)
Merge pull request !479 from 芋道源码/dev
2 parents b9178c8 + a854e96 commit 21c7c17

File tree

21 files changed

+345
-199
lines changed

21 files changed

+345
-199
lines changed

.image/common/ai-feature.png

20.7 KB
Loading

.image/common/ai-preview.gif

348 KB
Loading

README.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,26 +191,24 @@ ps:核心功能已经实现,正在对接微信小程序中...
191191

192192
### 商城系统
193193

194+
演示地址:<https://doc.iocoder.cn/mall-preview/>
195+
194196
![功能图](/.image/common/mall-feature.png)
195197

196198
![功能图](/.image/common/mall-preview.png)
197199

198-
_前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋道快速开发平台_
199-
200-
演示地址:<https://doc.iocoder.cn/mall-preview/>
201-
202200
### ERP 系统
203201

204-
![功能图](/.image/common/erp-feature.png)
205-
206202
演示地址:<https://doc.iocoder.cn/erp-preview/>
207203

208-
### CRM 系统
204+
![功能图](/.image/common/erp-feature.png)
209205

210-
![功能图](/.image/common/crm-feature.png)
206+
### CRM 系统
211207

212208
演示地址:<https://doc.iocoder.cn/crm-preview/>
213209

210+
![功能图](/.image/common/crm-feature.png)
211+
214212
## 🐷 演示图
215213

216214
### 系统功能

src/api/ai/image/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export const ImageApi = {
5656
getImagePageMy: async (params: PageParam) => {
5757
return await request.get({ url: `/ai/image/my-page`, params })
5858
},
59+
// 获取公开的绘图记录
60+
getImagePagePublic: async (params: PageParam) => {
61+
return await request.get({ url: `/ai/image/public-page`, params })
62+
},
5963
// 获取【我的】绘图记录
6064
getImageMy: async (id: number) => {
6165
return await request.get({ url: `/ai/image/get-my?id=${id}` })

src/api/ai/write/index.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { fetchEventSource } from '@microsoft/fetch-event-source'
2+
3+
import { getAccessToken } from '@/utils/auth'
4+
import { config } from '@/config/axios/config'
5+
import { AiWriteTypeEnum } from '@/views/ai/utils/constants'
6+
import request from '@/config/axios'
7+
8+
export interface WriteVO {
9+
type: AiWriteTypeEnum.WRITING | AiWriteTypeEnum.REPLY // 1:撰写 2:回复
10+
prompt: string // 写作内容提示 1。撰写 2回复
11+
originalContent: string // 原文
12+
length: number // 长度
13+
format: number // 格式
14+
tone: number // 语气
15+
language: number // 语言
16+
userId?: number // 用户编号
17+
platform?: string // 平台
18+
model?: string // 模型
19+
generatedContent?: string // 生成的内容
20+
errorMessage?: string // 错误信息
21+
createTime?: Date // 创建时间
22+
}
23+
24+
export interface AiWritePageReqVO extends PageParam {
25+
userId?: number // 用户编号
26+
type?: AiWriteTypeEnum // 写作类型
27+
platform?: string // 平台
28+
createTime?: [string, string] // 创建时间
29+
}
30+
31+
export interface AiWriteRespVo {
32+
id: number
33+
userId: number
34+
type: number
35+
platform: string
36+
model: string
37+
prompt: string
38+
generatedContent: string
39+
originalContent: string
40+
length: number
41+
format: number
42+
tone: number
43+
language: number
44+
errorMessage: string
45+
createTime: string
46+
}
47+
48+
export const WriteApi = {
49+
writeStream: ({
50+
data,
51+
onClose,
52+
onMessage,
53+
onError,
54+
ctrl
55+
}: {
56+
data: WriteVO
57+
onMessage?: (res: any) => void
58+
onError?: (...args: any[]) => void
59+
onClose?: (...args: any[]) => void
60+
ctrl: AbortController
61+
}) => {
62+
const token = getAccessToken()
63+
return fetchEventSource(`${config.base_url}/ai/write/generate-stream`, {
64+
method: 'post',
65+
headers: {
66+
'Content-Type': 'application/json',
67+
Authorization: `Bearer ${token}`
68+
},
69+
openWhenHidden: true,
70+
body: JSON.stringify(data),
71+
onmessage: onMessage,
72+
onerror: onError,
73+
onclose: onClose,
74+
signal: ctrl.signal
75+
})
76+
},
77+
// 获取写作列表
78+
getWritePage: (params: AiWritePageReqVO) => {
79+
return request.get<PageResult<AiWriteRespVo[]>>({ url: `/ai/write/page`, params })
80+
},
81+
// 删除写作
82+
deleteWrite(id: number) {
83+
return request.delete({ url: `/ai/write/delete`, params: { id } })
84+
}
85+
}

src/api/ai/writer/index.ts

Lines changed: 0 additions & 65 deletions
This file was deleted.

src/views/ai/image/index/components/other/index.vue

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@
3636
<el-text tag="b">平台</el-text>
3737
</div>
3838
<el-space wrap class="group-item-body">
39-
<el-select v-model="otherPlatform" placeholder="Select" size="large" class="!w-350px" @change="handlerPlatformChange">
39+
<el-select
40+
v-model="otherPlatform"
41+
placeholder="Select"
42+
size="large"
43+
class="!w-350px"
44+
@change="handlerPlatformChange"
45+
>
4046
<el-option
4147
v-for="item in OtherPlatformEnum"
4248
:key="item.key"
@@ -52,12 +58,7 @@
5258
</div>
5359
<el-space wrap class="group-item-body">
5460
<el-select v-model="model" placeholder="Select" size="large" class="!w-350px">
55-
<el-option
56-
v-for="item in models"
57-
:key="item.key"
58-
:label="item.name"
59-
:value="item.key"
60-
/>
61+
<el-option v-for="item in models" :key="item.key" :label="item.name" :value="item.key" />
6162
</el-select>
6263
</el-space>
6364
</div>
@@ -77,12 +78,14 @@
7778
</div>
7879
</template>
7980
<script setup lang="ts">
80-
import {ImageApi, ImageDrawReqVO, ImageVO} from '@/api/ai/image'
81+
import { ImageApi, ImageDrawReqVO, ImageVO } from '@/api/ai/image'
8182
import {
8283
AiPlatformEnum,
84+
ChatGlmModels,
8385
ImageHotWords,
8486
ImageModelVO,
8587
OtherPlatformEnum,
88+
QianFanModels,
8689
TongYiWanXiangModels
8790
} from '@/views/ai/utils/constants'
8891
@@ -96,10 +99,9 @@ const prompt = ref<string>('') // 提示词
9699
const width = ref<number>(512) // 图片宽度
97100
const height = ref<number>(512) // 图片高度
98101
const otherPlatform = ref<string>(AiPlatformEnum.TONG_YI) // 平台
99-
const models = ref<ImageModelVO[]>(TongYiWanXiangModels) // 模型
102+
const models = ref<ImageModelVO[]>(TongYiWanXiangModels) // 模型 TongYiWanXiangModels、QianFanModels
100103
const model = ref<string>(models.value[0].key) // 模型
101104
102-
103105
const emits = defineEmits(['onDrawStart', 'onDrawComplete']) // 定义 emits
104106
105107
/** 选择热词 */
@@ -131,9 +133,8 @@ const handleGenerateImage = async () => {
131133
prompt: prompt.value, // 提示词
132134
width: width.value, // 图片宽度
133135
height: height.value, // 图片高度
134-
options: {
135-
}
136-
} as ImageDrawReqVO
136+
options: {}
137+
} as unknown as ImageDrawReqVO
137138
await ImageApi.drawImage(form)
138139
} finally {
139140
// 回调
@@ -148,21 +149,24 @@ const settingValues = async (detail: ImageVO) => {
148149
prompt.value = detail.prompt
149150
width.value = detail.width
150151
height.value = detail.height
151-
152152
}
153153
154154
/** 平台切换 */
155-
const handlerPlatformChange = async (platform) => {
155+
const handlerPlatformChange = async (platform: string) => {
156156
// 切换平台,切换模型、风格
157-
if (AiPlatformEnum.YI_YAN === platform) {
157+
if (AiPlatformEnum.TONG_YI === platform) {
158158
models.value = TongYiWanXiangModels
159+
} else if (AiPlatformEnum.YI_YAN === platform) {
160+
models.value = QianFanModels
161+
} else if (AiPlatformEnum.ZHI_PU === platform) {
162+
models.value = ChatGlmModels
159163
} else {
160164
models.value = []
161165
}
162166
// 切换平台,默认选择一个风格
163167
if (models.value.length > 0) {
164168
model.value = models.value[0].key
165-
} else {
169+
} else {
166170
model.value = ''
167171
}
168172
}

src/views/ai/image/index/index.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ const platformOptions = [
6262
value: AiPlatformEnum.STABLE_DIFFUSION
6363
},
6464
{
65-
label: '其他',
65+
label: '其它',
6666
value: 'other'
6767
}
6868
]
@@ -88,6 +88,7 @@ const handleRegeneration = async (image: ImageVO) => {
8888
} else if (image.platform === AiPlatformEnum.STABLE_DIFFUSION) {
8989
stableDiffusionRef.value.settingValues(image)
9090
}
91+
// TODO @fan:貌似 other 重新设置不行?
9192
}
9293
</script>
9394

src/views/ai/image/square/index.vue

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<template>
2+
<div class="card-list">
3+
<div v-for="item in publicList" :key="item.id" class="card">
4+
<img :src="item.picUrl" class="img" />
5+
</div>
6+
</div>
7+
</template>
8+
<script setup lang="ts">
9+
import { ImageApi, ImageVO } from '@/api/ai/image'
10+
11+
/** 属性 */
12+
// TODO @fan:queryParams 里面搞分页哈。
13+
const pageNo = ref<number>(1)
14+
const pageSize = ref<number>(20)
15+
const publicList = ref<ImageVO[]>([])
16+
17+
/** 获取数据 */
18+
const getListData = async () => {
19+
const res = await ImageApi.getImagePagePublic({ pageNo: pageNo.value, pageSize: pageSize.value })
20+
publicList.value = res.list as ImageVO[]
21+
console.log('publicList.value', publicList.value)
22+
}
23+
24+
onMounted(async () => {
25+
await getListData()
26+
})
27+
</script>
28+
<style scoped lang="scss">
29+
.card-list {
30+
//display: flex;
31+
//flex-direction: column;
32+
column-count: 4;
33+
column-gap: 3px;
34+
}
35+
36+
.card {
37+
.img {
38+
width: 50%;
39+
}
40+
}
41+
</style>

src/views/ai/music/components/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="flex h-1/1">
2+
<div class="flex ">
33
<!-- 模式 -->
44
<Mode class="flex-none" @generate-music="generateMusic"/>
55
<!-- 音频列表 -->
@@ -13,7 +13,7 @@ import List from './list/index.vue'
1313
1414
defineOptions({ name: 'Index' })
1515
16-
const listRef = ref<{generateMusic: (...args) => void} | null>(null)
16+
const listRef = ref<Nullable<{generateMusic: (...args) => void}>>(null)
1717
1818
function generateMusic (args: {formData: Recordable}) {
1919
unref(listRef)?.generateMusic(args.formData)

0 commit comments

Comments
 (0)