Skip to content

Commit 8e5662c

Browse files
style: Style adaptation for mobile layout
1 parent b91402d commit 8e5662c

File tree

2 files changed

+46
-17
lines changed

2 files changed

+46
-17
lines changed

frontend/src/utils/utils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,15 @@ export const cleanPlatformFlag = () => {
238238
wsCache.delete(platformKey)
239239
return false
240240
}
241+
export function isTablet() {
242+
const userAgent = navigator.userAgent
243+
const tabletRegex = /iPad|Silk|Galaxy Tab|PlayBook|BlackBerry|(tablet|ipad|playbook)/i
244+
return tabletRegex.test(userAgent)
245+
}
246+
export function isMobile() {
247+
return (
248+
navigator.userAgent.match(
249+
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
250+
) && !isTablet()
251+
)
252+
}

frontend/src/views/chat/index.vue

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
:width="280"
55
placement="bottom-start"
66
popper-class="popover-chat_history popover-chat_history_small"
7+
:disabled="isPhone"
78
>
89
<template #reference>
910
<el-icon
@@ -67,6 +68,7 @@
6768
placement="bottom-start"
6869
popper-class="popover-chat_history"
6970
:popper-style="{ ...defaultFloatPopoverStyle }"
71+
:disabled="isPhone"
7072
>
7173
<template #reference>
7274
<el-button link type="primary" class="icon-btn" @click="showSideBar">
@@ -138,8 +140,8 @@
138140
<div class="welcome-content">
139141
<template v-if="isCompletePage">
140142
<div class="greeting">
141-
<img height="32" width="32" v-if="loginBg" :src="loginBg" alt="" />
142-
<el-icon size="32" v-else
143+
<img v-if="loginBg" height="32" width="32" :src="loginBg" alt="" />
144+
<el-icon v-else size="32"
143145
><custom_small v-if="appearanceStore.themeColor !== 'default'"></custom_small>
144146
<LOGO_fold v-else></LOGO_fold
145147
></el-icon>
@@ -185,13 +187,13 @@
185187
<div v-else-if="computedMessages.length == 0 && loading" class="welcome-content-block">
186188
<div style="display: flex; align-items: center; height: 30px">
187189
<img
190+
v-if="logoAssistant || loginBg"
188191
height="30"
189192
width="30"
190-
v-if="logoAssistant || loginBg"
191193
:src="logoAssistant ? logoAssistant : loginBg"
192194
alt=""
193195
/>
194-
<el-icon size="30" v-else
196+
<el-icon v-else size="30"
195197
><custom_small v-if="appearanceStore.themeColor !== 'default'"></custom_small>
196198
<LOGO_fold v-else></LOGO_fold
197199
></el-icon>
@@ -214,7 +216,7 @@
214216
>
215217
<template v-for="(message, _index) in computedMessages" :key="_index">
216218
<ChatRow
217-
:logoAssistant="logoAssistant"
219+
:logo-assistant="logoAssistant"
218220
:current-chat="currentChat"
219221
:msg="message"
220222
:hide-avatar="message.first_chat"
@@ -456,7 +458,7 @@ import { onClickOutside } from '@vueuse/core'
456458
import { useAppearanceStoreWithOut } from '@/stores/appearance'
457459
import { useUserStore } from '@/stores/user'
458460
import { debounce } from 'lodash-es'
459-
461+
import { isMobile } from '@/utils/utils'
460462
import router from '@/router'
461463
const userStore = useUserStore()
462464
const props = defineProps<{
@@ -486,7 +488,9 @@ const customName = computed(() => {
486488
return ''
487489
})
488490
const { t } = useI18n()
489-
491+
const isPhone = computed(() => {
492+
return isMobile()
493+
})
490494
const inputMessage = ref('')
491495
492496
const chatListRef = ref()
@@ -675,14 +679,18 @@ function onChatRenamed(chat: Chat) {
675679
676680
const chatListSideBarShow = ref<boolean>(true)
677681
function hideSideBar() {
678-
if (!isCompletePage.value && !props.pageEmbedded) {
682+
if ((!isCompletePage.value && !props.pageEmbedded) || isPhone.value) {
679683
floatPopoverVisible.value = false
680684
return
681685
}
682686
chatListSideBarShow.value = false
683687
}
684688
685689
function showSideBar() {
690+
if (isPhone.value) {
691+
showFloatPopover()
692+
return
693+
}
686694
chatListSideBarShow.value = true
687695
}
688696
@@ -991,15 +999,7 @@ const showFloatPopover = () => {
991999
floatPopoverVisible.value = true
9921000
}
9931001
}
994-
const assistantPrepareInit = () => {
995-
if (isCompletePage.value || props.pageEmbedded) {
996-
return
997-
}
998-
Object.assign(defaultFloatPopoverStyle.value, {
999-
height: '100% !important',
1000-
inset: '0px auto auto 0px',
1001-
})
1002-
goEmpty()
1002+
const registerClickOutside = () => {
10031003
onClickOutside(floatPopoverRef, (event: any) => {
10041004
if (floatPopoverVisible.value) {
10051005
let parentElement: any = event.target
@@ -1017,6 +1017,17 @@ const assistantPrepareInit = () => {
10171017
}
10181018
})
10191019
}
1020+
const assistantPrepareInit = () => {
1021+
if (isCompletePage.value || props.pageEmbedded) {
1022+
return
1023+
}
1024+
Object.assign(defaultFloatPopoverStyle.value, {
1025+
height: '100% !important',
1026+
inset: '0px auto auto 0px',
1027+
})
1028+
goEmpty()
1029+
registerClickOutside()
1030+
}
10201031
defineExpose({
10211032
createNewChat,
10221033
showFloatPopover,
@@ -1036,6 +1047,12 @@ function jumpCreatChat() {
10361047
}
10371048
10381049
onMounted(() => {
1050+
if (isPhone.value) {
1051+
chatListSideBarShow.value = false
1052+
if (props.pageEmbedded) {
1053+
registerClickOutside()
1054+
}
1055+
}
10391056
getChatList(jumpCreatChat)
10401057
assistantPrepareInit()
10411058
})

0 commit comments

Comments
 (0)