Explorar el Código

完善查询表单设计器

master
jacky6024 hace 7 años
padre
commit
b572f66c77
  1. 21
      ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java
  2. 12
      ureport2-core/src/main/java/com/bstek/ureport/definition/ReportDefinition.java
  3. 2
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/ButtonComponent.java
  4. 4
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/CheckboxInputComponent.java
  5. 3
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/ColComponent.java
  6. 8
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/DateInputComponent.java
  7. 7
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/InputComponent.java
  8. 12
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/RadioInputComponent.java
  9. 8
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/SearchForm.java
  10. 2
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/SelectInputComponent.java
  11. 2
      ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/TextInputComponent.java
  12. 2
      ureport2-core/src/main/java/com/bstek/ureport/export/ExportManagerImpl.java
  13. 7
      ureport2-core/src/main/java/com/bstek/ureport/export/html/HtmlReport.java
  14. 47
      ureport2-core/src/main/java/com/bstek/ureport/export/html/SearchFormData.java
  15. 4
      ureport2-js/src/form/FormBuilder.js
  16. 2
      ureport2-js/src/form/css/form.css
  17. 2
      ureport2-js/src/form/instance/Checkbox.js
  18. 6
      ureport2-js/src/form/instance/CheckboxInstance.js
  19. 2
      ureport2-js/src/form/instance/DatetimeInstance.js
  20. 2
      ureport2-js/src/form/instance/Instance.js
  21. 2
      ureport2-js/src/form/instance/Radio.js
  22. 4
      ureport2-js/src/form/instance/RadioInstance.js
  23. 1
      ureport2-js/src/form/property/DatetimeProperty.js
  24. 2
      ureport2-js/src/jquery.draggable.js
  25. 2
      ureport2-js/src/preview.js

21
ureport2-console/src/main/java/com/bstek/ureport/console/html/HtmlPreviewServletAction.java

