|
@@ -1,5 +1,5 @@
|
|
|
import {Command, Session} from "../session";
|
|
|
-import {error_alert, LRUMap, make_set} from "../utils";
|
|
|
+import {error_alert, LRUMap, make_set, serialize_json} from "../utils";
|
|
|
import {InputItem} from "../models/input/base"
|
|
|
import {state} from '../state'
|
|
|
import {all_input_items} from "../models/input"
|
|
@@ -203,7 +203,7 @@ class FormController {
|
|
|
body.append(item.create_element());
|
|
|
}
|
|
|
|
|
|
- // 事件绑定
|
|
|
+ // submit event
|
|
|
element.on('submit', 'form', function (e) {
|
|
|
e.preventDefault(); // avoid to execute the actual submit of the form.
|
|
|
|
|
@@ -213,14 +213,15 @@ class FormController {
|
|
|
if (!that.name2input[name].check_valid())
|
|
|
return error_alert(t("error_in_input"));
|
|
|
|
|
|
- let data_keys:string[] = [];
|
|
|
- let data_values:any[] = [];
|
|
|
+ let data_keys: string[] = [];
|
|
|
+ let data_values: any[] = [];
|
|
|
$.each(that.name2input, (name, ctrl) => {
|
|
|
data_keys.push(name as string);
|
|
|
data_values.push(ctrl.get_value());
|
|
|
});
|
|
|
|
|
|
- let on_process = (loaded: number, total: number)=>{};
|
|
|
+ let on_process = (loaded: number, total: number) => {
|
|
|
+ };
|
|
|
// show process bar when there is a file input field
|
|
|
for (let item of that.spec.inputs) {
|
|
|
if (item.type == 'file') {
|
|
@@ -229,15 +230,25 @@ class FormController {
|
|
|
}
|
|
|
}
|
|
|
Promise.all(data_values).then((values) => {
|
|
|
- let data: { [i: string]: any } = {};
|
|
|
- for (let idx in data_keys){
|
|
|
- data[data_keys[idx]] = values[idx];
|
|
|
+ let input_data: { [i: string]: any } = {};
|
|
|
+ let files: Blob[] = [];
|
|
|
+ for (let idx in data_keys) {
|
|
|
+ input_data[data_keys[idx]] = values[idx];
|
|
|
+ if (that.spec.inputs[idx].type == 'file') {
|
|
|
+ input_data[data_keys[idx]] = [];
|
|
|
+ files.push(...values[idx]);
|
|
|
+ }
|
|
|
}
|
|
|
- that.session.send_message({
|
|
|
+ let msg = {
|
|
|
event: "from_submit",
|
|
|
task_id: that.task_id,
|
|
|
- data: data
|
|
|
- }, on_process);
|
|
|
+ data: input_data
|
|
|
+ };
|
|
|
+ if (files.length) {
|
|
|
+ that.session.send_buffer(new Blob([serialize_json(msg), ...files], {type: 'application/octet-stream'}), on_process);
|
|
|
+ } else {
|
|
|
+ that.session.send_message(msg, on_process);
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
});
|