123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <template>
- <div id="chat">
- <div id="contents">
- <div
- class="chat-item flex justify-start items-start"
- v-for="(i, index) in chatList"
- :key="index"
- >
- <div class="chat-msg">
- <!-- {{ user_info }} -->
- <!-- <span :class="{ my: i.UserId == user_info.UserId }" class="chat-name">
- {{ i.Nickname }}
- </span> -->
- <span class="chat-name" :class="{ my: isMe(i.UserId) }"> {{ i.Nickname }} </span>
- <span class="chat-content"> {{ i.text }}</span>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script setup lang="ts">
- // import { propTypes } from "/@/utils/propTypes";
- import { computed, watch } from 'vue';
- import { ChatContentType } from '/@/store/modules/rtc';
- import { propTypes } from '/@/utils/propTypes';
- const props = defineProps({
- currentUser: propTypes.string.def(''),
- chatList: {
- type: Array as PropType<ChatContentType[]>,
- default: () => [],
- },
- });
- const isMe = computed(() => (currentUser: string) => props.currentUser === currentUser);
- const chatAutoScroll = () => {
- let el = document.getElementById('chat');
- let client_h = document.getElementById('chat')?.clientHeight;
- let all = document.getElementById('contents')?.clientHeight;
- // console.log("chatAutoScroll", client_h, all);
- el?.scrollTo(0, (client_h || 0) + (all || 0));
- console.log('拉底');
- };
- watch(
- () => props.chatList,
- (_) => {
- setTimeout(chatAutoScroll, 100);
- },
- {
- deep: true,
- immediate: true,
- },
- );
- </script>
- <style scoped lang="scss">
- #chat {
- // width: 7.03rem;
- width: 50%;
- max-width: 4rem;
- max-height: 4.58rem;
- overflow: auto;
- position: fixed;
- left: 0.44rem;
- bottom: 2.83rem;
- .chat-item {
- text-align: left;
- }
- .chat-msg {
- width: auto;
- border-radius: 0.44rem;
- background: rgba(0, 0, 0, 0.3);
- // padding: 0.17rem 0.28rem;
- padding: 0.07rem 0.28rem;
- box-sizing: border-box;
- display: inline-block;
- // margin-bottom: 0.17rem;
- margin-bottom: 0.1rem;
- .chat-name {
- color: #70bbff;
- font-size: 0.28rem;
- &.my {
- color: #ff9a6a;
- }
- }
- .chat-content {
- color: #fff;
- font-size: 0.28rem;
- word-break: break-all;
- }
- }
- &::-webkit-scrollbar {
- display: none;
- }
- }
- </style>
|