@ -22,7 +22,6 @@ import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletException;
@ -45,6 +44,7 @@ import com.bstek.ureport.console.cache.TempObjectCache;
import com.bstek.ureport.console.exception.ReportDesignException;
import com.bstek.ureport.definition.Paper;
import com.bstek.ureport.definition.ReportDefinition;
import com.bstek.ureport.definition.searchform.FormPosition;
import com.bstek.ureport.exception.ReportComputeException;
import com.bstek.ureport.export.ExportManager;
import com.bstek.ureport.export.FullPageData;
@ -53,6 +53,7 @@ import com.bstek.ureport.export.ReportRender;
import com.bstek.ureport.export.SinglePageData;
import com.bstek.ureport.export.html.HtmlProducer;
import com.bstek.ureport.export.html.HtmlReport;
import com.bstek.ureport.export.html.SearchFormData;
import com.bstek.ureport.model.Report;
/**
@ -85,11 +86,20 @@ public class HtmlPreviewServletAction extends RenderPageServletAction {
context.put("content", "<div style='color:red'><strong>报表计算错误:</strong>"+errorMsg+"</div>");
context.put("error", true);
}else{
Locale locale=req.getLocale();
if(!locale.equals(Locale.CHINA)){
context.put("locale", "EN");
SearchFormData formData=htmlReport.getSearchFormData();
if(formData!=null){
context.put("searchFormJs", formData.getJs());
if(formData.getFormPosition().equals(FormPosition.up)){
context.put("upSearchFormHtml", formData.getHtml());
context.put("downSearchFormHtml", "");
}else{
context.put("downSearchFormHtml", formData.getHtml());
context.put("upSearchFormHtml", "");
}
}else{
context.put("locale", "EN");
context.put("searchFormJs", "");
context.put("downSearchFormHtml", "");
context.put("upSearchFormHtml", "");
}
context.put("content", htmlReport.getContent());
context.put("style", htmlReport.getStyle());
@ -272,6 +282,7 @@ public class HtmlPreviewServletAction extends RenderPageServletAction {
htmlReport.setChartDatas(report.getContext().getChartDataMap().values());
htmlReport.setContent(html);
htmlReport.setStyle(reportDefinition.getStyle());
htmlReport.setSearchFormData(reportDefinition.buildSearchFormData());
htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());
htmlReport.setHtmlIntervalRefreshValue(report.getPaper().getHtmlIntervalRefreshValue());
}else{

12
ureport2-core/src/main/java/com/bstek/ureport/definition/ReportDefinition.java

@ -27,6 +27,7 @@ import org.codehaus.jackson.annotate.JsonIgnore;
import com.bstek.ureport.definition.datasource.DatasourceDefinition;
import com.bstek.ureport.definition.searchform.SearchForm;
import com.bstek.ureport.export.html.SearchFormData;
import com.bstek.ureport.model.Cell;
import com.bstek.ureport.model.Column;
import com.bstek.ureport.model.Report;
@ -213,6 +214,17 @@ public class ReportDefinition implements Serializable{
return sb.toString();
}
public SearchFormData buildSearchFormData(){
if(searchForm==null){
return null;
}
SearchFormData data=new SearchFormData();
data.setFormPosition(searchForm.getFormPosition());
data.setHtml(searchForm.toHtml());
data.setJs(searchForm.toJs());
return data;
}
private int getColumnWidth(int columnNumber,int colSpan){
int width=0;
if(colSpan>0)colSpan--;

2
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/ButtonComponent.java

@ -26,7 +26,7 @@ public abstract class ButtonComponent implements Component{
private String type;
@Override
public String toHtml(RenderContext context) {
return "<button type=\"button\" id=\""+context.buildComponentId(this)+"\" class=\""+style+"\">"+label+"</button>";
return "<button type=\"button\" id=\""+context.buildComponentId(this)+"\" class=\"btn "+style+"\">"+label+"</button>";
}
public String getLabel() {
return label;

4
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/CheckboxInputComponent.java

@ -31,9 +31,9 @@ public class CheckboxInputComponent extends InputComponent {
String name=getBindParameter();
for(Option option:options){
if(this.optionsInline){
sb.append("<label class='checkbox-inline'><input value='"+option.getValue()+"' type='checkbox' name='"+name+"'>"+option.getLabel()+"</label>");
sb.append("<span class='checkbox-inline'><input value='"+option.getValue()+"' type='checkbox' name='"+name+"'>"+option.getLabel()+"</span>");
}else{
sb.append("<label class='checkbox'><input type='checkbox' value='"+option.getValue()+"' name='"+name+"' style='margin-left: auto'>"+option.getLabel()+"</label>");
sb.append("<span class='checkbox'><input type='checkbox' value='"+option.getValue()+"' name='"+name+"' style='margin-left: auto'><span style=\"margin-left:15px\">"+option.getLabel()+"</span></span>");
}
}
return sb.toString();

3
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/ColComponent.java

@ -48,6 +48,9 @@ public class ColComponent extends ContainerComponent{
public void setSize(int size) {
this.size = size;
}
public int getSize() {
return size;
}
@Override
public String getType() {
return null;

8
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/DateInputComponent.java

@ -26,7 +26,9 @@ public class DateInputComponent extends InputComponent {
public void setFormat(String format) {
this.format = format;
}
public String getFormat() {
return format;
}
@Override
public String initJs(RenderContext context) {
StringBuffer sb=new StringBuffer();
@ -41,8 +43,8 @@ public class DateInputComponent extends InputComponent {
public String inputHtml(RenderContext context) {
StringBuffer sb=new StringBuffer();
sb.append("<div id='"+context.buildComponentId(this)+"' class='input-group date'>");
sb.append("<input type='text' name='"+getBindParameter()+"' class='form-control'>");
sb.append("<span class='input-group-addon'><span class='glyphicon glyphicon-calendar'></span></span>");
sb.append("<input type='text' style=\"padding:3px;height:28px\" name='"+getBindParameter()+"' class='form-control'>");
sb.append("<span class='input-group-addon' style=\"font-size:12px\"><span class='glyphicon glyphicon-calendar'></span></span>");
sb.append("</div>");
return sb.toString();
}

7
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/InputComponent.java

@ -38,10 +38,10 @@ public abstract class InputComponent implements Component{
}
sb.append("<div class='form-group' style='margin:0px 0px 10px 0px'>");
if(this.labelPosition.equals(LabelPosition.top)){
sb.append("<label>"+this.label+"</label>");
sb.append("<span>"+this.label+"</span>");
sb.append(inputHtml(context));
}else{
sb.append("<label class='col-md-3 control-label' style='text-align:right;padding-right:1px'>"+this.label+"</label>");
sb.append("<span class='col-md-3' style='text-align:right;padding-right:1px'>"+this.label+"</span>");
sb.append("<div class='col-md-9' style='padding-left:1px;'>");
sb.append(inputHtml(context));
sb.append("</div>");
@ -59,6 +59,9 @@ public abstract class InputComponent implements Component{
public void setLabelPosition(LabelPosition labelPosition) {
this.labelPosition = labelPosition;
}
public LabelPosition getLabelPosition() {
return labelPosition;
}
public String getBindParameter() {
return bindParameter;
}

12
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/RadioInputComponent.java

@ -32,9 +32,9 @@ public class RadioInputComponent extends InputComponent {
sb.append("<div>");
for(Option option:options){
if(this.optionsInline){
sb.append("<label class='checkbox-inline' style='padding-left:0px'><input value='"+option.getValue()+"' type='radio' name='"+name+"'> "+option.getLabel()+"</label>");
sb.append("<span class='checkbox-inline' style='padding-top:0px;padding-left:2px'><input value='"+option.getValue()+"' type='radio' name='"+name+"'> "+option.getLabel()+"</span>");
}else{
sb.append("<label class='checkbox'><input value='"+option.getValue()+"' type='radio' name='"+name+"' style='margin-left: auto'> "+option.getLabel()+"</label>");
sb.append("<span class='checkbox'><input value='"+option.getValue()+"' type='radio' name='"+name+"' style='margin-left: auto'> <span style=\"margin-left:15px\">"+option.getLabel()+"</span></span>");
}
}
sb.append("</div>");
@ -47,15 +47,13 @@ public class RadioInputComponent extends InputComponent {
public void setOptionsInline(boolean optionsInline) {
this.optionsInline = optionsInline;
}
public boolean isOptionsInline() {
return optionsInline;
}
public void setOptions(List<Option> options) {
this.options = options;
}
public List<Option> getOptions() {
return options;
}
@Override
public String toHtml(RenderContext context) {
StringBuilder sb=new StringBuilder();
return sb.toString();
}
}

8
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/SearchForm.java

@ -33,6 +33,14 @@ public class SearchForm {
}
return sb.toString();
}
public String toJs(){
RenderContext context=new RenderContext();
StringBuilder sb=new StringBuilder();
for(Component component:components){
sb.append(component.initJs(context));
}
return sb.toString();
}
public List<Component> getComponents() {
return components;
}

2
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/SelectInputComponent.java

@ -27,7 +27,7 @@ public class SelectInputComponent extends InputComponent {
@Override
String inputHtml(RenderContext context) {
StringBuilder sb=new StringBuilder();
sb.append("<select id='"+context.buildComponentId(this)+"' name='"+getBindParameter()+"' class='form-control'>");
sb.append("<select style=\"padding:3px;height:28px\" id='"+context.buildComponentId(this)+"' name='"+getBindParameter()+"' class='form-control'>");
for(Option option:options){
sb.append("<option value='"+option.getValue()+"'>"+option.getLabel()+"</option>");
}

2
ureport2-core/src/main/java/com/bstek/ureport/definition/searchform/TextInputComponent.java

@ -23,7 +23,7 @@ package com.bstek.ureport.definition.searchform;
public class TextInputComponent extends InputComponent {
@Override
String inputHtml(RenderContext context) {
return "<input type='text' id='"+context.buildComponentId(this)+"' name='"+getBindParameter()+"' class='form-control'>";
return "<input type='text' style=\"padding:3px;height:28px\" id='"+context.buildComponentId(this)+"' name='"+getBindParameter()+"' class='form-control'>";
}
@Override
public String initJs(RenderContext context) {

2
ureport2-core/src/main/java/com/bstek/ureport/export/ExportManagerImpl.java

@ -51,6 +51,7 @@ public class ExportManagerImpl implements ExportManager {
String content=htmlProducer.produce(report);
htmlReport.setContent(content);
htmlReport.setStyle(reportDefinition.getStyle());
htmlReport.setSearchFormData(reportDefinition.buildSearchFormData());
htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());
htmlReport.setChartDatas(report.getContext().getChartDataMap().values());
htmlReport.setHtmlIntervalRefreshValue(report.getPaper().getHtmlIntervalRefreshValue());
@ -76,6 +77,7 @@ public class ExportManagerImpl implements ExportManager {
HtmlReport htmlReport=new HtmlReport();
htmlReport.setContent(content);
htmlReport.setStyle(reportDefinition.getStyle());
htmlReport.setSearchFormData(reportDefinition.buildSearchFormData());
htmlReport.setPageIndex(pageIndex);
htmlReport.setTotalPage(pageData.getTotalPages());
htmlReport.setReportAlign(report.getPaper().getHtmlReportAlign().name());

7
ureport2-core/src/main/java/com/bstek/ureport/export/html/HtmlReport.java

@ -32,6 +32,7 @@ public class HtmlReport {
private String reportAlign;
private Collection<ChartData> chartDatas;
private int htmlIntervalRefreshValue;
private SearchFormData searchFormData;
public String getContent() {
return content;
}
@ -74,4 +75,10 @@ public class HtmlReport {
public void setHtmlIntervalRefreshValue(int htmlIntervalRefreshValue) {
this.htmlIntervalRefreshValue = htmlIntervalRefreshValue;
}
public SearchFormData getSearchFormData() {
return searchFormData;
}
public void setSearchFormData(SearchFormData searchFormData) {
this.searchFormData = searchFormData;
}
}

47
ureport2-core/src/main/java/com/bstek/ureport/export/html/SearchFormData.java

@ -0,0 +1,47 @@
/*******************************************************************************
* Copyright (C) 2017 Bstek.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package com.bstek.ureport.export.html;
import com.bstek.ureport.definition.searchform.FormPosition;
/**
* @author Jacky.gao
* @since 2017年10月31日
*/
public class SearchFormData {
private String html;
private String js;
private FormPosition formPosition;
public String getHtml() {
return html;
}
public void setHtml(String html) {
this.html = html;
}
public String getJs() {
return js;
}
public void setJs(String js) {
this.js = js;
}
public FormPosition getFormPosition() {
return formPosition;
}
public void setFormPosition(FormPosition formPosition) {
this.formPosition = formPosition;
}
}

