@@ -287,6 +287,8 @@ export default function SimpleCreateTunnelModal({
287287 listenType,
288288 extendTargetAddresses,
289289 quic,
290+ dial,
291+ sorts,
290292 } = formData ;
291293
292294 // 基本校验
@@ -387,6 +389,8 @@ export default function SimpleCreateTunnelModal({
387389 . filter ( ( addr ) => addr . length > 0 )
388390 : undefined ,
389391 quic : quic !== "" ? quic === "true" : undefined ,
392+ dial : dial || undefined ,
393+ sorts : sorts !== "" ? parseInt ( sorts ) : undefined ,
390394 resetTraffic : modalMode === "edit" ? resetChecked : undefined ,
391395 } ) ,
392396 } ) ;
@@ -421,7 +425,7 @@ export default function SimpleCreateTunnelModal({
421425 setIsPasswordVisible ( false ) ;
422426 } else if ( field === "type" ) {
423427 // 切换类型时自动设置默认模式
424- const defaultMode = value === "server" ? 0 : 1 ;
428+ const defaultMode = value === "server" ? 0 : 2 ;
425429
426430 setFormData ( ( prev ) => ( { ...prev , [ field ] : value , mode : defaultMode } ) ) ;
427431 } else if ( field === "mode" ) {
@@ -821,12 +825,14 @@ export default function SimpleCreateTunnelModal({
821825 < label className = { `text-sm pl-2 ${ LABEL_PLACEMENT === "outside" ? "" : "whitespace-nowrap flex-shrink-0" } ` } > 证书路径</ label >
822826 < Input
823827 value = { formData . certPath }
828+ placeholder = "/path/to/cert.pem"
824829 onValueChange = { ( v ) => handleField ( "certPath" , v ) }
825830 />
826831 </ div >
827832 < div className = { `flex ${ LABEL_PLACEMENT === "outside" ? "flex-col" : "flex-row items-center gap-2" } ` } >
828833 < label className = { `text-sm pl-2 ${ LABEL_PLACEMENT === "outside" ? "" : "whitespace-nowrap flex-shrink-0" } ` } > 密钥路径</ label >
829834 < Input
835+ placeholder = "/path/to/cert.key"
830836 value = { formData . keyPath }
831837 onValueChange = { ( v ) => handleField ( "keyPath" , v ) }
832838 />
@@ -903,9 +909,7 @@ export default function SimpleCreateTunnelModal({
903909 } }
904910 >
905911 < div className = "space-y-2" >
906- < div className = { `grid grid-cols-${ ( ( isClientType && formData . mode === 2 ) || isServerType ) ? 3 : 3 } gap-2` }
907- >
908-
912+ < div className = { `grid grid-cols-3 gap-2` } >
909913 { isShowClientPoolMin && (
910914 < >
911915 { passwordInput }
@@ -916,29 +920,8 @@ export default function SimpleCreateTunnelModal({
916920 value = { formData . min }
917921 onValueChange = { ( v ) => handleField ( "min" , v ? String ( v ) : "" ) }
918922 />
919- { proxyProtocolSelect }
920- { sortInput }
921- < Input
922- label = "Dial"
923- placeholder = "出站源IP地址"
924- value = { formData . dial }
925- onValueChange = { ( v ) => handleField ( "dial" , v ? String ( v ) : "" ) }
926- />
927923 </ >
928924 ) }
929- { isClientType &&
930- formData . mode === 1 && (
931- < >
932- { proxyProtocolSelect }
933- { sortInput }
934- < Input
935- label = "Dial"
936- placeholder = "出站源IP地址"
937- value = { formData . dial }
938- onValueChange = { ( v ) => handleField ( "dial" , v ? String ( v ) : "" ) }
939- />
940- </ >
941- ) }
942925 { isServerType && (
943926 < >
944927 { passwordInput }
@@ -949,14 +932,9 @@ export default function SimpleCreateTunnelModal({
949932 value = { formData . max }
950933 onValueChange = { ( v ) => handleField ( "max" , v ? String ( v ) : "" ) }
951934 />
952- { proxyProtocolSelect }
953-
954935 </ >
955936 ) }
956- </ div >
957937
958- { /* 数据读取超时、速率限制和最大连接数限制 */ }
959- < div className = "grid grid-cols-3 gap-2" >
960938 < Input
961939 label = "数据读取超时"
962940 placeholder = "1h0m0s"
@@ -984,6 +962,7 @@ export default function SimpleCreateTunnelModal({
984962 value = { formData . slot }
985963 onValueChange = { ( v ) => handleField ( "slot" , v ? String ( v ) : "" ) }
986964 />
965+ { proxyProtocolSelect }
987966 { /* 启用 QUIC */ }
988967 { formData . type == 'server' &&
989968 < >
@@ -1000,15 +979,20 @@ export default function SimpleCreateTunnelModal({
1000979 < SelectItem key = "false" > 关闭</ SelectItem >
1001980 < SelectItem key = "true" > 启用</ SelectItem >
1002981 </ Select >
1003- { sortInput }
1004- < Input
1005- label = "Dial"
1006- placeholder = "出站源IP地址"
1007- value = { formData . dial }
1008- onValueChange = { ( v ) => handleField ( "dial" , v ? String ( v ) : "" ) }
1009- />
1010982 </ >
1011983 }
984+ { sortInput }
985+ < Input
986+ label = "出站源IP"
987+ placeholder = "auto"
988+ value = { formData . dial }
989+ onValueChange = { ( v ) => handleField ( "dial" , v ? String ( v ) : "" ) }
990+ />
991+ </ div >
992+
993+ { /* 数据读取超时、速率限制和最大连接数限制 */ }
994+ < div className = "grid grid-cols-3 gap-2" >
995+
1012996 </ div >
1013997
1014998
@@ -1042,7 +1026,7 @@ export default function SimpleCreateTunnelModal({
10421026 </ >
10431027 ) }
10441028 </ ModalBody >
1045- < ModalFooter className = "flex items-center justify-between" >
1029+ < ModalFooter className = "flex items-center justify-between pt-0 " >
10461030 < div className = "flex items-center gap-2" >
10471031 { /* 重置流量checkbox,仅编辑模式下显示 */ }
10481032 { modalMode === "edit" && (
0 commit comments