Skip to content

Commit 2112cae

Browse files
committed
feat: 更新AI功能
1 parent 063c671 commit 2112cae

File tree

5 files changed

+59
-28
lines changed

5 files changed

+59
-28
lines changed

server/api/v1/system/sys_auto_code.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package system
22

33
import (
4+
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
45
"github.com/goccy/go-json"
56
"io"
67
"strings"
@@ -105,18 +106,23 @@ func (autoApi *AutoCodeApi) GetColumn(c *gin.Context) {
105106
}
106107

107108
func (autoApi *AutoCodeApi) LLMAuto(c *gin.Context) {
108-
prompt := c.Query("prompt")
109-
mode := c.Query("mode")
110-
params := make(map[string]string)
111-
params["prompt"] = prompt
112-
params["mode"] = mode
109+
var llm systemReq.LLMAutoCode
110+
err := c.ShouldBindJSON(&llm)
111+
if err != nil {
112+
response.FailWithMessage(err.Error(), c)
113+
return
114+
}
115+
if global.GVA_CONFIG.AutoCode.AiPath == "" {
116+
response.FailWithMessage("请先前往插件市场个人中心获取AiPath并填入config.yaml中", c)
117+
return
118+
}
113119
path := strings.ReplaceAll(global.GVA_CONFIG.AutoCode.AiPath, "{FUNC}", "api/chat/ai")
114120
res, err := request.HttpRequest(
115121
path,
116122
"POST",
117123
nil,
118-
params,
119124
nil,
125+
llm,
120126
)
121127
if err != nil {
122128
global.GVA_LOG.Error("大模型生成失败!", zap.Error(err))

server/model/system/request/sys_auto_code.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,3 +259,8 @@ type InitApi struct {
259259
PlugName string `json:"plugName"`
260260
APIs []uint `json:"apis"`
261261
}
262+
263+
type LLMAutoCode struct {
264+
Prompt string `json:"prompt" form:"prompt" gorm:"column:prompt;comment:提示语;type:text;"` //提示语
265+
Mode string `json:"mode" form:"mode" gorm:"column:mode;comment:模式;type:text;"` //模式
266+
}

web/src/api/autoCode.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,16 @@ export const pubPlug = (params) => {
140140
}
141141

142142

143-
export const llmAuto = (params) => {
144-
let modeName = {
145-
"xiaoqi": "小奇",
146-
"xiaomiao": "小淼",
147-
}
143+
export const llmAuto = (data) => {
148144
return service({
149145
url: '/autoCode/llmAuto',
150146
method: 'post',
151-
params,
147+
data,
152148
timeout: 1000 * 60 * 10,
153149
loadingOption:{
154150
lock: true,
155151
fullscreen:true,
156-
text: `${modeName[params.mode]}正在思考,请稍候...`,
152+
text: `小淼正在思考,请稍候...`,
157153
}
158154
})
159155
}
@@ -182,6 +178,3 @@ export const initAPI = (data) => {
182178
data
183179
})
184180
}
185-
186-
187-

web/src/pathInfo.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"/src/view/about/index.vue": "About",
3+
"/src/view/dashboard/index.vue": "Dashboard",
34
"/src/view/error/index.vue": "Error",
45
"/src/view/error/reload.vue": "Reload",
56
"/src/view/example/breakpoint/breakpoint.vue": "BreakPoint",
@@ -32,6 +33,7 @@
3233
"/src/view/superAdmin/menu/icon.vue": "Icon",
3334
"/src/view/superAdmin/menu/menu.vue": "Menus",
3435
"/src/view/superAdmin/operation/sysOperationRecord.vue": "SysOperationRecord",
36+
"/src/view/superAdmin/params/sysParams.vue": "SysParams",
3537
"/src/view/superAdmin/user/user.vue": "User",
3638
"/src/view/system/state.vue": "State",
3739
"/src/view/systemTools/autoCode/component/fieldDialog.vue": "FieldDialog",

web/src/view/systemTools/autoCode/index.vue

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@
55
title="此功能为开发环境使用,不建议发布到生产,具体使用效果请点我观看。"
66
/>
77
<div class="gva-search-box">
8-
<div class="text-lg mb-2 text-gray-600">使用AI创建</div>
8+
<div class="text-lg mb-2 text-gray-600">使用AI创建<a class="text-blue-600 text-sm ml-4" href="https://plugin.gin-vue-admin.com/#/layout/userInfo/center" target="_blank">获取AiPath</a></div>
99
<div class="relative">
10-
<el-input v-model="prompt" type="textarea" :rows="5" :maxlength="100" :placeholder="`【Beta】试试描述你的表,让AI帮你完成。\n目前正在测试阶段,遇到问题请及时反馈。\n此功能需要到插件市场个人中心获取自己的AI-Path,把AI-Path填入config.yaml下的autocode-->ai-path,重启项目即可使用。`" resize="none" />
10+
<el-input v-model="prompt"
11+
type="textarea"
12+
:rows="5"
13+
:maxlength="100"
14+
:placeholder="`现已完全免费\n试试描述你的表,让AI帮你完成。\n此功能需要到插件市场个人中心获取自己的AI-Path,把AI-Path填入config.yaml下的autocode-->ai-path,重启项目即可使用。\n按下 Ctrl+Enter 或 Cmd+Enter 直接生成`"
15+
resize="none"
16+
@focus="handleFocus"
17+
@blur="handleBlur"/>
1118
<div class="flex absolute right-2 bottom-2">
1219
<el-tooltip
13-
content="小奇存在失败概率,面向所有用户开放使用(失败了重新生成一下就好)。"
14-
>
15-
<el-button type="primary" @click="llmAutoFunc('xiaoqi')">
16-
<el-icon size="18">
17-
<ai-gva />
18-
</el-icon> 小奇
19-
</el-button>
20-
</el-tooltip>
21-
<el-tooltip
22-
content="小淼基本啥也能设计出来,但是需要消耗积分,测试阶段授权用户自动获得基础积分,开源用户需要填表申请。"
20+
effect="light"
2321
>
22+
<template #content>
23+
<div>【完全免费】前往<a class="text-blue-600" href="https://plugin.gin-vue-admin.com/#/layout/userInfo/center" target="_blank">插件市场个人中心</a>申请AIPath,填入config.yaml的ai-path属性即可使用。</div>
24+
</template>
2425
<el-button type="primary" @click="llmAutoFunc('xiaomiao')">
2526
<el-icon size="18">
2627
<ai-gva />
@@ -420,6 +421,7 @@
420421
row-key="fieldName"
421422
>
422423
<el-table-column
424+
fixed="left"
423425
align="left"
424426
type="index"
425427
width="60"
@@ -431,12 +433,14 @@
431433
</template>
432434
</el-table-column>
433435
<el-table-column
436+
fixed="left"
434437
align="left"
435438
type="index"
436439
label="序列"
437440
width="60"
438441
/>
439442
<el-table-column
443+
fixed="left"
440444
align="left"
441445
type="index"
442446
label="主键"
@@ -447,6 +451,7 @@
447451
</template>
448452
</el-table-column>
449453
<el-table-column
454+
fixed="left"
450455
align="left"
451456
prop="fieldName"
452457
label="字段名称"
@@ -525,6 +530,7 @@
525530
<el-table-column
526531
align="left"
527532
prop="excel"
533+
width="100"
528534
label="导入/导出"
529535
>
530536
<template #default="{row}">
@@ -791,6 +797,21 @@ import { ElMessage, ElMessageBox } from 'element-plus'
791797
import WarningBar from '@/components/warningBar/warningBar.vue'
792798
import Sortable from 'sortablejs'
793799
800+
const handleFocus = () => {
801+
document.addEventListener('keydown', handleKeydown);
802+
};
803+
804+
const handleBlur = () => {
805+
document.removeEventListener('keydown', handleKeydown);
806+
};
807+
808+
809+
const handleKeydown = (event) => {
810+
if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
811+
llmAutoFunc('xiaomiao');
812+
}
813+
};
814+
794815
const getOnlyNumber = () => {
795816
let randomNumber = '';
796817
while (randomNumber.length < 16) {
@@ -802,6 +823,10 @@ const getOnlyNumber = () => {
802823
const prompt = ref("")
803824
804825
const llmAutoFunc = async (mode) =>{
826+
if (!prompt.value) {
827+
ElMessage.error('请输入描述')
828+
return
829+
}
805830
const res = await llmAuto({prompt:prompt.value,mode:mode})
806831
if (res.code === 0) {
807832
form.value.fields = []

0 commit comments

Comments
 (0)