mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-10 03:16:49 +08:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
81
src/api/intelligent-agent/list.js
Normal file
81
src/api/intelligent-agent/list.js
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
import request from '@/assets/js/utils/request'
|
||||||
|
import getUrl from '@/assets/js/utils/get-url'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取智能体列表
|
||||||
|
* @param {Object} data - 请求参数, 默认为空对象
|
||||||
|
* @returns {Promise} - 返回 Promise 对象
|
||||||
|
*/
|
||||||
|
const agentList = (data = {}) => {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/ebiz/intelligentAgent/list'),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看智能体详情
|
||||||
|
* @param {string} id - 请求 ID
|
||||||
|
*/
|
||||||
|
function agentDetail(id) {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/ebiz/intelligentAgent/query'),
|
||||||
|
method: 'get',
|
||||||
|
params: { id }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 增加智能体
|
||||||
|
* @param {Object} data - 请求参数, 默认为空对象
|
||||||
|
* @returns {Promise} - 返回 Promise 对象
|
||||||
|
*/
|
||||||
|
const agentAdd = (data) => {
|
||||||
|
if (!data) {
|
||||||
|
console.warn('need data', data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return request({
|
||||||
|
url: getUrl('/ebiz/intelligentAgent/create'),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除智能体
|
||||||
|
* @param {Array} data - 请求参数, 默认为空对象
|
||||||
|
* @returns {Promise} - 返回 Promise 对象
|
||||||
|
*/
|
||||||
|
const agentDelete = (data) => {
|
||||||
|
if (!data || !data.length) {
|
||||||
|
console.warn('need data', data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return request({
|
||||||
|
url: getUrl('/ebiz/intelligentAgent/delete'),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑智能体
|
||||||
|
* @param {Object} data - 请求参数, 默认为空对象
|
||||||
|
* @returns {Promise} - 返回 Promise 对象
|
||||||
|
*/
|
||||||
|
const agentEdit = (data) => {
|
||||||
|
if (!data || !data.id) {
|
||||||
|
console.warn('need data', data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return request({
|
||||||
|
url: getUrl('/ebiz/intelligentAgent/update'),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export { agentList, agentEdit, agentDelete, agentAdd, agentDetail }
|
||||||
@@ -208,5 +208,26 @@ export default [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}, {
|
||||||
|
path: '/intelligentAgent',
|
||||||
|
name: 'intelligentAgent',
|
||||||
|
component: layout,
|
||||||
|
redirect: '/intelligentAgent/list',
|
||||||
|
meta: {
|
||||||
|
title: '智能体',
|
||||||
|
icon: 'el-icon-home',
|
||||||
|
affix: true
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/intelligentAgent/list',
|
||||||
|
name: 'intelligentAgent-list',
|
||||||
|
component: () => import('@/views/intelligent-agent/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '智能体',
|
||||||
|
icon: 'el-icon-home'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
51
src/views/intelligent-agent/components/info/index.vue
Normal file
51
src/views/intelligent-agent/components/info/index.vue
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<script>
|
||||||
|
import { agentEdit, agentAdd } from '@/api/intelligent-agent/list'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'info',
|
||||||
|
inject: ['dialog', 'fetchAgentList'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
rules: {
|
||||||
|
name: [{ required: true, message: '请输入智能体名称', trigger: 'blur' }],
|
||||||
|
description: [{ required: false, message: '请输入智能体描述', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* 提交表单
|
||||||
|
*/
|
||||||
|
async handleSubmit() {
|
||||||
|
// 更新表单之后重新获取列表,然后退出 dialog
|
||||||
|
await this.dialog.type === 'edit' ? agentEdit(this.dialog.agent) : agentAdd(this.dialog.agent)
|
||||||
|
this.fetchAgentList()
|
||||||
|
this.dialog.visible = false
|
||||||
|
},
|
||||||
|
validateForm() {
|
||||||
|
this.$refs.form.validate(valid => {
|
||||||
|
if (valid) this.handleSubmit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form :model="dialog.agent" :rules="rules" ref="form">
|
||||||
|
<el-form-item label="名称" prop="name" label-width="100px">
|
||||||
|
<el-input v-model="dialog.agent.name" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="描述" prop="description" label-width="100px">
|
||||||
|
<el-input type="textarea" :rows="8" v-model="dialog.agent.description" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-row type="flex" justify="end">
|
||||||
|
<el-button type="primary" @click="validateForm">保存</el-button>
|
||||||
|
<el-button type="default" @click="dialog.visible = false">取消</el-button>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
179
src/views/intelligent-agent/index.vue
Normal file
179
src/views/intelligent-agent/index.vue
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<script>
|
||||||
|
import { agentList, agentDelete, agentDetail } from '@/api/intelligent-agent/list'
|
||||||
|
import Info from '@/views/intelligent-agent/components/info'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'intelligent-agent',
|
||||||
|
components: {
|
||||||
|
Info
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchOption: {
|
||||||
|
nameLike: '',
|
||||||
|
handleSearch: async () => {
|
||||||
|
this.fetchAgentList({ nameLike: this.searchOption.nameLike })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @type {{name: string, url: string, id: string}[]}
|
||||||
|
*/
|
||||||
|
list: [],
|
||||||
|
dialog: {
|
||||||
|
visible: false,
|
||||||
|
title: '',
|
||||||
|
agent: void 0,
|
||||||
|
component: 'info',
|
||||||
|
type: "edit"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
provide() {
|
||||||
|
return {
|
||||||
|
dialog: this.dialog,
|
||||||
|
fetchAgentList: this.fetchAgentList
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/**
|
||||||
|
* 获取所有的智能体列表
|
||||||
|
*/
|
||||||
|
async fetchAgentList(params = {}) {
|
||||||
|
const { content } = await agentList(params)
|
||||||
|
this.list = content.content
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 编辑智能体
|
||||||
|
*/
|
||||||
|
async handleEditAgent(id) {
|
||||||
|
const { content } = await agentDetail(id)
|
||||||
|
this.dialog.agent = content.content
|
||||||
|
this.dialog.type = "edit"
|
||||||
|
this.dialog.title = "编辑智能体"
|
||||||
|
// 获取数据之后打开内容详情
|
||||||
|
this.dialog.visible = true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 删除智能体
|
||||||
|
*/
|
||||||
|
async handleDeleteAgent(id) {
|
||||||
|
// 删除之后重新获取内容
|
||||||
|
await agentDelete([id])
|
||||||
|
this.fetchAgentList()
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 创建智能体
|
||||||
|
*/
|
||||||
|
async createdIntelligentAgent() {
|
||||||
|
this.dialog.type = "add"
|
||||||
|
// 重置状态,防止其他状态影响导致表单内容异常
|
||||||
|
this.dialog.agent = { name: '', description: '' }
|
||||||
|
this.dialog.title = "创建智能体"
|
||||||
|
this.dialog.visible = true
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.fetchAgentList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<!-- header 头部 -->
|
||||||
|
<nav v-if="true">
|
||||||
|
<div class="flex align-items-c justify-content-b">
|
||||||
|
<el-input placeholder="输入智能体名称" clearable v-model="searchOption.nameLike" size="medium" class="underBorder"
|
||||||
|
@keydown.enter.native="searchOption.handleSearch">
|
||||||
|
<template slot="prepend">
|
||||||
|
<el-button slot="append" icon="el-icon-search"></el-button>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
<el-button class="render-button line-button pv8 ph10" icon="el-icon-plus"
|
||||||
|
@click="createdIntelligentAgent()">创建智能体</el-button>
|
||||||
|
</div>
|
||||||
|
<h3>智能体</h3>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- 智能体的列表 -->
|
||||||
|
<article>
|
||||||
|
<el-row class="agent-item" :gutter="10">
|
||||||
|
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" v-for="listItem in list" :key="listItem.id">
|
||||||
|
<el-card>
|
||||||
|
<section class="agent-item__info">
|
||||||
|
<el-avatar shape="square" :src="listItem.url">{{ listItem.name[0] }}</el-avatar>
|
||||||
|
<span>
|
||||||
|
<h4>{{ listItem.name }}</h4>
|
||||||
|
<p class="dataset-desc">{{ listItem.description }}</p>
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<el-row type="flex" justify="end">
|
||||||
|
<el-button class="default render-button" size="small" icon="el-icon-delete"
|
||||||
|
@click.stop="handleDeleteAgent(listItem.id)">删除</el-button>
|
||||||
|
<el-button class="render-button line-button" size="small" icon="el-icon-edit"
|
||||||
|
@click.stop="handleEditAgent(listItem.id)" type="primary">修改</el-button>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<!-- dialog 内容。 现在主要是编辑 -->
|
||||||
|
<el-dialog :visible.sync="dialog.visible" :title="dialog.title" :close-on-click-modal="false">
|
||||||
|
<component :is="dialog.component" />
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.container {
|
||||||
|
font-family: PingFangSC, PingFang SC;
|
||||||
|
|
||||||
|
* {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.agent-item {
|
||||||
|
|
||||||
|
|
||||||
|
&>.el-col {
|
||||||
|
margin: 7px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__info {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
&>span:nth-child(2) {
|
||||||
|
margin-left: 15px;
|
||||||
|
|
||||||
|
&>p {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataset-desc {
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #666666;
|
||||||
|
line-height: 18px;
|
||||||
|
text-align: left;
|
||||||
|
font-style: normal;
|
||||||
|
|
||||||
|
height: 35px;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user