<template>
|
<a-card
|
class="general-card chat-panel"
|
:title="$t('monitor.title.chatPanel')"
|
:bordered="false"
|
:header-style="{ paddingBottom: '0' }"
|
:body-style="{
|
height: '100%',
|
paddingTop: '16px',
|
display: 'flex',
|
flexFlow: 'column',
|
}"
|
>
|
<a-space :size="8">
|
<a-select style="width: 86px" default-value="all">
|
<a-option value="all">
|
{{ $t('monitor.chat.options.all') }}
|
</a-option>
|
</a-select>
|
<a-input-search
|
:placeholder="$t('monitor.chat.placeholder.searchCategory')"
|
/>
|
<a-button type="text">
|
<icon-download />
|
</a-button>
|
</a-space>
|
<div class="chat-panel-content">
|
<a-spin :loading="loading" style="width: 100%">
|
<ChatList :render-list="chatData" />
|
</a-spin>
|
</div>
|
<div class="chat-panel-footer">
|
<a-space :size="8">
|
<a-Input>
|
<template #suffix>
|
<icon-face-smile-fill />
|
</template>
|
</a-Input>
|
<a-button type="primary">{{ $t('monitor.chat.update') }}</a-button>
|
</a-space>
|
</div>
|
</a-card>
|
</template>
|
|
<script lang="ts" setup>
|
import { ref } from 'vue';
|
import { queryChatList, ChatRecord } from '@/api/message';
|
import useLoading from '@/hooks/loading';
|
import ChatList from './chat-list.vue';
|
|
const { loading, setLoading } = useLoading(true);
|
const chatData = ref<ChatRecord[]>([]);
|
const fetchData = async () => {
|
try {
|
const { data } = await queryChatList();
|
chatData.value = data;
|
} catch (err) {
|
// you can report use errorHandler or other
|
} finally {
|
setLoading(false);
|
}
|
};
|
fetchData();
|
</script>
|
|
<style scoped lang="less">
|
.chat-panel {
|
display: flex;
|
flex-direction: column;
|
height: 100%;
|
// padding: 20px;
|
background-color: var(--color-bg-2);
|
|
&-content {
|
flex: 1;
|
margin: 20px 0;
|
}
|
}
|
</style>
|