Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e655b4d6
authored
Jul 10, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【代码新增】AI:写作管理节点
parent
c76b6227
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
277 additions
and
10 deletions
+277
-10
src/api/ai/writer/index.ts
+20
-0
src/utils/dict.ts
+6
-1
src/views/ai/image/index/index.vue
+0
-1
src/views/ai/music/manager/index.vue
+9
-3
src/views/ai/utils/constants.ts
+0
-1
src/views/ai/write/manager/index.vue
+238
-0
src/views/ai/writer/index/components/Left.vue
+4
-4
No files found.
src/api/ai/writer/index.ts
View file @
e655b4d6
import
{
fetchEventSource
}
from
'@microsoft/fetch-event-source'
import
{
fetchEventSource
}
from
'@microsoft/fetch-event-source'
import
request
from
'@/config/axios'
import
{
getAccessToken
}
from
'@/utils/auth'
import
{
getAccessToken
}
from
'@/utils/auth'
import
{
config
}
from
'@/config/axios/config'
import
{
config
}
from
'@/config/axios/config'
...
@@ -12,6 +13,12 @@ export interface WriteVO {
...
@@ -12,6 +13,12 @@ export interface WriteVO {
format
:
number
// 格式
format
:
number
// 格式
tone
:
number
// 语气
tone
:
number
// 语气
language
:
number
// 语言
language
:
number
// 语言
userId
?:
number
// 用户编号
platform
?:
string
// 平台
model
?:
string
// 模型
generatedContent
?:
string
// 生成的内容
errorMessage
:
string
// 错误信息
createTime
?:
Date
// 创建时间
}
}
// TODO @hhero:搞成 WriteApi,类似 ConversationApi 一样。这样更有类的概念,后续引入某个 Api,然后调用它的方法就可以了。
// TODO @hhero:搞成 WriteApi,类似 ConversationApi 一样。这样更有类的概念,后续引入某个 Api,然后调用它的方法就可以了。
...
@@ -43,3 +50,16 @@ export const writeStream = ({
...
@@ -43,3 +50,16 @@ export const writeStream = ({
signal
:
ctrl
.
signal
signal
:
ctrl
.
signal
})
})
}
}
// AI 写作 API
export
const
WriteApi
=
{
// 查询AI 写作分页
getWritePage
:
async
(
params
:
any
)
=>
{
return
await
request
.
get
({
url
:
`/ai/write/page`
,
params
})
},
// 删除AI 写作
deleteWrite
:
async
(
id
:
number
)
=>
{
return
await
request
.
delete
({
url
:
`/ai/write/delete?id=`
+
id
})
}
}
src/utils/dict.ts
View file @
e655b4d6
...
@@ -222,5 +222,10 @@ export enum DICT_TYPE {
...
@@ -222,5 +222,10 @@ export enum DICT_TYPE {
AI_PLATFORM
=
'ai_platform'
,
// AI 平台
AI_PLATFORM
=
'ai_platform'
,
// AI 平台
AI_IMAGE_STATUS
=
'ai_image_status'
,
// AI 图片状态
AI_IMAGE_STATUS
=
'ai_image_status'
,
// AI 图片状态
AI_MUSIC_STATUS
=
'ai_music_status'
,
// AI 音乐状态
AI_MUSIC_STATUS
=
'ai_music_status'
,
// AI 音乐状态
AI_GENERATE_MODE
=
'ai_generate_mode'
// AI 生成模式
AI_GENERATE_MODE
=
'ai_generate_mode'
,
// AI 生成模式
AI_WRITE_TYPE
=
'ai_write_type'
,
// AI 写作类型
AI_WRITE_LENGTH
=
'ai_write_length'
,
// AI 写作长度
AI_WRITE_FORMAT
=
'ai_write_format'
,
// AI 写作格式
AI_WRITE_TONE
=
'ai_write_tone'
,
// AI 写作语气
AI_WRITE_LANGUAGE
=
'ai_write_language'
// AI 写作语言
}
}
src/views/ai/image/index/index.vue
View file @
e655b4d6
...
@@ -23,7 +23,6 @@
...
@@ -23,7 +23,6 @@
ref=
"otherRef"
ref=
"otherRef"
@
on-draw-complete=
"handleDrawComplete"
@
on-draw-complete=
"handleDrawComplete"
/>
/>
</div>
</div>
</div>
</div>
<div
class=
"main"
>
<div
class=
"main"
>
...
...
src/views/ai/music/manager/index.vue
View file @
e655b4d6
...
@@ -9,13 +9,19 @@
...
@@ -9,13 +9,19 @@
label-width=
"68px"
label-width=
"68px"
>
>
<el-form-item
label=
"用户编号"
prop=
"userId"
>
<el-form-item
label=
"用户编号"
prop=
"userId"
>
<el-
inpu
t
<el-
selec
t
v-model=
"queryParams.userId"
v-model=
"queryParams.userId"
placeholder=
"请输入用户编号"
clearable
clearable
@
keyup
.
enter=
"handleQuery
"
placeholder=
"请输入用户编号
"
class=
"!w-240px"
class=
"!w-240px"
>
<el-option
v-for=
"item in userList"
:key=
"item.id"
:label=
"item.nickname"
:value=
"item.id"
/>
/>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"音乐名称"
prop=
"title"
>
<el-form-item
label=
"音乐名称"
prop=
"title"
>
<el-input
<el-input
...
...
src/views/ai/utils/constants.ts
View file @
e655b4d6
...
@@ -34,7 +34,6 @@ export const OtherPlatformEnum:ImageModelVO [] = [
...
@@ -34,7 +34,6 @@ export const OtherPlatformEnum:ImageModelVO [] = [
}
}
]
]
/**
/**
* AI 图像生成状态的枚举
* AI 图像生成状态的枚举
*/
*/
...
...
src/views/ai/write/manager/index.vue
0 → 100644
View file @
e655b4d6
<
template
>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
label-width=
"68px"
>
<el-form-item
label=
"用户编号"
prop=
"userId"
>
<el-select
v-model=
"queryParams.userId"
clearable
placeholder=
"请输入用户编号"
class=
"!w-240px"
>
<el-option
v-for=
"item in userList"
:key=
"item.id"
:label=
"item.nickname"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"写作类型"
prop=
"type"
>
<el-select
v-model=
"queryParams.type"
placeholder=
"请选择写作类型"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.AI_WRITE_TYPE)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"平台"
prop=
"platform"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择平台"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getStrDictOptions(DICT_TYPE.AI_PLATFORM)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
type=
"primary"
plain
@
click=
"openForm('create')"
v-hasPermi=
"['ai:write:create']"
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
新增
</el-button>
<el-button
type=
"success"
plain
@
click=
"handleExport"
:loading=
"exportLoading"
v-hasPermi=
"['ai:write:export']"
>
<Icon
icon=
"ep:download"
class=
"mr-5px"
/>
导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
:stripe=
"true"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"编号"
align=
"center"
prop=
"id"
width=
"120"
fixed=
"left"
/>
<el-table-column
label=
"用户"
align=
"center"
prop=
"userId"
width=
"180"
>
<template
#
default=
"scope"
>
<span>
{{
userList
.
find
((
item
)
=>
item
.
id
===
scope
.
row
.
userId
)?.
nickname
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"写作类型"
align=
"center"
prop=
"type"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_WRITE_TYPE"
:value=
"scope.row.type"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"平台"
align=
"center"
prop=
"platform"
width=
"120"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_PLATFORM"
:value=
"scope.row.platform"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"模型"
align=
"center"
prop=
"model"
width=
"180"
/>
<el-table-column
label=
"生成内容提示"
align=
"center"
prop=
"prompt"
width=
"180"
/>
<el-table-column
label=
"生成的内容"
align=
"center"
prop=
"generatedContent"
width=
"180"
/>
<el-table-column
label=
"原文"
align=
"center"
prop=
"originalContent"
width=
"180"
/>
<el-table-column
label=
"长度"
align=
"center"
prop=
"length"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_WRITE_LENGTH"
:value=
"scope.row.length"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"格式"
align=
"center"
prop=
"format"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_WRITE_FORMAT"
:value=
"scope.row.format"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"语气"
align=
"center"
prop=
"tone"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_WRITE_TONE"
:value=
"scope.row.tone"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"语言"
align=
"center"
prop=
"language"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.AI_WRITE_LANGUAGE"
:value=
"scope.row.language"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
:formatter=
"dateFormatter"
width=
"180px"
/>
<el-table-column
label=
"错误信息"
align=
"center"
prop=
"errorMessage"
/>
<el-table-column
label=
"操作"
align=
"center"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
v-hasPermi=
"['ai:write:update']"
>
编辑
</el-button>
<el-button
link
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
v-hasPermi=
"['ai:write:delete']"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</ContentWrap>
</template>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
,
getIntDictOptions
,
getStrDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
// TODO 芋艿:这里应该是 write
import
{
WriteApi
,
WriteVO
}
from
'@/api/ai/writer'
import
*
as
UserApi
from
'@/api/system/user'
/** AI 写作列表 */
defineOptions
({
name
:
'AiWriteManager'
})
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
const
loading
=
ref
(
true
)
// 列表的加载中
const
list
=
ref
<
WriteVO
[]
>
([])
// 列表的数据
const
total
=
ref
(
0
)
// 列表的总页数
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
userId
:
undefined
,
type
:
undefined
,
platform
:
undefined
,
createTime
:
[]
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
userList
=
ref
<
UserApi
.
UserVO
[]
>
([])
// 用户列表
/** 查询列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
WriteApi
.
getWritePage
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
queryFormRef
.
value
.
resetFields
()
handleQuery
()
}
/** 删除按钮操作 */
const
handleDelete
=
async
(
id
:
number
)
=>
{
try
{
// 删除的二次确认
await
message
.
delConfirm
()
// 发起删除
await
WriteApi
.
deleteWrite
(
id
)
message
.
success
(
t
(
'common.delSuccess'
))
// 刷新列表
await
getList
()
}
catch
{}
}
/** 初始化 **/
onMounted
(
async
()
=>
{
getList
()
// 获得用户列表
userList
.
value
=
await
UserApi
.
getSimpleUserList
()
})
</
script
>
src/views/ai/writer/index/components/Left.vue
View file @
e655b4d6
...
@@ -81,13 +81,13 @@
...
@@ -81,13 +81,13 @@
</
template
>
</
template
>
<ReuseLabel
label=
"长度"
/>
<ReuseLabel
label=
"长度"
/>
<Tag
v-model=
"formData.length"
:tags=
"getIntDictOptions(
'ai_write_length'
)"
/>
<Tag
v-model=
"formData.length"
:tags=
"getIntDictOptions(
DICT_TYPE.AI_WRITE_LENGTH
)"
/>
<ReuseLabel
label=
"格式"
/>
<ReuseLabel
label=
"格式"
/>
<Tag
v-model=
"formData.format"
:tags=
"getIntDictOptions(
'ai_write_format'
)"
/>
<Tag
v-model=
"formData.format"
:tags=
"getIntDictOptions(
DICT_TYPE.AI_WRITE_FORMAT
)"
/>
<ReuseLabel
label=
"语气"
/>
<ReuseLabel
label=
"语气"
/>
<Tag
v-model=
"formData.tone"
:tags=
"getIntDictOptions(
'ai_write_tone'
)"
/>
<Tag
v-model=
"formData.tone"
:tags=
"getIntDictOptions(
DICT_TYPE.AI_WRITE_TONE
)"
/>
<ReuseLabel
label=
"语言"
/>
<ReuseLabel
label=
"语言"
/>
<Tag
v-model=
"formData.language"
:tags=
"getIntDictOptions(
'ai_write_language'
)"
/>
<Tag
v-model=
"formData.language"
:tags=
"getIntDictOptions(
DICT_TYPE.AI_WRITE_LANGUAGE
)"
/>
<div
class=
"flex items-center justify-center mt-3"
>
<div
class=
"flex items-center justify-center mt-3"
>
<el-button
:disabled=
"isWriting"
@
click=
"reset"
>
重置
</el-button>
<el-button
:disabled=
"isWriting"
@
click=
"reset"
>
重置
</el-button>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment