This commit is contained in:
yumoqing 2025-07-06 21:41:19 +08:00
parent 29e3fab227
commit 324612d67b
7 changed files with 66 additions and 46 deletions

View File

@ -150,18 +150,18 @@ bricks.DataViewer = class extends bricks.VBox {
this.add_widget(this.toolbar_w); this.add_widget(this.toolbar_w);
this.toolbar_w.bind('command', this.command_event_handle.bind(this)); this.toolbar_w.bind('command', this.command_event_handle.bind(this));
} }
command_event_handle(event){ async command_event_handle(event){
var tdesc = event.params; var tdesc = event.params;
if (tdesc.selected_row && ! this.select_row){ if (tdesc.selected_row && ! this.select_row){
bricks.show_error({title:'Error', message:'need select a row'}); bricks.show_error({title:'Error', message:'need select a row'});
return; return;
} }
if (tdesc.name == 'add'){ if (tdesc.name == 'add'){
this.add_record(); await this.add_record();
return; return;
} }
if (tdesc.name == 'update'){ if (tdesc.name == 'update'){
this.update_record(this.select_row); await this.update_record(this.select_row);
return; return;
} }
if (tdesc.name == 'delete'){ if (tdesc.name == 'delete'){
@ -207,28 +207,57 @@ bricks.DataViewer = class extends bricks.VBox {
} }
return fs; return fs;
} }
add_record(info){ async build_editform(data){
var hidefields = []; var hidefields = [];
if (!this.data_params){ if (!this.data_params){
this.data_params = {} this.data_params = {}
} }
var opts = this.opts.editor || {};
opts.widgettype = 'Form';
var submit_url = this.editable.new_data_url;
if (data) {
submit_url = this.editable.update_data_url;
}
opts.options = {
submit_url: submit_url,
width: '100%',
height: '100%'
};
var fs = this.get_hidefields(); var fs = this.get_hidefields();
for (var i=0;i<this.fields.length;i++){ for (var i=0;i<this.fields.length;i++){
fs.push(this.fields[i]); var f = bricks.extend({}, this.fields[i]);
if (data){
f.value = data[f.name];
}
fields.push(f);
} }
var f = new bricks.ModalForm({ opts.options.fields = fs
var title = "Add record";
if (data){
title = "Edit record";
}
var f = new bricks.PopupWindow({
"title": title,
"widget":this, "widget":this,
"archor":"cc", "archor":"cc",
"movable":true, "movable":true,
"resizable":true, "resizable":true,
"archor":"cc", "archor":"cc",
"width":"90%", "width":"90%",
"height":"70%", "height":"70%"
"submit_url":this.editable.new_data_url,
"fields":fs
}); });
var form = await bricks.widgetBuild(opts, this);
form.bind('cancel', f.dismiss.bind(f));
f.add_widget(form);
f.open(); f.open();
f.bind('submited', this.add_record_finish.bind(this, f)); return {
win: f,
form:form
}
}
async add_record(){
var widgets = await build_editform(null);
widgets.form.bind('submited', this.add_record_finish.bind(this, widgets.win));
} }
async add_record_finish(f, event){ async add_record_finish(f, event){
f.dismiss(); f.dismiss();
@ -237,29 +266,10 @@ bricks.DataViewer = class extends bricks.VBox {
var desc = await resp.json(); var desc = await resp.json();
var w = await bricks.widgetBuild(desc); var w = await bricks.widgetBuild(desc);
} }
update_record(){ async update_record(){
var record = this.select_row.user_data; var record = this.select_row.user_data;
var fields = this.get_hidefields(); var widgets = await build_editform(record);
for (var i=0; i< this.fields.length; i++){ widgets.form.bind('submited', this.update_record_finish.bind(this, widgets.win));
var f = bricks.extend({}, this.fields[i]);
f.value = record[f.name];
fields.push(f);
}
var f = new bricks.ModalForm({
"widget":this,
"movable":true,
"resizable":true,
"archor":"cc",
"width":"90%",
"height":"70%",
"submit_url":this.editable.update_data_url+'?id=' + record.id,
"fields":fields
});
f.open();
f.bind('submited', this.update_record_finish.bind(this, f));
}
update_cancel(f){
f.dismiss();
} }
async update_record_finish(form, event){ async update_record_finish(form, event){
await this.renew_record_view(form, this.select_row); await this.renew_record_view(form, this.select_row);

View File

@ -46,6 +46,7 @@ bricks.FieldGroup = class {
if (w){ if (w){
box.add_widget(w); box.add_widget(w);
form.name_inputs[fields[i].name] = w; form.name_inputs[fields[i].name] = w;
w.set_id(fields[i].name);
} else { } else {
bricks.debug(fields[i], 'createInput failed'); bricks.debug(fields[i], 'createInput failed');
} }

View File

@ -959,14 +959,19 @@ bricks.UiCode =class extends bricks.UiType {
} }
this.build_options(this.opts.data); this.build_options(this.opts.data);
} }
async loadData(params){
var _params = bricks.extend({}, this.opts.params);
bricks.extend(_params, params);
await this.load_data(_params);
}
async get_data(event){ async get_data(event){
var params = this.opts.params; var params = this.opts.params;
if(event){ if(event){
bricks.extend(params, event.params); bricks.extend(params, event.params);
} }
await this.loadData(params); await this.load_data(params);
} }
async loadData(params){ async load_data(params){
var jc = new bricks.HttpJson(); var jc = new bricks.HttpJson();
var d = await jc.httpcall(this.opts.dataurl, var d = await jc.httpcall(this.opts.dataurl,
{ {

View File

@ -129,7 +129,7 @@ bricks.HttpText = class {
params: opts.params}); params: opts.params});
if (fetchResult.status == 401 && bricks.app.login_url){ if (fetchResult.status == 401 && bricks.app.login_url){
console.log('go to login') console.log('go to login')
return await this.withLoginInfo(url, _params); return await this.withLoginInfo(url, opts.params);
} }
if (fetchResult.status == 403){ if (fetchResult.status == 403){
var w = new bricks.Error({ var w = new bricks.Error({

View File

@ -183,11 +183,12 @@ bricks.ModalForm = class extends bricks.PopupWindow {
description: description:
fields: fields:
user_data: user_data:
binds:
} }
*/ */
constructor(opts){ constructor(opts){
super(opts); super(opts);
this.build_form(); schedule_once(this.build_form.bind(this), 0.2);
} }
_getValue(){ _getValue(){
return this.form._getValue(); return this.form._getValue();
@ -195,17 +196,21 @@ bricks.ModalForm = class extends bricks.PopupWindow {
getValue(){ getValue(){
return this.form.getValue(); return this.form.getValue();
} }
build_form(){ async build_form(){
var opts = { var opts = {
height:'100%', widgettype: "Form",
title:this.opts.title, options:{
description:this.opts.description, height:'100%',
fields:this.opts.fields title:this.opts.title,
description:this.opts.description,
fields:this.opts.fields,
binds:this.opts.binds || []
}
} }
if (this.submit_url){ if (this.submit_url){
opts.submit_url = this.submit_url; opts.submit_url = this.submit_url;
} }
this.form = new bricks.Form(opts); this.form = await bricks.widgetBuild(opts, this);
this.add_widget(this.form); this.add_widget(this.form);
this.form.bind('submit', this.form_submit.bind(this)); this.form.bind('submit', this.form_submit.bind(this));
this.form.bind('submited', this.form_submited.bind(this)); this.form.bind('submited', this.form_submited.bind(this));

View File

@ -88,7 +88,6 @@ bricks.StatedSvg = class extends bricks.Svg {
this.state = this.states[0].state; this.state = this.states[0].state;
} }
var url = this.set_state(this.state); var url = this.set_state(this.state);
this.set_url(url);
} }
} }
set_state(state){ set_state(state){

View File

@ -115,13 +115,13 @@ bricks.TreeNode = class extends bricks.VBox {
widget.add_widget(this.check_w); widget.add_widget(this.check_w);
this.check_w.bind('changed', this.tree.node_checked.bind(this.tree, this)) this.check_w.bind('changed', this.tree.node_checked.bind(this.tree, this))
} }
var icon_url = self.this.icons_urls.leaf; var icon_url = this.icons_urls.leaf;
if (this.is_leaf) icon_url = this.icons_urls.leaf; if (this.is_leaf) icon_url = this.icons_urls.leaf;
else if (this.node_state == 'expand') this.icon_url = this.icons_urls.open; else if (this.node_state == 'expand') this.icon_url = this.icons_urls.open;
else this.icon_url = this.icons_urls.close; else this.icon_url = this.icons_urls.close;
var img = new bricks.Svg({ var img = new bricks.Svg({
rate:1, rate:1,
url:icon url:this.icon_url
}); });
widget.add_widget(img); widget.add_widget(img);
if (this.tree.node_view){ if (this.tree.node_view){
@ -246,7 +246,7 @@ bricks.Tree = class extends bricks.VScrollPanel {
var tools = []; var tools = [];
if (this.editable){ if (this.editable){
tools.push({icon:bricks_resource('imgs/add.svg'), name:'add'}); tools.push({icon:bricks_resource('imgs/add.svg'), name:'add'});
tools.push({icon:bricks_resource('imgs/update.svg'), name:'update'}); tools.push({icon:bricks_resource('imgs/edit.svg'), name:'update'});
tools.push({icon:bricks_resource('imgs/delete.svg'), name:'delete'}); tools.push({icon:bricks_resource('imgs/delete.svg'), name:'delete'});
} }
if (toolbar.tools){ if (toolbar.tools){