diff --git a/src/App.tsx b/src/App.tsx
index 3426a4f..412caa1 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -8,11 +8,11 @@ import Login from '@/page/Login/index'
import Meeting from '@/page/Meeting/index'
import NotFound from '@/page/NotFound/index'
import { storage } from '@/utils'
-import { message, Spin } from "antd";
+import { message, Modal, Spin } from "antd";
import JoinMeetingModal from "@/components/JoinMeetingModal";
import UpdateModal from "@/components/UpdateModal";
import * as CryptoJS from 'crypto-js';
-import { PostLogin } from "@/api/Login";
+import { GetCheckOnline, PostLogin } from "@/api/Login";
import { agora } from "@/utils/package/agora";
import QuitTips from "@/components/QuitTips";
import { GetLeave } from "@/api/Meeting";
@@ -22,6 +22,8 @@ import ChatSmallWindow from "@/page/Meeting/ChatSmallWindow";
import ChatBigWindow from "@/page/Meeting/ChatBigWindow";
import NoticeWindow from "@/page/Meeting/NoticeWindow";
import { getKeyOpenChildWindow, getTitle, setKeyOpenChildWindow, storageSeeting } from "./utils/package/public";
+import { ExclamationCircleFilled } from "@ant-design/icons";
+const { confirm } = Modal;
const fs = require('fs').promises;
const { exec } = require('child_process');
const App: React.FC = () => {
@@ -41,20 +43,44 @@ const App: React.FC = () => {
useEffect(() => {
let userInfo = JSON.parse(storage.getItem('user') as string)
let loginInfo = JSON.parse(storage.getItem('login') as string)
+ const login = () => {
+ PostLogin({
+ account: loginInfo.account,
+ pwd: CryptoJS.MD5(loginInfo.password).toString(CryptoJS.enc.Hex)
+ }).then(async (res) => {
+ if (res.code === 200) {
+ storage.setItem('user', JSON.stringify(res.data))
+ storage.setItem('userLogin', true)
+ toSrc('/home')
+ await window.electron.startSignalr(res.data)
+ } else {
+ toSrc('/login')
+ }
+ })
+ }
window.electron.setEnv(import.meta.env.VITE_ENV);
if (userInfo && !userInfo.isAnonymous) {
if (loginInfo && loginInfo.isAutoLogin) {
- PostLogin({
- account: loginInfo.account,
- pwd: CryptoJS.MD5(loginInfo.password).toString(CryptoJS.enc.Hex)
- }).then(async (res) => {
- if (res.code === 200) {
- storage.setItem('user', JSON.stringify(res.data))
- storage.setItem('userLogin', true)
- toSrc('/home')
- await window.electron.startSignalr(res.data)
- } else {
- toSrc('/login')
+ GetCheckOnline(loginInfo.account).then(req => {
+ if (req.code === 200) {
+ if (req.data) {
+ confirm({
+ title: '提示',
+ icon: ,
+ content: `账号已在其他地方登录,是否强制登陆?`,
+ centered: true,
+ okText: '确定',
+ cancelText: '取消',
+ async onOk() {
+ login()
+ },
+ onCancel() {
+
+ }
+ })
+ } else {
+ login()
+ }
}
})
} else {
diff --git a/src/api/Login/index.ts b/src/api/Login/index.ts
index ce1a034..b7356c1 100644
--- a/src/api/Login/index.ts
+++ b/src/api/Login/index.ts
@@ -22,4 +22,10 @@ export const PostAnonLogin = (data: any) =>
url: `/auth/anon-login`,
method: 'post',
data,
+ })
+
+export const GetCheckOnline = (account: string) =>
+ request({
+ url: `/auth/check-online?account=${account}`,
+ method: 'get'
})
\ No newline at end of file
diff --git a/src/components/StupWizard/index.tsx b/src/components/StupWizard/index.tsx
index 203d87a..63d8d81 100644
--- a/src/components/StupWizard/index.tsx
+++ b/src/components/StupWizard/index.tsx
@@ -133,9 +133,11 @@ const StupWizard = forwardRef((_props: any, ref: any) => {
})
const CurrencyComponents = () => {
const [optionsValue, setOperationValue] = useState<'hide' | 'quit'>('hide');
+ const [voiceStimulation, setVoiceStimulation] = useState(true);
const setting = JSON.parse(storage.getItem('setting') as string)
useEffect(() => {
setOperationValue(setting.closeSetting)
+ setVoiceStimulation(setting.voiceStimulation)
}, []);
return (
<>
@@ -154,6 +156,33 @@ const CurrencyComponents = () => {
不退出程序,最小化到托盘
+
+
语音激励
+ 开启语音激励后,会优先显示正在说话的与会成员。
+
+ }
+ title=""
+ >
+
+
+
{
+ setting.voiceStimulation = e.target.value;
+ storage.setItem('setting', JSON.stringify(setting))
+ setVoiceStimulation(e.target.value)
+ }} style={{ flexShrink: 0, margin: '10px 0' }} value={voiceStimulation}>
+ 开启
+ 关闭
+
+
diff --git a/src/page/Login/index.tsx b/src/page/Login/index.tsx
index 2fb463b..17511fa 100644
--- a/src/page/Login/index.tsx
+++ b/src/page/Login/index.tsx
@@ -4,11 +4,13 @@ import { useEffect, useState } from "react";
import { useNavigate } from 'react-router-dom';
import { Input, Button, Checkbox, message, Modal } from "antd"
import { storage } from '@/utils'
-import { GetCheckUser, PostAnonLogin, PostLogin } from '@/api/Login'
+import { GetCheckOnline, GetCheckUser, PostAnonLogin, PostLogin } from '@/api/Login'
import * as CryptoJS from 'crypto-js';
import ImageUrl from '@/utils/package/imageUrl'
import { v4 as uuidv4 } from 'uuid';
import { GetCheckoutRoomNum, GetRoomInfo, GetRoomRtcToken } from '@/api/Home/Index';
+import { ExclamationCircleFilled } from '@ant-design/icons';
+const { confirm } = Modal;
const Login: React.FC = () => {
const navigate = useNavigate();
const [accountPasswordStatus, setAccountPasswordStatus] = useState(false);
@@ -100,7 +102,32 @@ const Login: React.FC = () => {
}
GetCheckUser(operation.account).then(res => {
if (res.code === 200) {
- res.data ? setAccountPasswordStatus(true) : message.error('账号不存在!')
+ if (res.data) {
+ GetCheckOnline(operation.account).then(req => {
+ if (req.code === 200) {
+ if (req.data) {
+ confirm({
+ title: '提示',
+ icon: ,
+ content: `账号已在其他地方登录,是否强制登陆?`,
+ centered: true,
+ okText: '确定',
+ cancelText: '取消',
+ async onOk() {
+ setAccountPasswordStatus(true)
+ },
+ onCancel() {
+
+ }
+ })
+ } else {
+ setAccountPasswordStatus(true)
+ }
+ }
+ })
+ } else {
+ message.error('账号不存在!')
+ }
}
})
}
diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts
index 2ade1f3..c2f33a5 100644
--- a/src/utils/package/agora.ts
+++ b/src/utils/package/agora.ts
@@ -200,7 +200,10 @@ export const agora = {
},
// 监测到远端最活跃用户回调。
onActiveSpeaker: (connection: RtcConnection, uid: number) => {
- onActiveSpeaker?.(connection, uid)
+ const setting = JSON.parse(storage.getItem('setting') as string);
+ if (setting.voiceStimulation) {
+ onActiveSpeaker?.(connection, uid)
+ }
}
});
},
diff --git a/src/utils/package/public.ts b/src/utils/package/public.ts
index 2e49f9d..35e1e85 100644
--- a/src/utils/package/public.ts
+++ b/src/utils/package/public.ts
@@ -27,6 +27,7 @@ export const storageSeeting: any = {
shareFilesPath: path.resolve(__dirname, '../../Downloads/') + '\\', //共享文件保存路径
isShareSavePath: true, //是否下载钱询问每个文件保存的位置
closeSetting: 'hide', //关闭按钮设置
+ voiceStimulation: true, //语音激励
isAINoiseReduction: true, //是否开启ai降噪
aINoiseReduction: 1, // 降噪模式
isRecordingTips: true, //是否开启录制提示