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.toolbar_w.bind('command', this.command_event_handle.bind(this));
}
command_event_handle(event){
async command_event_handle(event){
var tdesc = event.params;
if (tdesc.selected_row && ! this.select_row){
bricks.show_error({title:'Error', message:'need select a row'});
return;
}
if (tdesc.name == 'add'){
this.add_record();
await this.add_record();
return;
}
if (tdesc.name == 'update'){
this.update_record(this.select_row);
await this.update_record(this.select_row);
return;
}
if (tdesc.name == 'delete'){
@ -207,28 +207,57 @@ bricks.DataViewer = class extends bricks.VBox {
}
return fs;
}
add_record(info){
async build_editform(data){
var hidefields = [];
if (!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();
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,
"archor":"cc",
"movable":true,
"resizable":true,
"archor":"cc",
"width":"90%",
"height":"70%",
"submit_url":this.editable.new_data_url,
"fields":fs
"height":"70%"
});
var form = await bricks.widgetBuild(opts, this);
form.bind('cancel', f.dismiss.bind(f));
f.add_widget(form);
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){
f.dismiss();
@ -237,29 +266,10 @@ bricks.DataViewer = class extends bricks.VBox {
var desc = await resp.json();
var w = await bricks.widgetBuild(desc);
}
update_record(){
async update_record(){
var record = this.select_row.user_data;
var fields = this.get_hidefields();
for (var i=0; i< this.fields.length; i++){
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();
var widgets = await build_editform(record);
widgets.form.bind('submited', this.update_record_finish.bind(this, widgets.win));
}
async update_record_finish(form, event){
await this.renew_record_view(form, this.select_row);

View File

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

View File

@ -959,14 +959,19 @@ bricks.UiCode =class extends bricks.UiType {
}
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){
var params = this.opts.params;
if(event){
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 d = await jc.httpcall(this.opts.dataurl,
{

View File

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

View File

@ -183,11 +183,12 @@ bricks.ModalForm = class extends bricks.PopupWindow {
description:
fields:
user_data:
binds:
}
*/
constructor(opts){
super(opts);
this.build_form();
schedule_once(this.build_form.bind(this), 0.2);
}
_getValue(){
return this.form._getValue();
@ -195,17 +196,21 @@ bricks.ModalForm = class extends bricks.PopupWindow {
getValue(){
return this.form.getValue();
}
build_form(){
async build_form(){
var opts = {
height:'100%',
title:this.opts.title,
description:this.opts.description,
fields:this.opts.fields
widgettype: "Form",
options:{
height:'100%',
title:this.opts.title,
description:this.opts.description,
fields:this.opts.fields,
binds:this.opts.binds || []
}
}
if (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.form.bind('submit', this.form_submit.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;
}
var url = this.set_state(this.state);
this.set_url(url);
}
}
set_state(state){

View File

@ -115,13 +115,13 @@ bricks.TreeNode = class extends bricks.VBox {
widget.add_widget(this.check_w);
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;
else if (this.node_state == 'expand') this.icon_url = this.icons_urls.open;
else this.icon_url = this.icons_urls.close;
var img = new bricks.Svg({
rate:1,
url:icon
url:this.icon_url
});
widget.add_widget(img);
if (this.tree.node_view){
@ -246,7 +246,7 @@ bricks.Tree = class extends bricks.VScrollPanel {
var tools = [];
if (this.editable){
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'});
}
if (toolbar.tools){