@@ -87,111 +87,19 @@ function showFormModal(modelSelector, formID, URL, getData) {
8787 }
8888 form . children ( ".message" ) . remove ( ) ;
8989 btn . toggleClass ( "loading" ) ;
90- const data = getData
91- ? getData ( )
92- : $ ( formID )
93- . serializeArray ( )
94- . reduce ( function ( obj , item ) {
95- // ID 类的数据
96- if (
97- item . name . endsWith ( "_id" ) ||
98- item . name === "id" ||
99- item . name === "ID" ||
100- item . name === "ServerID" ||
101- item . name === "RequestType" ||
102- item . name === "RequestMethod" ||
103- item . name === "TriggerMode" ||
104- item . name === "TaskType" ||
105- item . name === "DisplayIndex" ||
106- item . name === "Type" ||
107- item . name === "Cover" ||
108- item . name === "Duration" ||
109- item . name === "MaxRetries" ||
110- item . name === "Provider" ||
111- item . name === "WebhookMethod" ||
112- item . name === "WebhookRequestType"
113- ) {
114- obj [ item . name ] = parseInt ( item . value ) ;
115- } else if ( item . name . endsWith ( "Latency" ) ) {
116- obj [ item . name ] = parseFloat ( item . value ) ;
117- } else {
118- obj [ item . name ] = item . value ;
119- }
120-
121- if ( item . name . endsWith ( "ServersRaw" ) ) {
122- // 直接使用隐藏input的值,它已经是正确的JSON格式
123- if ( item . value && item . value . length > 2 ) {
124- try {
125- // 验证是否为有效的JSON数组
126- var parsedValue = JSON . parse ( item . value ) ;
127- if ( Array . isArray ( parsedValue ) ) {
128- obj [ item . name ] = item . value ;
129- } else {
130- obj [ item . name ] = "[]" ;
131- }
132- } catch ( e ) {
133- // 如果不是有效JSON,尝试从字符串中提取数字
134- obj [ item . name ] = JSON . stringify (
135- [ ...item . value . matchAll ( / \d + / gm) ] . map ( ( k ) =>
136- parseInt ( k [ 0 ] )
137- )
138- ) ;
139- }
140- } else {
141- obj [ item . name ] = "[]" ;
142- }
143- }
144-
145- if ( item . name . endsWith ( "TasksRaw" ) ) {
146- // 直接使用隐藏input的值,它已经是正确的JSON格式
147- if ( item . value && item . value . length > 2 ) {
148- try {
149- // 验证是否为有效的JSON数组
150- var parsedValue = JSON . parse ( item . value ) ;
151- if ( Array . isArray ( parsedValue ) ) {
152- obj [ item . name ] = item . value ;
153- } else {
154- obj [ item . name ] = "[]" ;
155- }
156- } catch ( e ) {
157- // 如果不是有效JSON,尝试从字符串中提取数字
158- obj [ item . name ] = JSON . stringify (
159- [ ...item . value . matchAll ( / \d + / gm) ] . map ( ( k ) =>
160- parseInt ( k [ 0 ] )
161- )
162- ) ;
163- }
164- } else {
165- obj [ item . name ] = "[]" ;
166- }
167- }
168-
169- if ( item . name . endsWith ( "DDNSProfilesRaw" ) ) {
170- // 直接使用隐藏input的值,它已经是正确的JSON格式
171- if ( item . value && item . value . length > 2 ) {
172- try {
173- // 验证是否为有效的JSON数组
174- var parsedValue = JSON . parse ( item . value ) ;
175- if ( Array . isArray ( parsedValue ) ) {
176- obj [ item . name ] = item . value ;
177- } else {
178- obj [ item . name ] = "[]" ;
179- }
180- } catch ( e ) {
181- // 如果不是有效JSON,尝试从字符串中提取数字
182- obj [ item . name ] = JSON . stringify (
183- [ ...item . value . matchAll ( / \d + / gm) ] . map ( ( k ) =>
184- parseInt ( k [ 0 ] )
185- )
186- ) ;
187- }
188- } else {
189- obj [ item . name ] = "[]" ;
190- }
191- }
90+ // 1) 用 Dropdown API 写回隐藏 input 的实时值
91+ $ ( formID ) . find ( '.ui.multiple.dropdown' ) . each ( function ( ) {
92+ const $dropdown = $ ( this ) ;
93+ const $hidden = $dropdown . find ( 'input[type="hidden"]' ) ;
94+ const name = $hidden . attr ( 'name' ) ;
95+ if ( ! name || ! name . endsWith ( 'Raw' ) ) return ;
96+ let values = $dropdown . dropdown ( 'get values' ) || [ ] ;
97+ values = values . map ( v => { const n = parseInt ( v ) ; return isNaN ( n ) ? v : n ; } ) ;
98+ $hidden . val ( JSON . stringify ( values ) ) ;
99+ } ) ;
192100
193- return obj ;
194- } , { } ) ;
101+ // 2) serialize 生成标准 x-www-form-urlencoded 字符串
102+ const serialized = $ ( formID ) . serialize ( ) ;
195103
196104 // 特殊处理checkbox字段,确保未选中的checkbox也被包含在数据中
197105 // 检查所有checkbox,如果没有在数据中,则设置为空字符串(表示未选中)
@@ -214,8 +122,8 @@ function showFormModal(modelSelector, formID, URL, getData) {
214122 data [ name ] = JSON . stringify ( values ) ;
215123 } ) ;
216124
217- // 使用表单方式提交(application/x-www-form-urlencoded),与历史行为一致
218- $ . post ( URL , data )
125+ // 按标准表单方式提交
126+ $ . post ( URL , serialized )
219127 . done ( function ( resp ) {
220128 if ( resp . code == 200 ) {
221129 window . location . reload ( )
0 commit comments