|  | @@ -4,11 +4,14 @@ import { ElTag } from "element-plus";
 | 
	
		
			
				|  |  |  // import VirtualList from 'vue3-virtual-list'
 | 
	
		
			
				|  |  |  // import { RecycleScroller } from 'vue-virtual-scroller'
 | 
	
		
			
				|  |  |  import styles from './index.module.less'
 | 
	
		
			
				|  |  | +import request from '/src/helpers/request';
 | 
	
		
			
				|  |  |  import event, { LIVE_EVENT_MESSAGE } from '/src/components/live-broadcast/event';
 | 
	
		
			
				|  |  |  import { state } from '/src/state'
 | 
	
		
			
				|  |  |  import dayjs from 'dayjs';
 | 
	
		
			
				|  |  |  import Empty from "/src/components/empty";
 | 
	
		
			
				|  |  |  import runtime, * as RuntimeUtils from '/src/components/live-message/model/runtime'
 | 
	
		
			
				|  |  | +import runtimeCast, * as RuntimeUtilCast from "/src/components/live-broadcast/runtime";
 | 
	
		
			
				|  |  | +import { removeToken } from "/src/utils/auth";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    data() {
 | 
	
	
		
			
				|  | @@ -21,6 +24,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      this.loadingMessage = true
 | 
	
		
			
				|  |  |      event.on(LIVE_EVENT_MESSAGE["RC:TxtMsg"], this.onMessage);
 | 
	
		
			
				|  |  |      event.on(LIVE_EVENT_MESSAGE["RC:Chatroom:Like"], this.onLike)
 | 
	
		
			
				|  |  | +    event.on(LIVE_EVENT_MESSAGE["RC:ForcedOffline"], this.onForcedOffline)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      setTimeout(() => {
 | 
	
		
			
				|  |  |        this.loadingMessage = false;
 | 
	
	
		
			
				|  | @@ -32,6 +36,24 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      event.off(LIVE_EVENT_MESSAGE["RC:Chatroom:Like"], this.onLike);
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    methods: {
 | 
	
		
			
				|  |  | +    async onForcedOffline() {
 | 
	
		
			
				|  |  | +      // 强制退出登录
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        await request.post('/api-auth/exit', { data: {} });
 | 
	
		
			
				|  |  | +        RuntimeUtilCast.closeDevice('camera')
 | 
	
		
			
				|  |  | +        RuntimeUtilCast.closeDevice('microphone')
 | 
	
		
			
				|  |  | +        state.user = null
 | 
	
		
			
				|  |  | +        removeToken();
 | 
	
		
			
				|  |  | +        (this as any).$router.push({
 | 
	
		
			
				|  |  | +          path: '/login',
 | 
	
		
			
				|  |  | +          query: {
 | 
	
		
			
				|  |  | +            ...this.$route.query
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        // TODO: handle error
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      onLike(value: any) {
 | 
	
		
			
				|  |  |        if (value && value.user) {
 | 
	
		
			
				|  |  |          const sendTime = dayjs(value.$EventMessage.sentTime || new Date()).format('HH:mm:ss')
 | 
	
	
		
			
				|  | @@ -97,7 +119,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  |          )) : (this.loadingMessage ? <div class={styles.loadingStyle}>
 | 
	
		
			
				|  |  |            <div class="el-loading-mask" style="background-color: rgba(0, 0, 0, 0.8);"><div class="el-loading-spinner"><svg class="circular" viewBox="25 25 50 50"><circle class="path" cx="50" cy="50" r="20" fill="none"></circle></svg></div></div>
 | 
	
		
			
				|  |  | -          </div>: <Empty style={{ paddingTop: '120px' }} text="暂无学员互动!" icon="noData-no-message" />)}
 | 
	
		
			
				|  |  | +        </div> : <Empty style={{ paddingTop: '120px' }} text="暂无学员互动!" icon="noData-no-message" />)}
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      )
 | 
	
		
			
				|  |  |    }
 |