From f74f264d875b003730484f3fe7cb242c7f91294e Mon Sep 17 00:00:00 2001 From: zhangxiao <898441624@qq.com> Date: 星期四, 15 八月 2024 17:32:55 +0800 Subject: [PATCH] fix: 模型管理代码修改 --- src/api/model.ts | 6 src/views/dmx/model/index.vue | 32 src/views/dmx/knowledgeLib/index.vue | 1569 +++++++++++++++++++++++++++------------------------ src/views/dmx/model/components/addTableName.vue | 1 src/components/menu/index.vue | 3 src/views/dmx/model/components/addPageModel.vue | 175 +---- src/router/routes/index.ts | 1 src/router/routes/modules/knowledgeLib.ts | 2 8 files changed, 920 insertions(+), 869 deletions(-) diff --git a/src/api/model.ts b/src/api/model.ts index 6edf0be..a5eca7f 100644 --- a/src/api/model.ts +++ b/src/api/model.ts @@ -77,3 +77,9 @@ return axios.put('/api/v1/llm/edit_llm_factory', params); } +// 鑾峰彇妯″瀷璇︽儏鏄剧ず鍍� +export function getFactoryDetail(params) { + return axios.get('/api/v1/llm/factory_config',{ + params, + }); +} diff --git a/src/components/menu/index.vue b/src/components/menu/index.vue index a6ef80d..4485255 100644 --- a/src/components/menu/index.vue +++ b/src/components/menu/index.vue @@ -38,10 +38,12 @@ } // Eliminate external link side effects const { hideInMenu, activeMenu } = item.meta as RouteMeta; + if (route.name === item.name && !hideInMenu && !activeMenu) { selectedKey.value = [item.name as string]; return; } + // const firstMenuNameArr=['model','knowledge','session','sessionRecords']; // const suffix='Manager'; // if(firstMenuNameArr.indexOf(item.name)!=-1){ @@ -54,6 +56,7 @@ // }); // } // Trigger router change + router.push({ name: item.name, }); diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 51ee959..763aa59 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -8,6 +8,7 @@ eager: true, }); + console.log(externalModules, 'externalModules'); function formatModules(_modules: any, result: RouteRecordNormalized[]) { diff --git a/src/router/routes/modules/knowledgeLib.ts b/src/router/routes/modules/knowledgeLib.ts index 6f6cb30..ce371e4 100644 --- a/src/router/routes/modules/knowledgeLib.ts +++ b/src/router/routes/modules/knowledgeLib.ts @@ -9,7 +9,7 @@ requiresAuth: true, icon: 'icon-storage', order: 2, - hideInMenu:false + hideInMenu:false, }, children:[ { diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue index 2e20544..442ca87 100644 --- a/src/views/dmx/knowledgeLib/index.vue +++ b/src/views/dmx/knowledgeLib/index.vue @@ -6,9 +6,12 @@ <div class="lf-container-top"> <a-input-search :placeholder="$t('cardList.searchInput.placeholder')" - style="width: 130px;" + style="width: 130px" /> - <addKnow @getknowledge="getknowledge" @getKbdetail="getKbdetail"></addKnow> + <addKnow + @getknowledge="getknowledge" + @getKbdetail="getKbdetail" + ></addKnow> </div> <a-spin :loading="listloading" class="lf-container-down"> <a-scrollbar style="height: calc(100vh - 300px); overflow: auto"> @@ -16,18 +19,23 @@ class="tab" v-for="(tab, index) in tabs" :key="index" - @click="selectTab(index,tab)" - :class="{ 'active': selectedTab === index }" + @click="selectTab(index, tab)" + :class="{ active: selectedTab === index }" > {{ tab.name }} <a-popover position="bl"> - <icon-more :style="{position: 'absolute',top:'10px',right:'10px'}" /> + <icon-more + :style="{ position: 'absolute', top: '10px', right: '10px' }" + /> <template #content> <!-- <a-popconfirm content="纭畾鍒犻櫎鍚�?" @ok="deleteKnowledge(tab.id)" type="warning">--> <!-- <span style="cursor: pointer;color: #4977ba;font-size: 12px"><icon-delete style="font-size: 14px"/>鍒犻櫎</span>--> <!-- </a-popconfirm>--> - <span style="cursor: pointer;color: #4977ba;font-size: 12px" @click="deleteKnowledge(tab.id)"><icon-delete - style="font-size: 14px" />鍒犻櫎</span> + <span + style="cursor: pointer; color: #4977ba; font-size: 12px" + @click="deleteKnowledge(tab.id)" + ><icon-delete style="font-size: 14px" />鍒犻櫎</span + > </template> </a-popover> </div> @@ -37,8 +45,17 @@ <div class="rt-container" v-if="tabs.length > 0"> <a-tabs :active-key="activeKey" @change="handleTabChange"> <a-tab-pane key="1" :title="t('dmx.list.DataSet')"> - <a-scrollbar class="rt-container-main" :style="{height: documentHeight + 70 + 'px'}" style="overflow: auto"> - <a-card ref="account" class="general-card" title="" style="padding-top: 20px"> + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > + <a-card + ref="account" + class="general-card" + title="" + style="padding-top: 20px" + > <a-row> <a-col :flex="1" :span="12"> <a-form @@ -48,16 +65,21 @@ label-align="left" > <a-row :gutter="16"> - <a-col :span="24" style="margin-bottom: 10px;display: flex;justify-content: space-between"> + <a-col + :span="24" + style=" + margin-bottom: 10px; + display: flex; + justify-content: space-between; + " + > <a-popover position="bottom" v-model="checkedArr.length" trigger="click" > - <a-button - :disabled="checkedArr.length == 0" - border - >鎵归噺 + <a-button :disabled="checkedArr.length == 0" border + >鎵归噺 <icon-down style="margin-left: 4px" /> </a-button> <template #content> @@ -104,14 +126,19 @@ </template> </a-popover> <span> - <a-input-search - :placeholder="$t('cardList.searchInput.placeholder')" - style="width: 200px;margin-right: 10px" - v-model="keywords" - @change="search" - /> + <a-input-search + :placeholder=" + $t('cardList.searchInput.placeholder') + " + style="width: 200px; margin-right: 10px" + v-model="keywords" + @change="search" + /> <!--鏂板缓--> - <add :kbobj="kbobj" @changeFetchData="changeFetchData" /> + <add + :kbobj="kbobj" + @changeFetchData="changeFetchData" + /> </span> </a-col> </a-row> @@ -139,7 +166,11 @@ </a-col> <a-col :span="12" - style="display: flex; align-items: center; justify-content: end" + style=" + display: flex; + align-items: center; + justify-content: end; + " > <!-- <a-button>--> <!-- <template #icon>--> @@ -148,10 +179,8 @@ <!-- {{ $t('searchTable.operation.download') }}--> <!-- </a-button>--> <a-tooltip :content="$t('searchTable.actions.refresh')"> - <div class="action-icon" - > - <icon-refresh size="18" - /> + <div class="action-icon"> + <icon-refresh size="18" /> </div> </a-tooltip> <a-dropdown @select="handleSelectDensity"> @@ -216,8 +245,8 @@ :bordered="false" :size="size" @page-change="onPageChange" - :max-height='documentHeight' - :scroll="{x: 1000}" + :max-height="documentHeight" + :scroll="{ x: 1000 }" :row-selection="{ type: 'checkbox', showCheckedAll: true, @@ -228,7 +257,7 @@ > <template #name="{ record }"> <!-- <icon-file style="color: #0960bd;margin-right: 4px;" />--> - <icon-file style="margin-right: 4px;" /> + <icon-file style="margin-right: 4px" /> <!-- <span style="color: #0960bd;cursor: pointer" @click="fileClick">--> <!-- {{record.name}}--> <!-- </span>--> @@ -241,38 +270,67 @@ <!-- <span>{{ parser_ids[record.parser_id]}}</span>--> <!-- </template>--> <template #status="{ record }"> - <a-switch v-model="record.status" size="small" checked-value="1" unchecked-value="0" - @change="handleChangeStatus(record)" /> + <a-switch + v-model="record.status" + size="small" + checked-value="1" + unchecked-value="0" + @change="handleChangeStatus(record)" + /> </template> <template #run="{ record }"> - <div style="display: flex;align-items: center;"> + <div style="display: flex; align-items: center"> <div style="width: 100px"> <a-popover title="" v-if="record.run == '4'"> - <a-tag :loading="record.loading" :color="'blue'" border>{{ $t("dmx.list.complete") }}</a-tag> + <a-tag + :loading="record.loading" + :color="'blue'" + border + >{{ $t('dmx.list.complete') }}</a-tag + > <template #content> <p></p> </template> </a-popover> <a-popover title="" v-if="record.run == '3'"> - <a-tag :loading="record.loading" :color="'blue'" border>{{ $t("dmx.list.complete") }}</a-tag> + <a-tag + :loading="record.loading" + :color="'blue'" + border + >{{ $t('dmx.list.complete') }}</a-tag + > <template #content> <p></p> </template> </a-popover> <a-popover title="" v-if="record.run == '1'"> - <a-tag :loading="record.loading" :color="'blue'" border>瑙f瀽涓�...</a-tag> + <a-tag + :loading="record.loading" + :color="'blue'" + border + >瑙f瀽涓�...</a-tag + > <template #content> <p></p> </template> </a-popover> <a-popover title="" v-if="record.run == '2'"> - <a-tag :loading="record.loading" :color="'gold'" border>{{ $t("dmx.list.cancel") }}</a-tag> + <a-tag + :loading="record.loading" + :color="'gold'" + border + >{{ $t('dmx.list.cancel') }}</a-tag + > <template #content> <p></p> </template> </a-popover> <a-popover title="" v-if="record.run == '0'"> - <a-tag :loading="record.loading" :color="'green'" border>{{ $t("dmx.list.NotStarted") }} + <a-tag + :loading="record.loading" + :color="'green'" + border + >{{ $t('dmx.list.NotStarted') }} </a-tag> <template #content> <p></p> @@ -280,57 +338,105 @@ </a-popover> </div> <div> - <a-button type="text" size="large" @click="run(record)" :loading="record.loading"> + <a-button + type="text" + size="large" + @click="run(record)" + :loading="record.loading" + > <template #icon> <icon-sync v-if="record.run == '4'" /> <icon-sync v-if="record.run == '3'" /> - <icon-sync style="color: green" v-if="record.run == '2'" /> - <a-button status="warning" shape="circle" v-if="record.run == '1'" size="small"> + <icon-sync + style="color: green" + v-if="record.run == '2'" + /> + <a-button + status="warning" + shape="circle" + v-if="record.run == '1'" + size="small" + > <icon-close /> </a-button> - <icon-play-circle style="color: green" v-if="record.run == '0'" /> + <icon-play-circle + style="color: green" + v-if="record.run == '0'" + /> </template> </a-button> </div> </div> </template> <template #action="{ record }"> - <tool :kbtenantInfo="kbtenantInfo" :item="record" :kbdetail="kbdetail" /> + <tool + :kbtenantInfo="kbtenantInfo" + :item="record" + :kbdetail="kbdetail" + /> <edit :item="record" @upTabdateItem="upTabdateItem" /> - <a-popconfirm :content="'纭畾鍒犻櫎鍚�'" type="warning" @ok="deleteItem(record)"> - <a-button type="text" size="small" :disabled="record.run == '1'"> + <a-popconfirm + :content="'纭畾鍒犻櫎鍚�'" + type="warning" + @ok="deleteItem(record)" + > + <a-button + type="text" + size="small" + :disabled="record.run == '1'" + > <template #icon> <icon-delete /> </template> </a-button> </a-popconfirm> - <a-button type="text" size="small" :disabled="record.run == '1'" - @click="onDownloadDocument(record)"> + <a-button + type="text" + size="small" + :disabled="record.run == '1'" + @click="onDownloadDocument(record)" + > <template #icon> <icon-download /> </template> </a-button> - <a-button type="text" size="small" :disabled="record.run == '1'" @click="previewArea(record)"> + <a-button + type="text" + size="small" + :disabled="record.run == '1'" + @click="previewArea(record)" + > <template #icon> <icon-eye /> </template> </a-button> - </template> </a-table> </a-card> </a-scrollbar> </a-tab-pane> <a-tab-pane key="2" :title="t('dmx.list.test')"> - <a-scrollbar class="rt-container-main" :style="{height: documentHeight + 70 + 'px'}" style="overflow: auto"> + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > <test ref="testForm"></test> </a-scrollbar> </a-tab-pane> <a-tab-pane key="3" :title="t('dmx.list.disposition')"> - <a-scrollbar class="rt-container-main" :style="{height: documentHeight + 70 + 'px'}" style="overflow: auto"> - <config ref="configForm" :kbtenantInfo="kbtenantInfo" @cancleConfig="cancleConfig" - @saveConfig="saveConfig"></config> + <a-scrollbar + class="rt-container-main" + :style="{ height: documentHeight + 70 + 'px' }" + style="overflow: auto" + > + <config + ref="configForm" + :kbtenantInfo="kbtenantInfo" + @cancleConfig="cancleConfig" + @saveConfig="saveConfig" + ></config> </a-scrollbar> </a-tab-pane> </a-tabs> @@ -374,754 +480,745 @@ </div> <a-modal title=" " v-model:visible="visible" :footer="false" fullscreen> <!-- <docx previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>--> - <docx v-if="documenttype=='docx'" :previewSrc="previewSrc"></docx> - <excel v-if="documenttype=='excel'" :previewSrc="previewSrc"></excel> - <txtPdf v-if="documenttype=='txtPdf'" :previewSrc="previewSrc"></txtPdf> + <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx> + <excel v-if="documenttype == 'excel'" :previewSrc="previewSrc"></excel> + <txtPdf v-if="documenttype == 'txtPdf'" :previewSrc="previewSrc"></txtPdf> </a-modal> </div> </template> <script lang="ts" setup> -import { computed, ref, reactive, watch, nextTick, onBeforeMount, onMounted } from "vue"; -import { useI18n } from "vue-i18n"; -import useLoading from "@/hooks/loading"; -import { - queryKbList, - PolicyRecord, - PolicyParams, - queryKbDocumentList, - deleteKnow, - queryKbdetail, - queryKbtenantInfo, - kbdocumentrm, - kbdocumentchangeparser, - kbdocumentrun, - kbdocumentchangeStatus, - downloadFile, - chunkSwitch -} from "@/api/kbList"; -import { Pagination } from "@/types/global"; -import type { SelectOptionData } from "@arco-design/web-vue/es/select/interface"; -import type { TableColumnData } from "@arco-design/web-vue/es/table/interface"; -import cloneDeep from "lodash/cloneDeep"; -import Sortable from "sortablejs"; -import add from "@/views/dmx/knowledgeLib/add.vue"; -import edit from "@/views/dmx/knowledgeLib/edit.vue"; -import addKnow from "@/views/dmx/knowledgeLib/addKnow.vue"; -import config from "@/views/dmx/knowledgeLib/config.vue"; -import test from "@/views/dmx/knowledgeLib/test.vue"; -import tool from "@/views/dmx/knowledgeLib/tool.vue"; -import docx from "@/views/dmx/knowledgeLib/components/docx.vue"; -import excel from "@/views/dmx/knowledgeLib/components/excel.vue"; -import txtPdf from "@/views/dmx/knowledgeLib/components/txtPdf.vue"; -import { Message, Modal } from "@arco-design/web-vue"; -import { documentHeight, parseTime } from "@/utils"; -import { deleteLlm } from "@/api/model"; -import { userModelState } from "@/store"; + import { + computed, + ref, + reactive, + watch, + nextTick, + onBeforeMount, + onMounted, + } from 'vue'; + import { useI18n } from 'vue-i18n'; + import useLoading from '@/hooks/loading'; + import { + queryKbList, + PolicyRecord, + PolicyParams, + queryKbDocumentList, + deleteKnow, + queryKbdetail, + queryKbtenantInfo, + kbdocumentrm, + kbdocumentchangeparser, + kbdocumentrun, + kbdocumentchangeStatus, + downloadFile, + chunkSwitch, + } from '@/api/kbList'; + import { Pagination } from '@/types/global'; + import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface'; + import type { TableColumnData } from '@arco-design/web-vue/es/table/interface'; + import cloneDeep from 'lodash/cloneDeep'; + import Sortable from 'sortablejs'; + import add from '@/views/dmx/knowledgeLib/add.vue'; + import edit from '@/views/dmx/knowledgeLib/edit.vue'; + import addKnow from '@/views/dmx/knowledgeLib/addKnow.vue'; + import config from '@/views/dmx/knowledgeLib/config.vue'; + import test from '@/views/dmx/knowledgeLib/test.vue'; + import tool from '@/views/dmx/knowledgeLib/tool.vue'; + import docx from '@/views/dmx/knowledgeLib/components/docx.vue'; + import excel from '@/views/dmx/knowledgeLib/components/excel.vue'; + import txtPdf from '@/views/dmx/knowledgeLib/components/txtPdf.vue'; + import { Message, Modal } from '@arco-design/web-vue'; + import { documentHeight, parseTime } from '@/utils'; + import { deleteLlm } from '@/api/model'; + import { userModelState } from '@/store'; -let modelStore = userModelState(); -const httpUrl = modelStore.hrefUrl; -type SizeProps = "mini" | "small" | "medium" | "large"; -type Column = TableColumnData & { checked?: true }; -const account = ref(null); -const generateFormModel = () => { - return { - number: "", - name: "", - contentType: "", - filterType: "", - createdTime: [], - status: "" + let modelStore = userModelState(); + const httpUrl = modelStore.hrefUrl; + type SizeProps = 'mini' | 'small' | 'medium' | 'large'; + type Column = TableColumnData & { checked?: true }; + const account = ref(null); + const generateFormModel = () => { + return { + number: '', + name: '', + contentType: '', + filterType: '', + createdTime: [], + status: '', + }; }; -}; -const { loading, setLoading } = useLoading(true); -const { t } = useI18n(); -const renderData = ref([]); -const formModel = ref(generateFormModel()); -const cloneColumns = ref([]); -const showColumns = ref<Column[]>([]); + const { loading, setLoading } = useLoading(true); + const { t } = useI18n(); + const renderData = ref([]); + const formModel = ref(generateFormModel()); + const cloneColumns = ref([]); + const showColumns = ref<Column[]>([]); -const size = ref<SizeProps>("medium"); -let visible = ref(false); -let listloading = ref(false); -let keywords = ref(""); -let activeKey = ref("1"); -let detailsShow = ref(false); -let checkedAll = ref(false); -let checkedArr = ref([]); -let selectedTab = ref(0); -let testForm = ref(null); -let configForm = ref(null); -let documenttype = ref("docx"); -let previewSrc = ref(""); -let kbId = ref(""); -let kbobj = reactive({}); -let kbdetail = reactive({}); -let parser_ids = reactive({}); -let seeObj = reactive({}); -let kbtenantInfo = reactive({ - asr_id: "paraformer-realtime-8k-v1", - embd_id: "BAAI/bge-large-zh-v1.5", - img2txt_id: "qwen-vl-max", - llm_id: "qwen-plus", - name: "wanghao鈥榮 Kingdom", - parser_ids: "naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One", - rerank_id: "BAAI/bge-reranker-v2-m3", - role: "owner", - tenant_id: "948fc6fa41ab11ef8fb80242ac120004", - parser_idObj: {} -}); -let tabs = ref([]); - -const selectTab = (index, item) => { - selectedTab.value = index; - // console.log(item.id); - kbobj = item; - kbId = kbobj.id; - fetchData({ - kb_id: kbobj.id, - page: 1, - page_size: 20 + const size = ref<SizeProps>('medium'); + let visible = ref(false); + let listloading = ref(false); + let keywords = ref(''); + let activeKey = ref('1'); + let detailsShow = ref(false); + let checkedAll = ref(false); + let checkedArr = ref([]); + let selectedTab = ref(0); + let testForm = ref(null); + let configForm = ref(null); + let documenttype = ref('docx'); + let previewSrc = ref(''); + let kbId = ref(''); + let kbobj = reactive({}); + let kbdetail = reactive({}); + let parser_ids = reactive({}); + let seeObj = reactive({}); + let kbtenantInfo = reactive({ + asr_id: 'paraformer-realtime-8k-v1', + embd_id: 'BAAI/bge-large-zh-v1.5', + img2txt_id: 'qwen-vl-max', + llm_id: 'qwen-plus', + name: 'wanghao鈥榮 Kingdom', + parser_ids: + 'naive:General,qa:Q&A,resume:Resume,manual:Manual,table:Table,paper:Paper,book:Book,laws:Laws,presentation:Presentation,picture:Picture,one:One', + rerank_id: 'BAAI/bge-reranker-v2-m3', + role: 'owner', + tenant_id: '948fc6fa41ab11ef8fb80242ac120004', + parser_idObj: {}, }); - getKbdetail(kbobj.id); -}; + let tabs = ref([]); -const basePagination: Pagination = { - current: 1, - pageSize: 20 -}; -const pagination = reactive({ - ...basePagination -}); -const densityList = computed(() => [ - { - name: t("searchTable.size.mini"), - value: "mini" - }, - { - name: t("searchTable.size.small"), - value: "small" - }, - { - name: t("searchTable.size.medium"), - value: "medium" - }, - { - name: t("searchTable.size.large"), - value: "large" - } -]); -const columns = computed<TableColumnData[]>(() => [ - { - title: t("dmx.column.name"), - dataIndex: "name", - slotName: "name" - }, - { - title: t("鍒嗗揩鏁�"), - dataIndex: "chunk_num" - }, - { - title: t("dmx.column.UploadTime"), - dataIndex: "create_time", - slotName: "create_time", - width: 200 - }, - { - title: t("瑙f瀽鏂规硶"), - dataIndex: "parser_id", - slotName: "parser_id" - }, - { - title: t("鍚敤"), - dataIndex: "status", - slotName: "status" - }, - { - title: t("瑙f瀽鐘舵��"), - dataIndex: "run", - slotName: "run" - }, - { - title: t("dmx.column.Operate"), - dataIndex: "action", - slotName: "action", - width: 200, - minWidth: 200 - } -]); -const contentTypeOptions = computed<SelectOptionData[]>(() => [ - { - label: t("searchTable.form.contentType.img"), - value: "img" - }, - { - label: t("searchTable.form.contentType.horizontalVideo"), - value: "horizontalVideo" - }, - { - label: t("searchTable.form.contentType.verticalVideo"), - value: "verticalVideo" - } -]); -const filterTypeOptions = computed<SelectOptionData[]>(() => [ - { - label: t("searchTable.form.filterType.artificial"), - value: "artificial" - }, - { - label: t("searchTable.form.filterType.rules"), - value: "rules" - } -]); -const statusOptions = computed<SelectOptionData[]>(() => [ - { - label: t("searchTable.form.status.online"), - value: "online" - }, - { - label: t("searchTable.form.status.offline"), - value: "offline" - } -]); -const fetchData = async (params) => { - setLoading(true); - try { - const data = await queryKbDocumentList(params); - if (data.code == "0") { - parser_ids = kbtenantInfo.parser_ids.split(",").reduce((acc, pair) => { - const [key, value] = pair.split(":"); - acc[key] = value; - return acc; - }, {}); - // console.log(parser_ids, 'parser_ids'); - kbtenantInfo.parser_idObj = parser_ids; - renderData.value = data.data.docs || []; - renderData.value = renderData.value.map((item) => { - return { - ...item, - loading: false, - parser_id: parser_ids[item.parser_id] - }; - }); - // console.log(renderData.value, 'renderData'); + const selectTab = (index, item) => { + selectedTab.value = index; + // console.log(item.id); + kbobj = item; + kbId = kbobj.id; + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20, + }); + getKbdetail(kbobj.id); + }; - pagination.current = params.page; - pagination.total = data.data.total; + const basePagination: Pagination = { + current: 1, + pageSize: 20, + }; + const pagination = reactive({ + ...basePagination, + }); + const densityList = computed(() => [ + { + name: t('searchTable.size.mini'), + value: 'mini', + }, + { + name: t('searchTable.size.small'), + value: 'small', + }, + { + name: t('searchTable.size.medium'), + value: 'medium', + }, + { + name: t('searchTable.size.large'), + value: 'large', + }, + ]); + const columns = computed<TableColumnData[]>(() => [ + { + title: t('dmx.column.name'), + dataIndex: 'name', + slotName: 'name', + }, + { + title: t('鍒嗗揩鏁�'), + dataIndex: 'chunk_num', + }, + { + title: t('dmx.column.UploadTime'), + dataIndex: 'create_time', + slotName: 'create_time', + width: 200, + }, + { + title: t('瑙f瀽鏂规硶'), + dataIndex: 'parser_id', + slotName: 'parser_id', + }, + { + title: t('鍚敤'), + dataIndex: 'status', + slotName: 'status', + }, + { + title: t('瑙f瀽鐘舵��'), + dataIndex: 'run', + slotName: 'run', + }, + { + title: t('dmx.column.Operate'), + dataIndex: 'action', + slotName: 'action', + width: 200, + minWidth: 200, + }, + ]); + const contentTypeOptions = computed<SelectOptionData[]>(() => [ + { + label: t('searchTable.form.contentType.img'), + value: 'img', + }, + { + label: t('searchTable.form.contentType.horizontalVideo'), + value: 'horizontalVideo', + }, + { + label: t('searchTable.form.contentType.verticalVideo'), + value: 'verticalVideo', + }, + ]); + const filterTypeOptions = computed<SelectOptionData[]>(() => [ + { + label: t('searchTable.form.filterType.artificial'), + value: 'artificial', + }, + { + label: t('searchTable.form.filterType.rules'), + value: 'rules', + }, + ]); + const statusOptions = computed<SelectOptionData[]>(() => [ + { + label: t('searchTable.form.status.online'), + value: 'online', + }, + { + label: t('searchTable.form.status.offline'), + value: 'offline', + }, + ]); + const fetchData = async (params) => { + setLoading(true); + try { + const data = await queryKbDocumentList(params); + if (data.code == '0') { + parser_ids = kbtenantInfo.parser_ids.split(',').reduce((acc, pair) => { + const [key, value] = pair.split(':'); + acc[key] = value; + return acc; + }, {}); + // console.log(parser_ids, 'parser_ids'); + kbtenantInfo.parser_idObj = parser_ids; + renderData.value = data.data.docs || []; + renderData.value = renderData.value.map((item) => { + return { + ...item, + loading: false, + parser_id: parser_ids[item.parser_id], + }; + }); + // console.log(renderData.value, 'renderData'); + pagination.current = params.page; + pagination.total = data.data.total; + } + } catch (err) { + // you can report use errorHandler or other + } finally { + setLoading(false); } - } catch (err) { - // you can report use errorHandler or other - } finally { - setLoading(false); + }; + + const search = () => { + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20, + keywords: keywords.value, + }); + }; + + const handleClick = () => { + visible.value = true; + }; + + const onPageChange = (current: number) => { + fetchData({ ...basePagination, current }); + }; + + const selectTabAll = (val) => { + console.log(val, '鍏ㄩ��'); + checkedAll.value = val; + }; + const selectTabChange = (val) => { + console.log(val, '鍗曢��'); + checkedArr.value = val; + }; + + const knowledgeData = async (params = { page: 1, page_size: 20 }) => { + listloading.value = true; + try { + const { data } = await queryKbList(params); + // console.log(data, 'data'); + tabs.value = data; + // console.log(tabs.value, 'tabs'); + if (tabs.value.length > 0 && tabs.value[0]) { + kbobj = tabs.value[0]; + kbId = kbobj.id; + activeKey.value = '1'; + fetchData({ + kb_id: kbobj.id, + page: 1, + page_size: 20, + }); + getKbdetail(kbobj.id); + } else { + } + // renderData.value = data.list; + // console.log(renderData, 'renderData'); + // pagination.current = params.current; + // pagination.total = data.total; + } catch (err) { + // you can report use errorHandler or other + } finally { + listloading.value = false; + } + }; + + const getKbdetail = async (kb_id) => { + // 鏌ヨ鐭ヨ瘑搴撹鎯� + const data = await queryKbdetail({ + kb_id: kb_id, + }); + kbdetail = data.data; + testForm.value.changekbid(kbdetail.id); + configForm.value.changekbObj(kbdetail); + }; + + const getknowledge = async (id) => { + setLoading(true); + try { + const { data } = await queryKbList({ page: 1, page_size: 20 }); + console.log(data, '鏌ヨ鐭ヨ瘑搴撳垪琛�'); + tabs.value = data; + if (tabs.value.length > 0) { + // 瀹氫綅鍒版柊澧炵殑鐭ヨ瘑搴撳崟鍏� + selectedTab.value = tabs.value.findIndex((item) => item.id == id); + getKbdetail(id); // 鑾峰彇璇︽儏 + activeKey.value = '3'; + } + } catch (err) { + // you can report use errorHandler or other + } finally { + setLoading(false); + } + }; + + const deleteKnowledge = (id) => { + Modal.confirm({ + title: '鎻愮ず淇℃伅', + content: '纭鍒犻櫎鍚�', + okText: '纭畾', + cancelText: '鍙栨秷', + hideTitle: true, + onOk: async () => { + let data = await deleteKnow({ + kb_id: id, + }); + if (data.code == 0) { + Message.success('鍒犻櫎鎴愬姛'); + knowledgeData(); + } + }, + onCancel: () => {}, + }); + }; + const reset = () => { + formModel.value = generateFormModel(); + }; + + function handleTabChange(key) { + // 澶勭悊鏍囩鏀瑰彉浜嬩欢 + console.log('Changed to tab:', key); + activeKey.value = key; } -}; -const search = () => { - fetchData({ - kb_id: kbobj.id, - page: 1, - page_size: 20, - keywords: keywords.value - }); -}; + const handleSelectDensity = ( + val: string | number | Record<string, any> | undefined, + e: Event + ) => { + size.value = val as SizeProps; + }; -const handleClick = () => { - visible.value = true; -}; + const cancleConfig = () => { + activeKey.value = '1'; + let id = tabs.value[selectedTab.value].id; + fetchData({ + kb_id: id, + page: 1, + page_size: 20, + }); + }; -const onPageChange = (current: number) => { - fetchData({ ...basePagination, current }); -}; - -const selectTabAll = (val) => { - console.log(val,'鍏ㄩ��'); - checkedAll.value = val; -}; -const selectTabChange = (val) => { - console.log(val,'鍗曢��'); - checkedArr.value = val; -}; - -const knowledgeData = async ( - params = { page: 1, page_size: 20 } -) => { - listloading.value = true; - try { - const { data } = await queryKbList(params); - // console.log(data, 'data'); + const saveConfig = async () => { + activeKey.value = '1'; + let id = tabs.value[selectedTab.value].id; + const { data } = await queryKbList({ page: 1, page_size: 20 }); tabs.value = data; - // console.log(tabs.value, 'tabs'); - if (tabs.value.length > 0 && tabs.value[0]) { - kbobj = tabs.value[0]; - kbId = kbobj.id; - activeKey.value = "1"; + fetchData({ + kb_id: id, + page: 1, + page_size: 20, + }); + getKbdetail(id); // 鑾峰彇璇︽儏 + }; + + //鎵归噺鍚敤鍒犻櫎绂佺敤 + const addBlock = async (type) => { + if (type != 3) { + //鍚姩鍜屽彇娑� + let data = await kbdocumentrun({ + doc_ids: checkedArr.value, + run: type, + }); + if (data.code == 0) { + checkedArr.value.forEach(async (item) => { + tabs.value.forEach(async (items) => { + if (items.id == item) { + items.loading = true; + } + }); + }); + fetchData({ + kb_id: tabs.value[selectedTab.value].id, + page: 1, + page_size: 20, + }); + } else { + // Message.error('瑙f瀽澶辫触'); + // row.run = '1'; + } + } else { + //鎵归噺鍒犻櫎 + Modal.confirm({ + title: '鎻愮ず淇℃伅', + content: '纭鍒犻櫎鍚�', + okText: '纭畾', + cancelText: '鍙栨秷', + hideTitle: true, + onOk: async () => { + let data = await kbdocumentrm({ doc_id: checkedArr.value }); + if (data.code == 0) { + Message.success('鍒犻櫎鎴愬姛'); + fetchData({ + kb_id: tabs.value[selectedTab.value].id, + page: 1, + page_size: 20, + }); + } + }, + onCancel: () => {}, + }); + } + }; + + const exchangeArray = <T extends Array<any>>( + array: T, + beforeIdx: number, + newIdx: number, + isDeep = false + ): T => { + const newArray = isDeep ? cloneDeep(array) : array; + if (beforeIdx > -1 && newIdx > -1) { + // 鍏堟浛鎹㈠悗闈㈢殑锛岀劧鍚庢嬁鍒版浛鎹㈢殑缁撴灉鏇挎崲鍓嶉潰鐨� + newArray.splice( + beforeIdx, + 1, + newArray.splice(newIdx, 1, newArray[beforeIdx]).pop() + ); + } + return newArray; + }; + + const popupVisibleChange = (val: boolean) => { + if (val) { + nextTick(() => { + const el = document.getElementById('tableSetting') as HTMLElement; + const sortable = new Sortable(el, { + onEnd(e: any) { + const { oldIndex, newIndex } = e; + exchangeArray(cloneColumns.value, oldIndex, newIndex); + exchangeArray(showColumns.value, oldIndex, newIndex); + }, + }); + }); + } + }; + + const fileClick = () => { + detailsShow.value = true; + }; + + const goBackClick = () => { + detailsShow.value = false; + }; + + function upTabdateItem(id, newName) { + console.log(id, newName); + const itemToUpdate = renderData.value.find((item) => item.id === id); + if (itemToUpdate) { + itemToUpdate.name = newName; + } + } + + const deleteItem = async (row) => { + console.log(row); + let data = await kbdocumentrm({ doc_id: row.id }); + if (data.code == 0) { + Message.success('鍒犻櫎鎴愬姛'); + // console.log(kbobj, 'kbobj'); fetchData({ kb_id: kbobj.id, page: 1, - page_size: 20 + page_size: 20, }); - getKbdetail(kbobj.id); + } + }; + const onDownloadDocument = async (record) => { + console.log(record); + downloadFile({ + url: `/api/v1/document/get/${record.id}`, + filename: record.name, + }); + }; + const previewArea = async (row) => { + Object.assign(seeObj, row); + // console.log(seeObj.name, 'seeObj'); + let type = row.name.split('.')[1]; + console.log(type); + if (type == 'pdf') { + documenttype.value = 'txtPdf'; + } else if (type == 'docx') { + documenttype.value = 'docx'; + } else if (type == 'xlsx') { + documenttype.value = 'excel'; + } else if (type == 'txt') { + documenttype.value = 'txtPdf'; } else { - - } - // renderData.value = data.list; - // console.log(renderData, 'renderData'); - // pagination.current = params.current; - // pagination.total = data.total; - } catch (err) { - // you can report use errorHandler or other - } finally { - listloading.value = false; - } -}; - - -const getKbdetail = async (kb_id) => { - // 鏌ヨ鐭ヨ瘑搴撹鎯� - const data = await queryKbdetail({ - kb_id: kb_id - }); - kbdetail = data.data; - testForm.value.changekbid(kbdetail.id); - configForm.value.changekbObj(kbdetail); -}; - - -const getknowledge = async (id) => { - setLoading(true); - try { - const { data } = await queryKbList({ page: 1, page_size: 20 }); - console.log(data, "鏌ヨ鐭ヨ瘑搴撳垪琛�"); - tabs.value = data; - if (tabs.value.length > 0) { - // 瀹氫綅鍒版柊澧炵殑鐭ヨ瘑搴撳崟鍏� - selectedTab.value = tabs.value.findIndex(item => item.id == id); - getKbdetail(id); // 鑾峰彇璇︽儏 - activeKey.value = "3"; + return false; } + previewSrc.value = `${import.meta.env.VITE_API_BASE_URL}/v1/document/get/${ + row.id + }`; + // previewSrc.value = `${ httpUrl }/v1/document/get/${row.id}` + visible.value = true; + }; - } catch (err) { - // you can report use errorHandler or other - } finally { - setLoading(false); - } -}; - -const deleteKnowledge = (id) => { - Modal.confirm({ - title: "鎻愮ず淇℃伅", - content: "纭鍒犻櫎鍚�", - okText: "纭畾", - cancelText: "鍙栨秷", - hideTitle: true, - onOk: async () => { - let data = await deleteKnow({ - kb_id: id - }); - if (data.code == 0) { - Message.success("鍒犻櫎鎴愬姛"); - knowledgeData(); - } - }, - onCancel: () => { - } - }); -}; -const reset = () => { - formModel.value = generateFormModel(); -}; - -function handleTabChange(key) { - // 澶勭悊鏍囩鏀瑰彉浜嬩欢 - console.log("Changed to tab:", key); - activeKey.value = key; -} - -const handleSelectDensity = ( - val: string | number | Record<string, any> | undefined, - e: Event -) => { - size.value = val as SizeProps; -}; - -const cancleConfig = () => { - activeKey.value = "1"; - let id = tabs.value[selectedTab.value].id; - fetchData({ - kb_id: id, - page: 1, - page_size: 20 - }); -}; - -const saveConfig = async () => { - activeKey.value = "1"; - let id = tabs.value[selectedTab.value].id; - const { data } = await queryKbList({ page: 1, page_size: 20 }); - tabs.value = data; - fetchData({ - kb_id: id, - page: 1, - page_size: 20 - }); - getKbdetail(id); // 鑾峰彇璇︽儏 -}; - - -//鎵归噺鍚敤鍒犻櫎绂佺敤 -const addBlock = async (type) => { - if (type != 3) { - //鍚姩鍜屽彇娑� - let data = await kbdocumentrun({ - doc_ids: checkedArr.value, - run: type + const handleChangeStatus = async (row) => { + console.log(row); + let data = await kbdocumentchangeStatus({ + doc_id: row.id, + status: row.status, }); if (data.code == 0) { - checkedArr.value.forEach(async (item) => { - tabs.value.forEach(async (items) => { - if(items.id == item){ - items.loading = true; - } - }) - }) + Message.success('鎿嶄綔鎴愬姛'); + } + }; + + const run = async (row) => { + row.loading = true; + let run; + if (row.run == '0') { + run = '1'; + } else if (row.run == '1') { + run = '2'; + } else if (row.run == '2') { + run = '1'; + } else { + run = '1'; + } + let data = await kbdocumentrun({ + doc_ids: [row.id], + run: run, + }); + if (data.code == 0) { fetchData({ kb_id: tabs.value[selectedTab.value].id, page: 1, - page_size: 20 + page_size: 20, }); } else { // Message.error('瑙f瀽澶辫触'); // row.run = '1'; } + row.loading = false; + }; - - } else { - //鎵归噺鍒犻櫎 - Modal.confirm({ - title: "鎻愮ず淇℃伅", - content: "纭鍒犻櫎鍚�", - okText: "纭畾", - cancelText: "鍙栨秷", - hideTitle: true, - onOk: async () => { - let data = await kbdocumentrm({ doc_id: checkedArr.value }); - if (data.code == 0) { - Message.success("鍒犻櫎鎴愬姛"); - fetchData({ - kb_id: tabs.value[selectedTab.value].id, - page: 1, - page_size: 20 - }); - } - }, - onCancel: () => { - } - }); - - - - } -}; - -const exchangeArray = <T extends Array<any>>( - array: T, - beforeIdx: number, - newIdx: number, - isDeep = false -): T => { - const newArray = isDeep ? cloneDeep(array) : array; - if (beforeIdx > -1 && newIdx > -1) { - // 鍏堟浛鎹㈠悗闈㈢殑锛岀劧鍚庢嬁鍒版浛鎹㈢殑缁撴灉鏇挎崲鍓嶉潰鐨� - newArray.splice( - beforeIdx, - 1, - newArray.splice(newIdx, 1, newArray[beforeIdx]).pop() - ); - } - return newArray; -}; - -const popupVisibleChange = (val: boolean) => { - if (val) { - nextTick(() => { - const el = document.getElementById("tableSetting") as HTMLElement; - const sortable = new Sortable(el, { - onEnd(e: any) { - const { oldIndex, newIndex } = e; - exchangeArray(cloneColumns.value, oldIndex, newIndex); - exchangeArray(showColumns.value, oldIndex, newIndex); - } - }); - }); - } -}; - -const fileClick = () => { - detailsShow.value = true; - -}; - -const goBackClick = () => { - detailsShow.value = false; - -}; - -function upTabdateItem(id, newName) { - console.log(id, newName); - const itemToUpdate = renderData.value.find(item => item.id === id); - if (itemToUpdate) { - itemToUpdate.name = newName; - } -} - -const deleteItem = async (row) => { - console.log(row); - let data = await kbdocumentrm({ doc_id: row.id }); - if (data.code == 0) { - Message.success("鍒犻櫎鎴愬姛"); - // console.log(kbobj, 'kbobj'); + const changeFetchData = async (row) => { fetchData({ kb_id: kbobj.id, page: 1, - page_size: 20 + page_size: 20, }); - } -}; -const onDownloadDocument = async (record) => { - console.log(record); - downloadFile({ - url: `/api/v1/document/get/${record.id}`, - filename: record.name + }; + watch( + () => columns.value, + (val) => { + // alert(columns.value) + cloneColumns.value = cloneDeep(val); + cloneColumns.value.forEach((item, index) => { + item.checked = true; + }); + showColumns.value = cloneDeep(cloneColumns.value); + }, + { deep: true, immediate: true } + ); + + onBeforeMount(async () => { + // const {data} = await queryKbtenantInfo(); + // Object.assign(kbtenantInfo,data); + // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�'); }); -}; -const previewArea = async (row) => { - Object.assign(seeObj, row); - // console.log(seeObj.name, 'seeObj'); - let type = row.name.split(".")[1]; - console.log(type); - if (type == "pdf") { - documenttype.value = "txtPdf"; - } else if (type == "docx") { - documenttype.value = "docx"; - } else if (type == "xlsx") { - documenttype.value = "excel"; - } else if (type == "txt") { - documenttype.value = "txtPdf"; - } else { - return false; - } - previewSrc.value = `${import.meta.env.VITE_API_BASE_URL}/v1/document/get/${row.id}`; - // previewSrc.value = `${ httpUrl }/v1/document/get/${row.id}` - visible.value = true; - -}; - -const handleChangeStatus = async (row) => { - console.log(row); - let data = await kbdocumentchangeStatus({ - doc_id: row.id, - status: row.status + onMounted(() => { + knowledgeData(); }); - if (data.code == 0) { - Message.success("鎿嶄綔鎴愬姛"); - } -}; - - -const run = async (row) => { - row.loading = true; - let run; - if (row.run == "0") { - run = "1"; - } else if (row.run == "1") { - run = "2"; - } else if (row.run == "2") { - run = "1"; - } else { - run = "1"; - } - let data = await kbdocumentrun({ - doc_ids: [row.id], - run: run - }); - if (data.code == 0) { - fetchData({ - kb_id: tabs.value[selectedTab.value].id, - page: 1, - page_size: 20 - }); - } else { - // Message.error('瑙f瀽澶辫触'); - // row.run = '1'; - } - - row.loading = false; -}; - -const changeFetchData = async (row) => { - fetchData({ - kb_id: kbobj.id, - page: 1, - page_size: 20 - }); -}; -watch( - () => columns.value, - (val) => { - // alert(columns.value) - cloneColumns.value = cloneDeep(val); - cloneColumns.value.forEach((item, index) => { - item.checked = true; - }); - showColumns.value = cloneDeep(cloneColumns.value); - }, - { deep: true, immediate: true } -); - -onBeforeMount(async () => { - // const {data} = await queryKbtenantInfo(); - // Object.assign(kbtenantInfo,data); - // console.log(kbtenantInfo,'kbtenantInfo鐨勬暟鎹�'); - -}); -onMounted(() => { - knowledgeData(); -}); - </script> <style scoped lang="less"> -.container { - padding: 0 20px 20px 20px; + .container { + padding: 0 20px 20px 20px; - .main-container { - display: flex; - width: 100%; - - .lf-container { + .main-container { display: flex; - flex-direction: column; - align-items: center; - //justify-content: space-evenly; - border-radius: 8px; - background: var(--color-bg-2); - width: 200px; + width: 100%; - .lf-container-top { - display: flex; - margin: 10px 0; - } - - .lf-container-down { + .lf-container { display: flex; flex-direction: column; - box-sizing: border-box; - width: 90%; - height: calc(100% - 80px); - border: 1px solid var(--color-fill-3); + align-items: center; + //justify-content: space-evenly; border-radius: 8px; - //padding: 10px; - margin-bottom: 10px; - //.tabs{ - // width: 100%; - // height: 100%; - // overflow: auto; - //} - .tab { - cursor: pointer; - box-sizing: border-box; - margin: 10px 10px; - padding: 0 10px; - padding-right: 20%; - font-size: 14px; - height: 40px; - line-height: 40px; - list-style: none; - position: relative; - color: var(--color-text-1); - border: 1px solid var(--color-neutral-3); - background: var(--color-bg-2); - border-radius: 8px; - overflow: hidden; /* 纭繚瓒呭嚭瀹瑰櫒鐨勬枃鏈闅愯棌 */ - white-space: nowrap; /* 闃叉鏂囨湰鎹㈣ */ - text-overflow: ellipsis; /* 瓒呭嚭閮ㄥ垎鏄剧ず鐪佺暐鍙� */ - } + background: var(--color-bg-2); + width: 200px; - .tab:hover { - color: #2a2a2b; - border: 1px solid var(--color-neutral-3); - background: #e8e8ea; - box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09); - } - - .tab.active { - color: #2a2a2b; - border: 1px solid var(--color-neutral-1); - background: #e8e8ea; - cursor: pointer; - } - } - } - - .rt-container { - position: relative; - //background: #626aea; - margin-left: 20px; - width: calc(100% - 200px); - overflow: hidden; - - .rt-container-main { - overflow: auto; - } - - .details { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: #ffffff; - - .details-header { + .lf-container-top { display: flex; - justify-content: space-between; - margin-top: 10px; - padding-right: 20px; + margin: 10px 0; + } + + .lf-container-down { + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 90%; + height: calc(100% - 80px); + border: 1px solid var(--color-fill-3); + border-radius: 8px; + //padding: 10px; + margin-bottom: 10px; + //.tabs{ + // width: 100%; + // height: 100%; + // overflow: auto; + //} + .tab { + cursor: pointer; + box-sizing: border-box; + margin: 10px 10px; + padding: 0 10px; + padding-right: 20%; + font-size: 14px; + height: 40px; + line-height: 40px; + list-style: none; + position: relative; + color: var(--color-text-1); + border: 1px solid var(--color-neutral-3); + background: var(--color-bg-2); + border-radius: 8px; + overflow: hidden; /* 纭繚瓒呭嚭瀹瑰櫒鐨勬枃鏈闅愯棌 */ + white-space: nowrap; /* 闃叉鏂囨湰鎹㈣ */ + text-overflow: ellipsis; /* 瓒呭嚭閮ㄥ垎鏄剧ず鐪佺暐鍙� */ + } + + .tab:hover { + color: #2a2a2b; + border: 1px solid var(--color-neutral-3); + background: #e8e8ea; + box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), + 0 3px 6px 0 rgba(0, 0, 0, 0.12), + 0 5px 12px 4px rgba(0, 0, 0, 0.09); + } + + .tab.active { + color: #2a2a2b; + border: 1px solid var(--color-neutral-1); + background: #e8e8ea; + cursor: pointer; + } + } + } + + .rt-container { + position: relative; + //background: #626aea; + margin-left: 20px; + width: calc(100% - 200px); + overflow: hidden; + + .rt-container-main { + overflow: auto; + } + + .details { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #ffffff; + + .details-header { + display: flex; + justify-content: space-between; + margin-top: 10px; + padding-right: 20px; + } } } } } -} -:deep(.arco-table-th) { - &:last-child { - .arco-table-th-item-title { - margin-left: 16px; + :deep(.arco-table-th) { + &:last-child { + .arco-table-th-item-title { + margin-left: 16px; + } } } -} -.action-icon { - margin-left: 12px; - cursor: pointer; -} - -.active { - color: #0960bd; - background-color: #e3f4fc; -} - -.setting { - display: flex; - align-items: center; - width: 200px; - - .title { + .action-icon { margin-left: 12px; cursor: pointer; } -} + + .active { + color: #0960bd; + background-color: #e3f4fc; + } + + .setting { + display: flex; + align-items: center; + width: 200px; + + .title { + margin-left: 12px; + cursor: pointer; + } + } </style> diff --git a/src/views/dmx/model/components/addPageModel.vue b/src/views/dmx/model/components/addPageModel.vue index 616dac0..eda4416 100644 --- a/src/views/dmx/model/components/addPageModel.vue +++ b/src/views/dmx/model/components/addPageModel.vue @@ -18,53 +18,39 @@ layout="vertical" > <div> - <a-form-item field="model_type" label="妯″瀷绫诲瀷"> - <a-select v-model="form.model_type" placeholder="璇烽�夋嫨"> - <a-option - v-for="item of form.options" - :value="item.value" - :label="item.label" - ></a-option> - <!-- <a-option value="embedding">embedding</a-option> - <a-option value="rerank">rerank</a-option> - <a-option value="image2text">image2text</a-option> --> - </a-select> - </a-form-item> - <a-form-item field="llm_name" label="妯″瀷鍚嶇О"> - <a-input v-model="form.llm_name" placeholder="璇疯緭鍏ユā鍨嬪悕绉�" /> - </a-form-item> - - <!-- <a-form-item field="volc_ak" label="鐏北 ACCESS_KEY"> - <a-input v-model="form.volc_ak" placeholder="璇疯緭鍏ョ伀灞� ACCESS_KEY" /> - <a-button - type="primary" - @click="handleClick" - style="margin-left: 10px" - > - <template #icon> - <icon-plus /> - </template> - </a-button> - </a-form-item> - <a-form-item field="volc_sk" label="鐏北 SECRET_KEY"> - <a-input v-model="form.volc_sk" placeholder="璇疯緭鍏ョ伀灞� SECRET_KEY" /> - </a-form-item> --> - <a-form-item field="api_base" label="鍩虹URL"> - <a-input v-model="form.api_base" placeholder="璇疯緭鍏ュ熀纭�URL" /> - </a-form-item> - <a-form-item field="name" label="API-Key"> - <a-input v-model="form.name" placeholder="API-Key" /> - </a-form-item> - <!-- <a-form-item field="describe" label="Base-Url"> - <a-input v-model="form.name" placeholder="Base-Url" /> - </a-form-item> --> - <a-form-item + <div v-for="(item, index) in form.formData.params" :key="index"> + <div v-if="item.value_type === 'select'"> + <a-form-item + :field="item.key" + :label="item.name" + :required="item.required" + > + <a-select v-model="form[item.key]" placeholder="璇烽�夋嫨"> + <a-option + v-for="(list, v) in item.options" + :value="list" + :label="v" + ></a-option> + </a-select> + </a-form-item> + </div> + <div v-else-if="item.value_type === 'input'"> + <a-form-item + :field="item.key" + :label="item.name" + :required="item.required" + > + <a-input v-model="form[item.key]" placeholder="璇疯緭鍏�" /> + </a-form-item> + </div> + </div> + <!-- <a-form-item field="raptor" label="鏄惁鏀寔 Vision" v-if="form.model_type === 'chat'" > <a-switch v-model="form.raptor" /> - </a-form-item> + </a-form-item> --> <a-form-item field="logo" label="妯″瀷鍥剧墖"> <a-space direction="vertical" @@ -81,7 +67,7 @@ ></Upload> </a-space> </a-form-item> - <a-form-item field="all_params" label="澧炲姞鍏跺畠鍙傛暟閰嶇疆"> + <!-- <a-form-item field="all_params" label="澧炲姞鍏跺畠鍙傛暟閰嶇疆"> <a-button type="primary" @click="handleAddClick" @@ -91,7 +77,7 @@ <icon-plus /> </template> </a-button> - </a-form-item> + </a-form-item> --> <a-form-item v-for="(item, index) in form.addFomList" :key="index"> <div class="addInput"> @@ -115,27 +101,6 @@ </div> </a-form-item> </div> - <!-- <div v-else> - <a-form-item field="name" label="API-Key"> - <a-input v-model="form.name" placeholder="API-Key" /> - </a-form-item> - <a-form-item field="describe" label="Base-Url"> - <a-input v-model="form.name" placeholder="Base-Url" /> - </a-form-item> - - <a-form-item field="section" label="妯″瀷鍥剧墖"> - <a-space direction="vertical" :style="{ width: '100%' }"> - <Upload - :action="uploadAction" - :limit="1" - :url="form.urlS" - @handleRemove="deleteRemove" - @update:fileList="updateFileList" - @success="handleSuccess" - ></Upload> - </a-space> - </a-form-item> - </div> --> <a-form-item> <div style="width: 100%; text-align: right"> @@ -151,7 +116,7 @@ <script lang="ts" setup> import { reactive, ref, computed, watch, watchEffect, onMounted } from 'vue'; - import { addLlm, getLlmDetail, editLlm } from '@/api/model'; + import { addLlm, getLlmDetail, editLlm, getFactoryDetail } from '@/api/model'; import { Modal, Message } from '@arco-design/web-vue'; import message from '@arco-design/web-vue/es/message'; import { resolveUnref } from '@vueuse/core'; @@ -186,15 +151,8 @@ const form = reactive({ size: 'medium', name: '', + formData: { logo: '' }, llm_factory: '', - model_type: '', - province: 'haidian', - options: [ - { label: 'chat', value: 'chat' }, - { label: 'embedding', value: 'embedding' }, - { label: 'rerank', value: 'rerank' }, - { label: 'image2text', value: 'image2text' }, - ], llm_name: '', api_base: '', volc_ak: '', @@ -205,44 +163,13 @@ slider: 5, score: 5, switch: false, - multiSelect: ['section one'], - treeSelect: '', raptor: false, addFomList: <any[]>[], }); + const form_ref = ref(); const rules = { - model_type: [ - { - required: true, - message: '璇烽�夋嫨妯″瀷绫诲瀷', - }, - ], - llm_name: [ - { - required: true, - message: '鍚嶇О涓嶅厑璁镐负绌�', - }, - ], - volc_sk: [ - { - required: true, - message: '璇疯緭鍏olc_sk', - }, - ], - volc_ak: [ - { - required: true, - message: '璇疯緭鍏olc_ak', - }, - ], - api_base: [ - { - required: true, - message: '璇疯緭鍏pi_base', - }, - ], logo: [ { required: true, @@ -281,22 +208,16 @@ const all_params = form.addFomList.map((item) => { return item.name + ':' + item.value; }); + console.log(form, 9999); form_ref.value ?.validate() .then(async (res) => { if (!res) { + form.formData.logo = uploadUrl.value[0] || ''; + form.llm_factory = editList.value.llm_factory; + delete form.formData; if (props.title == '缂栬緫') { - console.log(imageUrls.value, 999); - const data = await editLlm({ - llm_factory: editList.value.llm_factory, - llm_name: form.llm_name, - model_type: form.model_type, - volc_ak: form.volc_ak, - volc_sk: form.volc_sk, - api_base: form.api_base, - all_params: all_params, - logo: uploadUrl.value[0] || '', - }); + const data = await editLlm(form); if ((data as any).code == 200) { message.success('娣诲姞鎴愬姛'); @@ -306,16 +227,7 @@ message.error('娣诲姞澶辫触'); } } else { - const data = await addLlm({ - llm_factory: editList.value.llm_factory, - llm_name: form.llm_name, - model_type: form.model_type, - volc_ak: form.volc_ak, - volc_sk: form.volc_sk, - api_base: form.api_base, - all_params: all_params, - logo: uploadUrl.value[0] || '', - }); + const data = await addLlm(form); if ((data as any).code == 200) { message.success('娣诲姞鎴愬姛'); @@ -408,6 +320,15 @@ imageUrls.value.push(httpUrl + data.data.logo); }; + const getFactory = async () => { + const { data } = await getFactoryDetail({ + factory_name: editList.value.llm_factory, + }); + form.formData = data; + }; + onMounted(() => { + getFactory(); + }); watchEffect(() => { if (props.editList.name) { diff --git a/src/views/dmx/model/components/addTableName.vue b/src/views/dmx/model/components/addTableName.vue index aee630a..7ae55bd 100644 --- a/src/views/dmx/model/components/addTableName.vue +++ b/src/views/dmx/model/components/addTableName.vue @@ -29,6 +29,7 @@ v-for="(item, index) in modalList" :value="index" :label="index" + :disabled="item.added" ></a-option> </a-select> </a-form-item> diff --git a/src/views/dmx/model/index.vue b/src/views/dmx/model/index.vue index 465a8be..6c3bde1 100644 --- a/src/views/dmx/model/index.vue +++ b/src/views/dmx/model/index.vue @@ -105,12 +105,12 @@ <a-button @click="handleDeleteModel(list)"> 鍒犻櫎 </a-button> - <a-button + <!-- <a-button type="primary" @click="handleEditModel(list)" > 缂栬緫 - </a-button> + </a-button> --> <!-- <editModel></editModel> --> </a-space> @@ -131,7 +131,11 @@ /> </div> --> <div> - <a-button type="primary" @click="handleAddModel"> + <a-button + type="primary" + @click="handleAddModel" + :disabled="addBtn" + > <template #icon> <icon-plus /> </template> @@ -174,6 +178,7 @@ modelmyLlms, deleteLlm, deleteLlmFactory, + getFactoryDetail, } from '@/api/model'; import { Modal, Message } from '@arco-design/web-vue'; import { userModelState } from '@/store'; @@ -182,6 +187,7 @@ const modelStore = userModelState(); let count = 5; + const addBtn = ref(false); const activeKey = ref(1); const data = ref([ { @@ -212,8 +218,9 @@ const modalList = ref({}); const tabKey = ref('key'); - const changeTabs = (val) => { + const changeTabs = async (val) => { tabKey.value = val; + await getFactory(); }; const httpUrl = modelStore.hrefUrl; @@ -332,12 +339,15 @@ modalList.value = res.data; 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(); }; queryModel(); //杩斿洖婊¤冻鏉′欢鐨勫璞� const filterObject = (obj, threshold) => { return Object.keys(obj) - .filter((key) => obj[key] > threshold) + .filter((key) => obj[key].added == 1) .reduce((result, key) => { result[key] = obj[key]; return result; @@ -348,6 +358,18 @@ queryModel(); // 杩欓噷鎵ц闇�瑕佺殑鎿嶄綔 }; + + const getFactory = async () => { + const { data } = await getFactoryDetail({ + factory_name: tabKey.value, + }); + + if (data.set_type == 2) { + addBtn.value = true; + } else { + addBtn.value = false; + } + }; </script> <script lang="ts"> -- Gitblit v1.8.0