1
1
import React , { useEffect , useState , useCallback } from 'react' ;
2
- import { Checkbox , Stack , HStack , Tooltip } from '@chakra-ui/react' ;
2
+ import {
3
+ Stack ,
4
+ HStack ,
5
+ Tooltip ,
6
+ IconButton ,
7
+ Text ,
8
+ VStack ,
9
+ Checkbox ,
10
+ } from '@chakra-ui/react' ;
3
11
import { useQuery } from '@tanstack/react-query' ;
12
+ import { FiPause , FiPlay } from 'react-icons/fi' ; // 引入播放器图标
4
13
import { useToast } from '../../hooks/useToast' ;
5
14
import {
6
15
getConfig ,
@@ -39,7 +48,6 @@ const Panels = () => {
39
48
}
40
49
} ) ;
41
50
42
- // eslint-disable-next-line react-hooks/exhaustive-deps
43
51
const pausedHandler = useCallback (
44
52
( message : any ) => {
45
53
if ( message . event === 'has_paused' ) {
@@ -63,9 +71,8 @@ const Panels = () => {
63
71
useEffect ( ( ) => {
64
72
const unregister = registerEventHandler ( pausedHandler ) ;
65
73
66
- // 组件卸载时注销事件处理器
67
74
return ( ) => unregister ( ) ;
68
- } , [ registerEventHandler , pausedHandler ] ) ; // eslint-disable-line
75
+ } , [ registerEventHandler , pausedHandler ] ) ;
69
76
70
77
useEffect ( ( ) => {
71
78
if ( data ) {
@@ -83,7 +90,6 @@ const Panels = () => {
83
90
cfg : updatedConfig ,
84
91
} ) ;
85
92
86
- // 检查是否是 hasPaused 变更
87
93
if ( 'hasPaused' in newConfig ) {
88
94
toast ( {
89
95
title : '更新配置成功' ,
@@ -109,81 +115,84 @@ const Panels = () => {
109
115
} ;
110
116
111
117
return (
112
- < >
113
- < Stack spacing = { 4 } >
114
- < HStack width = "full" alignItems = "center" >
115
- < Checkbox
116
- mr = { 4 }
117
- isChecked = { driverSettings . hasPaused }
118
- onChange = { ( e ) =>
119
- handleUpdateConfig ( { hasPaused : e . target . checked } )
120
- }
121
- >
122
- < Tooltip label = "暂停软件后,将不再自动回复消息" > 暂停软件</ Tooltip >
123
- </ Checkbox >
124
- < Checkbox
125
- isChecked = { driverSettings . hasKeywordMatch }
126
- onChange = { ( e ) =>
127
- handleUpdateConfig ( { hasKeywordMatch : e . target . checked } )
128
- }
129
- >
130
- < Tooltip label = "将优先匹配关键词,未匹配的才去调用 GPT 接口" >
131
- 关键词匹配
132
- </ Tooltip >
133
- </ Checkbox >
134
- < Checkbox
135
- isChecked = { driverSettings . hasUseGpt }
136
- onChange = { ( e ) =>
137
- handleUpdateConfig ( { hasUseGpt : e . target . checked } )
138
- }
139
- >
140
- < Tooltip label = "是否开启 GPT 回复,关闭后只会使用关键词回复" >
141
- GPT 回复
142
- </ Tooltip >
143
- </ Checkbox >
144
- </ HStack >
145
- < HStack width = "full" alignItems = "center" >
146
- { /* <Checkbox
147
- isChecked={driverSettings.hasMouseClose}
148
- onChange={(e) =>
149
- handleUpdateConfig({ hasMouseClose: e.target.checked })
150
- }
151
- >
152
- <Tooltip label="是否开启鼠标移动时,自动暂停自动客服">
153
- 鼠标移动自动暂停
154
- </Tooltip>
155
- </Checkbox> */ }
156
- < Checkbox
157
- isChecked = { driverSettings . hasTransfer }
158
- onChange = { ( e ) =>
159
- handleUpdateConfig ( { hasTransfer : e . target . checked } )
160
- }
161
- >
162
- < Tooltip label = "如果匹配到设定的关键词,将自动转人工" >
163
- 关键词转人工
164
- </ Tooltip >
165
- </ Checkbox >
166
- < Checkbox
167
- isChecked = { driverSettings . hasReplace }
168
- onChange = { ( e ) =>
169
- handleUpdateConfig ( { hasReplace : e . target . checked } )
170
- }
171
- >
172
- < Tooltip label = "如果匹配到设定的关键词,将自动替换成自定义的关键词" >
173
- 关键词替换
174
- </ Tooltip >
175
- </ Checkbox >
176
- < Checkbox
177
- isChecked = { driverSettings . hasReplace }
178
- onChange = { ( e ) =>
179
- handleUpdateConfig ( { hasEscClose : e . target . checked } )
118
+ < Stack spacing = { 4 } >
119
+ < HStack width = "full" alignItems = "center" justifyContent = "space-between" >
120
+ < VStack width = "35%" >
121
+ < Text fontSize = "md" >
122
+ 按下{ driverSettings . hasPaused ? '开启' : '关闭' } 自动回复
123
+ </ Text >
124
+ < IconButton
125
+ icon = { driverSettings . hasPaused ? < FiPlay /> : < FiPause /> }
126
+ aria-label = "Pause/Play"
127
+ size = "lg"
128
+ mt = { 2 }
129
+ onClick = { ( ) =>
130
+ handleUpdateConfig ( { hasPaused : ! driverSettings . hasPaused } )
180
131
}
181
- >
182
- < Tooltip label = "当按下 ESC 键时自动暂停" > 按 ESC 键自动暂停</ Tooltip >
183
- </ Checkbox >
184
- </ HStack >
185
- </ Stack >
186
- </ >
132
+ isRound
133
+ colorScheme = { driverSettings . hasPaused ? 'green' : 'red' }
134
+ />
135
+ </ VStack >
136
+ < VStack width = "65%" alignItems = "flex-start" >
137
+ < HStack >
138
+ < Checkbox
139
+ isChecked = { driverSettings . hasKeywordMatch }
140
+ onChange = { ( e ) =>
141
+ handleUpdateConfig ( { hasKeywordMatch : e . target . checked } )
142
+ }
143
+ >
144
+ < Tooltip label = "将优先匹配关键词,未匹配的才去调用 GPT 接口" >
145
+ 关键词匹配
146
+ </ Tooltip >
147
+ </ Checkbox >
148
+ < Checkbox
149
+ isChecked = { driverSettings . hasUseGpt }
150
+ onChange = { ( e ) =>
151
+ handleUpdateConfig ( { hasUseGpt : e . target . checked } )
152
+ }
153
+ >
154
+ < Tooltip label = "是否开启 GPT 回复,关闭后只会使用关键词回复" >
155
+ GPT 回复
156
+ </ Tooltip >
157
+ </ Checkbox >
158
+ </ HStack >
159
+ < HStack >
160
+ < Checkbox
161
+ isChecked = { driverSettings . hasTransfer }
162
+ onChange = { ( e ) =>
163
+ handleUpdateConfig ( { hasTransfer : e . target . checked } )
164
+ }
165
+ >
166
+ < Tooltip label = "如果匹配到设定的关键词,将自动转人工" >
167
+ 关键词转人工
168
+ </ Tooltip >
169
+ </ Checkbox >
170
+ < Checkbox
171
+ isChecked = { driverSettings . hasReplace }
172
+ onChange = { ( e ) =>
173
+ handleUpdateConfig ( { hasReplace : e . target . checked } )
174
+ }
175
+ >
176
+ < Tooltip label = "如果匹配到设定的关键词,将自动替换成自定义的关键词" >
177
+ 关键词替换
178
+ </ Tooltip >
179
+ </ Checkbox >
180
+ </ HStack >
181
+ < HStack >
182
+ < Checkbox
183
+ isChecked = { driverSettings . hasEscClose }
184
+ onChange = { ( e ) =>
185
+ handleUpdateConfig ( { hasEscClose : e . target . checked } )
186
+ }
187
+ >
188
+ < Tooltip label = "当按下 ESC 键时自动暂停" >
189
+ 按 ESC 键自动暂停
190
+ </ Tooltip >
191
+ </ Checkbox >
192
+ </ HStack >
193
+ </ VStack >
194
+ </ HStack >
195
+ </ Stack >
187
196
) ;
188
197
} ;
189
198
0 commit comments