forked from p81075629/datagear
完善Excel数据集表单功能
This commit is contained in:
parent
3f8f2e550e
commit
300855cba2
|
@ -8,7 +8,6 @@
|
|||
package org.datagear.analysis.support;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
@ -17,7 +16,6 @@ import java.util.Map;
|
|||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.CellReference;
|
||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.openxml4j.opc.PackageAccess;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
@ -66,8 +64,8 @@ public abstract class AbstractExcelDataSet extends AbstractFmkTemplateDataSet im
|
|||
protected static final RangeExpResolver RANGE_EXP_RESOLVER = RangeExpResolver
|
||||
.valueOf(RangeExpResolver.RANGE_SPLITTER_CHAR, RangeExpResolver.RANGE_GROUP_SPLITTER_CHAR);
|
||||
|
||||
/** 此数据集所处的sheet索引号(以0计数) */
|
||||
private int sheetIndex = 0;
|
||||
/** 此数据集所处的sheet索引号(以1计数) */
|
||||
private int sheetIndex = 1;
|
||||
|
||||
/** 作为名称行的行号 */
|
||||
private int nameRow = -1;
|
||||
|
@ -106,10 +104,9 @@ public abstract class AbstractExcelDataSet extends AbstractFmkTemplateDataSet im
|
|||
}
|
||||
|
||||
/**
|
||||
* 设置此数据集所处的sheet索引号。
|
||||
* 设置此数据集所处的sheet号。
|
||||
*
|
||||
* @param sheetIndex
|
||||
* 索引号(以{@code 0}计数)
|
||||
* @param sheetIndex sheet号(以{@code 1}计数)
|
||||
*/
|
||||
public void setSheetIndex(int sheetIndex)
|
||||
{
|
||||
|
@ -286,13 +283,17 @@ public abstract class AbstractExcelDataSet extends AbstractFmkTemplateDataSet im
|
|||
poifs = new POIFSFileSystem(file, true);
|
||||
wb = new HSSFWorkbook(poifs.getRoot(), true);
|
||||
|
||||
Sheet sheet = wb.getSheetAt(getSheetIndex());
|
||||
Sheet sheet = wb.getSheetAt(getSheetIndex() - 1);
|
||||
|
||||
return resolveResultForSheet(paramValues, sheet, properties);
|
||||
}
|
||||
catch (IOException e)
|
||||
catch(DataSetException e)
|
||||
{
|
||||
throw new DataSetSourceParseException(e);
|
||||
throw e;
|
||||
}
|
||||
catch(Throwable t)
|
||||
{
|
||||
throw new DataSetSourceParseException(t);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
@ -322,13 +323,17 @@ public abstract class AbstractExcelDataSet extends AbstractFmkTemplateDataSet im
|
|||
pkg = OPCPackage.open(file, PackageAccess.READ);
|
||||
wb = new XSSFWorkbook(pkg);
|
||||
|
||||
Sheet sheet = wb.getSheetAt(getSheetIndex());
|
||||
Sheet sheet = wb.getSheetAt(getSheetIndex() - 1);
|
||||
|
||||
return resolveResultForSheet(paramValues, sheet, properties);
|
||||
}
|
||||
catch (IOException | InvalidFormatException e)
|
||||
catch(DataSetException e)
|
||||
{
|
||||
throw new DataSetSourceParseException(e);
|
||||
throw e;
|
||||
}
|
||||
catch(Throwable t)
|
||||
{
|
||||
throw new DataSetSourceParseException(t);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
|
@ -101,6 +101,7 @@ duration.MS={0}\u6BEB\u79D2
|
|||
#validation
|
||||
validation.required=\u6B64\u9879\u5FC5\u586B
|
||||
validation.integer=\u6B64\u9879\u4EC5\u53EF\u586B\u5199\u6574\u6570\u503C
|
||||
validation.min=\u6B64\u9879\u5E94\u5927\u4E8E\u6216\u7B49\u4E8E{0}
|
||||
validation.email=\u90AE\u7BB1\u683C\u5F0F\u6709\u8BEF
|
||||
|
||||
#error
|
||||
|
@ -612,11 +613,17 @@ dataSet.json=JSON\u6587\u672C
|
|||
dataSet.jsonFile=JSON\u6587\u4EF6
|
||||
dataSet.jsonFileEncoding=JSON\u6587\u4EF6\u7F16\u7801
|
||||
dataSet.excelFile=Excel\u6587\u4EF6
|
||||
dataSet.excel.sheetIndex=\u6570\u636ESheet\u7D22\u5F15
|
||||
dataSet.excel.nameRow=\u540D\u79F0\u884C\u53F7
|
||||
dataSet.excel.sheetIndex=\u6570\u636ESheet\u53F7
|
||||
dataSet.excel.sheetIndex.desc=\u6570\u636E\u6240\u5728\u7684Sheet\u53F7\uFF0C\u7B2C\u4E00\u4E2A\u4E3A1\uFF0C\u4F9D\u6B21\u7C7B\u63A8
|
||||
dataSet.excel.nameRow=\u6807\u9898\u884C\u53F7
|
||||
dataSet.excel.nameRow.desc=\u6807\u9898\u884C\u7684\u884C\u53F7\uFF0C\u5C06\u88AB\u89E3\u6790\u4E3A\u6570\u636E\u96C6\u5C5E\u6027\u800C\u975E\u6570\u636E
|
||||
dataSet.excel.nameRow.none=\u65E0
|
||||
dataSet.excel.nameRow.assign=\u6307\u5B9A
|
||||
dataSet.excel.dataRowExp=\u6570\u636E\u884C\u8303\u56F4
|
||||
dataSet.excel.dataRowExp.desc=\u6570\u636E\u884C\u8303\u56F4\uFF08\u9664\u540D\u79F0\u884C\u5916\uFF09\uFF0C\u4F8B\u5982\uFF1A"2, 3-5, 8-"\u8868\u793A\u7B2C2\u884C\u30013\u81F35\u884C\u3001\u5927\u4E8E\u7B49\u4E8E8\u884C\uFF0C\u4E0D\u586B\u8868\u793A\u4E0D\u9650
|
||||
dataSet.excel.dataColumnExp=\u6570\u636E\u5217\u8303\u56F4
|
||||
dataSet.excel.forceXls=\u5F3A\u5236\u4E3Axls\u6587\u4EF6
|
||||
dataSet.excel.dataColumnExp.desc=\u6570\u636E\u5217\u8303\u56F4\uFF0C\u4F8B\u5982\uFF1A"A, B-D, E-"\u8868\u793A\u7B2CA\u5217\u3001B\u81F3D\u5217\u3001\u5927\u4E8E\u7B49\u4E8EE\u5217\uFF0C\u4E0D\u586B\u8868\u793A\u4E0D\u9650
|
||||
dataSet.excel.forceXls=\u5F3A\u5236\u4E3Axls\u683C\u5F0F
|
||||
dataSet.createUser=\u521B\u5EFA\u7528\u6237
|
||||
dataSet.createTime=\u521B\u5EFA\u65F6\u95F4
|
||||
dataSet.param=\u53C2\u6570
|
||||
|
@ -630,6 +637,8 @@ dataSet.DataCategory.DIMENSION=\u7EF4\u5EA6
|
|||
dataSet.DataCategory.SCALAR=\u91CF\u5EA6
|
||||
dataSet.validation.previewRequired=\u8BF7\u5148\u6267\u884C\u9884\u89C8\u786E\u4FDD\u6570\u636E\u6B63\u786E
|
||||
dataSet.validation.propertiesRequired=\u8BF7\u5B9A\u4E49\u6570\u636E\u96C6\u5C5E\u6027
|
||||
dataSet.validation.excel.dataRowExp.regex=\u683C\u5F0F\u9519\u8BEF\uFF0C\u793A\u4F8B\uFF1A"2, 3-5, 8-"
|
||||
dataSet.validation.excel.dataColumnExp.regex=\u683C\u5F0F\u9519\u8BEF\uFF0C\u793A\u4F8B\uFF1A"A, B-D, E-"
|
||||
dataSet.auth.resouceTypeLabel=\u6570\u636E\u96C6
|
||||
dataSet.DataSetParam.name=\u540D\u79F0
|
||||
dataSet.DataSetParam.type=\u7C7B\u578B
|
||||
|
|
|
@ -2235,6 +2235,9 @@ table.dataTable tbody tr td select{
|
|||
.page-form-dataSet .form-foot-placeholder{
|
||||
height: 2.5em;
|
||||
}
|
||||
.page-form-dataSet-jsonFile .encoding-selectmenu-menu .ui-menu{
|
||||
height: 10em;
|
||||
}
|
||||
|
||||
.page-form-chart .chart-plugin{
|
||||
display: inline-block;
|
||||
|
|
|
@ -30,7 +30,6 @@ readonly 是否只读操作,允许为null
|
|||
<input type="hidden" id="${pageId}-originalFileName" value="${(dataSet.fileName)!''?html}" />
|
||||
<input type="hidden" name="fileName" value="${(dataSet.fileName)!''?html}" />
|
||||
<input type="text" name="displayName" value="${(dataSet.displayName)!''?html}" class="file-display-name ui-widget ui-widget-content" readonly="readonly" />
|
||||
<input type="hidden" id="${pageId}-workspaceEditor" value="${(dataSet.fileName)!''?html}" />
|
||||
<#if !readonly>
|
||||
<div class="fileinput-wrapper">
|
||||
<div class="ui-widget ui-corner-all ui-button fileinput-button"><@spring.message code='upload' /><input type="file"></div>
|
||||
|
@ -41,23 +40,41 @@ readonly 是否只读操作,允许为null
|
|||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label">
|
||||
<label><@spring.message code='dataSet.excel.sheetIndex' /></label>
|
||||
<label title="<@spring.message code='dataSet.excel.sheetIndex.desc' />">
|
||||
<@spring.message code='dataSet.excel.sheetIndex' />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="sheetIndex" value="${(dataSet.sheetIndex)!''?html}" class="ui-widget ui-widget-content" />
|
||||
<input type="text" name="sheetIndex" value="${(dataSet.sheetIndex)!''?html}" class="ui-widget ui-widget-content" style="width:41%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label">
|
||||
<label><@spring.message code='dataSet.excel.nameRow' /></label>
|
||||
<label title="<@spring.message code='dataSet.excel.nameRow.desc' />">
|
||||
<@spring.message code='dataSet.excel.nameRow' />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="nameRow" value="${(dataSet.nameRow)!''?html}" class="ui-widget ui-widget-content" />
|
||||
<input type="hidden" name="nameRow" value="${(dataSet.nameRow)!''?html}" class="ui-widget ui-widget-content" />
|
||||
<span class="nameRow-radios">
|
||||
<label for="${pageId}-nameRow_0">
|
||||
<@spring.message code='dataSet.excel.nameRow.none' />
|
||||
</label>
|
||||
<input type="radio" id="${pageId}-nameRow_0" name="nameRowRadio" value="0" />
|
||||
<label for="${pageId}-nameRow_1">
|
||||
<@spring.message code='dataSet.excel.nameRow.assign' />
|
||||
</label>
|
||||
<input type="radio" id="${pageId}-nameRow_1" name="nameRowRadio" value="1" />
|
||||
</span>
|
||||
|
||||
<input type="text" name="nameRowText" value="${(dataSet.nameRow)!''?html}" class="ui-widget ui-widget-content" style="width:4.1em;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label">
|
||||
<label><@spring.message code='dataSet.excel.dataRowExp' /></label>
|
||||
<label title="<@spring.message code='dataSet.excel.dataRowExp.desc' />">
|
||||
<@spring.message code='dataSet.excel.dataRowExp' />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataRowExp" value="${(dataSet.dataRowExp)!''?html}" class="ui-widget ui-widget-content" />
|
||||
|
@ -65,7 +82,9 @@ readonly 是否只读操作,允许为null
|
|||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label">
|
||||
<label><@spring.message code='dataSet.excel.dataColumnExp' /></label>
|
||||
<label title="<@spring.message code='dataSet.excel.dataColumnExp.desc' />">
|
||||
<@spring.message code='dataSet.excel.dataColumnExp' />
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataColumnExp" value="${(dataSet.dataColumnExp)!''?html}" class="ui-widget ui-widget-content" />
|
||||
|
@ -76,7 +95,12 @@ readonly 是否只读操作,允许为null
|
|||
<label><@spring.message code='dataSet.excel.forceXls' /></label>
|
||||
</div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="forceXls" value="${((dataSet.forceXls)!true)?string('true', 'false')}" class="ui-widget ui-widget-content" />
|
||||
<div id="${pageId}-forceXls">
|
||||
<label for="${pageId}-forceXls-true"><@spring.message code='yes' /></label>
|
||||
<input id="${pageId}-forceXls-true" type="radio" name="forceXls" value="true" />
|
||||
<label for="${pageId}-forceXls-false"><@spring.message code='no' /></label>
|
||||
<input id="${pageId}-forceXls-false" type="radio" name="forceXls" value="false" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<#include "include/dataSet_form_html_wow.ftl" >
|
||||
|
@ -104,66 +128,111 @@ readonly 是否只读操作,允许为null
|
|||
po.dataSetParams = <@writeJson var=dataSetParams />;
|
||||
|
||||
$.initButtons(po.element());
|
||||
po.element(".nameRow-radios").controlgroup();
|
||||
po.element("#${pageId}-forceXls").buttonset();
|
||||
po.element("#${pageId}-forceXls-${((dataSet.forceXls)!true)?string('true', 'false')}").click();
|
||||
po.initWorkspaceHeight();
|
||||
po.initWorkspaceTabs();
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.fileNameEditorValue = function(value)
|
||||
po.element("input[name='nameRowRadio']").on("change", function()
|
||||
{
|
||||
var $editor = po.element("#${pageId}-workspaceEditor");
|
||||
var radioVal = $(this).val();
|
||||
var $nameRow = po.element("input[name='nameRow']");
|
||||
var $nameRowText = po.element("input[name='nameRowText']");
|
||||
|
||||
if(radioVal == "0")
|
||||
{
|
||||
$nameRow.val("0");
|
||||
$nameRowText.hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
var myVal = parseInt($nameRowText.val());
|
||||
if(!myVal || myVal < 1)
|
||||
$nameRowText.val("1");
|
||||
|
||||
$nameRowText.show();
|
||||
}
|
||||
});
|
||||
|
||||
po.nameRowValue = function(value)
|
||||
{
|
||||
var $nameRow = po.element("input[name='nameRow']");
|
||||
var $nameRowText = po.element("input[name='nameRowText']");
|
||||
|
||||
if(value === undefined)
|
||||
return $editor.val();
|
||||
{
|
||||
var radioVal = po.element("input[name='nameRowRadio']:checked").val();
|
||||
|
||||
if(radioVal == "0")
|
||||
return $nameRow.val();
|
||||
else
|
||||
return $nameRowText.val();
|
||||
}
|
||||
else
|
||||
$editor.val(value);
|
||||
{
|
||||
$nameRow.val(value);
|
||||
$nameRowText.val(value);
|
||||
|
||||
po.element("input[name='nameRowRadio'][value='"+(value >= 1 ? 1 : 0)+"']").attr("checked", "checked").change();
|
||||
}
|
||||
};
|
||||
|
||||
po.nameRowValue(${(dataSet.nameRow)!"1"});
|
||||
|
||||
po.updatePreviewOptionsData = function()
|
||||
{
|
||||
var dataSet = po.previewOptions.data.dataSet;
|
||||
|
||||
dataSet.fileName = po.element("input[name='fileName']").val();
|
||||
dataSet.sheetIndex = po.element("input[name='sheetIndex']").val();
|
||||
dataSet.nameRow = po.nameRowValue();
|
||||
dataSet.dataRowExp = po.element("input[name='dataRowExp']").val();
|
||||
dataSet.dataColumnExp = po.element("input[name='dataColumnExp']").val();
|
||||
dataSet.forceXls = po.element("input[name='forceXls']:checked").val();
|
||||
|
||||
po.previewOptions.data.originalFileName = po.element("#${pageId}-originalFileName").val();
|
||||
};
|
||||
|
||||
<#if formAction == 'saveEditForExcel'>
|
||||
//初始化预览数据,为po.isPreviewValueModified判断逻辑提供支持
|
||||
po.updatePreviewOptionsData();
|
||||
//编辑操作默认为预览成功
|
||||
po.previewSuccess(true);
|
||||
</#if>
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
return po.isFileNameModified();
|
||||
};
|
||||
|
||||
po.isFileNameModified = function(inputValue, editorValue)
|
||||
{
|
||||
if(inputValue == undefined)
|
||||
inputValue = po.element("input[name='fileName']").val();
|
||||
if(editorValue == undefined)
|
||||
editorValue = po.fileNameEditorValue();
|
||||
var fileName = po.element("input[name='fileName']").val();
|
||||
var sheetIndex = po.element("input[name='sheetIndex']").val();
|
||||
var nameRow = po.nameRowValue();
|
||||
var dataRowExp = po.element("input[name='dataRowExp']").val();
|
||||
var dataColumnExp = po.element("input[name='dataColumnExp']").val();
|
||||
var forceXls = po.element("input[name='forceXls']:checked").val();
|
||||
|
||||
return po.isModifiedIgnoreBlank(inputValue, editorValue);
|
||||
var pd = po.previewOptions.data.dataSet;
|
||||
|
||||
return (pd.fileName != fileName) || (pd.sheetIndex != sheetIndex)
|
||||
|| (pd.nameRow != nameRow) || (pd.dataRowExp != dataRowExp)
|
||||
|| (pd.dataColumnExp != dataColumnExp) || (pd.forceXls != forceXls);
|
||||
};
|
||||
|
||||
po.initWorkspaceTabs();
|
||||
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.previewOptions.url = po.url("previewExcel");
|
||||
po.previewOptions.beforePreview = function()
|
||||
{
|
||||
var fileName = po.fileNameEditorValue();
|
||||
po.updatePreviewOptionsData();
|
||||
|
||||
if(!fileName)
|
||||
if(!this.data.dataSet.fileName)
|
||||
return false;
|
||||
|
||||
this.data.dataSet.fileName = fileName;
|
||||
this.data.dataSet.sheetIndex = po.element("input[name='sheetIndex']").val();
|
||||
this.data.dataSet.nameRow = po.element("input[name='nameRow']").val();
|
||||
this.data.dataSet.dataRowExp = po.element("input[name='dataRowExp']").val();
|
||||
this.data.dataSet.dataColumnExp = po.element("input[name='dataColumnExp']").val();
|
||||
this.data.dataSet.forceXls = po.element("input[name='forceXls']").val();
|
||||
this.data.originalFileName = po.element("#${pageId}-originalFileName").val();
|
||||
};
|
||||
po.previewOptions.beforeRefresh = function()
|
||||
{
|
||||
if(!this.data.dataSet || !this.data.dataSet.fileName)
|
||||
if(!this.data.dataSet.fileName)
|
||||
return false;
|
||||
};
|
||||
po.previewOptions.success = function(previewResponse)
|
||||
{
|
||||
po.element("input[name='fileName']").val(this.data.dataSet.fileName);
|
||||
};
|
||||
|
||||
po.initPreviewOperations();
|
||||
|
||||
|
@ -176,8 +245,8 @@ readonly 是否只读操作,允许为null
|
|||
success : function(uploadResult, textStatus, jqXHR)
|
||||
{
|
||||
$.fileuploadsuccessHandlerForUploadInfo(po.fileUploadInfo(), false);
|
||||
po.element("input[name='fileName']").val(uploadResult.fileName);
|
||||
po.element("input[name='displayName']").val(uploadResult.displayName);
|
||||
po.element("#${pageId}-workspaceEditor").val(uploadResult.fileName);
|
||||
}
|
||||
})
|
||||
.bind('fileuploadadd', function (e, data)
|
||||
|
@ -190,9 +259,29 @@ readonly 是否只读操作,允许为null
|
|||
$.fileuploadprogressallHandlerForUploadInfo(e, data, po.fileUploadInfo());
|
||||
});
|
||||
|
||||
$.validator.addMethod("dataSetExcelFilePreviewRequired", function(value, element)
|
||||
$.validator.addMethod("dataSetExcelPreviewRequired", function(value, element)
|
||||
{
|
||||
return !po.isFileNameModified();
|
||||
return !po.isPreviewValueModified() && po.previewSuccess();
|
||||
});
|
||||
|
||||
$.validator.addMethod("dataSetExcelDataRowExpRegex", function(value, element)
|
||||
{
|
||||
if(!value)
|
||||
return true;
|
||||
|
||||
var regex = /[\d\-\,\s]$/g;
|
||||
|
||||
return regex.test(value);
|
||||
});
|
||||
|
||||
$.validator.addMethod("dataSetExcelDataColumnExpRegex", function(value, element)
|
||||
{
|
||||
if(!value)
|
||||
return true;
|
||||
|
||||
var regex = /([A-Z]|[\-\,\s])$/g;
|
||||
|
||||
return regex.test(value);
|
||||
});
|
||||
|
||||
po.form().validate(
|
||||
|
@ -201,7 +290,11 @@ readonly 是否只读操作,允许为null
|
|||
rules :
|
||||
{
|
||||
"name" : "required",
|
||||
"displayName" : {"required": true, "dataSetExcelFilePreviewRequired": true, "dataSetPropertiesRequired": true}
|
||||
"displayName" : {"required": true, "dataSetExcelPreviewRequired": true, "dataSetPropertiesRequired": true},
|
||||
"sheetIndex": {"required": true, "integer": true, "min": 1},
|
||||
"nameRowText": {"integer": true, "min": 1},
|
||||
"dataRowExp": {"dataSetExcelDataRowExpRegex": true},
|
||||
"dataColumnExp": {"dataSetExcelDataColumnExpRegex": true}
|
||||
},
|
||||
messages :
|
||||
{
|
||||
|
@ -209,15 +302,31 @@ readonly 是否只读操作,允许为null
|
|||
"displayName" :
|
||||
{
|
||||
"required": "<@spring.message code='validation.required' />",
|
||||
"dataSetExcelFilePreviewRequired": "<@spring.message code='dataSet.validation.previewRequired' />",
|
||||
"dataSetExcelPreviewRequired": "<@spring.message code='dataSet.validation.previewRequired' />",
|
||||
"dataSetPropertiesRequired": "<@spring.message code='dataSet.validation.propertiesRequired' />"
|
||||
}
|
||||
},
|
||||
"sheetIndex":
|
||||
{
|
||||
"required": "<@spring.message code='validation.required' />",
|
||||
"integer": "<@spring.message code='validation.integer' />",
|
||||
"min": "<@spring.message code='validation.min' />"
|
||||
},
|
||||
"nameRowText":
|
||||
{
|
||||
"integer": "<@spring.message code='validation.integer' />",
|
||||
"min": "<@spring.message code='validation.min' />"
|
||||
},
|
||||
"dataRowExp": {"dataSetExcelDataRowExpRegex": "<@spring.message code='dataSet.validation.excel.dataRowExp.regex' />"},
|
||||
"dataColumnExp": {"dataSetExcelDataColumnExpRegex": "<@spring.message code='dataSet.validation.excel.dataColumnExp.regex' />"}
|
||||
},
|
||||
submitHandler : function(form)
|
||||
{
|
||||
var formData = $.formToJson(form);
|
||||
formData["properties"] = po.getFormDataSetProperties();
|
||||
formData["params"] = po.getFormDataSetParams();
|
||||
formData["nameRow"] = po.nameRowValue();
|
||||
formData["nameRowRadio"] = undefined;
|
||||
formData["nameRowText"] = undefined;
|
||||
|
||||
var originalFileName = po.element("#${pageId}-originalFileName").val();
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ readonly 是否只读操作,允许为null
|
|||
<input type="hidden" id="${pageId}-originalFileName" value="${(dataSet.fileName)!''?html}" />
|
||||
<input type="hidden" name="fileName" value="${(dataSet.fileName)!''?html}" />
|
||||
<input type="text" name="displayName" value="${(dataSet.displayName)!''?html}" class="file-display-name ui-widget ui-widget-content" readonly="readonly" />
|
||||
<input type="hidden" id="${pageId}-workspaceEditor" value="${(dataSet.fileName)!''?html}" />
|
||||
<#if !readonly>
|
||||
<div class="fileinput-wrapper">
|
||||
<div class="ui-widget ui-corner-all ui-button fileinput-button"><@spring.message code='upload' /><input type="file"></div>
|
||||
|
@ -39,7 +38,7 @@ readonly 是否只读操作,允许为null
|
|||
</#if>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item form-item-encoding">
|
||||
<div class="form-item-label">
|
||||
<label><@spring.message code='dataSet.jsonFileEncoding' /></label>
|
||||
</div>
|
||||
|
@ -78,66 +77,56 @@ readonly 是否只读操作,允许为null
|
|||
$.initButtons(po.element());
|
||||
po.element("select[name='encoding']").selectmenu({ appendTo : po.element(), classes : { "ui-selectmenu-menu" : "encoding-selectmenu-menu" } });
|
||||
po.initWorkspaceHeight();
|
||||
po.initWorkspaceTabs();
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.fileNameEditorValue = function(value)
|
||||
po.updatePreviewOptionsData = function()
|
||||
{
|
||||
var $editor = po.element("#${pageId}-workspaceEditor");
|
||||
var dataSet = po.previewOptions.data.dataSet;
|
||||
|
||||
if(value === undefined)
|
||||
return $editor.val();
|
||||
else
|
||||
$editor.val(value);
|
||||
dataSet.fileName = po.element("input[name='fileName']").val();
|
||||
dataSet.encoding = po.element("select[name='encoding']").val();
|
||||
|
||||
po.previewOptions.data.originalFileName = po.element("#${pageId}-originalFileName").val();
|
||||
};
|
||||
|
||||
<#if formAction == 'saveEditForJsonFile'>
|
||||
//初始化预览数据,为po.isPreviewValueModified判断逻辑提供支持
|
||||
po.updatePreviewOptionsData();
|
||||
//编辑操作默认为预览成功
|
||||
po.previewSuccess(true);
|
||||
</#if>
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
return po.isFileNameModified();
|
||||
};
|
||||
|
||||
po.isFileNameModified = function(inputValue, editorValue)
|
||||
{
|
||||
if(inputValue == undefined)
|
||||
inputValue = po.element("input[name='fileName']").val();
|
||||
if(editorValue == undefined)
|
||||
editorValue = po.fileNameEditorValue();
|
||||
var fileName = po.element("input[name='fileName']").val();
|
||||
var encoding = po.element("select[name='encoding']").val();
|
||||
|
||||
return po.isModifiedIgnoreBlank(inputValue, editorValue);
|
||||
var pd = po.previewOptions.data.dataSet;
|
||||
|
||||
return (pd.fileName != fileName) || (pd.encoding != encoding);
|
||||
};
|
||||
|
||||
po.initWorkspaceTabs();
|
||||
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.previewOptions.url = po.url("previewJsonFile");
|
||||
po.previewOptions.beforePreview = function()
|
||||
{
|
||||
var fileName = po.fileNameEditorValue();
|
||||
po.updatePreviewOptionsData();
|
||||
|
||||
if(!fileName)
|
||||
if(!this.data.dataSet.fileName)
|
||||
return false;
|
||||
|
||||
this.data.dataSet.encoding = po.element("select[name='encoding']").val();
|
||||
this.data.dataSet.fileName = fileName;
|
||||
this.data.originalFileName = po.element("#${pageId}-originalFileName").val();
|
||||
};
|
||||
po.previewOptions.beforeRefresh = function()
|
||||
{
|
||||
if(!this.data.dataSet || !this.data.dataSet.fileName)
|
||||
if(!this.data.dataSet.fileName)
|
||||
return false;
|
||||
};
|
||||
po.previewOptions.success = function(previewResponse)
|
||||
{
|
||||
po.element("input[name='fileName']").val(this.data.dataSet.fileName);
|
||||
};
|
||||
|
||||
po.initPreviewOperations();
|
||||
|
||||
po.fileUploadInfo = function(){ return this.element(".upload-file-info"); };
|
||||
|
||||
|
||||
po.element(".fileinput-button").fileupload(
|
||||
{
|
||||
url : po.url("uploadFile"),
|
||||
|
@ -145,8 +134,8 @@ readonly 是否只读操作,允许为null
|
|||
success : function(uploadResult, textStatus, jqXHR)
|
||||
{
|
||||
$.fileuploadsuccessHandlerForUploadInfo(po.fileUploadInfo(), false);
|
||||
po.element("input[name='fileName']").val(uploadResult.fileName);
|
||||
po.element("input[name='displayName']").val(uploadResult.displayName);
|
||||
po.element("#${pageId}-workspaceEditor").val(uploadResult.fileName);
|
||||
}
|
||||
})
|
||||
.bind('fileuploadadd', function (e, data)
|
||||
|
@ -161,7 +150,7 @@ readonly 是否只读操作,允许为null
|
|||
|
||||
$.validator.addMethod("dataSetJsonFilePreviewRequired", function(value, element)
|
||||
{
|
||||
return !po.isFileNameModified();
|
||||
return !po.isPreviewValueModified() && po.previewSuccess();
|
||||
});
|
||||
|
||||
po.form().validate(
|
||||
|
|
|
@ -60,21 +60,6 @@ readonly 是否只读操作,允许为null
|
|||
$.initButtons(po.element());
|
||||
po.initWorkspaceHeight();
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
return po.isValueModified();
|
||||
};
|
||||
|
||||
po.isValueModified = function(textareaValue, editorValue)
|
||||
{
|
||||
if(textareaValue == undefined)
|
||||
textareaValue = po.element("textarea[name='value']").val();
|
||||
if(editorValue == undefined)
|
||||
editorValue = po.jsonEditor.getValue();
|
||||
|
||||
return po.isModifiedIgnoreBlank(textareaValue, editorValue);
|
||||
};
|
||||
|
||||
var languageTools = ace.require("ace/ext/language_tools");
|
||||
var JsonMode = ace.require("ace/mode/json").Mode;
|
||||
po.jsonEditor = ace.edit("${pageId}-workspaceEditor");
|
||||
|
@ -82,40 +67,54 @@ readonly 是否只读操作,允许为null
|
|||
po.jsonEditor.setShowPrintMargin(false);
|
||||
|
||||
po.initWorkspaceEditor(po.jsonEditor, po.element("textarea[name='value']").val());
|
||||
|
||||
po.initWorkspaceTabs();
|
||||
|
||||
po.getAddPropertyName = function()
|
||||
{
|
||||
var selectionRange = po.jsonEditor.getSelectionRange();
|
||||
return (po.jsonEditor.session.getTextRange(selectionRange) || "");
|
||||
};
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.updatePreviewOptionsData = function()
|
||||
{
|
||||
var value = po.jsonEditor.getValue();
|
||||
|
||||
var dataSet = po.previewOptions.data.dataSet;
|
||||
|
||||
dataSet.value = value;
|
||||
};
|
||||
|
||||
<#if formAction == 'saveEditForJsonValue'>
|
||||
//初始化预览数据,为po.isPreviewValueModified判断逻辑提供支持
|
||||
po.updatePreviewOptionsData();
|
||||
//编辑操作默认为预览成功
|
||||
po.previewSuccess(true);
|
||||
</#if>
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
var value = po.jsonEditor.getValue();
|
||||
|
||||
var pd = po.previewOptions.data.dataSet;
|
||||
|
||||
return (pd.value != value);
|
||||
};
|
||||
|
||||
po.previewOptions.url = po.url("previewJsonValue");
|
||||
po.previewOptions.beforePreview = function()
|
||||
{
|
||||
var value = po.jsonEditor.getValue();
|
||||
po.updatePreviewOptionsData();
|
||||
|
||||
if(!value)
|
||||
if(!this.data.dataSet.value)
|
||||
return false;
|
||||
|
||||
this.data.dataSet.value = value;
|
||||
};
|
||||
po.previewOptions.beforeRefresh = function()
|
||||
{
|
||||
if(!this.data.dataSet || !this.data.dataSet.value)
|
||||
if(!this.data.dataSet.value)
|
||||
return false;
|
||||
};
|
||||
po.previewOptions.success = function(previewResponse)
|
||||
{
|
||||
po.element("textarea[name='value']").val(this.data.dataSet.value);
|
||||
po.jsonEditor.focus();
|
||||
};
|
||||
|
||||
po.initPreviewOperations();
|
||||
|
||||
|
@ -127,7 +126,7 @@ readonly 是否只读操作,允许为null
|
|||
|
||||
$.validator.addMethod("dataSetJsonValuePreviewRequired", function(value, element)
|
||||
{
|
||||
return !po.isValueModified(value);
|
||||
return !po.isPreviewValueModified() && po.previewSuccess();
|
||||
});
|
||||
|
||||
po.form().validate(
|
||||
|
@ -153,6 +152,7 @@ readonly 是否只读操作,允许为null
|
|||
var formData = $.formToJson(form);
|
||||
formData["properties"] = po.getFormDataSetProperties();
|
||||
formData["params"] = po.getFormDataSetParams();
|
||||
formData["value"] = po.jsonEditor.getValue();
|
||||
|
||||
$.postJson("${contextPath}/analysis/dataSet/${formAction}", formData,
|
||||
function(response)
|
||||
|
|
|
@ -80,21 +80,6 @@ readonly 是否只读操作,允许为null
|
|||
|
||||
po.getDataSetSchemaId = function(){ return po.element("input[name='schemaConnectionFactory.schema.id']").val(); };
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
return po.isSqlModified();
|
||||
};
|
||||
|
||||
po.isSqlModified = function(textareaValue, editorValue)
|
||||
{
|
||||
if(textareaValue == undefined)
|
||||
textareaValue = po.element("textarea[name='sql']").val();
|
||||
if(editorValue == undefined)
|
||||
editorValue = po.sqlEditor.getValue();
|
||||
|
||||
return po.isModifiedIgnoreBlank(textareaValue, editorValue);
|
||||
};
|
||||
|
||||
po.element(".select-schema-button").click(function()
|
||||
{
|
||||
var options =
|
||||
|
@ -119,42 +104,57 @@ readonly 是否只读操作,允许为null
|
|||
po.initSqlEditor();
|
||||
|
||||
po.initWorkspaceEditor(po.sqlEditor, po.element("textarea[name='sql']").val());
|
||||
|
||||
po.initWorkspaceTabs();
|
||||
|
||||
po.getAddPropertyName = function()
|
||||
{
|
||||
var selectionRange = po.sqlEditor.getSelectionRange();
|
||||
return (po.sqlEditor.session.getTextRange(selectionRange) || "");
|
||||
};
|
||||
po.initDataSetPropertiesTable(po.dataSetProperties);
|
||||
|
||||
po.initDataSetParamsTable(po.dataSetParams);
|
||||
|
||||
po.initPreviewParamValuePanel();
|
||||
|
||||
po.previewOptions.url = po.url("previewSql");
|
||||
po.previewOptions.beforePreview = function()
|
||||
|
||||
po.updatePreviewOptionsData = function()
|
||||
{
|
||||
var schemaId = po.getDataSetSchemaId();
|
||||
var sql = po.sqlEditor.getValue();
|
||||
|
||||
if(!schemaId || !sql)
|
||||
return false;
|
||||
var dataSet = po.previewOptions.data.dataSet;
|
||||
|
||||
this.data.dataSet.sql = sql;
|
||||
this.data.schemaId = schemaId;
|
||||
dataSet.sql = sql;
|
||||
po.previewOptions.data.schemaId = schemaId;
|
||||
};
|
||||
|
||||
<#if formAction == 'saveEditForSQL'>
|
||||
//初始化预览数据,为po.isPreviewValueModified判断逻辑提供支持
|
||||
po.updatePreviewOptionsData();
|
||||
//编辑操作默认为预览成功
|
||||
po.previewSuccess(true);
|
||||
</#if>
|
||||
|
||||
po.isPreviewValueModified = function()
|
||||
{
|
||||
var schemaId = po.getDataSetSchemaId();
|
||||
var sql = po.sqlEditor.getValue();
|
||||
|
||||
var pd = po.previewOptions.data.dataSet;
|
||||
|
||||
return (pd.sql != sql) || (po.previewOptions.data.schemaId != schemaId);
|
||||
};
|
||||
|
||||
po.previewOptions.url = po.url("previewSql");
|
||||
po.previewOptions.beforePreview = function()
|
||||
{
|
||||
po.updatePreviewOptionsData();
|
||||
|
||||
if(!this.data.dataSet.sql || !this.data.schemaId)
|
||||
return false;
|
||||
};
|
||||
po.previewOptions.beforeRefresh = function()
|
||||
{
|
||||
if(!this.data.dataSet || !this.data.dataSet.sql || !this.data.schemaId)
|
||||
if(!this.data.dataSet.sql || !this.data.schemaId)
|
||||
return false;
|
||||
};
|
||||
po.previewOptions.success = function(previewResponse)
|
||||
{
|
||||
po.element("textarea[name='sql']").val(this.data.dataSet.sql);
|
||||
po.sqlEditor.focus();
|
||||
};
|
||||
|
||||
po.initPreviewOperations();
|
||||
|
||||
|
@ -209,7 +209,7 @@ readonly 是否只读操作,允许为null
|
|||
|
||||
$.validator.addMethod("dataSetSqlPreviewRequired", function(value, element)
|
||||
{
|
||||
return !po.isSqlModified(value);
|
||||
return !po.isPreviewValueModified() && po.previewSuccess();
|
||||
});
|
||||
|
||||
po.form().validate(
|
||||
|
@ -237,6 +237,7 @@ readonly 是否只读操作,允许为null
|
|||
var formData = $.formToJson(form);
|
||||
formData["properties"] = po.getFormDataSetProperties();
|
||||
formData["params"] = po.getFormDataSetParams();
|
||||
formData["sql"] = po.sqlEditor.getValue();
|
||||
|
||||
$.postJson("${contextPath}/analysis/dataSet/${formAction}", formData,
|
||||
function(response)
|
||||
|
|
|
@ -28,6 +28,9 @@ po.previewOptions.url = "...";
|
|||
|
||||
po.isModifiedIgnoreBlank = function(sourceVal, targetVal)
|
||||
{
|
||||
sourceVal = (sourceVal || "");
|
||||
targetVal = (targetVal || "");
|
||||
|
||||
sourceVal = sourceVal.replace(/\s/g, '');
|
||||
targetVal = targetVal.replace(/\s/g, '');
|
||||
|
||||
|
@ -572,6 +575,15 @@ po.previewOptions.url = "...";
|
|||
success: function(previewResponse){}
|
||||
};
|
||||
|
||||
//获取、设置上一次预览是否成功
|
||||
po.previewSuccess = function(success)
|
||||
{
|
||||
if(success === undefined)
|
||||
return po._previewSuccess == true;
|
||||
else
|
||||
po._previewSuccess = success;
|
||||
};
|
||||
|
||||
po.destroyPreviewResultTable = function()
|
||||
{
|
||||
var table = po.previewResultTableElement();
|
||||
|
@ -581,11 +593,13 @@ po.previewOptions.url = "...";
|
|||
table.empty();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
po.initPreviewOperations = function()
|
||||
{
|
||||
po.element(".preview-result-table-wrapper .preview-button").click(function(event)
|
||||
{
|
||||
var previewValueModified = po.isPreviewValueModified();
|
||||
|
||||
if(po.previewOptions.beforePreview() == false)
|
||||
return;
|
||||
|
||||
|
@ -606,7 +620,7 @@ po.previewOptions.url = "...";
|
|||
po.previewOptions.data.dataSet.params = po.getFormDataSetParams();
|
||||
po.previewOptions.data.paramValues = chartFactory.chartForm.getDataSetParamValueObj(this);
|
||||
|
||||
po.executePreview();
|
||||
po.executePreview(previewValueModified);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -617,7 +631,7 @@ po.previewOptions.url = "...";
|
|||
po.previewOptions.data.dataSet.params = [];
|
||||
po.previewOptions.data.paramValues = {};
|
||||
|
||||
po.executePreview();
|
||||
po.executePreview(previewValueModified);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -626,11 +640,11 @@ po.previewOptions.url = "...";
|
|||
if(po.previewOptions.beforeRefresh() == false)
|
||||
return;
|
||||
|
||||
po.executePreview();
|
||||
po.executePreview(false);
|
||||
});
|
||||
};
|
||||
|
||||
po.executePreview = function()
|
||||
po.executePreview = function(previewValueModified)
|
||||
{
|
||||
if(po.previewOptions.beforeRequest() == false)
|
||||
return;
|
||||
|
@ -650,9 +664,11 @@ po.previewOptions.url = "...";
|
|||
data : po.previewOptions.data,
|
||||
success : function(previewResponse)
|
||||
{
|
||||
po.previewSuccess(true);
|
||||
|
||||
//如果工作区内容已变更才更新属性,防止上次保存后的属性被刷新
|
||||
//属性表单内容为空也更新,比如用户删除了所有属性时
|
||||
if(po.isPreviewValueModified() || !po.hasFormDataSetProperty())
|
||||
if(previewValueModified || !po.hasFormDataSetProperty())
|
||||
po.updateFormDataSetProperties(previewResponse.properties);
|
||||
|
||||
var tableData = (previewResponse.result.data || []);
|
||||
|
@ -712,6 +728,10 @@ po.previewOptions.url = "...";
|
|||
|
||||
po.previewOptions.success(previewResponse);
|
||||
},
|
||||
error: function()
|
||||
{
|
||||
po.previewSuccess(false);
|
||||
},
|
||||
complete: function()
|
||||
{
|
||||
$buttons.each(function()
|
||||
|
|
Loading…
Reference in New Issue