|
@@ -49,22 +49,186 @@
|
|
|
</div>
|
|
|
<template v-if="state.tab == 1"></template>
|
|
|
<template v-else-if="state.tab == 2">
|
|
|
+ <CzrDialogDrag
|
|
|
+ v-model:show="state.logs.showFilter"
|
|
|
+ title="高级查询"
|
|
|
+ :show-submit="false"
|
|
|
+ :show-close="false"
|
|
|
+ class="w-[500px]"
|
|
|
+ :layout="{ mouse: true }"
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <CzrForm>
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="消息ID"
|
|
|
+ v-model:param="state.logs.texts.p1"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="会话ID"
|
|
|
+ v-model:param="state.logs.texts.p2"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="用户ID"
|
|
|
+ v-model:param="state.logs.texts.p3"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="意图识别"
|
|
|
+ v-model:param="state.logs.texts.p4"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="输入"
|
|
|
+ v-model:param="state.logs.texts.p5"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="24"
|
|
|
+ label="输出"
|
|
|
+ v-model:param="state.logs.texts.p6"
|
|
|
+ placeholder="输入内容以查询"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="13"
|
|
|
+ label="输入token"
|
|
|
+ v-model:param="state.logs.texts.p7"
|
|
|
+ link="number"
|
|
|
+ placeholder="token数量"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="11"
|
|
|
+ label="到"
|
|
|
+ label-width="40px"
|
|
|
+ v-model:param="state.logs.texts.p8"
|
|
|
+ link="number"
|
|
|
+ placeholder="token数量"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="13"
|
|
|
+ label="输出token"
|
|
|
+ v-model:param="state.logs.texts.p9"
|
|
|
+ link="number"
|
|
|
+ placeholder="token数量"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="11"
|
|
|
+ label="到"
|
|
|
+ label-width="40px"
|
|
|
+ v-model:param="state.logs.texts.p10"
|
|
|
+ link="number"
|
|
|
+ placeholder="token数量"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="13"
|
|
|
+ label="整体耗时(ms)"
|
|
|
+ v-model:param="state.logs.texts.p11"
|
|
|
+ link="number"
|
|
|
+ placeholder="输入耗时"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ :span="11"
|
|
|
+ label="到"
|
|
|
+ label-width="40px"
|
|
|
+ v-model:param="state.logs.texts.p12"
|
|
|
+ link="number"
|
|
|
+ placeholder="输入耗时"
|
|
|
+ />
|
|
|
+ </CzrForm>
|
|
|
+ </div>
|
|
|
+ </CzrDialogDrag>
|
|
|
<div class="log flex-1">
|
|
|
<CzrContent
|
|
|
- v-model:tableHead="state.query.head"
|
|
|
+ v-model:tableHead="state.logs.query.head"
|
|
|
@handleReset="onReset"
|
|
|
@handleSearch="onSearch"
|
|
|
>
|
|
|
+ <template #tableTitle>
|
|
|
+ <div class="flex flex-1 gap-2">
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="10%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.query.form.dateType"
|
|
|
+ link="select"
|
|
|
+ :options="[
|
|
|
+ { label: '近7天', value: 1 },
|
|
|
+ { label: '近30天', value: 2 },
|
|
|
+ { label: '近90天', value: 3 },
|
|
|
+ { label: '近180天', value: 4 },
|
|
|
+ ]"
|
|
|
+ placeholder="应用状态"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="10%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.query.form.p1"
|
|
|
+ link="select"
|
|
|
+ :options="[]"
|
|
|
+ placeholder="反馈"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="10%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.query.form.p1"
|
|
|
+ link="select"
|
|
|
+ :options="[]"
|
|
|
+ placeholder="回答效果"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="10%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.query.form.p1"
|
|
|
+ link="select"
|
|
|
+ :options="[]"
|
|
|
+ placeholder="渠道"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="24%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.query.form.p2"
|
|
|
+ link="datetime"
|
|
|
+ type="datetimerange"
|
|
|
+ placeholder="请求时间"
|
|
|
+ />
|
|
|
+ <CzrFormColumn
|
|
|
+ class="__czr-table-form-column"
|
|
|
+ width="15%"
|
|
|
+ label-width="0px"
|
|
|
+ v-model:param="state.logs.texts.keyword"
|
|
|
+ placeholder="输入关键词以检索"
|
|
|
+ :prefix-icon="Search"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template #buttons>
|
|
|
+ <div
|
|
|
+ class="__hover flex h-9 w-9 items-center justify-center rounded-sm bg-[var(--czr-main-color)]"
|
|
|
+ @click="state.logs.showFilter = true"
|
|
|
+ >
|
|
|
+ <SvgIcon name="filter" color="#ffffff" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
<template #table>
|
|
|
<CzrTable
|
|
|
- v-loading="state.query.loading"
|
|
|
- :data="state.query.result.data"
|
|
|
- :head="state.query.head"
|
|
|
- :total="state.query.result.total"
|
|
|
- :page="state.query.page.pageNum"
|
|
|
- :pageSize="state.query.page.pageSize"
|
|
|
+ v-loading="state.logs.query.loading"
|
|
|
+ :data="state.logs.query.result.data"
|
|
|
+ :head="state.logs.query.head"
|
|
|
+ :total="state.logs.query.result.total"
|
|
|
+ :page="state.logs.query.page.pageNum"
|
|
|
+ :pageSize="state.logs.query.page.pageSize"
|
|
|
@handlePage="onPage"
|
|
|
- v-model:selected="state.query.selected"
|
|
|
+ v-model:selected="state.logs.query.selected"
|
|
|
>
|
|
|
</CzrTable>
|
|
|
</template>
|
|
@@ -94,6 +258,9 @@ import { useDictionaryStore } from '@/stores'
|
|
|
import { YMDHms } from '@/utils/czr-util'
|
|
|
import { debounce } from 'lodash'
|
|
|
import { documentGetDocumentsByPage } from '@/api/modules/knowledge/document'
|
|
|
+import { Search } from '@element-plus/icons-vue'
|
|
|
+import CzrDialogDrag from '@/components/czr-ui/CzrDialogDrag.vue'
|
|
|
+import CzrContent from '@/components/czr-ui/CzrContent.vue'
|
|
|
|
|
|
const DictionaryStore = useDictionaryStore()
|
|
|
const route = useRoute()
|
|
@@ -105,46 +272,48 @@ const state: any = reactive({
|
|
|
ID: route.params.id,
|
|
|
tab: 2,
|
|
|
detail: {},
|
|
|
- texts: {
|
|
|
- keyword: '',
|
|
|
- },
|
|
|
- query: {
|
|
|
- init: false,
|
|
|
- loading: false,
|
|
|
- head: [
|
|
|
- { value: 'p1', label: '消息ID', show: false },
|
|
|
- { value: 'p1', label: '会话ID', show: false },
|
|
|
- { value: 'p1', label: '用户ID', show: false },
|
|
|
- { value: 'p1', label: '意图识别', show: true },
|
|
|
- { value: 'p1', label: '输入', show: true },
|
|
|
- { value: 'p1', label: '输出', show: true },
|
|
|
- { value: 'p1', label: '输入Token', show: true },
|
|
|
- { value: 'p1', label: '输出Token', show: true },
|
|
|
- { value: 'p1', label: '请求时间', show: true },
|
|
|
- { value: 'p1', label: '整体耗时', show: true },
|
|
|
- { value: 'p1', label: '反馈', show: true },
|
|
|
- { value: 'p1', label: '回答效果', show: true },
|
|
|
- { value: 'p1', label: '渠道', show: true },
|
|
|
- {
|
|
|
- value: 'caozuo',
|
|
|
- label: '操作',
|
|
|
- show: true,
|
|
|
- width: 100,
|
|
|
- fixed: 'right',
|
|
|
- popover: false,
|
|
|
+ analysis: {},
|
|
|
+ logs: {
|
|
|
+ texts: {},
|
|
|
+ query: {
|
|
|
+ init: false,
|
|
|
+ loading: false,
|
|
|
+ head: [
|
|
|
+ { value: 'p1', label: '消息ID', show: false },
|
|
|
+ { value: 'p1', label: '会话ID', show: false },
|
|
|
+ { value: 'p1', label: '用户ID', show: false },
|
|
|
+ { value: 'p1', label: '意图识别', show: true },
|
|
|
+ { value: 'p1', label: '输入', show: true },
|
|
|
+ { value: 'p1', label: '输出', show: true },
|
|
|
+ { value: 'p1', label: '输入token', show: true },
|
|
|
+ { value: 'p1', label: '输出token', show: true },
|
|
|
+ { value: 'p1', label: '请求时间', show: true },
|
|
|
+ { value: 'p1', label: '整体耗时', show: true },
|
|
|
+ { value: 'p1', label: '反馈', show: true },
|
|
|
+ { value: 'p1', label: '回答效果', show: true },
|
|
|
+ { value: 'p1', label: '渠道', show: true },
|
|
|
+ {
|
|
|
+ value: 'caozuo',
|
|
|
+ label: '操作',
|
|
|
+ show: true,
|
|
|
+ width: 100,
|
|
|
+ fixed: 'right',
|
|
|
+ popover: false,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ page: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 20,
|
|
|
},
|
|
|
- ],
|
|
|
- page: {
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 20,
|
|
|
- },
|
|
|
- form: {},
|
|
|
- formReal: {},
|
|
|
- result: {
|
|
|
- total: 0,
|
|
|
- data: [],
|
|
|
+ form: {},
|
|
|
+ formReal: {},
|
|
|
+ result: {
|
|
|
+ total: 0,
|
|
|
+ data: [],
|
|
|
+ },
|
|
|
+ selected: [],
|
|
|
},
|
|
|
- selected: [],
|
|
|
+ showFilter: false,
|
|
|
},
|
|
|
})
|
|
|
const initDetail = () => {
|
|
@@ -185,19 +354,22 @@ const initStatistic = () => {
|
|
|
// }, 1000)
|
|
|
}
|
|
|
|
|
|
-const setTexts = debounce((v) => {
|
|
|
- // state.query.form[k] = v
|
|
|
+const setTexts = debounce((obj) => {
|
|
|
+ Object.entries(obj).forEach(([k, v]) => {
|
|
|
+ state.logs.query.form[k] = v
|
|
|
+ })
|
|
|
}, 1000)
|
|
|
watch(
|
|
|
- () => state.texts,
|
|
|
+ () => state.logs.texts,
|
|
|
(n) => {
|
|
|
setTexts(n)
|
|
|
},
|
|
|
+ { deep: true },
|
|
|
)
|
|
|
watch(
|
|
|
- () => state.query.form,
|
|
|
+ () => state.logs.query.form,
|
|
|
(n) => {
|
|
|
- if (state.query.init) {
|
|
|
+ if (state.logs.query.init) {
|
|
|
onSearch()
|
|
|
}
|
|
|
},
|
|
@@ -205,49 +377,55 @@ watch(
|
|
|
)
|
|
|
const onPage = (pageNum, pageSize) => {
|
|
|
setTimeout(() => {
|
|
|
- state.query.init = true
|
|
|
+ state.logs.query.init = true
|
|
|
}, 100)
|
|
|
- state.query.page = {
|
|
|
+ state.logs.query.page = {
|
|
|
pageNum: pageNum,
|
|
|
pageSize: pageSize,
|
|
|
}
|
|
|
const params = {
|
|
|
- page: state.query.page.pageNum,
|
|
|
- size: state.query.page.pageSize,
|
|
|
+ page: state.logs.query.page.pageNum,
|
|
|
+ size: state.logs.query.page.pageSize,
|
|
|
}
|
|
|
// 添加表单参数
|
|
|
- for (const [k, v] of Object.entries(state.query.formReal)) {
|
|
|
+ for (const [k, v] of Object.entries(state.logs.query.formReal)) {
|
|
|
if (proxy.$czrUtil.isValue(v)) {
|
|
|
params[k] = v
|
|
|
}
|
|
|
}
|
|
|
- state.query.loading = true
|
|
|
- documentGetDocumentsByPage(params)
|
|
|
- .then(({ data }: any) => {
|
|
|
- state.query.result.total = data.totalElements
|
|
|
- state.query.result.data = data.content
|
|
|
- })
|
|
|
- .catch(() => {})
|
|
|
- .finally(() => {
|
|
|
- state.query.loading = false
|
|
|
- })
|
|
|
+ console.log(params)
|
|
|
+ // state.logs.query.loading = true
|
|
|
+ // documentGetDocumentsByPage(params)
|
|
|
+ // .then(({ data }: any) => {
|
|
|
+ // state.logs.query.result.total = data.totalElements
|
|
|
+ // state.logs.query.result.data = data.content
|
|
|
+ // })
|
|
|
+ // .catch(() => {})
|
|
|
+ // .finally(() => {
|
|
|
+ // state.logs.query.loading = false
|
|
|
+ // })
|
|
|
}
|
|
|
const onSearch = () => {
|
|
|
- state.query.selected = []
|
|
|
- state.query.formReal = JSON.parse(JSON.stringify(state.query.form))
|
|
|
- onPage(1, state.query.page.pageSize)
|
|
|
+ state.logs.query.selected = []
|
|
|
+ state.logs.query.formReal = JSON.parse(JSON.stringify(state.logs.query.form))
|
|
|
+ onPage(1, state.logs.query.page.pageSize)
|
|
|
}
|
|
|
const onReset = () => {
|
|
|
- state.query.page = {
|
|
|
+ state.logs.query.page = {
|
|
|
pageNum: 1,
|
|
|
pageSize: 20,
|
|
|
}
|
|
|
- state.query.form = {}
|
|
|
+ state.logs.query.form = {
|
|
|
+ dateType: 1,
|
|
|
+ }
|
|
|
+ state.logs.texts = {}
|
|
|
+ state.logs.query.init = false
|
|
|
onSearch()
|
|
|
}
|
|
|
onMounted(() => {
|
|
|
initDictionary()
|
|
|
initDetail()
|
|
|
+ onReset()
|
|
|
})
|
|
|
const initDictionary = () => {
|
|
|
// DictionaryStore.initModelProvides()
|