4
ureport2-js/src/form/FormBuilder.js

@ -39,10 +39,10 @@ export default class FormBuilder{
this.container.append(body);
const shadowContainer=$("<div class='pb-shadow'>");
body.append(shadowContainer);
const container=$("<div class='container pb-canvas-container form-horizontal' style='width: auto'>");
const container=$("<div class='container pb-canvas-container form-horizontal' style='width: auto;padding: 0;'>");
shadowContainer.append(container);
const row=$("<div class='row'>");
const canvas=$("<div class='col-md-12 pb-dropable-grid' style='min-height: 100px'>");
const canvas=$("<div class='col-md-12 pb-dropable-grid' style='min-height: 100px;border: none;padding: 0;;'>");
row.append(canvas);
container.append(row);
this.rootContainer=new CanvasContainer(canvas);

2
ureport2-js/src/form/css/form.css

@ -76,7 +76,7 @@
background-color: #fff;
background: #fff;
border: 1px solid #fff;
padding: 20px;
padding: 2px;
}
.pb-tab-icon {
position: relative;

2
ureport2-js/src/form/instance/Checkbox.js

@ -13,7 +13,7 @@ export default class Checkbox{
if(optionsInline){
inlineClass=CheckboxInstance.LABEL_POSITION[1];
}
this.element=$("<label class='"+inlineClass+"'></label>");
this.element=$("<span class='"+inlineClass+"'></span>");
this.element.append(this.checkbox);
this.labelElement=$("<span style='margin-left: 15px'>"+this.label+"</span>");
this.element.append(this.labelElement);

6
ureport2-js/src/form/instance/CheckboxInstance.js

@ -70,7 +70,9 @@ export default class CheckboxInstance extends Instance{
for(var i=0;i<options.length;i++){
this.addOption(options[i]);
}
this.setOptionsInline(json.optionsInline);
if(json.optionsInline!==undefined){
this.setOptionsInline(json.optionsInline);
}
}
toJson(){
const json={
@ -87,7 +89,7 @@ export default class CheckboxInstance extends Instance{
return json;
}
toXml(){
let xml=`<input-checkbox label="${this.label}" type="${CheckboxInstance.TYPE}" options-inline="${this.optionsInline}" label-position="${this.labelPosition || 'top'}" bind-parameter="${this.bindParameter || ''}">`;
let xml=`<input-checkbox label="${this.label}" type="${CheckboxInstance.TYPE}" options-inline="${this.optionsInline === undefined ? false : this.optionsInline}" label-position="${this.labelPosition || 'top'}" bind-parameter="${this.bindParameter || ''}">`;
for(let option of this.options){
xml+=`<option label="${option.label}" value="${option.value}"></option>`;
}

2
ureport2-js/src/form/instance/DatetimeInstance.js

@ -26,7 +26,7 @@ export default class DatetimeInstance extends Instance{
this.id=this.element.prop("id");
}
setDateFormat(format){
if(this.dateFormat===format || format===''){
if(this.dateFormat===format || format==='' || format===undefined){
return;
}
this.dateFormat=format;

2
ureport2-js/src/form/instance/Instance.js

@ -12,7 +12,7 @@ export default class Instance{
newElement(label){
this.element=$("<div class='form-group row' style='margin:0px'>");
this.label=label;
this.labelElement=$("<label class='control-label'>");
this.labelElement=$("<span class='control-label'></span>");
this.element.append(this.labelElement);
this.labelElement.text(label);
return this.element;

2
ureport2-js/src/form/instance/Radio.js

@ -13,7 +13,7 @@ export default class Radio{
if(optionsInline){
inlineClass=CheckboxInstance.LABEL_POSITION[1];
}
this.element=$("<label class='"+inlineClass+"'></label>");
this.element=$("<span class='"+inlineClass+"'></span>");
this.element.append(this.radio);
this.labelElement=$("<span>"+this.label+"</span>");
this.element.append(this.labelElement);

4
ureport2-js/src/form/instance/RadioInstance.js

@ -71,7 +71,9 @@ export default class RadioInstance extends Instance{
for(var i=0;i<options.length;i++){
this.addOption(options[i]);
}
this.setOptionsInline(json.optionsInline);
if(json.optionsInline!==undefined){
this.setOptionsInline(json.optionsInline);
}
}
toJson(){
const json={

1
ureport2-js/src/form/property/DatetimeProperty.js

@ -10,6 +10,7 @@ export default class DatetimeProperty extends Property{
init(){
this.positionLabelGroup=this.buildPositionLabelGroup();
this.col.append(this.positionLabelGroup);
this.col.append(this.buildBindParameter());
this.col.append(this.buildLabelGroup());
var formatGroup=$("<div class='form-group'><label class='control-label'>日期格式</label></div>");
this.col.append(formatGroup);

2
ureport2-js/src/jquery.draggable.js

@ -24,7 +24,7 @@
if(className && (className==='form-control' || className==='presentation' || iscm)){
return;
}
if(className.indexOf("ureport")>-1 || className.indexOf("ds_name")>-1 || className.indexOf("dataset_name")>-1 || target.tagName==="A"){
if(className.indexOf("ureport")>-1 || className.indexOf("ds_name")>-1 || className.indexOf("dataset_name")>-1 || target.tagName==="A"){
return;
}
if(target && $(target).attr('role')==='presentation'){

2
ureport2-js/src/preview.js

@ -3,6 +3,8 @@
*/
import Chart from "chart.js";
import '../node_modules/bootstrap/dist/css/bootstrap.min.css';
import './form/external/bootstrap-datetimepicker.css';
import './form/external/bootstrap-datetimepicker.js';
import {getParameter,pointToMM,showLoading,hideLoading} from './Utils.js';
import {alert} from './MsgBox.js';
import PDFPrintDialog from './dialog/PDFPrintDialog.js';

Cargando…
Cancelar
Guardar