src/api/model.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/menu/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/router/routes/modules/authority.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/router/routes/modules/session.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/agent/components/editAgent.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/model/components/addPageModel.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/model/components/addTableName.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/model/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
yarn.lock | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/model.ts
@@ -83,3 +83,10 @@ params, }); } // 获取模型列表 export function getFactories(params) { return axios.get('/api/v1/llm/factories', { params, }); } src/components/menu/index.vue
@@ -31,6 +31,7 @@ const goto = (item: RouteRecordRaw) => { // Open external link if (regexUrl.test(item.path)) { openWindow(item.path); selectedKey.value = [item.name as string]; @@ -84,7 +85,8 @@ }; listenerRouteChange((newRoute) => { const { requiresAuth, activeMenu, hideInMenu } = newRoute.meta; if (requiresAuth && (!hideInMenu || activeMenu)) { // if (requiresAuth && (!hideInMenu || activeMenu)) {//除去这两个判断后,可以正常展开菜单 if (requiresAuth) { const menuOpenKeys = findMenuOpenKeys( (activeMenu || newRoute.name) as string ); @@ -96,6 +98,7 @@ activeMenu || menuOpenKeys[menuOpenKeys.length - 1], ]; } console.log(selectedKey.value, 48877); }, true); const setCollapse = (val: boolean) => { if (appStore.device === 'desktop') @@ -139,6 +142,7 @@ }; // selected-keys={selectedKey.value} console.log(selectedKey.value, 68877); return () => ( <a-menu mode={topMenu.value ? 'horizontal' : 'vertical'} @@ -147,6 +151,7 @@ show-collapse-button={appStore.device !== 'mobile'} auto-open={false} auto-open-selected={true} selected-keys={selectedKey.value} level-indent={34} style="height: 100%;width:100%;" onCollapse={setCollapse} src/router/routes/modules/authority.ts
@@ -10,6 +10,7 @@ requiresAuth: true, icon: 'icon-lock', order: 5, activeMenu:false, }, children: [ { src/router/routes/modules/session.ts
@@ -19,7 +19,7 @@ requiresAuth: true, hideInMenu:true, roles: ['*'], activeMenu:'session' // activeMenu:'session' }, component:()=>import('@/views/sessionManager/index.vue'), } src/views/dmx/agent/components/editAgent.vue
@@ -19,48 +19,87 @@ title-align="start" fullscreen > <div class="main-container"> <div class="main-container-lf"> <div style="padding: 10px;font-size: 16px;background: var(--color-neutral-3);">智能体配置</div> <div style="display: flex;width: 100%;" :style="{height:height}"> <div style="width: 50%;height: 100%"> <div style="padding: 10px;font-size: 12px;color: #2a2a2b;">智能体画像</div> <div> <a-textarea v-model="system" placeholder="" disabled style="height: 400px;" /> <div class="main-container"> <div class="main-container-lf"> <div style=" padding: 10px; font-size: 16px; background: var(--color-neutral-3); " >智能体配置</div > <div style="display: flex; width: 100%" :style="{ height: height }"> <div style="width: 50%; height: 100%"> <div style="padding: 10px; font-size: 12px; color: #2a2a2b" >智能体画像</div > <div> <a-textarea v-model="system" placeholder="" disabled style="height: 400px" /> </div> </div> </div> <div style="width: 50%;border: 1px solid var(--color-neutral-3);background: var(--color-neutral-3)"> <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit" layout="vertical" > <a-collapse :default-active-key="['1']"> <a-collapse-item header="基础信息" key="0" v-if="typeAngint == 'edit'"> <a-input v-model="form.name" placeholder="请输入智能体名称" style="width:200px;margin-top: 10px" /> </a-collapse-item> <a-collapse-item header="AI模型配置" key="1"> <a-form-item field="llm_id" label="模型"> <a-space direction="vertical" size="large"> <a-select :size="'large'" field="llm_id" v-model="form.llm_id" :style="{width:'25rem'}" placeholder="请选择 ..."> <a-optgroup :label="index" v-for="(item, index) in modelList" :key="index" <div style=" width: 50%; border: 1px solid var(--color-neutral-3); background: var(--color-neutral-3); " > <a-form ref="formRef" :rules="rules" :model="form" @submit="handleSubmit" layout="vertical" > <a-collapse :default-active-key="['1']"> <a-collapse-item header="基础信息" key="0" v-if="typeAngint == 'edit'" > <a-input v-model="form.name" placeholder="请输入智能体名称" style="width: 200px; margin-top: 10px" /> </a-collapse-item> <a-collapse-item header="AI模型配置" key="1"> <a-form-item field="llm_id" label="模型"> <a-space direction="vertical" size="large"> <a-select :size="'large'" field="llm_id" v-model="form.llm_id" :style="{ width: '25rem' }" placeholder="请选择 ..." > <a-option v-for="obj in item" :key="obj.fid" :disabled="!obj.available" :value="obj.llm_id" <a-optgroup :label="index" v-for="(item, index) in modelList" :key="index" > {{ obj.llm_name }} </a-option> </a-optgroup> </a-select> </a-space> </a-form-item> <a-option v-for="obj in item" :key="obj.fid" :disabled="!obj.available" :value="obj.llm_id" > {{ obj.llm_name }} </a-option> </a-optgroup> </a-select> </a-space> </a-form-item> </a-collapse-item> <a-collapse-item header="开场引导" :key="'2'" disabled> </a-collapse-item> <a-collapse-item header="知识库" key="3"> <a-collapse-item header="知识库" key="3"> <a-form-item field="kb_ids" label="知识库"> <a-select v-model="form.kb_ids" @@ -72,7 +111,7 @@ v-for="item in tabs" :key="item.id" :value="item.id" >{{ item.name }}</a-option >{{ item.name }}</a-option > </a-select> </a-form-item> @@ -119,8 +158,8 @@ import useLoading from '@/hooks/loading'; import { dialogSet } from '@/api/Agent'; import { Message } from '@arco-design/web-vue'; import EventBus from "@/utils/EventBus"; import sessionAction from "@/views/dmx/IntelligentAgent/components/sessionAction.vue"; import EventBus from '@/utils/EventBus'; import sessionAction from '@/views/dmx/IntelligentAgent/components/sessionAction.vue'; const { setLoading } = useLoading(true); const props = defineProps(['typeAngint', 'formData']); const visible = ref(false); @@ -193,7 +232,7 @@ const handleSubmit = async ({ values, errors }) => { // console.log('values:', values, '\nerrors:', errors) if(!errors){ if (!errors) { let title = '创建成功'; let formNew = { ...form }; if (props.typeAngint == 'edit') { @@ -224,9 +263,9 @@ visible.value = true; nextTick(() => { Object.assign(form, data); console.log(form,'传值'); console.log(form, '传值'); system.value = form.prompt_config.system; if(tabs.value && tabs.value.length>0){ if (tabs.value && tabs.value.length > 0) { form.kb_ids = [tabs.value[0].id]; } }); @@ -325,8 +364,8 @@ line-height: 40px; } } :deep(.arco-textarea-wrapper.arco-textarea-disabled){ background: var(--color-bg-2); color: var(--color-text-1); :deep(.arco-textarea-wrapper.arco-textarea-disabled) { background: var(--color-bg-2); color: var(--color-text-1); } </style> src/views/dmx/model/components/addPageModel.vue
@@ -28,7 +28,7 @@ <a-select v-model="form[item.key]" placeholder="请选择"> <a-option v-for="(list, v) in item.options" :value="list" :value="v" :label="v" ></a-option> </a-select> src/views/dmx/model/components/addTableName.vue
@@ -27,8 +27,8 @@ > <a-option v-for="(item, index) in modalList" :value="index" :label="index" :value="item.name" :label="item.name" :disabled="item.added" ></a-option> </a-select> @@ -43,6 +43,7 @@ <a-textarea v-model="form.tags" placeholder="请输入模型描述" :max-length="50" allow-clear /> </a-form-item> @@ -85,7 +86,7 @@ computed, } from 'vue'; import { modelmyLlms, getFactories, addLlmFactory, getLlmDetail, editLlmFactory, @@ -233,7 +234,7 @@ }; const modalList = ref([]); const queryModel = async () => { const res = await modelmyLlms(); const res = await getFactories(); modalList.value = res.data; }; queryModel(); src/views/dmx/model/index.vue
@@ -30,11 +30,8 @@ <a-scrollbar style="height: calc(100vh - 320px); overflow: auto" > <div style="display: flex; flex-wrap: wrap" class="card_content" > <div class="card-wrap"> <div class="card_content"> <div class="card-wrap content_top"> <div class="card_wrap_box"> <div class="card_wrap_box_img"> <img @@ -60,6 +57,11 @@ </a-card> <div class="arco-btn-group"> <a-space class="btn-group"> <div class="create_time"> 创建时间: <span> {{ item.create_date }} </span> </div> <!-- <editModel></editModel> --> <a-button @click="handleDeleteModel(item, 1)"> 删除 @@ -74,46 +76,51 @@ </div> </div> </div> <div class="card-wrap" v-for="(list, index) of item.llm" :key="index" > <div class="card_wrap_box"> <div class="card_wrap_box_img"> <img :style="{ width: '100%', }" alt="暂无图片" :src="list.logo ? httpUrl + list.logo : pdfImg" /> <!-- src="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a20012a2d4d5b9db43dfc6a01fe508c0.png~tplv-uwbnlip3yd-webp.webp" --> </div> <a-card :bordered="false" hoverable> <div class="arco-card-body-content"> <div class="arco-card-body-content-title"> {{ list.name }} </div> <div class="arco-card-body-content-dec">{{ list.type }}</div> <div class="subset_list"> <div class="card-wrap" v-for="(list, index) of item.llm" :key="index" > <div class="card_wrap_box"> <div class="card_wrap_box_img"> <img :style="{ width: '100%', }" alt="暂无图片" :src="list.logo ? httpUrl + list.logo : pdfImg" /> </div> </a-card> <div class="arco-btn-group"> <a-space class="btn-group"> <a-button @click="handleDeleteModel(list)"> 删除 </a-button> <!-- <a-button <a-card :bordered="false" hoverable> <div class="arco-card-body-content"> <div class="arco-card-body-content-title"> {{ list.name }} </div> <div class="arco-card-body-content-dec">{{ list.type }}</div> </div> </a-card> <div class="arco-btn-group"> <a-space class="btn-group"> <div class="create_time_list"> 创建时间: <span> {{ list.create_date }} </span> </div> <a-button @click="handleDeleteModel(list)"> 删除 </a-button> <!-- <a-button type="primary" @click="handleEditModel(list)" > 编辑 </a-button> --> <!-- <editModel></editModel> --> </a-space> <!-- <editModel></editModel> --> </a-space> </div> </div> </div> </div> @@ -245,7 +252,6 @@ }; //编辑模型子类 const handleEditModel = (val, type) => { console.log(val, 6766); if (type == 1) { tabShow.value = true; editList.value = val; @@ -263,6 +269,7 @@ //删除模型 const handleDeleteModel = (val, type) => { const factory = tabKey.value; if (type == 1) { handleDelete(val); } else { @@ -272,7 +279,6 @@ okText: '确定', cancelText: '取消', onOk: async () => { const factory = tabKey.value; const res = await deleteLlm({ llm_factory: tabKey.value, llm_name: val.name, @@ -291,17 +297,15 @@ //父级模型 const handleDelete = async (key: any) => { console.log(tabData.value[key]); if (tabData.value[key].llm.length > 0) { if (tabData.value[key] && tabData.value[key].llm.length > 0) { Message.error('请先删除子模型'); return; } if (key !== 'key') { const res = await deleteLlmFactory(key); if ((res as any).code == 200) { Reflect.deleteProperty(tabData.value, key); queryModel(); } const res = await deleteLlmFactory(tabKey.value); if ((res as any).code == 200) { // Reflect.deleteProperty(tabData.value, tabKey.value); queryModel(); } }; @@ -340,6 +344,7 @@ loading.value = true; tabData.value = Object.assign({}, tabData.value, res.data); tabData.value = filterObject(tabData.value, 1); tabKey.value = Object.keys(tabData.value)[0]; await getFactory(); }; @@ -477,6 +482,9 @@ font-weight: 400; } } .content_top { border-bottom: 1px solid #f0f0f0 !important; } .card_content { .card_wrap_box_img { // min-height: 200px; @@ -488,12 +496,25 @@ object-fit: cover; /* 不会变形,但可能裁剪图片 */ } } .subset_list { display: flex; flex-direction: row; flex-wrap: wrap; } .card_wrap_box { // position: relative; .arco-btn-group { position: absolute; right: 10px; top: 87%; .create_time { text-align: left; width: 155px; } .create_time_list { text-align: left; width: 223px; } } } } @@ -510,6 +531,7 @@ transform: translateY(-4px); // box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.1); } :deep(.arco-card) { height: 100%; border-radius: 4px; yarn.lock
@@ -5580,7 +5580,7 @@ moment@^2.30.1: version "2.30.1" resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz" resolved "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== mozjpeg@^7.0.0: