Skip to content

Commit 238821e

Browse files
feat: chat log
1 parent e9527bd commit 238821e

File tree

9 files changed

+237
-144
lines changed

9 files changed

+237
-144
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<template>
2+
<el-card
3+
shadow="hover"
4+
class="card-checkbox cursor"
5+
:class="modelValue.includes(toModelValue) ? 'active' : ''"
6+
@click="checked"
7+
>
8+
<div class="flex-between">
9+
<div class="flex align-center">
10+
<slot name="icon">
11+
<KnowledgeIcon :type="data.type" />
12+
</slot>
13+
<slot></slot>
14+
</div>
15+
<el-checkbox v-bind:modelValue="modelValue.includes(toModelValue)" @change="checkboxChange">
16+
</el-checkbox>
17+
</div>
18+
</el-card>
19+
</template>
20+
<script setup lang="ts">
21+
import KnowledgeIcon from '@/views/knowledge/component/KnowledgeIcon.vue'
22+
import { computed } from 'vue'
23+
defineOptions({ name: 'CardCheckbox' })
24+
const props = defineProps<{
25+
data: any
26+
27+
modelValue: Array<any>
28+
29+
valueField?: string
30+
}>()
31+
32+
const toModelValue = computed(() => (props.valueField ? props.data[props.valueField] : props.data))
33+
34+
// const isChecked = computed({
35+
// get: () => props.modelValue.includes(toModelValue.value)),
36+
// set: (val) => val
37+
// })
38+
39+
const emit = defineEmits(['update:modelValue', 'change'])
40+
41+
const checked = () => {
42+
const value = props.modelValue ? props.modelValue : []
43+
if (props.modelValue.includes(toModelValue.value)) {
44+
emit(
45+
'update:modelValue',
46+
value.filter((item) => item !== toModelValue.value),
47+
)
48+
} else {
49+
emit('update:modelValue', [...value, toModelValue.value])
50+
}
51+
checkboxChange()
52+
}
53+
54+
function checkboxChange() {
55+
emit('change')
56+
}
57+
</script>
58+
<style lang="scss">
59+
.card-checkbox {
60+
&.active {
61+
border: 1px solid var(--el-color-primary);
62+
}
63+
input.checkbox[type='checkbox'] {
64+
-webkit-appearance: none;
65+
-moz-appearance: none;
66+
appearance: none;
67+
height: 14px;
68+
width: 14px;
69+
position: relative;
70+
71+
&::after {
72+
position: absolute;
73+
top: 0;
74+
background-color: white;
75+
color: #000;
76+
height: 13px;
77+
width: 13px;
78+
visibility: visible;
79+
text-align: center;
80+
box-sizing: border-box;
81+
border: var(--el-border);
82+
border-radius: var(--el-border-radius-small);
83+
box-sizing: content-box;
84+
content: '';
85+
}
86+
87+
&:checked::after {
88+
content: '';
89+
color: #ffffff;
90+
border-color: var(--el-color-primary);
91+
background: var(--el-color-primary);
92+
}
93+
}
94+
}
95+
</style>

ui/src/components/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import MdEditor from './markdown/MdEditor.vue'
2020
import MdPreview from './markdown/MdPreview.vue'
2121
import MdEditorMagnify from './markdown/MdEditorMagnify.vue'
2222
import TagEllipsis from './tag-ellipsis/index.vue'
23+
import CardCheckbox from './card-checkbox/index.vue'
2324
export default {
2425
install(app: App) {
2526
app.component('LogoFull', LogoFull)
@@ -43,5 +44,6 @@ export default {
4344
app.component('MdEditor', MdEditor)
4445
app.component('MdEditorMagnify', MdEditorMagnify)
4546
app.component('TagEllipsis', TagEllipsis)
47+
app.component('CardCheckbox', CardCheckbox)
4648
},
4749
}

ui/src/router/modules/application-detail.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const ApplicationDetailRouter = {
6464
icon: 'app-document',
6565
iconActive: 'app-document-active',
6666
title: 'views.chatLog.title',
67-
active: 'log',
67+
active: 'chat-log',
6868
parentPath: '/application/:id/:type',
6969
parentName: 'ApplicationDetail'
7070
},

ui/src/stores/modules/application.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const useApplicationStore = defineStore('application', {
3535
})
3636
},
3737

38-
async asyncGetApplicationDataset(id: string, loading?: Ref<boolean>) {
38+
async asyncGetApplicationKnowledge(id: string, loading?: Ref<boolean>) {
3939
return new Promise((resolve, reject) => {
4040
applicationApi
4141
.getApplicationDataset(id, loading)

ui/src/views/application-overview/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,8 @@ function mapToUrlParams(map: any[]) {
424424
}
425425
426426
onMounted(() => {
427-
getDetail()
428-
getAccessToken()
427+
// getDetail()
428+
// getAccessToken()
429429
// changeDayHandle(history_day.value)
430430
})
431431
</script>

ui/src/views/application/component/AddDatasetDialog.vue renamed to ui/src/views/application/component/AddKnowledgeDialog.vue

File renamed without changes.

ui/src/views/application/index.vue

Lines changed: 118 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -89,118 +89,127 @@
8989
</el-dropdown>
9090
</div>
9191
</template>
92-
<div>
93-
<el-row v-if="applicationList.length > 0" :gutter="15">
94-
<template v-for="(item, index) in applicationList" :key="index">
95-
<el-col
96-
v-if="item.resource_type === 'folder'"
97-
:xs="24"
98-
:sm="12"
99-
:md="12"
100-
:lg="8"
101-
:xl="6"
102-
class="mb-16"
103-
>
104-
<CardBox
105-
:title="item.name"
106-
:description="item.desc || $t('common.noData')"
107-
class="cursor"
108-
>
109-
<template #icon>
110-
<el-avatar shape="square" :size="32" style="background: none">
111-
<AppIcon iconName="app-folder" style="font-size: 32px"></AppIcon>
112-
</el-avatar>
113-
</template>
114-
<template #subTitle>
115-
<el-text class="color-secondary lighter" size="small">
116-
{{ $t('common.creator') }}: {{ item.username }}
117-
</el-text>
118-
</template>
119-
</CardBox>
120-
</el-col>
121-
<el-col v-else :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb-16">
122-
<CardBox
123-
:title="item.name"
124-
:description="item.desc"
125-
class="cursor"
126-
@click="router.push({ path: `/application/${item.id}/${item.type}/overview` })"
92+
<div v-loading.fullscreen.lock="paginationConfig.current_page === 1 && loading">
93+
<InfiniteScroll
94+
:size="applicationList.length"
95+
:total="paginationConfig.total"
96+
:page_size="paginationConfig.page_size"
97+
v-model:current_page="paginationConfig.current_page"
98+
@load="getList"
99+
:loading="loading"
100+
>
101+
<el-row v-if="applicationList.length > 0" :gutter="15">
102+
<template v-for="(item, index) in applicationList" :key="index">
103+
<el-col
104+
v-if="item.resource_type === 'folder'"
105+
:xs="24"
106+
:sm="12"
107+
:md="12"
108+
:lg="8"
109+
:xl="6"
110+
class="mb-16"
127111
>
128-
<template #icon>
129-
<LogoIcon height="28px" style="width: 28px; height: 28px; display: block" />
130-
</template>
131-
<template #subTitle>
132-
<el-text class="color-secondary" size="small">
133-
<auto-tooltip :content="item.username">
112+
<CardBox
113+
:title="item.name"
114+
:description="item.desc || $t('common.noData')"
115+
class="cursor"
116+
>
117+
<template #icon>
118+
<el-avatar shape="square" :size="32" style="background: none">
119+
<AppIcon iconName="app-folder" style="font-size: 32px"></AppIcon>
120+
</el-avatar>
121+
</template>
122+
<template #subTitle>
123+
<el-text class="color-secondary lighter" size="small">
134124
{{ $t('common.creator') }}: {{ item.username }}
135-
</auto-tooltip>
136-
</el-text>
137-
</template>
138-
<template #tag>
139-
<el-tag type="warning" v-if="isWorkFlow(item.type)" style="height: 22px">
140-
{{ $t('views.application.workflow') }}
141-
</el-tag>
142-
<el-tag class="blue-tag" v-else style="height: 22px">
143-
{{ $t('views.application.simple') }}
144-
</el-tag>
145-
</template>
125+
</el-text>
126+
</template>
127+
</CardBox>
128+
</el-col>
129+
<el-col v-else :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb-16">
130+
<CardBox
131+
:title="item.name"
132+
:description="item.desc"
133+
class="cursor"
134+
@click="router.push({ path: `/application/${item.id}/${item.type}/overview` })"
135+
>
136+
<template #icon>
137+
<LogoIcon height="28px" style="width: 28px; height: 28px; display: block" />
138+
</template>
139+
<template #subTitle>
140+
<el-text class="color-secondary" size="small">
141+
<auto-tooltip :content="item.username">
142+
{{ $t('common.creator') }}: {{ item.username }}
143+
</auto-tooltip>
144+
</el-text>
145+
</template>
146+
<template #tag>
147+
<el-tag type="warning" v-if="isWorkFlow(item.type)" style="height: 22px">
148+
{{ $t('views.application.workflow') }}
149+
</el-tag>
150+
<el-tag class="blue-tag" v-else style="height: 22px">
151+
{{ $t('views.application.simple') }}
152+
</el-tag>
153+
</template>
146154

147-
<template #footer>
148-
<div v-if="item.is_publish" class="flex align-center">
149-
<el-icon class="color-success mr-8" style="font-size: 16px">
150-
<SuccessFilled />
151-
</el-icon>
152-
<span class="color-secondary">
153-
{{ $t('views.application.status.published') }}
154-
</span>
155-
<el-divider direction="vertical" />
156-
<el-icon class="mr-8"><Clock /></el-icon>
157-
<span class="color-secondary">{{ dateFormat(item.update_time) }}</span>
158-
</div>
159-
<div v-else class="flex align-center">
160-
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
161-
<span class="color-secondary">
162-
{{ $t('views.application.status.unpublished') }}
163-
</span>
164-
</div>
165-
</template>
166-
<template #mouseEnter>
167-
<div @click.stop>
168-
<el-dropdown trigger="click">
169-
<el-button text @click.stop>
170-
<el-icon>
171-
<MoreFilled />
172-
</el-icon>
173-
</el-button>
174-
<template #dropdown>
175-
<el-dropdown-menu>
176-
<el-dropdown-item @click.stop="getAccessToken(item.id)">
177-
<AppIcon iconName="app-create-chat"></AppIcon>
178-
{{ $t('views.application.operation.toChat') }}
179-
</el-dropdown-item>
180-
<el-dropdown-item @click.stop="settingApplication(item)">
181-
<el-icon><Setting /></el-icon>
182-
{{ $t('common.setting') }}
183-
</el-dropdown-item>
184-
<el-dropdown-item divided @click.stop="exportApplication(item)">
185-
<AppIcon iconName="app-export"></AppIcon>
186-
{{ $t('common.export') }}
187-
</el-dropdown-item>
188-
<el-dropdown-item
189-
divided
190-
icon="Delete"
191-
@click.stop="deleteApplication(item)"
192-
>{{ $t('common.delete') }}</el-dropdown-item
193-
>
194-
</el-dropdown-menu>
195-
</template>
196-
</el-dropdown>
197-
</div>
198-
</template>
199-
</CardBox>
200-
</el-col>
201-
</template>
202-
</el-row>
203-
<el-empty :description="$t('common.noData')" v-else />
155+
<template #footer>
156+
<div v-if="item.is_publish" class="flex align-center">
157+
<el-icon class="color-success mr-8" style="font-size: 16px">
158+
<SuccessFilled />
159+
</el-icon>
160+
<span class="color-secondary">
161+
{{ $t('views.application.status.published') }}
162+
</span>
163+
<el-divider direction="vertical" />
164+
<el-icon class="mr-8"><Clock /></el-icon>
165+
<span class="color-secondary">{{ dateFormat(item.update_time) }}</span>
166+
</div>
167+
<div v-else class="flex align-center">
168+
<AppIcon iconName="app-disabled" class="color-secondary mr-8"></AppIcon>
169+
<span class="color-secondary">
170+
{{ $t('views.application.status.unpublished') }}
171+
</span>
172+
</div>
173+
</template>
174+
<template #mouseEnter>
175+
<div @click.stop>
176+
<el-dropdown trigger="click">
177+
<el-button text @click.stop>
178+
<el-icon>
179+
<MoreFilled />
180+
</el-icon>
181+
</el-button>
182+
<template #dropdown>
183+
<el-dropdown-menu>
184+
<el-dropdown-item @click.stop="getAccessToken(item.id)">
185+
<AppIcon iconName="app-create-chat"></AppIcon>
186+
{{ $t('views.application.operation.toChat') }}
187+
</el-dropdown-item>
188+
<el-dropdown-item @click.stop="settingApplication(item)">
189+
<el-icon><Setting /></el-icon>
190+
{{ $t('common.setting') }}
191+
</el-dropdown-item>
192+
<el-dropdown-item divided @click.stop="exportApplication(item)">
193+
<AppIcon iconName="app-export"></AppIcon>
194+
{{ $t('common.export') }}
195+
</el-dropdown-item>
196+
<el-dropdown-item
197+
divided
198+
icon="Delete"
199+
@click.stop="deleteApplication(item)"
200+
>{{ $t('common.delete') }}</el-dropdown-item
201+
>
202+
</el-dropdown-menu>
203+
</template>
204+
</el-dropdown>
205+
</div>
206+
</template>
207+
</CardBox>
208+
</el-col>
209+
</template>
210+
</el-row>
211+
<el-empty :description="$t('common.noData')" v-else />
212+
</InfiniteScroll>
204213
</div>
205214
</ContentContainer>
206215
<CreateApplicationDialog ref="CreateApplicationDialogRef" />

0 commit comments

Comments
 (0)